Skip to content

Commit 746dd5d

Browse files
author
Mike Bruce
committed
[clojure-emacs#209] include node-babashka and fix PR remarks
1 parent 6770bc3 commit 746dd5d

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* [#202](https://github.com/clojure-emacs/inf-clojure/issues/202): Add ClojureCLR support.
55
* [#204](https://github.com/clojure-emacs/inf-clojure/issues/204): Scroll repl buffer on insert commands
66
* [#208](https://github.com/clojure-emacs/inf-clojure/pull/208) Display message after setting repl.
7-
* [#210](https://github.com/clojure-emacs/inf-clojure/pull/210) Include `inf-clojure-socket` to create a socket REPL and connect to it from inside Emacs.
7+
* [#210](https://github.com/clojure-emacs/inf-clojure/pull/210) Include `inf-clojure-socket-repl` to create a socket REPL and connect to it from inside Emacs.
88

99

1010
## 3.2.1 (2022-07-22)

inf-clojure.el

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
(lein-clr . "lein clr repl")
7979
(planck . "planck -d")
8080
(babashka . "bb")
81+
(node-babashka . "nbb")
8182
(lumo . "lumo -d")
8283
(joker . "joker")))
8384

@@ -140,6 +141,17 @@
140141
(set-ns . "(clojure.core/in-ns '%s)")
141142
(macroexpand . "(clojure.core/macroexpand '%s)")
142143
(macroexpand-1 . "(clojure.core/macroexpand-1 '%s)")))
144+
(node-babashka . ((load . "(clojure.core/load-file \"%s\")")
145+
(doc . "(clojure.repl/doc %s)")
146+
(source . "(clojure.repl/source %s)")
147+
(arglists .
148+
"(try (-> '%s clojure.core/resolve clojure.core/meta :arglists)
149+
(catch Throwable e nil))")
150+
(apropos . "(doseq [var (sort (clojure.repl/apropos \"%s\"))] (println (str var)))")
151+
(ns-vars . "(clojure.repl/dir %s)")
152+
(set-ns . "(clojure.core/in-ns '%s)")
153+
(macroexpand . "(clojure.core/macroexpand '%s)")
154+
(macroexpand-1 . "(clojure.core/macroexpand-1 '%s)")))
143155
(clojure . ((load . "(clojure.core/load-file \"%s\")")
144156
(doc . "(clojure.repl/doc %s)")
145157
(source . "(clojure.repl/source %s)")
@@ -853,6 +865,9 @@ HOST is the host the process is running on, PORT is where it's listening."
853865
(defvar-local inf-clojure-socket-buffer nil
854866
"Used to kill the associated socket buffer when it's REPL buffer is killed.")
855867

868+
(defvar inf-clojure-socket-repl-startup-message "Socket REPL listening"
869+
"Used to detect when nbb socket REPL has started since it does not print `=>'.")
870+
856871
(defun inf-clojure-socket-filter (process output)
857872
"A filter that gets triggered each time the socket receives new OUTPUT.
858873
This function prints out the output received but also
@@ -869,14 +884,15 @@ OUTPUT is the latest data received from the process"
869884
(when (buffer-live-p server-buffer)
870885
(with-current-buffer server-buffer
871886
(insert output)))
872-
(let ((prompt-displayed (string-match inf-clojure-prompt output)))
873-
(when prompt-displayed
874-
(message (format "REPL prompt found for %s" (process-name process)))
887+
(let ((prompt-displayed (string-match inf-clojure-prompt output))
888+
(startup-displayed (string-match inf-clojure-socket-repl-startup-message output)))
889+
(when (or prompt-displayed startup-displayed)
890+
(message (format "Socket REPL startup detected for %s" (process-name process)))
875891
(with-current-buffer server-buffer
876892
(when inf-clojure-socket-callback
877893
(funcall inf-clojure-socket-callback)))))))
878894

879-
(defun inf-clojure-repl-sentinel (process event)
895+
(defun inf-clojure-socket-repl-sentinel (process event)
880896
"Ensures socket REPL are cleaned up when the REPL buffer is closed.
881897
882898
PROCESS is the process object that is connected to a socket REPL.
@@ -889,19 +905,21 @@ EVENT is the event that triggered this function to be called."
889905
(kill-buffer inf-clojure-socket-buffer))))))
890906

891907
(defvar inf-clojure-socket-repl-startup-forms
892-
'((lein . "JVM_OPTS='-Dclojure.server.repl={:port %s :accept clojure.core.server/repl}' lein repl")
893-
(boot . "export BOOT_JVM_OPTIONS='-Dclojure.server.repl=\"{:port %s :accept clojure.core.server/repl}\"' boot repl")
894-
(clojure . "clojure -J-Dclojure.server.repl=\"{:port %s :accept clojure.core.server/repl}\"")
895-
(cljs . "clojure -J-Dclojure.server.repl=\"{:port %s :accept cljs.server.browser/repl}\"")
896-
(lein-clr . "JVM_OPTS='-Dclojure.server.repl={:port %s :accept clojure.core.server/repl}' lein clr repl")
897-
(planck . "planck -n %s")
898-
(babashka . "bb socket-repl %s")))
908+
'((lein . "JVM_OPTS='-Dclojure.server.repl={:port %d :accept clojure.core.server/repl}' lein repl")
909+
(boot . "export BOOT_JVM_OPTIONS='-Dclojure.server.repl=\"{:port %d :accept clojure.core.server/repl}\"' boot repl")
910+
(clojure . "clojure -J-Dclojure.server.repl=\"{:port %d :accept clojure.core.server/repl}\"")
911+
(cljs . "clojure -J-Dclojure.server.repl=\"{:port %d :accept cljs.server.browser/repl}\"")
912+
(lein-clr . "JVM_OPTS='-Dclojure.server.repl={:port %d :accept clojure.core.server/repl}' lein clr repl")
913+
(planck . "planck -n %d")
914+
(babashka . "bb socket-repl %d")
915+
(node-babashka . "nbb socket-repl :port %d")))
899916

