-
-
Notifications
You must be signed in to change notification settings - Fork 17
keymaps
Ronald Record edited this page Jul 18, 2023
·
6 revisions
The information.sh script used to auto-generate Neovim
configuration info documents invokes the keymaps.sh script to
generate tables of keymaps for each configuration. These are added to
the configuration info documents.
View the supported configurations info docs.
The source code for the keymaps.sh script:
#!/usr/bin/env bash # # Mapping modes: # n Normal # v Visual and Select # s Select # x Visual # o Operator-pending # i Insert # l ":lmap" mappings for Insert, Command-line and Lang-Arg # c Command-line # t Terminal-Job debug= [ "1ドル" == "-d" ] && { debug=1 shift } CFNAME="1ドル" OUT="2ドル" if [ -d "${HOME}/.config/nvim-${CFNAME}" ] then export NVIM_APPNAME="nvim-${CFNAME}" else if [ -d "${HOME}/.config/${CFNAME}" ] then export NVIM_APPNAME="${CFNAME}" else exit 1 fi fi KEYTMP="${HOME}/.config/nvim-Lazyman/tmp" OUTDIR=$(dirname "${OUT}") [ -d "${KEYTMP}" ] || mkdir -p "${KEYTMP}" [ -d "${OUTDIR}" ] || mkdir -p "${OUTDIR}" echo "local normal_mode = " > "${KEYTMP}"/${CFNAME}.lua echo "" >> "${KEYTMP}"/${CFNAME}.lua nvim --headless '+lua vim.print(vim.api.nvim_get_keymap("n"))' +qa >> "${KEYTMP}"/${CFNAME}.lua 2>&1 printf "\n\nlocal visual_mode = " >> "${KEYTMP}"/${CFNAME}.lua echo "" >> "${KEYTMP}"/${CFNAME}.lua nvim --headless '+lua vim.print(vim.api.nvim_get_keymap("x"))' +qa >> "${KEYTMP}"/${CFNAME}.lua 2>&1 printf "\n\nlocal operator_mode = " >> "${KEYTMP}"/${CFNAME}.lua echo "" >> "${KEYTMP}"/${CFNAME}.lua nvim --headless '+lua vim.print(vim.api.nvim_get_keymap("o"))' +qa >> "${KEYTMP}"/${CFNAME}.lua 2>&1 have_dtox=$(type -p dtox) if [ "${have_dtox}" ] then dtox "${KEYTMP}"/${CFNAME}.lua else have_dos=$(type -p dos2unix) if [ "${have_dos}" ] then dos2unix "${KEYTMP}"/${CFNAME}.lua else echo "Unable to perform DOS to UNIX conversion" fi fi echo "" >> "${OUT}" echo "### ${CFNAME} Keymaps" >> "${OUT}" cat "${KEYTMP}"/${CFNAME}.lua | sed -e "s/{ {$/\n{ {/" | \ grep -v callback | grep -v "^\[" | grep -v ^Error | \ grep -v ^Fail | grep -v ^Some | grep -v ^\& | grep -v ^sh | \ grep -v ^Tele | grep -v ^Lua | grep -v ^Two | grep -i -v ^vim | \ grep -v ^stack | grep -v "[[:space:]]/home/" | grep -v ^mkdir | \ grep -v "[[:space:]]\[C\]" | grep -v ^down | grep -v ^cwd | \ grep -v "^\.\.\." | grep -v "[[:space:]]\.\.\." | grep -v "^\# stack" | \ grep -v -- "[[:space:]]- " | grep -v ^Install | grep -v ^Welcome | \ grep -v "[[:space:]]vim/" | grep -v ^run | grep -v ^plea | \ grep -v ^Plugin | grep -v -- ^- > /tmp/${CFNAME}$$.lua for mode in "normal" "visual" "operator" do cp /tmp/${CFNAME}$$.lua "${KEYTMP}"/${CFNAME}.lua echo "" >> "${KEYTMP}"/${CFNAME}.lua echo "for k,v in pairs(${mode}_mode) do" >> "${KEYTMP}"/${CFNAME}.lua echo " if v.desc ~= nil then" >> "${KEYTMP}"/${CFNAME}.lua echo " io.write('| ' .. v.desc)" >> "${KEYTMP}"/${CFNAME}.lua echo " else" >> "${KEYTMP}"/${CFNAME}.lua echo " io.write('| ')" >> "${KEYTMP}"/${CFNAME}.lua echo " end" >> "${KEYTMP}"/${CFNAME}.lua echo " if v.lhs ~= nil then" >> "${KEYTMP}"/${CFNAME}.lua echo " io.write(' | ' .. v.lhs)" >> "${KEYTMP}"/${CFNAME}.lua echo " else" >> "${KEYTMP}"/${CFNAME}.lua echo " io.write(' | ')" >> "${KEYTMP}"/${CFNAME}.lua echo " end" >> "${KEYTMP}"/${CFNAME}.lua echo " if v.rhs ~= nil then" >> "${KEYTMP}"/${CFNAME}.lua echo ' io.write(" | " .. v.rhs .. " |\n")' >> "${KEYTMP}"/${CFNAME}.lua echo " else" >> "${KEYTMP}"/${CFNAME}.lua echo ' io.write(" | |\n")' >> "${KEYTMP}"/${CFNAME}.lua echo " end" >> "${KEYTMP}"/${CFNAME}.lua echo "end" >> "${KEYTMP}"/${CFNAME}.lua echo "" >> "${OUT}" echo "#### ${mode} mode keymaps" >> "${OUT}" echo "" >> "${OUT}" echo "| Description | LHS | RHS |" >> "${OUT}" echo "| ----------- | --- | --- |" >> "${OUT}" lua "${KEYTMP}"/${CFNAME}.lua >> "${OUT}" [ "${debug}" ] && cp "${KEYTMP}"/${CFNAME}.lua "${KEYTMP}"/${CFNAME}-debug.lua done rm -f "${KEYTMP}"/${CFNAME}.lua rm -f /tmp/${CFNAME}$$.lua
The keymaps tables are styled with the following CSS:
html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } body { color: #444; font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; font-size: 12px; line-height: 1.7; padding: 1em; margin: auto; max-width: 42em; background: #fefefe; } a { color: #0645ad; text-decoration: none; } a:visited { color: #0b0080; } a:hover { color: #06e; } a:active { color: #faa700; } a:focus { outline: thin dotted; } *::-moz-selection { background: rgba(255, 255, 0, 0.3); color: #000; } *::selection { background: rgba(255, 255, 0, 0.3); color: #000; } a::-moz-selection { background: rgba(255, 255, 0, 0.3); color: #0645ad; } a::selection { background: rgba(255, 255, 0, 0.3); color: #0645ad; } p { margin: 1em 0; } img { max-width: 100%; } h1, h2, h3, h4, h5, h6 { color: #111; line-height: 125%; margin-top: 2em; font-weight: normal; } h4, h5, h6 { font-weight: bold; } h1 { font-size: 2.5em; } h2 { font-size: 2em; } h3 { font-size: 1.5em; } h4 { font-size: 1.2em; } h5 { font-size: 1em; } h6 { font-size: 0.9em; } blockquote { color: #666666; margin: 0; padding-left: 3em; border-left: 0.5em #EEE solid; } hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa; border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; } pre, code, kbd, samp { color: #000; font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 0.98em; } pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } b, strong { font-weight: bold; } dfn { font-style: italic; } ins { background: #ff9; color: #000; text-decoration: none; } mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } ul, ol { margin: 1em 0; padding: 0 0 0 2em; } li p:last-child { margin-bottom: 0; } ul ul, ol ol { margin: .3em 0; } dl { margin-bottom: 1em; } dt { font-weight: bold; margin-bottom: .8em; } dd { margin: 0 0 .8em 2em; } dd:last-child { margin-bottom: 0; } img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; } figure { display: block; text-align: center; margin: 1em 0; } figure img { border: none; margin: 0 auto; } figcaption { font-size: 0.8em; font-style: italic; margin: 0 0 .8em; } table { border-collapse: collapse; width: 100%; color: #333; font-family: Arial, sans-serif; font-size: 14px; text-align: left; border-radius: 10px; overflow: hidden; box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); margin: auto; margin-top: 50px; margin-bottom: 50px; } table th { background-color: #ff9800; color: #fff; font-weight: bold; padding: 10px; text-transform: uppercase; letter-spacing: 1px; border-top: 1px solid #fff; border-bottom: 1px solid #ccc; } table tr:nth-child(even) td { background-color: #f2f2f2; } table tr:hover td { background-color: #ffedcc; } table td { background-color: #fff; padding: 10px; border-bottom: 1px solid #ccc; font-weight: bold; } .author { font-size: 1.2em; text-align: center; } @media only screen and (min-width: 480px) { body { font-size: 14px; } } @media only screen and (min-width: 768px) { body { font-size: 16px; } } @media print { * { background: transparent !important; color: black !important; filter: none !important; -ms-filter: none !important; } body { font-size: 12pt; max-width: 100%; } a, a:visited { text-decoration: underline; } hr { height: 1px; border: 0; border-bottom: 1px solid black; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } @page :left { margin: 15mm 20mm 15mm 10mm; } @page :right { margin: 15mm 10mm 15mm 20mm; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } }