Search code examples
emacselisporg-mode

Secret structure in org-mode?


I'm wondering I if there's any functionality in org-mode that can make me able to operate with secret structure, that is: structure that I can see when I'm editing but that is treated as if it wasn't there when exporting. It's mainly importing when I export to ascii.

Example:

I would like this in the .org file:

* Normal heading
** Secret heading 1
Some text 1
** Secret heading 2
Some text 2
** Secret heading 3
Some text 3

To be exported to this:

Normal heading
--------------
Some text 1
Some text 2
Some text 3

What makes the headings secret can be anything like a tag, a property or something else but the secret headings should be foldable.

Edit:

Found this solution (from here) (I'm using org-mode 7.9.3 f. It doesn't work. Headlines with the :ignoreheading: tag are still displayed:

;; backend aware export preprocess hook
(defun sa-org-export-preprocess-hook ()
  "My backend aware export preprocess hook."
  (save-excursion
    (when (eq org-export-current-backend 'latex)
      ;; ignoreheading tag for bibliographies and appendices
      (let* ((tag "ignoreheading"))
        (org-map-entries (lambda ()
                           (delete-region (point-at-bol) (point-at-eol)))
                         (concat ":" tag ":"))))))

(add-hook 'org-export-preprocess-hook 'sa-org-export-preprocess-hook)

Solution

  • I upgraded to org-mode 8.2.5h and with that this works:

    (defun sa-ignore-headline (contents backend info)
      "Ignore headlines with tag `ignoreheading'."
      (when (and (org-export-derived-backend-p backend 'latex 'html 'ascii)
              (string-match "\\`.*ignoreheading.*\n"
                    (downcase contents)))
        (replace-match "" nil nil contents)))
    
    (add-to-list 'org-export-filter-headline-functions 'sa-ignore-headline)
    

    But only if you don't have the options: #+OPTIONS: tags:nil. Guess it's sort of obvious that tags shouldn't be filtered away before a filtering that relies on a certain tag is invoked - but that bugged me for quite some time.

    Note: when exporting to ascii the headline underlining will remain without the headline, so you need this setting too:

    (setq org-ascii-underline (quote ((ascii) (latin1) (utf-8))))
    

    ... to remove headlines all together.