From: markwalters1009 <[email protected]>

This makes tagging in show mode pass the list of tags that it believes
occur to the tag completion function. This means that tag-completion
will complete to any tag that the user can see (even if it is no
longer present).
---
The function to get all tags for a thread was taken from Damien's
notmuch-labeler series.

 emacs/notmuch-show.el |   32 +++++++++++++++++++++++++-------
 1 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 489e32c..c2fef7b 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1439,6 +1439,16 @@ current thread."
   "Return the tags of the current message."
   (notmuch-show-get-prop :tags))

+(defun notmuch-show-thread-tags ()
+  "Return the list of tags for the current thread."
+  (let ((tags (list)))
+    (notmuch-show-mapc (lambda ()
+                        (mapcar (lambda (elt)
+                                  ;; Avoid adding duplicate tags
+                                  (add-to-list 'tags elt))
+                                (notmuch-show-get-tags))))
+    tags))
+
 (defun notmuch-show-message-visible-p ()
   "Is the current message visible?"
   (notmuch-show-get-prop :message-visible))
@@ -1730,9 +1740,13 @@ TAG-CHANGES is a list of tag operations for 
`notmuch-tag'."

 See `notmuch-tag' for information on the format of TAG-CHANGES."
   (interactive)
-  (setq tag-changes (funcall 'notmuch-tag (notmuch-show-get-message-id) 
tag-changes))
-  (let* ((current-tags (notmuch-show-get-tags))
-        (new-tags (notmuch-update-tags current-tags tag-changes)))
+  (let ((current-tags (notmuch-show-get-tags))
+       (new-tags))
+    (setq tag-changes (funcall 'notmuch-tag
+                              (notmuch-show-get-message-id)
+                              tag-changes
+                              current-tags))
+    (setq new-tags (notmuch-update-tags current-tags tag-changes))
     (unless (equal current-tags new-tags)
       (notmuch-show-set-tags new-tags))))

@@ -1741,13 +1755,17 @@ See `notmuch-tag' for information on the format of 
TAG-CHANGES."

 See `notmuch-tag' for information on the format of TAG-CHANGES."
   (interactive)
-  (setq tag-changes (funcall 'notmuch-tag 
(notmuch-show-get-messages-ids-search) tag-changes))
-  (notmuch-show-mapc
-   (lambda ()
+  (let ((existing-tags (notmuch-show-thread-tags)))
+    (setq tag-changes (funcall 'notmuch-tag
+                              (notmuch-show-get-messages-ids-search)
+                              tag-changes
+                              existing-tags))
+    (notmuch-show-mapc
+     (lambda ()
      (let* ((current-tags (notmuch-show-get-tags))
            (new-tags (notmuch-update-tags current-tags tag-changes)))
        (unless (equal current-tags new-tags)
-        (notmuch-show-set-tags new-tags))))))
+        (notmuch-show-set-tags new-tags)))))))

 (defun notmuch-show-add-tag ()
   "Same as `notmuch-show-tag' but sets initial input to '+'."
-- 
1.7.9.1

Reply via email to