900917
(defcustom inf-clojure-socket-repl-port
901918
nil
902919
"Port to be used when creating a socket REPL via `inf-clojure-socket-repl'.
903920
If left as nil a random port will be selected between 5500-6000."
904-
:type '(choice integer (const nil)))
921+
:type '(choice integer (const nil))
922+
:package-version '(inf-clojure . "3.2.1"))
905923

906924
;;;###autoload
907925
(defun inf-clojure-socket-repl (cmd)
@@ -912,26 +930,27 @@ provided in `inf-clojure-socket-repl-startup-forms' or
912930
`inf-clojure-custom-startup' if this is defined."
913931
(interactive (list (or (unless current-prefix-arg
914932
inf-clojure-custom-startup)
915-
(completing-read "Select Clojure REPL startup command: "
933+
(completing-read "Select Clojure socket REPL startup command: "
916934
(mapcar #'cdr inf-clojure-socket-repl-startup-forms)
917935
nil
918936
'confirm-after-completion))))
919937
(let* ((host "localhost")
920938
(port (or inf-clojure-socket-repl-port (+ 5500 (random 500))))
939+
(project-dir (clojure-project-dir))
921940
(repl-type (or (unless prefix-arg
922941
inf-clojure-custom-repl-type)
923942
(car (rassoc cmd inf-clojure-socket-repl-startup-forms))
924943
(inf-clojure--prompt-repl-type)))
925-
(project-name (inf-clojure--project-name (or (clojure-project-dir) "standalone")))
944+
(project-name (inf-clojure--project-name (or project-dir "standalone")))
926945
(socket-process-name (format "*%s-%s-socket-server*" project-name repl-type))
927946
(socket-buffer-name (format "*%s-%s-socket*" project-name repl-type))
928947
(socket-buffer (get-buffer-create socket-buffer-name))
929948
(repl-buffer-name (format "%s-%s-repl" project-name repl-type))
930949
(socket-form (or (cdr (assoc repl-type inf-clojure-socket-repl-startup-forms))
931950
inf-clojure-custom-startup
932951
cmd))
933-
(socket-cmd (format socket-form (number-to-string port)))
934-
(sock (let ((default-directory (or (clojure-project-dir) default-directory)))
952+
(socket-cmd (format socket-form port))
953+
(sock (let ((default-directory (or project-dir default-directory)))
935954
(start-file-process-shell-command
936955
socket-process-name socket-buffer
937956
socket-cmd))))
@@ -942,7 +961,6 @@ provided in `inf-clojure-socket-repl-startup-forms' or
942961
(setq inf-clojure-socket-repl-type
943962
repl-type
944963
inf-clojure-custom-repl-name
945-
;; comint mode includes the ** chars
946964
repl-buffer-name
947965
repl-buffer
948966
(get-buffer-create repl-buffer-name))
@@ -951,9 +969,9 @@ provided in `inf-clojure-socket-repl-startup-forms' or
951969
(setq inf-clojure-socket-buffer socket-buffer))
952970
(set-process-sentinel
953971
(get-buffer-process (get-buffer (concat "*" repl-buffer-name "*")))
954-
#'inf-clojure-repl-sentinel))))
972+
#'inf-clojure-socket-repl-sentinel))))
955973
(set-process-filter sock #'inf-clojure-socket-filter)
956-
(message "Starting %s socket REPL server at %s:%s with %s" repl-type host port socket-cmd)))
974+
(message "Starting %s socket REPL server at %s:%d with %s" repl-type host port socket-cmd)))
957975

958976

959977
(defun inf-clojure--forms-without-newlines (str)

0 commit comments

Comments
 (0)