ui/ncurses: Handle arrow key variants
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>
Mon, 20 Nov 2017 01:59:26 +0000 (12:59 +1100)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Tue, 21 Nov 2017 03:23:05 +0000 (14:23 +1100)
In the vt100 'application' cursor mode arrow keys produce ^[Ox rather
than the usual ^[[x. Add this pattern to our defined keys so we don't
accidentally catch the escape key.

For reference:
http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-21.html

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
ui/ncurses/nc-cui.c

index 8060510da0cd29010b33af506cc3da399dab3a40..64b1f646fa3ba8f426792fde5fa99a750e4e94c7 100644 (file)
@@ -98,8 +98,18 @@ static void cui_start(void)
        define_key("\x1b\x4f\x46", KEY_END);
        define_key("OH", KEY_HOME);
        define_key("OF", KEY_END);
+
+       /* Arrow keys in normal cursor mode */
        define_key("\x1b\x5b\x41", KEY_UP);
        define_key("\x1b\x5b\x42", KEY_DOWN);
+       define_key("\x1b\x5b\x43", KEY_RIGHT);
+       define_key("\x1b\x5b\x44", KEY_LEFT);
+       /* Arrow keys in "application" cursor mode */
+       define_key("\x1b\x4f\x41", KEY_UP);
+       define_key("\x1b\x4f\x42", KEY_DOWN);
+       define_key("\x1b\x4f\x43", KEY_RIGHT);
+       define_key("\x1b\x4f\x44", KEY_LEFT);
+
        define_key("\x1b\x5b\x33\x7e", KEY_DC);
 
        while (getch() != ERR)          /* flush stdin */