contrib: pick: add thread based utility functions

Previously notmuch-pick had no thread based functionality. This adds a
macro to iterate through all messages in a thread. To simplify this it
adds a text-property marker to the first message of each thread.
This commit is contained in:
Mark Walters 2013-08-25 20:55:32 +01:00 committed by David Bremner
parent db465e443f
commit f8a8afe5c2

View file

@ -594,6 +594,29 @@ message will be \"unarchived\", i.e. the tag changes in
target target
(get-buffer buffer-name)))) (get-buffer buffer-name))))
(defun notmuch-pick-thread-top ()
(when (notmuch-pick-get-message-properties)
(while (not (or (notmuch-pick-get-prop :first) (eobp)))
(forward-line -1))))
(defun notmuch-pick-thread-mapcar (function)
"Iterate through all messages in the current thread
and call FUNCTION for side effects."
(save-excursion
(notmuch-pick-thread-top)
(loop collect (funcall function)
do (forward-line)
while (and (notmuch-pick-get-message-properties)
(not (notmuch-pick-get-prop :first))))))
(defun notmuch-pick-get-messages-ids-thread-search ()
"Return a search string for all message ids of messages in the current thread."
(mapconcat 'identity
(notmuch-pick-thread-mapcar 'notmuch-pick-get-message-id)
" or "))
;; Functions below here display the pick buffer itself.
(defun notmuch-pick-clean-address (address) (defun notmuch-pick-clean-address (address)
"Try to clean a single email ADDRESS for display. Return "Try to clean a single email ADDRESS for display. Return
AUTHOR_NAME if present, otherwise return AUTHOR_EMAIL. Return AUTHOR_NAME if present, otherwise return AUTHOR_EMAIL. Return
@ -702,6 +725,7 @@ message together with all its descendents."
(push "" tree-status))) (push "" tree-status)))
(push (concat (if replies "" "") "") tree-status) (push (concat (if replies "" "") "") tree-status)
(plist-put msg :first (and first (eq 0 depth)))
(notmuch-pick-goto-and-insert-msg (plist-put msg :tree-status tree-status)) (notmuch-pick-goto-and-insert-msg (plist-put msg :tree-status tree-status))
(pop tree-status) (pop tree-status)
(pop tree-status) (pop tree-status)