ISO включване в emacs org-mode

Въпрос: има ли някакъв начин да се направи включване в emacs org-mode?

Под „превключване“ имам предвид неща като, в някакъв момент във fileA.org и fileB.org, „включване“ на fileInc.org – и дървото от fileInc.org да се показва и на двете места. Действително се появяват, а не просто да бъдат свързани. (Възможно с условно включване, трансформация, напр. дълбочина на вмъкване (брой ***s)).

Знам за #setupfile, но това изглежда работи само за режими, а не за реален текст.

Знам за http://orgmode.org/manual/Include-files.html, но AFAIK те работят само по време на износа.

Търся нещо, което работи в нормален буфер на emacs org-mode. (Всъщност нещо, което работи в буфери извън org-режим, може да е хубаво.)

Имам бойлерна плоча, която искам да включа в няколко файла.

Съществува ли нещо подобно?


person Krazy Glew    schedule 10.03.2013    source източник


Отговори (1)


Хм... Не мисля, че нещо подобно съществува, но беше достатъчно лесно да се напише динамичен блок, за да се направи това. Следният elisp работи за мен:

(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)))

След това, за да включите диапазон от редове от даден файл, можете да създадете динамичен блок по следния начин:

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

И автоматично попълване с C-c C-x C-u. Пропуснете мин. и макс. аргументи, за да включите целия файл. Обърнете внимание, че можете да свържете org-update-all-dblocks към кука, така че този диапазон да се актуализира всеки път, когато посетите файла или го запазите.

Повече информация за динамичните блокове на http://orgmode.org/org.html#Dynamic-blocks. Надявам се това да помогне!

person Rob    schedule 12.03.2013
comment
Някой адаптирал ли е това, за да приема определени заглавия? Все още не съм намерил нищо публично (публикувах свързан въпрос тук, ако някой намери или направи нещо подобно emacs.stackexchange.com/questions/12562/ - person avv; 03.06.2015
comment
Би било хубаво да го накарате да работи с тагове по начина, по който #+INCLUDE го прави. - person AlwaysLearning; 14.06.2017
comment
Бихте ли обяснили какво е значението на колоната в името на функцията? - person AlwaysLearning; 14.06.2017