aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authordam <dam@gudinoff>2024-03-02 03:58:33 +0000
committerdam <dam@gudinoff>2024-03-02 03:58:33 +0000
commit76eab65ffe14674a7b7fdece67c2a25c2a044dc7 (patch)
tree6709057df85863445983a39726a04546c9c14799 /modules
parent45e56e387b713cebd78c3789ed7c234e588fbe48 (diff)
downloadtask-time-tracker-76eab65ffe14674a7b7fdece67c2a25c2a044dc7.tar.zst
task-time-tracker-76eab65ffe14674a7b7fdece67c2a25c2a044dc7.zip
Setup mappings for several different terminals.
Diffstat (limited to 'modules')
-rw-r--r--modules/TUI/module.jai663
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);