From f01818ef5bce0a557eb119c58c449d75b28a923e Mon Sep 17 00:00:00 2001 Message-Id: From: Ihor Radchenko Date: Thu, 21 Jul 2022 18:54:30 +0800 Subject: [PATCH] org-babel: Do not echo output of resolved noweb references * lisp/ob-core.el (org-babel-execute-src-block): Post-process and return results even when "none" results parameter is given. Document that the result value is returned, as it is assumed by `org-babel-ref-resolve'. (org-babel-result-cond): Do return results even when "none" results parameter is given. According to the manual ":results none" should only affect how the results of evaluation are inserted into the buffer. However, the results are simply ignored currently. Fix this. * lisp/ob-ref.el (org-babel-ref-resolve): Set :results to "none" when resolving noweb references. Together with the above changes, this makes Org not echo the results value yet returning the value programatically. Reported in https://orgmode.org/list/7702b511-c289-5688-c64c-fb673324a63a@posteo.eu --- lisp/ob-core.el | 118 ++++++++++++++++++++++++------------------------ lisp/ob-ref.el | 2 +- 2 files changed, 59 insertions(+), 61 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index ac9af5d24..714f70c6a 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -712,7 +712,7 @@ (defvar *this*) ; Dynamically bound in `org-babel-execute-src-block' ;;;###autoload (defun org-babel-execute-src-block (&optional arg info params) - "Execute the current source code block. + "Execute the current source code block and return the result. Insert the results of execution into the buffer. Source code execution and the collection and formatting of results can be controlled through a variety of header arguments. @@ -776,51 +776,50 @@ (defun org-babel-execute-src-block (&optional arg info params) (capitalize lang) (let ((name (nth 4 info))) (if name (format " (%s)" name) ""))) - (if (member "none" result-params) - (progn (funcall cmd body params) - (message "result silenced")) - (setq result - (let ((r (funcall cmd body params))) - (if (and (eq (cdr (assq :result-type params)) 'value) - (or (member "vector" result-params) - (member "table" result-params)) - (not (listp r))) - (list (list r)) - r))) - (let ((file (and (member "file" result-params) - (cdr (assq :file params))))) - ;; If non-empty result and :file then write to :file. - (when file - ;; If `:results' are special types like `link' or - ;; `graphics', don't write result to `:file'. Only - ;; insert a link to `:file'. - (when (and result - (not (or (member "link" result-params) - (member "graphics" result-params)))) - (with-temp-file file - (insert (org-babel-format-result - result - (cdr (assq :sep params))))) - ;; Set file permissions if header argument - ;; `:file-mode' is provided. - (when (assq :file-mode params) - (set-file-modes file (cdr (assq :file-mode params))))) - (setq result file)) - ;; Possibly perform post process provided its - ;; appropriate. Dynamically bind "*this*" to the - ;; actual results of the block. - (let ((post (cdr (assq :post params)))) - (when post - (let ((*this* (if (not file) result - (org-babel-result-to-file - file - (org-babel--file-desc params result) - 'attachment)))) - (setq result (org-babel-ref-resolve post)) - (when file - (setq result-params (remove "file" result-params)))))) - (org-babel-insert-result - result result-params info new-hash lang))) + (setq result + (let ((r (funcall cmd body params))) + (if (and (eq (cdr (assq :result-type params)) 'value) + (or (member "vector" result-params) + (member "table" result-params)) + (not (listp r))) + (list (list r)) + r))) + (let ((file (and (member "file" result-params) + (cdr (assq :file params))))) + ;; If non-empty result and :file then write to :file. + (when file + ;; If `:results' are special types like `link' or + ;; `graphics', don't write result to `:file'. Only + ;; insert a link to `:file'. + (when (and result + (not (or (member "link" result-params) + (member "graphics" result-params)))) + (with-temp-file file + (insert (org-babel-format-result + result + (cdr (assq :sep params))))) + ;; Set file permissions if header argument + ;; `:file-mode' is provided. + (when (assq :file-mode params) + (set-file-modes file (cdr (assq :file-mode params))))) + (setq result file)) + ;; Possibly perform post process provided its + ;; appropriate. Dynamically bind "*this*" to the + ;; actual results of the block. + (let ((post (cdr (assq :post params)))) + (when post + (let ((*this* (if (not file) result + (org-babel-result-to-file + file + (org-babel--file-desc params result) + 'attachment)))) + (setq result (org-babel-ref-resolve post)) + (when file + (setq result-params (remove "file" result-params)))))) + (if (member "none" result-params) + (message "result silenced") + (org-babel-insert-result + result result-params info new-hash lang))) (run-hooks 'org-babel-after-execute-hook) result))))))) @@ -3199,20 +3198,19 @@ (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)) - (unless (member "none" ,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))))) + (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)))) (defun org-babel-temp-file (prefix &optional suffix) "Create a temporary file in the `org-babel-temporary-directory'. diff --git a/lisp/ob-ref.el b/lisp/ob-ref.el index d5356f18c..87a7ccf63 100644 --- a/lisp/ob-ref.el +++ b/lisp/ob-ref.el @@ -153,7 +153,7 @@ (defun org-babel-ref-resolve (ref) (setq ref split-ref)) (org-with-wide-buffer (goto-char (point-min)) - (let* ((params (append args '((:results . "silent")))) + (let* ((params (append args '((:results . "none")))) (regexp (org-babel-named-data-regexp-for-name ref)) (result (catch :found -- 2.35.1