# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jasonr@gnu.org-20100127135913-w5ki5nt0nlgk9803 # target_branch: sftp://jasonr@bzr.savannah.gnu.org/srv/bzr/emacs\ # /trunk # testament_sha1: c5057dffd8857a57cd7e41fafad303e6e94981c9 # timestamp: 2010-01-27 22:00:49 +0800 # base_revision_id: handa@m17n.org-20100127052918-sjr9309swfbh2ay4 # # Begin patch === modified file 'src/ChangeLog' --- src/ChangeLog 2010-01-27 05:28:39 +0000 +++ src/ChangeLog 2010-01-27 13:59:13 +0000 @@ -1,3 +1,8 @@ +2010-01-27 Jason Rumney + + * w32inevt.c (w32_kbd_patch_key): Save the unicode character. + (key_event): Use unicode for characters 128 and higher. + 2010-01-27 Kenichi Handa * regex.c (analyse_first): Fix setting of fastmap for unibyte === modified file 'src/w32inevt.c' --- src/w32inevt.c 2010-01-13 08:35:10 +0000 +++ src/w32inevt.c 2010-01-27 13:59:13 +0000 @@ -81,6 +81,9 @@ static INPUT_RECORD event_queue[EVENT_QUEUE_SIZE]; static INPUT_RECORD *queue_ptr = event_queue, *queue_end = event_queue; +/* Temporarily store lead byte of DBCS input sequences. */ +static char dbcs_lead = 0; + static int fill_queue (BOOL block) { @@ -253,13 +256,15 @@ keystate, buf, 128, 0); if (isdead > 0) { - char cp[20]; - int cpId; - - GetLocaleInfo (GetThreadLocale (), + char cp[20]; + int cpId; + + event->uChar.UnicodeChar = buf[isdead - 1]; + + GetLocaleInfo (GetThreadLocale (), LOCALE_IDEFAULTANSICODEPAGE, cp, 20); - cpId = atoi (cp); - isdead = WideCharToMultiByte (cpId, 0, buf, isdead, + cpId = atoi (cp); + isdead = WideCharToMultiByte (cpId, 0, buf, isdead, ansi_code, 4, NULL, NULL); } else @@ -425,8 +430,6 @@ if (lispy_function_keys[event->wVirtualKeyCode] == 0) { - emacs_ev->kind = ASCII_KEYSTROKE_EVENT; - if (!NILP (Vw32_recognize_altgr) && (event->dwControlKeyState & LEFT_CTRL_PRESSED) && (event->dwControlKeyState & RIGHT_ALT_PRESSED)) @@ -461,9 +464,65 @@ else if (event->uChar.AsciiChar == 0) w32_kbd_patch_key (event); } + if (event->uChar.AsciiChar == 0) - return 0; - emacs_ev->code = event->uChar.AsciiChar; + { + emacs_ev->kind = NO_EVENT; + return 0; + } + else if (event->uChar.AsciiChar < 128) + { + emacs_ev->kind = ASCII_KEYSTROKE_EVENT; + emacs_ev->code = event->uChar.AsciiChar; + } + else if (event->uChar.UnicodeChar > 0) + { + emacs_ev->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; + emacs_ev->code = event->uChar.UnicodeChar; + } + else + { + /* Fallback for non-Unicode versions of Windows. */ + wchar_t code; + char dbcs[2]; + char cp[20]; + int cpId; + + /* Get the codepage to interpret this key with. */ + GetLocaleInfo (GetThreadLocale (), + LOCALE_IDEFAULTANSICODEPAGE, cp, 20); + cpId = atoi (cp); + + dbcs[0] = dbcs_lead; + dbcs[1] = event->uChar.AsciiChar; + if (dbcs_lead) + { + dbcs_lead = 0; + if (!MultiByteToWideChar (cpId, 0, dbcs, 2, &code, 1)) + { + /* Garbage */ + DebPrint (("Invalid DBCS sequence: %d %d\n", + dbcs[0], dbcs[1])); + emacs_ev.kind = NO_EVENT; + } + } + else if (IsDBCSLeadByteEx (cpId, dbcs[1])) + { + dbcs_lead = dbcs[1]; + emacs_ev.kind = NO_EVENT; + } + else + { + if (!MultiByteToWideChar (cpId, 0, &dbcs[1], 1, &code, 1)) + { + /* Garbage */ + DebPrint (("Invalid character: %d\n", dbcs[1])); + emacs_ev.kind = NO_EVENT; + } + } + emacs_ev->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; + emacs_ev->code = code; + } } else { # Begin bundle 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