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

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

[elpa] externals/consult 633b34244f: Revert "More efficient invisible re


From: ELPA Syncer
Subject: [elpa] externals/consult 633b34244f: Revert "More efficient invisible region restoration in Org"
Date: Thu, 1 Dec 2022 01:57:26 -0500 (EST)

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

    Revert "More efficient invisible region restoration in Org"
    
    This reverts commit 42c485b721ca2e1e3919850aa39b06da789e7dfa.
---
 consult.el | 63 ++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 30 insertions(+), 33 deletions(-)

diff --git a/consult.el b/consult.el
index cace3ac556..00a6ec06f3 100644
--- a/consult.el
+++ b/consult.el
@@ -1363,38 +1363,36 @@ See `isearch-open-necessary-overlays' and 
`isearch-open-overlay-temporary'."
         (when (invisible-p (overlay-get ov 'invisible))
           (funcall fun ov))))))
 
-(defun consult--invisible-opener ()
-  "Create function to temporarily open overlays which hide the current line.
+(defun consult--invisible-open-temporarily ()
+  "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
+      ;; TODO The provided Org API `org-fold-show-set-visibility' cannot be 
used
+      ;; efficiently. We obtain all regions in the whole buffer in order to
+      ;; restore them. A better show API would return all the applied
+      ;; modifications such that we can restore the ones which got modified.
       (let ((regions (delq nil (org-fold-core-get-regions
-                                :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))))
+                                :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))))))
     (let (restore)
-      (lambda (open)
-        (mapc #'funcall restore)
-        (setq restore nil)
-        (dolist (ov (let ((inhibit-field-text-motion t))
-                      (and open
-                           (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))))))))
+      (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)))
 
 (defun consult--jump-1 (pos)
   "Go to POS and recenter."
@@ -1435,14 +1433,13 @@ 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))
-        (open-invisible (consult--invisible-opener))
-        overlays)
+        overlays invisible)
     (set-marker-insertion-type saved-max t) ;; Grow when text is inserted
     (lambda (action cand)
       (when (eq action 'preview)
-        (funcall open-invisible nil)
+        (mapc #'funcall invisible)
         (mapc #'delete-overlay overlays)
-        (setq overlays nil)
+        (setq invisible nil overlays nil)
         (if (not cand)
             ;; If position cannot be previewed, return to saved position
             (let ((saved-buffer (marker-buffer saved-pos)))
@@ -1453,8 +1450,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))
-          (funcall open-invisible 'open)
-          (setq overlays
+          (setq invisible (consult--invisible-open-temporarily)
+                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]