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

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

[elpa] externals/org 793cdbea68: fixup! org-fold: Honor :extend face pro


From: ELPA Syncer
Subject: [elpa] externals/org 793cdbea68: fixup! org-fold: Honor :extend face property in folded headings/blocks/drawers
Date: Mon, 22 Jan 2024 12:58:35 -0500 (EST)

branch: externals/org
commit 793cdbea68ae9f6eb4270315df6ff3419c3d8c20
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>

    fixup! org-fold: Honor :extend face property in folded 
headings/blocks/drawers
---
 lisp/org-fold-core.el | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/lisp/org-fold-core.el b/lisp/org-fold-core.el
index 4619b48c41..80d9e8a5c7 100644
--- a/lisp/org-fold-core.el
+++ b/lisp/org-fold-core.el
@@ -1044,7 +1044,15 @@ If SPEC-OR-ALIAS is omitted and FLAG is nil, unfold 
everything in the region."
          ;; unfolding
          (dolist (region (org-fold-core-get-regions :from from :to to :specs 
spec))
            (when (equal ?\n (char-after (cadr region)))
-             (font-lock-flush (cadr region) (1+ (cadr region))))))
+             (if-let ((specs (remq spec (org-fold-core-get-folding-spec 'all 
(1- (cadr region))))))
+                 ;; There are multiple folds, re-apply 'face according
+                 ;; to the folds that will stay after unfolding SPEC.
+                 (put-text-property
+                  (cadr region) (1+ (cadr region)) 'face
+                  (get-text-property
+                   (car (org-fold-core-get-region-at-point (car specs) (1- 
(cadr region))))
+                   'face))
+               (font-lock-flush (cadr region) (1+ (cadr region)))))))
        (when (eq org-fold-core-style 'overlays)
          (if org-fold-core--keep-overlays
              (mapc
@@ -1104,7 +1112,14 @@ If SPEC-OR-ALIAS is omitted and FLAG is nil, unfold 
everything in the region."
                          (setq pos next))
                      (setq pos (next-single-char-property-change pos 
'invisible nil to)))))))
            (when (eq org-fold-core-style 'text-properties)
-            (remove-text-properties from to (list 
(org-fold-core--property-symbol-get-create spec) nil)))))))))
+            (remove-text-properties from to (list 
(org-fold-core--property-symbol-get-create spec) nil)))
+           ;; FROM..TO may represent only a part of the fold.  Transfer
+           ;; 'face from the new char before fold, if there is any.
+           (when-let ((trailing-fold (org-fold-core-get-region-at-point spec 
to)))
+             (when (equal ?\n (char-after (cdr trailing-fold)))
+               (put-text-property
+                (cdr trailing-fold) (1+ (cdr trailing-fold))
+                'face (get-text-property to 'face))))))))))
 
 (cl-defmacro org-fold-core-regions (regions &key override clean-markers 
relative)
   "Fold every region in REGIONS list in current buffer.



reply via email to

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