From: Jim Porter <jporterbugs@gmail.com>
To: Juri Linkov <juri@linkov.net>
Cc: "52293@debbugs.gnu.org" <52293@debbugs.gnu.org>
Subject: bug#52293: [External] : bug#52293: 29.0.50; [PATCH v3] Prevent further cases of duplicated separators in context menus
Date: Fri, 31 Dec 2021 23:13:21 -0800 [thread overview]
Message-ID: <e3475c4b-7da7-8bf5-7a9b-7d846b45badd@gmail.com> (raw)
In-Reply-To: <86ee6egs8b.fsf@mail.linkov.net>
[-- Attachment #1: Type: text/plain, Size: 933 bytes --]
On 12/15/2021 12:57 AM, Juri Linkov wrote:
> I'm not sure if de-duplication is needed for other menus. Currently
> de-duplication is used only to simplify creation of context menus.
> But there is no indication that someone needed this for other menus.
> Otherwise, they would report duplicate separators in other menus as a bug.
Ok, we can worry about that another time.
I've attached an updated patch that lets context-menu-functions add
items to the beginning of the keymap as they currently do, while still
removing consecutive separators correctly. Since this logic is a bit
tricky, it could probably use an automated test or two, but before I
write some, I wanted to check that the strategy I'm using seems
reasonable. It's probably easiest to explain the logic by just pointing
to the patch; I added several comments describing the behavior so that
reviewers (and future readers) should be able to make sense of it.
[-- Attachment #2: 0001-Prevent-further-cases-of-duplicated-separators-in-co.patch --]
[-- Type: text/plain, Size: 2676 bytes --]
From 0310f926b62fd74932e3766c03bd7a39974c457b Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Fri, 31 Dec 2021 23:04:57 -0800
Subject: [PATCH] Prevent further cases of duplicated separators in context
menus
In some cases, context menu items are added before the overall prompt
string. This could cause multiple consecutive separators to appear if
they "surround" the prompt string.
* lisp/mouse.el (context-menu-map): Improve the de-duplication logic
to ignore non-menu-items when checking for consecutive separators.
---
lisp/mouse.el | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 11fdd3f639..41cfff8d82 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -329,20 +329,27 @@ context-menu-map
;; Remove duplicate separators as well as ones at the beginning or
;; end of the menu.
- (let ((l menu) saw-first-item)
+ (let ((l menu) (remove-next-separator t))
(while (and (consp l)
(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))
+ (if (equal (cdr-safe (cadr l)) menu-bar-separator)
+ (progn
+ ;; The next item is a separator. Remove it if requested
+ ;; by remove-next-separator or if it's the last item in
+ ;; the list.
+ (if (or remove-next-separator
+ (null (caddr l)))
+ (setcdr l (cddr l))
+ (setq l (cdr l)))
+ ;; We just saw a separator. Remove any immediately
+ ;; following this.
+ (setq remove-next-separator t))
+ ;; If the next item is a cons cell, we found a non-separator
+ ;; item. Don't remove the next separator we see. We
+ ;; specifically check for cons cells to avoid treating the
+ ;; overall prompt string as a menu item.
+ (when (consp (cadr l))
+ (setq remove-next-separator nil))
(setq l (cdr l)))))
(when (functionp context-menu-filter-function)
--
2.25.1
next prev parent reply other threads:[~2022-01-01 7:13 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-05 5:58 bug#52293: 29.0.50; [PATCH] Prevent further cases of duplicated separators in context menus Jim Porter
2021-12-05 9:39 ` Juri Linkov
2021-12-06 4:07 ` Jim Porter
2021-12-05 17:59 ` Juri Linkov
2021-12-06 4:50 ` Jim Porter
2021-12-06 9:23 ` Juri Linkov
2021-12-07 3:54 ` bug#52293: 29.0.50; [PATCH v2] " Jim Porter
2021-12-07 8:19 ` Juri Linkov
2021-12-08 4:37 ` bug#52293: 29.0.50; [PATCH v3] " Jim Porter
2021-12-08 12:59 ` Eli Zaretskii
2021-12-08 17:43 ` Jim Porter
2021-12-08 19:07 ` Juri Linkov
2021-12-08 19:47 ` Eli Zaretskii
2021-12-09 9:06 ` Juri Linkov
2021-12-09 9:39 ` Eli Zaretskii
2021-12-12 4:02 ` Jim Porter
2021-12-12 7:02 ` Eli Zaretskii
2021-12-12 20:27 ` Jim Porter
2021-12-12 20:43 ` Eli Zaretskii
2021-12-12 21:59 ` Jim Porter
2021-12-13 12:23 ` Eli Zaretskii
2021-12-13 18:13 ` Jim Porter
2021-12-12 21:00 ` bug#52293: [External] : " Drew Adams
2021-12-12 22:12 ` Jim Porter
2021-12-12 23:14 ` Jim Porter
2021-12-13 1:16 ` Drew Adams
2021-12-13 1:46 ` Jim Porter
2021-12-13 2:41 ` Drew Adams
2021-12-13 8:47 ` Juri Linkov
2021-12-13 17:25 ` Jim Porter
2021-12-13 18:58 ` Juri Linkov
2021-12-14 5:41 ` Jim Porter
2021-12-14 8:30 ` Juri Linkov
2021-12-14 13:04 ` Eli Zaretskii
2021-12-14 16:49 ` Drew Adams
2021-12-14 20:51 ` Juri Linkov
2021-12-14 22:02 ` Drew Adams
2021-12-15 8:59 ` Juri Linkov
2021-12-15 18:10 ` Drew Adams
2021-12-15 18:24 ` Juri Linkov
2021-12-15 21:36 ` Drew Adams
2021-12-16 17:20 ` Juri Linkov
2021-12-16 17:51 ` Drew Adams
2021-12-16 17:56 ` Drew Adams
2021-12-17 8:20 ` Juri Linkov
2021-12-17 17:21 ` Drew Adams
2021-12-15 0:17 ` Jim Porter
2021-12-15 8:57 ` Juri Linkov
2022-01-01 7:13 ` Jim Porter [this message]
2022-01-02 19:27 ` Juri Linkov
2022-01-03 6:14 ` bug#52293: 29.0.50; [PATCH v4] " Jim Porter
2022-01-04 8:19 ` Juri Linkov
2022-01-04 21:14 ` Jim Porter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e3475c4b-7da7-8bf5-7a9b-7d846b45badd@gmail.com \
--to=jporterbugs@gmail.com \
--cc=52293@debbugs.gnu.org \
--cc=juri@linkov.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).