[PATCH] emacs: run notmuch-search-hook lazily

Subject: [PATCH] emacs: run notmuch-search-hook lazily

Date: Sun, 12 Sep 2021 22:03:50 -0300

To: Fabio Natali, notmuch@notmuchmail.org

Cc: David Bremner

From: David Bremner

In message id:YT3ueuZHKW931NW3@localhost, Fabio Natali isolated a
visual glitch caused by running notmuch-search-hook too early. This
change moves the running of that hook to
notmuch-search-process-filter, which ensures there is some output in
the buffer before running the hook. Since n-s-p-f can be called many
times for a given buffer, add a buffer local flag to make sure it is
only run once per buffer.
 emacs/notmuch.el | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 2ef67c0e..052f7578 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -880,6 +880,14 @@ sets the :orig-tag property."
       (setq notmuch-search-target-thread "found")
       (goto-char pos))))
+(defvar-local notmuch--search-hook-run nil
+  "Flag used to ensure the notmuch-search-hook is only run once per buffer")
+(defun notmuch--search-hook-wrapper ()
+  (unless notmuch--search-hook-run
+    (setq notmuch--search-hook-run t)
+    (run-hooks 'notmuch-search-hook)))
 (defun notmuch-search-process-filter (proc string)
   "Process and filter the output of \"notmuch search\"."
   (let ((results-buf (process-buffer proc))
@@ -892,7 +900,9 @@ sets the :orig-tag property."
 	  (goto-char (point-max))
 	  (insert string))
 	(notmuch-sexp-parse-partial-list 'notmuch-search-append-result
-					 results-buf)))))
+					 results-buf))
+      (with-current-buffer results-buf
+	(notmuch--search-hook-wrapper)))))
 ;;; Commands (and some helper functions used by them)
@@ -1036,8 +1046,7 @@ the configured default sort order."
 	  (process-put proc 'parse-buf
 		       (generate-new-buffer " *notmuch search parse*"))
 	  (set-process-filter proc 'notmuch-search-process-filter)
-	  (set-process-query-on-exit-flag proc nil))))
-    (run-hooks 'notmuch-search-hook)))
+	  (set-process-query-on-exit-flag proc nil))))))
 (defun notmuch-search-refresh-view ()
   "Refresh the current view.
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org