emacs-diffs
[Top][All Lists]
Advanced

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

emacs-27 86cbc9d 2/2: Make ignoring modifiers on IME input optional


From: Eli Zaretskii
Subject: emacs-27 86cbc9d 2/2: Make ignoring modifiers on IME input optional
Date: Sat, 21 Nov 2020 03:16:49 -0500 (EST)

branch: emacs-27
commit 86cbc9d216c724e6be5db27fb33df2ca0c7d9804
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Make ignoring modifiers on IME input optional
    
    By default, ignore modifier keys on IME input, but add
    a variable to get back old behavior.
    * src/w32fns.c (syms_of_w32fns): New variable
    w32-ignore-modifiers-on-IME-input.
    (w32_wnd_proc): Use it to ignore modifier keys when IME input is
    used.  (Bug#44641)
    
    * etc/NEWS: Announce the change and the new variable.
---
 etc/NEWS     |  9 ++++++++-
 src/w32fns.c | 14 +++++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 61f9c0e..4855cd3 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -48,7 +48,7 @@ skip leading or trailing empty lines of the buffer.
 
 ** Tramp
 
-*** The user option 'tramp-completion-reread-directory-timeout' is made 
obsolete.
+*** The user option 'tramp-completion-reread-directory-timeout' is now 
obsolete.
 
 
 * New Modes and Packages in Emacs 27.2
@@ -62,6 +62,13 @@ skip leading or trailing empty lines of the buffer.
 
 * Changes in Emacs 27.2 on Non-Free Operating Systems
 
+** Emacs now ignores modifier keys when IME input is used.
+By default, pressing Ctrl, Shift, and Alt keys while using IME input
+will no longer apply the modifiers to the produced characters, as
+there are IMEs which use keys with modifiers to input some
+characters.  Customize the variable 'w32-ignore-modifiers-on-IME-input'
+to nil to get back the old behavior.
+
 
 * Installation Changes in Emacs 27.1
 
diff --git a/src/w32fns.c b/src/w32fns.c
index 96cf344..fd13a95 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -4576,7 +4576,10 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM 
lParam)
          int size, i;
          W32Msg wmsg;
          HIMC context = get_ime_context_fn (hwnd);
-         wmsg.dwModifiers = 0;
+         wmsg.dwModifiers =
+           w32_ignore_modifiers_on_IME_input
+           ? 0
+           : w32_get_key_modifiers (wParam, lParam);
          /* Get buffer size.  */
          size = get_composition_string_fn (context, GCS_RESULTSTR, NULL, 0);
          buffer = alloca (size);
@@ -10697,6 +10700,15 @@ tip frame.  */);
               doc: /* Non-nil means don't display the abort dialog when 
aborting.  */);
   w32_disable_abort_dialog = 0;
 
+  DEFVAR_BOOL ("w32-ignore-modifiers-on-IME-input",
+              w32_ignore_modifiers_on_IME_input,
+              doc: /* Whether to ignore modifier keys when processing input 
with IME.
+Some MS-Windows input methods use modifier keys such as Ctrl or Alt to input
+characters, in which case applying the modifiers will change the input.
+The default value of this variable is therefore t, to ignore modifier
+keys when IME input is received.  */);
+  w32_ignore_modifiers_on_IME_input = true;
+
 #if 0 /* TODO: Port to W32 */
   defsubr (&Sx_change_window_property);
   defsubr (&Sx_delete_window_property);



reply via email to

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