mrds-mode : 提供一个简单的函数让 roam 支持多目录切换功能

自上次练手了两个 package(macfa-moe trans-mode) 之后已经过去好几个月。

这次练手的也是一个小项目,我一直在用 org-roam 管理笔记,个人有多目录的需求。故而有了 GitHub - Imymirror/mrds-mode: simple multiple roam directories support(MRDS). ,主要是提供了一个函数用以在笔记目录之间切换。

1 个赞

我有几个目录,感觉用 .dir-locals.el 就够了。

((nil . ((eval . (setq-local
                  org-roam-directory (expand-file-name (locate-dominating-file
                                                        default-directory ".dir-locals.el"))))
         (eval . (setq-local
                  org-roam-db-location (expand-file-name "org-roam.db"
                                                         org-roam-directory))))))

学习的一下,我使用的denote,也有切换目录的需求。

感觉还能在每次 switch-db 之后给 org-roam-node-read 改个 prompt, 方便查看当前所在db。

效果大概是这样 (此时位置是子目录"testing/"):

image

我比较懒,直接使用了 @twlz0ne 大佬的 psearch.el 替换了 org-roam-node-read 里的 prompt 设置。

(psearch-patch org-roam-node-read
  (psearch-replace
   '`(or ,p1 ,p2)
   '`(or ,p1 (concat
              "("
              (upcase
               (file-relative-name
                mrds--roam-current-directory
                mrds--roam-root-directory))
              ") "
              ,p2))))
1 个赞

恩,够用就好。我现在有 85 个目录。有些目录嵌套 2、3 层深。

mrds-mode 能不能将根目录也切换成其他路径下目录?

写个checkout? 仅供参考,未做细致测试。

(setq my/-root-list '("~/roam1/" "~/dropbox/vulpea/"))

(defun my/-switch-root-directory (roamdir)
  "Switch to other roam tree."
  (interactive
   (list (completing-read
          "Choose Roam Root: "
          my/-root-list)))
  (setq mrds--roam-root-directory roamdir))

你要的功能好像是变更根目录路径。目前最简单的方式是手动执行一下 :

(setq mrds--roam-root-directory (file-truename "/path/to/roam-root-directory/"))

一般 roam 根目录只有一个,并不会不断变换根目录。如果你能说明真正刚需的场景,后续我可以考虑加一个函数来变更根目录。

我的使用场景是这样的: 阅读的时候想将org-roam的笔记文件放在各自的目录下,如:/Users/one/Documents/书籍/书籍-类型1/书籍A/;/Users/one/Documents/书籍/书籍-类型2/书籍B/。 但是如果是其他项目如编程/Users/one/download/编程/python/算法/A,会要切换到新的根目录。 我试了一下,如果已经设置根目录为/Users/one/Documents/书籍/书籍-类型1/书籍A/。并且在这个目录下建立org-roam的笔记文件。

(setq mrds--roam-root-directory (file-truename "/Users/one/Documents/书籍/书籍-类型1/书籍A/"))

如果想将上面的根目录改为/Users/one/Documents/时,改为如下:

(setq mrds--roam-root-directory (file-truename "/Users/one/Documents/"))

用M+ mrds/roam-switch-directory,emacs会很卡,不知道是不是文件路径太多?

我的笔记目前 1200 多,目录超过 80 个,不会卡。不过第一次切换到某一个目录的时候,org-roam 需要生成 db,这一步需要等待其完成,会卡顿。以后切换就正常了。这是 org-roam 本身的问题。

另外,关于切换根目录的不必要,我有这么一个思路 : 何不把需要切换的文件夹统一放到某一个根目录下管理,再将 mrds--roam-root-directory 设置成这个根目录。

这种操作有没有可能通过异步完成?交给(start-process … … … …)

我最早使用d12frosted的配置,他同步的工作交给外部,通过eldev这个包裹进行。但我当时没有用得很深入,机制还没搞清楚。