1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-03 10:31:37 -08:00

Run execute-extended-command key binding suggestion from a timer

* lisp/simple.el (execute-extended-command): Run the key binding
suggestion from a timer instead of in the program flow -- this
allows `post-command-hook' to be executed immediately (bug#50042).
This commit is contained in:
Lars Ingebrigtsen 2021-08-15 13:36:24 +02:00
parent 55772baee1
commit 42a98feb5b

View file

@ -2194,6 +2194,8 @@ Also see `suggest-key-bindings'."
(setq binding candidate))))
binding))
(defvar execute-extended-command--binding-timer nil)
(defun execute-extended-command (prefixarg &optional command-name typed)
;; Based on Fexecute_extended_command in keyboard.c of Emacs.
;; Aaron S. Hawley <aaron.s.hawley(at)gmail.com> 2009-08-24
@ -2258,15 +2260,24 @@ invoking, give a prefix argument to `execute-extended-command'."
(setq binding (execute-extended-command--shorter
(symbol-name function) typed))))
(when binding
(with-temp-message
(format-message "You can run the command `%s' with %s"
function
(if (stringp binding)
(concat "M-x " binding " RET")
(key-description binding)))
(sit-for (if (numberp suggest-key-bindings)
suggest-key-bindings
2))))))))
;; This is normally not necessary -- the timer should run
;; immediately, but be defensive and ensure that we never
;; have two of these timers in flight.
(when execute-extended-command--binding-timer
(cancel-timer execute-extended-command--binding-timer))
(setq execute-extended-command--binding-timer
(run-at-time
0 nil
(lambda ()
(with-temp-message
(format-message "You can run the command `%s' with %s"
function
(if (stringp binding)
(concat "M-x " binding " RET")
(key-description binding)))
(sit-for (if (numberp suggest-key-bindings)
suggest-key-bindings
2)))))))))))
(defun execute-extended-command-for-buffer (prefixarg &optional
command-name typed)