From bdce9a4a15d59ade95a980050ec9a3a8de88caef Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Mon, 29 Apr 2013 20:56:24 +0200 Subject: [PATCH] In keybindings editing window, print out key names instead of numerical key codes. --- roguelike.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/roguelike.c b/roguelike.c index 8d4ec18..052f7ff 100644 --- a/roguelike.c +++ b/roguelike.c @@ -172,6 +172,49 @@ int get_action_key (struct KeyBinding * keybindings, char * name) { i++; return keybindings[i].key; } +char * get_keyname(int keycode) { +// Translate some keycodes to readable names of max 9 chars. + char * keyname; + keyname = malloc(15); + if (32 < keycode && keycode < 127) + sprintf(keyname, "%c", keycode); + else if (keycode == 9) + sprintf(keyname, "TAB"); + else if (keycode == 10) + sprintf(keyname, "RETURN"); + else if (keycode == 27) + sprintf(keyname, "ESCAPE"); + else if (keycode == 32) + sprintf(keyname, "SPACE"); + else if (keycode == KEY_UP) + sprintf(keyname, "UP"); + else if (keycode == KEY_DOWN) + sprintf(keyname, "DOWN"); + else if (keycode == KEY_LEFT) + sprintf(keyname, "LEFT"); + else if (keycode == KEY_RIGHT) + sprintf(keyname, "RIGHT"); + else if (keycode == KEY_HOME) + sprintf(keyname, "HOME"); + else if (keycode == KEY_BACKSPACE) + sprintf(keyname, "BACKSPACE"); + else if (keycode >= KEY_F0 && keycode <= KEY_F(63)) { + int f = keycode - KEY_F0; + sprintf(keyname, "F%d", f); } + else if (keycode == KEY_DC) + sprintf(keyname, "DELETE"); + else if (keycode == KEY_IC) + sprintf(keyname, "INSERT"); + else if (keycode == KEY_NPAGE) + sprintf(keyname, "NEXT PAGE"); + else if (keycode == KEY_PPAGE) + sprintf(keyname, "PREV PAGE"); + else if (keycode == KEY_END) + sprintf(keyname, "END"); + else + sprintf(keyname, "(unknown)"); + return keyname; } + void draw_keys_window (struct Win * win) { // Draw keybinding window. struct World * world = (struct World *) win->data; @@ -186,17 +229,20 @@ void draw_keys_window (struct Win * win) { offset = keyswindata->select - (height_av / 2); else offset = keyswindata->max - height_av + 1; } - int keydescwidth = 3; + int keydescwidth = 9; // max length assured by get_keyname() char * keydesc = malloc(keydescwidth + 1); attr_t attri; int y, x; + char * keyname; for (y = 0; 0 != keybindings[offset + y].name && y < height_av; y++) { attri = 0; if (y == keyswindata->select - offset) { attri = A_REVERSE; if (1 == keyswindata->edit) attri = attri | A_BLINK; } - snprintf(keydesc, keydescwidth + 1, "%3d ", keybindings[y + offset].key); + keyname = get_keyname(keybindings[y + offset].key); + snprintf(keydesc, keydescwidth + 1, "%-9s", keyname); + free(keyname); for (x = 0; x < width_av; x++) if (strlen(keydesc) > x) mvwaddch(win->curses_win, y + 1, x + win->border_left, keydesc[x] | attri); -- 2.30.2