diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-16 19:24:00 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-16 19:24:00 -0400 |
commit | b42b118ec60f845c70baf721a26a7450656d0641 (patch) | |
tree | a1fa6b8332c9748c473041626b178688f8f79b4d /window-xlib.c | |
parent | 894d707cbf47dd9f4a2ad6624cb6e9e14c945b0c (diff) | |
download | runes-b42b118ec60f845c70baf721a26a7450656d0641.tar.gz runes-b42b118ec60f845c70baf721a26a7450656d0641.zip |
handle application cursor mode
Diffstat (limited to 'window-xlib.c')
-rw-r--r-- | window-xlib.c | 46 |
1 files changed, 45 insertions, 1 deletions
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: |