** Bootstrapping Excuse me while I tie my computating environment to my text editing environment. #+BEGIN_SRC elisp ;; Run a clojure process listening on a socket (let* ((args '("-J-Dclojure.server.repl={:port,9457,:accept,clojure.core.server/repl}")) (clojure-program "clojure") (buffer (get-buffer-create "*clojure*")) (proc-alive (comint-check-proc buffer)) (process (get-buffer-process buffer))) (unless proc-alive (with-current-buffer buffer (apply 'make-comint-in-buffer "Clojure" buffer clojure-program nil args))) (when buffer (pop-to-buffer buffer))) #+END_SRC #+BEGIN_SRC elisp ;; tell org babel to evaluate clojure code by sending it to that socket (defun org-babel-execute:clojure (body params) "Execute a block of clojure code with org-babel." (org-babel-eval "nc localhost 9457" body)) #+END_SRC : org-babel-execute:clojure #+BEGIN_SRC clojure ;; use org-babel to run some clojure code to start a slightly ;; different repl on a different port because I don't like how the ;; prompt is printed in the default (future (with-open [sock (java.net.ServerSocket. 32466)] (loop [] (try (with-open [s (.accept sock) i (clojure.lang.LineNumberingPushbackReader. ((requiring-resolve 'clojure.java.io/reader) (.getInputStream s))) o ((requiring-resolve 'clojure.java.io/writer) (.getOutputStream s))] (binding [*in* i ,*out* o ,*err* o] ((requiring-resolve 'clojure.main/repl) :prompt (constantly nil)))) (catch Throwable t (prn t))) (recur)))) #+END_SRC : user=> user=> user=> user=> #object[clojure.core$future_call$reify__8544 0x185ff04f {:status :pending, :val nil}] : user=> #+BEGIN_SRC elisp :exports both ;; redefine this to use the new port (defun org-babel-execute:clojure (body params) "Execute a block of clojure code with org-babel." (org-babel-eval "nc localhost 32466" body)) #+END_SRC : org-babel-execute:clojure #+BEGIN_SRC clojure :exports both "Hello World" #+END_SRC : "Hello World"
Generated At 2023-06-07T09:55:36-0700 original