在 Orgmode 中,有没有办法仅缠结子树中与特定标签匹配(或不匹配)的块?
例如使用以下代码
* A
#+BEGIN_SRC c
printf("Not exported");
#+END_SRC
* B :D:
#+BEGIN_SRC c
printf("Exported");
#+END_SRC
沿着标签导出D,tangle C 文件将只包含printf("Exported");
我在用着org-mode
组织我的 emacs 配置,我的目标是派生不同的配置来自主人一emacs-config.org
。 (例如仅标记特定的灯光配置)
为了实现这种行为,您可以利用以下事实:yes
and no
, the :tangle
Org Babel 代码块的标头参数也理解文件名 http://orgmode.org/manual/Extracting-source-code.html;即,对于任何给定的代码块,您可以告诉 Org Babel 您希望该块与哪个文件纠缠在一起。我的想法是为标题添加标签时,自动为某个标题下的每个代码块设置文件名:
(defun org-babel-set-tangle-file ()
(let ((tag (car (org-get-local-tags))))
(org-narrow-to-subtree)
(while (re-search-forward "\\(:tangle \\).*" nil t)
(replace-match (concat "\\1" tag ".el")))
(widen)))
(add-hook 'org-after-tags-change-hook 'org-babel-set-tangle-file)
结果的行为是当你调用org-babel-tangle
对于当前文件,属于的所有代码块
- 头条新闻without标签将与默认的缠结文件缠结
- 带标签的标题将与以该标签命名的文件纠缠在一起。
请注意,上面的函数将特定于标签的缠结文件的文件扩展名设置为.el
;既然您提到您想要生成不同的 Emacs 配置,我认为这将是一个合理的默认配置(即使您在示例中显示了 C 代码)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)