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
This commit is contained in:
Lars Ingebrigtsen 2022-06-09 16:41:03 +02:00
parent 8cb7682e88
commit f0cd91067d

View file

@ -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)