求助: 在网页剪藏时用org-capture模板生成独立文件名

在网上照抄了各种各样的网页剪藏方案, 最后选择了一种比较方便的办法: toure00/org-capture-tag-bookmark

他这个方法是利用油猴脚本提取网页上选中的文字,再用org-capture的模板,保存在一个文档中.

油猴脚本链接在这儿:

模板在这儿:

(setq org-capture-templates

  `(("pb" "Protocol Bookmarks" entry (file+headline  org-agenda-file-web "Bookmarks")
     "* %U - %:annotation  %:initial" :immediate-finish t :kill-buffer t)

    ("pn" "Protocol Bookmarks" entry (file+headline org-agenda-file-web "Notes")
     "* %U - %:annotation  %:initial" :immediate-finish t :kill-buffer t))

====== 现在的问题是:

因为开始用org-roam了, org-roam的特点是很多文档根据相关性互相联结.

于是, 希望每一次从网上剪藏的内容, 单独保存在一个独立的文档中, 文档名是在保存前手输的内容. 比如说, 保存脚本的文档, 就叫"剪藏脚本.org", 保存模板的文档就叫"剪藏模板.org", 而不是把所有剪藏的内容保存在一个文件中, 没办法发挥org-roam的优势了.

这样保存信息, 还有个好处: 在天长月久的信息积累过程中, 可以把相同的信息, 保存在一个文档中. 比如说剪藏脚本, 以后有新的发现, 又可以添加在"剪藏脚本.org"的后面.

那么, 这个模板应该如何写呢? 找了好多地方, 不得要领. 请大佬施予援手, 指点指点. 多谢多谢…

1 个赞

https://www.orgroam.com/manual/Template-Walkthrough.html#Template-Walkthrough

https://www.zmonster.me/2020/06/27/org-roam-introduction.html#orgec47e48

看你的意思是打算从网上抓取后直接做成roam笔记?org-roam的capture可能会符合你的要求。

如果续用原来的template,就可能要自己写函数了

  (defun my-create-notes-file ()
    "Create a notes file."
    (interactive)
    (let ((name (read-string "Filename: ")))
      (expand-file-name (format "%s.org"
                                  name) "Your Dir")))
    (setq org-capture-templates

      `(("pb" "Protocol Bookmarks" entry (file my-create-notes-file)
        "* %U - %:annotation  %:initial" :immediate-finish t :kill-buffer t)

        ("pn" "Protocol Bookmarks" entry (file my-create-notes-file)
         "* %U - %:annotation  %:initial" :immediate-finish t :kill-buffer t))

这个不知道符不符合你的要求

好的, 谢谢你啊. 我去琢磨琢磨…

像上面博客一样直接javascript书签就可以了,

javascript:location.href='org-protocol://roam-ref?template=a&ref='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&body='+encodeURIComponent(function()%7Bvar%20html%20=%20%22%22;var%20sel%20=%20window.getSelection();if%20(sel.rangeCount)%20%7Bvar%20container%20=%20document.createElement(%22div%22);for%20(var%20i%20=%200,%20len%20=%20sel.rangeCount;%20i%20%3C%20len;%20++i)%20%7Bcontainer.appendChild(sel.getRangeAt(i).cloneContents());%7Dhtml%20=%20container.innerHTML;%7Dvar%20dataDom%20=%20document.createElement('div');dataDom.innerHTML%20=%20html;dataDom.querySelectorAll('a').forEach(function(item,%20idx)%20%7Bconsole.log('find%20a%20link');var%20url%20=%20new%20URL(item.href,%20window.location.href).href;var%20content%20=%20item.innerText;item.innerText%20=%20'%5B%5B'+url+'%5D%5B'+content+'%5D%5D';%7D);%5B'p',%20'h1',%20'h2',%20'h3',%20'h4'%5D.forEach(function(tag,%20idx)%7BdataDom.querySelectorAll(tag).forEach(function(item,%20index)%20%7Bvar%20content%20=%20item.innerHTML.trim();if%20(content.length%20%3E%200)%20%7Bitem.innerHTML%20=%20content%20+%20'&%2313;&%2310;';%7D%7D);%7D);return%20dataDom.innerText.trim();%7D())
(use-package org-roam-protocol
  :after org-protocol)

另外设置对应的 org-roam-capture template:

        org-roam-capture-ref-templates
        '(("r" "ref" plain (function org-roam-capture--get-point)
           "%?"
           :file-name "notes/${slug}"
           :head "#+title: ${title}\n#+roam_key: ${ref}\n\n"
           :unnarrowed t)
          ("a" "annotation" plain (function org-roam-capture--get-point)
           "${body}\n"
           :file-name "notes/${slug}"
           :head "#+title: ${title}\n#+roam_key: ${ref}\n\n"
           :immediate-finish t
           :unnarrowed t
           :empty-lines 1))
1 个赞