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

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

[elpa] externals/consult 42c485b721 2/2: More efficient invisible region


From: ELPA Syncer
Subject: [elpa] externals/consult 42c485b721 2/2: More efficient invisible region restoration in Org
Date: Wed, 30 Nov 2022 04:57:26 -0500 (EST)

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

    More efficient invisible region restoration in Org
---
 consult.el | 59 +++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 33 insertions(+), 26 deletions(-)

diff --git a/consult.el b/consult.el
index 3f44b91f1e..ac66e36ffb 100644
--- a/consult.el
+++ b/consult.el
@@ -1363,32 +1363,38 @@ See `isearch-open-necessary-overlays' and 
`isearch-open-overlay-temporary'."
         (when (invisible-p (overlay-get ov 'invisible))
           (funcall fun ov))))))
 
-(defun consult--invisible-open-temporarily ()
-  "Temporarily open overlays which hide the current line.
+(defun consult--invisible-opener ()
+  "Create function to temporarily open overlays which hide the current line.
 See `isearch-open-necessary-overlays' and `isearch-open-overlay-temporary'."
   (if (and (derived-mode-p #'org-mode) (fboundp 'org-fold-show-set-visibility))
       ;; New Org 9.6 fold-core API
       (let ((regions (delq nil (org-fold-core-get-regions
-                                :with-markers t :from (point-min) :to 
(point-max)))))
-        (org-fold-show-set-visibility 'local)
-        (list (lambda ()
-                (pcase-dolist (`(,beg ,end ,spec) regions)
-                  (org-fold-core-region beg end t spec)
-                  (when (markerp beg) (set-marker beg nil))
-                  (when (markerp end) (set-marker end nil))))))
+                                :with-markers t :from (point-min) :to 
(point-max))))
+            restore)
+        (lambda (open)
+          (when restore
+            (pcase-dolist (`(,beg ,end ,spec) regions)
+              (org-fold-core-region beg end t spec))
+            (setq restore nil))
+          (when open
+            (org-fold-show-set-visibility 'local)
+            (setq restore t))))
     (let (restore)
-      (dolist (ov (let ((inhibit-field-text-motion t))
-                    (overlays-in (line-beginning-position) 
(line-end-position))))
-        (let ((inv (overlay-get ov 'invisible)))
-          (when (and (invisible-p inv) (overlay-get ov 
'isearch-open-invisible))
-            (push (if-let (fun (overlay-get ov 
'isearch-open-invisible-temporary))
-                      (progn
-                        (funcall fun ov nil)
-                        (lambda () (funcall fun ov t)))
-                    (overlay-put ov 'invisible nil)
-                    (lambda () (overlay-put ov 'invisible inv)))
-                  restore))))
-      restore)))
+      (lambda (open)
+        (mapc #'funcall restore)
+        (setq restore nil)
+        (when open
+          (dolist (ov (let ((inhibit-field-text-motion t))
+                        (overlays-in (line-beginning-position) 
(line-end-position))))
+            (let ((inv (overlay-get ov 'invisible)))
+              (when (and (invisible-p inv) (overlay-get ov 
'isearch-open-invisible))
+                (push (if-let (fun (overlay-get ov 
'isearch-open-invisible-temporary))
+                          (progn
+                            (funcall fun ov nil)
+                            (lambda () (funcall fun ov t)))
+                        (overlay-put ov 'invisible nil)
+                        (lambda () (overlay-put ov 'invisible inv)))
+                      restore)))))))))
 
 (defun consult--jump-1 (pos)
   "Go to POS and recenter."
@@ -1429,13 +1435,14 @@ 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 invisible)
+        (open-invisible (consult--invisible-opener))
+        overlays)
     (set-marker-insertion-type saved-max t) ;; Grow when text is inserted
     (lambda (action cand)
       (when (eq action 'preview)
-        (mapc #'funcall invisible)
+        (funcall open-invisible nil)
         (mapc #'delete-overlay overlays)
-        (setq invisible nil overlays nil)
+        (setq overlays nil)
         (if (not cand)
             ;; If position cannot be previewed, return to saved position
             (let ((saved-buffer (marker-buffer saved-pos)))
@@ -1446,8 +1453,8 @@ The function can be used as the `:state' argument of 
`consult--read'."
                 (goto-char saved-pos)))
           ;; Handle positions with overlay information
           (consult--jump-1 (or (car-safe cand) cand))
-          (setq invisible (consult--invisible-open-temporarily)
-                overlays
+          (funcall open-invisible 'open)
+          (setq overlays
                 (list (save-excursion
                         (let ((vbeg (progn (beginning-of-visual-line) (point)))
                               (vend (progn (end-of-visual-line) (point)))



reply via email to

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