emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 00a9c50: Further tweaks to execute-extended-command


From: Lars Ingebrigtsen
Subject: master 00a9c50: Further tweaks to execute-extended-command
Date: Fri, 20 Aug 2021 09:07:31 -0400 (EDT)

branch: master
commit 00a9c50ad7c82f72b422100624f7f125d717c00f
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Further tweaks to execute-extended-command
    
    * lisp/simple.el (execute-extended-command): Move finding the
    short command to the timer command, too (bug#50042).  This further
    ensures that post-command-hook is run faster.
---
 lisp/simple.el | 78 ++++++++++++++++++++++++++++++----------------------------
 1 file changed, 41 insertions(+), 37 deletions(-)

diff --git a/lisp/simple.el b/lisp/simple.el
index 24e77ee..aa139dd 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2220,7 +2220,8 @@ invoking, give a prefix argument to 
`execute-extended-command'."
          (binding (and suggest-key-bindings
                       (not executing-kbd-macro)
                       (where-is-internal function overriding-local-map t)))
-         (delay-before-suggest 0))
+         (delay-before-suggest 0)
+         (find-shorter nil))
     (unless (commandp function)
       (error "`%s' is not a valid command name" command-name))
     ;; Some features, such as novice.el, rely on this-command-keys
@@ -2235,12 +2236,12 @@ invoking, give a prefix argument to 
`execute-extended-command'."
     (setq real-this-command function)
     (let ((prefix-arg prefixarg))
       (command-execute function 'record))
-    ;; If enabled, show which key runs this command.
-
-    ;; If this command displayed something in the echo area;
-    ;; then postpone display our suggestion message a bit.
-    ;; FIXME: If execute-extended-command--shorter were
-    ;; faster, we could compute the result here first too.
+    ;; Ensure that we never have two of the suggest-binding timers in
+    ;; flight.
+    (when execute-extended-command--binding-timer
+      (cancel-timer execute-extended-command--binding-timer))
+    ;; If this command displayed something in the echo area; then
+    ;; postpone display our suggestion message a bit.
     (when (and suggest-key-bindings
                (or binding
                    (and extended-command-suggest-shorter typed)))
@@ -2248,36 +2249,39 @@ invoking, give a prefix argument to 
`execute-extended-command'."
             (cond
              ((zerop (length (current-message))) 0)
              ((numberp suggest-key-bindings) suggest-key-bindings)
-             (t 2))))
-    (unless (or (not extended-command-suggest-shorter)
-                binding executing-kbd-macro (not (symbolp function))
-                (<= (length (symbol-name function)) 2))
-      ;; There's no binding for CMD.  Let's try and find the shortest
-      ;; string to use in M-x.
-      ;; FIXME: Can be slow.  Cache it maybe?
-      (while-no-input
-        (setq binding (execute-extended-command--shorter
-                       (symbol-name function) typed))))
-    ;; Ensure that we never have two of these timers in flight.
-    (when execute-extended-command--binding-timer
-      (cancel-timer execute-extended-command--binding-timer))
-    (when binding
-      (setq execute-extended-command--binding-timer
-            (run-at-time
-             delay-before-suggest nil
-             (lambda ()
-               ;; If the user has typed any other commands in the
-               ;; meantime, then don't display anything.
-               (when (eq function real-last-command)
-                 (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))))))))))
+             (t 2)))
+      (when (and extended-command-suggest-shorter
+                 (not binding)
+                 (not executing-kbd-macro)
+                 (symbolp function)
+                 (> (length (symbol-name function)) 2))
+        ;; There's no binding for CMD.  Let's try and find the shortest
+        ;; string to use in M-x.
+        (setq find-shorter t))
+      (when (or binding find-shorter)
+        (setq execute-extended-command--binding-timer
+              (run-at-time
+               delay-before-suggest nil
+               (lambda ()
+                 ;; If the user has typed any other commands in the
+                 ;; meantime, then don't display anything.
+                 (when (eq function real-last-command)
+                   ;; Find shorter string.
+                   (when find-shorter
+                     (while-no-input
+                       ;; FIXME: Can be slow.  Cache it maybe?
+                       (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))))))))))))
 
 (defun execute-extended-command-for-buffer (prefixarg &optional
                                                       command-name typed)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]