[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 5db3324: Show key bindings on M-x completion (bug#39035)
From: |
Juri Linkov |
Subject: |
master 5db3324: Show key bindings on M-x completion (bug#39035) |
Date: |
Wed, 29 Jan 2020 18:42:19 -0500 (EST) |
branch: master
commit 5db3324a7e11280437e69e27fe364dfd80b66ca2
Author: Juri Linkov <address@hidden>
Commit: Juri Linkov <address@hidden>
Show key bindings on M-x completion (bug#39035)
* lisp/simple.el (read-extended-command--annotation): New function.
(read-extended-command): Use annotation-function to show key-bindings.
---
etc/NEWS | 3 +++
lisp/simple.el | 33 +++++++++++++++++++++++----------
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 5395f2c..04ae3a4 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -109,6 +109,9 @@ like cell phones, tablets or cameras.
* Incompatible Lisp Changes in Emacs 28.1
+** When 'suggest-key-bindings' is non-nil, the completion list of M-x
+shows equivalent key-bindings for all commands that have them.
+
** 'equal' no longer examines some contents of window configurations.
Instead, it considers window configurations to be equal only if they
are 'eq'. To compare contents, use 'compare-window-configurations'
diff --git a/lisp/simple.el b/lisp/simple.el
index 2ec3da6..0944790 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1788,23 +1788,36 @@ to get different commands to edit and resubmit."
;; and it serves as a shorthand for "Extended command: ".
"M-x ")
(lambda (string pred action)
- (let ((pred
- (if (memq action '(nil t))
- ;; Exclude obsolete commands from completions.
- (lambda (sym)
- (and (funcall pred sym)
- (or (equal string (symbol-name sym))
- (not (get sym 'byte-obsolete-info)))))
- pred)))
- (complete-with-action action obarray string pred)))
+ (if (and suggest-key-bindings (eq action 'metadata))
+ '(metadata
+ (annotation-function . read-extended-command--annotation)
+ (category . command))
+ (let ((pred
+ (if (memq action '(nil t))
+ ;; Exclude obsolete commands from completions.
+ (lambda (sym)
+ (and (funcall pred sym)
+ (or (equal string (symbol-name sym))
+ (not (get sym 'byte-obsolete-info)))))
+ pred)))
+ (complete-with-action action obarray string pred))))
#'commandp t nil 'extended-command-history)))
+(defun read-extended-command--annotation (command-name)
+ (let* ((function (and (stringp command-name) (intern-soft command-name)))
+ (binding (where-is-internal function overriding-local-map t)))
+ (when (and binding (not (stringp binding)))
+ (format " (%s)" (key-description binding)))))
+
(defcustom suggest-key-bindings t
"Non-nil means show the equivalent key-binding when M-x command has one.
The value can be a length of time to show the message for.
If the value is non-nil and not a number, we wait 2 seconds.
-Also see `extended-command-suggest-shorter'."
+Also see `extended-command-suggest-shorter'.
+
+Equivalent key-bindings are also shown in the completion list of
+M-x for all commands that have them."
:group 'keyboard
:type '(choice (const :tag "off" nil)
(integer :tag "time" 2)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 5db3324: Show key bindings on M-x completion (bug#39035),
Juri Linkov <=