emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: [PATCH]Extend export hook example for removing headlines with tag ignore_heading
Date: Mon, 13 Apr 2015 18:09:54 +0200	[thread overview]
Message-ID: <87twwkj9gt.fsf@gmx.us> (raw)
In-Reply-To: CAOyjJOJOM9=khtBCoXwy2DCs2SSQR4u0vYP8p325s1n78i4uPQ@mail.gmail.com

Hi Ondřej,

Ondřej Grover <ondrej.grover@gmail.com> 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 <ondrej.grover@gmail.com>
> 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,
> -@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
                                                      ,  (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
> +@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 '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
> +@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.
   ^^^^^^^^^

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

  reply	other threads:[~2015-04-13 16:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-13 15:23 [PATCH]Extend export hook example for removing headlines with tag ignore_heading Ondřej Grover
2015-04-13 16:09 ` Rasmus [this message]
2015-04-13 18:13   ` Ondřej Grover
2015-04-13 19:42     ` Nicolas Goaziou
2015-04-13 22:40       ` Suvayu Ali
2015-04-13 19:59     ` Rasmus
  -- strict thread matches above, loose matches on Subject: below --
2015-04-12 11:59 Ondřej Grover

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87twwkj9gt.fsf@gmx.us \
    --to=rasmus@gmx.us \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).