summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien <bzg@gnu.org>2020-02-17 02:37:55 +0100
committerBastien <bzg@gnu.org>2020-02-17 02:38:02 +0100
commit10cd894b235e65035339222239bf9b5f941017e6 (patch)
treeb766b4bd63a83d5190e2814ef93edfc10aa98bbd
parent2d21d2080c78b055c2a1d66bc232399aaa0c1232 (diff)
downloadorg-mode-10cd894b235e65035339222239bf9b5f941017e6.tar.gz
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.
-rw-r--r--lisp/ob-clojure.el51
1 files changed, 27 insertions, 24 deletions
diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 5f387b7..299a326 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))