changeset 10162:58037e770f67

(apropos-match-keys): Handle menu bindings with cached equivalent keys. (apropos-match-keys): Handle minor mode maps and overriding-local-map.
author Richard M. Stallman <rms@gnu.org>
date Thu, 15 Dec 1994 01:56:13 +0000
parents 512a84fb3c75
children 70b04b218216
files lisp/apropos.el
diffstat 1 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/apropos.el	Thu Dec 15 00:42:19 1994 +0000
+++ b/lisp/apropos.el	Thu Dec 15 01:56:13 1994 +0000
@@ -243,9 +243,16 @@
 
 (defun apropos-match-keys (alist &optional regexp)
   (let* ((current-local-map (current-local-map))
-	 (maps (append (and current-local-map
-			    (accessible-keymaps current-local-map))
-		       (accessible-keymaps (current-global-map))))
+	 ;; Get a list of the top-level maps now active.
+	 (top-maps
+	  (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
 	 sequence			;key sequence to reach map
 	 i				;index into vector map
@@ -263,12 +270,17 @@
 	  (setq map (cdr map)))
       (while (stringp (car-safe map))
 	(setq map (cdr map)))
+
       (while (consp map)
 	(cond ((consp (car map))
 	       (setq command (cdr (car map))
 		     key (car (car map)))
-	       ;; Skip any menu prompt in this key binding.
-	       (and (consp command) (symbolp (cdr command))
+	       ;; Skip any menu prompt and help string in this key binding.
+	       (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)))
 	       ;; if is a symbol, and matches optional regexp, and is a car
 	       ;; in alist, and is not shadowed by a different local binding,