about summary refs log tree commit diff stats
path: root/termbox
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-09-02 19:18:24 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-09-02 19:18:37 -0700
commit4d6b5173e744173074e191976eb872349a661cd0 (patch)
treeeb40569e8ce86bd3012d8054099e409dd7bde274 /termbox
parent7dcdd40c2749f5aff5ea9553acdba9e1218e90d1 (diff)
downloadmu-4d6b5173e744173074e191976eb872349a661cd0.tar.gz
2132 - support for ctrl + arrow keys
Diffstat (limited to 'termbox')
-rw-r--r--termbox/input.inl23
-rw-r--r--termbox/termbox.h8
2 files changed, 27 insertions, 4 deletions
diff --git a/termbox/input.inl b/termbox/input.inl
index 4cbba0a5..97ea1190 100644
--- a/termbox/input.inl
+++ b/termbox/input.inl
@@ -80,6 +80,26 @@ static int parse_escape_seq(struct tb_event *event, const char *buf, int len)
     event->key = TB_KEY_END_PASTE;
     return strlen("\033[201~");
   }
+  if (starts_with(buf, len, "\033[1;5A")) {
+    event->ch = 0;
+    event->key = TB_KEY_CTRL_ARROW_UP;
+    return strlen("\033[1;5A");
+  }
+  if (starts_with(buf, len, "\033[1;5B")) {
+    event->ch = 0;
+    event->key = TB_KEY_CTRL_ARROW_DOWN;
+    return strlen("\033[1;5B");
+  }
+  if (starts_with(buf, len, "\033[1;5C")) {
+    event->ch = 0;
+    event->key = TB_KEY_CTRL_ARROW_RIGHT;
+    return strlen("\033[1;5C");
+  }
+  if (starts_with(buf, len, "\033[1;5D")) {
+    event->ch = 0;
+    event->key = TB_KEY_CTRL_ARROW_LEFT;
+    return strlen("\033[1;5D");
+  }
 
   return 0;
 }
@@ -97,9 +117,8 @@ static bool extract_event(struct tb_event *event, struct bytebuffer *inbuf)
 //?     FOO("%x\n", (unsigned char)buf[x]);
 //?   }
   if (buf[0] == '\033') {
-//?     FOO("AAA\n");
     int n = parse_escape_seq(event, buf, len);
-//?     FOO("AAA: %u %u %u %u\n", n, (unsigned int)event->type, (unsigned int)event->key, event->ch);
+//?     FOO("parsed: %u %u %u %u\n", n, (unsigned int)event->type, (unsigned int)event->key, event->ch);
     if (n != 0) {
       bool success = true;
       if (n < 0) {
diff --git a/termbox/termbox.h b/termbox/termbox.h
index a94d2b85..d52f2565 100644
--- a/termbox/termbox.h
+++ b/termbox/termbox.h
@@ -130,8 +130,12 @@ struct tb_event {
 #define TB_KEY_MOUSE_RELEASE    (0xFFFF-25)
 #define TB_KEY_MOUSE_WHEEL_UP   (0xFFFF-26)
 #define TB_KEY_MOUSE_WHEEL_DOWN (0xFFFF-27)
-#define TB_KEY_START_PASTE (0xFFFF-28)
-#define TB_KEY_END_PASTE (0xFFFF-29)
+#define TB_KEY_START_PASTE      (0xFFFF-28)
+#define TB_KEY_END_PASTE        (0xFFFF-29)
+#define TB_KEY_CTRL_ARROW_UP    (0xFFFF-30)
+#define TB_KEY_CTRL_ARROW_DOWN  (0xFFFF-31)
+#define TB_KEY_CTRL_ARROW_LEFT  (0xFFFF-32)
+#define TB_KEY_CTRL_ARROW_RIGHT (0xFFFF-33)
 /* These are all ASCII code points below SPACE character and a BACKSPACE key. */
 #define TB_KEY_CTRL_TILDE       0x00
 #define TB_KEY_CTRL_2           0x00 /* clash with 'CTRL_TILDE' */