【问题标题】:How to auto-suppress `#+RESULTS` for empty output?如何为空输出自动抑制`#+RESULTS`?
【发布时间】:2017-12-01 01:03:51
【问题描述】:

在下面的org-mode source sn-p中,没有生成结果:

#+BEGIN_SRC ipython :session
  import numpy as np
#+END_SRC

但是,在执行时#+RESULTS: 会添加到文档中。如何将 org-mode / babel 配置为仅在有要显示的内容时插入结果?

我知道我可以使用 :results silent 禁用输出,但我不希望根据是否生成结果来指定不同的标志。

【问题讨论】:

  • AFAIK,你不能那样做。

标签: org-mode org-babel


【解决方案1】:

ob-ipython 与 Org 9 一起使用,我可以使用以下 hack,前提是源块配置为返回值(即,默认标头指定 :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。这些部分可以根据您的用例进行不同的排列。

【讨论】:

  • 谢谢,这看起来是一种可行的方法! ob-ipython 似乎没有维护,但我应该能够将其重新用于 ob-jupyter
  • @StefanvanderWalt 你知道如何将代码调整为ob-jupyter吗?
  • 很遗憾没有,抱歉。
【解决方案2】:

我在 thcoffee-msft 的答案中添加了一个 nil 结果检查以兼容 使用 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))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多