1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-11-23 07:18:53 +00:00

ob-core: Fix improper results indentation

* lisp/ob-core.el (org-babel-insert-result): Fix improper results
  indentation.
* testing/lisp/test-ob.el (test-ob/preserve-results-indentation): Add
  test.

Reported-by: Chunyang Xu <mail@xuchunyang.me>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00308.html>
This commit is contained in:
Nicolas Goaziou 2017-08-13 16:20:20 +02:00
parent 5bf7730674
commit 24a76fbe57
2 changed files with 73 additions and 20 deletions

View File

@ -2269,21 +2269,22 @@ INFO may provide the values of these header arguments (in the
((member "prepend" result-params))) ; already there
(setq results-switches
(if results-switches (concat " " results-switches) ""))
(let ((wrap (lambda (start finish &optional no-escape no-newlines
inline-start inline-finish)
(when inline
(setq start inline-start)
(setq finish inline-finish)
(setq no-newlines t))
(goto-char end)
(insert (concat finish (unless no-newlines "\n")))
(goto-char beg)
(insert (concat start (unless no-newlines "\n")))
(unless no-escape
(org-escape-code-in-region (min (point) end) end))
(goto-char end)
(unless no-newlines (goto-char (point-at-eol)))
(setq end (point-marker))))
(let ((wrap
(lambda (start finish &optional no-escape no-newlines
inline-start inline-finish)
(when inline
(setq start inline-start)
(setq finish inline-finish)
(setq no-newlines t))
(let ((before-finish (marker-position end)))
(goto-char end)
(insert (concat finish (unless no-newlines "\n")))
(goto-char beg)
(insert (concat start (unless no-newlines "\n")))
(unless no-escape
(org-escape-code-in-region
(min (point) before-finish) before-finish))
(goto-char end))))
(tabulablep
(lambda (r)
;; Non-nil when result R can be turned into
@ -2337,7 +2338,7 @@ INFO may provide the values of these header arguments (in the
(insert (org-macro-escape-arguments
(org-babel-chomp result "\n"))))
(t (goto-char beg) (insert result)))
(setq end (point-marker))
(setq end (copy-marker (point) t))
;; possibly wrap result
(cond
((assq :wrap (nth 2 info))
@ -2374,11 +2375,12 @@ INFO may provide the values of these header arguments (in the
((and (not (funcall tabulablep result))
(not (member "file" result-params)))
(let ((org-babel-inline-result-wrap
;; Hard code {{{results(...)}}} on top of customization.
;; Hard code {{{results(...)}}} on top of
;; customization.
(format "{{{results(%s)}}}"
org-babel-inline-result-wrap)))
(org-babel-examplify-region beg end results-switches inline)
(setq end (point))))))
(org-babel-examplify-region
beg end results-switches inline)))))
;; Possibly indent results in par with #+results line.
(when (and (not inline) (numberp indent) (> indent 0)
;; In this case `table-align' does the work
@ -2391,6 +2393,7 @@ INFO may provide the values of these header arguments (in the
(message "Code block returned no value.")
(message "Code block produced no output."))
(message "Code block evaluation complete.")))
(set-marker end nil)
(when outside-scope (narrow-to-region visible-beg visible-end))
(set-marker visible-beg nil)
(set-marker visible-end nil)))))))

View File

@ -1405,7 +1405,57 @@ echo \"$data\"
(org-babel-execute-src-block)
(let ((case-fold-search t)) (search-forward "RESULTS"))
(list (org-get-indentation)
(progn (forward-line) (org-get-indentation)))))))
(progn (forward-line) (org-get-indentation))))))
;; Properly indent examplified blocks.
(should
(equal
" #+begin_example
0
1
2
3
4
5
6
7
8
9
#+end_example
"
(org-test-with-temp-text
" #+begin_src emacs-lisp :results output
(dotimes (i 10) (princ i) (princ \"\\n\"))
#+end_src"
(org-babel-execute-src-block)
(search-forward "begin_example")
(downcase
(buffer-substring-no-properties (line-beginning-position)
(point-max))))))
;; Properly indent "org" blocks.
(should
(equal
" #+begin_src org
0
1
2
3
4
5
6
7
8
9
#+end_src
"
(org-test-with-temp-text
" #+begin_src emacs-lisp :results output org
(dotimes (i 10) (princ i) (princ \"\\n\"))
#+end_src"
(org-babel-execute-src-block)
(search-forward "begin_src org")
(downcase
(buffer-substring-no-properties (line-beginning-position)
(point-max)))))))
(ert-deftest test-ob/safe-header-args ()
"Detect safe and unsafe header args."