Subject: bug#10299: Emacs doesn't handle Unicode characters in keyboard layout on MS Windows

From: Joakim Hårsman <[email-masked]>
Date: Thu, 15 Dec 2011 22:47:17 +0100

On 15 December 2011 21:50, Joakim Hårsman <[email-masked]> wrote:
> On 15 December 2011 18:34, Eli Zaretskii <[email-masked]> wrote:
>>> From: Jason Rumney <[email-masked]>
>>> Cc: Joakim Hårsman <[email-masked]>,
>>>   [email-masked],  [email-masked]
>>> Date: Thu, 15 Dec 2011 22:40:15 +0800
>>>
>>> > Yes, Emacs on Windows uses the ANSI codepage to read the keyboard
>>> > input.  Does it help to play with the value of keyboard-coding-system?
>>>
>>> It tries to use Unicode if the Windows input method is sending it.
>>
>> But am I right that, except for perhaps IME, we mostly get WM_CHAR
>> messages with ANSI character set, because we call the ANSI version of
>> RegisterClass?
>>
>> If that is the reason, are there any complications to call
>> RegisterClassW instead (on NT and later systems; I think Windows 9X
>> are safer with ANSI)?
>>
>>> Some input methods will send WM_UNICHAR messages with the Unicode
>>> character, which can be intercepted before they are turned into question
>>> marks by Windows. These will just work with Emacs.
>>>
>>> Others will send character codes corresponding to the codepoints in the
>>> default Windows codepage for that language (regardless of your system
>>> codepage). These can be handled by changing keyboard-coding-system
>>> within Emacs.
>>>
>>> Others will not send anything useful unless your system codepage is set
>>> appropriately for the language being input.
>>>
>>> It sounds like this one may be in the third category.
>>
>> I'm not sure MKLC works through IME.  Do you know that for a fact?
>
> No, I'm just guessing since Emacs has worked with Unicode IMEs I've
> tried in the past, but doesn't work with MKLC layouts. Instead of
> debating, it seems easier to just get Emacs running with a debugger
> and see what messages get delivered and what happens to them.
>
> Anyway, I've gotten the latest Bazaar trunk but I haven't managed to
> get it to build, compilation of make-docfile.c fails because it can't
> find config.h:
>
> gcc -I. -c -gdwarf-2 -g3  -mtune=pentium4 -O2      -Demacs=1 -DHAVE_CONFIG_H -I.
> ./lib -I../nt/inc -DHAVE_NTGUI=1 -DUSE_CRT_DLL=1 -DPURESIZE=5000000 -DPURESIZE=5
> 000000 -o oo-spd/i386/make-docfile.o make-docfile.c
> make-docfile.c:36:20: config.h: No such file or directory
> make-docfile.c:79: error: syntax error before "NO_RETURN"
> make-docfile.c:79: warning: data definition has no type or storage class
> make[8]: *** [oo-spd/i386/make-docfile.o] Error 1
> make[8]: Leaving directory `D:/Dev_projects/emacs/trunk/lib-src'
> make[7]: *** [bootstrap-gmake] Error 2
> make[7]: Leaving directory `D:/Dev_projects/emacs/trunk/nt'
>
> I'm not really sure what to make of this, config.h is in trunk/src,
> but gcc doesn't seem to be looking there from what I can see. Are
> there more detailed build instructions available or is nt/INSTALL all
> there is?
>
> All I'm doing is cd:ing into the nt directory, running configure and
> then make bootstrap.

Never mind, I got the build to work.

It turns out I only got the above error the second time I ran "make
bootstrap", presumably because some environment variable lingers from
the first invocation and messes things up.

To get the build to work I had to use a fresh shell and explicitly set
SHELL=cmd.exe when invoking make, then everything worked. I'll try to
attach a debugger tomorrow.