gpt4 book ai didi

emacs - 组织模式 : how to filter the blocks to be tangle?

转载 作者:行者123 更新时间:2023-12-04 19:06:16 25 4
gpt4 key购买 nike

在 Orgmode 中,有没有办法 缠结仅匹配(或不匹配)特定标签的子树中的 block ?

例如下面的代码

* A
#+BEGIN_SRC c
printf("Not exported");
#+END_SRC

* B :D:

#+BEGIN_SRC c
printf("Exported");
#+END_SRC

沿标签 D 导出,缠结 C 文件将仅包含 printf("Exported");
我正在使用 org-mode组织我的 emacs 配置,我的目标是从 master 派生不同的配置 emacs-config.org . (例如,通过仅标记特定的 lightconfig)

最佳答案

要实现此行为,您可以利用除 yes 之外的事实。和 no , :tangle Org Babel 代码块的 header 参数也是 understands file names ;即,对于任何给定的代码块,您可以告诉 Org Babel 您希望该 block 与哪个文件纠缠在一起。我的想法是在给标题添加标签时,自动为某个标题下的每个代码块设置文件名:

(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对于当前文件,所有属于的代码块
  • 没有标签的标题将被缠结到默认的缠结文件
  • 带标签的标题将与以该标签命名的文件纠缠在一起。

  • 请注意,上面的函数将特定于标签的缠结文件的文件扩展名设置为 .el ;因为您提到您希望生成不同的 Emacs 配置,所以我认为这将是一个合理的默认值(即使您在示例中显示 C 代码)。

    关于emacs - 组织模式 : how to filter the blocks to be tangle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709914/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com