浏览代码

org-babel: "code" results type for returning results in of source code syntax

This includes the required changes to org-babel.el and a
language-specific implementation for emacs-lisp.  The emacs-lisp
changes are from a patch by Benny Andresen.
Eric Schulte 15 年之前
父节点
当前提交
430a3bf6ad
共有 2 个文件被更改,包括 34 次插入22 次删除
  1. 4 1
      contrib/babel/lisp/langs/org-babel-emacs-lisp.el
  2. 30 21
      contrib/babel/lisp/org-babel.el

+ 4 - 1
contrib/babel/lisp/langs/org-babel-emacs-lisp.el

@@ -42,7 +42,10 @@ function is called by `org-babel-execute-src-block' via multiple-value-bind."
   (save-window-excursion
   (save-window-excursion
     (let ((print-level nil) (print-length nil))
     (let ((print-level nil) (print-length nil))
       (eval `(let ,(mapcar (lambda (var) `(,(car var) ',(cdr var))) vars)
       (eval `(let ,(mapcar (lambda (var) `(,(car var) ',(cdr var))) vars)
-	       ,(read (concat "(progn " body ")")))))))
+	       ,(read (concat "(progn "
+                              (if (member "code" result-params)
+                                  (concat "(pp " body ")") body)
+                              ")")))))))
 
 
 (provide 'org-babel-emacs-lisp)
 (provide 'org-babel-emacs-lisp)
 ;;; org-babel-emacs-lisp.el ends here
 ;;; org-babel-emacs-lisp.el ends here

+ 30 - 21
contrib/babel/lisp/org-babel.el

@@ -551,7 +551,12 @@ html ---- results are added inside of a #+BEGIN_HTML block.  This
 
 
 latex --- results are added inside of a #+BEGIN_LATEX block.
 latex --- results are added inside of a #+BEGIN_LATEX block.
           This is a good option if you code block will output
           This is a good option if you code block will output
-          latex formatted text."
+          latex formatted text.
+
+code ---- the results are extracted in the syntax of the source
+          code of the language being evaluated and are added
+          inside of a #+BEGIN_SRC block with the source-code
+          language set appropriately."
   (if (stringp result)
   (if (stringp result)
       (progn
       (progn
         (setq result (org-babel-clean-text-properties result))
         (setq result (org-babel-clean-text-properties result))
@@ -572,25 +577,26 @@ latex --- results are added inside of a #+BEGIN_LATEX block.
       (save-excursion
       (save-excursion
 	(let ((existing-result (org-babel-where-is-src-block-result t)))
 	(let ((existing-result (org-babel-where-is-src-block-result t)))
 	  (when existing-result (goto-char existing-result) (forward-line 1)))
 	  (when existing-result (goto-char existing-result) (forward-line 1)))
-        (if (stringp result) ;; assume the result is a table if it's not a string
-            (if (member "file" insert)
-                (insert result)
-              (if (member "html" insert)
-                  (insert (format "#+BEGIN_HTML\n%s#+END_HTML\n" result))
-                (if (member "latex" insert)
-                    (insert (format "#+BEGIN_LaTeX\n%s#+END_LaTeX\n" result))
-                  (if (or (member "raw" insert) (member "org" insert))
-                      (progn (save-excursion (insert result))
-                             (if (org-at-table-p) (org-cycle)))
-                    (org-babel-examplize-region (point) (progn (insert result) (point)))))))
-          (progn
-            (insert
-             (concat (orgtbl-to-orgtbl
-                      (if (and (listp (car result)) (listp (cdr (car result))))
-                          result (list result))
-                      '(:fmt (lambda (cell) (format "%S" cell)))) "\n"))
-            (forward-line -1)
-            (org-cycle))))
+        (cond
+         ;; assume the result is a table if it's not a string
+         ((not (stringp result))
+          (insert (concat (orgtbl-to-orgtbl
+                           (if (and (listp (car result)) (listp (cdr (car result))))
+                               result (list result))
+                           '(:fmt (lambda (cell) (format "%S" cell)))) "\n"))
+          (forward-line -1) (org-cycle))
+         ((member "file" insert)
+          (insert result))
+         ((member "html" insert)
+          (insert (format "#+BEGIN_HTML\n%s#+END_HTML\n" result)))
+         ((member "latex" insert)
+          (insert (format "#+BEGIN_LaTeX\n%s#+END_LaTeX\n" result)))
+         ((member "code" insert)
+          (insert (format "#+BEGIN_SRC %s\n%s#+END_SRC\n" lang result)))
+         ((or (member "raw" insert) (member "org" insert))
+          (save-excursion (insert result)) (if (org-at-table-p) (org-cycle)))
+         (t
+          (org-babel-examplize-region (point) (progn (insert result) (point))))))
       (message "finished"))))
       (message "finished"))))
 
 
 (defun org-babel-result-to-org-string (result)
 (defun org-babel-result-to-org-string (result)
@@ -621,6 +627,9 @@ relies on `org-babel-insert-result'."
          ((looking-at "#\\+begin_example")
          ((looking-at "#\\+begin_example")
           (search-forward "#+end_example" nil t)
           (search-forward "#+end_example" nil t)
           (forward-line 1))
           (forward-line 1))
+         ((looking-at "#\\+begin_src")
+          (search-forward "#+end_src" nil t)
+          (forward-line 1))
          (t (progn (while (looking-at "\\(: \\|\\[\\[\\)")
          (t (progn (while (looking-at "\\(: \\|\\[\\[\\)")
                      (forward-line 1))))))
                      (forward-line 1))))))
       (point))))
       (point))))
@@ -658,7 +667,7 @@ elements of PLISTS override the values of previous element.  This
 takes into account some special considerations for certain
 takes into account some special considerations for certain
 parameters when merging lists."
 parameters when merging lists."
   (let ((results-exclusive-groups
   (let ((results-exclusive-groups
-	 '(("file" "vector" "scalar" "raw" "org" "html" "latex")
+	 '(("file" "vector" "scalar" "raw" "org" "html" "latex" "code")
 	   ("replace" "silent")
 	   ("replace" "silent")
 	   ("output" "value")))
 	   ("output" "value")))
 	params results exports tangle vars var ref)
 	params results exports tangle vars var ref)