emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r107604: * lisp/imenu.el: Fix multipl


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r107604: * lisp/imenu.el: Fix multiple inheritance breakage.
Date: Wed, 14 Mar 2012 21:38:40 -0400
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 107604
fixes bug(s): http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9199
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Wed 2012-03-14 21:38:40 -0400
message:
  * lisp/imenu.el: Fix multiple inheritance breakage.
  (imenu-add-to-menubar): Don't add a redundant index.
  (imenu-update-menubar): Handle a dynamically composed keymap.
modified:
  lisp/ChangeLog
  lisp/imenu.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-03-13 23:27:56 +0000
+++ b/lisp/ChangeLog    2012-03-15 01:38:40 +0000
@@ -1,3 +1,9 @@
+2012-03-15  Stefan Monnier  <address@hidden>
+
+       * imenu.el: Fix multiple inheritance breakage (bug#9199).
+       (imenu-add-to-menubar): Don't add a redundant index.
+       (imenu-update-menubar): Handle a dynamically composed keymap.
+
 2012-03-13  Katsumi Yamaoka  <address@hidden>
 
        * mail/sendmail.el (mail-encode-header):

=== modified file 'lisp/imenu.el'
--- a/lisp/imenu.el     2012-01-19 07:21:25 +0000
+++ b/lisp/imenu.el     2012-03-15 01:38:40 +0000
@@ -963,13 +963,14 @@
          imenu-generic-expression
          (not (eq imenu-create-index-function
                   'imenu-default-create-index-function)))
-      (let ((newmap (make-sparse-keymap)))
-       (set-keymap-parent newmap (current-local-map))
-       (setq imenu--last-menubar-index-alist nil)
-       (define-key newmap [menu-bar index]
-         `(menu-item ,name ,(make-sparse-keymap "Imenu")))
-       (use-local-map newmap)
-       (add-hook 'menu-bar-update-hook 'imenu-update-menubar))
+      (unless (keymapp (lookup-key (current-local-map) [menu-bar index]))
+       (let ((newmap (make-sparse-keymap)))
+         (set-keymap-parent newmap (current-local-map))
+         (setq imenu--last-menubar-index-alist nil)
+         (define-key newmap [menu-bar index]
+           `(menu-item ,name ,(make-sparse-keymap "Imenu")))
+         (use-local-map newmap)
+         (add-hook 'menu-bar-update-hook 'imenu-update-menubar)))
     (error "The mode `%s' does not support Imenu"
            (format-mode-line mode-name))))
 
@@ -1008,6 +1009,9 @@
                                                   (car (cdr menu))))
                                            'imenu--menubar-select))
          (setq old (lookup-key (current-local-map) [menu-bar index]))
+         ;; This should never happen, but in some odd cases, potentially,
+         ;; lookup-key may return a dynamically composed keymap.
+         (if (keymapp (cadr old)) (setq old (cadr old)))
          (setcdr old (cdr menu1)))))))
 
 (defun imenu--menubar-select (item)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]