diff options
| -rw-r--r-- | win32/termios.c | 75 |
1 files changed, 33 insertions, 42 deletions
diff --git a/win32/termios.c b/win32/termios.c index 3a381903c..45d4e7740 100644 --- a/win32/termios.c +++ b/win32/termios.c | |||
| @@ -49,55 +49,46 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout) | |||
| 49 | #else | 49 | #else |
| 50 | if (!record.Event.KeyEvent.uChar.AsciiChar) { | 50 | if (!record.Event.KeyEvent.uChar.AsciiChar) { |
| 51 | #endif | 51 | #endif |
| 52 | if (alt_pressed) { | 52 | if (alt_pressed && !(state & ENHANCED_KEY)) { |
| 53 | /* keys on numeric pad used to enter character codes */ | ||
| 53 | switch (record.Event.KeyEvent.wVirtualKeyCode) { | 54 | switch (record.Event.KeyEvent.wVirtualKeyCode) { |
| 54 | case VK_MENU: | 55 | case VK_NUMPAD0: case VK_INSERT: |
| 55 | case VK_INSERT: | 56 | case VK_NUMPAD1: case VK_END: |
| 56 | case VK_END: | 57 | case VK_NUMPAD2: case VK_DOWN: |
| 57 | case VK_DOWN: | 58 | case VK_NUMPAD3: case VK_NEXT: |
| 58 | case VK_NEXT: | 59 | case VK_NUMPAD4: case VK_LEFT: |
| 59 | case VK_CLEAR: | 60 | case VK_NUMPAD5: case VK_CLEAR: |
| 60 | case VK_HOME: | 61 | case VK_NUMPAD6: case VK_RIGHT: |
| 61 | case VK_UP: | 62 | case VK_NUMPAD7: case VK_HOME: |
| 62 | case VK_PRIOR: | 63 | case VK_NUMPAD8: case VK_UP: |
| 63 | case VK_KANA: | 64 | case VK_NUMPAD9: case VK_PRIOR: |
| 64 | continue; | 65 | continue; |
| 65 | } | 66 | } |
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | switch (record.Event.KeyEvent.wVirtualKeyCode) { | 69 | switch (record.Event.KeyEvent.wVirtualKeyCode) { |
| 69 | case VK_DELETE: ret = KEYCODE_DELETE; goto done; | 70 | case VK_DELETE: ret = KEYCODE_DELETE; break; |
| 70 | case VK_INSERT: ret = KEYCODE_INSERT; goto done; | 71 | case VK_INSERT: ret = KEYCODE_INSERT; break; |
| 71 | case VK_UP: ret = KEYCODE_UP; goto done; | 72 | case VK_UP: ret = KEYCODE_UP; break; |
| 72 | case VK_DOWN: ret = KEYCODE_DOWN; goto done; | 73 | case VK_DOWN: ret = KEYCODE_DOWN; break; |
| 73 | case VK_RIGHT: | 74 | case VK_RIGHT: ret = KEYCODE_RIGHT; break; |
| 74 | if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) { | 75 | case VK_LEFT: ret = KEYCODE_LEFT; break; |
| 75 | ret = KEYCODE_CTRL_RIGHT; | 76 | case VK_HOME: ret = KEYCODE_HOME; break; |
| 76 | goto done; | 77 | case VK_END: ret = KEYCODE_END; break; |
| 77 | } | 78 | case VK_PRIOR: ret = KEYCODE_PAGEUP; break; |
| 78 | if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) { | 79 | case VK_NEXT: ret = KEYCODE_PAGEDOWN; break; |
| 79 | ret = KEYCODE_ALT_RIGHT; | 80 | default: |
| 80 | goto done; | 81 | alt_pressed = FALSE; |
| 81 | } | 82 | continue; |
| 82 | ret = KEYCODE_RIGHT; | ||
| 83 | goto done; | ||
| 84 | case VK_LEFT: | ||
| 85 | if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) { | ||
| 86 | ret = KEYCODE_CTRL_LEFT; | ||
| 87 | goto done; | ||
| 88 | } | ||
| 89 | if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) { | ||
| 90 | ret = KEYCODE_ALT_LEFT; | ||
| 91 | goto done; | ||
| 92 | } | ||
| 93 | ret = KEYCODE_LEFT; | ||
| 94 | goto done; | ||
| 95 | case VK_HOME: ret = KEYCODE_HOME; goto done; | ||
| 96 | case VK_END: ret = KEYCODE_END; goto done; | ||
| 97 | case VK_PRIOR: ret = KEYCODE_PAGEUP; goto done; | ||
| 98 | case VK_NEXT: ret = KEYCODE_PAGEDOWN; goto done; | ||
| 99 | } | 83 | } |
| 100 | continue; | 84 | |
| 85 | if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) | ||
| 86 | ret &= ~0x20; | ||
| 87 | if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) | ||
| 88 | ret &= ~0x40; | ||
| 89 | if (state & SHIFT_PRESSED) | ||
| 90 | ret &= ~0x80; | ||
| 91 | goto done; | ||
| 101 | } | 92 | } |
| 102 | #if ENABLE_FEATURE_EURO | 93 | #if ENABLE_FEATURE_EURO |
| 103 | uchar = record.Event.KeyEvent.uChar.UnicodeChar; | 94 | uchar = record.Event.KeyEvent.uChar.UnicodeChar; |
