[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [PATCH] babel: ob-C with Visual C++ and compilation-mode
From: |
Ernesto Durante |
Subject: |
Re: [O] [PATCH] babel: ob-C with Visual C++ and compilation-mode |
Date: |
Mon, 25 Aug 2014 18:35:36 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.92 (gnu/linux) |
Eric Schulte <address@hidden> 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
>From 3e4f163a2b357c58a52b7811539ff4032d432aaf Mon Sep 17 00:00:00 2001
From: Ernesto Durante <address@hidden>
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
>From 9e306dbb39325998a5149840b229ffa802ec40e9 Mon Sep 17 00:00:00 2001
From: Ernesto Durante <address@hidden>
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
>From c93e02a52d57a5eeb7b9b8aba04c6764f8122d5c Mon Sep 17 00:00:00 2001
From: Ernesto Durante <address@hidden>
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
> 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 <address@hidden> 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
>>
Re: [O] babel: ob-C with Visual C++ and compilation-mode, Eric Schulte, 2014/08/21