about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--console.mu3
-rw-r--r--termbox/input.inl23
-rw-r--r--termbox/termbox.h8
3 files changed, 29 insertions, 5 deletions
diff --git a/console.mu b/console.mu
index a1bda1bc..7c43bde9 100644
--- a/console.mu
+++ b/console.mu
@@ -5,10 +5,11 @@
 recipe main [
   open-console
   {
-    _, found?:boolean <- check-for-interaction
+    e:event, found?:boolean <- check-for-interaction
     break-if found?
     print-character-to-display 97, 7/white
     loop
   }
   close-console
+  $print e, 10/newline
 ]
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' */