mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-04-22 07:10:46 +02:00
emacs: Refresh hello whenever the user switches to the buffer
Previously, we refreshed hello when the user quit a search that was started from hello. This is fine assuming purely stack-oriented buffer use, but is quite fragile and requires hacks to search. This replaces that logic with a new approach that refreshes hello whenever the user switches to the hello buffer, regardless of how this happens.
This commit is contained in:
parent
8a111b58d8
commit
da88f4b6d5
1 changed files with 48 additions and 10 deletions
|
@ -232,6 +232,11 @@ supported for \"Customized queries section\" items."
|
|||
notmuch-hello-query-section
|
||||
(function :tag "Custom section"))))
|
||||
|
||||
(defcustom notmuch-hello-auto-refresh t
|
||||
"Automatically refresh when returning to the notmuch-hello buffer."
|
||||
:group 'notmuch-hello
|
||||
:type 'boolean)
|
||||
|
||||
(defvar notmuch-hello-hidden-sections nil
|
||||
"List of sections titles whose contents are hidden")
|
||||
|
||||
|
@ -263,8 +268,7 @@ afterwards.")
|
|||
(setq search (notmuch-hello-trim search))
|
||||
(let ((history-delete-duplicates t))
|
||||
(add-to-history 'notmuch-search-history search)))
|
||||
(notmuch-search search notmuch-search-oldest-first nil nil
|
||||
#'notmuch-hello-search-continuation))
|
||||
(notmuch-search search notmuch-search-oldest-first))
|
||||
|
||||
(defun notmuch-hello-add-saved-search (widget)
|
||||
(interactive)
|
||||
|
@ -322,8 +326,7 @@ diagonal."
|
|||
(defun notmuch-hello-widget-search (widget &rest ignore)
|
||||
(notmuch-search (widget-get widget
|
||||
:notmuch-search-terms)
|
||||
notmuch-search-oldest-first
|
||||
nil nil #'notmuch-hello-search-continuation))
|
||||
notmuch-search-oldest-first))
|
||||
|
||||
(defun notmuch-saved-search-count (search)
|
||||
(car (process-lines notmuch-command "count" search)))
|
||||
|
@ -476,9 +479,6 @@ Such a list can be computed with `notmuch-hello-query-counts'."
|
|||
|
||||
(defimage notmuch-hello-logo ((:type png :file "notmuch-logo.png")))
|
||||
|
||||
(defun notmuch-hello-search-continuation()
|
||||
(notmuch-hello-update t))
|
||||
|
||||
(defun notmuch-hello-update (&optional no-display)
|
||||
"Update the current notmuch view."
|
||||
;; Lazy - rebuild everything.
|
||||
|
@ -491,6 +491,36 @@ Such a list can be computed with `notmuch-hello-query-counts'."
|
|||
(notmuch-poll)
|
||||
(notmuch-hello-update))
|
||||
|
||||
(defun notmuch-hello-window-configuration-change ()
|
||||
"Hook function to update the hello buffer when it is switched to."
|
||||
(let ((hello-buf (get-buffer "*notmuch-hello*"))
|
||||
(do-refresh nil))
|
||||
;; Consider all windows in the currently selected frame, since
|
||||
;; that's where the configuration change happened. This also
|
||||
;; refreshes our snapshot of all windows, so we have to do this
|
||||
;; even if we know we won't refresh (e.g., hello-buf is null).
|
||||
(dolist (window (window-list))
|
||||
(let ((last-buf (window-parameter window 'notmuch-hello-last-buffer))
|
||||
(cur-buf (window-buffer window)))
|
||||
(when (not (eq last-buf cur-buf))
|
||||
;; This window changed or is new. Update recorded buffer
|
||||
;; for next time.
|
||||
(set-window-parameter window 'notmuch-hello-last-buffer cur-buf)
|
||||
(when (and (eq cur-buf hello-buf) last-buf)
|
||||
;; The user just switched to hello in this window (hello
|
||||
;; is currently visible, was not visible on the last
|
||||
;; configuration change, and this is not a new window)
|
||||
(setq do-refresh t)))))
|
||||
(when (and do-refresh notmuch-hello-auto-refresh)
|
||||
;; Refresh hello as soon as we get back to redisplay. On Emacs
|
||||
;; 24, we can't do it right here because something in this
|
||||
;; hook's call stack overrides hello's point placement.
|
||||
(run-at-time nil nil #'notmuch-hello t))
|
||||
(when (null hello-buf)
|
||||
;; Clean up hook
|
||||
(remove-hook 'window-configuration-change-hook
|
||||
#'notmuch-hello-window-configuration-change))))
|
||||
|
||||
|
||||
(defvar notmuch-hello-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
@ -765,9 +795,17 @@ following:
|
|||
"Run notmuch and display saved searches, known tags, etc."
|
||||
(interactive)
|
||||
|
||||
(if no-display
|
||||
(set-buffer "*notmuch-hello*")
|
||||
(switch-to-buffer "*notmuch-hello*"))
|
||||
;; This may cause a window configuration change, so if the
|
||||
;; auto-refresh hook is already installed, avoid recursive refresh.
|
||||
(let ((notmuch-hello-auto-refresh nil))
|
||||
(if no-display
|
||||
(set-buffer "*notmuch-hello*")
|
||||
(switch-to-buffer "*notmuch-hello*")))
|
||||
|
||||
;; Install auto-refresh hook
|
||||
(when notmuch-hello-auto-refresh
|
||||
(add-hook 'window-configuration-change-hook
|
||||
#'notmuch-hello-window-configuration-change))
|
||||
|
||||
(let ((target-line (line-number-at-pos))
|
||||
(target-column (current-column))
|
||||
|
|
Loading…
Add table
Reference in a new issue