[救救孩子吧]寻求一个解决方案 关于org-roam

之前用org-bable-tangle 管理配置文件 所有的配置都是放在一个文件里的

最近在玩 org-roam 于是就想拆分一下 拆分成小单元

问题来了: 在我tangle 主文件的时候 如何能自动把链接文件的内容也给tangle了 折腾了好久没有成功

[[id:3d7640ed-1e4d-426f-9df6-d4ddc5455476][early-init.el]] 链接是这样的

image

以下两个帖子思路和楼主的一样,但做法不同,可以参考:

里面都没有涉及到根据源码的链接把内容读进来再 tangle 的方法。

有一些相关讨论(但似乎没现成方案)

https://lists.gnu.org/archive/html/emacs-orgmode/2010-09/msg00808.html

但我觉得,既然已经是源码了,比如 early-init.el ,没必要再绕一圈把内容读到 org 然后又 tangle 到同一个 el 文件里(也许是 init.el ?), 直接在导出到 init.el 的 src block 里 load 这个文件就行了。

1 个赞

没有必要这样搞。你改一个文件,链接的文件没有更新就不需要重新 tangle.

结合使用 org-auto-tangle-mode,某个配置的文件发生更改之后自动 tangle 就好了。

首先你要的 tangle 方式 org 默认不支持. 但是 emacs 没啥不可能的, 你自己写点 elisp 也能实现. 但是在逻辑上, 你这个 tangle 方式有点蛋疼. 理论上你应该在编辑的代码块所在 buffer 里进行 tangle, 而不是编辑完一个 buffer 后跑到另一个链接它的 buffer 里去 tangle 原始 buffer.

写一个应该挺简单的, 提取buffer里的link, follow然后tangle就行. 但是图的行为有的时候和想的会不太一样, 你可能在buffer里有挺多link, 或者你不想tangle的link, 还有遍历深度和revisit要考虑, 让情况变太复杂.

写一个函数tangle一些org文件可能会更方便?

像这样. 会多一小步在每个configuration创建的时候, 但是简单又不会出现意想不到的情况

因为 链接是 org-roam生成的 所以会依赖 org-id
目前看起来只能用手动维护 路径的方式 虽然不够优雅 但是够用了 等发现好的方法在改进吧

org-id 是 org 生成的, 不是 org-roam 生成的. 你不需要安装 roam 也可以生成 id. 无论你想做什么, 看你描述我都感觉都和 roam 没啥关系.

我的意思 我的链接都是 用 org-roam-node-insert 创建的 里面默认都是 带id的

id和路径的关系 又在"~/.emacs.d/local/.org-id-locations"

那个文件不是 roam 创建的,丢掉了可以用一个 org-id-update-id-locations 命令重建. roam 另有自己的数据库 org-roam.db

了解 我还是看看 org-roam.db 是怎么工作的 感觉可能我配置的有点问题