From 3dabae1cf482f2008b282411468e4b810ec2e19c Mon Sep 17 00:00:00 2001 From: Ondrej Grover Date: Sun, 12 Apr 2015 13:43:31 +0200 Subject: [PATCH] org.texi: Extend export hook example with ignore_heading tag support * doc/org.texi (Advanced configuration): Extend the pre-processing export hook example to support similar (but simpler and more general) functionality like that provided by the ignoreheading tag in the Beamer export backend. This is a commonly requested snippet and the Internet is full of much worse and broken solutions, so the manual should show the recommended solution. TINYCHANGE --- doc/org.texi | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index c400f77..5009361 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -13806,29 +13806,41 @@ with @code{M-x org-html-convert-region-to-html RET}. @vindex org-export-before-processing-hook @vindex org-export-before-parsing-hook -Two hooks are run during the first steps of the export process. The first -one, @code{org-export-before-processing-hook} is called before expanding -macros, Babel code and include keywords in the buffer. The second one, -@code{org-export-before-parsing-hook}, as its name suggests, happens just -before parsing the buffer. Their main use is for heavy duties, that is -duties involving structural modifications of the document. For example, one -may want to remove every headline in the buffer during export. The following +Two hooks are run during the first steps of the export process. The +first one, @code{org-export-before-processing-hook} is called before +expanding macros, Babel code and include keywords in the buffer. The +second one, @code{org-export-before-parsing-hook}, as its name suggests, +happens just before parsing the buffer. Their main use is for heavy +duties, that is duties involving structural modifications of the +document. For example, one may want to remove every headline with the +@samp{ignore_heading} tag (excluding those with the @samp{noexport} tag) +in the buffer and promote their children during export. The following code can achieve this: @lisp @group -(defun my-headline-removal (backend) - "Remove all headlines in the current buffer. +(defun ignored-headlines-removal (backend) + "Remove all headlines with the ignore_headline tag in the current buffer +and promote all child headlines underneath them. BACKEND is the export back-end being used, as a symbol." (org-map-entries - (lambda () (delete-region (point) (progn (forward-line) (point)))))) + (lambda () (progn (org-map-tree (lambda () (when (> (outline-level) 1) + (org-promote)))) + (delete-region (point) (point-at-eol)))) + "+ignore_heading-noexport")) -(add-hook 'org-export-before-parsing-hook 'my-headline-removal) +(add-hook 'org-export-before-parsing-hook 'ignored-headlines-removal) @end group @end lisp -Note that functions used in these hooks require a mandatory argument, -a symbol representing the back-end used. +The second argument to the @code{org-map-entries} function is an +agenda-style match query string (@pxref{Matching tags and properties}). +Note the underscore in the tag, it is not recommended to use the +@samp{ignoreheading} tag because the Beamer export backend treates it in +a similar, yet more complicated way. It may also be useful to exclude +the @samp{ignore_heading} tag from inheritance (@pxref{Tag +inheritance}). Also note that functions used in these hooks require a +mandatory argument, a symbol representing the back-end used. @subheading Filters -- 2.1.4