Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

>> Could you recreate the commit so it is self-contained?
>
> That should be it.

Thank you. I applied your patch with the following changes:

  - I wrote a proper (according to our usage) commit message;

  - I slightly refactored the code;

  - I required an expected value for :show-process, much like other head
arguments. So a bare ":show-process" means ":show-process nil" and,
therefore, doesn't show process. Use ":show-process t" instead.

BTW, could you document the new feature in
?

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Frederick Giasson

Hi Nicolas,


Could you recreate the commit so it is self-contained?


That should be it.

Thanks,

Fred

>From e19c358f9d4cab9b22c3e4e3bf6b8f6298e61b0e Mon Sep 17 00:00:00 2001
From: Frederick Giasson 
Date: Fri, 18 Nov 2016 12:01:02 -0500
Subject: [PATCH] Multiple improvements of ob-clojure have been performed in
 this commit.

  (1) better error handling. Errors and exceptions are output in the results 
section of a org-mode document. They were silenced with the previous version.
  (2) A new header parameter has been created: ":show-process" what will output 
the underlying NREPL processing in a new window + buffer
  (3) new setting "org-babel-clojure-sync-nrepl-timeout" to specify the Cider 
nrepl timeout. 'nil' means that it will never timeout

Note that the behavior of ob-clojure *did not change* with these modications.

Only the function (org-babel-execute:clojure) has been modified.
---
 etc/ORG-NEWS   |  42 ++-
 lisp/ob-clojure.el | 117 ++---
 2 files changed, 134 insertions(+), 25 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index a360e35..5a5be53 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -23,8 +23,48 @@ into
 
 : (file (lambda () (sexp)))
 
-
 ** New features
+*** Babel
+ Org-babel-clojure, new setting 'org-babel-clojure-sync-nrepl-timeout'
+
+Creation of a new setting to specify the Cider timeout. By setting the 
=org-babel-clojure-sync-nrepl-timeout=
+setting option. The value is in seconds and if set to =nil= then no timeout 
will occur.
+
+#+BEGIN_SRC emacs-lisp
+  ; Disable Cider's timeout
+  (setq org-babel-clojure-sync-nrepl-timeout nil)
+
+  ; Set the timeout to 20 seconds
+  (setq org-babel-clojure-sync-nrepl-timeout 20)
+#+END_SRC
+
+
+ Org-babel-clojure :show-process
+A new block code header has been created for Org-babel-clojure that enables 
developers to output the process of an ongoing process into a new window/buffer.
+
+You can tell Org-babel-clojure to output the process of a running code block.
+
+To show that output you only have to specify the =:show-process= option in the 
code block's header like this:
+
+#+begin_example
+#+BEGIN_SRC clojure :results output :show-process
+  (dotimes [n 10]
+(println n ".")
+(Thread/sleep 500))
+#+END_SRC
+#+end_example
+
+If =:show-process= is specified that way, then when you will run the
+code using =C-c C-c= a new window will open in Emacs. Everything that is
+output by the REPL will immediately be added to that new window.
+
+When the processing of the code is finished, then the window and its buffer 
will be closed and the results will be reported in the
+=#+RESULTS= section. 
+
+Note that the =:results= parameter's behavior is *not* changed. If =silent= is 
specified, then no result will be displayed. If =output= is
+specified then all the output from the window will appears in the
+results section. If =value= is specified, then only the last returned
+value of the code will be displayed in the results section.
 
 *** Horizontal rules are no longer ignored in LaTeX table math mode
 
diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 72ea77d..070e0ca 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2009-2016 Free Software Foundation, Inc.
 
-;; Author: Joel Boehland, Eric Schulte, Oleh Krehel
+;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson
 ;;
 ;; Keywords: literate programming, reproducible research
 ;; Homepage: http://orgmode.org
@@ -45,6 +45,9 @@
 (declare-function cider-current-connection "ext:cider-client" ( type))
 (declare-function cider-current-session "ext:cider-client" ())
 (declare-function nrepl-dict-get "ext:nrepl-client" (dict key))
