I just updated Emacs to version 29.1, and I am now getting the “Selecting deleted buffer” error described here whenever I try to perform any sort of org-roam
operation.
Having already been through the whole song-and-dance with native compilation and the assumptions Emacs makes about that when doing this update on another computer, I knew to set the following:
(when (boundp 'native-comp-eln-load-path)
(startup-redirect-eln-cache (expand-file-name "eln-cache/" user-emacs-directory)))
So, thankfully, all my packages are in a straight/build
directory under my user-emacs-directory
and every package except org-roam
is working just fine. Trying to troubleshoot this, I have so far:
- Deleted
~/org-roam.db
and tried to regenerate it withorg-roam-db-sync
; this just spits the same “Selecting deleted buffer” error. straight-rebuild-all
, which didn’t have any effect itself, and deleting the db, doing it and then runningorg-roam-db-sync
also had no effect beyond creating an empty~/org-roam.db
file.straight-pull-all
+straight-rebuild-all
, which also didn’t have any effect, same with doing all this after deleting the db and then tryingorg-roam-db-sync
after.- I checked
straight/build/emacsql-sqlite/sqlite
, this was already built and trying to runmake
just resulted in'emacsql-sqlite' is up to date
. I saw one poster describe deleting this and manually rebuilding, which didn’t seem likely to make a difference to me, given that in the rebuild, this one had been rebuilt already. Tried it anyway, did nothing. - I checked
straight/build/emacsql/sqlite
, this was NOT already built, so I ranmake
, which did end up building anemacsql-sqlite
in that directory. Tryingorg-roam-db-sync
after that . . . just gave me the same “Selecting deleted buffer” error.
Any attempt to perform any sort of org-roam
function results in the same error. When I toggle-debug-on-error
and try it, I get the following:
Debugger entered--Lisp error: (error "Selecting deleted buffer")
#f(compiled-function (connection) "Return true if the end of the buffer has a properly-formatted prompt." #<bytecode 0x190c386fa67d1127>)(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230>)
apply(#f(compiled-function (connection) "Return true if the end of the buffer has a properly-formatted prompt." #<bytecode 0x190c386fa67d1127>) #<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230> nil)
emacsql-waiting-p(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230>)
#f(compiled-function (connection &optional timeout) "Block until CONNECTION is waiting for further input." #<bytecode -0x1e50a56866d5f103>)(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230>)
apply(#f(compiled-function (connection &optional timeout) "Block until CONNECTION is waiting for further input." #<bytecode -0x1e50a56866d5f103>) #<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230> nil)
emacsql-wait(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230>)
#f(compiled-function (connection sql &rest args) #<bytecode -0x98d4f8cd96763a4>)(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230> [:pragma (= foreign_keys ON)])
apply(#f(compiled-function (connection sql &rest args) #<bytecode -0x98d4f8cd96763a4>) #<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230> [:pragma (= foreign_keys ON)])
emacsql(#<emacsql-sqlite-connection emacsql-sqlite-connection-15873ddcb230> [:pragma (= foreign_keys ON)])
org-roam-db()
org-roam-db-sync(nil)
funcall-interactively(org-roam-db-sync nil)
call-interactively(org-roam-db-sync record nil)
command-execute(org-roam-db-sync record)
execute-extended-command(nil "org-roam-db-sync" nil)
funcall-interactively(execute-extended-command nil "org-roam-db-sync" nil)
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
Below is my org-roam
configuration as it stands; hopefully this helps somewhat.
(use-package org-roam
:custom
(setq org-roam-directory "~/sync_data/zettelkasten/"
org-roam-db-location "~/org-roam.db"
org-roam-file-exclude-regexp "org-roam/data"
org-roam-node-display-template
(concat "${title} " (propertize "${tags:*}" 'face 'org-tag)))
(org-roam-db-autosync-mode)
:bind
(("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
("C-c n b" . org-roam-buffer-toggle)
("C-c n a" . org-roam-tag-add)
("C-c n d" . org-roam-tag-remove)
("C-c n r" . org-roam-refile))
:config
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+TITLE: ${title}\n")
:unnarrowed t)
("C" "contact" plain "%?"
:target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+TITLE: ${title}\n#+filetags: :contacts:\n\n- Born:\n- Location:\n- Phone:\n- Email:\n\n* Biographical Information\n"))
)
)
Other suggestions I have seen for how to address this issue are variations on the things I have tried already. Please let me know if there’s any other information I can provide that would be helpful.
EDIT:
I observed that org-roam
is still working perfectly on the other machine I set up Emacs 29.1 on, for some reason. The only difference I can discern right now is that straight/build/
does NOT have an emacs-sqlite
directory in it on that machine, just an emacsql
directory. When I C-h v
on emacsql-sqlite-executable
on that machine, I get /home/username/.config/emacsProfile/straight/build/emacsql/sqlite/emacsql-sqlite
. I compare that against the machine I’m having problems with, and it’s a similar path, but with the last segment being emacsql-sqlite/sqlite/emacsql-sqlite
instead.
I deleted the higher-level emacsql-sqlite
directory, which got me to a No EmacSQL SQLite binary available
error.
Then I slipped (setq emacsql-sqlite-executable "/home/username/.config/emacsProfile/straight/build/emacsql/sqlite/emacsql-sqlite")
before my org-roam
config, but that just gets me right back to Selecting deleted buffer
.
EDIT 2 (Problem Solved)
Despite having restarted Emacs a few times during this process to no avail, doing it one more time seemed to shake things up, because the issue has disappeared. Not clear to me what difference there was between this restart and any of the others.