[PATCH v2 1/4] emacs: reuse buffer when refreshing searches

Mark Walters markwalters1009 at gmail.com
Sun Sep 25 03:17:49 PDT 2016


On Sat, 24 Sep 2016, Ioan-Adrian Ratiu <adi at adirat.com> wrote:
> There's no reason to completely kill a buffer while refreshing its
> search results because the buffer name is constant between refreshes
> (based on the search query), only its contents may change and notmuch
> search kills all local variables, so it's safe to reuse.
>
> Reusing the same buffer also makes it possible to do things like
> refreshing a buffer which is not focused or even not shown in any
> window - this will be used in the next patches to add auto-refresh
> capabilities to all existing notmuch buffers + a function to call
> after syncing mail to refresh everything.
>
> Signed-off-by: Ioan-Adrian Ratiu <adi at adirat.com>
> ---
>  emacs/notmuch.el | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index 8e14692..05687b7 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -984,7 +984,7 @@ the configured default sort order."
>  (defun notmuch-search-refresh-view ()
>    "Refresh the current view.
>  
> -Kills the current buffer and runs a new search with the same
> +Erases the current buffer and runs a new search with the same
>  query string as the current search. If the current thread is in
>  the new search results, then point will be placed on the same
>  thread. Otherwise, point will be moved to attempt to be in the
> @@ -992,8 +992,9 @@ same relative position within the new buffer."
>    (let ((target-line (line-number-at-pos))
>  	(oldest-first notmuch-search-oldest-first)
>  	(target-thread (notmuch-search-find-thread-id 'bare))
> -	(query notmuch-search-query-string))
> -    (notmuch-bury-or-kill-this-buffer)
> +	(query notmuch-search-query-string)
> +	(inhibit-read-only t))
> +    (erase-buffer)

Hi

Something I missed previously: I think erase-buffer does not remove
overlays (see the comment in notmuch-show-refresh-view). Thus it is
probably worth removing them manually. I don't think there will be any
visual artefacts in this case, but I think emacs's speed is quadratic in
the number of overlays.

Anyway I suggest adding a (remove-overlays) before or after the
erase-buffer.

Best wishes

Mark


>      (notmuch-search query oldest-first target-thread target-line)
>      (goto-char (point-min))))
>  
> -- 
> 2.10.0


More information about the notmuch mailing list