From b5cfc311db9f871ef545277aff9f296c5d2e7ab4 Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 21 Oct 2023 13:08:55 +0300 Subject: [PATCH] org-babel-ref-resolve: Search current buffer when FILE in FILE:REF does not exist * lisp/ob-ref.el (org-babel-ref-resolve): Only search in other file when FILE in FILE:REF exists. * doc/org-manual.org (Passing arguments): * etc/ORG-NEWS (Babel references =FILE:REFERENCE= now search current buffer when =FILE= does not exist): Document the change. Reported-by: Stefano Ghirlanda Link: https://orgmode.org/list/CAK_gY-Q4f82dbDQgyS+FfyeQaHAMXHqygq3e6ZsWnEj-+eoG9A@mail.gmail.com --- doc/org-manual.org | 4 ++++ etc/ORG-NEWS | 6 ++++++ lisp/ob-ref.el | 5 +++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index c332f90f1..8813f4944 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -17806,6 +17806,10 @@ from the reference. : :var NAME=FILE:REFERENCE +When =FILE= does not exist, the reference is searched in the current +file, using the verbatim reference. This way, +=:var table=tbl:example= will be searched inside the current buffer. + Here are examples of passing values by reference: - table :: diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 19117821a..1207d6fca 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -13,6 +13,12 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org. * Version 9.7 (not released yet) ** Important announcements and breaking changes +*** Babel references =FILE:REFERENCE= now search current buffer when =FILE= does not exist + +When =FILE= does not exist, the reference is searched in the current +file, using the verbatim reference. This way, +=:var table=tbl:example= will be searched inside the current buffer. + *** New export option ~org-export-expand-links~ The new option makes Org expand environment variables in link and INCLUDE paths. diff --git a/lisp/ob-ref.el b/lisp/ob-ref.el index fd6927ccf..b7858569a 100644 --- a/lisp/ob-ref.el +++ b/lisp/ob-ref.el @@ -156,8 +156,9 @@ Emacs Lisp representation of the value of the variable." (when (string-match "^\\(.+\\):\\(.+\\)$" ref) (setq split-file (match-string 1 ref)) (setq split-ref (match-string 2 ref)) - (find-file split-file) - (setq ref split-ref)) + (when (file-exists-p split-file) + (find-file split-file) + (setq ref split-ref))) (org-with-wide-buffer (goto-char (point-min)) (let* ((params (append args '((:results . "none"))))