summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2013-11-22 22:11:44 +0100
committerNicolas Goaziou <n.goaziou@gmail.com>2013-11-23 09:34:48 +0100
commite8bafdd04f21784e189a4da647795f660a4ef1ce (patch)
treeb30c447bcc3e1ed8f18c6ccfd4b0e48ee9d51be1
parent402c310f004218322cfd0287a125837508920dcc (diff)
downloadorg-mode-e8bafdd04f21784e189a4da647795f660a4ef1ce.tar.gz
Optimize hiding all drawers in a buffer
* lisp/org.el (org-cycle-hide-drawers): Make sure each drawer is only flagged once.
-rw-r--r--lisp/org.el8
1 files changed, 7 insertions, 1 deletions
diff --git a/lisp/org.el b/lisp/org.el
index f9785ae..bb47808 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7101,7 +7101,13 @@ specifying which drawers should not be hidden."
(goto-char beg)
(while (re-search-forward org-drawer-regexp end t)
(unless (member-ignore-case (match-string 1) exceptions)
- (org-flag-drawer t)))))))
+ (let ((drawer (org-element-at-point)))
+ (when (memq (org-element-type drawer) '(drawer property-drawer))
+ (org-flag-drawer t 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-inline-tasks (state)
"Re-hide inline tasks when switching to 'contents or 'children