diff options
author | Christopher Wellons <wellons@nullprogram.com> | 2021-01-12 11:24:11 -0500 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2021-01-13 11:27:05 +0000 |
commit | c915ec56a54c9fbad8fde65631f8343a588398b3 (patch) | |
tree | ffc6196957fcfb5ab54e21a3d0aee56e4398ccf4 | |
parent | f902184fa8aa37b0ce8b725da5657ef2ed2005dd (diff) | |
download | busybox-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.c | 18 |
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: |