From c05368a16b25fc0b044cf84b733fe67746867381 Mon Sep 17 00:00:00 2001 From: Natnael Kahssay <39103342+natask@users.noreply.github.com> Date: Sat, 26 Sep 2020 04:42:59 -0700 Subject: [PATCH] (fix): prevent link-extraction from keeping buffers open (#1131) Fixes #1129 . Co-authored-by: Jethro Kuan --- org-roam-macs.el | 13 +++++++++++++ org-roam.el | 15 +++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/org-roam-macs.el b/org-roam-macs.el index 091a3e5..14e40cd 100644 --- a/org-roam-macs.el +++ b/org-roam-macs.el @@ -63,6 +63,19 @@ If FILE, set `org-roam-temp-file-name' to file and insert its contents." (setq-local org-roam-file-name ,file)) ,@body))))) +(defmacro org-roam--with-file (file &rest body) + "Execute BODY within a FILE. +Closes the file if the file is not yet visited." + (declare (indent 1) (debug t)) + `(let* ((existing-buf (find-buffer-visiting ,file)) + (buf (or existing-buf + (find-file-noselect file))) + res) + (with-current-buffer buf + (setq res ,@body)) + (when existing-buf (kill-buffer existing-buf)) + res)) + (defun org-roam-message (format-string &rest args) "Pass FORMAT-STRING and ARGS to `message' when `org-roam-verbose' is t." (when org-roam-verbose diff --git a/org-roam.el b/org-roam.el index a6cf91b..212bda8 100644 --- a/org-roam.el +++ b/org-roam.el @@ -1102,16 +1102,19 @@ Return nil otherwise." :limit 1] id))) -(defun org-roam-id-find (id &optional markerp strict) +(defun org-roam-id-find (id &optional markerp strict keep-buffer-p) "Return the location of the entry with the id ID. When MARKERP is non-nil, return a marker pointing to theheadline. Otherwise, return a cons formatted as \(file . pos). -When STRICT is non-nil, only consider Org-roam’s database." +When STRICT is non-nil, only consider Org-roam’s database. +When KEEP-BUFFER-P is non-nil, keep the buffers navigated by Org-roam open." (let ((file (or (org-roam-id-get-file id) - (unless strict - (org-id-find-id-file id))))) + (unless strict (org-id-find-id-file id))))) (when file - (org-id-find-id-in-file id file markerp)))) + (if keep-buffer-p + (org-id-find-id-in-file id file markerp) + (org-roam--with-file file + (org-id-find-id-in-file id file markerp)))))) (defun org-roam-id-open (id-or-marker &optional strict) "Go to the entry with ID-OR-MARKER. @@ -1124,7 +1127,7 @@ to the default behaviour of `org-id-open'. When STRICT is non-nil, only consider Org-roam’s database." (when-let ((marker (if (markerp id-or-marker) id-or-marker - (org-roam-id-find id-or-marker t strict)))) + (org-roam-id-find id-or-marker t strict t)))) (org-goto-marker-or-bmk marker) (set-marker marker nil)))