7 static const char *keytable[KEY_MAX+1];
8 static int initialized = 0;
10 static void keytable_init();
12 void rote_vt_keypress(RoteTerm *rt, int keycode) {
13 char c = (char) keycode;
15 if (!initialized) keytable_init();
17 if (keycode >= 0 && keycode < KEY_MAX && keytable[keycode])
18 rote_vt_write(rt, keytable[keycode], strlen(keytable[keycode]));
20 rote_vt_write(rt, &c, 1); /* not special, just write it */
23 static void keytable_init() {
25 memset(keytable, 0, KEY_MAX+1 * sizeof(const char*));
27 keytable['\n'] = "\r";
28 keytable[KEY_UP] = "\e[A";
29 keytable[KEY_DOWN] = "\e[B";
30 keytable[KEY_RIGHT] = "\e[C";
31 keytable[KEY_LEFT] = "\e[D";
32 keytable[KEY_BACKSPACE] = "\b";
33 keytable[KEY_HOME] = "\e[1~";
34 keytable[KEY_IC] = "\e[2~";
35 keytable[KEY_DC] = "\e[3~";
36 keytable[KEY_END] = "\e[4~";
37 keytable[KEY_PPAGE] = "\e[5~";
38 keytable[KEY_NPAGE] = "\e[6~";
39 keytable[KEY_SUSPEND] = "\x1A"; /* Ctrl+Z gets mapped to this */
40 keytable[KEY_F(1)] = "\e[[A";
41 keytable[KEY_F(2)] = "\e[[B";
42 keytable[KEY_F(3)] = "\e[[C";
43 keytable[KEY_F(4)] = "\e[[D";
44 keytable[KEY_F(5)] = "\e[[E";
45 keytable[KEY_F(6)] = "\e[17~";
46 keytable[KEY_F(7)] = "\e[18~";
47 keytable[KEY_F(8)] = "\e[19~";
48 keytable[KEY_F(9)] = "\e[20~";
49 keytable[KEY_F(10)] = "\e[21~";