Re: [PATCH REBASE] emacs: add show view bindings to move to previous/next thread

Subject: Re: [PATCH REBASE] emacs: add show view bindings to move to previous/next thread

Date: Sun, 05 May 2013 13:48:31 +0300

To: Mark Walters, Jani Nikula, notmuch@notmuchmail.org

Cc:

From: Tomi Ollila


On Sun, May 05 2013, Mark Walters <markwalters1009@gmail.com> wrote:

> Hi
>
> This seems like a useful addition to me. I have a couple of comments and
> a little bikeshedding below.
>
> On Thu, 02 May 2013, Jani Nikula <jani@nikula.org> wrote:
>> We have most of the plumbing in place, add the bindings M-n and M-p.
>> ---
>>  emacs/notmuch-show.el |   24 ++++++++++++++++++++++++
>>  1 file changed, 24 insertions(+)
>>
>> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
>> index face2a0..7f6ea65 100644
>> --- a/emacs/notmuch-show.el
>> +++ b/emacs/notmuch-show.el
>> @@ -39,6 +39,7 @@
>>  
>>  (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
>>  (declare-function notmuch-search-next-thread "notmuch" nil)
>> +(declare-function notmuch-search-previous-thread "notmuch" nil)
>>  (declare-function notmuch-search-show-thread "notmuch" nil)
>>  
>>  (defcustom notmuch-message-headers '("Subject" "To" "Cc" "Date")
>> @@ -1267,6 +1268,8 @@ reset based on the original query."
>>  	(define-key map "P" 'notmuch-show-previous-message)
>>  	(define-key map "n" 'notmuch-show-next-open-message)
>>  	(define-key map "p" 'notmuch-show-previous-open-message)
>> +	(define-key map (kbd "M-n") 'notmuch-show-next-thread-show)
>> +	(define-key map (kbd "M-p") 'notmuch-show-previous-thread-show)
>
> These seem sensible bindings.
>
>>  	(define-key map (kbd "DEL") 'notmuch-show-rewind)
>>  	(define-key map " " 'notmuch-show-advance-and-archive)
>>  	(define-key map (kbd "M-RET") 'notmuch-show-open-or-close-all)
>> @@ -1839,6 +1842,27 @@ argument, hide all of the messages."
>>        (if show-next
>>  	  (notmuch-search-show-thread)))))
>>  
>> +(defun notmuch-show-previous-thread (&optional show-previous)
>> +  "Move to the next item in the search results, if any."
>                   ^^
> Should be previous item.
>
>> +  (interactive "P")
>> +  (let ((parent-buffer notmuch-show-parent-buffer))
>> +    (notmuch-kill-this-buffer)
>> +    (when (buffer-live-p parent-buffer)
>> +      (switch-to-buffer parent-buffer)
>> +      (notmuch-search-previous-thread)
>> +      (if show-previous
>> +	  (notmuch-search-show-thread)))))
>> +
>
> If you change this to 
>    (if  (and (notmuch-search-previous-thread) show-previous)
> 	  (notmuch-search-show-thread)))))
> then if you apply it to the first thread  it jumps back to the search menu which is
> consistent with the next-thread version.

notmuch-search-next-thread & notmuch-search-previous-thread behaves
differently when it comes to the end... previous always points
to thread but next goes to the end. This is OK for interactive point
of view but for noninteractive use one needs to do special handling...

> I would have a slight preference for adding another optional argument 
> notmuch-show-next-thread (&optional show-message previous)
>
> where if PREVIOUS is set then it would go back otherwise forward. But I
> with the duplicated version too.

... what we need is lower level (noninteractive) function (taking PREVIOUS
as an arg) which signals when it cannot get next/previous function...
and then this notmuch-show-next-thread (&optional show-message previous)
just calls it (with proper handling block) in place of
notmuch-search-next-thread (maybe notmuch-search-previous-or-next-thread).

This would be a bit cleaner.

If this is not done, then I'd just go with Mark's suggestion of checking
the return value of notmuch-search-previous-thread, and if you (jani)
wish combine this functionality to notmuch-show-next-thread.


> Best wishes
>
> Mark

Tomi

>
>
>> +(defun notmuch-show-next-thread-show ()
>> +  "Show the next thread in the search results, if any."
>> +  (interactive)
>> +  (notmuch-show-next-thread t))
>> +
>> +(defun notmuch-show-previous-thread-show ()
>> +  "Show the previous thread in the search results, if any."
>> +  (interactive)
>> +  (notmuch-show-previous-thread t))
>> +
>>  (defun notmuch-show-archive-thread (&optional unarchive)
>>    "Archive each message in thread.
>>  
>> -- 
>> 1.7.10.4

Thread: