aboutsummaryrefslogtreecommitdiffstats
path: root/window-xlib.c
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-04-16 19:24:00 -0400
committerJesse Luehrs <doy@tozt.net>2014-04-16 19:24:00 -0400
commitb42b118ec60f845c70baf721a26a7450656d0641 (patch)
treea1fa6b8332c9748c473041626b178688f8f79b4d /window-xlib.c
parent894d707cbf47dd9f4a2ad6624cb6e9e14c945b0c (diff)
downloadrunes-b42b118ec60f845c70baf721a26a7450656d0641.tar.gz
runes-b42b118ec60f845c70baf721a26a7450656d0641.zip
handle application cursor mode
Diffstat (limited to 'window-xlib.c')
-rw-r--r--window-xlib.c46
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: