summaryrefslogtreecommitdiffstats
path: root/input-keys.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2008-07-24 00:03:15 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2008-07-24 00:03:15 +0000
commitee8a9d24580cff5a78833f11e81df4a4f695be95 (patch)
treedd22ff83b35a070f0abd92dd567de2b645f74fe5 /input-keys.c
parente00736b8116d90c19c368c50a4d66092a80c6ef6 (diff)
Handle kcursor+kkeypad (switch to OA from [A).
Diffstat (limited to 'input-keys.c')
-rw-r--r--input-keys.c93
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;
}