From 7d1dd831db66a39a91c1eb4628af1f3d3af2e923 Mon Sep 17 00:00:00 2001 From: Jethro Kuan Date: Thu, 5 Mar 2020 13:53:53 +0800 Subject: [PATCH] (fix): relative links should work from org-roam-buffer with multidir (#228) --- org-roam.el | 79 +++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/org-roam.el b/org-roam.el index ee37046..99f5be0 100644 --- a/org-roam.el +++ b/org-roam.el @@ -927,44 +927,47 @@ If item at point is not org-roam specific, default to Org behaviour." (let ((buffer-title (org-roam--get-title-or-slug file-path))) (with-current-buffer org-roam-buffer ;; When dir-locals.el is used to override org-roam-directory, - ;; org-roam-buffer may have a different local org-roam-directory. - (let ((org-roam-directory source-org-roam-directory)) - ;; 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-roam-backlinks-mode)) - (org-roam-backlinks-mode)) - (make-local-variable 'org-return-follows-link) - (setq org-return-follows-link t) - (insert - (propertize buffer-title 'font-lock-face 'org-document-title)) - (if-let* ((backlinks (org-roam--get-backlinks file-path)) - (grouped-backlinks (--group-by (nth 0 it) backlinks))) - (progn - (insert (format "\n\n* %d Backlinks\n" - (length backlinks))) - (dolist (group grouped-backlinks) - (let ((file-from (car group)) - (bls (cdr group))) - (insert (format "** [[file:%s][%s]]\n" - file-from - (org-roam--get-title-or-slug file-from))) - (dolist (backlink bls) - (pcase-let ((`(,file-from ,file-to ,props) backlink)) - (insert (propertize - (s-trim (s-replace "\n" " " - (plist-get props :content))) - 'font-lock-face 'org-block - 'help-echo "mouse-1: visit backlinked note" - 'file-from file-from - 'file-from-point (plist-get props :point))) - (insert "\n\n")))))) - (insert "\n\n* No backlinks!"))) - (read-only-mode 1)))))) + ;; org-roam-buffer should have a different local org-roam-directory and + ;; default-directory, as relative links are relative from the overridden + ;; org-roam-directory. + (setq-local org-roam-directory source-org-roam-directory) + (setq-local default-directory source-org-roam-directory) + ;; 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-roam-backlinks-mode)) + (org-roam-backlinks-mode)) + (make-local-variable 'org-return-follows-link) + (setq org-return-follows-link t) + (insert + (propertize buffer-title 'font-lock-face 'org-document-title)) + (if-let* ((backlinks (org-roam--get-backlinks file-path)) + (grouped-backlinks (--group-by (nth 0 it) backlinks))) + (progn + (insert (format "\n\n* %d Backlinks\n" + (length backlinks))) + (dolist (group grouped-backlinks) + (let ((file-from (car group)) + (bls (cdr group))) + (insert (format "** [[file:%s][%s]]\n" + file-from + (org-roam--get-title-or-slug file-from))) + (dolist (backlink bls) + (pcase-let ((`(,file-from ,file-to ,props) backlink)) + (insert (propertize + (s-trim (s-replace "\n" " " + (plist-get props :content))) + 'font-lock-face 'org-block + 'help-echo "mouse-1: visit backlinked note" + 'file-from file-from + 'file-from-point (plist-get props :point))) + (insert "\n\n")))))) + (insert "\n\n* No backlinks!"))) + (read-only-mode 1))))) (cl-defun org-roam--maybe-update-buffer (&key redisplay) "Reconstructs `org-roam-buffer'.