Hello, Frederick Giasson <f...@fgiasson.com> 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 showing the process Ditto. > + (when (not show) (unless show ...) BTW, did you sign FSF papers already? I cannot find any reference in org-contribute.org? Regards, -- Nicolas Goaziou