From b42b118ec60f845c70baf721a26a7450656d0641 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 16 Apr 2014 19:24:00 -0400 Subject: handle application cursor mode --- window-xlib.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'window-xlib.c') diff --git a/window-xlib.c b/window-xlib.c index bc19595..d529c79 100644 --- a/window-xlib.c +++ b/window-xlib.c @@ -56,6 +56,21 @@ static struct function_key keys[] = { RUNES_KEY(XK_F18, "\e[32~"), RUNES_KEY(XK_F19, "\e[33~"), RUNES_KEY(XK_F20, "\e[34~"), + /* XXX keypad keys need to go here too */ + RUNES_KEY(XK_VoidSymbol, "") +}; + +static struct function_key application_keypad_keys[] = { + /* XXX i don't have a keypad on my laptop, need to get one for testing */ + RUNES_KEY(XK_VoidSymbol, "") +}; + +static struct function_key application_cursor_keys[] = { + RUNES_KEY(XK_Up, "\eOA"), + RUNES_KEY(XK_Down, "\eOB"), + RUNES_KEY(XK_Right, "\eOC"), + RUNES_KEY(XK_Left, "\eOD"), + /* XXX home/end? */ RUNES_KEY(XK_VoidSymbol, "") }; #undef RUNES_KEY @@ -304,14 +319,43 @@ static void runes_window_backend_process_event(uv_work_t *req, int status) case XLookupKeySym: { struct function_key *key; + if (t->application_keypad) { + if (t->application_cursor) { + key = &application_cursor_keys[0]; + while (key->sym != XK_VoidSymbol) { + if (key->sym == sym) { + break; + } + key++; + } + if (key->sym != XK_VoidSymbol) { + runes_pty_backend_write(t, key->str, key->len); + break; + } + } + key = &application_keypad_keys[0]; + while (key->sym != XK_VoidSymbol) { + if (key->sym == sym) { + break; + } + key++; + } + if (key->sym != XK_VoidSymbol) { + runes_pty_backend_write(t, key->str, key->len); + break; + } + } key = &keys[0]; while (key->sym != XK_VoidSymbol) { if (key->sym == sym) { - runes_pty_backend_write(t, key->str, key->len); break; } key++; } + if (key->sym != XK_VoidSymbol) { + runes_pty_backend_write(t, key->str, key->len); + break; + } break; } default: -- cgit v1.2.3-54-g00ecf