commit - 9cb0f9cef6c927f737c60f8a425d69c91f9f5906
commit + a777f81f2c342d2d36685bb559a149d256cf6f12
blob - bdb831cb9969207e5d0e63cf68d443427f27c88b
blob + 9725d338acb98298afb9395b3fbf817bf25d58ad
--- ui.c
+++ ui.c
#define CTRL(n) ((n)&0x1F)
+struct keytable {
+ char *p;
+ int k;
+} keytable[] = {
+ { "<up>", KEY_UP },
+ { "<down>", KEY_DOWN },
+ { "<left>", KEY_LEFT },
+ { "<right>", KEY_RIGHT },
+ { "<prior>", KEY_PPAGE },
+ { "<next>", KEY_NPAGE },
+ { "<home>", KEY_HOME },
+ { "<end>", KEY_END },
+ /* ... */
+ { "del", KEY_BACKSPACE },
+ { "esc", 27 },
+ { "space", ' ' },
+ { "spc", ' ' },
+ { "enter", CTRL('m') },
+ { "ret", CTRL('m' )},
+ { "tab", CTRL('i') },
+ /* ... */
+ { NULL, 0 },
+};
+
struct kmap {
TAILQ_HEAD(map, keymap) m;
void (*unhandled_input)(void);
static int
kbd(const char *key)
{
- struct table {
- char *p;
- int k;
- } table[] = {
- { "<up>", KEY_UP },
- { "<down>", KEY_DOWN },
- { "<left>", KEY_LEFT },
- { "<right>", KEY_RIGHT },
- { "<prior>", KEY_PPAGE },
- { "<next>", KEY_NPAGE },
- { "<home>", KEY_HOME },
- { "<end>", KEY_END },
- /* ... */
- { "del", KEY_BACKSPACE },
- { "esc", 27 },
- { "space", ' ' },
- { "spc", ' ' },
- { "enter", CTRL('m') },
- { "ret", CTRL('m' )},
- { "tab", CTRL('i') },
- /* ... */
- { NULL, 0 },
- }, *t;
+ struct keytable *t;
- for (t = table; t->p != NULL; ++t) {
+ for (t = keytable; t->p != NULL; ++t) {
if (has_prefix(key, t->p))
return t->k;
}
return *key;
+}
+
+static const char *
+unkbd(int k)
+{
+ struct keytable *t;
+
+ for (t = keytable; t->p != NULL; ++t) {
+ if (k == t->k)
+ return t->p;
+ }
+
+ return NULL;
}
static void
static void
global_key_unbound(void)
{
- message("%s%c is undefined",
+ const char *keyname;
+ char tmp[2] = {0, 0};
+
+ if ((keyname = unkbd(thiskey.key)) == NULL) {
+ message("%s%c is undefined",
+ thiskey.meta ? "M-" : "",
+ thiskey.key);
+ return;
+ }
+
+ message("%s%s is undefined",
thiskey.meta ? "M-" : "",
- thiskey.key);
+ keyname);
}
static void