Sometimes, menu separators are doubled up in context-menu-mode. To see this in action: emacs -Q --eval '(context-menu-mode)' ;; Right-click somewhere in the scratch buffer, like the empty area. You should see a double separator just before "Lisp-Interaction". `context-menu-map' tries to eliminate doubled separators, but it doesn't account for *tripled* separators. If we have a menu like so ("->" is the current list item when iterating): -> (separator-foo "--") (separator-bar "--") (separator-baz "--") (regular-item "Item") The duplicate remover sees that both the current item and the next are separators, so removes it: -> (separator-foo "--") (separator-baz "--") (regular-item "Item") But then the very next operation is to move to the next list item: (separator-foo "--") -> (separator-baz "--") (regular-item "Item") Now, on the next iteration of the while loop, it won't detect the duplicate because it's too far ahead. Attached is a patch to fix this; it only advances to the next list item when it *didn't* just delete a duplicate separator. That way, it can keep deleting subsequent dupes until it sees a non-separator item. I've only tested this on Emacs 29 so far, but it may occur on Emacs 28 as well. Also, I noticed that separators can appear at the beginning and/or end of the context menu. Should they be removed too?