William Casarin <jb55@jb55.com> writes: > 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> > --- > emacs/notmuch-tree.el | 36 ++++++++++++++++++++++++++++++++++-- > 1 file changed, 34 insertions(+), 2 deletions(-) > > diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el > index f38fef98..dcd335e5 100644 > --- a/emacs/notmuch-tree.el > +++ b/emacs/notmuch-tree.el > @@ -710,12 +710,13 @@ nil otherwise." > (while (not (or (notmuch-tree-get-prop :first) (eobp))) > (forward-line -1)))) > > -(defun notmuch-tree-prev-thread () > +(defun notmuch-tree-prev-thread-in-tree () > + "Move to the next thread in the current tree" > (interactive) > (forward-line -1) > (notmuch-tree-thread-top)) > > -(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 > found or nil if not." > (interactive) > @@ -724,6 +725,37 @@ found or nil if not." > (forward-line 1)) > (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 (notmuch-tree-next-thread-in-tree) > + (notmuch-tree-next-thread-from-search previous))) I only have one more small fix for this in multi-threaded tree mode: diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el index 6661b12e..20dd1141 100644 --- a/emacs/notmuch-tree.el +++ b/emacs/notmuch-tree.el @@ -717,10 +717,11 @@ nil otherwise." (forward-line -1)))) (defun notmuch-tree-prev-thread-in-tree () - "Move to the next thread in the current tree" + "Move to the previous thread in the current tree" (interactive) (forward-line -1) - (notmuch-tree-thread-top)) + (notmuch-tree-thread-top) + (not (bobp))) (defun notmuch-tree-next-thread-in-tree () "Get the next thread in the current tree. Returns t if a thread was @@ -753,7 +754,8 @@ results If PREVIOUS is non-nil, move to the previous thread in the tree or search results instead." (interactive) - (unless (notmuch-tree-next-thread-in-tree) + (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 () which I will send in a v2 once this gets some Concept ACKs. Feel free to test in the meantime! Hopefully this makes tree-mode more usable for people who only use notmuch-show. Basic usage following the previous emacs/tree improvements: Press M-Enter on a thread from search-mode to enter that thread in notmuch-tree mode. With these patches, M-n and M-p move between search result threads, and A works as you would expect as well (archive and then move to next thread) Let me know what ya'll think! Cheers, Will _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch