Fix suggest-key-bindings displaying key as command

* lisp/simple.el (execute-extended-command--describe-binding-msg):
New function factored out from...
(execute-extended-command): ...here.  Fix bug where a key binding was
displayed as a command with 'suggest-key-bindings'.  (Bug#59247)
* test/lisp/simple-tests.el
(simple-execute-extended-command--describe-binding-msg): New test.
This commit is contained in:
Stefan Kangas 2022-11-13 19:46:02 +01:00
parent 443bd35e86
commit a5bf6fb526
2 changed files with 23 additions and 8 deletions

View file

@ -2491,6 +2491,13 @@ Also see `suggest-key-bindings'."
(defvar execute-extended-command--binding-timer nil)
(defun execute-extended-command--describe-binding-msg (function binding shorter)
(format-message "You can run the command `%s' with %s"
function
(cond (shorter (concat "M-x " shorter))
((stringp binding) binding)
(t (key-description binding)))))
(defun execute-extended-command (prefixarg &optional command-name typed)
"Read a command name, then read the arguments and call the command.
To pass a prefix argument to the command you are
@ -2514,7 +2521,7 @@ invoking, give a prefix argument to `execute-extended-command'."
(not executing-kbd-macro)
(where-is-internal function overriding-local-map t)))
(delay-before-suggest 0)
(find-shorter nil))
find-shorter shorter)
(unless (commandp function)
(error "`%s' is not a valid command name" command-name))
;; If we're executing a command that's remapped, we can't actually
@ -2568,15 +2575,12 @@ invoking, give a prefix argument to `execute-extended-command'."
(when find-shorter
(while-no-input
;; FIXME: Can be slow. Cache it maybe?
(setq binding (execute-extended-command--shorter
(setq shorter (execute-extended-command--shorter
(symbol-name function) typed))))
(when binding
(when (or binding shorter)
(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)))
(execute-extended-command--describe-binding-msg
function binding shorter)
(sit-for (if (numberp suggest-key-bindings)
suggest-key-bindings
2))))))))))))

View file

@ -84,6 +84,17 @@
"display-line")
"di-n")))
(ert-deftest simple-execute-extended-command--describe-binding-msg ()
(should (equal (execute-extended-command--describe-binding-msg
'foo "m" nil)
"You can run the command foo with m"))
(should (equal (execute-extended-command--describe-binding-msg
'foo [14] nil)
"You can run the command foo with C-n"))
(should (equal (execute-extended-command--describe-binding-msg
'display-line-numbers-mode nil "di-n")
"You can run the command display-line-numbers-mode with M-x di-n")))
;;; `transpose-sexps'
(defmacro simple-test--transpositions (&rest body)