在roam-v2中怎么使用org-roam-capture-ref-templates,实现书签功能?
iT-Boyer opened this issue · 9 comments
在老版本org-roam中,使用js标签调用org-protocol
协议的方式,实现了动态添加org-roam功能。
javascript:location.href = 'org-protocol://roam-ref?template=r&ref=%27 + encodeURIComponent(location.href) + %27&title=%27 + encodeURIComponent(document.title)
org-roam-capture-ref-templates
的模版如下:
(add-to-list 'org-roam-capture-ref-templates
'("r" "ref"
plain
"** ${title}\n:PROPERTIES:\n:ID: %(org-id-new)\n:END:\n slug : ${slug}\n key ${ref}\n%?"
:if-new (file+olp "~/hsg/iNotes/content-org/inbox.org" ("小书签"))
:unnarrowed t
)
)
在org-roam V2版本中,不再提供 org-roam-capture-ref-templates
属性。
在issues看到在v2版本org-roam-capture-ref-templates
有关讨论。
尝试使用您的代码来调试:
org-roam-capture-ref-templates
设置如下:
(use-package org-roam-protocol
:after org-protocol
:config
(setq org-roam-capture-ref-templates
'(("r" "ref"
entry
"* %?\n%i\n"
:if-new (file+olp "~/content-org/inbox.org" ("小书签"))
;; :target (file+head "refs/${slug}.org" "#+title: ${title}\n#+date: %t\n\n")
:unnarrowed t))))
- 执行
open org-protocol://roam-ref\?template=r\&ref=test\&title=this\&body=body
执行完第二步,激活emacs之后,没有其他反应。
希望能帮忙解决下问题。
尝试了一下没有什么问题,建议检查下你别的配置是否冲突。可以试着先提前设置好 org-roam-capture-ref-templates
(use-package org-roam-protocol
:after org-protocol
:init
(setq org-roam-capture-ref-templates
'(("r" "ref"
entry
"* %?\n%i\n"
:if-new (file+olp "~/content-org/inbox.org" ("小书签"))
;; :target (file+head "refs/${slug}.org" "#+title: ${title}\n#+date: %t\n\n")
:unnarrowed t))))
在新环境时,忘记配置URL scheme ‘org-protocol‘
defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add \
'{"LSHandlerPreferredVersions" = { "LSHandlerRoleAll" = "-"; }; LSHandlerRoleAll = "org.yourusername.OrgProtocol"; LSHandlerURLScheme = "org-protocol";}'
在命令行执行以上命令:注册scheme,然后重启电脑激活,正常了。
如果是 Emacs Mac Port 不需要 OrgProtocolClient.app 的 app,默认就可以了
您好,在target
指定的file+olp位置时,发现plain
/item
类型无效的情况。
- 当插入的类型type为
entry
可以正确插入到target指定的 位置。 - 当插入的类型type为
plain
/item
时,直接在inbox.org 文件最上放插入。
item
模版如下:
("a" "Annotation"
item
"- ${body}"
:target (file+olp "inbox.org" ("小书签" "swift"))
:immediate-finish t
)
在插入在target指定的位置节点时,plain
/item
等类型需要特殊设置吗?
我是通过js脚本获取网页内容,然后填充手动拼接的模版
- js脚本:
javascript:location.href = 'org-protocol://roam-ref?template=r&ref=%27 + encodeURIComponent(location.href) + %27&title=%27 + encodeURIComponent(document.title)
- 拼接模版
("r" "ref"
entry
"* ${slug}\n:PROPERTIES:\n:ID: %(org-id-new)\n:slug: ${slug}\n:roam_key: ${ref}\n:END:\n%?"
:if-new (file+olp "inbox.org" ("小书签" "${slug}"))
:unnarrowed t)
您的抓取效果很漂亮,方便共享下浏览器抓去脚本吗?
发现问题是ROAM_REFS
属性导致的。
第一次抓去后插入时,会把PROPERTIES
模块的ROAM_REFS
属性添加到inbox.org文件的第一行,而不是h1
节点上,这样导致在对同一页再次执行抓取,插入的plain类型的文本就出现了在顶部插入。
:PROPERTIES:
:ID: 367a089d-619e-4c27-81ae-684a9dde56cb
:ROAM_REFS: https://github.com/tshu-w/.emacs.d/issues/1
:END:
#+title: 收集箱
第二次plain内容
* h1
** h2
第一次 plain 内容
这样以来,如果像以下方式,将PROPERTIES
位置生成在h1上,问题应该就解决了。
* h1
:PROPERTIES:
:ID: 367a089d-619e-4c27-81ae-684a9dde56cb
:ROAM_REFS: https://github.com/tshu-w/.emacs.d/issues/1
:END:
** h2
第一次 plain 内容
有办法设置属性模块的归属吗?
不清楚,建议去 org-roam 那问下
找到了属性在首行的原因了:
当org文件中有#
号开头的head信息时,org-roam会把属性模块直接插入到首行。
要保证org文件头部不能有#
号开头的行,才能在h1
节点上生成属性块。
临时解决的办法:在新文件中做抓取操作。