-
-
Notifications
You must be signed in to change notification settings - Fork 18
keymaps
Ronald Record edited this page Jul 17, 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.
The keymaps tables are styled with the following CSS:
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;
}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}"
grep -v callback "${KEYTMP}"/${CFNAME}.lua | 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 -- ^- > /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