Fix execution of tool-bar commands read within minibuffer-error-handler
authorPo Lu <luangruo@yahoo.com>
Fri, 21 Jun 2024 07:12:07 +0000 (15:12 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 21 Jun 2024 07:12:28 +0000 (15:12 +0800)
* src/keyboard.c (read_char): Arrange that the original event be
recorded when a posn is promoted to a prefix key and an END_TIME
is suppressing additions to this_command_keys.

src/keyboard.c

index 3551a77a9c939d6f6db1f192774b2dc8d6c09754..fb4d17ea06657e7a2fa72ad9db4c561f7510316e 100644 (file)
@@ -3135,8 +3135,23 @@ read_char (int commandflag, Lisp_Object map,
          /* Change menu-bar to (menu-bar) as the event "position".  */
          POSN_SET_POSN (xevent_start (c), list1 (posn));
 
-         also_record = c;
-         Vunread_command_events = Fcons (c, Vunread_command_events);
+         /* Should a command call `sit-for', or another command that
+            provides a timespec to Fread_event and co., the original
+            event will not subsequently be entered into
+            this_command_keys unless Qno_record be specified below.
+
+            The same is the case in a number of other scenarios where
+            reread is true, but if so, event recording is to be
+            suppressed anyway.  */
+
+         if (end_time)
+           Vunread_command_events = Fcons (Fcons (Qt, c),
+                                           Vunread_command_events);
+         else
+           {
+             also_record = c;
+             Vunread_command_events = Fcons (c, Vunread_command_events);
+           }
          c = posn;
        }
     }