From 10cd894b235e65035339222239bf9b5f941017e6 Mon Sep 17 00:00:00 2001 From: Bastien Date: Mon, 17 Feb 2020 02:37:55 +0100 Subject: [PATCH] ob-clojure.el: More minor refinements * lisp/ob-clojure.el (org-babel-expand-body:clojure): Inline namespace setting. (org-babel-clojure-cider-current-ns): Delete. (ob-clojure-inf-clojure-filter-out): New variable. (ob-clojure-inf-clojure-output): Use it. (ob-clojure-eval-with-inf-clojure): Update the filter variable depending on the current namespace. --- lisp/ob-clojure.el | 51 ++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 5f387b7a3..299a326e4 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -79,18 +79,16 @@ :type 'string :group 'org-babel) -(defun org-babel-clojure-cider-current-ns () - "Like `cider-current-ns' except `cider-find-ns'." - (or cider-buffer-ns - (let ((repl-buf (cider-current-connection))) - (and repl-buf (buffer-local-value 'cider-buffer-ns repl-buf))) - org-babel-clojure-default-ns)) - (defun org-babel-expand-body:clojure (body params) "Expand BODY according to PARAMS, return the expanded body." (let* ((vars (org-babel--get-vars params)) (ns (or (cdr (assq :ns params)) - (org-babel-clojure-cider-current-ns))) + (if (eq org-babel-clojure-backend 'cider) + (or cider-buffer-ns + (let ((repl-buf (cider-current-connection))) + (and repl-buf (buffer-local-value + 'cider-buffer-ns repl-buf)))) + org-babel-clojure-default-ns))) (result-params (cdr (assq :result-params params))) (print-level nil) (print-length nil) @@ -114,14 +112,13 @@ (format "(clojure.pprint/pprint (do %s))" body) body))) -(defvar ob-clojure-inf-clojure-tmp-output nil) +(defvar ob-clojure-inf-clojure-filter-out) +(defvar ob-clojure-inf-clojure-tmp-output) (defun ob-clojure-inf-clojure-output (s) "Store a trimmed version of S in a variable and return S." (let ((s0 (org-trim (replace-regexp-in-string - "^nil\\|nil$" "" - (replace-regexp-in-string - "\\s-*user=>\\s-*" "" s))))) + ob-clojure-inf-clojure-filter-out "" s)))) (push s0 ob-clojure-inf-clojure-tmp-output)) s) @@ -146,6 +143,7 @@ (mapcar #'list l))) (defvar inf-clojure-buffer) +(defvar comint-prompt-regexp) (defvar inf-clojure-comint-prompt-regexp) (defun ob-clojure-eval-with-inf-clojure (expanded params) "Evaluate EXPANDED code block with PARAMS using inf-clojure." @@ -161,10 +159,16 @@ "clojure" (format "clojure -A%s" alias) cmd0) cmd0))) + (setq comint-prompt-regexp inf-clojure-comint-prompt-regexp) (funcall-interactively #'inf-clojure cmd) (goto-char (point-max)))) - (sit-for 2)) + (sit-for 1)) ;; Now evaluate the code + (setq ob-clojure-inf-clojure-filter-out + (concat "^nil\\|nil$\\|\\s-*" + (or (cdr (assq :ns params)) + org-babel-clojure-default-ns) + "=>\\s-*")) (add-hook 'comint-preoutput-filter-functions #'ob-clojure-inf-clojure-output) (setq ob-clojure-inf-clojure-tmp-output nil) @@ -194,17 +198,16 @@ (if (not connection) ;; Display in the result instead of using `user-error' (setq result0 "Please reevaluate when nREPL is connected") - (ob-clojure-with-temp-expanded - expanded params - (let ((response (nrepl-sync-request:eval exp connection))) - (push (or (nrepl-dict-get response "root-ex") - (nrepl-dict-get response "ex") - (nrepl-dict-get - response (if (or (member "output" result-params) - (member "pp" result-params)) - "out" - "value"))) - result0))) + (ob-clojure-with-temp-expanded expanded params + (let ((response (nrepl-sync-request:eval exp connection))) + (push (or (nrepl-dict-get response "root-ex") + (nrepl-dict-get response "ex") + (nrepl-dict-get + response (if (or (member "output" result-params) + (member "pp" result-params)) + "out" + "value"))) + result0))) (ob-clojure-string-or-list (reverse (delete "" (mapcar (lambda (r) (replace-regexp-in-string "nil" "" r))