From 2312e9280e5267cdcb72406a24068d6ec0a3696e Mon Sep 17 00:00:00 2001 Message-Id: <2312e9280e5267cdcb72406a24068d6ec0a3696e.1653635423.git.yantar92@gmail.com> From: Ihor Radchenko Date: Fri, 27 May 2022 15:09:16 +0800 Subject: [PATCH] org-cycle.el: New custom setting `org-cycle-hide-drawer-startup' * lisp/org-cycle.el (org-cycle-hide-drawer-startup): * lisp/org-cycle.el (org-cycle-set-startup-visibility): Add new customization to control initial folding state of the drawers. * lisp/org.el (org-startup-options): Provide #+STARTUP option for the new setting. Fixes https://list.orgmode.org/m235gww8wg.fsf@ntnu.no/T/#u --- etc/ORG-NEWS | 22 ++++++++++++++++++++++ lisp/org-cycle.el | 12 +++++++++++- lisp/org.el | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 35af94f92..e1e4beaf0 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -271,6 +271,28 @@ The new variable name is =org-plantuml-args=. It now applies to both jar PlantUML file and executable. ** Miscellaneous +*** A new custom setting =org-hide-drawer-startup= to control initial folding state of drawers + +Previously, all the drawers were always folded when opening an Org +file. This only had an effect on the drawers outside folded +headlines. The drawers inside folded headlines were re-folded because +=org-cycle-hide-drawers= was present inside =org-cycle-hook=. + +With the new folding backend, running =org-cycle-hide-drawers= is no +longer needed if all the drawers are truly folded on startup: [[*Folding +state of the drawers is now preserved when cycling headline +visibility]]. However, this has an unwanted effect when a user does +not want the drawers to be folded (see [[id:1d0e0874-8771-40e4-97ac-6746a0e97438][this bug report]]). + +The new custom setting gives more control over initial folding state +of the drawers. When set to =nil= (default is =t=), the drawers are +not folded on startup. + +The folding state can also be controlled on per-file basis using +=STARTUP= keyword: + +: #+startup: hidedrawers +: #+startup: nohidedrawers *** Styles are customizable in ~biblatex~ citation processor diff --git a/lisp/org-cycle.el b/lisp/org-cycle.el index b15ead788..fb7ff4749 100644 --- a/lisp/org-cycle.el +++ b/lisp/org-cycle.el @@ -119,6 +119,16 @@ (defcustom org-cycle-hide-block-startup nil :group 'org-cycle :type 'boolean) +(defcustom org-cycle-hide-drawer-startup t + "Non-nil means entering Org mode will fold all drawers. +This can also be set in on a per-file basis with + +#+STARTUP: hidedrawers +#+STARTUP: nohidedrawers" + :group 'org-startup + :group 'org-cycle + :type 'boolean) + (defcustom org-cycle-global-at-bob nil "Cycle globally if cursor is at beginning of buffer and not at a headline. @@ -603,7 +613,7 @@ (defun org-cycle-set-startup-visibility () (when org-cycle-hide-block-startup (org-fold-hide-block-all)) (org-cycle-set-visibility-according-to-property) (org-cycle-hide-archived-subtrees 'all) - (org-cycle-hide-drawers 'all) + (when org-cycle-hide-drawer-startup (org-cycle-hide-drawers 'all)) (org-cycle-show-empty-lines t))) (defun org-cycle-set-visibility-according-to-property () diff --git a/lisp/org.el b/lisp/org.el index 0eb819f23..be9900d68 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -3984,6 +3984,8 @@ (defconst org-startup-options ("noptag" org-tag-persistent-alist nil) ("hideblocks" org-hide-block-startup t) ("nohideblocks" org-hide-block-startup nil) + ("hidedrawers" org-hide-drawer-startup t) + ("nohidedrawers" org-hide-drawer-startup nil) ("beamer" org-startup-with-beamer-mode t) ("entitiespretty" org-pretty-entities t) ("entitiesplain" org-pretty-entities nil)) -- 2.35.1