From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ernesto Durante Subject: babel: ob-C with Visual C++ and compilation-mode Date: Mon, 04 Aug 2014 18:16:11 +0200 Message-ID: <878un4ut6c.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XEKw0-0002oQ-60 for emacs-orgmode@gnu.org; Mon, 04 Aug 2014 12:16:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XEKvr-0004mj-12 for emacs-orgmode@gnu.org; Mon, 04 Aug 2014 12:16:28 -0400 Received: from mail-wi0-x22f.google.com ([2a00:1450:400c:c05::22f]:49648) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XEKvq-0004kR-NH for emacs-orgmode@gnu.org; Mon, 04 Aug 2014 12:16:18 -0400 Received: by mail-wi0-f175.google.com with SMTP id ho1so5415950wib.2 for ; Mon, 04 Aug 2014 09:16:17 -0700 (PDT) Received: from localhost.localdomain (col74-1-88-183-113-172.fbx.proxad.net. [88.183.113.172]) by mx.google.com with ESMTPSA id di7sm44526463wjb.34.2014.08.04.09.16.15 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Aug 2014 09:16:15 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org 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