branch: elpa/dslide commit cf56e034ff5a4961b896ee2f24cfa8694e372812 Author: Psionik K <73710933+psioni...@users.noreply.github.com> Commit: Psionik K <73710933+psioni...@users.noreply.github.com>
Overlays for selective display of contents A list of overlays will be used because future features will require several overlays to properly hide some content and progressively reveal it upon navigation. --- org-tree-slide.el | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/org-tree-slide.el b/org-tree-slide.el index bece5b00b6..a8ce1b2e1b 100644 --- a/org-tree-slide.el +++ b/org-tree-slide.el @@ -266,6 +266,9 @@ If you want to show anything, just specify nil." (defvar-local org-tree-slide-heading-level-3-cookie nil) (defvar-local org-tree-slide-heading-level-4-cookie nil) +(defvar-local org-tree-slide--content-overlays nil + "Overlays used to hide or change contents display.") + (defvar org-tree-slide-mode nil) (defvar org-tree-slide-play-hook nil "A hook run when `org-tree-slide--play' is evaluated to start the slideshow.") @@ -648,6 +651,7 @@ This is displayed by default if `org-tree-slide-modeline-display' is nil.") (org-cycle '(64))) (t nil))) (org-tree-slide--hide-slide-header) + (org-tree-slide--delete-content-overlays) (when org-timer-start-time (org-timer-stop)) (when org-tree-slide-heading-emphasis @@ -664,6 +668,7 @@ This is displayed by default if `org-tree-slide-modeline-display' is nil.") (format " %s" (org-tree-slide--count-slide (point)))) (setq org-tree-slide--previous-line (org-tree-slide--line-number-at-pos))) (goto-char (line-beginning-position)) + (org-tree-slide--delete-content-overlays) (unless (org-tree-slide--before-first-heading-p) (outline-hide-subtree) ; support CONTENT (subtrees are shown) (org-fold-show-entry) @@ -673,7 +678,16 @@ This is displayed by default if `org-tree-slide-modeline-display' is nil.") (org-tree-slide--show-subtree) (outline-show-children)) ;; (org-cycle-hide-drawers 'all) ; disabled due to performance reduction - (org-narrow-to-subtree)) + (org-narrow-to-subtree) + (when-let* ((elem (org-element-at-point-no-context)) + (beg (save-excursion + (when (org-goto-first-child) + (let ((buffer-invisibility-spec nil)) + (1- (line-beginning-position)))))) + (end (org-element-contents-end elem)) + (ov (make-overlay beg end))) + (overlay-put ov 'invisible t) + (push ov org-tree-slide--content-overlays))) (when org-tree-slide-slide-in-effect (org-tree-slide--slide-in org-tree-slide-slide-in-blank-lines)) (when org-tree-slide-header @@ -923,6 +937,11 @@ Some number of BLANK-LINES will be shown below the header." (org-tree-slide--set-slide-header (or lines org-tree-slide-content-margin-top))) +(defun org-tree-slide--delete-content-overlays () + "Delete content overlays." + (while org-tree-slide--content-overlays + (delete-overlay (pop org-tree-slide--content-overlays)))) + (defun org-tree-slide--hide-slide-header () "Hide header." (when org-tree-slide--header-overlay