Commit 487d5fb2 authored by Richard M. Stallman's avatar Richard M. Stallman

(apropos-match-keys): Handle menu bindings with cached equivalent keys.

(apropos-match-keys): Handle minor mode maps
and overriding-local-map.
parent a42ba017
...@@ -243,9 +243,16 @@ Returns list of symbols and documentation found." ...@@ -243,9 +243,16 @@ Returns list of symbols and documentation found."
(defun apropos-match-keys (alist &optional regexp) (defun apropos-match-keys (alist &optional regexp)
(let* ((current-local-map (current-local-map)) (let* ((current-local-map (current-local-map))
(maps (append (and current-local-map ;; Get a list of the top-level maps now active.
(accessible-keymaps current-local-map)) (top-maps
(accessible-keymaps (current-global-map)))) (if overriding-local-map
(list overriding-local-map (current-global-map))
(append (current-minor-mode-maps)
(if current-local-map
(list current-local-map (current-global-map))
(list (current-global-map))))))
;; Turn that into a list of all the maps including submaps.
(maps (apply 'append (mapcar 'accessible-keymaps top-maps)))
map ;map we are now inspecting map ;map we are now inspecting
sequence ;key sequence to reach map sequence ;key sequence to reach map
i ;index into vector map i ;index into vector map
...@@ -263,12 +270,17 @@ Returns list of symbols and documentation found." ...@@ -263,12 +270,17 @@ Returns list of symbols and documentation found."
(setq map (cdr map))) (setq map (cdr map)))
(while (stringp (car-safe map)) (while (stringp (car-safe map))
(setq map (cdr map))) (setq map (cdr map)))
(while (consp map) (while (consp map)
(cond ((consp (car map)) (cond ((consp (car map))
(setq command (cdr (car map)) (setq command (cdr (car map))
key (car (car map))) key (car (car map)))
;; Skip any menu prompt in this key binding. ;; Skip any menu prompt and help string in this key binding.
(and (consp command) (symbolp (cdr command)) (while (and (consp command) (stringp (car command)))
(setq command (cdr command)))
;; Skip any cached equivalent key.
(and (consp command)
(consp (car command))
(setq command (cdr command))) (setq command (cdr command)))
;; if is a symbol, and matches optional regexp, and is a car ;; if is a symbol, and matches optional regexp, and is a car
;; in alist, and is not shadowed by a different local binding, ;; in alist, and is not shadowed by a different local binding,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment