diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2022-06-09 16:41:03 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2022-06-09 16:41:03 +0200 |
commit | f0cd91067d5706bfe95f9fc8bb05c8a9e0e2d052 (patch) | |
tree | 0c0a37b30294854c8ed1112ac8198463866e41c4 /lisp/help.el | |
parent | 8cb7682e885c943228299c4e6b7adb6a398c8aae (diff) | |
download | emacs-f0cd91067d5706bfe95f9fc8bb05c8a9e0e2d052.tar.gz |
Improve `C-h b' output for remapped commands.
* lisp/help.el (describe-map): Include the bindings of the
remapped commands (bug#14084).
This will result in output like this, instead of just listing the
remapped commands:
<remap> <display-buffer> ido-display-buffer
C-x 4 C-o display-buffer
<remap> <display-buffer-other-frame> ido-display-buffer-other-frame
C-x 5 C-o display-buffer-other-frame
<remap> <insert-buffer> ido-insert-buffer
C-x x i insert-buffer
<remap> <kill-buffer> ido-kill-buffer
C-x k kill-buffer
<remap> <switch-to-buffer> ido-switch-buffer
C-x b switch-to-buffer
<remap> <switch-to-buffer-other-frame> ido-switch-buffer-other-frame
C-x 5 b switch-to-buffer-other-frame
<remap> <switch-to-buffer-other-window> ido-switch-buffer-other-window
C-x 4 b switch-to-buffer-other-window
Diffstat (limited to 'lisp/help.el')
-rw-r--r-- | lisp/help.el | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/lisp/help.el b/lisp/help.el index 1faebdf461d..4e0d807cb2c 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1503,12 +1503,30 @@ in `describe-map-tree'." (let ((vect (sort vect 'help--describe-map-compare)) (columns ()) line-start key-end column) + ;; If we're in a <remap> section of the output, then also + ;; display the bindings of the keys that we've remapped from. + ;; This enables the user to actually see what keys to tap to + ;; execute the remapped commands. + (when (equal prefix [remap]) + (dolist (binding (prog1 vect + (setq vect nil))) + (push binding vect) + (when-let ((other (and (not (eq (car binding) 'self-insert-command)) + (car (where-is-internal (car binding)))))) + (push (list (elt other (1- (length other))) + (car binding) + nil + (seq-into (butlast (seq-into other 'list)) 'vector)) + vect))) + (setq vect (nreverse vect))) ;; Now output them in sorted order. (while vect (let* ((elem (car vect)) - (start (car elem)) - (definition (cadr elem)) - (shadowed (caddr elem)) + (start (nth 0 elem)) + (definition (nth 1 elem)) + (shadowed (nth 2 elem)) + ;; We override the prefix for the <remap> extra commands. + (prefix (or (nth 3 elem) prefix)) (end start)) ;; Find consecutive chars that are identically defined. (when (fixnump start) |