GNU bug report logs - #68338
30.0.50; Repeat mode and input methods

Previous Next

Package: emacs;

Reported by: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>

Date: Tue, 9 Jan 2024 08:32:02 UTC

Severity: normal

Found in version 30.0.50

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 68338 in the body.
You can then email your comments to 68338 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Tue, 09 Jan 2024 08:32:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Gautier Ponsinet <gautier <at> gautierponsinet.xyz>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 09 Jan 2024 08:32:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.50; Repeat mode and input methods
Date: Mon, 08 Jan 2024 23:09:09 +0100
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))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Tue, 09 Jan 2024 12:54:02 GMT) Full text and rfc822 format available.

Message #8 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
Cc: 68338 <at> debbugs.gnu.org
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Tue, 09 Jan 2024 13:53:26 +0100
Gautier Ponsinet <gautier <at> 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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Wed, 10 Jan 2024 14:32:02 GMT) Full text and rfc822 format available.

Message #11 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
Cc: 68338 <at> debbugs.gnu.org
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Wed, 10 Jan 2024 15:31:45 +0100
Gautier Ponsinet <gautier <at> 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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Wed, 10 Jan 2024 14:37:02 GMT) Full text and rfc822 format available.

Message #14 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Manuel Giraud via "Bug reports for GNU Emacs, the Swiss army knife of
 text editors" <bug-gnu-emacs <at> gnu.org>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Wed, 10 Jan 2024 15:36:51 +0100
Manuel Giraud via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs <at> gnu.org> writes:

[...]

> Hi,
>
> FWIW, I've found that customizing `repeat-check-key' to nil fixes this
> issue for me.  Could you confirm this?

Sorry, I spoke to fast: that is not true.
-- 
Manuel Giraud




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Wed, 10 Jan 2024 14:38:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Wed, 10 Jan 2024 16:53:02 GMT) Full text and rfc822 format available.

Message #20 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
Cc: 68338 <at> debbugs.gnu.org
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Wed, 10 Jan 2024 17:52:19 +0100
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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Wed, 10 Jan 2024 17:33:02 GMT) Full text and rfc822 format available.

Message #23 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>,
 Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 68338 <at> debbugs.gnu.org, gautier <at> gautierponsinet.xyz
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Wed, 10 Jan 2024 19:31:38 +0200
> Cc: 68338 <at> 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 <at> 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?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Thu, 11 Jan 2024 07:12:01 GMT) Full text and rfc822 format available.

Message #26 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>,
 Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Thu, 11 Jan 2024 09:10:49 +0200
> 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))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Thu, 11 Jan 2024 15:17:01 GMT) Full text and rfc822 format available.

Message #29 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Juri Linkov <juri <at> linkov.net>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>,
 Stefan Monnier <monnier <at> iro.umontreal.ca>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Thu, 11 Jan 2024 16:16:40 +0100
Juri Linkov <juri <at> 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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Fri, 12 Jan 2024 03:32:01 GMT) Full text and rfc822 format available.

Message #32 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Juri Linkov <juri <at> linkov.net>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>,
 Manuel Giraud <manuel <at> ledu-giraud.fr>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Thu, 11 Jan 2024 22:31:33 -0500
>> 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





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Fri, 12 Jan 2024 03:53:02 GMT) Full text and rfc822 format available.

Message #35 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Juri Linkov <juri <at> linkov.net>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>,
 Manuel Giraud <manuel <at> ledu-giraud.fr>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Thu, 11 Jan 2024 22:51:52 -0500
> 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))





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68338; Package emacs. (Fri, 12 Jan 2024 07:47:03 GMT) Full text and rfc822 format available.

Message #38 received at 68338 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 68338 <at> debbugs.gnu.org, Gautier Ponsinet <gautier <at> gautierponsinet.xyz>,
 Manuel Giraud <manuel <at> ledu-giraud.fr>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Fri, 12 Jan 2024 09:33:38 +0200
>> 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.




Reply sent to Stefan Monnier <monnier <at> iro.umontreal.ca>:
You have taken responsibility. (Thu, 18 Jan 2024 23:30:03 GMT) Full text and rfc822 format available.

Notification sent to Gautier Ponsinet <gautier <at> gautierponsinet.xyz>:
bug acknowledged by developer. (Thu, 18 Jan 2024 23:30:03 GMT) Full text and rfc822 format available.

Message #43 received at 68338-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Juri Linkov <juri <at> linkov.net>
Cc: Gautier Ponsinet <gautier <at> gautierponsinet.xyz>, 68338-done <at> debbugs.gnu.org,
 Manuel Giraud <manuel <at> ledu-giraud.fr>
Subject: Re: bug#68338: 30.0.50; Repeat mode and input methods
Date: Thu, 18 Jan 2024 18:29:24 -0500
> 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





bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 16 Feb 2024 12:24:09 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 181 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.