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

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

[elpa] externals/consult 68c1c07a9b 1/2: Org 9.6: Support new org-fold A


From: ELPA Syncer
Subject: [elpa] externals/consult 68c1c07a9b 1/2: Org 9.6: Support new org-fold API (Fix #563)
Date: Wed, 30 Nov 2022 04:57:26 -0500 (EST)

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

    Org 9.6: Support new org-fold API (Fix #563)
---
 CHANGELOG.org |  1 +
 consult.el    | 52 ++++++++++++++++++++++++++++++++++------------------
 2 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/CHANGELOG.org b/CHANGELOG.org
index 5de0738ced..9b1eb8096a 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -13,6 +13,7 @@
 - Add variable =consult-yank-rotate=, =consult-yank-from-kill-ring= rotates 
kill ring
 - Emacs 29: =consult-register= supports =buffer= register type
 - Emacs 29: Support =outline-search-function=
+- Org 9.6: Support new =org-fold-core= API (both overlays and text-properties)
 
 * Version 0.20 (2022-10-16)
 
diff --git a/consult.el b/consult.el
index 0959f31de7..3f44b91f1e 100644
--- a/consult.el
+++ b/consult.el
@@ -1348,31 +1348,47 @@ ORIG is the original function, HOOKS the arguments."
           (kill-buffer buf))
         (setq temporary-buffers nil)))))
 
+(declare-function org-fold-core-region "org-fold-core")
+(declare-function org-fold-core-get-regions "org-fold-core")
+
 (defun consult--invisible-open-permanently ()
   "Open overlays which hide the current line.
 See `isearch-open-necessary-overlays' and `isearch-open-overlay-temporary'."
-  (dolist (ov (let ((inhibit-field-text-motion t))
-                (overlays-in (line-beginning-position) (line-end-position))))
-    (when-let (fun (overlay-get ov 'isearch-open-invisible))
-      (when (invisible-p (overlay-get ov 'invisible))
-        (funcall fun ov)))))
+  (if (and (derived-mode-p #'org-mode) (fboundp 'org-fold-show-set-visibility))
+      ;; New Org 9.6 fold-core API
+      (org-fold-show-set-visibility 'local)
+    (dolist (ov (let ((inhibit-field-text-motion t))
+                  (overlays-in (line-beginning-position) (line-end-position))))
+      (when-let (fun (overlay-get ov 'isearch-open-invisible))
+        (when (invisible-p (overlay-get ov 'invisible))
+          (funcall fun ov))))))
 
 (defun consult--invisible-open-temporarily ()
   "Temporarily open overlays which hide the current line.
 See `isearch-open-necessary-overlays' and `isearch-open-overlay-temporary'."
-  (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))
+  (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))))))
+    (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)))
 
 (defun consult--jump-1 (pos)
   "Go to POS and recenter."



reply via email to

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