From ea48cb04301588688f736e9461ebb7824224fe44 Mon Sep 17 00:00:00 2001 Message-Id: From: Ihor Radchenko Date: Tue, 22 Nov 2022 10:06:24 +0800 Subject: [PATCH] org-babel: Add new :results ignore header argument * lisp/ob-core.el (org-babel-result-cond): Unconditionally return nil and suppress all the processing for :results ignore. (org-babel-common-header-args-w-values): (org-babel-sha1-hash): Add the new value to know :results value list. * doc/org-manual.org (Handling): * etc/ORG-NEWS (New =:results ignore= header argument): Document the new value. Reported-by: Daniel Ortmann Link: https://orgmode.org/list/87tu2tjary.fsf@localhost --- doc/org-manual.org | 8 ++++++++ etc/ORG-NEWS | 8 ++++++++ lisp/ob-core.el | 31 ++++++++++++++++--------------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index 4f877d371..194cabe99 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -18482,6 +18482,14 @@ *** Handling can still be used when referenced from another code block. Usage example: =:results none=. +- =ignore= :: + + Ignore the results completely. This option is similar to =none=, + but no processing is performed on the return value. Calling the + code block programatically (see [[*How to evaluate source code]]) or by + reference (see [[*Passing arguments]] and [[*Noweb Reference Syntax]]) will + always yield nil. + - =append= :: Append results to the Org buffer. Latest results are at the bottom. diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 1f79f8ae5..d92cb139a 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -373,6 +373,14 @@ value of ~org-babel-clojure-backend~. For example: (range 2) #+end_src +*** New =:results ignore= header argument + +Unlike =:results none=, the return value of code blocks called with +=:results ignore= header argument is always ~nil~. Org does not +attempt to analyze the results and simply returns nil. This can be +useful when the code block is used for side effects only but generates +large outputs that may be slow to analyze for Org. + ** New options *** A new option for custom setting ~org-refile-use-outline-path~ to show document title in refile targets diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 1259909a0..89d3e104c 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -425,7 +425,7 @@ (defconst org-babel-common-header-args-w-values (prologue . :any) (results . ((file list vector table scalar verbatim) (raw html latex org code pp drawer link graphics) - (replace silent none append prepend) + (replace silent none ignore append prepend) (output value))) (rownames . ((no yes))) (sep . :any) @@ -1345,7 +1345,7 @@ (defun org-babel-sha1-hash (&optional info context) (lambda (a b) (string< (car a) (car b))))) (let* ((rm (lambda (lst) (dolist (p '("replace" "silent" "none" - "append" "prepend")) + "ignore" "append" "prepend")) (setq lst (remove p lst))) lst)) (norm (lambda (arg) @@ -3282,19 +3282,20 @@ (defmacro org-babel-result-cond (result-params scalar-form &rest table-forms) (declare (indent 1) (debug t)) (org-with-gensyms (params) `(let ((,params ,result-params)) - (if (or (member "scalar" ,params) - (member "verbatim" ,params) - (member "html" ,params) - (member "code" ,params) - (member "pp" ,params) - (member "file" ,params) - (and (or (member "output" ,params) - (member "raw" ,params) - (member "org" ,params) - (member "drawer" ,params)) - (not (member "table" ,params)))) - ,scalar-form - ,@table-forms)))) + (unless (member "ignore" ,params) + (if (or (member "scalar" ,params) + (member "verbatim" ,params) + (member "html" ,params) + (member "code" ,params) + (member "pp" ,params) + (member "file" ,params) + (and (or (member "output" ,params) + (member "raw" ,params) + (member "org" ,params) + (member "drawer" ,params)) + (not (member "table" ,params)))) + ,scalar-form + ,@table-forms))))) (defmacro org-babel-temp-directory () "Return temporary directory suitable for `default-directory'." -- 2.35.1