Explorar o código

Optimize hiding all drawers in a buffer

* lisp/org.el (org-cycle-hide-drawers): Make sure each drawer is only
  flagged once.
Nicolas Goaziou %!s(int64=11) %!d(string=hai) anos
pai
achega
e8bafdd04f
Modificáronse 1 ficheiros con 7 adicións e 1 borrados
  1. 7 1
      lisp/org.el

+ 7 - 1
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