diff options
author | zeertzjq <zeertzjq@outlook.com> | 2025-03-07 13:07:50 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2025-03-08 05:45:38 +0800 |
commit | 3824f52e52ef95342788042a69e142e2aef72243 (patch) | |
tree | 1b160b87d8afb42ae3ec00dcd5b91c351407c582 /src | |
parent | 3d49c55d3c33a243f4236cf57b179608c288b145 (diff) | |
download | rneovim-3824f52e52ef95342788042a69e142e2aef72243.tar.gz rneovim-3824f52e52ef95342788042a69e142e2aef72243.tar.bz2 rneovim-3824f52e52ef95342788042a69e142e2aef72243.zip |
refactor(keycodes): generate key_names_table[] using Lua
This allows easier refactoring.
Diffstat (limited to 'src')
-rw-r--r-- | src/gen/gen_keycodes.lua | 19 | ||||
-rw-r--r-- | src/nvim/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/nvim/keycodes.c | 209 | ||||
-rw-r--r-- | src/nvim/keycodes.lua | 206 |
4 files changed, 234 insertions, 208 deletions
diff --git a/src/gen/gen_keycodes.lua b/src/gen/gen_keycodes.lua new file mode 100644 index 0000000000..fff5b59396 --- /dev/null +++ b/src/gen/gen_keycodes.lua @@ -0,0 +1,19 @@ +local names_file = arg[1] + +local keycodes = require('nvim.keycodes') +local keycode_names = keycodes.names + +local names_tgt = assert(io.open(names_file, 'w')) + +names_tgt:write([[ +static const struct key_name_entry { + int key; ///< Special key code or ascii value + const char *name; ///< Name of key +} key_names_table[] = {]]) + +for _, keycode in ipairs(keycode_names) do + names_tgt:write(('\n {%s, "%s"},'):format(keycode[1], keycode[2])) +end + +names_tgt:write('\n {0, NULL},\n};\n') +names_tgt:close() diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 36bcd5fbce..39c78b3228 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -304,6 +304,7 @@ set(CHAR_BLOB_GENERATOR ${GENERATOR_DIR}/gen_char_blob.lua) set(EVENTS_GENERATOR ${GENERATOR_DIR}/gen_events.lua) set(EX_CMDS_GENERATOR ${GENERATOR_DIR}/gen_ex_cmds.lua) set(FUNCS_GENERATOR ${GENERATOR_DIR}/gen_eval.lua) +set(KEYCODES_GENERATOR ${GENERATOR_DIR}/gen_keycodes.lua) set(GENERATOR_C_GRAMMAR ${GENERATOR_DIR}/c_grammar.lua) set(GENERATOR_HASHY ${GENERATOR_DIR}/hashy.lua) set(GENERATOR_PRELOAD ${GENERATOR_DIR}/preload_nlua.lua) @@ -318,6 +319,7 @@ set(GENERATED_EVENTS_NAMES_MAP ${GENERATED_DIR}/auevents_name_map.generated.h) set(GENERATED_EX_CMDS_DEFS ${GENERATED_DIR}/ex_cmds_defs.generated.h) set(GENERATED_EX_CMDS_ENUM ${GENERATED_INCLUDES_DIR}/ex_cmds_enum.generated.h) set(GENERATED_FUNCS ${GENERATED_DIR}/funcs.generated.h) +set(GENERATED_KEYCODE_NAMES ${GENERATED_DIR}/keycode_names.generated.h) set(GENERATED_API_METADATA ${GENERATED_DIR}/api/private/api_metadata.generated.h) set(GENERATED_KEYSETS_DEFS ${GENERATED_DIR}/keysets_defs.generated.h) set(GENERATED_OPTIONS ${GENERATED_DIR}/options.generated.h) @@ -673,6 +675,7 @@ list(APPEND NVIM_GENERATED_FOR_SOURCES "${GENERATED_API_DISPATCH}" "${GENERATED_EX_CMDS_DEFS}" "${GENERATED_EVENTS_NAMES_MAP}" + "${GENERATED_KEYCODE_NAMES}" "${GENERATED_OPTIONS}" "${GENERATED_OPTIONS_MAP}" "${VIM_MODULE_FILE}" @@ -696,6 +699,11 @@ add_custom_command(OUTPUT ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP} DEPENDS ${LUA_GEN_DEPS} ${EVENTS_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}/auevents.lua ) +add_custom_command(OUTPUT ${GENERATED_KEYCODE_NAMES} + COMMAND ${LUA_GEN} ${KEYCODES_GENERATOR} ${GENERATED_KEYCODE_NAMES} + DEPENDS ${LUA_GEN_DEPS} ${KEYCODES_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}/keycodes.lua +) + add_custom_command(OUTPUT ${GENERATED_OPTIONS} ${GENERATED_OPTIONS_ENUM} ${GENERATED_OPTIONS_MAP} ${GENERATED_OPTION_VARS} COMMAND ${LUA_GEN} ${OPTIONS_GENERATOR} ${GENERATED_OPTIONS} ${GENERATED_OPTIONS_ENUM} ${GENERATED_OPTIONS_MAP} ${GENERATED_OPTION_VARS} DEPENDS ${LUA_GEN_DEPS} ${OPTIONS_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}/options.lua diff --git a/src/nvim/keycodes.c b/src/nvim/keycodes.c index b6ba73f7c1..ff5b036817 100644 --- a/src/nvim/keycodes.c +++ b/src/nvim/keycodes.c @@ -24,6 +24,7 @@ #include "nvim/strings.h" #ifdef INCLUDE_GENERATED_DECLARATIONS +# include "keycode_names.generated.h" # include "keycodes.c.generated.h" #endif @@ -142,214 +143,6 @@ static uint8_t modifier_keys_table[] = { NUL }; -static const struct key_name_entry { - int key; // Special key code or ascii value - const char *name; // Name of key -} key_names_table[] = { - { ' ', "Space" }, - { TAB, "Tab" }, - { K_TAB, "Tab" }, - { NL, "NL" }, - { NL, "NewLine" }, // Alternative name - { NL, "LineFeed" }, // Alternative name - { NL, "LF" }, // Alternative name - { CAR, "CR" }, - { CAR, "Return" }, // Alternative name - { CAR, "Enter" }, // Alternative name - { K_BS, "BS" }, - { K_BS, "BackSpace" }, // Alternative name - { ESC, "Esc" }, - { ESC, "Escape" }, // Alternative name - { CSI, "CSI" }, - { '|', "Bar" }, - { '\\', "Bslash" }, - { K_DEL, "Del" }, - { K_DEL, "Delete" }, // Alternative name - { K_KDEL, "kDel" }, - { K_KDEL, "KPPeriod" }, // libtermkey name - { K_UP, "Up" }, - { K_DOWN, "Down" }, - { K_LEFT, "Left" }, - { K_RIGHT, "Right" }, - { K_XUP, "xUp" }, - { K_XDOWN, "xDown" }, - { K_XLEFT, "xLeft" }, - { K_XRIGHT, "xRight" }, - { K_KUP, "kUp" }, - { K_KUP, "KP8" }, - { K_KDOWN, "kDown" }, - { K_KDOWN, "KP2" }, - { K_KLEFT, "kLeft" }, - { K_KLEFT, "KP4" }, - { K_KRIGHT, "kRight" }, - { K_KRIGHT, "KP6" }, - - { K_F1, "F1" }, - { K_F2, "F2" }, - { K_F3, "F3" }, - { K_F4, "F4" }, - { K_F5, "F5" }, - { K_F6, "F6" }, - { K_F7, "F7" }, - { K_F8, "F8" }, - { K_F9, "F9" }, - { K_F10, "F10" }, - - { K_F11, "F11" }, - { K_F12, "F12" }, - { K_F13, "F13" }, - { K_F14, "F14" }, - { K_F15, "F15" }, - { K_F16, "F16" }, - { K_F17, "F17" }, - { K_F18, "F18" }, - { K_F19, "F19" }, - { K_F20, "F20" }, - - { K_F21, "F21" }, - { K_F22, "F22" }, - { K_F23, "F23" }, - { K_F24, "F24" }, - { K_F25, "F25" }, - { K_F26, "F26" }, - { K_F27, "F27" }, - { K_F28, "F28" }, - { K_F29, "F29" }, - { K_F30, "F30" }, - - { K_F31, "F31" }, - { K_F32, "F32" }, - { K_F33, "F33" }, - { K_F34, "F34" }, - { K_F35, "F35" }, - { K_F36, "F36" }, - { K_F37, "F37" }, - { K_F38, "F38" }, - { K_F39, "F39" }, - { K_F40, "F40" }, - - { K_F41, "F41" }, - { K_F42, "F42" }, - { K_F43, "F43" }, - { K_F44, "F44" }, - { K_F45, "F45" }, - { K_F46, "F46" }, - { K_F47, "F47" }, - { K_F48, "F48" }, - { K_F49, "F49" }, - { K_F50, "F50" }, - - { K_F51, "F51" }, - { K_F52, "F52" }, - { K_F53, "F53" }, - { K_F54, "F54" }, - { K_F55, "F55" }, - { K_F56, "F56" }, - { K_F57, "F57" }, - { K_F58, "F58" }, - { K_F59, "F59" }, - { K_F60, "F60" }, - - { K_F61, "F61" }, - { K_F62, "F62" }, - { K_F63, "F63" }, - - { K_XF1, "xF1" }, - { K_XF2, "xF2" }, - { K_XF3, "xF3" }, - { K_XF4, "xF4" }, - - { K_HELP, "Help" }, - { K_UNDO, "Undo" }, - { K_FIND, "Find" }, // DEC key, often used as 'Home' - { K_KSELECT, "Select" }, // DEC key, often used as 'End' - { K_INS, "Insert" }, - { K_INS, "Ins" }, // Alternative name - { K_KINS, "kInsert" }, - { K_KINS, "KP0" }, - { K_HOME, "Home" }, - { K_KHOME, "kHome" }, - { K_KHOME, "KP7" }, - { K_XHOME, "xHome" }, - { K_ZHOME, "zHome" }, - { K_END, "End" }, - { K_KEND, "kEnd" }, - { K_KEND, "KP1" }, - { K_XEND, "xEnd" }, - { K_ZEND, "zEnd" }, - { K_PAGEUP, "PageUp" }, - { K_PAGEDOWN, "PageDown" }, - { K_KPAGEUP, "kPageUp" }, - { K_KPAGEUP, "KP9" }, - { K_KPAGEDOWN, "kPageDown" }, - { K_KPAGEDOWN, "KP3" }, - { K_KORIGIN, "kOrigin" }, - { K_KORIGIN, "KP5" }, - - { K_KPLUS, "kPlus" }, - { K_KPLUS, "KPPlus" }, - { K_KMINUS, "kMinus" }, - { K_KMINUS, "KPMinus" }, - { K_KDIVIDE, "kDivide" }, - { K_KDIVIDE, "KPDiv" }, - { K_KMULTIPLY, "kMultiply" }, - { K_KMULTIPLY, "KPMult" }, - { K_KENTER, "kEnter" }, - { K_KENTER, "KPEnter" }, - { K_KPOINT, "kPoint" }, - { K_KCOMMA, "kComma" }, - { K_KCOMMA, "KPComma" }, - { K_KEQUAL, "kEqual" }, - { K_KEQUAL, "KPEquals" }, - - { K_K0, "k0" }, - { K_K1, "k1" }, - { K_K2, "k2" }, - { K_K3, "k3" }, - { K_K4, "k4" }, - { K_K5, "k5" }, - { K_K6, "k6" }, - { K_K7, "k7" }, - { K_K8, "k8" }, - { K_K9, "k9" }, - - { '<', "lt" }, - - { K_MOUSE, "Mouse" }, - { K_LEFTMOUSE, "LeftMouse" }, - { K_LEFTMOUSE_NM, "LeftMouseNM" }, - { K_LEFTDRAG, "LeftDrag" }, - { K_LEFTRELEASE, "LeftRelease" }, - { K_LEFTRELEASE_NM, "LeftReleaseNM" }, - { K_MOUSEMOVE, "MouseMove" }, - { K_MIDDLEMOUSE, "MiddleMouse" }, - { K_MIDDLEDRAG, "MiddleDrag" }, - { K_MIDDLERELEASE, "MiddleRelease" }, - { K_RIGHTMOUSE, "RightMouse" }, - { K_RIGHTDRAG, "RightDrag" }, - { K_RIGHTRELEASE, "RightRelease" }, - { K_MOUSEDOWN, "ScrollWheelUp" }, - { K_MOUSEUP, "ScrollWheelDown" }, - { K_MOUSELEFT, "ScrollWheelRight" }, - { K_MOUSERIGHT, "ScrollWheelLeft" }, - { K_MOUSEDOWN, "MouseDown" }, // OBSOLETE: Use - { K_MOUSEUP, "MouseUp" }, // ScrollWheelXXX instead - { K_X1MOUSE, "X1Mouse" }, - { K_X1DRAG, "X1Drag" }, - { K_X1RELEASE, "X1Release" }, - { K_X2MOUSE, "X2Mouse" }, - { K_X2DRAG, "X2Drag" }, - { K_X2RELEASE, "X2Release" }, - { K_DROP, "Drop" }, - { K_ZERO, "Nul" }, - { K_SNR, "SNR" }, - { K_PLUG, "Plug" }, - { K_IGNORE, "Ignore" }, - { K_COMMAND, "Cmd" }, - { 0, NULL } - // NOTE: When adding a long name update MAX_KEY_NAME_LEN. -}; - static struct mousetable { int pseudo_code; // Code for pseudo mouse event int button; // Which mouse button is it? diff --git a/src/nvim/keycodes.lua b/src/nvim/keycodes.lua new file mode 100644 index 0000000000..c6158b0b84 --- /dev/null +++ b/src/nvim/keycodes.lua @@ -0,0 +1,206 @@ +return { + --- @type [string, string][] List of [key, name] tuples. + names = { + { [[' ']], 'Space' }, + { [[TAB]], 'Tab' }, + { [[K_TAB]], 'Tab' }, + { [[NL]], 'NL' }, + { [[NL]], 'NewLine' }, -- Alternative name + { [[NL]], 'LineFeed' }, -- Alternative name + { [[NL]], 'LF' }, -- Alternative name + { [[CAR]], 'CR' }, + { [[CAR]], 'Return' }, -- Alternative name + { [[CAR]], 'Enter' }, -- Alternative name + { [[K_BS]], 'BS' }, + { [[K_BS]], 'BackSpace' }, -- Alternative name + { [[ESC]], 'Esc' }, + { [[ESC]], 'Escape' }, -- Alternative name + { [[CSI]], 'CSI' }, + { [['|']], 'Bar' }, + { [['\\']], 'Bslash' }, + { [[K_DEL]], 'Del' }, + { [[K_DEL]], 'Delete' }, -- Alternative name + { [[K_KDEL]], 'kDel' }, + { [[K_KDEL]], 'KPPeriod' }, -- libtermkey name + { [[K_UP]], 'Up' }, + { [[K_DOWN]], 'Down' }, + { [[K_LEFT]], 'Left' }, + { [[K_RIGHT]], 'Right' }, + { [[K_XUP]], 'xUp' }, + { [[K_XDOWN]], 'xDown' }, + { [[K_XLEFT]], 'xLeft' }, + { [[K_XRIGHT]], 'xRight' }, + { [[K_KUP]], 'kUp' }, + { [[K_KUP]], 'KP8' }, + { [[K_KDOWN]], 'kDown' }, + { [[K_KDOWN]], 'KP2' }, + { [[K_KLEFT]], 'kLeft' }, + { [[K_KLEFT]], 'KP4' }, + { [[K_KRIGHT]], 'kRight' }, + { [[K_KRIGHT]], 'KP6' }, + + { [[K_F1]], 'F1' }, + { [[K_F2]], 'F2' }, + { [[K_F3]], 'F3' }, + { [[K_F4]], 'F4' }, + { [[K_F5]], 'F5' }, + { [[K_F6]], 'F6' }, + { [[K_F7]], 'F7' }, + { [[K_F8]], 'F8' }, + { [[K_F9]], 'F9' }, + { [[K_F10]], 'F10' }, + + { [[K_F11]], 'F11' }, + { [[K_F12]], 'F12' }, + { [[K_F13]], 'F13' }, + { [[K_F14]], 'F14' }, + { [[K_F15]], 'F15' }, + { [[K_F16]], 'F16' }, + { [[K_F17]], 'F17' }, + { [[K_F18]], 'F18' }, + { [[K_F19]], 'F19' }, + { [[K_F20]], 'F20' }, + + { [[K_F21]], 'F21' }, + { [[K_F22]], 'F22' }, + { [[K_F23]], 'F23' }, + { [[K_F24]], 'F24' }, + { [[K_F25]], 'F25' }, + { [[K_F26]], 'F26' }, + { [[K_F27]], 'F27' }, + { [[K_F28]], 'F28' }, + { [[K_F29]], 'F29' }, + { [[K_F30]], 'F30' }, + + { [[K_F31]], 'F31' }, + { [[K_F32]], 'F32' }, + { [[K_F33]], 'F33' }, + { [[K_F34]], 'F34' }, + { [[K_F35]], 'F35' }, + { [[K_F36]], 'F36' }, + { [[K_F37]], 'F37' }, + { [[K_F38]], 'F38' }, + { [[K_F39]], 'F39' }, + { [[K_F40]], 'F40' }, + + { [[K_F41]], 'F41' }, + { [[K_F42]], 'F42' }, + { [[K_F43]], 'F43' }, + { [[K_F44]], 'F44' }, + { [[K_F45]], 'F45' }, + { [[K_F46]], 'F46' }, + { [[K_F47]], 'F47' }, + { [[K_F48]], 'F48' }, + { [[K_F49]], 'F49' }, + { [[K_F50]], 'F50' }, + + { [[K_F51]], 'F51' }, + { [[K_F52]], 'F52' }, + { [[K_F53]], 'F53' }, + { [[K_F54]], 'F54' }, + { [[K_F55]], 'F55' }, + { [[K_F56]], 'F56' }, + { [[K_F57]], 'F57' }, + { [[K_F58]], 'F58' }, + { [[K_F59]], 'F59' }, + { [[K_F60]], 'F60' }, + + { [[K_F61]], 'F61' }, + { [[K_F62]], 'F62' }, + { [[K_F63]], 'F63' }, + + { [[K_XF1]], 'xF1' }, + { [[K_XF2]], 'xF2' }, + { [[K_XF3]], 'xF3' }, + { [[K_XF4]], 'xF4' }, + + { [[K_HELP]], 'Help' }, + { [[K_UNDO]], 'Undo' }, + { [[K_FIND]], 'Find' }, -- DEC key, often used as 'Home' + { [[K_KSELECT]], 'Select' }, -- DEC key, often used as 'End' + { [[K_INS]], 'Insert' }, + { [[K_INS]], 'Ins' }, -- Alternative name + { [[K_KINS]], 'kInsert' }, + { [[K_KINS]], 'KP0' }, + { [[K_HOME]], 'Home' }, + { [[K_KHOME]], 'kHome' }, + { [[K_KHOME]], 'KP7' }, + { [[K_XHOME]], 'xHome' }, + { [[K_ZHOME]], 'zHome' }, + { [[K_END]], 'End' }, + { [[K_KEND]], 'kEnd' }, + { [[K_KEND]], 'KP1' }, + { [[K_XEND]], 'xEnd' }, + { [[K_ZEND]], 'zEnd' }, + { [[K_PAGEUP]], 'PageUp' }, + { [[K_PAGEDOWN]], 'PageDown' }, + { [[K_KPAGEUP]], 'kPageUp' }, + { [[K_KPAGEUP]], 'KP9' }, + { [[K_KPAGEDOWN]], 'kPageDown' }, + { [[K_KPAGEDOWN]], 'KP3' }, + { [[K_KORIGIN]], 'kOrigin' }, + { [[K_KORIGIN]], 'KP5' }, + + { [[K_KPLUS]], 'kPlus' }, + { [[K_KPLUS]], 'KPPlus' }, + { [[K_KMINUS]], 'kMinus' }, + { [[K_KMINUS]], 'KPMinus' }, + { [[K_KDIVIDE]], 'kDivide' }, + { [[K_KDIVIDE]], 'KPDiv' }, + { [[K_KMULTIPLY]], 'kMultiply' }, + { [[K_KMULTIPLY]], 'KPMult' }, + { [[K_KENTER]], 'kEnter' }, + { [[K_KENTER]], 'KPEnter' }, + { [[K_KPOINT]], 'kPoint' }, + { [[K_KCOMMA]], 'kComma' }, + { [[K_KCOMMA]], 'KPComma' }, + { [[K_KEQUAL]], 'kEqual' }, + { [[K_KEQUAL]], 'KPEquals' }, + + { [[K_K0]], 'k0' }, + { [[K_K1]], 'k1' }, + { [[K_K2]], 'k2' }, + { [[K_K3]], 'k3' }, + { [[K_K4]], 'k4' }, + { [[K_K5]], 'k5' }, + { [[K_K6]], 'k6' }, + { [[K_K7]], 'k7' }, + { [[K_K8]], 'k8' }, + { [[K_K9]], 'k9' }, + + { [['<']], 'lt' }, + + { [[K_MOUSE]], 'Mouse' }, + { [[K_LEFTMOUSE]], 'LeftMouse' }, + { [[K_LEFTMOUSE_NM]], 'LeftMouseNM' }, + { [[K_LEFTDRAG]], 'LeftDrag' }, + { [[K_LEFTRELEASE]], 'LeftRelease' }, + { [[K_LEFTRELEASE_NM]], 'LeftReleaseNM' }, + { [[K_MOUSEMOVE]], 'MouseMove' }, + { [[K_MIDDLEMOUSE]], 'MiddleMouse' }, + { [[K_MIDDLEDRAG]], 'MiddleDrag' }, + { [[K_MIDDLERELEASE]], 'MiddleRelease' }, + { [[K_RIGHTMOUSE]], 'RightMouse' }, + { [[K_RIGHTDRAG]], 'RightDrag' }, + { [[K_RIGHTRELEASE]], 'RightRelease' }, + { [[K_MOUSEDOWN]], 'ScrollWheelUp' }, + { [[K_MOUSEUP]], 'ScrollWheelDown' }, + { [[K_MOUSELEFT]], 'ScrollWheelRight' }, + { [[K_MOUSERIGHT]], 'ScrollWheelLeft' }, + { [[K_MOUSEDOWN]], 'MouseDown' }, -- OBSOLETE: Use ScrollWheelUp instead + { [[K_MOUSEUP]], 'MouseUp' }, -- OBSOLETE: Use ScrollWheelDown instead + { [[K_X1MOUSE]], 'X1Mouse' }, + { [[K_X1DRAG]], 'X1Drag' }, + { [[K_X1RELEASE]], 'X1Release' }, + { [[K_X2MOUSE]], 'X2Mouse' }, + { [[K_X2DRAG]], 'X2Drag' }, + { [[K_X2RELEASE]], 'X2Release' }, + { [[K_DROP]], 'Drop' }, + { [[K_ZERO]], 'Nul' }, + { [[K_SNR]], 'SNR' }, + { [[K_PLUG]], 'Plug' }, + { [[K_IGNORE]], 'Ignore' }, + { [[K_COMMAND]], 'Cmd' }, + -- NOTE: When adding a long name update MAX_KEY_NAME_LEN. + }, +} |