diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2021-08-15 13:36:24 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-08-15 13:36:24 +0200 |
commit | 42a98feb5b8ff2d60701da4462864699c434562c (patch) | |
tree | daf2f003c3537f3bb2223d0bc80467741341387a /lisp | |
parent | 55772baee1627571c0814cf2d666fb3b963ff591 (diff) | |
download | emacs-42a98feb5b8ff2d60701da4462864699c434562c.tar.gz emacs-42a98feb5b8ff2d60701da4462864699c434562c.tar.bz2 emacs-42a98feb5b8ff2d60701da4462864699c434562c.zip |
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).
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/simple.el | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/lisp/simple.el b/lisp/simple.el index 985beb06fc9..1661346b375 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -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) |