Hi,
I am using ob-C with gcc and Microsoft Visual C++. These two compilers
have two different behaviours for outputting errors. Gcc uses the
standard error output and Visual C++ uses the regular output.
Under Windows, errors are not displayed because of the way
org-babel-eval is coded. To work on both platforms, the standard
output must be concatenated with the standard error.
I modified the org-babel-eval in the following way.
diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el
index 057590f..1a93460 100644
--- a/lisp/ob-eval.el
+++ b/lisp/ob-eval.el
@@ -53,12 +53,20 @@ STDERR with `org-babel-eval-error-notify'."
(setq exit-code
(org-babel--shell-command-on-region
(point-min) (point-max) cmd err-buff))
- (if (or (not (numberp exit-code)) (> exit-code 0))
- (progn
- (with-current-buffer err-buff
- (org-babel-eval-error-notify exit-code (buffer-string)))
- nil)
- (buffer-string)))))
+ (let ((temp-buffer-str (buffer-string))) ;;temp-buffer-str holds
standard output + body
+ (if (or (not (numberp exit-code)) (> exit-code 0))
+ (progn
+ (with-current-buffer err-buff
+ (org-babel-eval-error-notify exit-code (format "%s%s"
temp-buffer-str (buffer-string)))
+ )
+ (save-excursion
+ (when (get-buffer org-babel-error-buffer-name)
+ (with-current-buffer org-babel-error-buffer-name
+ (compilation-mode)
+ (read-only-mode 0)
+ )))
+ nil)
+ temp-buffer-str)))))
One suggestion. It will be nice to put the error buffer in
compilation-mode, this way errors are highlighted and we can jump
directly into the source code. I modified org-babel-eval to launch the
compilation mode in case of errors. I also removed the read-only
attribute, else the buffer content of org-babel-error-buffer-name cannot
be erased.
Clearly, it's not a good patch because org-babel-eval seems to be
a core function in babel. Maybe for ob-C, this function should be
replaced by a new function.
Thanks to everyone for orgmode and babel to exist.
Best
Ernesto