32

Could someone please give me some assistance to completely hide the :PROPERTIES: drawer, including the line that says :PROPERTIES:.

* TASKS (with deadines) ** Next Action [#A] Ask the geniuses how to do this. :lawlist: DEADLINE: <2013-07-04 Thu > :PROPERTIES: :ToodledoID: 330686790 :ToodledoFolder: TASKS :Hash: afa88f17317bbe2ce0ce661333cdcfb4 :END: This line is for notes, which appears underneath the properties drawer. * UNDATED (without deadlines) ** Someday [#A] Close but no cigar -- keep trying. :lawlist: :PROPERTIES: :ToodledoID: 330686680 :ToodledoFolder: TASKS :Hash: eb0b8d360b5b1453dd66ed0c5698e135 :END: This line is for notes, which appears underneath the properties drawer. 

I didn't see this feature by Googling, so I'm guessing that some special lines of code will be needed to make this feature request a reality. [In other words, I don't think it is a Super User question because this will need to be invented with some special code.]

4 Answers 4

34

The following answer completely hides everything from :PROPERTIES: through :END:. It can be tested by evaluating (org-cycle-hide-drawers 'children), or (org-cycle-hide-drawers 'all), or in conjunction with the other functions relating to cycling the outline views. The standard functions to unfold that are included within the org-mode family all work -- e.g., show-all; org-show-subtree; etc.

(require 'org) (defun org-cycle-hide-drawers (state) "Re-hide all drawers after a visibility state change." (when (and (derived-mode-p 'org-mode) (not (memq state '(overview folded contents)))) (save-excursion (let* ((globalp (memq state '(contents all))) (beg (if globalp (point-min) (point))) (end (if globalp (point-max) (if (eq state 'children) (save-excursion (outline-next-heading) (point)) (org-end-of-subtree t))))) (goto-char beg) (while (re-search-forward org-drawer-regexp end t) (save-excursion (beginning-of-line 1) (when (looking-at org-drawer-regexp) (let* ((start (1- (match-beginning 0))) (limit (save-excursion (outline-next-heading) (point))) (msg (format (concat "org-cycle-hide-drawers: " "`:END:`" " line missing at position %s") (1+ start)))) (if (re-search-forward "^[ \t]*:END:" limit t) (outline-flag-region start (point-at-eol) t) (user-error msg)))))))))) 

For anyone who interested in tab cycling between all of the various views (including revealing what is inside the :PROPERTIES: drawer, there is an easy modification to org-cycle-internal-local by adding an additional condition before (t ;; Default action: hide the subtree. . . .

((eq org-cycle-subtree-status 'subtree) (org-show-subtree) (org-unlogged-message "ALL") (setq org-cycle-subtree-status 'all)) 

Screenshot -- Drawers Hidden:

https://www.lawlist.com/images/org_mode_properties_a.png


Screenshot -- Drawers Visible:

https://www.lawlist.com/images/org_mode_properties_b.png

Sign up to request clarification or add additional context in comments.

15 Comments

Why not send that upstream by the way?
@apc -- The answer contemplates that the user will replace the old built-in function with the new function in the answer above. By using the same name as the built-in function, the new function effectively takes the place of the old built-in function. Just in case the old built-in function has not yet been loaded/read, the first line of this answer above forces the entire library to load so that the new function can take the place of the old built-in function.
Thanks for the great feature. Regarding the org-cycle-internal-local code at the end, placing it at the beginning of the cond block instead of near the end, has given me better results. Then, the Tab key cycles between 1)fully folded, 2) text + children, 3) 2 + children text, 4) 3 + drawers
@Inspired_Blue -- it sounds like you need more assistance than can be provided in comments to an answer relating to org-cycle-hide-drawers (with a side-comment relating to a modification of org-cycle-internal-local). This answer was written in 2017 (approximately 5 years ago), and it is entirely possible that the code of org-cycle-internal-local has changed during that time period. It may behoove you to launch a new question on emacs.stackexchange.com and you can receive dedicated attention to your particular use-case, taking into consideration a current version of org-mode.
For the anyone following the discussions until here: I am cross linking here a follow up question I launched based on the above discussions! @lawlist: Thanks for your inputs!
|
6

as of 2023, there's a emacs package org-tidy that helps with this

https://github.com/jxq0/org-tidy

(use-package org-tidy :ensure t :config (add-hook 'org-mode-hook #'org-tidy-mode)) 

1 Comment

This is very good compare to other solutions thanks for it!!!
-1

That's simply not possible right now, at least not without (a lot of?) extra coding...

Problem is: how would you unhide it? Would you see "..." alone?

4 Comments

There must be a simple solution, like re-search-forward with a save excursion from top to bottom of the buffer for every line beginning with :PROPERTIES: through to and including the word :END: and hit the code fold button, so that it folds up underneath the previous line. Then the unfold everything button to display everything, and from there back to cycling.
The icing on the cake would be an upside down triangle at the end of the first line to indicate a code fold. :)
A full-fledged solution now exists -- :)
@american-ninja-warrior -- sorry for the delay in responding. I see that at least one other person had the same inquiry as you (based upon the upvote to your question). The accepted answer in this thread contains a full-fledged solution as far as I am aware -- I have been using that solution since about the year 2013 to the present.
-2

This allows you to toggle the properties of the header you're currently in.

(defun org-toggle-properties () ;; toggle visibility of properties in current header if it exists (save-excursion (when (not (org-at-heading-p)) (org-previous-visible-heading 1)) (when (org-header-property-p) (let* ((a (re-search-forward "\n\\:" nil t))) (if (outline-invisible-p (point)) (outline-show-entry) (org-cycle-hide-drawers 'all)))))) 

1 Comment

The call of the question seeks a means to completely hide the :PROPERTIES: drawer -- including the line that says :PROPERTIES:. In addition, the function org-header-property-p does not exist in the most recent version of org-mode available by cloning as of 09/23/2018: git clone https://code.orgmode.org/bzg/org-mode.git. That function does not exist in a few of the prior versions of org-mode that I also grepped. As I am unable to test the function due to missing components, I do not know if there are any other issues. Also, Google cannot find org-header-property-p.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.