ujony
2022 年5 月 4 日 18:33
1
本人使用 org-roam 的过程中遇到了一个问题:在对某一个 headline 使用 org-store-link
后,这个 headline 下面的附件链接会失效。
示例:
某个文件原本长这样:
:PROPERTIES:
:ID: E4EBB61D-1A0D-4118-AF0B-334E0211B04B
:END:
#+title: Foo
* Bar
[[attachment:filename]]
在对 Bar
这个 headline 使用 org-store-link
后,这个文件变成:
:PROPERTIES:
:ID: E4EBB61D-1A0D-4118-AF0B-334E0211B04B
:END:
#+title: Foo
* Bar
:PROPERTIES:
:ID: 9979ee12-5f9d-467a-90f0-01ad3c4ba410
:END:
[[attachment:filename]]
[[attachment:filename]]
这个链接是根据 PROPERTIES
中的 ID
来解析的,但由于使用了 org-store-link
而使 Bar
这个 headline 有了 ID
这个属性,现在 [[attachment:filename]]
是根据 Bar
的 ID
而不是这个文件的 ID
进行解析,就导致原来的这个附件链接失效了,大家有什么解决的办法吗?
通过在文件的 PROPERTIES
中添加 Dir
属性,可以使整个文件中的附件链接全部根据 Dir
这个属性进行解析 。我想要通过 templates 将文件的 Dir
设置为根据文件的 ID
解析得到的文件夹位置(即 .attach/E4/EBB61D-1A0D-4118-AF0B-334E0211B04B
这样的目录),但是我目前不清楚 org-roam 的 templates 要如何设定文件的 PROPERTIES
(不是某个 headline 的) 以及如何在里面放入根据 ID
解析得到的文件夹位置。
可以设置 org-store-link
不创建新的 ID?
SPQR
2022 年5 月 5 日 02:24
3
ID这个问题我最近从org-roam迁移到org-super-link的时候也发现了,org-roam虽然用了单个文件全局ID(直接写在文件最前面的ID),但是org-mode文档里面确明确写着ID必须在heading里面,而且org自带的ID创建相关函数里面看源码似乎确实都要求在heading里面,感觉org-roam是自己造了什么轮子。。
目前 org-roam 直接用 org-id-get-create 创建 ID 啊。
SPQR
2022 年5 月 5 日 02:40
5
是的,不过我怀疑的是org-mode自己使用ID的时候只会检查heading下面的内容,考虑heading之外的ID似乎是org-roam的特性,不过我也不是非常确定。。。
顺便问一下,org-super-link 相比 org-roam 有何优点?
SPQR
2022 年5 月 5 日 02:47
7
轻量化,没外部依赖,代价是功能很简单,就是创建link的时候自动插入一个反向的link,不过我就是因为用不到org-roam的全部功能才换的。
1 个赞
没用过附件操作,不过我感觉理论上org-roam只识别带id的heading (title肯定带),所以现在这样的表现可能是合理的,或者说之前你这个附件是被认为属于整个文档的,现在是属于这个heading的。解决办法感觉就是新建一个不带PROPERTY的heading,比如”* Attachment",或者把附件引用挪到*Bar上面
ujony
2022 年5 月 5 日 10:11
9
本人使用的是 doom-emacs,在 config.el
文件中添加入以下代码,即可在使用 org-roam-capture
创建新文件的时候自动在文件的 PROPERTIES
中添加 DIR
属性,格式为 :DIR: .attach/E4/EBB61D-1A0D-4118-AF0B-334E0211B04B
。这样整个文件中所有的附件都会放在这个由文件 ID 生成的目录当中。
(use-package! org-attach
:after org
:config
(add-hook! 'org-roam-capture-new-node-hook (org-entry-put (point) "DIR" (concat ".attach/" (org-attach-id-uuid-folder-format (org-id-get)))))
)
创建的新文件长这样:
:PROPERTIES:
:ID: E4EBB61D-1A0D-4118-AF0B-334E0211B04B
:DIR: .attach/E4/EBB61D-1A0D-4118-AF0B-334E0211B04B
:END:
#+title: Foo
帮你 emacs -Q 了一下, org 原生可创建无 headline 文件的 id property, 并可以 follow 这个 id 的 id link
突然给我启发,对于每个roam文件插入的图片似乎也能这么管理。