]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve handling of context menus for global, local, minor-mode menus
authorJuri Linkov <juri@linkov.net>
Tue, 3 Aug 2021 08:23:57 +0000 (11:23 +0300)
committerJuri Linkov <juri@linkov.net>
Tue, 3 Aug 2021 08:23:57 +0000 (11:23 +0300)
* lisp/mouse.el (context-menu-global, context-menu-local, context-menu-minor):
Better handling of possibly nested menu maps.

lisp/mouse.el

index 49191e32ea441ea1abb875efb5bdaea3e86ebc8b..1f5bd8e4a6be95f077dd2f8e966f32b4fae2e4fa 100644 (file)
@@ -318,11 +318,9 @@ the same menu with changes such as added new menu items."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-global] menu-bar-separator)
   (dolist (item (lookup-key global-map [menu-bar]))
-    (when (consp item)
+    (when (and (consp item) (consp (cdr item)))
       (define-key-after menu (vector (car item))
-        (if (consp (cdr item))
-            (copy-sequence (cdr item))
-          (cdr item)))))
+        (copy-sequence (cdr item)))))
   menu)
 
 (defun context-menu-local (menu)
@@ -330,11 +328,11 @@ the same menu with changes such as added new menu items."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-local] menu-bar-separator)
   (dolist (item (local-key-binding [menu-bar]))
-    (when (consp item)
+    (when (and (consp item) (consp (cdr item)))
+      ;; Fix deep menu created by `imenu-add-to-menubar'.
+      (when (eq (car item) 'keymap) (setq item (cadr item)))
       (define-key-after menu (vector (car item))
-        (if (consp (cdr item))
-            (copy-sequence (cdr item))
-          (cdr item)))))
+        (copy-sequence (cdr item)))))
   menu)
 
 (defun context-menu-minor (menu)
@@ -344,11 +342,9 @@ the same menu with changes such as added new menu items."
   (dolist (mode (minor-mode-key-binding [menu-bar]))
     (when (and (consp mode) (symbol-value (car mode)))
       (dolist (item (cdr mode))
-        (when (consp item)
+        (when (and (consp item) (consp (cdr item)))
           (define-key-after menu (vector (car item))
-            (if (consp (cdr item))
-                (copy-sequence (cdr item))
-              (cdr item)))))))
+            (copy-sequence (cdr item)))))))
   menu)
 
 (defun context-menu-vc (menu)