Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Completely hide the :PROPERTIES: drawer in org-mode

Tags:

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.]

like image 454
lawlist Avatar asked Jul 04 '13 21:07

lawlist


1 Answers

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

like image 124
30 revs Avatar answered Sep 28 '22 22:09

30 revs