Org-roam(v2) 以及 org-roam-ui 的使用姿势(已支持Emacs 29 内置的 sqlite)

非常感谢!

重新定义 org-roam-node 的展示很有用,我在 org-roam 作者的配置里面也找到了,很好。

与org-agenda 结合的好处还是没看得太明白。我是直接把一个 task.org 丢到 roam 文件夹里面。

org-roam 作者 Jethro 关于记笔记的方法确实很值得一看,我也从中学习了很多方法。

哈哈,我也是从别人那里学到的。agenda 感兴趣的话可以看这篇博客:Boris Buliga - Task management with org-roam Vol. 5: Dynamic and fast agenda

好处大概就是,我在任何一个node里都可以添加TODO,比如某一个node是读书笔记,书没读完,或者是工作进行一半,或者是笔记写一半等等,这些node都会被动态的添加到agenda里,如果TODO完成了,则会自动移除。如果把所有的node都添加到agenda里,速度会非常慢,而这种动态的方法几乎没有速度影响

1 个赞

好的。感谢!明白那段代码的意思了。

配置(cl-defmethod org-roam-node-type ((node org-roam-node))之后,启动一直出现 error: Unknown specializer org-roam-node,这种情况怎么解决哇?看网上说 ;; This needs to be after the org-roam’ declaration as it is dependent on the structures of org-roam’. 但是不太懂什么意思

原因可能是需要在load org roam之后再执行这段代码,加个with eval after load 试试

十分感谢,我用这个成功了。还有一个问题想请教一下,我现在用的是 org-roam v2, 有没有什么比较方便的预览org的方式啊

consult-org-roam可以做到在浏览node列表的时候同步预览org文件的内容,我一般用这个,非常方便

3 个赞

可以分享一下你的配置和使用 consult-org-roam 的 workflow 吗,我按照官方给的配置都不太有效,比如 consult-org-roam-search 永远都是 no matched

(use-package consult-org-roam
   :ensure t
   :init
   (require 'consult-org-roam)
   ;; Activate the minor-mode
   (consult-org-roam-mode 1)
   :custom
   (consult-org-roam-grep-func #'consult-ripgrep)
   :config
   ;; Eventually suppress previewing for certain functions
   (consult-customize
    consult-org-roam-forward-links
    :preview-key (kbd "M-."))
   :bind
   ("C-c n e" . consult-org-roam-file-find)
   ("C-c n b" . consult-org-roam-backlinks)
   ("C-c n r" . consult-org-roam-search))
1 个赞

我的配置就一行,简单的打开consult-org-roam-mode,它就会自动激活预览,别的也没配置什么……

请问这句话的含义是 Emacs 29 已经不需要依赖系统的 sqlite 了吗?

我在安装 emacsql-sqlite-builtin 发现它似乎找不到内置的 sqlite, 依然需要手动安装. 比如:

(use-package emacsql-sqlite-builtin
  :init
  (require 'emacsql)
  (require 'emacsql-sqlite))

;; Error (use-package): emacsql-sqlite-builtin/:init: Cannot open load file: No such file or directory, emacsql

依然需要手动安装 emacs-sqlemacsql-sqlite 二者, 如

(use-package emacsql-sqlite-builtin
  :init
  (use-package emacsql)
  (use-package emacsql-sqlite))

就没有任何报错. 但这样似乎显得多余.

P.S.

emacs-version:

GNU Emacs 29.0.50 (build 1, aarch64-apple-darwin22.1.0, NS appkit-2282.14 Version 13.0 (Build 22A5342f)) of 2022-09-20

OS: macOS; 安装方式:

brew install emacs-plus@29 --with-native-comp

我的理解是 Emacs 29 内置了对 sqlite3的绑定,不需要通过动态模块来实现对 sqlite3的支持。 你系统中还是要安装 sqlite3 这个程序的。

按理说你只要安装好 emacsql-sqlite-builtin以及他的相关依赖就可以了,你是用过什么方式安装包?(比如:package.el, straight.el, Borg)

用 package.el 通过 melpa 安装的话,这样应该就可以了:

(use-package emacsql-sqlite-builtin :ensure t)
1 个赞

使用的是 straight.el. 非常感谢, 这个提醒了我, 目前问题已经解决. 原因大致是 emacsql 和 emacsql-sqlite 这两个包应该隶属于 org-roam, 而按照 straight.el 的逻辑, 这两个包在加载 org-roam 前都不能被调用. 于是把 (use-package emacsql-sqlite-builtin) 这一行放在 (use-package org-roam) 后面加载就没有出错了.

在 emacs 29 刚安装了 emacsql-sqlite-builtin 然后设置 (setq org-roam-database-connector 'sqlite-builtin) ,load org-roam 报错如下

Lisp error: (invalid-slot-type emacsql-sqlite-builtin-connection process process #<sqlite db=0x... name=/path/to/roam-db.db>)

单独使用 (emacsql-sqlite-builtin "/path/to/roam-db.db") 试了一下报同样的错误。emacsql emacsql-sqlite emacsql-sqlite-builtin都安装的melpa最新的版本。

网上搜了一下没有搜到,有碰到同样问题的吗?

目前 emacsql 的维护者正在准备把 emacsql-sqlite-builtin 合并到 emacsql 中。我用的还是原来的版本,没问题。可能是新版本引入的问题。

melpa 的emacsql-sqlite-builtin是从这个分支拉的: https://github.com/magit/emacsql/tree/next

最近有一个 fixup,也许可以解决你的问题。

谢谢,原来是这样。

我刚看了一下,用的已经是最新的了,等稳定些再看吧。

@sdycjsj emacsql-sqlite-builtin 已经合并到 emacsql了,以后不用单独安装 emacsql-sqlite-builtin 了。

我已经换过来了,没问题。

1 个赞

你是用的自带包管理还是其他?我更新了 melpa 上面的 emacsql 和 emacsql-sqlite,里面都没有 emacsql-sqlite-builtin,还是要单独安装?

melpa 上面已经更新了

我用的是 magit 作者开发的 Borg 包管理器,直接从 emacsql 安装的。MELPA 更新有点慢的。

谢谢!已用上,问题也已解决。