Initial revision
[apps/madtty.git] / rote_keymap.c
1 #include "rote.h"
2
3 #include <ncurses.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 static const char *keytable[KEY_MAX+1];
8 static int initialized = 0;
9
10 static void keytable_init();
11
12 void rote_vt_keypress(RoteTerm *rt, int keycode) {
13    char c = (char) keycode;
14
15    if (!initialized) keytable_init();
16
17    if (keycode >= 0 && keycode < KEY_MAX && keytable[keycode])
18       rote_vt_write(rt, keytable[keycode], strlen(keytable[keycode]));
19    else
20       rote_vt_write(rt, &c, 1); /* not special, just write it */
21 }
22
23 static void keytable_init() {
24    initialized = 1;
25    memset(keytable, 0, KEY_MAX+1 * sizeof(const char*));
26
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~";
50 }
51
52