aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Wellons <wellons@nullprogram.com>2021-01-12 11:24:11 -0500
committerRon Yorston <rmy@pobox.com>2021-01-13 11:27:05 +0000
commitc915ec56a54c9fbad8fde65631f8343a588398b3 (patch)
treeffc6196957fcfb5ab54e21a3d0aee56e4398ccf4
parentf902184fa8aa37b0ce8b725da5657ef2ed2005dd (diff)
downloadbusybox-w32-c915ec56a54c9fbad8fde65631f8343a588398b3.tar.gz
busybox-w32-c915ec56a54c9fbad8fde65631f8343a588398b3.tar.bz2
busybox-w32-c915ec56a54c9fbad8fde65631f8343a588398b3.zip
win32: handle various Alt key modifiers in termios
This patch restores support for Bash-stle Alt commands present in the original BusyBox: * Alt-b, Alt-LeftArrow backward word * Alt-f, Alt-RightArrow forward word * Alt-BackSpace delete word backward * Alt-d delete word forward
-rw-r--r--win32/termios.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/win32/termios.c b/win32/termios.c
index 25f2ea48c..708acfa9f 100644
--- a/win32/termios.c
+++ b/win32/termios.c
@@ -61,9 +61,7 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout)
61 case VK_END: 61 case VK_END:
62 case VK_DOWN: 62 case VK_DOWN:
63 case VK_NEXT: 63 case VK_NEXT:
64 case VK_LEFT:
65 case VK_CLEAR: 64 case VK_CLEAR:
66 case VK_RIGHT:
67 case VK_HOME: 65 case VK_HOME:
68 case VK_UP: 66 case VK_UP:
69 case VK_PRIOR: 67 case VK_PRIOR:
@@ -82,6 +80,10 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout)
82 ret = KEYCODE_CTRL_RIGHT; 80 ret = KEYCODE_CTRL_RIGHT;
83 goto done; 81 goto done;
84 } 82 }
83 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) {
84 ret = KEYCODE_ALT_RIGHT;
85 goto done;
86 }
85 ret = KEYCODE_RIGHT; 87 ret = KEYCODE_RIGHT;
86 goto done; 88 goto done;
87 case VK_LEFT: 89 case VK_LEFT:
@@ -89,6 +91,10 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout)
89 ret = KEYCODE_CTRL_LEFT; 91 ret = KEYCODE_CTRL_LEFT;
90 goto done; 92 goto done;
91 } 93 }
94 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) {
95 ret = KEYCODE_ALT_LEFT;
96 goto done;
97 }
92 ret = KEYCODE_LEFT; 98 ret = KEYCODE_LEFT;
93 goto done; 99 goto done;
94 case VK_HOME: ret = KEYCODE_HOME; goto done; 100 case VK_HOME: ret = KEYCODE_HOME; goto done;
@@ -111,6 +117,14 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout)
111 } 117 }
112 ret = record.Event.KeyEvent.uChar.AsciiChar; 118 ret = record.Event.KeyEvent.uChar.AsciiChar;
113#endif 119#endif
120 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) {
121 switch (ret) {
122 case '\b': ret = KEYCODE_ALT_BACKSPACE; goto done;
123 case 'b': ret = KEYCODE_ALT_LEFT; goto done;
124 case 'd': ret = KEYCODE_ALT_D; goto done;
125 case 'f': ret = KEYCODE_ALT_RIGHT; goto done;
126 }
127 }
114 break; 128 break;
115 } 129 }
116 done: 130 done: