[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."