浏览代码

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)