Handle kcursor+kkeypad (switch to OA from [A).

This commit is contained in:
Nicholas Marriott
2008-07-24 00:03:15 +00:00
parent e00736b811
commit ee8a9d2458
4 changed files with 63 additions and 45 deletions

View File

@ -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;
}