[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [PATCH]Extend export hook example for removing headlines with ta
From: |
Rasmus |
Subject: |
Re: [O] [PATCH]Extend export hook example for removing headlines with tag ignore_heading |
Date: |
Mon, 13 Apr 2015 18:09:54 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
Hi Ondřej,
Ondřej Grover <address@hidden> writes:
> I've revised my patch to accommodate your suggestions and attached the new
> version. Now it excludes noexport tagged headlines from removal and
> promotes child headlines.
Thanks. Your snippet doesn't work on these two examples.
Can't promote from level 1:
* h1 :noexport:
no export
* h2 :ignore_heading:
export
"export" becomes part of the noexport heading.
* h0
** h1
:noexport:
no export
** h2
:ignore_heading:
export
> I'm trying to point out that something like this is often needed and a
> definitive solution should be listed somewhere, preferably in the manual.
> Otherwise someone looking for a solution to this common problem will end up
> finding only half-baked, possibly broken examples.
If this is often needed feature, ox.el and potentially backends should be
patched to support it. I think it would be great if ox did support it.
Of course, Nicolas would have the final say in such a matter.
But I'm not sure so difficult hacks should be promoted in the manual.
Improving the example is fine, though.
> From 9c75f9796a0fe4d270b72b503b318ddb6e4e3954 Mon Sep 17 00:00:00 2001
> From: Ondrej Grover <address@hidden>
> 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 | 37 ++++++++++++++++++++++++-------------
> 1 file changed, 24 insertions(+), 13 deletions(-)
>
> diff --git a/doc/org.texi b/doc/org.texi
> index c400f77..cc75a79 100644
> --- a/doc/org.texi
> +++ b/doc/org.texi
> @@ -13806,29 +13806,40 @@ with @code{M-x org-html-convert-region-to-html RET}.
>
> @vindex org-export-before-processing-hook
> @vindex org-export-before-parsing-hook
Why do you delete these indexes?
> -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,
> address@hidden, 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
, (I think)
> +expanding macros, Babel code and include keywords in the buffer. The
> +second one, @code{org-export-before-parsing-hook}, as its name suggests,
^^^^^^^^^^^^^^^^^^^^^^^
I'd just kill that one.
> +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
> address@hidden 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 '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
Maybe: The second argument to @code{org-map-entries} 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
> address@hidden 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.
^^^^^^^^^
This function is fine as well: (λ (&optional ignored) (· ⋯)).
It's great with better documentation for how to use org-map-entries! But
the example is not very robust. I think another, less complicated example
would be better.
Also, perhaps it would make sense to also show how to use org-element-map
to solve the same problem. Of course that's a separate patch.
Thanks,
Rasmus
--
I hear there's rumors on the, uh, Internets. . .