利用 snails 多 backends 的特性,糊了几个搜索 org-roam 的 backends

更新: 支持搜索 alias 里的内容(但一个文件依旧只显示一条),输入框中逗号后的内容自动解释为 tag。

正文:

由于 snails 支持多 backends, 在不同的 tag 下同时搜索 roam 的 notes 非常方便,再加上 org-roam 默认提供的 ivy backend 实在太简陋了(把所有 title 和 tags 全混在一起,相同 file 会生成多个 titles),就写了个 snails 版的。目前我创建了四五个 backends, 每个 backend 对应一个搜索的 tag ,这样就不用再像 ivy 里面那样手动输入 tag 了。效果:

具体用法看 github,目前还非常简陋。最近空闲不多加上人懒,估计以满足自己需求为主。

另外附赠一个直接打开 roam notes 里面链接的函数,因为我把所有链接都做成了单独的一个 note,这样就知道这个链接被哪些其他 note 引用了,比如:

#+title: Org-roam User Manual
#+roam_tags: link
#+roam_key: https://www.orgroam.com/manual.html#Installation

用下面这个函数就可以直接从浏览器打开,而不是进入这个文件。

(defun weiss-roam-find-file (filename &optional wildcards)
    "DOCSTRING"
    (interactive
     (find-file-read-args "Find file: "
                          (confirm-nonexistent-file-or-buffer)))
    (if (string-prefix-p "Ʀlink:" (file-name-nondirectory filename))
        (with-temp-buffer
          (insert-file-contents filename)
          (re-search-forward "#\\+roam_key: ")
          (browse-url (buffer-substring-no-properties (+ (line-beginning-position) 12) (line-end-position)))
          )
      (find-file filename wildcards)
      )
    )

在创建 backend 的 candidate-do 里面这么写就能用

:candidate-do
(lambda (candidate)
  (weiss-roam-find-file candidate))

效果:

1赞