在 org-roam 里面实现了静态的交叉引用

Org Roam More

最近挺忙的,但是越忙,心里越慌,就越想要做一些与正事无关的事……

今天心血来潮,花了两三个小时写了一个 org-roam 里面用的交叉引用。

原因是如果使用 org-transclusion 来搞交叉引用, bug 真的超级多,用起来有一些麻烦,所以就自己写了一下,不知道是不是已经有实现了。

思路是这样的:把 transclusion 当作一个专门用来放交叉引用内容的标签,然后实现了对指定 org-roam 节点内容的提取与更新( get, set ), 以及对当前文件的对应标题的 entry 的内容的提取与更新( get, set )。最后利用这四个函数,又实现了从交叉引用的项同步到 org-roam 节点以及从 org-roam 节点同步到交叉引用的项,还实现了对二者进行对比的函数。

这个代码还不是很完善。我在 insert-transclude 里面,给 property 加上了 original-heading 和 original-id 的值,还没有用上,可能后面会更新,这样就可以交叉引用的标题与原始标题不一致了。

还有就是,我只实现了对一整个文件所有的交叉引用一起更新,没有实现仅对当前位置的 entry 进行更新,也留待后面来搞。

如果有同好想用这个包,注意先测试一下,这个代码我今天刚写,虽然我自己试用是没有问题,但我不确定会不会在某些情况导致数据丢失。

除了交叉引用相关的函数以外,还有一个 org-roam-more-capture-under-node 我也放里面了。内容也很简单,就是选择一个 org-roam 节点,在其下面创建一个新的节点。这个函数对我是挺有用的,因为我把 org-roam 当作一个素材库,有了这个函数,就可以方便地对素材进行分类。

希望大家用得愉快。

3 个赞

所以,我是否可以理解为,这个功能并不基于 org-transclusion?

而是直接使用一个 :transclusion: 作为专门的标签,用于摆放引用的内容?

既然已经写了代码,简单录一个 gif 也不是难事😄

对,和 org-transclusion 没有什么关系,就是用 transclusion 作为一个专门存放这种交叉引用内容的标签。没办法像 org-transclusion 一样自动同步,需要手动运行函数。不过我个人是更喜欢这种静态的。

output