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; |