• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

patch投げ用


Commit MetaInfo

修订版a9be10d8fcf4b409d612a67ab427b8bca070148d (tree)
时间2016-09-04 04:30:26
作者SHIRAKATA Kentaro <argrath@ub32...>
CommiterSHIRAKATA Kentaro

Log Message

fix #36599

更改概述

差异

--- a/ChangeLog.j
+++ b/ChangeLog.j
@@ -1,4 +1,5 @@
11 * 一部の死因で「死んだ」が表示されない問題を修正 (#36579)
2+ * Windows10のttyで日本語が入力できない問題を修正 (#36599)
23
34 Sun Jun 11 2016 Kentaro Shirakata <argrath@ub32.org>
45
--- a/sys/winnt/nhdefkey.c
+++ b/sys/winnt/nhdefkey.c
@@ -262,6 +262,11 @@ INPUT_RECORD *ir;
262262 return retval;
263263 }
264264
265+#if 1 /*JP*/
266+static INPUT_RECORD irbuf[2];
267+static int irbufnext = 0;
268+#endif
269+
265270 int __declspec(dllexport) __stdcall CheckInput(hConIn, ir, count, numpad,
266271 mode, mod, cc)
267272 HANDLE hConIn;
@@ -285,7 +290,24 @@ coord *cc;
285290 if (dwWait == WAIT_FAILED)
286291 return '\033';
287292 #endif
293+#if 0 /*JP*/
288294 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
289311 if (mode == 0) {
290312 if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) {
291313 ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0);