[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33749: 26.1; input-decode-map to empty vector should preserve echo a
From: |
Stefan Monnier |
Subject: |
bug#33749: 26.1; input-decode-map to empty vector should preserve echo area |
Date: |
Tue, 25 Dec 2018 14:35:13 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
> Also, I cannot easily add a new condition at this particular point.
> It happens when Emacs reads each character of the sequence that will
> eventually turn out to map to an empty one, but I do not know that
> will be the case until the end.
I think The Right Thing to do is likely to move this code to
read_key_sequence, more specifically, move it to the point where we
*know* we really do have an event.
IOW, I think the patch below might be a better option (where we test
`indec.start > 0` to make sure some *decoded* event was read).
>> >> Also, who/where do you intend to set input-decode-preserve-echo?
>> Ah, so you're planning to set it once and for all globally?
> Terminal-locally, if it’s any better.
Only marginally.
Stefan
diff --git a/src/keyboard.c b/src/keyboard.c
index baf2f51440..92ef79b09f 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -2928,22 +2928,6 @@ read_char (int commandflag, Lisp_Object map,
Vinput_method_previous_message = previous_echo_area_message;
}
- /* Now wipe the echo area, except for help events which do their
- own stuff with the echo area. */
- if (!CONSP (c)
- || (!(EQ (Qhelp_echo, XCAR (c)))
- && !(EQ (Qswitch_frame, XCAR (c)))
- /* Don't wipe echo area for select window events: These might
- get delayed via `mouse-autoselect-window' (Bug#11304). */
- && !(EQ (Qselect_window, XCAR (c)))))
- {
- if (!NILP (echo_area_buffer[0]))
- {
- safe_run_hooks (Qecho_area_clear_hook);
- clear_message (1, 0);
- }
- }
-
reread_for_input_method:
from_macro:
/* Pass this to the input method, if appropriate. */
@@ -9070,6 +9054,23 @@ read_key_sequence (Lisp_Object *keybuf, Lisp_Object
prompt,
/* If not, we should actually read a character. */
else
{
+ /* Now wipe the echo area, except for help events which do their
+ own stuff with the echo area. */
+ /* FIXME: This used to happen at the end of read_char (i.e. after
+ we read the first event of a key sequence), but we now do it just
+ before reading the second event, and only when we know that the
+ first event is a "real" one, rather than some internal event that
+ might be dropped altogether (e.g. help-event, switch-frame, or
+ some key that we remap to the empty sequence (bug#33749)).
+ Maybe we should even make sure that `fkey.star > 0` or maybe
+ even `keytran.start > 0`!? */
+ if (indec.start > 0
+ && !NILP (echo_area_buffer[0]))
+ {
+ safe_run_hooks (Qecho_area_clear_hook);
+ clear_message (1, 0);
+ }
+
{
KBOARD *interrupted_kboard = current_kboard;
struct frame *interrupted_frame = SELECTED_FRAME ();
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Yuri Khan, 2018/12/14
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Eli Zaretskii, 2018/12/15
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Stefan Monnier, 2018/12/19
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Yuri Khan, 2018/12/20
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Stefan Monnier, 2018/12/20
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Yuri Khan, 2018/12/21
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area,
Stefan Monnier <=
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Eli Zaretskii, 2018/12/25
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Stefan Monnier, 2018/12/25
- bug#33749: 26.1; input-decode-map to empty vector should preserve echo area, Eli Zaretskii, 2018/12/25