emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Next pretest


From: Jason Rumney
Subject: Re: Next pretest
Date: Wed, 27 Jan 2010 22:03:21 +0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.91 (gnu/linux)

Juanma Barranquero <address@hidden> writes:

> On Wed, Jan 27, 2010 at 03:02, Jason Rumney <address@hidden> wrote:
>
>> w32inevt.c needs the equivalent of this code from w32term.c at the point
>> where it currently sets the event kind to ASCII_KEYSTROKE_EVENT.
>>
>>              inev.kind = inev.code < 128 ? ASCII_KEYSTROKE_EVENT
>>                                          : MULTIBYTE_CHAR_KEYSTROKE_EVENT;
>
> ñ ->  "A-C-H-M-S-s-\244 is undefined"
>
> so something more needs to be done.
>
>     Juanma

Please try the following patch:

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: sftp://address@hidden/srv/bzr/emacs\
#   /trunk
# testament_sha1: c5057dffd8857a57cd7e41fafad303e6e94981c9
# timestamp: 2010-01-27 22:00:49 +0800
# base_revision_id: address@hidden
# 
# 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  <address@hidden>
+
+       * w32inevt.c (w32_kbd_patch_key): Save the unicode character.
+       (key_event): Use unicode for characters 128 and higher.
+
 2010-01-27  Kenichi Handa  <address@hidden>
 
        * 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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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]