unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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-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
  0 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-10 14:36 UTC (permalink / raw)
  To: 68338; +Cc: gautier

Manuel Giraud via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs@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





^ 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).