8

问:有什么办法可以在 emacs org-mode 中进行嵌入?

通过“嵌入”,我的意思是,在 fileA.org 和 fileB.org 中的某个位置,“包括”fileInc.org - 并且来自 fileInc.org 的树出现在这两个地方。其实出现,不只是挂。(可能有条件包含、转换,例如嵌套深度(***数))。

我知道#setupfile,但这似乎只适用于模式,而不是真正的文本。

我知道http://orgmode.org/manual/Include-files.html,但 AFAIK 他们只在出口时工作。

我正在寻找在普通 emacs org-mode 缓冲区中工作的东西。(实际上,在非组织模式缓冲区中工作的东西可能很好。)

我有要包含在多个文件中的样板。

这样的事情存在吗?

4

2 回答 2

13

嗯...我认为不存在这样的东西,但是编写一个动态块来做到这一点很容易。以下 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。希望这可以帮助!

于 2013-03-12T02:22:58.787 回答
1

您可能对包感兴趣org-transclusion您可以在此处找到 Github 存储库。

于 2021-08-13T06:25:10.710 回答