From: Michael Heerdegen Date: Sun, 18 Sep 2022 10:26:53 +0000 (+0200) Subject: Try to speed up extended command shorthand computation X-Git-Tag: emacs-29.0.90~1616^2~679 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=93136169cba9c7c8f827dbc2f579b95a75d15fad;p=emacs.git 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. --- diff --git a/lisp/simple.el b/lisp/simple.el index d2dcbe27a07..e804f717b01 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))