emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Get the text of a node


From: Jeff Filipovits
Subject: Re: [O] Get the text of a node
Date: Wed, 23 Oct 2019 17:01:26 +0000

Sometimes giving a bad answer inspires someone else to give a better one, so here goes:

It seems like the best way to get the contents programatically is using org-dp (https://github.com/tj64/org-dp). I don't see a way in org-element.

The data returned will include the property drawer of the heading. It does not include subheadings.

I wrote a quick and ugly function to strip out the property drawer (it also has to remove the properties list associated with the section element, hence excluding :begin), and then returns a string.

(defun get-contents (data)
"DATA is the data returned by (org-dp-contents)"
  (let ((contents)
    (exclusions '(property-drawer :begin)))
    (dolist (element (cdar data))
      (unless (memq (car-safe element) exclusions)
    (push element contents)))
    (org-element-interpret-data (reverse contents))))


I am skeptical that this is a better way then the alternative you described, but do not know. Hopefully someone else can assist.




On Wed, Oct 23, 2019 at 12:10 PM Joost Kremers <address@hidden> wrote:
Hi all,

I was wondering if there's a way to programmatically get the text
of a node in an Org buffer. Basically, I have a buffer that looks
something like this:

#+BEGIN_SRC org
* Top header
** Subheader
   :PROPERTIES:
   :Custom_ID: some_id
   :END:

   Text starts here, possibly with additional subheaders
#+END_SRC

What I would like to extract is the text below "Subheader", but
without the :PROPERTIES: block.

I've looked at the org-element library, but I haven't been able to
figure out how to use it to extract just the plain text.

I use the :Custom_ID: property to find the relevant subheading and
I know I can use (org-back-to-heading) to get point to the
Subheader containing the relevant :PROPERTIES: block. Obviously, I
could then narrow the buffer to the subheader, use a text search
to move point past the line containing :END: and then extract the
text from there until (point-max).

I'm just wondering if this may break in unexpected circumstances
and whether there's a better way.

TIA

Joost



--
Joost Kremers
Life has its moments


reply via email to

[Prev in Thread] Current Thread [Next in Thread]