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)
This commit is contained in:
parent
903603f8cd
commit
d9ea795035
1 changed files with 27 additions and 23 deletions
|
@ -3220,33 +3220,37 @@ record_char (Lisp_Object c)
|
||||||
else
|
else
|
||||||
store_kbd_macro_char (c);
|
store_kbd_macro_char (c);
|
||||||
|
|
||||||
if (!recorded)
|
/* recent_keys should not include events from keyboard macros. */
|
||||||
|
if (NILP (Vexecuting_kbd_macro))
|
||||||
{
|
{
|
||||||
total_keys += total_keys < NUM_RECENT_KEYS;
|
if (!recorded)
|
||||||
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 += total_keys < NUM_RECENT_KEYS;
|
||||||
total_keys--;
|
ASET (recent_keys, recent_keys_index, c);
|
||||||
if (--recent_keys_index < 0)
|
if (++recent_keys_index >= NUM_RECENT_KEYS)
|
||||||
recent_keys_index = NUM_RECENT_KEYS - 1;
|
recent_keys_index = 0;
|
||||||
ASET (recent_keys, recent_keys_index, Qnil);
|
|
||||||
}
|
}
|
||||||
}
|
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). */
|
||||||
|
|
||||||
num_nonmacro_input_events++;
|
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++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Write c to the dribble file. If c is a lispy event, write
|
/* Write c to the dribble file. If c is a lispy event, write
|
||||||
the event's symbol to the dribble file, in <brackets>. Bleaugh.
|
the event's symbol to the dribble file, in <brackets>. Bleaugh.
|
||||||
|
|
Loading…
Add table
Reference in a new issue