emacs/tree: enable moving to next thread in search results

This introduces a new function called
notmuch-tree-next-thread-from-search which is analogous to
notmuch-show-next-thread. It will switch to the next or previous
thread from the parent search results.

We rename notmuch-tree-{prev,next}-thread to a more descriptive
notmuch-tree-{prev,next}-thread-in-tree to reflect the fact that it
only moves to the next thread in the current tree.

notmuch-tree-next-thread now switches to the next thread in the
current tree first, but if there are none, it looks for the next tree
in the search results.

This makes notmuch-tree feel more like notmuch-show when using the
M-Enter, M-n and M-p bindings.

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin 2020-08-11 10:36:52 -07:00 committed by David Bremner
parent 189175ecd6
commit 874f14ec2b

View file

@ -725,12 +725,14 @@ nil otherwise."
(while (not (or (notmuch-tree-get-prop :first) (eobp))) (while (not (or (notmuch-tree-get-prop :first) (eobp)))
(forward-line -1)))) (forward-line -1))))
(defun notmuch-tree-prev-thread () (defun notmuch-tree-prev-thread-in-tree ()
"Move to the previous thread in the current tree"
(interactive) (interactive)
(forward-line -1) (forward-line -1)
(notmuch-tree-thread-top)) (notmuch-tree-thread-top)
(not (bobp)))
(defun notmuch-tree-next-thread () (defun notmuch-tree-next-thread-in-tree ()
"Get the next thread in the current tree. Returns t if a thread was "Get the next thread in the current tree. Returns t if a thread was
found or nil if not." found or nil if not."
(interactive) (interactive)
@ -739,6 +741,38 @@ found or nil if not."
(forward-line 1)) (forward-line 1))
(not (eobp))) (not (eobp)))
(defun notmuch-tree-next-thread-from-search (&optional previous)
"Move to the next thread in the parent search results, if any.
If PREVIOUS is non-nil, move to the previous item in the
search results instead."
(interactive "P")
(let ((parent-buffer notmuch-tree-parent-buffer))
(notmuch-tree-quit t)
(when (buffer-live-p parent-buffer)
(switch-to-buffer parent-buffer)
(if previous
(notmuch-search-previous-thread)
(notmuch-search-next-thread))
(notmuch-tree-from-search-thread))))
(defun notmuch-tree-next-thread (&optional previous)
"Move to the next thread in the current tree or parent search
results
If PREVIOUS is non-nil, move to the previous thread in the tree or
search results instead."
(interactive)
(unless (if previous (notmuch-tree-prev-thread-in-tree)
(notmuch-tree-next-thread-in-tree))
(notmuch-tree-next-thread-from-search previous)))
(defun notmuch-tree-prev-thread ()
"Move to the previous thread in the current tree or parent search
results"
(interactive)
(notmuch-tree-next-thread t))
(defun notmuch-tree-thread-mapcar (function) (defun notmuch-tree-thread-mapcar (function)
"Iterate through all messages in the current thread "Iterate through all messages in the current thread
and call FUNCTION for side effects." and call FUNCTION for side effects."