emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/consult c1c2d10355: Improve jump preview restore


From: ELPA Syncer
Subject: [elpa] externals/consult c1c2d10355: Improve jump preview restore
Date: Sat, 15 Apr 2023 23:57:35 -0400 (EDT)

branch: externals/consult
commit c1c2d10355f2cc63f8a60a9bde9e796ed3ed9a77
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Improve jump preview restore
---
 consult.el | 61 ++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 34 insertions(+), 27 deletions(-)

diff --git a/consult.el b/consult.el
index 2957de6c01..f681f9c5ea 100644
--- a/consult.el
+++ b/consult.el
@@ -1479,13 +1479,12 @@ The function can be used as the `:state' argument of 
`consult--read'."
   (let ((saved-min (point-min-marker))
         (saved-max (point-max-marker))
         (saved-pos (point-marker))
-        overlays restore)
+        restore)
     (set-marker-insertion-type saved-max t) ;; Grow when text is inserted
     (lambda (action cand)
       (when (eq action 'preview)
         (mapc #'funcall restore)
-        (mapc #'delete-overlay overlays)
-        (setq restore nil overlays nil)
+        (setq restore nil)
         (if (not cand)
             ;; If position cannot be previewed, return to saved position
             (let ((saved-buffer (marker-buffer saved-pos)))
@@ -1496,33 +1495,41 @@ The function can be used as the `:state' argument of 
`consult--read'."
                 (goto-char saved-pos)))
           ;; Candidate can be previewed
           (consult--jump-1 (or (car-safe cand) cand))
-          (setq restore (consult--invisible-open-temporarily)
-                overlays
-                (list (save-excursion
-                        (let ((vbeg (progn (beginning-of-visual-line) (point)))
-                              (vend (progn (end-of-visual-line) (point)))
-                              (end (pos-eol)))
-                          (consult--make-overlay vbeg (if (= vend end) (1+ 
end) vend)
-                                                 'face 'consult-preview-line
-                                                 'window (selected-window)
-                                                 'priority 1)))))
+          (setq restore (consult--invisible-open-temporarily))
           ;; Ensure that cursor is properly previewed (gh:minad/consult#764)
           (unless (eq cursor-in-non-selected-windows 'box)
-            (push
-             (if (local-variable-p 'cursor-in-non-selected-windows)
-                 (let ((orig cursor-in-non-selected-windows))
-                   (lambda () (setq-local cursor-in-non-selected-windows 
orig)))
-               (lambda () (kill-local-variable 
'cursor-in-non-selected-windows)))
-             restore)
-            (setq-local cursor-in-non-selected-windows 'box))
+            (let ((orig cursor-in-non-selected-windows)
+                  (buf (current-buffer)))
+              (push
+               (if (local-variable-p 'cursor-in-non-selected-windows)
+                   (lambda ()
+                     (when (buffer-live-p buf)
+                       (with-current-buffer buf
+                         (setq-local cursor-in-non-selected-windows orig))))
+                 (lambda ()
+                   (when (buffer-live-p buf)
+                     (with-current-buffer buf
+                       (kill-local-variable 
'cursor-in-non-selected-windows)))))
+               restore)
+              (setq-local cursor-in-non-selected-windows 'box)))
           ;; Match previews
-          (dolist (match (cdr-safe cand))
-            (push (consult--make-overlay (+ (point) (car match))
-                                         (+ (point) (cdr match))
-                                         'face 'consult-preview-match
-                                         'window (selected-window)
-                                         'priority 2)
-                  overlays))
+          (let ((overlays
+                 (list (save-excursion
+                         (let ((vbeg (progn (beginning-of-visual-line) 
(point)))
+                               (vend (progn (end-of-visual-line) (point)))
+                               (end (pos-eol)))
+                           (consult--make-overlay vbeg (if (= vend end) (1+ 
end) vend)
+                                                  'face 'consult-preview-line
+                                                  'window (selected-window)
+                                                  'priority 1))))))
+            (dolist (match (cdr-safe cand))
+              (push (consult--make-overlay (+ (point) (car match))
+                                           (+ (point) (cdr match))
+                                           'face 'consult-preview-match
+                                           'window (selected-window)
+                                           'priority 2)
+                    overlays))
+            (push (lambda () (mapc #'delete-overlay overlays)) restore))
           (run-hooks 'consult-after-jump-hook))))))
 
 (defun consult--jump-state ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]