如何控制 org babel 执行结果输出的长度

(defvar org-babel-result-lines-limit 10)
(defvar org-babel-result-length-limit 100)

(defun org-babel-insert-result@limit (orig-fn result &rest args)
  (if (and result (or org-babel-result-lines-limit org-babel-result-length-limit))
      (let (new-result plines plenght limit)
        (with-temp-buffer
          (insert result)
          (setq plines (if org-babel-result-lines-limit
                           (goto-line org-babel-result-lines-limit)
                         (point-max)))
          (setq plenght (if org-babel-result-length-limit
                            (min org-babel-result-length-limit (point-max))
                          (point-max)))
          (setq limit (min plines plenght))
          (setq new-result (concat (buffer-substring (point-min) limit)
                                   (if (< limit (point-max)) "..."))))
        (apply orig-fn new-result args))
    (apply orig-fn result args)))

(advice-add 'org-babel-insert-result :around #'org-babel-insert-result@limit)
#+begin_src emacs-lisp :results output
(dotimes (i 100)
  (print i))
#+end_src

#+RESULTS:
#+begin_example

0

1

2

3

...
#+end_example

UPDATE: 2021-10-09T08:41:22+08:00

判断 result 非空:

-  (if (or org-babel-result-lines-limit org-babel-result-length-limit)
+  (if (and result (or org-babel-result-lines-limit org-babel-result-length-limit))

result 为空时不应使用 new-result:

-   (apply orig-fn new-result args)))
+   (apply orig-fn result args)))
2 个赞