+(declare-function nrepl-dict-put "ext:nrepl-client" (dict key value))
+(declare-function nrepl--merge "ext:nrepl-client" (dict1 dict2))
+(declare-function nrepl-request:eval "ext:nrepl-client" (input callback 
connection))
 (declare-function nrepl-sync-request:eval "ext:nrepl-client"
  (input connection session  ns))
 (declare-function org-trim "org" (s  keep-lead))
@@ -56,6 +59,15 @@
 (defvar org-babel-default-header-args:clojure '())
 (defvar org-babel-header-args:clojure '((package . :any)))
 
+(defcustom org-babel-clojure-sync-nrepl-timeout 10
+  "Timeout value, in seconds, of a Clojure sync call. 
+   If the value is nil, timeout is disabled."
+  :type 'integer
+  :version "25.1"
+  :package-version '(Org . "9.0")  
+  :safe #'wholenump  
+  :group 'org-babel)
+
 (defcustom org-babel-clojure-backend
   (cond ((featurep 'cider) 'cider)
(t 'slime))
@@ -84,34 +96,91 @@
   body)))
 
 (defun org-babel-execute:clojure (body params)
-  "Execute a block of Clojure code with Babel."
+  "Execute a block of Clojure code with Babel. 
+   The underlying process performed by the code block can be output 
+   using the :show-process parameter."
   (let ((expanded 

Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> Hi Nicolas,
>>In end of data:
>>ob-clojure.el:180:1:Warning: the following functions are not known to be
>>defined: nrepl-request:eval, nrepl--merge, nrepl-dict-put
>>
>> Could you look into it? In particular, "nrepl--merge" looks like an
>> internal function from nrepl. Is it safe to use it?
>
> Yes, these functions are part of Cider's nrepl. Yes, they should be
> safe. Also, they are only used in a context where the code block uses
> Cider as the backend, so I guess it is right to use them in that
> context. Thoughts?

They should be declared at the beginning of "ob-clojure.el" (see
nrep-dict-get for example).

Also an internal function means its signature can change, or it can be
removed, without prior notice. If there is no "public" API for
"nrepl--merge", then so be it.


Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> If I have to add it again, should I recreate the commit or simply
> submit another patch?

Could you recreate the commit so it is self-contained?

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Frederick Giasson

Hi Guys,


It looks like this warning results from a defcustom for this variable
not being included in the patch (and AFAICT it should be).


Sorry but I was confused. The documentation for this setting was 
documented in Worg, but it was not yet part of the package.


Here is the commit related to that.

Thanks,

Fred
>From e68c5611f00eb37783205352d68efb7feccae8ab Mon Sep 17 00:00:00 2001
From: Frederick Giasson 
Date: Fri, 18 Nov 2016 10:29:16 -0500
Subject: [PATCH] Adding the defcustom for the
 "org-babel-clojure-sync-nrepl-timeout" variable used to configure the nrepl
 execution timeout.

---
 lisp/ob-clojure.el | 9 +
 1 file changed, 9 insertions(+)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index f78dd69..6dc9d90 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -56,6 +56,15 @@
 (defvar org-babel-default-header-args:clojure '())
 (defvar org-babel-header-args:clojure '((package . :any)))
 
+(defcustom org-babel-clojure-sync-nrepl-timeout 10
+  "Timeout value, in seconds, of a Clojure sync call. 
+   If the value is nil, timeout is disabled."
+  :type 'integer
+  :version "25.1"
+  :package-version '(Org . "9.0")  
+  :safe #'wholenump  
+  :group 'org-babel)
+
 (defcustom org-babel-clojure-backend
   (cond ((featurep 'cider) 'cider)
(t 'slime))
-- 
1.9.5.msysgit.0



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Frederick Giasson

Hi Nicolas,

   In end of data:
   ob-clojure.el:180:1:Warning: the following functions are not known to be
   defined: nrepl-request:eval, nrepl--merge, nrepl-dict-put

Could you look into it? In particular, "nrepl--merge" looks like an
internal function from nrepl. Is it safe to use it?


Yes, these functions are part of Cider's nrepl. Yes, they should be 
safe. Also, they are only used in a context where the code block uses 
Cider as the backend, so I guess it is right to use them in that 
context. Thoughts?


Thanks,

Fred



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Frederick Giasson

Hi,


It looks like this warning results from a defcustom for this variable
not being included in the patch (and AFAICT it should be).


Humm, I thought that it was already part of Org-mode 8.x (something I 
submitted a way back). Let me check that.


If I have to add it again, should I recreate the commit or simply submit 
another patch?


Thanks,

Fred



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-18 Thread Aaron Ecay
Hi Nicolas, hi all,

2016ko azaroak 17an, Nicolas Goaziou-ek idatzi zuen:
> 
> Hello,
> 
> Frederick Giasson  writes:
> 
>> I am still waiting for FSF's signature. Should come in soon I guess.
> 
> I applied your patch on a local branch, but compilation issues the
> following warnings:
> 
> In toplevel form:
> ob-clojure.el:86:1:Warning: Unused lexical variable 
> `nrepl-sync-request-timeout'
> 
>   In org-babel-execute:clojure:
>   ob-clojure.el:149:34:Warning: reference to free variable
>   `org-babel-clojure-sync-nrepl-timeout'

It looks like this warning results from a defcustom for this variable
not being included in the patch (and AFAICT it should be).

-- 
Aaron Ecay



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-17 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> I am still waiting for FSF's signature. Should come in soon I guess.

I applied your patch on a local branch, but compilation issues the
following warnings:

In toplevel form:
ob-clojure.el:86:1:Warning: Unused lexical variable `nrepl-sync-request-timeout'

  In org-babel-execute:clojure:
  ob-clojure.el:149:34:Warning: reference to free variable
  `org-babel-clojure-sync-nrepl-timeout'

  In end of data:
  ob-clojure.el:180:1:Warning: the following functions are not known to be
  defined: nrepl-request:eval, nrepl--merge, nrepl-dict-put

Could you look into it? In particular, "nrepl--merge" looks like an
internal function from nrepl. Is it safe to use it?

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-17 Thread Frederick Giasson

Hi Nicolas,


Great! Please let me know once the process is complete, so that I can
apply your patch in master.


I am still waiting for FSF's signature. Should come in soon I guess.

Thanks,

Fred



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-14 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> I made all the changes requested and merged in a single commit. See
> the attachment.

Thank you.

> I did as of today. Waiting to get a reply from them on that.

Great! Please let me know once the process is complete, so that I can
apply your patch in master.

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-14 Thread Frederick Giasson

Hi Nicolas,


Thank you. Some nit-picks follow.


I made all the changes requested and merged in a single commit. See the 
attachment.



BTW, did you sign FSF papers already? I cannot find any reference in
org-contribute.org?


I did as of today. Waiting to get a reply from them on that.

Thanks,

Fred
>From 3eb282c554f8099627b748e7c4eb07d0e810a2ae Mon Sep 17 00:00:00 2001
From: Frederick Giasson 
Date: Mon, 14 Nov 2016 15:43:16 -0500
Subject: [PATCH] Multiple improvements of ob-clojure have been performed in
 this commit.

  (1) better error handling. Errors and exceptions are output in the results 
section of a org-mode document. They were silenced with the previous version.
  (2) A new header parameter has been created: ":show-process" what will output 
the underlying NREPL processing in a new window + buffer

Note that the behavior of ob-clojure *did not change* with these modications.

Only the function (org-babel-execute:clojure) has been modified.
---
 etc/ORG-NEWS   |  32 
 lisp/ob-clojure.el | 105 +
 2 files changed, 113 insertions(+), 24 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index a360e35..95c97a7 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -27,6 +27,38 @@ into
 ** New features
 
 *** Horizontal rules are no longer ignored in LaTeX table math mode
+*** Org-babel-clojure :show-process
+
+A new block code header has been created for Org-babel-clojure that enables
+developers to output the process of an ongoing process into a new 
window/buffer.
+
+You can tell Org-babel-clojure to output the process of a running code block.
+
+To show that output you only have to specify the =:show-process= option
+in the code block's header like this:
+
+#+begin_example
+#+BEGIN_SRC clojure :results output :show-process
+  (dotimes [n 10]
+(println n ".")
+(Thread/sleep 500))
+#+END_SRC
+#+end_example
+
+If =:show-process= is specified that way, then when you will run the code using
+=C-c C-c= a new window will open in Emacs. Everything that is output
+by the REPL will immediately be added to that new window.
+
+When the processing of the code is finished, then the window and its
+buffer will be closed and the results will be reported in the
+=#+RESULTS= section. 
+
+Note that the =:results= parameter's behavior is *not* changed. If
+=silent= is specified, then no result will be displayed. If =output= is
+specified then all the output from the window will appears in the results
+section. If =value= is specified, then only the last returned value of
+the code will be displayed in the results section.
+
 
 * Version 9.0
 
diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 72ea77d..f78dd69 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2009-2016 Free Software Foundation, Inc.
 
-;; Author: Joel Boehland, Eric Schulte, Oleh Krehel
+;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson
 ;;
 ;; Keywords: literate programming, reproducible research
 ;; Homepage: http://orgmode.org
@@ -84,34 +84,91 @@
   body)))
 
 (defun org-babel-execute:clojure (body params)
-  "Execute a block of Clojure code with Babel."
+  "Execute a block of Clojure code with Babel. 
+   The underlying process performed by the code block can be output 
+   using the :show-process parameter."
   (let ((expanded (org-babel-expand-body:clojure body params))
-   result)
+(sbuffer "*Clojure Show Process Sub Buffer*")
+   (show (assq :show-process params))
+   (response (list 'dict))
+status
+result)
 (cl-case org-babel-clojure-backend
   (cider
(require 'cider)
(let ((result-params (cdr (assq :result-params params
-(setq result
-  (nrepl-dict-get
-   (nrepl-sync-request:eval
-expanded (cider-current-connection) (cider-current-session))
-   (if (or (member "output" result-params)
-   (member "pp" result-params))
-   "out"
- "value")
-  (slime
-   (require 'slime)
-   (with-temp-buffer
-(insert expanded)
-(setq result
-  (slime-eval
-   `(swank:eval-and-grab-output
- ,(buffer-substring-no-properties (point-min) (point-max)))
-   (cdr (assq :package params)))
-(org-babel-result-cond (cdr (assq :result-params params))
-  result
-  (condition-case nil (org-babel-script-escape result)
-   (error result)
+ ;; Check if the user want show the process in an output buffer/window.
+ (when show
+   ;; Create a new window with the show output buffer.
+   (switch-to-buffer-other-window sbuffer)
+
+   ;; Run the Clojure code in nREPL.
+   (nrepl-request:eval
+expanded 
+(lambda (resp) 
+  (when (member "out" resp)

Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-10 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> No, what are the FSF papers?

See . Since the
patches no longer apply as tiny changes, we need these papers signed to
move forward.

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-10 Thread Frederick Giasson

Hi Nicolas,


I noticed that you included some of my previous fixes in
Org-babel-clojure, so here are the latest work I did. I updated it to
work with the latest code on Git. I did two things with these fixes:


   (1) I better handle any possible error or exceptions that may be
raised by nREPL by displaying any errors in the RESULTS section

   (2) I added a new header option called ":show-process" which create
a new window/buffer to display anything that is outputted by the
Clojure code in the code block.


In the past, I did refer to this as ":async", but as we discussed at
that time, it really was not async. So I changed the naming of this
new feature to remove this ambiguity.

OK.


In any case, I did update the worg documentation accordingly too.

Finally I updated ORG-NEWS in the 9.1 section.

I think you can merge patch 2 and 3. ORG-NEWS updates usually do not
require their own


See the patch files attached to this email.

Thank you. Some nit-picks follow.


Subject: [PATCH 1/2] Better error handling with nREPL. Displaying any possible
  errors or exceptions in the result block. Adding a new :show-process header
  option such that the underlying process of a Clojure block code get output in
  a new buffer and a new window such that the developer can see what is going
  on.

Could you provide a proper commit message? In particular, each modified
function has to be specified there.

  (defun org-babel-execute:clojure (body params)
-  "Execute a block of Clojure code with Babel."
+  "Execute a block of Clojure code with Babel. The underlying process 
performed by the

"The underlying..." has to go on the line below.


+  code block can be output using the :show-process parameter"
(let ((expanded (org-babel-expand-body:clojure body params))
-   result)
+(sbuffer "*Clojure Show Process Sub Buffer*")
+(show (if (assoc :show-process params) t nil))

   (show (assq :show-process params))


+(response (cons 'dict nil))

   (response (list 'dict))


+status
+result)
+ ; Check if the user want show the process in an output buffer/window

Need ";;" instead of ";". Also, full stop missing at the end.


+ (when show
+   ; Create a new window with the show output buffer

   ;; Create output buffer.


+   (switch-to-buffer-other-window sbuffer)
+
+   ; Run the Clojure code in nREPL

Ditto.


+   (nrepl-request:eval
+expanded
+(lambda (resp)
+  (when (member "out" resp)
+; Print the output of the nREPL in the output buffer

Ditto.


+(princ (nrepl-dict-get resp "out") (get-buffer sbuffer)))
+  (when (member "ex" resp)
+; In case there is an exception, then add it to the output 
buffer as well

Ditto.


+(princ (nrepl-dict-get resp "ex") (get-buffer sbuffer))
+(princ (nrepl-dict-get resp "root-ex") (get-buffer sbuffer)))
+  (when (member "err" resp)
+; In case there is an error, then add it to the output buffer 
as well

Ditto.


+(princ (nrepl-dict-get resp "err") (get-buffer sbuffer)))
+  (nrepl--merge response resp)
+  ; Update the status of the nREPL output session

Ditto.

+  (setq status (nrepl-dict-get response "status")))
+(cider-current-connection)
+(cider-current-session))
+
+   ; Wait until the nREPL code finished to be processed

Ditto.


+   (while (not (member "done" status))
+ (nrepl-dict-put response "status" (remove "need-input" status))
+ (accept-process-output nil 0.01)
+ (redisplay))
+
+   ; Delete the show buffer & window when the processing is finalized

Ditto.


+   (let ((wins (get-buffer-window-list sbuffer nil t)))
+ (dolist (win wins)
+   (delete-window win))
+ (kill-buffer sbuffer))

   (mapc #'delete-window (get-buffer-window-list sbuffer nil t))
   (kill-buffer sbuffer)


+
+   ; Put the output or the value in the result section of the code 
block

See above.


+   (setq result (concat (nrepl-dict-get response
+(if (or (member "output" 
result-params)
+(member "pp" 
result-params))
+"out"
+  "value"))
+(nrepl-dict-get response "ex")
+(nrepl-dict-get response "root-ex")
+(nrepl-dict-get response "err"
+ ; Check if user want to run code without showing the process

Ditto.


+ (when (not show)

   (unless show ...)


Ok good, will fix these issues and resend the patch.


BTW, did you sign FSF papers already? I cannot find any 

Re: [O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-10 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> I noticed that you included some of my previous fixes in
> Org-babel-clojure, so here are the latest work I did. I updated it to
> work with the latest code on Git. I did two things with these fixes:
>
>
>   (1) I better handle any possible error or exceptions that may be
> raised by nREPL by displaying any errors in the RESULTS section
>
>   (2) I added a new header option called ":show-process" which create
> a new window/buffer to display anything that is outputted by the
> Clojure code in the code block.
>
>
> In the past, I did refer to this as ":async", but as we discussed at
> that time, it really was not async. So I changed the naming of this
> new feature to remove this ambiguity.

OK.

> In any case, I did update the worg documentation accordingly too.
>
> Finally I updated ORG-NEWS in the 9.1 section.

I think you can merge patch 2 and 3. ORG-NEWS updates usually do not
require their own

> See the patch files attached to this email.

Thank you. Some nit-picks follow.

> Subject: [PATCH 1/2] Better error handling with nREPL. Displaying any possible
>  errors or exceptions in the result block. Adding a new :show-process header
>  option such that the underlying process of a Clojure block code get output in
>  a new buffer and a new window such that the developer can see what is going
>  on.

Could you provide a proper commit message? In particular, each modified
function has to be specified there.
>  (defun org-babel-execute:clojure (body params)
> -  "Execute a block of Clojure code with Babel."
> +  "Execute a block of Clojure code with Babel. The underlying process 
> performed by the

"The underlying..." has to go on the line below.

> +  code block can be output using the :show-process parameter"
>(let ((expanded (org-babel-expand-body:clojure body params))
> - result)
> +(sbuffer "*Clojure Show Process Sub Buffer*")
> +(show (if (assoc :show-process params) t nil))

  (show (assq :show-process params))

> +(response (cons 'dict nil))

  (response (list 'dict))

> +status
> +result)
> + ; Check if the user want show the process in an output buffer/window

Need ";;" instead of ";". Also, full stop missing at the end.

> + (when show
> +   ; Create a new window with the show output buffer

  ;; Create output buffer.

> +   (switch-to-buffer-other-window sbuffer)
> +
> +   ; Run the Clojure code in nREPL

Ditto.

> +   (nrepl-request:eval
> +expanded 
> +(lambda (resp) 
> +  (when (member "out" resp)
> +; Print the output of the nREPL in the output buffer

Ditto.

> +(princ (nrepl-dict-get resp "out") (get-buffer sbuffer)))
> +  (when (member "ex" resp)
> +; In case there is an exception, then add it to the output 
> buffer as well

Ditto.

> +(princ (nrepl-dict-get resp "ex") (get-buffer sbuffer))
> +(princ (nrepl-dict-get resp "root-ex") (get-buffer sbuffer)))
> +  (when (member "err" resp)
> +; In case there is an error, then add it to the output 
> buffer as well

Ditto.

> +(princ (nrepl-dict-get resp "err") (get-buffer sbuffer)))
> +  (nrepl--merge response resp)
> +  ; Update the status of the nREPL output session

Ditto.
> +  (setq status (nrepl-dict-get response "status")))
> +(cider-current-connection) 
> +(cider-current-session))
> +   
> +   ; Wait until the nREPL code finished to be processed

Ditto.

> +   (while (not (member "done" status))
> + (nrepl-dict-put response "status" (remove "need-input" status))
> + (accept-process-output nil 0.01)
> + (redisplay))
> +
> +   ; Delete the show buffer & window when the processing is finalized

Ditto.

> +   (let ((wins (get-buffer-window-list sbuffer nil t)))
> + (dolist (win wins)
> +   (delete-window win))
> + (kill-buffer sbuffer))

  (mapc #'delete-window (get-buffer-window-list sbuffer nil t))
  (kill-buffer sbuffer)

> +
> +   ; Put the output or the value in the result section of the code 
> block

See above.

> +   (setq result (concat (nrepl-dict-get response 
> +(if (or (member "output" 
> result-params)
> +(member "pp" 
> result-params))
> +"out"
> +  "value"))
> +(nrepl-dict-get response "ex")
> +(nrepl-dict-get response "root-ex")
> +(nrepl-dict-get response "err"
> + ; Check if user want to run code without 

[O] [PATCH] New header parameter :show-process for Org-babel-clojure

2016-11-07 Thread Frederick Giasson

Hi Nicolas,


The new Org-mode release 9.0 made me realize that I never finished some 
of my work with Org-babel-clojure.


I noticed that you included some of my previous fixes in 
Org-babel-clojure, so here are the latest work I did. I updated it to 
work with the latest code on Git. I did two things with these fixes:



  (1) I better handle any possible error or exceptions that may be 
raised by nREPL by displaying any errors in the RESULTS section


  (2) I added a new header option called ":show-process" which create a 
new window/buffer to display anything that is outputted by the Clojure 
code in the code block.



In the past, I did refer to this as ":async", but as we discussed at 
that time, it really was not async. So I changed the naming of this new 
feature to remove this ambiguity.


One thing I noticed in this process is that you actually did update worg 
with the documentation of ":async" but didn't add the actual 
Org-babel-clojure code modifications.


In any case, I did update the worg documentation accordingly too.

Finally I updated ORG-NEWS in the 9.1 section.

See the patch files attached to this email.


Thanks!


Take care,


Fred

From df8284b45c35e0c1dcbccf40ba7b76fd18270b90 Mon Sep 17 00:00:00 2001
From: Frederick Giasson 
Date: Mon, 7 Nov 2016 13:48:50 -0500
Subject: [PATCH 1/2] Better error handling with nREPL. Displaying any possible
 errors or exceptions in the result block. Adding a new :show-process header
 option such that the underlying process of a Clojure block code get output in
 a new buffer and a new window such that the developer can see what is going
 on.

---
 lisp/ob-clojure.el | 106 +
 1 file changed, 82 insertions(+), 24 deletions(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 72ea77d..4800c9a 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2009-2016 Free Software Foundation, Inc.
 
-;; Author: Joel Boehland, Eric Schulte, Oleh Krehel
+;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson
 ;;
 ;; Keywords: literate programming, reproducible research
 ;; Homepage: http://orgmode.org
@@ -84,34 +84,92 @@
   body)))
 
 (defun org-babel-execute:clojure (body params)
-  "Execute a block of Clojure code with Babel."
+  "Execute a block of Clojure code with Babel. The underlying process 
performed by the
+  code block can be output using the :show-process parameter"
   (let ((expanded (org-babel-expand-body:clojure body params))
-   result)
+(sbuffer "*Clojure Show Process Sub Buffer*")
+(show (if (assoc :show-process params) t nil))
+(response (cons 'dict nil))
+status
+result)
 (cl-case org-babel-clojure-backend
   (cider
(require 'cider)
(let ((result-params (cdr (assq :result-params params
-(setq result
-  (nrepl-dict-get
-   (nrepl-sync-request:eval
-expanded (cider-current-connection) (cider-current-session))
-   (if (or (member "output" result-params)
-   (member "pp" result-params))
-   "out"
- "value")
-  (slime
-   (require 'slime)
-   (with-temp-buffer
-(insert expanded)
-(setq result
-  (slime-eval
-   `(swank:eval-and-grab-output
- ,(buffer-substring-no-properties (point-min) (point-max)))
-   (cdr (assq :package params)))
-(org-babel-result-cond (cdr (assq :result-params params))
-  result
-  (condition-case nil (org-babel-script-escape result)
-   (error result)
+ ; Check if the user want show the process in an output buffer/window
+ (when show
+   ; Create a new window with the show output buffer
+   (switch-to-buffer-other-window sbuffer)
+
+   ; Run the Clojure code in nREPL
+   (nrepl-request:eval
+expanded 
+(lambda (resp) 
+  (when (member "out" resp)
+; Print the output of the nREPL in the output buffer
+(princ (nrepl-dict-get resp "out") (get-buffer sbuffer)))
+  (when (member "ex" resp)
+; In case there is an exception, then add it to the output 
buffer as well
+(princ (nrepl-dict-get resp "ex") (get-buffer sbuffer))
+(princ (nrepl-dict-get resp "root-ex") (get-buffer sbuffer)))
+  (when (member "err" resp)
+; In case there is an error, then add it to the output buffer 
as well
+(princ (nrepl-dict-get resp "err") (get-buffer sbuffer)))
+  (nrepl--merge response resp)
+  ; Update the status of the nREPL output session
+  (setq status (nrepl-dict-get response "status")))
+(cider-current-connection) 
+(cider-current-session))
+