tshu-w/.emacs.d

在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有关讨论。

尝试使用您的代码来调试:

  1. 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))))
  1. 执行 open org-protocol://roam-ref\?template=r\&ref=test\&title=this\&body=body
    执行完第二步,激活emacs之后,没有其他反应。

希望能帮忙解决下问题。

Screen Shot 2022-01-04 at 19 24 49

尝试了一下没有什么问题,建议检查下你别的配置是否冲突。可以试着先提前设置好 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,然后重启电脑激活,正常了。

官方文档Mac-OS

如果是 Emacs Mac Port 不需要 OrgProtocolClient.app 的 app,默认就可以了

您好,在target指定的file+olp位置时,发现plain/item类型无效的情况。

  1. 当插入的类型type为entry 可以正确插入到target指定的 位置。
  2. 当插入的类型type为plain/item时,直接在inbox.org 文件最上放插入。
    item模版如下:
("a" "Annotation"
             item
             "- ${body}"
             :target (file+olp "inbox.org" ("小书签" "swift"))
             :immediate-finish t
             )

在插入在target指定的位置节点时,plain/item等类型需要特殊设置吗?

不需要,我这没问题
Screen Shot 2022-01-05 at 17 12 27

我是通过js脚本获取网页内容,然后填充手动拼接的模版

  1. js脚本:
javascript:location.href = 'org-protocol://roam-ref?template=r&ref=%27 + encodeURIComponent(location.href) + %27&title=%27 + encodeURIComponent(document.title)
  1. 拼接模版
("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节点上生成属性块。

临时解决的办法:在新文件中做抓取操作。