diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2008-07-24 00:03:15 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2008-07-24 00:03:15 +0000 |
commit | ee8a9d24580cff5a78833f11e81df4a4f695be95 (patch) | |
tree | dd22ff83b35a070f0abd92dd567de2b645f74fe5 /input-keys.c | |
parent | e00736b8116d90c19c368c50a4d66092a80c6ef6 (diff) | |
download | rtmux-ee8a9d24580cff5a78833f11e81df4a4f695be95.tar.gz rtmux-ee8a9d24580cff5a78833f11e81df4a4f695be95.tar.bz2 rtmux-ee8a9d24580cff5a78833f11e81df4a4f695be95.zip |
Handle kcursor+kkeypad (switch to OA from [A).
Diffstat (limited to 'input-keys.c')
-rw-r--r-- | input-keys.c | 93 |
1 files changed, 54 insertions, 39 deletions
diff --git a/input-keys.c b/input-keys.c index 24ed8e7b..020225b5 100644 --- a/input-keys.c +++ b/input-keys.c @@ -1,4 +1,4 @@ -/* $Id: input-keys.c,v 1.12 2008-07-23 23:46:51 nicm Exp $ */ +/* $Id: input-keys.c,v 1.13 2008-07-24 00:03:15 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -24,50 +24,59 @@ #include "tmux.h" +#define INPUTKEY_KEYPAD 0x1 +#define INPUTKEY_CURSOR 0x2 struct { int key; const char *data; + int flags; } input_keys[] = { - { KEYC_F1, "\033OP" }, - { KEYC_F2, "\033OQ" }, - { KEYC_F3, "\033OR" }, - { KEYC_F4, "\033OS" }, - { KEYC_F5, "\033[15~" }, - { KEYC_F6, "\033[17~" }, - { KEYC_F7, "\033[18~" }, - { KEYC_F8, "\033[19~" }, - { KEYC_F9, "\033[20~" }, - { KEYC_F10, "\033[21~" }, - { KEYC_F11, "\033[23~" }, - { KEYC_F12, "\033[24~" }, - { KEYC_FIND, "\033[1~" }, - { KEYC_DC, "\033[3~" }, - { KEYC_IC, "\033[2~" }, - { KEYC_NPAGE, "\033[6~" }, - { KEYC_PPAGE, "\033[5~" }, - { KEYC_SELECT, "\033[4~" }, + { KEYC_F1, "\033OP", 0 }, + { KEYC_F2, "\033OQ", 0 }, + { KEYC_F3, "\033OR", 0 }, + { KEYC_F4, "\033OS", 0 }, + { KEYC_F5, "\033[15~", 0 }, + { KEYC_F6, "\033[17~", 0 }, + { KEYC_F7, "\033[18~", 0 }, + { KEYC_F8, "\033[19~", 0 }, + { KEYC_F9, "\033[20~", 0 }, + { KEYC_F10, "\033[21~", 0 }, + { KEYC_F11, "\033[23~", 0 }, + { KEYC_F12, "\033[24~", 0 }, + { KEYC_FIND, "\033[1~", 0 }, + { KEYC_DC, "\033[3~", 0 }, + { KEYC_IC, "\033[2~", 0 }, + { KEYC_NPAGE, "\033[6~", 0 }, + { KEYC_PPAGE, "\033[5~", 0 }, + { KEYC_SELECT, "\033[4~", 0 }, - { KEYC_UP, "\033OA" }, - { KEYC_DOWN, "\033OB" }, - { KEYC_LEFT, "\033OD" }, - { KEYC_RIGHT, "\033OC" }, + /* Keypad + cursor versions must come first. */ + { KEYC_UP, "\033OA", INPUTKEY_KEYPAD|INPUTKEY_CURSOR }, + { KEYC_DOWN, "\033OB", INPUTKEY_KEYPAD|INPUTKEY_CURSOR }, + { KEYC_LEFT, "\033OD", INPUTKEY_KEYPAD|INPUTKEY_CURSOR }, + { KEYC_RIGHT, "\033OC", INPUTKEY_KEYPAD|INPUTKEY_CURSOR }, - { KEYC_KP0_1, "\033Oo" }, - { KEYC_KP0_2, "\033Oj" }, - { KEYC_KP0_3, "\033Om" }, - { KEYC_KP1_0, "\033Ow" }, - { KEYC_KP1_1, "\033Ox" }, - { KEYC_KP1_2, "\033Oy" }, - { KEYC_KP1_3, "\033Ok" }, - { KEYC_KP2_0, "\033Ot" }, - { KEYC_KP2_1, "\033Ou" }, - { KEYC_KP2_2, "\033Ov" }, - { KEYC_KP3_0, "\033Oq" }, - { KEYC_KP3_1, "\033Or" }, - { KEYC_KP3_2, "\033Os" }, - { KEYC_KP3_3, "\033OM" }, - { KEYC_KP4_0, "\033Op" }, - { KEYC_KP4_2, "\033On" }, + { KEYC_UP, "\033[A", 0 }, + { KEYC_DOWN, "\033[B", 0 }, + { KEYC_LEFT, "\033[D", 0 }, + { KEYC_RIGHT, "\033[C", 0 }, + + { KEYC_KP0_1, "\033Oo", 0 }, + { KEYC_KP0_2, "\033Oj", 0 }, + { KEYC_KP0_3, "\033Om", 0 }, + { KEYC_KP1_0, "\033Ow", 0 }, + { KEYC_KP1_1, "\033Ox", 0 }, + { KEYC_KP1_2, "\033Oy", 0 }, + { KEYC_KP1_3, "\033Ok", 0 }, + { KEYC_KP2_0, "\033Ot", 0 }, + { KEYC_KP2_1, "\033Ou", 0 }, + { KEYC_KP2_2, "\033Ov", 0 }, + { KEYC_KP3_0, "\033Oq", 0 }, + { KEYC_KP3_1, "\033Or", 0 }, + { KEYC_KP3_2, "\033Os", 0 }, + { KEYC_KP3_3, "\033OM", 0 }, + { KEYC_KP4_0, "\033Op", 0 }, + { KEYC_KP4_2, "\033On", 0 }, }; #define NINPUTKEYS (sizeof input_keys / sizeof input_keys[0]) @@ -90,6 +99,12 @@ input_key(struct window *w, int key) } for (i = 0; i < NINPUTKEYS; i++) { + if ((input_keys[i].flags & INPUTKEY_KEYPAD) && + !(w->screen->mode & MODE_KKEYPAD)) + continue; + if ((input_keys[i].flags & INPUTKEY_CURSOR) && + !(w->screen->mode & MODE_KCURSOR)) + continue; if (input_keys[i].key == key) break; } |