aboutsummaryrefslogtreecommitdiff
path: root/emacs/notmuch.el
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2024-08-10 14:36:22 -0300
committerDavid Bremner <david@tethera.net>2025-03-13 07:48:53 -0300
commit5cb06b1893091cb069da990556e822c21a684acf (patch)
tree4a804623a81c7d16fd0e83cde5963a380f351d89 /emacs/notmuch.el
parenteb48d78758394c7241a1aa83a24cfd61e0a3c9fa (diff)
emacs: replace use of hook to draw hl-line in search mode
In the thread at id:87fsfuuxwn.fsf@thinkbox, a bug is discussed where the point and hl-line overlay get out of sync, leading the user to open the wrong message. As far as I can tell this is caused by notmuch-hl-mode being invoked too early. This change bypasses the logic preventing notmuch-search-hook being called only once, so that the overlay is updated later after the buffer is full(er). This change may lead to the overlay being updated multiple times; if this is annoying we can add a similar buffer local variable to ensure it is only called once. The extra logic to check notmuch-search-target-line reduces the flicker somewhat by not highlighting the first line every time.
Diffstat (limited to 'emacs/notmuch.el')
-rw-r--r--emacs/notmuch.el13
1 files changed, 11 insertions, 2 deletions
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 934ec894..5477bf4a 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -126,10 +126,9 @@ there will be called at other points of notmuch execution."
:type 'file
:group 'notmuch)
-(defcustom notmuch-search-hook '(notmuch-hl-line-mode)
+(defcustom notmuch-search-hook nil
"List of functions to call when notmuch displays the search results."
:type 'hook
- :options '(notmuch-hl-line-mode)
:group 'notmuch-search
:group 'notmuch-hooks)
@@ -930,6 +929,16 @@ sets the :orig-tag property."
(notmuch-sexp-parse-partial-list 'notmuch-search-append-result
results-buf))
(with-current-buffer results-buf
+ (when (and notmuch-hl-line
+ ;; If we know where the cursor will end up (from
+ ;; the call to notmuch-search), avoid redrawing the
+ ;; hl-line overlay until the buffer is sufficiently
+ ;; filled. This check is intended as an
+ ;; optimization to reduce flicker.
+ (>=
+ (line-number-at-pos (point-max) t)
+ (or notmuch-search-target-line -1)))
+ (notmuch-hl-line-mode))
(notmuch--search-hook-wrapper)))))
;;; Commands (and some helper functions used by them)