@@ -78,6 +78,27 @@ struct keycode_mapper {
7878#define CURSOR_INS "\e[2~"
7979#define CURSOR_DEL "\e[3~"
8080
81+ // https://aperiodic.net/phil/archives/Geekery/term-function-keys/
82+ #define F1 "\eOP"
83+ #define F2 "\eOQ"
84+ #define F3 "\eOR"
85+ #define F4 "\eOS"
86+ #define F5 "\e[15~"
87+ #define F6 "\e[17~"
88+ #define F7 "\e[18~"
89+ #define F8 "\e[19~"
90+ #define F9 "\e[20~"
91+ #define F10 "\e[21~"
92+ #define F11 "\e[23~"
93+ #define F12 "\e[24~"
94+ #define PRINT_SCREEN "\e[i"
95+ #define CTRL_UP "\e[1;5A"
96+ #define CTRL_DOWN "\e[1;5B"
97+ #define CTRL_RIGHT "\e[1;5C"
98+ #define CTRL_LEFT "\e[1;5D"
99+
100+
101+
81102STATIC struct keycode_mapper keycode_to_ascii [] = {
82103 { HID_KEY_A , HID_KEY_Z , 'a' , 0 , NULL },
83104
@@ -90,13 +111,46 @@ STATIC struct keycode_mapper keycode_to_ascii[] = {
90111 { HID_KEY_ENTER , HID_KEY_SLASH , 0 , FLAG_SHIFT , "\n\x1b\177\t _+{}|~:\"~<>?" },
91112 { HID_KEY_ENTER , HID_KEY_SLASH , 0 , 0 , "\r\x1b\10\t -=[]\\#;'`,./" },
92113
93- { HID_KEY_F1 , HID_KEY_F1 , 0x1e , 0 , }, // help key on xerox 820 kbd
114+ // { HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd
94115
95116 { HID_KEY_KEYPAD_DIVIDE , HID_KEY_KEYPAD_DECIMAL , 0 , FLAG_NUMLOCK | FLAG_STRING ,
96117 "/\0" "*\0" "-\0" "+\0" "\n\0" CURSOR_END SEP CURSOR_DOWN SEP CURSOR_PGDN SEP CURSOR_LEFT SEP NOTHING SEP CURSOR_RIGHT SEP CURSOR_HOME SEP CURSOR_UP SEP CURSOR_PGDN SEP CURSOR_INS SEP CURSOR_DEL },
97118 { HID_KEY_KEYPAD_DIVIDE , HID_KEY_KEYPAD_DECIMAL , 0 , 0 , "/*-+\n1234567890." },
98119
99- { HID_KEY_ARROW_RIGHT , HID_KEY_ARROW_UP , 0 , FLAG_STRING , CURSOR_RIGHT SEP CURSOR_LEFT SEP CURSOR_DOWN SEP CURSOR_UP },
120+ // { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 0, FLAG_STRING, CURSOR_RIGHT SEP CURSOR_LEFT SEP CURSOR_DOWN SEP CURSOR_UP },
121+ { HID_KEY_PAUSE , HID_KEY_PAUSE , 0x1a , 0 , },
122+ { HID_KEY_PAGE_DOWN , HID_KEY_PAGE_DOWN , 0 , FLAG_STRING , CURSOR_PGDN },
123+ { HID_KEY_PAGE_UP , HID_KEY_PAGE_UP , 0 , FLAG_STRING , CURSOR_PGUP },
124+ { HID_KEY_HOME , HID_KEY_HOME , 0 , FLAG_STRING , CURSOR_HOME },
125+ { HID_KEY_END , HID_KEY_END , 0 , FLAG_STRING , CURSOR_END },
126+ { HID_KEY_INSERT , HID_KEY_INSERT , 0 , FLAG_STRING , CURSOR_INS },
127+ { HID_KEY_DELETE , HID_KEY_DELETE , 0 , FLAG_STRING , CURSOR_DEL },
128+
129+ { HID_KEY_F1 , HID_KEY_F1 , 0 , FLAG_STRING , F1 },
130+ { HID_KEY_F2 , HID_KEY_F2 , 0 , FLAG_STRING , F2 },
131+ { HID_KEY_F3 , HID_KEY_F3 , 0 , FLAG_STRING , F3 },
132+ { HID_KEY_F4 , HID_KEY_F4 , 0 , FLAG_STRING , F4 },
133+ { HID_KEY_F5 , HID_KEY_F5 , 0 , FLAG_STRING , F5 },
134+ { HID_KEY_F6 , HID_KEY_F6 , 0 , FLAG_STRING , F6 },
135+ { HID_KEY_F7 , HID_KEY_F7 , 0 , FLAG_STRING , F7 },
136+ { HID_KEY_F8 , HID_KEY_F8 , 0 , FLAG_STRING , F8 },
137+ { HID_KEY_F9 , HID_KEY_F9 , 0 , FLAG_STRING , F9 },
138+ { HID_KEY_F10 , HID_KEY_F10 , 0 , FLAG_STRING , F10 },
139+ { HID_KEY_F11 , HID_KEY_F11 , 0 , FLAG_STRING , F11 },
140+ { HID_KEY_F12 , HID_KEY_F12 , 0 , FLAG_STRING , F12 },
141+ { HID_KEY_PRINT_SCREEN , HID_KEY_PRINT_SCREEN , 0 , FLAG_STRING , PRINT_SCREEN },
142+
143+
144+ { HID_KEY_ARROW_UP , HID_KEY_ARROW_UP , 0 , FLAG_STRING + FLAG_CTRL ,CTRL_UP },
145+ { HID_KEY_ARROW_DOWN , HID_KEY_ARROW_DOWN , 0 , FLAG_STRING + FLAG_CTRL , CTRL_DOWN },
146+ { HID_KEY_ARROW_LEFT , HID_KEY_ARROW_LEFT , 0 , FLAG_STRING + FLAG_CTRL , CTRL_LEFT },
147+ { HID_KEY_ARROW_RIGHT , HID_KEY_ARROW_RIGHT , 0 , FLAG_STRING + FLAG_CTRL , CTRL_RIGHT },
148+ { HID_KEY_ARROW_UP , HID_KEY_ARROW_UP , 0 , FLAG_STRING ,CURSOR_UP },
149+ { HID_KEY_ARROW_DOWN , HID_KEY_ARROW_DOWN , 0 , FLAG_STRING , CURSOR_DOWN },
150+ { HID_KEY_ARROW_LEFT , HID_KEY_ARROW_LEFT , 0 , FLAG_STRING , CURSOR_LEFT },
151+ { HID_KEY_ARROW_RIGHT , HID_KEY_ARROW_RIGHT , 0 , FLAG_STRING , CURSOR_RIGHT },
152+
153+
100154
101155};
102156
@@ -243,6 +297,9 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard
243297 if (mapper -> flags & FLAG_CTRL && !ctrl ) {
244298 continue ;
245299 }
300+ if (!(mapper -> flags & FLAG_CTRL ) && ctrl ) {
301+ continue ;
302+ }
246303 if (mapper -> flags & FLAG_STRING ) {
247304 const char * msg = skip_nuls (mapper -> data , keycode - mapper -> first );
248305 send_bufz (msg );
0 commit comments