本来希望用 org-roam-capture 定制一个模板把笔记捕捉成一个 node, 但是 org-roam-capture-template 好像只能把笔记 capture 为一个文件。想了下,既然 org roam v2 把有 ID 属性的 node 识别为一个节点,那用 org 原有的 capture 系统就好了。
(setq org-capture-templates
'(("n" "NOTE" entry (file+headline "~/org/roam/notes.org" "NOTES")
"* %?\n :PROPERTIES:\n :ID: %(org-id-uuid)\n :CREATED: %U\n :CONTEXT: %a\n:END:\n%i\n")))
4 个赞
遇到了和楼主一样的需求。我的解决方法是这样的:在(setq org-id-link-to-org-use-id 'create-if-interactive)
后,不管哪个模板,只要在目标节点上按C-c l
(org-store-link
) /org-id-get-create
就可以了,虽然多了一步,但是个人认为比较自由。
试了下楼主的方法,因为org-roam-db-update-on-save
默认是t
。如果用auto-save等自动保存的插件的话, capture后写慢了会有警告:Warning (org-roam): Node in xxxx has no title, skipping... Disable showing Disable logging
解决方法:
(defun my/org-capture-maybe-create-id ()
(when (org-capture-get :create-id)
(org-id-get-create)))
(add-hook 'org-capture-prepare-finalize-hook #'my/org-capture-maybe-create-id)
(setq org-capture-templates
'(("n" "NOTE" entry (file+headline "~/org/roam/notes.org" "NOTES")
"* %?\n%i\n"
:create-id t)))
我一般都是在 headline 上使用 M-x org-id-get-create RET
,有时也会在 headline 上 M-x org-roam-alias-add RET
。来达到类似的效果!
强!才知道 org-capture 可以自定义属性
我是自己写了几个小函数来插入 node 节点,绑定了快捷键,没有用 capture 模板,模板限制又多语法又麻烦
(defun iso8601-format (time)
"format time to iso8601 string with current timezone"
(format-time-string "%FT%T%z" time nil))
(defun reverie-init-node ()
"init org-roam headline node"
(interactive)
(progn (org-id-get-create)
(org-entry-put nil "CREATED" (iso8601-format (current-time)))))
(defun reverie-brother-headline ()
"insert same level headline node"
(interactive)
(progn (org-insert-heading-respect-content)
(org-id-get-create)
(org-entry-put nil "CREATED" (iso8601-format (current-time)))))
(defun reverie-child-headline ()
"insert next level headline node"
(interactive)
(progn (org-insert-heading-respect-content)
(org-do-demote)
(org-id-get-create)
(org-entry-put nil "CREATED" (iso8601-format (current-time)))))
效果是这样
:PROPERTIES:
:ID: D41B546E-340E-44A4-B15B-4DB2A39B1DB8
:CREATED: 2021-08-07T03:10:28+0800
:END:
2 个赞
这个在 capture 的时候,如何确定是写到哪个 org 文件呢?
这个不能在capture里面用,只能在当前光标处执行,我觉得capture那套操作新建文件节点还行,新建其他节点太麻烦了,还不如直接定位过去执行命令
是的,我也不是很喜欢 org-capture 了,一是配置麻烦,二是每次 org-capture 会弹出窗口,容易破坏窗口布局。所以 gtd 记录待办的时候,我都是直接打开相应的 org 文件,只要把这些 org 文件提前加到书签,这样也不麻烦,然后再添加 TODO。