summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2020-05-09 23:41:39 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2020-05-09 23:41:39 +0200
commitc744d3cf4c0be13b628aa15a235f0b4726372c13 (patch)
treee825d31382ce8a77a9b53b7419af6adbdd5b905d
parentb0fb4599c7ed04b04ea613c301cf0815426e7bef (diff)
downloadorg-mode-c744d3cf4c0be13b628aa15a235f0b4726372c13.tar.gz
Do not fold drawers hidden inside folded blocks
* lisp/org.el (org-hide-drawer-all): (org-cycle-hide-property-drawers): Do not fold invisible drawers, ignoring the type of invisibility spec.
-rw-r--r--lisp/org.el23
1 files changed, 13 insertions, 10 deletions
diff --git a/lisp/org.el b/lisp/org.el
index 82ac5f4..e48bb60 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -6122,13 +6122,16 @@ Return a non-nil value when toggling is successful."
(save-excursion
(goto-char (point-min))
(while (re-search-forward org-drawer-regexp nil t)
- (let ((drawer (org-element-at-point)))
- (when (memq (org-element-type drawer) '(drawer property-drawer))
- (org-hide-drawer-toggle t nil drawer)
- ;; Make sure to skip drawer entirely or we might flag it
- ;; another time when matching its ending line with
- ;; `org-drawer-regexp'.
- (goto-char (org-element-property :end drawer)))))))
+ (pcase (get-char-property-and-overlay (point) 'invisible)
+ (`(_ . ,o) (goto-char (overlay-end o)))
+ (_
+ (let ((drawer (org-element-at-point)))
+ (when (memq (org-element-type drawer) '(drawer property-drawer))
+ (org-hide-drawer-toggle t nil drawer)
+ ;; Make sure to skip drawer entirely or we might flag it
+ ;; another time when matching its ending line with
+ ;; `org-drawer-regexp'.
+ (goto-char (org-element-property :end drawer)))))))))
(defun org-cycle-hide-property-drawers (state)
"Re-hide all drawers after a visibility state change.
@@ -6142,10 +6145,10 @@ STATE should be one of the symbols listed in the docstring of
((eq state 'children) (org-entry-end-position))
(t (save-excursion (org-end-of-subtree t))))))
(org-with-point-at beg
- (while (re-search-forward org-property-start-re (max end (point)) t)
- (pcase (get-char-property-and-overlay (line-end-position) 'invisible)
+ (while (re-search-forward org-property-start-re end t)
+ (pcase (get-char-property-and-overlay (point) 'invisible)
;; Do not fold already folded drawers.
- (`(outline . ,o) (goto-char (overlay-end o)))
+ (`(_ . ,o) (goto-char (overlay-end o)))
(_
(let ((start (match-end 0)))
(when (org-at-property-drawer-p)