diff --git a/ob-async.el b/ob-async.el index cdc06af..40b2ece 100644 --- a/ob-async.el +++ b/ob-async.el @@ -163,41 +163,42 @@ block." (let ((default-directory ,default-directory)) (,cmd ,body ',params))) `(lambda (result) - (with-current-buffer ,(current-buffer) - (let ((default-directory ,default-directory)) - (save-excursion - (cond - ((member "none" ',result-params) - (message "result silenced")) - ((member "silent" ',result-params) - (message (replace-regexp-in-string "%" "%%" (format "%S" result)))) - (t - (goto-char ,src-block-marker) - (let ((file (cdr (assq :file ',params)))) - (when file - ;; when result type is link, don't write result content to file. - (unless (member "link" ',result-params) - ;; If non-empty result and :file then write to :file. - (when result - (with-temp-file file - (insert (org-babel-format-result - result (cdr (assq :sep ',params))))))) - (setq result file)) - ;; Possibly perform post process provided its - ;; appropriate. Dynamically bind "*this*" to the - ;; actual results of the block. - (let ((post (cdr (assq :post ',params)))) - (when post - (let ((*this* (if (not file) result - (org-babel-result-to-file - file - (let ((desc (assq :file-desc ',params))) - (and desc (or (cdr desc) result))))))) - (setq result (org-babel-ref-resolve post)) - (when file - (setq result-params (remove "file" ',result-params)))))) - (org-babel-insert-result result ',result-params ',info ',new-hash ',lang)))) - (run-hooks 'org-babel-after-execute-hook))))))))))))))))) + (when (buffer-live-p (ignore-errors ,(current-buffer))) + (with-current-buffer ,(current-buffer) + (let ((default-directory ,default-directory)) + (save-excursion + (cond + ((member "none" ',result-params) + (message "result silenced")) + ((member "silent" ',result-params) + (message (replace-regexp-in-string "%" "%%" (format "%S" result)))) + (t + (goto-char ,src-block-marker) + (let ((file (cdr (assq :file ',params)))) + (when file + ;; when result type is link, don't write result content to file. + (unless (member "link" ',result-params) + ;; If non-empty result and :file then write to :file. + (when result + (with-temp-file file + (insert (org-babel-format-result + result (cdr (assq :sep ',params))))))) + (setq result file)) + ;; Possibly perform post process provided its + ;; appropriate. Dynamically bind "*this*" to the + ;; actual results of the block. + (let ((post (cdr (assq :post ',params)))) + (when post + (let ((*this* (if (not file) result + (org-babel-result-to-file + file + (let ((desc (assq :file-desc ',params))) + (and desc (or (cdr desc) result))))))) + (setq result (org-babel-ref-resolve post)) + (when file + (setq result-params (remove "file" ',result-params)))))) + (org-babel-insert-result result ',result-params ',info ',new-hash ',lang)))) + (run-hooks 'org-babel-after-execute-hook)))))))))))))))))) (defun ob-async--generate-uuid () "Generate a 32 character UUID."