瀏覽代碼

new :results behavior

Dan Davison 14 年之前
父節點
當前提交
a871c6a77c
共有 1 個文件被更改,包括 29 次插入19 次删除
  1. 29 19
      lisp/ob.el

+ 29 - 19
lisp/ob.el

@@ -405,17 +405,23 @@ block."
 			 (if (nth 4 info) (format " (%s)" (nth 4 info)) ""))
 		(setq result
 		      ((lambda (result)
-			 (cond
-			  ((member "file" result-params)
-			   (or (cdr (assoc :file params))
-			       (if (stringp result) result)))
-			  ((and (eq (cdr (assoc :result-type params)) 'value)
-				(or (member "vector" result-params)
-				    (member "table" result-params))
-				(not (listp result)))
-			   (list (list result)))
-			  (t result)))
+			 (if (and (eq (cdr (assoc :result-type params)) 'value)
+				  (or (member "vector" result-params)
+				      (member "table" result-params))
+				  (not (listp result)))
+			     (list (list result)) result))
 		       (funcall cmd body params)))
+		;; if non-empty result and :file then write to :file
+		(flet ((echo-res (result)
+                         (if (stringp result) result (format "%S" result))))
+		  (when (cdr (assoc :file params))
+		    (when result
+		      (with-temp-file (cdr (assoc :file params))
+			(if (stringp result)
+			    (insert result)
+			  (insert (orgtbl-to-generic
+				   result '(:sep "\t" :fmt echo-res))))))
+		    (setq result (cdr (assoc :file params)))))
 		(org-babel-insert-result
 		 result result-params info new-hash indent lang)
 		(run-hooks 'org-babel-after-execute-hook)
@@ -1538,15 +1544,19 @@ code ---- the results are extracted in the syntax of the source
   "Convert RESULT into an `org-mode' link.
 If the `default-directory' is different from the containing
 file's directory then expand relative links."
-  (format
-   "[[file:%s]]"
-   (if (and default-directory
-            buffer-file-name
-            (not (string= (expand-file-name default-directory)
-                          (expand-file-name
-                           (file-name-directory buffer-file-name)))))
-       (expand-file-name result default-directory)
-     result)))
+  (flet ((cond-exp (file)
+	  (if (and default-directory
+		   buffer-file-name
+		   (not (string= (expand-file-name default-directory)
+				 (expand-file-name
+				  (file-name-directory buffer-file-name)))))
+	      (expand-file-name file default-directory)
+	    file)))
+    (if (stringp result)
+	(format "[[file:%s]]" (cond-exp result))
+      (when (and (listp result) (= 2 (length result))
+		 (stringp (car result)) (stringp (cadr result)))
+	(format "[[file:%s][%s]]" (car result) (cadr result))))))
 
 (defun org-babel-examplize-region (beg end &optional results-switches)
   "Comment out region using the ': ' org example quote."