changeset 76905:624ef730616c

(tmm-c-prompt): Initialize. (tmm-menubar): Deal with extended menu-items at top level. (tmm-get-keybind): Handle bindings that are redefined/undefined locally.
author Nick Roberts <nickrob@snap.net.nz>
date Tue, 03 Apr 2007 01:07:41 +0000
parents ecc6f5a2f4cb
children bb6e75c27940
files lisp/tmm.el
diffstat 1 files changed, 25 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/tmm.el	Tue Apr 03 01:07:16 2007 +0000
+++ b/lisp/tmm.el	Tue Apr 03 01:07:41 2007 +0000
@@ -41,7 +41,7 @@
 (defvar tmm-short-cuts)
 (defvar tmm-old-mb-map nil)
 (defvar tmm-old-comp-map)
-(defvar tmm-c-prompt)
+(defvar tmm-c-prompt nil)
 (defvar tmm-km-list)
 (defvar tmm-next-shortcut-digit)
 (defvar tmm-table-undef)
@@ -71,17 +71,18 @@
 				   (list this-one)))))
 	(setq list (cdr list))))
     (if x-position
-	(let ((tail menu-bar)
-	      this-one
-	      (column 0))
+	(let ((tail menu-bar) (column 0)
+	      this-one name)
 	  (while (and tail (<= column x-position))
 	    (setq this-one (car tail))
 	    (if (and (consp this-one)
 		     (consp (cdr this-one))
-		     (stringp (nth 1  this-one)))
-		(setq column (+ column
-				(length (nth 1 this-one))
-				1)))
+		     (setq name   ; nil if menu-item
+			   (cond ((stringp (nth 1  this-one))
+				  (nth 1  this-one))
+				 ((stringp (nth 2  this-one))
+				  (nth 2  this-one)))))
+		(setq column (+ column (length name) 1)))
 	    (setq tail (cdr tail)))
 	  (setq menu-bar-item (car this-one))))
     (tmm-prompt menu-bar nil menu-bar-item)))
@@ -517,7 +518,7 @@
 we merge them into a single keymap which shows the proper order of the menu.
 However, for the menu bar itself, the value does not take account
 of `menu-bar-final-items'."
-  (let (allbind bind)
+  (let (allbind bind minorbind localbind globalbind)
     (setq bind (key-binding keyseq))
     ;; If KEYSEQ is a prefix key, then BIND is either nil
     ;; or a symbol defined as a keymap (which satisfies keymapp).
@@ -528,9 +529,21 @@
 	(progn
 	  ;; Otherwise, it is a prefix, so make a list of the subcommands.
 	  ;; Make a list of all the bindings in all the keymaps.
-	  (setq allbind (mapcar 'cdr (minor-mode-key-binding keyseq)))
-	  (setq allbind (cons (local-key-binding keyseq) allbind))
-	  (setq allbind (cons (global-key-binding keyseq) allbind))
+	  (setq minorbind (mapcar 'cdr (minor-mode-key-binding keyseq)))
+	  (setq localbind (local-key-binding keyseq))
+	  (setq globalbind (cdr (global-key-binding keyseq)))
+
+	  ;; If items have been redefined/undefined locally, remove them from
+	  ;; the global list.
+	  (dolist (minor minorbind)
+	    (dolist (item (cdr minor))
+	      (setq globalbind (assq-delete-all (car item) globalbind))))
+	  (dolist (item (cdr localbind))
+	    (setq globalbind (assq-delete-all (car item) globalbind)))
+
+	  (setq globalbind (cons 'keymap globalbind))
+	  (setq allbind (cons globalbind (cons localbind minorbind)))
+
 	  ;; Merge all the elements of ALLBIND into one keymap.
 	  (mapc (lambda (in)
 		  (if (and (symbolp in) (keymapp in))