]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove separators at the beginning and end of the context menu
authorJim Porter <jporterbugs@gmail.com>
Fri, 3 Dec 2021 16:10:10 +0000 (17:10 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 3 Dec 2021 16:22:59 +0000 (17:22 +0100)
* lisp/mouse.el (context-menu-map): Remove beginning/end
seperators (bug#52237).

lisp/mouse.el

index ec43aecdd02f8d764e5c8c4d442eb7017a4a5674..b5ca80a446e51e9b7da0bc2a19c52ae98a866a3d 100644 (file)
@@ -327,12 +327,21 @@ the function `context-menu-filter-function'."
                           (setq menu (funcall fun menu click))
                           nil)))
 
-    ;; Remove duplicate separators
-    (let ((l menu))
-      (while (consp l)
-        (if (and (equal (cdr-safe (car l)) menu-bar-separator)
-                 (equal (cdr-safe (cadr l)) menu-bar-separator))
+    ;; Remove duplicate separators as well as ones at the beginning or
+    ;; end of the menu.
+    (let ((l menu) saw-first-item)
+      (while (consp (cdr l))
+        ;; If the next item is a separator, remove it if 1) we haven't
+        ;; seen any other items yet, or 2) it's followed by either
+        ;; another separator or the end of the list.
+        (if (and (equal (cdr-safe (cadr l)) menu-bar-separator)
+                 (or (not saw-first-item)
+                     (null (caddr l))
+                     (equal (cdr-safe (caddr l)) menu-bar-separator)))
             (setcdr l (cddr l))
+          ;; The "first item" is any cons cell; this excludes the
+          ;; `keymap' symbol and the menu name.
+          (when (consp (cadr l)) (setq saw-first-item t))
           (setq l (cdr l)))))
 
     (when (functionp context-menu-filter-function)