This post is reproduced here with permission from The OrgMode ExoCortex.

org-roam v2, which was recently released, removed the update database on idle functionality (which I coincidentally contributed) as part of its simplification.

I agree with this removal, as I think it makes the most sense to keep the org-roam core as simple as possible.

That being said, being able to have the org-roam database update only when Emacs is idle can be helpful for some folks, like me, who C-x C-s quite often and notice a few hundred millisecond blocking delay on files of a thousand or more lines.

Fortunately, Emacs makes this sort of behaviourable modification straight-forward.

In this post, in fact right below these words, I present to you some code you can add to your init.el configuration to enable database-update-only-on-idle for org-roam v2:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  ;; https://orgmode-exocortex.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/ ;; use this code entirely at your own risk (with-eval-after-load "org-roam" ;; queue for files that will be updated in org-roam-db when emacs is idle (setq org-roam-db-update-queue (list)) ;; save the original update function; (setq orig-update-file (symbol-function 'org-roam-db-update-file)) ;; then redefine the db update function to add the filename to a queue (defun org-roam-db-update-file (&optional file-path) ;; do same logic as original to determine current file-path if not passed as arg (setq file-path (or file-path (buffer-file-name (buffer-base-buffer)))) (message "org-roam: scheduling update of %s" file-path) (if (not (memq file-path org-roam-db-update-queue)) (push file-path org-roam-db-update-queue))) ;; this function will be called when emacs is idle for a few seconds (defun org-roam-db-idle-update-files () ;; go through queued filenames one-by-one and update db ;; if we're not idle anymore, stop. will get rest of queue next idle. (while (and org-roam-db-update-queue (current-idle-time)) ;; apply takes function var and list (apply orig-update-file (list (pop org-roam-db-update-queue))))) ;; we'll only start updating db if we've been idle for this many seconds (run-with-idle-timer 5 t #'org-roam-db-idle-update-files))