diff options
| author | Stefan Monnier | 2026-01-26 10:14:03 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2026-01-26 10:14:03 -0500 |
| commit | 120a451c040011925c3c736058f2ce040e04d5fc (patch) | |
| tree | e064e0de53c8e0ef730d601b722f6d09f66a1858 /src | |
| parent | 9983b189356756448882b934a5c3e9c61c5438e6 (diff) | |
| download | emacs-120a451c040011925c3c736058f2ce040e04d5fc.tar.gz emacs-120a451c040011925c3c736058f2ce040e04d5fc.zip | |
(read_char_minibuf_menu_prompt): Fix bug#80146
* src/keyboard.c (read_char_minibuf_menu_prompt): Give priority
to a binding in the map over the `menu_prompt_more_char` "binding".
(follow_key): Move before new first use.
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 0bf134961a3..bc36d899250 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -10119,6 +10119,13 @@ read_char_x_menu_prompt (Lisp_Object map, | |||
| 10119 | } | 10119 | } |
| 10120 | 10120 | ||
| 10121 | static Lisp_Object | 10121 | static Lisp_Object |
| 10122 | follow_key (Lisp_Object keymap, Lisp_Object key) | ||
| 10123 | { | ||
| 10124 | return access_keymap (get_keymap (keymap, 0, 1), | ||
| 10125 | key, 1, 0, 1); | ||
| 10126 | } | ||
| 10127 | |||
| 10128 | static Lisp_Object | ||
| 10122 | read_char_minibuf_menu_prompt (int commandflag, | 10129 | read_char_minibuf_menu_prompt (int commandflag, |
| 10123 | Lisp_Object map) | 10130 | Lisp_Object map) |
| 10124 | { | 10131 | { |
| @@ -10329,7 +10336,10 @@ read_char_minibuf_menu_prompt (int commandflag, | |||
| 10329 | if (!FIXNUMP (obj) || XFIXNUM (obj) == -2 | 10336 | if (!FIXNUMP (obj) || XFIXNUM (obj) == -2 |
| 10330 | || (! EQ (obj, menu_prompt_more_char) | 10337 | || (! EQ (obj, menu_prompt_more_char) |
| 10331 | && (!FIXNUMP (menu_prompt_more_char) | 10338 | && (!FIXNUMP (menu_prompt_more_char) |
| 10332 | || ! BASE_EQ (obj, make_fixnum (Ctl (XFIXNUM (menu_prompt_more_char))))))) | 10339 | || ! BASE_EQ (obj, make_fixnum (Ctl (XFIXNUM (menu_prompt_more_char)))))) |
| 10340 | /* If 'menu_prompt_more_char' collides with a binding in the | ||
| 10341 | map, gives precedence to the map's binding (bug#80146). */ | ||
| 10342 | || !NILP (follow_key (map, obj))) | ||
| 10333 | { | 10343 | { |
| 10334 | if (!NILP (KVAR (current_kboard, defining_kbd_macro))) | 10344 | if (!NILP (KVAR (current_kboard, defining_kbd_macro))) |
| 10335 | store_kbd_macro_char (obj); | 10345 | store_kbd_macro_char (obj); |
| @@ -10342,13 +10352,6 @@ read_char_minibuf_menu_prompt (int commandflag, | |||
| 10342 | /* Reading key sequences. */ | 10352 | /* Reading key sequences. */ |
| 10343 | 10353 | ||
| 10344 | static Lisp_Object | 10354 | static Lisp_Object |
| 10345 | follow_key (Lisp_Object keymap, Lisp_Object key) | ||
| 10346 | { | ||
| 10347 | return access_keymap (get_keymap (keymap, 0, 1), | ||
| 10348 | key, 1, 0, 1); | ||
| 10349 | } | ||
| 10350 | |||
| 10351 | static Lisp_Object | ||
| 10352 | active_maps (Lisp_Object first_event, Lisp_Object second_event) | 10355 | active_maps (Lisp_Object first_event, Lisp_Object second_event) |
| 10353 | { | 10356 | { |
| 10354 | Lisp_Object position | 10357 | Lisp_Object position |