Просмотр исходного кода

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.
Bastien 5 лет назад
Родитель
Сommit
10cd894b23
1 измененных файлов с 27 добавлено и 24 удалено
  1. 27 24
      lisp/ob-clojure.el

+ 27 - 24
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))