From: Eli Zaretskii Date: Mon, 15 Feb 2016 12:03:57 +0000 (+0200) Subject: Fix regression with 'recent-keys' and keyboard macros X-Git-Tag: emacs-25.0.92~114 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d9ea795;p=emacs.git Fix regression with 'recent-keys' and keyboard macros * src/keyboard.c (record_char): Don't record in 'recent_keys' events that come from executing keyboard macros. (Bug#22674) --- diff --git a/src/keyboard.c b/src/keyboard.c index 546c0128328..4edb5aa0f32 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3220,33 +3220,37 @@ record_char (Lisp_Object c) else store_kbd_macro_char (c); - if (!recorded) - { - total_keys += total_keys < NUM_RECENT_KEYS; - ASET (recent_keys, recent_keys_index, c); - if (++recent_keys_index >= NUM_RECENT_KEYS) - recent_keys_index = 0; - } - else if (recorded < 0) + /* recent_keys should not include events from keyboard macros. */ + if (NILP (Vexecuting_kbd_macro)) { - /* We need to remove one or two events from recent_keys. - To do this, we simply put nil at those events and move the - recent_keys_index backwards over those events. Usually, - users will never see those nil events, as they will be - overwritten by the command keys entered to see recent_keys - (e.g. C-h l). */ - - while (recorded++ < 0 && total_keys > 0) + if (!recorded) { - if (total_keys < NUM_RECENT_KEYS) - total_keys--; - if (--recent_keys_index < 0) - recent_keys_index = NUM_RECENT_KEYS - 1; - ASET (recent_keys, recent_keys_index, Qnil); + total_keys += total_keys < NUM_RECENT_KEYS; + ASET (recent_keys, recent_keys_index, c); + if (++recent_keys_index >= NUM_RECENT_KEYS) + recent_keys_index = 0; + } + else if (recorded < 0) + { + /* We need to remove one or two events from recent_keys. + To do this, we simply put nil at those events and move the + recent_keys_index backwards over those events. Usually, + users will never see those nil events, as they will be + overwritten by the command keys entered to see recent_keys + (e.g. C-h l). */ + + while (recorded++ < 0 && total_keys > 0) + { + if (total_keys < NUM_RECENT_KEYS) + total_keys--; + if (--recent_keys_index < 0) + recent_keys_index = NUM_RECENT_KEYS - 1; + ASET (recent_keys, recent_keys_index, Qnil); + } } - } - num_nonmacro_input_events++; + num_nonmacro_input_events++; + } /* Write c to the dribble file. If c is a lispy event, write the event's symbol to the dribble file, in . Bleaugh.