From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ernesto Durante Subject: Re: [PATCH] babel: ob-C with Visual C++ and compilation-mode Date: Mon, 25 Aug 2014 18:35:36 +0200 Message-ID: <87bnr8zfvr.fsf_-_@gmail.com> References: <878un4ut6c.fsf@gmail.com> <87wqa1cii9.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37963) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XLxFF-0006n5-VO for emacs-orgmode@gnu.org; Mon, 25 Aug 2014 12:36:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XLxF6-00083H-GV for emacs-orgmode@gnu.org; Mon, 25 Aug 2014 12:35:49 -0400 Received: from mail-we0-x22e.google.com ([2a00:1450:400c:c03::22e]:48313) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XLxF6-00082u-5j for emacs-orgmode@gnu.org; Mon, 25 Aug 2014 12:35:40 -0400 Received: by mail-we0-f174.google.com with SMTP id x48so13551498wes.19 for ; Mon, 25 Aug 2014 09:35:39 -0700 (PDT) In-Reply-To: <87wqa1cii9.fsf@gmail.com> (Eric Schulte's message of "Sun, 17 Aug 2014 22:40:52 -0400") 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: Eric Schulte Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Eric Schulte writes: Hi Eric, You will find in attachment three patches + First patch, modify org-babel-eval to load compilation-mode in case of errors + Second patch, modify org-babel-eval to deal with Microsoft visual C++ errors by concatenating the standard output with the standard error + Third patch, add to ob-C the missing function org-babel-expand-body:cpp Best Ernesto --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-org-babel-eval-compilation-mode-to-deal-with-errors-.patch >From 3e4f163a2b357c58a52b7811539ff4032d432aaf Mon Sep 17 00:00:00 2001 From: Ernesto Durante Date: Mon, 25 Aug 2014 17:27:24 +0200 Subject: [PATCH 1/3] org-babel-eval: compilation-mode to deal with errors in (C/C++/D) --- lisp/ob-eval.el | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el index 057590f..9fbbb42 100644 --- a/lisp/ob-eval.el +++ b/lisp/ob-eval.el @@ -57,6 +57,12 @@ STDERR with `org-babel-eval-error-notify'." (progn (with-current-buffer err-buff (org-babel-eval-error-notify exit-code (buffer-string))) + (save-excursion + (when (get-buffer org-babel-error-buffer-name) + (with-current-buffer org-babel-error-buffer-name + (compilation-mode) + ;;compilation-mode enforces read-only + (read-only-mode 0)))) nil) (buffer-string))))) -- 1.8.3.1 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-org-babel-eval-showing-Microsoft-Visual-C-errors.patch >From 9e306dbb39325998a5149840b229ffa802ec40e9 Mon Sep 17 00:00:00 2001 From: Ernesto Durante Date: Mon, 25 Aug 2014 17:54:51 +0200 Subject: [PATCH 2/3] org-babel-eval: showing Microsoft Visual C++ errors --- lisp/ob-eval.el | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el index 9fbbb42..0e69583 100644 --- a/lisp/ob-eval.el +++ b/lisp/ob-eval.el @@ -53,18 +53,21 @@ 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))) - (save-excursion - (when (get-buffer org-babel-error-buffer-name) - (with-current-buffer org-babel-error-buffer-name - (compilation-mode) - ;;compilation-mode enforces read-only - (read-only-mode 0)))) - nil) - (buffer-string))))) + (let ((outb-str (buffer-string))) + ;;outb-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 + (concat outb-str (buffer-string)))) + (save-excursion + (when (get-buffer org-babel-error-buffer-name) + (with-current-buffer org-babel-error-buffer-name + (compilation-mode) + ;;compilation-mode enforces read-only + (read-only-mode 0)))) + nil) + outb-str))))) (defun org-babel-eval-read-file (file) "Return the contents of FILE as a string." -- 1.8.3.1 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0003-ob-C-fix-missing-function-org-babel-expand-body-cpp.patch >From c93e02a52d57a5eeb7b9b8aba04c6764f8122d5c Mon Sep 17 00:00:00 2001 From: Ernesto Durante Date: Mon, 25 Aug 2014 18:16:01 +0200 Subject: [PATCH 3/3] ob-C: fix missing function org-babel-expand-body:cpp --- lisp/ob-C.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ob-C.el b/lisp/ob-C.el index 2e146d4..076276e 100644 --- a/lisp/ob-C.el +++ b/lisp/ob-C.el @@ -82,6 +82,11 @@ is currently being evaluated.") This function calls `org-babel-execute:C++'." (org-babel-execute:C++ body params)) +(defun org-babel-expand-body:cpp (body params) + "Expand a block of C++ code with org-babel according to it's +header arguments." + (org-babel-expand-body:C++ body params)) + (defun org-babel-execute:C++ (body params) "Execute a block of C++ code with org-babel. This function is called by `org-babel-execute-src-block'." -- 1.8.3.1 --=-=-= Content-Type: text/plain > Hi Ernesto, > > This looks like a good change and I'd like to apply it. Could you > re-submit this commit after doing the following. > > 1. ensure no lines go beyond 80 characters in length > 2. remove all lines which include only closing parens > (such lines are generally considered bad lisp style) > 3. commit to your local git repository with "git commit" > 4. format the patch with "git format-patch" > > Thanks, > Eric > > Ernesto Durante writes: > >> 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 >> --=-=-=--