From: markwalters1009 <markwalters1009@gmail.com> 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