From f641ef1a0712d5ca1a9a6dc39d4f0846b11bc26b Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 19 Nov 2020 22:06:23 +0200 Subject: [PATCH 1/3] Improve documentation of 'font-spec' * doc/lispref/display.texi (Low-Level Font): * src/font.c (Ffont_spec): Document 'font-spec' keys that are supported, but were undocumented. --- doc/lispref/display.texi | 14 ++++++++++++++ src/font.c | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index be2de000c35..39cc270a5fd 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -3734,6 +3734,20 @@ Additional typographic style information for the font, such as The charset registry and encoding of the font, such as @samp{iso8859-1}. The value should be a string or a symbol. +@item :dpi +The resolution in dots per inch for which the font is designed. The +value must be a non-negative number. + +@item :spacing +The spacing of the font: proportional, dual, mono, or charcell. The +value should be either an integer (0 for proportional, 90 for dual, +100 for mono, 110 for charcell) or a one-letter symbol (one of +@code{P}, @code{D}, @code{M}, or @code{C}). + +@item :avgwidth +The average width of the font in 1/10 pixel units. The value should +be a non-negative number. + @item :script The script that the font must support (a symbol). diff --git a/src/font.c b/src/font.c index 39ec1b3562a..b71eae6c319 100644 --- a/src/font.c +++ b/src/font.c @@ -3934,6 +3934,23 @@ VALUE must be a non-negative integer or a floating point number specifying the font size. It specifies the font size in pixels (if VALUE is an integer), or in points (if VALUE is a float). +`:dpi' + +VALUE must be a non-negative number that specifies the resolution +(dot per inch) for which the font is designed. + +`:spacing' + +VALUE specifies the spacing of the font: mono, proportional, charcell, +or dual. It can be either a number (0 for proportional, 90 for dual, +100 for mono, 110 for charcell) or a 1-letter symbol: `P', `D', `M', +or `C' (lower-case variants are also accepted). + +`:avgwidth' + +VALUE must be a non-negative integer specifying the average width of +the font in 1/10 pixel units. + `:name' VALUE must be a string of XLFD-style or fontconfig-style font name. From 32b97bb9e0d91522a76c984b594be35343bf9fe3 Mon Sep 17 00:00:00 2001 From: Masahiro Nakamura Date: Sat, 14 Nov 2020 17:55:16 +0900 Subject: [PATCH 2/3] Ignore modifiers when processing WM_IME_CHAR messages * src/w32fns.c (w32_wnd_proc): Ignore modifiers when processing WM_IME_CHAR messages. --- src/w32fns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/w32fns.c b/src/w32fns.c index bbf43717bd1..96cf34430d4 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -4576,7 +4576,7 @@ 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 = w32_get_key_modifiers (wParam, lParam); + wmsg.dwModifiers = 0; /* Get buffer size. */ size = get_composition_string_fn (context, GCS_RESULTSTR, NULL, 0); buffer = alloca (size); From 86cbc9d216c724e6be5db27fb33df2ca0c7d9804 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 21 Nov 2020 10:14:55 +0200 Subject: [PATCH 3/3] 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 61f9c0e1fe2..4855cd3b61d 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 96cf34430d4..fd13a958651 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);