patch投げ用
修订版 | a9be10d8fcf4b409d612a67ab427b8bca070148d (tree) |
---|---|
时间 | 2016-09-04 04:30:26 |
作者 | SHIRAKATA Kentaro <argrath@ub32...> |
Commiter | SHIRAKATA Kentaro |
fix #36599
@@ -1,4 +1,5 @@ | ||
1 | 1 | * 一部の死因で「死んだ」が表示されない問題を修正 (#36579) |
2 | + * Windows10のttyで日本語が入力できない問題を修正 (#36599) | |
2 | 3 | |
3 | 4 | Sun Jun 11 2016 Kentaro Shirakata <argrath@ub32.org> |
4 | 5 |
@@ -262,6 +262,11 @@ INPUT_RECORD *ir; | ||
262 | 262 | return retval; |
263 | 263 | } |
264 | 264 | |
265 | +#if 1 /*JP*/ | |
266 | +static INPUT_RECORD irbuf[2]; | |
267 | +static int irbufnext = 0; | |
268 | +#endif | |
269 | + | |
265 | 270 | int __declspec(dllexport) __stdcall CheckInput(hConIn, ir, count, numpad, |
266 | 271 | mode, mod, cc) |
267 | 272 | HANDLE hConIn; |
@@ -285,7 +290,24 @@ coord *cc; | ||
285 | 290 | if (dwWait == WAIT_FAILED) |
286 | 291 | return '\033'; |
287 | 292 | #endif |
293 | +#if 0 /*JP*/ | |
288 | 294 | ReadConsoleInput(hConIn, ir, 1, count); |
295 | +#else | |
296 | + /*JP | |
297 | + Windows8以降では日本語を入力すると2バイトまとめて返ってくるので | |
298 | + 2バイト目をキャッシュして1バイトずつ返す。 | |
299 | + */ | |
300 | + if (irbufnext == 1) { | |
301 | + memcpy(ir, &irbuf[1], sizeof(INPUT_RECORD)); | |
302 | + irbufnext = 0; | |
303 | + } else { | |
304 | + ReadConsoleInput(hConIn, irbuf, 2, count); | |
305 | + memcpy(ir, &irbuf[0], sizeof(INPUT_RECORD)); | |
306 | + if (*count == 2) { | |
307 | + irbufnext = 1; | |
308 | + } | |
309 | + } | |
310 | +#endif | |
289 | 311 | if (mode == 0) { |
290 | 312 | if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) { |
291 | 313 | ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0); |