From 091bf0251454d4a9e00fd7054a25b0097822253a Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Tue, 26 Feb 2013 21:23:37 +0100 Subject: [PATCH] ob-core.el: Do not ask for confirmation if cached value is current MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ob-core.el (org-babel-execute-src-block): Do not run `org-babel-confirm-evaluateĀ“ if source block has a cache and the cache value is current (there is no evaluation involved in this case). --- lisp/ob-core.el | 71 +++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 3278bf91a..a6124e2ec 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -521,21 +521,23 @@ Optionally supply a value for PARAMS which will be merged with the header arguments specified at the front of the source code block." (interactive) - (let ((info (or info (org-babel-get-src-block-info)))) - (when (org-babel-confirm-evaluate - (let ((i info)) - (setf (nth 2 i) (org-babel-merge-params (nth 2 info) params)) - i)) + (let* ((info (or info (org-babel-get-src-block-info))) + (params (if params + (org-babel-process-params + (org-babel-merge-params (nth 2 info) params)) + (nth 2 info))) + (cache-p (and (not arg) (cdr (assoc :cache params)) + (string= "yes" (cdr (assoc :cache params))))) + (new-hash (when cache-p (org-babel-sha1-hash info))) + (old-hash (when cache-p (org-babel-current-result-hash))) + (cache-current (and (not arg) new-hash (equal new-hash old-hash)))) + (when (or cache-current-p + (org-babel-confirm-evaluate + (let ((i info)) + (setf (nth 2 i) (org-babel-merge-params (nth 2 info) params)) + i))) (let* ((lang (nth 0 info)) - (params (if params - (org-babel-process-params - (org-babel-merge-params (nth 2 info) params)) - (nth 2 info))) - (cache? (and (not arg) (cdr (assoc :cache params)) - (string= "yes" (cdr (assoc :cache params))))) (result-params (cdr (assoc :result-params params))) - (new-hash (when cache? (org-babel-sha1-hash info))) - (old-hash (when cache? (org-babel-current-result-hash))) (body (setf (nth 1 info) (if (org-babel-noweb-p params :eval) (org-babel-expand-noweb-references info) @@ -562,7 +564,7 @@ block." (funcall lang-check (symbol-name (cdr (assoc lang org-src-lang-modes)))) (error "No org-babel-execute function for %s!" lang)))) - (if (and (not arg) new-hash (equal new-hash old-hash)) + (if cache-current-p (save-excursion ;; return cached result (goto-char (org-babel-where-is-src-block-result nil info)) (end-of-line 1) (forward-char 1) @@ -576,27 +578,26 @@ block." (progn (funcall cmd body params) (message "result silenced")) - (setq result - ((lambda (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 - (when (cdr (assoc :file params)) - (when result - (with-temp-file (cdr (assoc :file params)) - (insert - (org-babel-format-result - result (cdr (assoc :sep (nth 2 info))))))) - (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) - result - ))) + (setq result + ((lambda (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 + (when (cdr (assoc :file params)) + (when result + (with-temp-file (cdr (assoc :file params)) + (insert + (org-babel-format-result + result (cdr (assoc :sep (nth 2 info))))))) + (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) + result))) (setq call-process-region 'org-babel-call-process-region-original)))))) (defun org-babel-expand-body:generic (body params &optional var-lines)