diff options
Diffstat (limited to 'modules/TUI')
| -rw-r--r-- | modules/TUI/module.jai | 663 |
1 files changed, 399 insertions, 264 deletions
diff --git a/modules/TUI/module.jai b/modules/TUI/module.jai index ed3f517..a5f5837 100644 --- a/modules/TUI/module.jai +++ b/modules/TUI/module.jai @@ -163,252 +163,6 @@ Key :: u64; // Terminal key-codes have 1 to 6 bytes so we'll use 8 bytes. KEY_SIZE :: #run type_info(Key).runtime_size; -Keys :: struct #type_info_none { - None : Key : #run to_key("#NONE"); - Resize : Key : #run to_key("#RESIZE"); - - Space : Key : #char " "; - Enter : Key : #char "\r"; - Tab : Key : #char "\t"; - - Up : Key : #run to_key("\e[A"); - Down : Key : #run to_key("\e[B"); - Right : Key : #run to_key("\e[C"); - Left : Key : #run to_key("\e[D"); - - MetaUp : Key : #run to_key("\e[1;1A"); - MetaDown : Key : #run to_key("\e[1;1B"); - MetaRight : Key : #run to_key("\e[1;1C"); - MetaLeft : Key : #run to_key("\e[1;1D"); - - ShiftUp : Key : #run to_key("\e[1;2A"); - ShiftDown : Key : #run to_key("\e[1;2B"); - ShiftRight : Key : #run to_key("\e[1;2C"); - ShiftLeft : Key : #run to_key("\e[1;2D"); - - AltUp : Key : #run to_key("\e[1;3A"); - AltDown : Key : #run to_key("\e[1;3B"); - AltRight : Key : #run to_key("\e[1;3C"); - AltLeft : Key : #run to_key("\e[1;3D"); - - AltShiftUp : Key : #run to_key("\e[1;4A"); - AltShiftDown : Key : #run to_key("\e[1;4B"); - AltShiftRight : Key : #run to_key("\e[1;4C"); - AltShiftLeft : Key : #run to_key("\e[1;4D"); - - CtrlUp : Key : #run to_key("\e[1;5A"); - CtrlDown : Key : #run to_key("\e[1;5B"); - CtrlRight : Key : #run to_key("\e[1;5C"); - CtrlLeft : Key : #run to_key("\e[1;5D"); - - CtrlShiftUp : Key : #run to_key("\e[1;6A"); - CtrlShiftDown : Key : #run to_key("\e[1;6B"); - CtrlShiftRight : Key : #run to_key("\e[1;6C"); - CtrlShiftLeft : Key : #run to_key("\e[1;6D"); - - CtrlAltUp : Key : #run to_key("\e[1;7A"); - CtrlAltDown : Key : #run to_key("\e[1;7B"); - CtrlAltRight : Key : #run to_key("\e[1;7C"); - CtrlAltLeft : Key : #run to_key("\e[1;7D"); - - CtrlAltShiftUp : Key : #run to_key("\e[1;7A"); - CtrlAltShiftDown : Key : #run to_key("\e[1;7B"); - CtrlAltShiftRight : Key : #run to_key("\e[1;7C"); - CtrlAltShiftLeft : Key : #run to_key("\e[1;7D"); - - Home : Key : #run to_key("\e[H"); - End : Key : #run to_key("\e[F"); - - Escape : Key : 0x00000000_0000001B; - Backspace : Key : 0x00000000_0000007F; - Pause : Key : 0x00000000_0000001A; - Insert : Key : #run to_key("\e[2~"); - Delete : Key : #run to_key("\e[3~"); - PgUp : Key : #run to_key("\e[5~"); - PgDown : Key : #run to_key("\e[6~"); - - /* TODO On get_key, convert F1 to F4 into the format "\e[1X~" - so that: - F1 : 1b 4f 50 : ^OP : -> \e[11~ - Shift+ F1 : 1b 4f 32 50 : ^O2P : -> \e[11;2~ - F2 : 1b 4f 51 : ^OQ : -> \e[12~ - Shift+ F2 : 1b 4f 32 51 : ^O2Q : -> \e[12;2~ - F3 : 1b 4f 52 : ^OR : -> \e[13~ - Shift+ F3 : 1b 4f 32 52 : ^O2R : -> \e[13;2~ - - F4 : 1b 4f 53 : ^OS : -> \e[14~ - Meta+ F4 : 1b 4f 31 53 : ^O1S : -> \e[14;1~ - Shift+ F4 : 1b 4f 32 53 : ^O2S : -> \e[14;2~ - Alt+ F4 : 1b 4f 33 53 : ^O3S : -> \e[14;3~ - S+A F4 : 1b 4f 34 53 : ^O4S : -> \e[14;4~ - Ctrl+ F4 : 1b 4f 35 53 : ^O4S : -> \e[14;5~ - ... - */ - - F1 : Key : #run to_key("\eOP"); - F2 : Key : #run to_key("\eOQ"); - F3 : Key : #run to_key("\eOR"); - F4 : Key : #run to_key("\eOS"); - F5 : Key : #run to_key("\e[15~"); - F6 : Key : #run to_key("\e[17~"); - F7 : Key : #run to_key("\e[18~"); - F8 : Key : #run to_key("\e[19~"); - F9 : Key : #run to_key("\e[20~"); - F10 : Key : #run to_key("\e[21~"); - F11 : Key : #run to_key("\e[23~"); - F12 : Key : #run to_key("\e[24~"); - - MetaF1 : Key : #run to_key("\e[1;1P"); - MetaF2 : Key : #run to_key("\e[1;1Q"); - MetaF3 : Key : #run to_key("\e[1;1R"); - MetaF4 : Key : #run to_key("\e[1;1S"); - MetaF5 : Key : #run to_key("\e[15;1~"); - MetaF6 : Key : #run to_key("\e[17;1~"); - MetaF7 : Key : #run to_key("\e[18;1~"); - MetaF8 : Key : #run to_key("\e[19;1~"); - MetaF9 : Key : #run to_key("\e[20;1~"); - MetaF10 : Key : #run to_key("\e[21;1~"); - MetaF11 : Key : #run to_key("\e[23;1~"); - MetaF12 : Key : #run to_key("\e[24;1~"); - - ShiftF1 : Key : #run to_key("\e[1;2P"); - ShiftF2 : Key : #run to_key("\e[1;2Q"); - ShiftF3 : Key : #run to_key("\e[1;2R"); - ShiftF4 : Key : #run to_key("\e[1;2S"); - ShiftF5 : Key : #run to_key("\e[15;2~"); - ShiftF6 : Key : #run to_key("\e[17;2~"); - ShiftF7 : Key : #run to_key("\e[18;2~"); - ShiftF8 : Key : #run to_key("\e[19;2~"); - ShiftF9 : Key : #run to_key("\e[20;2~"); - ShiftF10 : Key : #run to_key("\e[21;2~"); - ShiftF11 : Key : #run to_key("\e[23;2~"); - ShiftF12 : Key : #run to_key("\e[24;2~"); - - AltF1 : Key : #run to_key("\e[1;3P"); - AltF2 : Key : #run to_key("\e[1;3Q"); - AltF3 : Key : #run to_key("\e[1;3R"); - AltF4 : Key : #run to_key("\e[1;3S"); - AltF5 : Key : #run to_key("\e[15;3~"); - AltF6 : Key : #run to_key("\e[17;3~"); - AltF7 : Key : #run to_key("\e[18;3~"); - AltF8 : Key : #run to_key("\e[19;3~"); - AltF9 : Key : #run to_key("\e[20;3~"); - AltF10 : Key : #run to_key("\e[21;3~"); - AltF11 : Key : #run to_key("\e[23;3~"); - AltF12 : Key : #run to_key("\e[24;3~"); - - AltShiftF1 : Key : #run to_key("\e[1;4P"); - AltShiftF2 : Key : #run to_key("\e[1;4Q"); - AltShiftF3 : Key : #run to_key("\e[1;4R"); - AltShiftF4 : Key : #run to_key("\e[1;4S"); - AltShiftF5 : Key : #run to_key("\e[15;4~"); - AltShiftF6 : Key : #run to_key("\e[17;4~"); - AltShiftF7 : Key : #run to_key("\e[18;4~"); - AltShiftF8 : Key : #run to_key("\e[19;4~"); - AltShiftF9 : Key : #run to_key("\e[20;4~"); - AltShiftF10 : Key : #run to_key("\e[21;4~"); - AltShiftF11 : Key : #run to_key("\e[23;4~"); - AltShiftF12 : Key : #run to_key("\e[24;4~"); - - CtrlF1 : Key : #run to_key("\e[1;5P"); - CtrlF2 : Key : #run to_key("\e[1;5Q"); - CtrlF3 : Key : #run to_key("\e[1;5R"); - CtrlF4 : Key : #run to_key("\e[1;5S"); - CtrlF5 : Key : #run to_key("\e[15;5~"); - CtrlF6 : Key : #run to_key("\e[17;5~"); - CtrlF7 : Key : #run to_key("\e[18;5~"); - CtrlF8 : Key : #run to_key("\e[19;5~"); - CtrlF9 : Key : #run to_key("\e[20;5~"); - CtrlF10 : Key : #run to_key("\e[21;5~"); - CtrlF11 : Key : #run to_key("\e[23;5~"); - CtrlF12 : Key : #run to_key("\e[24;5~"); - - CtrlShiftF1 : Key : #run to_key("\e[1;6P"); - CtrlShiftF2 : Key : #run to_key("\e[1;6Q"); - CtrlShiftF3 : Key : #run to_key("\e[1;6R"); - CtrlShiftF4 : Key : #run to_key("\e[1;6S"); - CtrlShiftF5 : Key : #run to_key("\e[15;6~"); - CtrlShiftF6 : Key : #run to_key("\e[17;6~"); - CtrlShiftF7 : Key : #run to_key("\e[18;6~"); - CtrlShiftF8 : Key : #run to_key("\e[19;6~"); - CtrlShiftF9 : Key : #run to_key("\e[20;6~"); - CtrlShiftF10 : Key : #run to_key("\e[21;6~"); - CtrlShiftF11 : Key : #run to_key("\e[23;6~"); - CtrlShiftF12 : Key : #run to_key("\e[24;6~"); - - CtrlAltF1 : Key : #run to_key("\e[1;7P"); - CtrlAltF2 : Key : #run to_key("\e[1;7Q"); - CtrlAltF3 : Key : #run to_key("\e[1;7R"); - CtrlAltF4 : Key : #run to_key("\e[1;7S"); - CtrlAltF5 : Key : #run to_key("\e[15;7~"); - CtrlAltF6 : Key : #run to_key("\e[17;7~"); - CtrlAltF7 : Key : #run to_key("\e[18;7~"); - CtrlAltF8 : Key : #run to_key("\e[19;7~"); - CtrlAltF9 : Key : #run to_key("\e[20;7~"); - CtrlAltF10 : Key : #run to_key("\e[21;7~"); - CtrlAltF11 : Key : #run to_key("\e[23;7~"); - CtrlAltF12 : Key : #run to_key("\e[24;7~"); - - CtrlAltShiftF1 : Key : #run to_key("\e[1;8P"); - CtrlAltShiftF2 : Key : #run to_key("\e[1;8Q"); - CtrlAltShiftF3 : Key : #run to_key("\e[1;8R"); - CtrlAltShiftF4 : Key : #run to_key("\e[1;8S"); - CtrlAltShiftF5 : Key : #run to_key("\e[15;8~"); - CtrlAltShiftF6 : Key : #run to_key("\e[17;8~"); - CtrlAltShiftF7 : Key : #run to_key("\e[18;8~"); - CtrlAltShiftF8 : Key : #run to_key("\e[19;8~"); - CtrlAltShiftF9 : Key : #run to_key("\e[20;8~"); - CtrlAltShiftF10 : Key : #run to_key("\e[21;8~"); - CtrlAltShiftF11 : Key : #run to_key("\e[23;8~"); - CtrlAltShiftF12 : Key : #run to_key("\e[24;8~"); -} - -key_map: Table(string, Key); - -setup_key_map :: () { - - table_set(*key_map, "\e[A", to_key("#UP")); - table_set(*key_map, "\e[A", to_key("#UP")); - - table_set(*key_map, "\eOQ", to_key("#F2")); - table_set(*key_map, "\e[12~", to_key("#F2")); - - table_set(*key_map, "\eO2Q", to_key("#SF2")); - table_set(*key_map, "\e[1;2Q", to_key("#SF2")); - table_set(*key_map, "\e[12;2~", to_key("#SF2")); - - table_set(*key_map, "\e\e[12~", to_key("#AF2")); - table_set(*key_map, "\e\e[24~", to_key("#AF12")); - - table_set(*key_map, "\e[12^", to_key("#CF2")); - - // A good example - table_set(*key_map, "\e[21~", to_key("#F10")); - table_set(*key_map, "\e[21;1~", to_key("#MF10")); - table_set(*key_map, "\e[21;2~", to_key("#SF10")); - table_set(*key_map, "\e[21;3~", to_key("#AF10")); - table_set(*key_map, "\e[21;4~", to_key("#SAF10")); - table_set(*key_map, "\e[21;5~", to_key("#CF10")); - table_set(*key_map, "\e[21;6~", to_key("#SCF10")); - table_set(*key_map, "\e[21;7~", to_key("#ACF10")); - table_set(*key_map, "\e[21;8~", to_key("#SACF10")); - - table_set(*key_map, "\e[24~", to_key("#F12")); - table_set(*key_map, "\e[24;2~", to_key("#SF12")); - table_set(*key_map, "\e[24;3~", to_key("#AF12")); - - // TODO Try with: - // - konsole - // - xterm - // - rxvt-unicode - // - kittyterminal - // - termux - - // F2 : Key : #run to_key("\eOQ"); - // F2 : 1b 4f 51 : ^OQ : -> \e[12~ - // Shift+ F2 : 1b 4f 32 51 : ^O2Q : -> \e[12;2~ -} - to_key :: inline (str: $T) -> Key #modify { return T == ([]u8) || T == string; } { k: Key; // #if DEBUG { @@ -432,14 +186,411 @@ to_string :: inline (key: Key) -> string { // TODO FIXME TEMPORARY MEMORY } is_escape_code :: inline (key: Key) -> bool { + /* + TODO Check if LSB is not # but there is a `#`, then it's a escape code... or NONE... or RESIZE :S + Or...we could change the special codes and set the `#` at the end... then we could simply do: + return (key && 0x00FF) ^ # == 0 && (key && 0xFF00) == 0 + */ + result := false; + while key != 0 { key >>= 8; - result |= ((key ^ Keys.Escape) == 0); + result |= ((key ^ #char "#") == 0); } return result; } +Keys :: struct #type_info_none { + None : Key : #run to_key("#none"); + Resize : Key : #run to_key("#resize"); + + Space : Key : #char " "; + Enter : Key : #char "\r"; + Tab : Key : #char "\t"; + Escape : Key : 0x00000000_0000001B; + Backspace : Key : 0x00000000_0000007F; + Pause : Key : 0x00000000_0000001A; + + Up : Key : #run to_key("#up"); + Down : Key : #run to_key("#down"); + Right : Key : #run to_key("right"); + Left : Key : #run to_key("left"); + + Home : Key : #run to_key("#home"); + End : Key : #run to_key("#end"); + Insert : Key : #run to_key("#ins"); + Delete : Key : #run to_key("#del"); + PgUp : Key : #run to_key("#pup"); + PgDown : Key : #run to_key("#pdown"); + + F1 : Key : #run to_key("#f1"); + F2 : Key : #run to_key("#f2"); + F3 : Key : #run to_key("#f3"); + F4 : Key : #run to_key("#f4"); + F5 : Key : #run to_key("#f5"); + F6 : Key : #run to_key("#f6"); + F7 : Key : #run to_key("#f7"); + F8 : Key : #run to_key("#f8"); + F9 : Key : #run to_key("#f9"); + F10 : Key : #run to_key("#f10"); + F11 : Key : #run to_key("#f11"); + F12 : Key : #run to_key("#f12"); +} + +key_map: Table(string, Key); + +setup_key_map :: () { + /* + This table was created/tested using the following terminals: + - konsole + - kitty + - xterm + - linux console + */ + + // Up + table_set(*key_map, "\e[A", to_key("#up")); + table_set(*key_map, "\e[1;1A", to_key("#up+m")); + table_set(*key_map, "\e[1;2A", to_key("#up+s")); + table_set(*key_map, "\e[1;3A", to_key("#up+a")); + table_set(*key_map, "\e[1;4A", to_key("#up+A")); + table_set(*key_map, "\e[1;5A", to_key("#up+c")); + table_set(*key_map, "\e[1;6A", to_key("#up+C")); + table_set(*key_map, "\e[1;7A", to_key("#up+x")); + table_set(*key_map, "\e[1;8A", to_key("#up+X")); + // Up - kitty + table_set(*key_map, "\e[1;9A", to_key("#up+m")); + + // Down + table_set(*key_map, "\e[B", to_key("#down")); + table_set(*key_map, "\e[1;1B", to_key("#down+m")); + table_set(*key_map, "\e[1;2B", to_key("#down+s")); + table_set(*key_map, "\e[1;3B", to_key("#down+a")); + table_set(*key_map, "\e[1;4B", to_key("#down+A")); + table_set(*key_map, "\e[1;5B", to_key("#down+c")); + table_set(*key_map, "\e[1;6B", to_key("#down+C")); + table_set(*key_map, "\e[1;7B", to_key("#down+x")); + table_set(*key_map, "\e[1;8B", to_key("#down+X")); + // Down - kitty + table_set(*key_map, "\e[1;9B", to_key("#down+m")); + + // Right + table_set(*key_map, "\e[C", to_key("#right")); + table_set(*key_map, "\e[1;1C", to_key("#right+m")); + table_set(*key_map, "\e[1;2C", to_key("#right+s")); + table_set(*key_map, "\e[1;3C", to_key("#right+a")); + table_set(*key_map, "\e[1;4C", to_key("#right+A")); + table_set(*key_map, "\e[1;5C", to_key("#right+c")); + table_set(*key_map, "\e[1;6C", to_key("#right+C")); + table_set(*key_map, "\e[1;7C", to_key("#right+x")); + table_set(*key_map, "\e[1;8C", to_key("#right+X")); + // Right - kitty + table_set(*key_map, "\e[1;9C", to_key("#right+m")); + + // Left + table_set(*key_map, "\e[D", to_key("#left")); + table_set(*key_map, "\e[1;1D", to_key("#left+m")); + table_set(*key_map, "\e[1;2D", to_key("#left+s")); + table_set(*key_map, "\e[1;3D", to_key("#left+a")); + table_set(*key_map, "\e[1;4D", to_key("#left+A")); + table_set(*key_map, "\e[1;5D", to_key("#left+c")); + table_set(*key_map, "\e[1;6D", to_key("#left+C")); + table_set(*key_map, "\e[1;7D", to_key("#left+x")); + table_set(*key_map, "\e[1;8D", to_key("#left+X")); + // Left - kitty + table_set(*key_map, "\e[1;9D", to_key("#left+m")); + + // Home + table_set(*key_map, "\e[H", to_key("#home")); + table_set(*key_map, "\e[1~", to_key("#home")); + table_set(*key_map, "\e[1;1H", to_key("#home+m")); + table_set(*key_map, "\e[1;2H", to_key("#home+s")); + table_set(*key_map, "\e[1;3H", to_key("#home+a")); + table_set(*key_map, "\e[1;4H", to_key("#home+A")); + table_set(*key_map, "\e[1;5H", to_key("#home+c")); + table_set(*key_map, "\e[1;6H", to_key("#home+C")); + table_set(*key_map, "\e[1;7H", to_key("#home+x")); + table_set(*key_map, "\e[1;8H", to_key("#home+X")); + // Home - kitty + table_set(*key_map, "\e[1;9H", to_key("#home+m")); + + // End + table_set(*key_map, "\e[F", to_key("#end")); + table_set(*key_map, "\e[4~", to_key("#end")); + table_set(*key_map, "\e[1;1F", to_key("#end+m")); + table_set(*key_map, "\e[1;2F", to_key("#end+s")); + table_set(*key_map, "\e[1;3F", to_key("#end+a")); + table_set(*key_map, "\e[1;4F", to_key("#end+A")); + table_set(*key_map, "\e[1;5F", to_key("#end+c")); + table_set(*key_map, "\e[1;6F", to_key("#end+C")); + table_set(*key_map, "\e[1;7F", to_key("#end+x")); + table_set(*key_map, "\e[1;8F", to_key("#end+X")); + // End - kitty + table_set(*key_map, "\e[1;9F", to_key("#end+m")); + + // Insert + table_set(*key_map, "\e[2~", to_key("#ins")); + table_set(*key_map, "\e[2;1~", to_key("#ins+m")); + table_set(*key_map, "\e[2;2~", to_key("#ins+s")); + table_set(*key_map, "\e[2;3~", to_key("#ins+a")); + table_set(*key_map, "\e[2;4~", to_key("#ins+A")); + table_set(*key_map, "\e[2;5~", to_key("#ins+c")); + table_set(*key_map, "\e[2;6~", to_key("#ins+C")); + table_set(*key_map, "\e[2;7~", to_key("#ins+x")); + table_set(*key_map, "\e[2;8~", to_key("#ins+X")); + // Insert - kitty + table_set(*key_map, "\e[2;9~", to_key("#ins+m")); + + // Delete + table_set(*key_map, "\e[3~", to_key("#del")); + table_set(*key_map, "\e[3;1~", to_key("#del+m")); + table_set(*key_map, "\e[3;2~", to_key("#del+s")); + table_set(*key_map, "\e[3;3~", to_key("#del+a")); + table_set(*key_map, "\e[3;4~", to_key("#del+A")); + table_set(*key_map, "\e[3;5~", to_key("#del+c")); + table_set(*key_map, "\e[3;6~", to_key("#del+C")); + table_set(*key_map, "\e[3;7~", to_key("#del+x")); + table_set(*key_map, "\e[3;8~", to_key("#del+X")); + // Delete - kitty + table_set(*key_map, "\e[3;9~", to_key("#del+m")); + + // Page Up + table_set(*key_map, "\e[5~", to_key("#pup")); + table_set(*key_map, "\e[5;1~", to_key("#pup+m")); + table_set(*key_map, "\e[5;2~", to_key("#pup+s")); + table_set(*key_map, "\e[5;3~", to_key("#pup+a")); + table_set(*key_map, "\e[5;4~", to_key("#pup+A")); + table_set(*key_map, "\e[5;5~", to_key("#pup+c")); + table_set(*key_map, "\e[5;6~", to_key("#pup+C")); + table_set(*key_map, "\e[5;7~", to_key("#pup+x")); + table_set(*key_map, "\e[5;8~", to_key("#pup+X")); + // Page Up - kitty + table_set(*key_map, "\e[5;9~", to_key("#pup+m")); + + // Page Down + table_set(*key_map, "\e[6~", to_key("#pdown")); + table_set(*key_map, "\e[6;1~", to_key("#pdown+m")); + table_set(*key_map, "\e[6;2~", to_key("#pdown+s")); + table_set(*key_map, "\e[6;3~", to_key("#pdown+a")); + table_set(*key_map, "\e[6;4~", to_key("#pdown+A")); + table_set(*key_map, "\e[6;5~", to_key("#pdown+c")); + table_set(*key_map, "\e[6;6~", to_key("#pdown+C")); + table_set(*key_map, "\e[6;7~", to_key("#pdown+x")); + table_set(*key_map, "\e[6;8~", to_key("#pdown+X")); + // Page Down - kitty + table_set(*key_map, "\e[6;9~", to_key("#pdown+m")); + + // F1 + table_set(*key_map, "\eOP", to_key("#f1")); + table_set(*key_map, "\eO1P", to_key("#f1+m")); + table_set(*key_map, "\eO2P", to_key("#f1+s")); + table_set(*key_map, "\eO3P", to_key("#f1+a")); + table_set(*key_map, "\eO4P", to_key("#f1+A")); + table_set(*key_map, "\eO5P", to_key("#f1+c")); + table_set(*key_map, "\eO6P", to_key("#f1+C")); + table_set(*key_map, "\eO7P", to_key("#f1+x")); + table_set(*key_map, "\eO8P", to_key("#f1+X")); + // F1 - xterm + table_set(*key_map, "\e[1;2P", to_key("#f1+s")); + table_set(*key_map, "\e[1;3P", to_key("#f1+a")); + table_set(*key_map, "\e[1;4P", to_key("#f1+A")); + table_set(*key_map, "\e[1;5P", to_key("#f1+c")); + table_set(*key_map, "\e[1;6P", to_key("#f1+C")); + table_set(*key_map, "\e[1;7P", to_key("#f1+x")); + table_set(*key_map, "\e[1;8P", to_key("#f1+X")); + // F1 - kitty + table_set(*key_map, "\e[1;9P", to_key("#f1+m")); + // F1 - linux console + table_set(*key_map, "\e[[A", to_key("#f1")); + table_set(*key_map, "\e[25~", to_key("#f1+s")); + + // F2 + table_set(*key_map, "\eOQ", to_key("#f2")); + table_set(*key_map, "\eO1Q", to_key("#f2+m")); + table_set(*key_map, "\eO2Q", to_key("#f2+s")); + table_set(*key_map, "\eO3Q", to_key("#f2+a")); + table_set(*key_map, "\eO4Q", to_key("#f2+A")); + table_set(*key_map, "\eO5Q", to_key("#f2+c")); + table_set(*key_map, "\eO6Q", to_key("#f2+C")); + table_set(*key_map, "\eO7Q", to_key("#f2+x")); + table_set(*key_map, "\eO8Q", to_key("#f2+X")); + // F2 - xterm + table_set(*key_map, "\e[1;2Q", to_key("#f2+s")); + table_set(*key_map, "\e[1;3Q", to_key("#f2+a")); + table_set(*key_map, "\e[1;4Q", to_key("#f2+A")); + table_set(*key_map, "\e[1;5Q", to_key("#f2+c")); + table_set(*key_map, "\e[1;6Q", to_key("#f2+C")); + table_set(*key_map, "\e[1;7Q", to_key("#f2+x")); + table_set(*key_map, "\e[1;8Q", to_key("#f2+X")); + // F2 - kitty + table_set(*key_map, "\e[1;9Q", to_key("#f2+m")); + // F2 - linux console + table_set(*key_map, "\e[[B", to_key("#f2")); + table_set(*key_map, "\e[26~", to_key("#f2+s")); + + // F3 + table_set(*key_map, "\eOR", to_key("#f3")); + table_set(*key_map, "\eO1R", to_key("#f3+m")); + table_set(*key_map, "\eO2R", to_key("#f3+s")); + table_set(*key_map, "\eO3R", to_key("#f3+a")); + table_set(*key_map, "\eO4R", to_key("#f3+A")); + table_set(*key_map, "\eO5R", to_key("#f3+c")); + table_set(*key_map, "\eO6R", to_key("#f3+C")); + table_set(*key_map, "\eO7R", to_key("#f3+x")); + table_set(*key_map, "\eO8R", to_key("#f3+X")); + // F3 - xterm + table_set(*key_map, "\e[1;2R", to_key("#f3+s")); + table_set(*key_map, "\e[1;3R", to_key("#f3+a")); + table_set(*key_map, "\e[1;4R", to_key("#f3+A")); + table_set(*key_map, "\e[1;5R", to_key("#f3+c")); + table_set(*key_map, "\e[1;6R", to_key("#f3+C")); + table_set(*key_map, "\e[1;7R", to_key("#f3+x")); + table_set(*key_map, "\e[1;8R", to_key("#f3+X")); + // F3 - kitty + table_set(*key_map, "\e[1;9R", to_key("#f3+m")); + // F3 - linux console + table_set(*key_map, "\e[[C", to_key("#f3")); + table_set(*key_map, "\e[28~", to_key("#f3+s")); + + // F4 + table_set(*key_map, "\eOS", to_key("#f4")); + table_set(*key_map, "\eO1S", to_key("#f4+m")); + table_set(*key_map, "\eO2S", to_key("#f4+s")); + table_set(*key_map, "\eO3S", to_key("#f4+a")); + table_set(*key_map, "\eO4S", to_key("#f4+A")); + table_set(*key_map, "\eO5S", to_key("#f4+c")); + table_set(*key_map, "\eO6S", to_key("#f4+C")); + table_set(*key_map, "\eO7S", to_key("#f4+x")); + table_set(*key_map, "\eO8S", to_key("#f4+X")); + // F4 - xterm + table_set(*key_map, "\e[1;2S", to_key("#f4+s")); + table_set(*key_map, "\e[1;3S", to_key("#f4+a")); + table_set(*key_map, "\e[1;4S", to_key("#f4+A")); + table_set(*key_map, "\e[1;5S", to_key("#f4+c")); + table_set(*key_map, "\e[1;6S", to_key("#f4+C")); + table_set(*key_map, "\e[1;7S", to_key("#f4+x")); + table_set(*key_map, "\e[1;8S", to_key("#f4+X")); + // F4 - kitty + table_set(*key_map, "\e[1;9S", to_key("#f4+m")); + // F4 - linux console + table_set(*key_map, "\e[[D", to_key("#f4")); + table_set(*key_map, "\e[29~", to_key("#f4+s")); + + // F5 + table_set(*key_map, "\e[15~", to_key("#f5")); + table_set(*key_map, "\e[15;1~", to_key("#f5+m")); + table_set(*key_map, "\e[15;2~", to_key("#f5+s")); + table_set(*key_map, "\e[15;3~", to_key("#f5+a")); + table_set(*key_map, "\e[15;4~", to_key("#f5+A")); + table_set(*key_map, "\e[15;5~", to_key("#f5+c")); + table_set(*key_map, "\e[15;6~", to_key("#f5+C")); + table_set(*key_map, "\e[15;7~", to_key("#f5+x")); + table_set(*key_map, "\e[15;8~", to_key("#f5+X")); + // F5 - kitty + table_set(*key_map, "\e[15;9~", to_key("#f5+m")); + // F5 - linux console + table_set(*key_map, "\e[[E", to_key("#f5")); + table_set(*key_map, "\e[31~", to_key("#f5+s")); + + // F6 + table_set(*key_map, "\e[17~", to_key("#f6")); + table_set(*key_map, "\e[17;1~", to_key("#f6+m")); + table_set(*key_map, "\e[17;2~", to_key("#f6+s")); + table_set(*key_map, "\e[17;3~", to_key("#f6+a")); + table_set(*key_map, "\e[17;4~", to_key("#f6+A")); + table_set(*key_map, "\e[17;5~", to_key("#f6+c")); + table_set(*key_map, "\e[17;6~", to_key("#f6+C")); + table_set(*key_map, "\e[17;7~", to_key("#f6+x")); + table_set(*key_map, "\e[17;8~", to_key("#f6+X")); + // F6 - kitty + table_set(*key_map, "\e[17;9~", to_key("#f6+m")); + // F6 - linux console + table_set(*key_map, "\e[32~", to_key("#f6+s")); + + // F7 + table_set(*key_map, "\e[18~", to_key("#f7")); + table_set(*key_map, "\e[18;1~", to_key("#f7+m")); + table_set(*key_map, "\e[18;2~", to_key("#f7+s")); + table_set(*key_map, "\e[18;3~", to_key("#f7+a")); + table_set(*key_map, "\e[18;4~", to_key("#f7+A")); + table_set(*key_map, "\e[18;5~", to_key("#f7+c")); + table_set(*key_map, "\e[18;6~", to_key("#f7+C")); + table_set(*key_map, "\e[18;7~", to_key("#f7+x")); + table_set(*key_map, "\e[18;8~", to_key("#f7+X")); + // F7 - kitty + table_set(*key_map, "\e[18;9~", to_key("#f7+m")); + // F7 - linux console + table_set(*key_map, "\e[33~", to_key("#f7+s")); + + // F8 + table_set(*key_map, "\e[19~", to_key("#f8")); + table_set(*key_map, "\e[19;1~", to_key("#f8+m")); + table_set(*key_map, "\e[19;2~", to_key("#f8+s")); + table_set(*key_map, "\e[19;3~", to_key("#f8+a")); + table_set(*key_map, "\e[19;4~", to_key("#f8+A")); + table_set(*key_map, "\e[19;5~", to_key("#f8+c")); + table_set(*key_map, "\e[19;6~", to_key("#f8+C")); + table_set(*key_map, "\e[19;7~", to_key("#f8+x")); + table_set(*key_map, "\e[19;8~", to_key("#f8+X")); + // F8 - kitty + table_set(*key_map, "\e[19;9~", to_key("#f8+m")); + // F8 - linux console + table_set(*key_map, "\e[34~", to_key("#f8+s")); + + // F9 + table_set(*key_map, "\e[20~", to_key("#f9")); + table_set(*key_map, "\e[20;1~", to_key("#f9+m")); + table_set(*key_map, "\e[20;2~", to_key("#f9+s")); + table_set(*key_map, "\e[20;3~", to_key("#f9+a")); + table_set(*key_map, "\e[20;4~", to_key("#f9+A")); + table_set(*key_map, "\e[20;5~", to_key("#f9+c")); + table_set(*key_map, "\e[20;6~", to_key("#f9+C")); + table_set(*key_map, "\e[20;7~", to_key("#f9+x")); + table_set(*key_map, "\e[20;8~", to_key("#f9+X")); + // F9 - kitty + table_set(*key_map, "\e[20;9~", to_key("#f9+m")); + + // F10 + table_set(*key_map, "\e[21~", to_key("#f10")); + table_set(*key_map, "\e[21;1~", to_key("#f10+m")); + table_set(*key_map, "\e[21;2~", to_key("#f10+s")); + table_set(*key_map, "\e[21;3~", to_key("#f10+a")); + table_set(*key_map, "\e[21;4~", to_key("#f10+A")); + table_set(*key_map, "\e[21;5~", to_key("#f10+c")); + table_set(*key_map, "\e[21;6~", to_key("#f10+C")); + table_set(*key_map, "\e[21;7~", to_key("#f10+x")); + table_set(*key_map, "\e[21;8~", to_key("#f10+X")); + // F10 - kitty + table_set(*key_map, "\e[21;9~", to_key("#f10+m")); + + // F11 + table_set(*key_map, "\e[23~", to_key("#f11")); + table_set(*key_map, "\e[23;1~", to_key("#f11+m")); + table_set(*key_map, "\e[23;2~", to_key("#f11+s")); + table_set(*key_map, "\e[23;3~", to_key("#f11+a")); + table_set(*key_map, "\e[23;4~", to_key("#f11+A")); + table_set(*key_map, "\e[23;5~", to_key("#f11+c")); + table_set(*key_map, "\e[23;6~", to_key("#f11+C")); + table_set(*key_map, "\e[23;7~", to_key("#f11+x")); + table_set(*key_map, "\e[23;8~", to_key("#f11+X")); + // F11 - kitty + table_set(*key_map, "\e[23;9~", to_key("#f11+m")); + + // F12 + table_set(*key_map, "\e[24~", to_key("#f12")); + table_set(*key_map, "\e[24;1~", to_key("#f12+m")); + table_set(*key_map, "\e[24;2~", to_key("#f12+s")); + table_set(*key_map, "\e[24;3~", to_key("#f12+a")); + table_set(*key_map, "\e[24;4~", to_key("#f12+A")); + table_set(*key_map, "\e[24;5~", to_key("#f12+c")); + table_set(*key_map, "\e[24;6~", to_key("#f12+C")); + table_set(*key_map, "\e[24;7~", to_key("#f12+x")); + table_set(*key_map, "\e[24;8~", to_key("#f12+X")); + // F12 - kitty + table_set(*key_map, "\e[24;9~", to_key("#f12+m")); +} + initialized := false; //input_buffer : [64] u8; // TODO FIXME Input buffer is too small!!! @@ -543,28 +694,12 @@ get_key :: (timeout_milliseconds: s32 = -1) -> Key { // as we ding a match on the LUT. // If the LUT is too big... maybe use a hash-table. + // TEMPORARY HACK key, success := table_find(*key_map, to_parse); if success { advance(*input_string, to_parse.count); return key; } - - if compare(to_parse, "\e[A") == 0 { - advance(*input_string, to_parse.count); - return to_key("#UP"); - } - else if compare(to_parse, "\e[B") == 0 { - advance(*input_string, to_parse.count); - return to_key("#DOWN"); - } - else if compare(to_parse, "\e[C") == 0 { - advance(*input_string, to_parse.count); - return to_key("#RIGHT"); - } - else if compare(to_parse, "\e[D") == 0 { - advance(*input_string, to_parse.count); - return to_key("#LEFT"); - } } advance(*input_string, to_parse.count); |
