diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el index 6f6edb949..b9d1f7f23 100644 --- a/lisp/ob-eval.el +++ b/lisp/ob-eval.el @@ -37,16 +37,21 @@ (declare-function org-babel-temp-file "ob-core" (prefix &optional suffix)) (defun org-babel-eval-error-notify (exit-code stderr) - "Open a buffer to display STDERR and a message with the value of EXIT-CODE." + "Open a buffer to display STDERR and a message with the value of EXIT-CODE. +If EXIT-CODE is nil, display the message without a code." (let ((buf (get-buffer-create org-babel-error-buffer-name))) (with-current-buffer buf (goto-char (point-max)) (save-excursion (unless (bolp) (insert "\n")) (insert stderr) - (insert (format "[ Babel evaluation exited with code %S ]" exit-code)))) + (if exit-code + (insert (format "[ Babel evaluation exited with code %S ]" exit-code)) + (insert "[ Babel evaluation exited abnormally ]")))) (display-buffer buf)) - (message "Babel evaluation exited with code %S" exit-code)) + (if exit-code + (message "Babel evaluation exited with code %S" exit-code) + (message "Babel evaluation exited abnormally"))) (defun org-babel-eval (command query) "Run COMMAND on QUERY. diff --git a/lisp/ob-scheme.el b/lisp/ob-scheme.el index ef41a2ec4..a8cf7de45 100644 --- a/lisp/ob-scheme.el +++ b/lisp/ob-scheme.el @@ -65,6 +65,8 @@ (declare-function geiser-repl-exit "ext:geiser-repl" (&optional arg)) (declare-function geiser-eval--retort-output "ext:geiser-eval" (ret)) (declare-function geiser-eval--retort-result-str "ext:geiser-eval" (ret prefix)) +(declare-function geiser-eval--retort-error "ext:geiser-eval" (ret)) +(declare-function geiser-eval--retort-error-msg "ext:geiser-eval" (err)) (defcustom org-babel-scheme-null-to 'hline "Replace `null' and empty lists in scheme tables with this before returning." @@ -193,22 +195,30 @@ is true; otherwise returns the last value." #'geiser-eval-region) (point-min) (point-max)))) - (setq result (if output + (let ((err (geiser-eval--retort-error ret))) + (setq result (cond + (output (or (geiser-eval--retort-output ret) - "Geiser Interpreter produced no output") - (geiser-eval--retort-result-str ret ""))))) + "Geiser Interpreter produced no output")) + (err nil) + (t (geiser-eval--retort-result-str ret "")))) (when (not repl) (save-current-buffer (set-buffer repl-buffer) (geiser-repl-exit)) (set-process-query-on-exit-flag (get-buffer-process repl-buffer) nil) - (kill-buffer repl-buffer))))) + (kill-buffer repl-buffer)) + (when err + (let ((msg (geiser-eval--error-msg err))) + (org-babel-eval-error-notify + nil + (concat (if (listp msg) (car msg) msg) "\n")))))))))) result)) (defun org-babel-scheme--table-or-string (results) "Convert RESULTS into an appropriate elisp value. If the results look like a list or tuple, then convert them into an Emacs-lisp table, otherwise return the results as a string." - (let ((res (org-babel-script-escape results))) + (let ((res (and results (org-babel-script-escape results)))) (cond ((listp res) (mapcar (lambda (el) (if (or (null el) (eq el 'null))