From: Eli Zaretskii Date: Sat, 23 Jun 2012 12:39:23 +0000 (+0300) Subject: Improve and document the language-change event on MS-Windows. X-Git-Tag: emacs-24.2.90~1199^2~387 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0bd8297f9cee150f34cbab14c71825d21d7bf91c;p=emacs.git Improve and document the language-change event on MS-Windows. src/keyboard.c (kbd_buffer_get_event): Include the codepage and the language ID in the event parameters. src/w32term.c (w32_read_socket): Put the new keyboard codepage into event.code, not the obscure "character set ID". doc/lispref/commands.texi (Misc Events): Document the language-change event. --- diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 838617cf866..154b4487d5e 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-06-23 Eli Zaretskii + + * commands.texi (Misc Events): Document the language-change event. + 2012-06-22 Paul Eggert Support higher-resolution time stamps (Bug#9000). diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 59ad2927411..a5fb4638c9d 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1716,6 +1716,38 @@ To test the signal handler, you can make Emacs send a signal to itself: @smallexample (signal-process (emacs-pid) 'sigusr1) @end smallexample + +@cindex @code{language-change} event +@item language-change +This kind of event is generated on MS-Windows when the input language +has changed. This typically means that the keyboard keys will send to +Emacs characters from a different language. The generated event has +this form: + +@smallexample +(language-change @var{frame} @var{codepage} @var{language-id}) +@end smallexample + +@noindent +Here @var{frame} is the frame which was current when the input +language changed; @var{codepage} is the new codepage number; and +@var{language-id} is the numerical ID of the new input language. The +coding-system (@pxref{Coding Systems}) that corresponds to +@var{codepage} is @code{cp@var{codepage}} or +@code{windows-@var{codepage}}. To convert @var{language-id} to a +string (e.g., to use it for various language-dependent features, such +as @code{set-language-environment}), use the +@code{w32-get-locale-info} function, like this: + +@smallexample +;; Get the abbreviated language name, such as "ENU" for English +(w32-get-locale-info language-id) +;; Get the full English name of the language, +;; such as "English (United States)" +(w32-get-locale-info language-id 4097) +;; Get the full localized name of the language +(w32-get-locale-info language-id t) +@end smallexample @end table If one of these events arrives in the middle of a key sequence---that diff --git a/src/ChangeLog b/src/ChangeLog index 2266ccc49ef..a01a93f86e9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-06-23 Eli Zaretskii + + * keyboard.c (kbd_buffer_get_event): Include the codepage and the + language ID in the event parameters. + + * w32term.c (w32_read_socket): Put the new keyboard codepage into + event.code, not the obscure "character set ID". + 2012-06-23 Chong Yidong * xmenu.c (x_menu_wait_for_event): Adapt GTK3 to new xg_select. diff --git a/src/keyboard.c b/src/keyboard.c index 9b80c5c7019..0e8d22c2b1c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3982,9 +3982,11 @@ kbd_buffer_get_event (KBOARD **kbp, #if defined (WINDOWSNT) else if (event->kind == LANGUAGE_CHANGE_EVENT) { - /* Make an event (language-change (FRAME CHARSET LCID)). */ - obj = Fcons (event->frame_or_window, Qnil); - obj = Fcons (Qlanguage_change, Fcons (obj, Qnil)); + /* Make an event (language-change (FRAME CODEPAGE LANGUAGE-ID)). */ + obj = Fcons (Qlanguage_change, + list3 (event->frame_or_window, + make_number (event->code), + make_number (event->modifiers))); kbd_fetch_ptr = event + 1; } #endif diff --git a/src/w32term.c b/src/w32term.c index 6a4b3ca4afb..4f4fa220a7b 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -4234,8 +4234,8 @@ w32_read_socket (struct terminal *terminal, int expected, /* Generate a language change event. */ f = x_window_to_frame (dpyinfo, msg.msg.hwnd); - /* lParam contains the input lang ID. Use it to update our - record of the keyboard codepage. */ + /* lParam contains the input language ID in its low 16 bits. + Use it to update our record of the keyboard codepage. */ keyboard_codepage = codepage_for_locale ((LCID)(msg.msg.lParam & 0xffff)); @@ -4243,7 +4243,7 @@ w32_read_socket (struct terminal *terminal, int expected, { inev.kind = LANGUAGE_CHANGE_EVENT; XSETFRAME (inev.frame_or_window, f); - inev.code = msg.msg.wParam; + inev.code = keyboard_codepage; inev.modifiers = msg.msg.lParam & 0xffff; } break;