From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: merge trees?
Date: Thu, 03 Sep 2015 20:44:38 +0200 [thread overview]
Message-ID: <877fo7s5pl.fsf@gmx.us> (raw)
In-Reply-To: CAN_Dec_ZwM6cThjvzwEEXy7KVf8=FUf82NHQ+FWPr+fQeqCr+w@mail.gmail.com
Matt Price <moptop99@gmail.com> writes:
> * Topics
> ** Introduction
> ** Crowds and Publics
> ** Spatial History
>
> * Labs
> ** Intro to HTML
> ** Styling with CSS
> ** The Google Maps Javascript API
>
> The two subtrees can be manipulated independently, then merged to create
> something like:
>
> * Schedule
> ** <2015-09-15>
> *** Seminar: Introduction
> *** Lab: Intro to HTML
You should probably use a key for matching. Otherwise I can promise you
it will get messy (it seems you want to match based on the location in the
three).
> Is there an easy way to do this already? Or is the best thing to do to
> write a piece of elisp that generates the appropriate structure using
> org-element, and put that code in a babel block?
Probably the best way might be a custom exporter. ox-koma-script collects
"special headlines" and insert them later. You could do the same.
> And if the latter, does anyone, um, want to write the code for me?
Sounds like the job of a personal, underpaid slav... TA!
You can cook some more on this.
* topics
:PROPERTIES:
:outline_prefix:
:END:
** Intro
:PROPERTIES:
:outline_class: 1
:END:
<2015-09-03 jue>
Intro text
** can I has czz?
:PROPERTIES:
:outline_class: 2
:END:
<2015-09-05 sáb>
x
* labs
:PROPERTIES:
:outline_prefix: Lab
:END:
** intro to html
:PROPERTIES:
:outline_class: 1
:END:
** lab
:PROPERTIES:
:outline_class: 2
:END:
* magic
#+BEGIN_SRC emacs-lisp
(let* ((parse-tree (org-element-parse-buffer))
(classes (delete-duplicates (org-element-map parse-tree 'headline
(lambda (h)
(org-element-property :OUTLINE_CLASS h)))
:test 'equal))
(times (org-element-map (org-element-parse-buffer) 'timestamp
(lambda (time)
(list (org-export-get-node-property :OUTLINE_CLASS time t)
(org-element-property :raw-value time))
)))
(dataz (mapcar (lambda (class)
(list :class class
:schedule (cadr (assoc class times))
:heads (delq nil
(org-element-map parse-tree 'headline
(lambda (h) (and (equal class
(org-element-property :OUTLINE_CLASS h))
h))))))
classes)))
(with-temp-file "/tmp/outline.org"
(erase-buffer)
(insert "* schedule\n")
(mapc (lambda (data)
(insert "** " (plist-get data :schedule) "\n")
;; Here you could add sorting to get it in the desired order.
(insert (mapconcat 'org-element-interpret-data
(mapcar
;; You could add prefixes and so forth
;; using the outline-prefix property
(lambda (h) (let ((l (org-element-property :level h)))
(org-element-put-property h :level (1+ l))))
(plist-get data :heads))
"\n")))
dataz)))
#+END_SRC
--
I hear there's rumors on the, uh, Internets. . .
prev parent reply other threads:[~2015-09-03 18:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-03 17:07 merge trees? Matt Price
2015-09-03 17:48 ` Thomas S. Dye
2015-09-03 18:31 ` Matt Price
2015-09-03 19:15 ` Thomas S. Dye
2015-09-03 18:44 ` Rasmus [this message]
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=877fo7s5pl.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).