ソースを参照

intuitive code block post processing w/file results

* lisp/ob-core.el (org-babel-execute-src-block): Make sure we process
  file results before they are passed to the post-processing code block,
  and not afterwards.  Tangles these two header arguments in the code,
  but makes for more intuitive behavior and enables important use cases.
Eric Schulte 12 年 前
コミット
3932efdf8e
1 ファイル変更14 行追加5 行削除
  1. 14 5
      lisp/ob-core.el

+ 14 - 5
lisp/ob-core.el

@@ -612,11 +612,6 @@ block."
 				      (not (listp result)))
 				 (list (list result)) result))
 			   (funcall cmd body params)))
-		    ;; possibly perform post process provided its appropriate
-		    (when (cdr (assoc :post params))
-		      (let ((*this* result))
-			(setq result (org-babel-ref-resolve
-				      (cdr (assoc :post params))))))
 		    ;; if non-empty result and :file then write to :file
 		    (when (cdr (assoc :file params))
 		      (when result
@@ -625,6 +620,20 @@ block."
 			   (org-babel-format-result
 			    result (cdr (assoc :sep (nth 2 info)))))))
 		      (setq result (cdr (assoc :file params))))
+		    ;; possibly perform post process provided its appropriate
+		    (when (cdr (assoc :post params))
+		      (let ((*this* (if (cdr (assoc :file params))
+					(org-babel-result-to-file
+					 (cdr (assoc :file params))
+					 (when (assoc :file-desc params)
+					   (or (cdr (assoc :file-desc params))
+					       result)))
+				      result)))
+			(setq result (org-babel-ref-resolve
+				      (cdr (assoc :post params))))
+			(when (cdr (assoc :file params))
+			  (setq result-params
+				(remove "file" result-params)))))
 		    (org-babel-insert-result
 		     result result-params info new-hash indent lang)
 		    (run-hooks 'org-babel-after-execute-hook)