如何为空输出自动抑制 `#+RESULTS`?
How to auto-suppress `#+RESULTS` for empty output?
在以下 org-mode 源代码片段中,没有生成任何结果:
#+BEGIN_SRC ipython :session
import numpy as np
#+END_SRC
但是,在执行时 #+RESULTS:
被添加到文档中。我如何配置 org-mode / babel 以仅在有内容要显示时插入结果?
我知道我可以使用 :results silent
禁用输出,但我不想根据是否生成结果来指定不同的标志。
将 ob-ipython 与 Org 9 一起使用,我将其与以下 hack 一起使用,前提是源块配置为 return 值(即默认 header 指定 :results value
):
; don't label empty outputs, exclude empty result blocks
(advice-add 'ob-ipython--process-response :filter-return
(λ (contents)
(if (string-match-p "\`# Out\[[0-9]+\]:\n\'" contents)
"" contents)))
(advice-add 'org-babel-insert-result :filter-args
(λ (args)
(let ((result (car args))
(result-params (cadr args))
(others (cddr args)))
(apply 'list
result
(if (string-empty-p result) '("silent") result-params)
others))))
第一个建议在输出中没有其他内容时剥离 ob-ipython
插入的输出标签(使结果为空),而第二个建议在结果为空时有效地应用 :results silent
.这些部分可以根据您的用例进行不同排列。
我在 thcoffee-msft 的回答中添加了一个检查结果是否兼容的检查
使用 emacs-jupyter。如果当前结果为空,它还会删除之前的任何结果:
(advice-add 'org-babel-insert-result :filter-args
(lambda (args)
(let ((result (car args))
(result-params (cadr args))
(others (cddr args)))
(apply 'list
result
(if (or
(string-empty-p result) (not result))
(progn (org-babel-remove-result) '("silent"))
result-params)
others))))
在以下 org-mode 源代码片段中,没有生成任何结果:
#+BEGIN_SRC ipython :session
import numpy as np
#+END_SRC
但是,在执行时 #+RESULTS:
被添加到文档中。我如何配置 org-mode / babel 以仅在有内容要显示时插入结果?
我知道我可以使用 :results silent
禁用输出,但我不想根据是否生成结果来指定不同的标志。
将 ob-ipython 与 Org 9 一起使用,我将其与以下 hack 一起使用,前提是源块配置为 return 值(即默认 header 指定 :results value
):
; don't label empty outputs, exclude empty result blocks
(advice-add 'ob-ipython--process-response :filter-return
(λ (contents)
(if (string-match-p "\`# Out\[[0-9]+\]:\n\'" contents)
"" contents)))
(advice-add 'org-babel-insert-result :filter-args
(λ (args)
(let ((result (car args))
(result-params (cadr args))
(others (cddr args)))
(apply 'list
result
(if (string-empty-p result) '("silent") result-params)
others))))
第一个建议在输出中没有其他内容时剥离 ob-ipython
插入的输出标签(使结果为空),而第二个建议在结果为空时有效地应用 :results silent
.这些部分可以根据您的用例进行不同排列。
我在 thcoffee-msft 的回答中添加了一个检查结果是否兼容的检查 使用 emacs-jupyter。如果当前结果为空,它还会删除之前的任何结果:
(advice-add 'org-babel-insert-result :filter-args
(lambda (args)
(let ((result (car args))
(result-params (cadr args))
(others (cddr args)))
(apply 'list
result
(if (or
(string-empty-p result) (not result))
(progn (org-babel-remove-result) '("silent"))
result-params)
others))))