diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-09 23:57:42 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-09 23:57:42 +0000 |
commit | 3ed5aa3e72bf0e720f1ea35159a1d15b1f02e0ff (patch) | |
tree | d6d9dc50461b010cd9da225afacf9d4081d29bc6 /tty-keys.c | |
parent | e13445875451d66fcc8b0d8b4995321560d03b80 (diff) | |
download | rtmux-3ed5aa3e72bf0e720f1ea35159a1d15b1f02e0ff.tar.gz rtmux-3ed5aa3e72bf0e720f1ea35159a1d15b1f02e0ff.tar.bz2 rtmux-3ed5aa3e72bf0e720f1ea35159a1d15b1f02e0ff.zip |
Build array of codes, stop using ncurses global variables and push ncurses crap into tty-term.c.
Diffstat (limited to 'tty-keys.c')
-rw-r--r-- | tty-keys.c | 162 |
1 files changed, 81 insertions, 81 deletions
@@ -1,4 +1,4 @@ -/* $Id: tty-keys.c,v 1.15 2009-01-09 16:47:06 nicm Exp $ */ +/* $Id: tty-keys.c,v 1.16 2009-01-09 23:57:42 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -26,46 +26,47 @@ void tty_keys_add(struct tty *, const char *, int, int); struct tty_key_ent { - const char *name; - int code; + enum tty_code_code code; + const char *string; - int flags; + int key; + int flags; }; struct tty_key_ent tty_keys[] = { /* Function keys. */ - { "kf1", KEYC_F1, TTYKEY_MODIFIER }, - { "kf2", KEYC_F2, TTYKEY_MODIFIER }, - { "kf3", KEYC_F3, TTYKEY_MODIFIER }, - { "kf4", KEYC_F4, TTYKEY_MODIFIER }, - { "kf5", KEYC_F5, TTYKEY_MODIFIER }, - { "kf6", KEYC_F6, TTYKEY_MODIFIER }, - { "kf7", KEYC_F7, TTYKEY_MODIFIER }, - { "kf8", KEYC_F8, TTYKEY_MODIFIER }, - { "kf9", KEYC_F9, TTYKEY_MODIFIER }, - { "kf10", KEYC_F10, TTYKEY_MODIFIER }, - { "kf11", KEYC_F11, TTYKEY_MODIFIER }, - { "kf12", KEYC_F12, TTYKEY_MODIFIER }, - { "kich1", KEYC_IC, TTYKEY_MODIFIER }, - { "kdch1", KEYC_DC, TTYKEY_MODIFIER }, - { "khome", KEYC_HOME, TTYKEY_MODIFIER }, - { "kend", KEYC_END, TTYKEY_MODIFIER }, - { "knp", KEYC_NPAGE, TTYKEY_MODIFIER }, - { "kpp", KEYC_PPAGE, TTYKEY_MODIFIER }, - - /* Arrow keys. */ - { "kcuu1", KEYC_UP, TTYKEY_MODIFIER }, - { "kcud1", KEYC_DOWN, TTYKEY_MODIFIER }, - { "kcub1", KEYC_LEFT, TTYKEY_MODIFIER }, - { "kcuf1", KEYC_RIGHT, TTYKEY_MODIFIER }, - { "\033OA",KEYC_UP, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033OB",KEYC_DOWN, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033OD",KEYC_LEFT, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033OC",KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033[A",KEYC_UP, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033[B",KEYC_DOWN, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033[D",KEYC_LEFT, TTYKEY_RAW|TTYKEY_MODIFIER }, - { "\033[C",KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, + { TTYC_KF1, NULL, KEYC_F1, TTYKEY_MODIFIER }, + { TTYC_KF2, NULL, KEYC_F2, TTYKEY_MODIFIER }, + { TTYC_KF3, NULL, KEYC_F3, TTYKEY_MODIFIER }, + { TTYC_KF4, NULL, KEYC_F4, TTYKEY_MODIFIER }, + { TTYC_KF5, NULL, KEYC_F5, TTYKEY_MODIFIER }, + { TTYC_KF6, NULL, KEYC_F6, TTYKEY_MODIFIER }, + { TTYC_KF7, NULL, KEYC_F7, TTYKEY_MODIFIER }, + { TTYC_KF8, NULL, KEYC_F8, TTYKEY_MODIFIER }, + { TTYC_KF9, NULL, KEYC_F9, TTYKEY_MODIFIER }, + { TTYC_KF10, NULL, KEYC_F10, TTYKEY_MODIFIER }, + { TTYC_KF11, NULL, KEYC_F11, TTYKEY_MODIFIER }, + { TTYC_KF12, NULL, KEYC_F12, TTYKEY_MODIFIER }, + { TTYC_KICH1, NULL, KEYC_IC, TTYKEY_MODIFIER }, + { TTYC_KDCH1, NULL, KEYC_DC, TTYKEY_MODIFIER }, + { TTYC_KHOME, NULL, KEYC_HOME, TTYKEY_MODIFIER }, + { TTYC_KEND, NULL, KEYC_END, TTYKEY_MODIFIER }, + { TTYC_KNP, NULL, KEYC_NPAGE, TTYKEY_MODIFIER }, + { TTYC_KPP, NULL, KEYC_PPAGE, TTYKEY_MODIFIER }, + + /* Arrow keys. */ + { TTYC_KCUU1, NULL, KEYC_UP, TTYKEY_MODIFIER }, + { TTYC_KCUD1, NULL, KEYC_DOWN, TTYKEY_MODIFIER }, + { TTYC_KCUB1, NULL, KEYC_LEFT, TTYKEY_MODIFIER }, + { TTYC_KCUF1, NULL, KEYC_RIGHT, TTYKEY_MODIFIER }, + { 0, "\033OA", KEYC_UP, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033OB", KEYC_DOWN, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033OD", KEYC_LEFT, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033OC", KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033[A", KEYC_UP, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033[B", KEYC_DOWN, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033[D", KEYC_LEFT, TTYKEY_RAW|TTYKEY_MODIFIER }, + { 0, "\033[C", KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, /* * Numeric keypad. termcap and terminfo are totally confusing for this. @@ -77,22 +78,22 @@ struct tty_key_ent tty_keys[] = { * mode. Translation of numbers mode/applications mode is done in * input-keys.c. */ - { "\033Oo", KEYC_KP0_1, TTYKEY_RAW }, - { "\033Oj", KEYC_KP0_2, TTYKEY_RAW }, - { "\033Om", KEYC_KP0_3, TTYKEY_RAW }, - { "\033Ow", KEYC_KP1_0, TTYKEY_RAW }, - { "\033Ox", KEYC_KP1_1, TTYKEY_RAW }, - { "\033Oy", KEYC_KP1_2, TTYKEY_RAW }, - { "\033Ok", KEYC_KP1_3, TTYKEY_RAW }, - { "\033Ot", KEYC_KP2_0, TTYKEY_RAW }, - { "\033Ou", KEYC_KP2_1, TTYKEY_RAW }, - { "\033Ov", KEYC_KP2_2, TTYKEY_RAW }, - { "\033Oq", KEYC_KP3_0, TTYKEY_RAW }, - { "\033Or", KEYC_KP3_1, TTYKEY_RAW }, - { "\033Os", KEYC_KP3_2, TTYKEY_RAW }, - { "\033OM", KEYC_KP3_3, TTYKEY_RAW }, - { "\033Op", KEYC_KP4_0, TTYKEY_RAW }, - { "\033On", KEYC_KP4_2, TTYKEY_RAW }, + { 0, "\033Oo", KEYC_KP0_1, TTYKEY_RAW }, + { 0, "\033Oj", KEYC_KP0_2, TTYKEY_RAW }, + { 0, "\033Om", KEYC_KP0_3, TTYKEY_RAW }, + { 0, "\033Ow", KEYC_KP1_0, TTYKEY_RAW }, + { 0, "\033Ox", KEYC_KP1_1, TTYKEY_RAW }, + { 0, "\033Oy", KEYC_KP1_2, TTYKEY_RAW }, + { 0, "\033Ok", KEYC_KP1_3, TTYKEY_RAW }, + { 0, "\033Ot", KEYC_KP2_0, TTYKEY_RAW }, + { 0, "\033Ou", KEYC_KP2_1, TTYKEY_RAW }, + { 0, "\033Ov", KEYC_KP2_2, TTYKEY_RAW }, + { 0, "\033Oq", KEYC_KP3_0, TTYKEY_RAW }, + { 0, "\033Or", KEYC_KP3_1, TTYKEY_RAW }, + { 0, "\033Os", KEYC_KP3_2, TTYKEY_RAW }, + { 0, "\033OM", KEYC_KP3_3, TTYKEY_RAW }, + { 0, "\033Op", KEYC_KP4_0, TTYKEY_RAW }, + { 0, "\033On", KEYC_KP4_2, TTYKEY_RAW }, }; RB_GENERATE(tty_keys, tty_key, entry, tty_keys_cmp); @@ -106,21 +107,20 @@ tty_keys_cmp(struct tty_key *k1, struct tty_key *k2) } void -tty_keys_add(struct tty *tty, const char *s, int code, int flags) +tty_keys_add(struct tty *tty, const char *s, int key, int flags) { struct tty_key *tk; tk = xmalloc(sizeof *tk); tk->string = xstrdup(s); - tk->code = code; + tk->key = key; tk->flags = flags; if (strlen(tk->string) > tty->ksize) tty->ksize = strlen(tk->string); RB_INSERT(tty_keys, &tty->ktree, tk); - log_debug( - "new key %x: size now %zu (%s)", code, tty->ksize, tk->string); + log_debug("new key %x: size now %zu (%s)", key, tty->ksize, tk->string); } void @@ -138,21 +138,21 @@ tty_keys_init(struct tty *tty) tke = &tty_keys[i]; if (tke->flags & TTYKEY_RAW) - s = tke->name; + s = tke->string; else { - s = tigetstr(tke->name); - if (s == (char *) -1 || s == (char *) 0) + if (!tty_term_has(tty->term, tke->code)) continue; + s = tty_term_string(tty->term, tke->code); if (s[0] != '\033' || s[1] == '\0') continue; } - tty_keys_add(tty, s + 1, tke->code, tke->flags); + tty_keys_add(tty, s + 1, tke->key, tke->flags); if (tke->flags & TTYKEY_MODIFIER) { if (strlcpy(tmp, s, sizeof tmp) >= sizeof tmp) continue; tmp[strlen(tmp) - 1] ^= 0x20; - tty_keys_add(tty, tmp + 1, KEYC_ADDCTL(tke->code), 0); + tty_keys_add(tty, tmp + 1, KEYC_ADDCTL(tke->key), 0); } } } @@ -201,7 +201,7 @@ tty_keys_find(struct tty *tty, char *buf, size_t len, size_t *size) } int -tty_keys_next(struct tty *tty, int *code) +tty_keys_next(struct tty *tty, int *key) { struct tty_key *tk; struct timeval tv; @@ -216,14 +216,14 @@ tty_keys_next(struct tty *tty, int *code) /* If a normal key, return it. */ if (*buf != '\033') { - *code = buffer_read8(tty->in); + *key = buffer_read8(tty->in); return (0); } /* Look for matching key string and return if found. */ tk = tty_keys_find(tty, buf + 1, len - 1, &size); if (tk != NULL) { - *code = tk->code; + *key = tk->key; buffer_remove(tty->in, size + 1); tty->flags &= ~TTY_ESCAPE; @@ -239,35 +239,35 @@ tty_keys_next(struct tty *tty, int *code) tk = tty_keys_find(tty, tmp + 1, len - 3, &size); if (tk != NULL) { - *code = tk->code; + *key = tk->key; buffer_remove(tty->in, size + 3); switch (arg) { case '8': - *code = KEYC_ADDSFT(*code); - *code = KEYC_ADDESC(*code); - *code = KEYC_ADDCTL(*code); + *key = KEYC_ADDSFT(*key); + *key = KEYC_ADDESC(*key); + *key = KEYC_ADDCTL(*key); break; case '7': - *code = KEYC_ADDESC(*code); - *code = KEYC_ADDCTL(*code); + *key = KEYC_ADDESC(*key); + *key = KEYC_ADDCTL(*key); break; case '6': - *code = KEYC_ADDSFT(*code); - *code = KEYC_ADDCTL(*code); + *key = KEYC_ADDSFT(*key); + *key = KEYC_ADDCTL(*key); break; case '5': - *code = KEYC_ADDCTL(*code); + *key = KEYC_ADDCTL(*key); break; case '4': - *code = KEYC_ADDSFT(*code); - *code = KEYC_ADDESC(*code); + *key = KEYC_ADDSFT(*key); + *key = KEYC_ADDESC(*key); break; case '3': - *code = KEYC_ADDESC(*code); + *key = KEYC_ADDESC(*key); break; case '2': - *code = KEYC_ADDSFT(*code); + *key = KEYC_ADDSFT(*key); break; } @@ -302,26 +302,26 @@ tty_keys_next(struct tty *tty, int *code) /* If we have no following data, return escape. */ if (len == 0) { - *code = '\033'; + *key = '\033'; return (0); } /* If a normal key follows, return it. */ if (*buf != '\033') { - *code = KEYC_ADDESC(buffer_read8(tty->in)); + *key = KEYC_ADDESC(buffer_read8(tty->in)); return (0); } /* Try to look up the key. */ tk = tty_keys_find(tty, buf + 1, len - 1, &size); if (tk != NULL) { - *code = KEYC_ADDESC(tk->code); + *key = KEYC_ADDESC(tk->key); buffer_remove(tty->in, size + 1); return (0); } /* If not found, return escape-escape. */ - *code = KEYC_ADDESC('\033'); + *key = KEYC_ADDESC('\033'); buffer_remove(tty->in, 1); return (0); } |