emacs-diffs
[Top][All Lists]
Advanced

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

master 93136169cb: Try to speed up extended command shorthand computatio


From: Michael Heerdegen
Subject: master 93136169cb: Try to speed up extended command shorthand computation
Date: Sun, 9 Oct 2022 14:49:25 -0400 (EDT)

branch: master
commit 93136169cba9c7c8f827dbc2f579b95a75d15fad
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>

    Try to speed up extended command shorthand computation
    
    Discussed in Bug#51143.
    
    * lisp/simple.el (execute-extended-command--shorter): Compute a
    complete list of `commandp' symbols once.  This significantly speeds
    up complicated cases while the slowdown of simple cases is still
    accetable.
---
 lisp/simple.el | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/lisp/simple.el b/lisp/simple.el
index d2dcbe27a0..e804f717b0 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2465,9 +2465,13 @@ Also see `suggest-key-bindings'."
 
 (defun execute-extended-command--shorter (name typed)
   (let ((candidates '())
+        commands
         (max (length typed))
         (len 1)
         binding)
+    ;; Precompute a list of commands once to avoid repeated `commandp' testing
+    ;; of symbols in the `completion-try-completion' call inside the loop below
+    (mapatoms (lambda (s) (when (commandp s) (push s commands))))
     (while (and (not binding)
                 (progn
                   (unless candidates
@@ -2480,8 +2484,8 @@ Also see `suggest-key-bindings'."
       (input-pending-p)    ;Dummy call to trigger input-processing, bug#23002.
       (let ((candidate (pop candidates)))
         (when (equal name
-                       (car-safe (completion-try-completion
-                                  candidate obarray 'commandp len)))
+                     (car-safe (completion-try-completion
+                                candidate commands nil len)))
           (setq binding candidate))))
     binding))
 



reply via email to

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