Commit 0bd8297f authored by Eli Zaretskii's avatar Eli Zaretskii

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.
parent 63def6b6
2012-06-23 Eli Zaretskii <eliz@gnu.org>
* commands.texi (Misc Events): Document the language-change event.
2012-06-22 Paul Eggert <eggert@cs.ucla.edu> 2012-06-22 Paul Eggert <eggert@cs.ucla.edu>
Support higher-resolution time stamps (Bug#9000). Support higher-resolution time stamps (Bug#9000).
......
...@@ -1716,6 +1716,38 @@ To test the signal handler, you can make Emacs send a signal to itself: ...@@ -1716,6 +1716,38 @@ To test the signal handler, you can make Emacs send a signal to itself:
@smallexample @smallexample
(signal-process (emacs-pid) 'sigusr1) (signal-process (emacs-pid) 'sigusr1)
@end smallexample @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 @end table
If one of these events arrives in the middle of a key sequence---that If one of these events arrives in the middle of a key sequence---that
......
2012-06-23 Eli Zaretskii <eliz@gnu.org>
* 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 <cyd@gnu.org> 2012-06-23 Chong Yidong <cyd@gnu.org>
* xmenu.c (x_menu_wait_for_event): Adapt GTK3 to new xg_select. * xmenu.c (x_menu_wait_for_event): Adapt GTK3 to new xg_select.
......
...@@ -3982,9 +3982,11 @@ kbd_buffer_get_event (KBOARD **kbp, ...@@ -3982,9 +3982,11 @@ kbd_buffer_get_event (KBOARD **kbp,
#if defined (WINDOWSNT) #if defined (WINDOWSNT)
else if (event->kind == LANGUAGE_CHANGE_EVENT) else if (event->kind == LANGUAGE_CHANGE_EVENT)
{ {
/* Make an event (language-change (FRAME CHARSET LCID)). */ /* Make an event (language-change (FRAME CODEPAGE LANGUAGE-ID)). */
obj = Fcons (event->frame_or_window, Qnil); obj = Fcons (Qlanguage_change,
obj = Fcons (Qlanguage_change, Fcons (obj, Qnil)); list3 (event->frame_or_window,
make_number (event->code),
make_number (event->modifiers)));
kbd_fetch_ptr = event + 1; kbd_fetch_ptr = event + 1;
} }
#endif #endif
......
...@@ -4234,8 +4234,8 @@ w32_read_socket (struct terminal *terminal, int expected, ...@@ -4234,8 +4234,8 @@ w32_read_socket (struct terminal *terminal, int expected,
/* Generate a language change event. */ /* Generate a language change event. */
f = x_window_to_frame (dpyinfo, msg.msg.hwnd); f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
/* lParam contains the input lang ID. Use it to update our /* lParam contains the input language ID in its low 16 bits.
record of the keyboard codepage. */ Use it to update our record of the keyboard codepage. */
keyboard_codepage = codepage_for_locale ((LCID)(msg.msg.lParam keyboard_codepage = codepage_for_locale ((LCID)(msg.msg.lParam
& 0xffff)); & 0xffff));
...@@ -4243,7 +4243,7 @@ w32_read_socket (struct terminal *terminal, int expected, ...@@ -4243,7 +4243,7 @@ w32_read_socket (struct terminal *terminal, int expected,
{ {
inev.kind = LANGUAGE_CHANGE_EVENT; inev.kind = LANGUAGE_CHANGE_EVENT;
XSETFRAME (inev.frame_or_window, f); XSETFRAME (inev.frame_or_window, f);
inev.code = msg.msg.wParam; inev.code = keyboard_codepage;
inev.modifiers = msg.msg.lParam & 0xffff; inev.modifiers = msg.msg.lParam & 0xffff;
} }
break; break;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment