* bug#68338: 30.0.50; Repeat mode and input methods
@ 2024-01-08 22:09 Gautier Ponsinet
2024-01-09 12:53 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Gautier Ponsinet @ 2024-01-08 22:09 UTC (permalink / raw)
To: 68338
Hello everyone,
I have noticed that repeat-mode and input methods don't play well with
each other. For instance, when repeat-mode is activated and an input
method is activated in a buffer, call it bufferA, if I switch window
(other-window) into this bufferA, then the first keypress is not
translated as expected via the input method.
Precisely, here are the steps:
- Start "emacs -Q"
- Activate repeat-mode (M-x repeat-mode <RET>)
- Activate the "greek" input method (C-u C-\ greek <RET>)
- Open an other window (C-x 3)
- Call other-window (C-x o)
- Type the key "a" (which should insert a Greek alpha "α" character)
- It doesn't work: a character "a" is inserted instead of the expected
"α".
Note that the subsequent keypresses of the key "a" correctly insert a
Greek alpha "α".
All the best,
Gautier
In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.39, cairo version 1.18.0) of 2024-01-08 built on gautier-laptop
Repository revision: 774c8ec74c98d69d56b2511a613145f2b69fb2eb
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101010
System Description: Arch Linux
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY
PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
Important settings:
value of $LANG: fr_FR.UTF-8
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util
mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset
image regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo gtk
x-toolkit xinput2 x multi-tty move-toolbar make-network-process emacs)
Memory information:
((conses 16 37890 9329) (symbols 48 5228 0) (strings 32 13103 1374)
(string-bytes 1 375713) (vectors 16 10408)
(vector-slots 8 158172 7882) (floats 8 21 21) (intervals 56 227 0)
(buffers 984 10))
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-08 22:09 bug#68338: 30.0.50; Repeat mode and input methods Gautier Ponsinet
@ 2024-01-09 12:53 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 14:31 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2 siblings, 0 replies; 12+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-09 12:53 UTC (permalink / raw)
To: Gautier Ponsinet; +Cc: 68338
Gautier Ponsinet <gautier@gautierponsinet.xyz> writes:
> Hello everyone,
>
> I have noticed that repeat-mode and input methods don't play well with
> each other. For instance, when repeat-mode is activated and an input
> method is activated in a buffer, call it bufferA, if I switch window
> (other-window) into this bufferA, then the first keypress is not
> translated as expected via the input method.
>
> Precisely, here are the steps:
>
> - Start "emacs -Q"
> - Activate repeat-mode (M-x repeat-mode <RET>)
> - Activate the "greek" input method (C-u C-\ greek <RET>)
> - Open an other window (C-x 3)
> - Call other-window (C-x o)
> - Type the key "a" (which should insert a Greek alpha "α" character)
> - It doesn't work: a character "a" is inserted instead of the expected
> "α".
>
> Note that the subsequent keypresses of the key "a" correctly insert a
> Greek alpha "α".
Hi and thanks for the recipe. I see the same behaviour and I'll try to
look at it.
--
Manuel Giraud
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-08 22:09 bug#68338: 30.0.50; Repeat mode and input methods Gautier Ponsinet
2024-01-09 12:53 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-10 14:31 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 14:36 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2 siblings, 1 reply; 12+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-10 14:31 UTC (permalink / raw)
To: Gautier Ponsinet; +Cc: 68338
Gautier Ponsinet <gautier@gautierponsinet.xyz> writes:
[...]
> Precisely, here are the steps:
>
> - Start "emacs -Q"
> - Activate repeat-mode (M-x repeat-mode <RET>)
> - Activate the "greek" input method (C-u C-\ greek <RET>)
> - Open an other window (C-x 3)
> - Call other-window (C-x o)
> - Type the key "a" (which should insert a Greek alpha "α" character)
> - It doesn't work: a character "a" is inserted instead of the expected
> "α".
>
> Note that the subsequent keypresses of the key "a" correctly insert a
> Greek alpha "α".
Hi,
FWIW, I've found that customizing `repeat-check-key' to nil fixes this
issue for me. Could you confirm this?
--
Manuel Giraud
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-08 22:09 bug#68338: 30.0.50; Repeat mode and input methods Gautier Ponsinet
2024-01-09 12:53 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 14:31 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 17:31 ` Eli Zaretskii
2024-01-11 7:10 ` Juri Linkov
2 siblings, 2 replies; 12+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-10 16:52 UTC (permalink / raw)
To: Gautier Ponsinet; +Cc: 68338
For the record and AFAIU, it seems that having an input method results
in having a translation keymap (see "quail.el"). And OTOH, repeat-mode
sets a transient keymap (see 'set-transient-map' from "subr.el"). So
maybe there is something going on here?
--
Manuel Giraud
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-10 17:31 ` Eli Zaretskii
2024-01-11 7:10 ` Juri Linkov
1 sibling, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2024-01-10 17:31 UTC (permalink / raw)
To: Manuel Giraud, Stefan Monnier; +Cc: 68338, gautier
> Cc: 68338@debbugs.gnu.org
> Date: Wed, 10 Jan 2024 17:52:19 +0100
> From: Manuel Giraud via "Bug reports for GNU Emacs,
> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>
> For the record and AFAIU, it seems that having an input method results
> in having a translation keymap (see "quail.el"). And OTOH, repeat-mode
> sets a transient keymap (see 'set-transient-map' from "subr.el"). So
> maybe there is something going on here?
Perhaps Stefan (CC'ed) could help us out here?
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 17:31 ` Eli Zaretskii
@ 2024-01-11 7:10 ` Juri Linkov
2024-01-11 15:16 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 3:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 2 replies; 12+ messages in thread
From: Juri Linkov @ 2024-01-11 7:10 UTC (permalink / raw)
To: Manuel Giraud, Stefan Monnier; +Cc: 68338, Gautier Ponsinet
> For the record and AFAIU, it seems that having an input method results
> in having a translation keymap (see "quail.el"). And OTOH, repeat-mode
> sets a transient keymap (see 'set-transient-map' from "subr.el"). So
> maybe there is something going on here?
Here is the simplest test case without repeat-mode:
(progn
(set-transient-map (define-keymap "o" #'other-window))
(other-window 1))
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-11 7:10 ` Juri Linkov
@ 2024-01-11 15:16 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 3:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 0 replies; 12+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-11 15:16 UTC (permalink / raw)
To: Juri Linkov; +Cc: 68338, Gautier Ponsinet, Stefan Monnier
Juri Linkov <juri@linkov.net> writes:
>> For the record and AFAIU, it seems that having an input method results
>> in having a translation keymap (see "quail.el"). And OTOH, repeat-mode
>> sets a transient keymap (see 'set-transient-map' from "subr.el"). So
>> maybe there is something going on here?
>
> Here is the simplest test case without repeat-mode:
>
> (progn
> (set-transient-map (define-keymap "o" #'other-window))
> (other-window 1))
Thanks. It seems that your example works if the call to 'other-window'
sends you in a window with a « special » input method.
So it confirms that the bug is between transient keymap and translation
keymap, no?
--
Manuel Giraud
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-11 7:10 ` Juri Linkov
2024-01-11 15:16 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 3:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 3:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 1 reply; 12+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12 3:31 UTC (permalink / raw)
To: Juri Linkov; +Cc: 68338, Gautier Ponsinet, Manuel Giraud
>> For the record and AFAIU, it seems that having an input method results
>> in having a translation keymap (see "quail.el"). And OTOH, repeat-mode
>> sets a transient keymap (see 'set-transient-map' from "subr.el"). So
>> maybe there is something going on here?
>
> Here is the simplest test case without repeat-mode:
>
> (progn
> (set-transient-map (define-keymap "o" #'other-window))
> (other-window 1))
Indeed, in `quail-input-method` I see we have some ad-hoc support for
`C-u` which has not been made more generic to support other transient
keymaps.
I suspect all it takes is to change the:
(not (eq (cadr overriding-terminal-local-map)
universal-argument-map))
so it recognizes any transient keymap rather than only
`universal-argument-map`.
IOW define something like a `keymap-transient-p` function, use it there,
and make sure the keymaps installed by `set-transient-map` are recognized
by that new function.
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-12 3:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 3:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 7:33 ` Juri Linkov
0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12 3:51 UTC (permalink / raw)
To: Juri Linkov; +Cc: 68338, Gautier Ponsinet, Manuel Giraud
> I suspect all it takes is to change the:
>
> (not (eq (cadr overriding-terminal-local-map)
> universal-argument-map))
BTW, this is hence related to Bug#22958 where we fixed it for the
specific case of `C-u` but we now need to fix it more generally.
> IOW define something like a `keymap-transient-p` function, use it there,
> and make sure the keymaps installed by `set-transient-map` are recognized
> by that new function.
Maybe we can treat all `overriding-terminal-local-map` as "transient" in
this respect, as in the patch below.
It's a bit risky, admittedly. But it would be useful to know what
breaks when we do that, to get a better understanding about what the
condition above should really test.
Stefan
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 56f049aedf5..af1335118a1 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -1324,9 +1324,7 @@ quail-input-method
;; binding in `universal-argument-map' just return
;; (list KEY), otherwise act as if there was no
;; overriding map.
- (or (not (eq (cadr overriding-terminal-local-map)
- universal-argument-map))
- (lookup-key overriding-terminal-local-map (vector key))))
+ (lookup-key overriding-terminal-local-map (vector key)))
overriding-local-map)
(list key)
(quail-setup-overlays (quail-conversion-keymap))
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-12 3:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 7:33 ` Juri Linkov
2024-01-18 23:29 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 12+ messages in thread
From: Juri Linkov @ 2024-01-12 7:33 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 68338, Gautier Ponsinet, Manuel Giraud
>> IOW define something like a `keymap-transient-p` function, use it there,
>> and make sure the keymaps installed by `set-transient-map` are recognized
>> by that new function.
I had a similar problem while implementing buffer-local isearch-mode in
https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00490.html
The proposed solution was to put a special property on the symbol:
(put 'isearch-mode 'overriding-keymap t)
Although it has limited applicability, I couldn't find a better way.
This might be ok for the isearch keymap, but definitely not suitable
for transient keysmaps that often are not bound to a symbol.
> Maybe we can treat all `overriding-terminal-local-map` as "transient" in
> this respect, as in the patch below.
>
> It's a bit risky, admittedly. But it would be useful to know what
> breaks when we do that, to get a better understanding about what the
> condition above should really test.
I confirm the patch fixes this bug report while keeping the test case
from bug#22958 working. In any case this is better than hard-coding
special-handling of universal-argument-map.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#68338: 30.0.50; Repeat mode and input methods
2024-01-12 7:33 ` Juri Linkov
@ 2024-01-18 23:29 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 12+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-18 23:29 UTC (permalink / raw)
To: Juri Linkov; +Cc: Gautier Ponsinet, 68338-done, Manuel Giraud
> I confirm the patch fixes this bug report while keeping the test case
> from bug#22958 working. In any case this is better than hard-coding
> special-handling of universal-argument-map.
Thanks, pushing & closing,
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-01-18 23:29 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-08 22:09 bug#68338: 30.0.50; Repeat mode and input methods Gautier Ponsinet
2024-01-09 12:53 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 14:31 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 14:36 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 16:52 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-10 17:31 ` Eli Zaretskii
2024-01-11 7:10 ` Juri Linkov
2024-01-11 15:16 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 3:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 3:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 7:33 ` Juri Linkov
2024-01-18 23:29 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).