aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs/notmuch-show.el
diff options
context:
space:
mode:
authorGravatar Jameson Graef Rollins <jrollins@finestructure.net>2012-01-24 16:06:17 -0800
committerGravatar David Bremner <bremner@debian.org>2012-01-30 23:19:10 -0400
commit047792102c133f02e043759e9b8399e98938ba7f (patch)
tree5ebc7ef3cb722a01be362a4188d68c44dc68dc81 /emacs/notmuch-show.el
parent9b7e0dcb9a8bd8a5898d9dd68715f3a0d0e5280d (diff)
emacs: break up notmuch-show-archive-thread-internal into two more generally useful functions
Break up notmuch-show-archive-thread-internal into two new functions: notmuch-show-tag-thread-internal: applies a tag to all messages in thread. If option remove flag is t, tags will be removed instead of added. notmuch-show-next-thread: moves to the next thread in the search result. If given a prefix, will show the next result, otherwise will just move to it in the search view. Two new interactive functions, notmuch-show-{add,remove}-tag-thread, are also added. Together, these provide a better suit of thread tagging and navigation tools. The higher level thread archiving functions are modified to use these new function.
Diffstat (limited to 'emacs/notmuch-show.el')
-rw-r--r--emacs/notmuch-show.el46
1 files changed, 33 insertions, 13 deletions
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 6b8bd199..33024390 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1557,20 +1557,38 @@ argument, hide all of the messages."
(interactive)
(backward-button 1))
-(defun notmuch-show-archive-thread-internal (show-next)
- ;; Remove the tag from the current set of messages.
+(defun notmuch-show-tag-thread-internal (tag &optional remove)
+ "Add tag to the current set of messages.
+
+If the remove switch is given, tags will be removed instead of
+added."
(goto-char (point-min))
- (loop do (notmuch-show-remove-tag "inbox")
- until (not (notmuch-show-goto-message-next)))
- ;; Move to the next item in the search results, if any.
+ (let ((tag-function (if remove
+ 'notmuch-show-remove-tag
+ 'notmuch-show-add-tag)))
+ (loop do (funcall tag-function tag)
+ until (not (notmuch-show-goto-message-next)))))
+
+(defun notmuch-show-add-tag-thread (tag)
+ "Add tag to all messages in the current thread."
+ (interactive)
+ (notmuch-show-tag-thread-internal tag))
+
+(defun notmuch-show-remove-tag-thread (tag)
+ "Remove tag from all messages in the current thread."
+ (interactive)
+ (notmuch-show-tag-thread-internal tag t))
+
+(defun notmuch-show-next-thread (&optional show-next)
+ "Move to the next item in the search results, if any."
+ (interactive "P")
(let ((parent-buffer notmuch-show-parent-buffer))
(notmuch-kill-this-buffer)
- (if parent-buffer
- (progn
- (switch-to-buffer parent-buffer)
- (notmuch-search-next-thread)
- (if show-next
- (notmuch-search-show-thread))))))
+ (when parent-buffer
+ (switch-to-buffer parent-buffer)
+ (notmuch-search-next-thread)
+ (if show-next
+ (notmuch-search-show-thread)))))
(defun notmuch-show-archive-thread ()
"Archive each message in thread, then show next thread from search.
@@ -1584,12 +1602,14 @@ being delivered to the same thread. It does not archive the
entire thread, but only the messages shown in the current
buffer."
(interactive)
- (notmuch-show-archive-thread-internal t))
+ (notmuch-show-remove-tag-thread "inbox")
+ (notmuch-show-next-thread t))
(defun notmuch-show-archive-thread-then-exit ()
"Archive each message in thread, then exit back to search results."
(interactive)
- (notmuch-show-archive-thread-internal nil))
+ (notmuch-show-remove-tag-thread "inbox")
+ (notmuch-show-next-thread))
(defun notmuch-show-stash-cc ()
"Copy CC field of current message to kill-ring."