Question

Q: is there any way to do transclusion in emacs org-mode?

By "transclusion", I mean stuff like, at some point in fileA.org and fileB.org, "including" fileInc.org - and having the tree from fileInc.org appear in both places. Actually appear, not just be linked to. (Possibly with conditional inclusion, transformation, e.g. nesting depth (number of ***s)).

I know about #setupfile, but that seems only to work for modes, not real text.

I know about http://orgmode.org/manual/Include-files.html, but AFAIK they only work at export time.

I am looking for something that works in a normal emacs org-mode buffer. (Actually, something that worked in non-org-mode buffers might be nice.)

I have boiler plate that I want to include in multiple files.

Does something like this exist?

Was it helpful?

Solution

Hmm... I don't think anything like this exists, but it was easy enough to write a dynamic block to do this. The following elisp works for me:

(defun org-dblock-write:transclusion (params)
  (progn
    (with-temp-buffer
      (insert-file-contents (plist-get params :filename))
      (let ((range-start (or (plist-get params :min) (line-number-at-pos (point-min))))
            (range-end (or (plist-get params :max) (line-number-at-pos (point-max)))))
        (copy-region-as-kill (line-beginning-position range-start)
                             (line-end-position range-end))))
    (yank)))

Then to include a line range from a given file, you can create a dynamic block like so:

 #+BEGIN: transclusion :filename "~/testfile.org" :min 2 :max 4
 #+END:

And auto-populate with C-c C-x C-u. Skip the min and max args to include the entire file. Note that you can bind org-update-all-dblocks to a hook, so that this range is updated whenever you visit the file or save.

More info on dynamic blocks at http://orgmode.org/org.html#Dynamic-blocks. Hope this helps!

OTHER TIPS

You might be interested in the package org-transclusion. You can find the Github repository here.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top