* lisp/ob-ref.el (org-babel-ref-resolve): When the result an empty list, then treat it as a list, not as the symbol nil. * testing/lisp/test-ob.el (test-ob/return-empty-list-from-post-block): Add new test. * etc/ORG-NEWS (Post-processing code blocks can return an empty list): Document change in behavior. --- etc/ORG-NEWS | 6 ++++++ lisp/ob-ref.el | 2 +- testing/lisp/test-ob.el | 24 ++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 4728528f8..74095d101 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -425,6 +425,12 @@ The new variable name is =org-plantuml-args=. It now applies to both jar PlantUML file and executable. ** Miscellaneous +*** Post-processing code blocks can return an empty list + +When the result of a regular code block is nil, then that was already +treated as an empty list. Now that is also the case for code blocks +that post-process the result of another block. + *** Styles are customizable in ~biblatex~ citation processor It is now possible to add new styles or modify old ones in ~biblatex~ diff --git a/lisp/ob-ref.el b/lisp/ob-ref.el index b79e47900..2b4a16aea 100644 --- a/lisp/ob-ref.el +++ b/lisp/ob-ref.el @@ -199,7 +199,7 @@ (defun org-babel-ref-resolve (ref) (org-babel-execute-src-block nil info params)))) (error "Reference `%s' not found in this buffer" ref)))) (cond - ((symbolp result) (format "%S" result)) + ((and result (symbolp result)) (format "%S" result)) ((and index (listp result)) (org-babel-ref-index-list index result)) (t result))))))))) diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el index 99912fe63..8d1548fe1 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -26,6 +26,30 @@ (require 'ob-ref) (require 'org-table) (eval-and-compile (require 'cl-lib)) +(ert-deftest test-ob/return-empty-list-from-post-block () + "When the result of a post-processing source block is an empty +list, then it should be treated as such; not as the symbol nil." + (should + (let ((default-directory temporary-file-directory)) + (org-test-with-temp-text + " +#+name: addheader +#+header: :var rows=\"\" +#+begin_src elisp :hlines yes + '() +#+end_src +#+header: :post addheader(*this*) +#+<point>begin_src emacs-lisp :results table +#+end_src +#+RESULTS: +: nil" + (org-babel-execute-src-block) + (goto-char (1- (point-max))) + (equal (buffer-substring-no-properties + (line-beginning-position) + (line-end-position)) + "#+RESULTS:"))))) + (ert-deftest test-ob/indented-cached-org-bracket-link () "When the result of a source block is a cached indented link it should still return the link." -- 2.37.3