Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id D3580431FAF for ; Sun, 5 May 2013 03:48:36 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 82qVG9aZXIVg for ; Sun, 5 May 2013 03:48:32 -0700 (PDT) Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34]) by olra.theworths.org (Postfix) with ESMTP id 73751431FAE for ; Sun, 5 May 2013 03:48:32 -0700 (PDT) Received: from guru.guru-group.fi (localhost [IPv6:::1]) by guru.guru-group.fi (Postfix) with ESMTP id 58AC7100033; Sun, 5 May 2013 13:48:31 +0300 (EEST) From: Tomi Ollila To: Mark Walters , Jani Nikula , notmuch@notmuchmail.org Subject: Re: [PATCH REBASE] emacs: add show view bindings to move to previous/next thread In-Reply-To: <87bo8q72u3.fsf@qmul.ac.uk> References: <1367514302-30196-1-git-send-email-jani@nikula.org> <87bo8q72u3.fsf@qmul.ac.uk> User-Agent: Notmuch/0.15.2+75~gd7fa7c4 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-unknown-linux-gnu) X-Face: HhBM'cA~ MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 May 2013 10:48:37 -0000 On Sun, May 05 2013, Mark Walters 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 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