[PATCH] emacs: When completing tags, offer each tag once

Subject: [PATCH] emacs: When completing tags, offer each tag once

Date: Mon, 1 Feb 2021 14:54:02 +0000

To: notmuch@notmuchmail.org

Cc: David Edmondson

From: David Edmondson

When prompting for one or more tags to add or remove to/from one or
more threads, ensure that the set of tags offered for completion
contains no duplicates.

Some completion packages (e.g. selectrum) will include every member of
the offered list, resulting in the same tag being indicated as a
possibility several times.
 emacs/notmuch.el | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 26efcccd..ceec5b5d 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -572,12 +572,20 @@ thread."
 (defun notmuch-search-get-tags (&optional pos)
   (plist-get (notmuch-search-get-result pos) :tags))
+(defun notmuch-search-uniq-tags (tags)
+  (let (result)
+    (mapc (lambda (tag)
+	    (unless (member tag result)
+	      (push tag result)))
+	  tags)
+    result))
 (defun notmuch-search-get-tags-region (beg end)
   (let (output)
     (notmuch-search-foreach-result beg end
       (lambda (pos)
 	(setq output (append output (notmuch-search-get-tags pos)))))
-    output))
+    (notmuch-search-uniq-tags output)))
 (defun notmuch-search-interactive-tag-changes (&optional initial-input)
   "Prompt for tag changes for the current thread or region.
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org