From 883eed0a5e5f45eb7ee197f48cdd5cc7bac327fc Mon Sep 17 00:00:00 2001 From: Leon Date: Mon, 17 Feb 2020 14:46:48 +0100 Subject: [PATCH] (change): open file links in org-roam buffer in `org-roam-last-window` (#108) Addresses #30 , thanks @l3kn --- CHANGELOG.md | 5 +++++ org-roam.el | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cf88b1..9ad1876 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.1.2 (TBD) +### Changes + +* [#108][gh-108] Locally overwrite the link following behaviour in the org-roam-buffer to open files in the same window `org-roam` was called from + ### Breaking Changes * [#103][gh-103] Change `org-roam-file-format` to a function: `org-roam-file-name-function` to allow more flexible file name customizaton. Also changes `org-roam-use-timestamp-as-filename` to `org-roam-filename-noconfirm` to better describe what it does. @@ -53,6 +57,7 @@ Mostly a documentation/cleanup release. [gh-98]: https://github.com/jethrokuan/org-roam/pull/98 [gh-103]: https://github.com/jethrokuan/org-roam/pull/103 [gh-105]: https://github.com/jethrokuan/org-roam/pull/105 +[gh-108]: https://github.com/jethrokuan/org-roam/pull/108 # Local Variables: # eval: (auto-fill-mode -1) diff --git a/org-roam.el b/org-roam.el index 9205f54..027929a 100644 --- a/org-roam.el +++ b/org-roam.el @@ -152,6 +152,9 @@ If called interactively, then PARENTS is non-nil." (defvar org-roam-current-file nil "Currently displayed file in `org-roam' buffer.") +(defvar org-roam-last-window nil + "Last window `org-roam' was called from.") + ;;; Utilities (defun org-roam--ensure-cache-built () "Ensures that org-roam cache is built." @@ -391,11 +394,25 @@ This is equivalent to removing the node from the graph." (org-roam--new-file-named (format-time-string "%Y-%m-%d" time)))) ;;; Org-roam buffer updates + +(defun org-roam--find-file (file) + "Open FILE in the window `org-roam' was called from." + (if (and org-roam-last-window (window-valid-p org-roam-last-window)) + (progn (with-selected-window org-roam-last-window + (find-file file)) + (select-window org-roam-last-window)) + (find-file file))) + (defun org-roam-update (file-path) "Show the backlinks for given org file for file at `FILE-PATH'." (org-roam--ensure-cache-built) (let ((buffer-title (org-roam--get-title-or-slug file-path))) (with-current-buffer org-roam-buffer + ;; Locally overwrite the file opening function to re-use the + ;; last window org-roam was called from + (setq-local + org-link-frame-setup + (cons '(file . org-roam--find-file) org-link-frame-setup)) (let ((inhibit-read-only t)) (erase-buffer) (when (not (eq major-mode 'org-mode)) @@ -458,6 +475,7 @@ Valid states are 'visible, 'exists and 'none." (defun org-roam () "Pops up the window `org-roam-buffer' accordingly." (interactive) + (setq org-roam-last-window (get-buffer-window)) (pcase (org-roam--current-visibility) ('visible (delete-window (get-buffer-window org-roam-buffer))) ('exists (org-roam--setup-buffer))