78
78
(lein-clr . " lein clr repl" )
79
79
(planck . " planck -d" )
80
80
(babashka . " bb" )
81
+ (node-babashka . " nbb" )
81
82
(lumo . " lumo -d" )
82
83
(joker . " joker" )))
83
84
140
141
(set-ns . " (clojure.core/in-ns '%s)" )
141
142
(macroexpand . " (clojure.core/macroexpand '%s)" )
142
143
(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)" )))
143
155
(clojure . ((load . " (clojure.core/load-file \" %s\" )" )
144
156
(doc . " (clojure.repl/doc %s)" )
145
157
(source . " (clojure.repl/source %s)" )
@@ -853,6 +865,9 @@ HOST is the host the process is running on, PORT is where it's listening."
853
865
(defvar-local inf-clojure-socket-buffer nil
854
866
" Used to kill the associated socket buffer when it's REPL buffer is killed." )
855
867
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
+
856
871
(defun inf-clojure-socket-filter (process output )
857
872
" A filter that gets triggered each time the socket receives new OUTPUT.
858
873
This function prints out the output received but also
@@ -869,14 +884,15 @@ OUTPUT is the latest data received from the process"
869
884
(when (buffer-live-p server-buffer)
870
885
(with-current-buffer server-buffer
871
886
(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)))
875
891
(with-current-buffer server-buffer
876
892
(when inf-clojure-socket-callback
877
893
(funcall inf-clojure-socket-callback)))))))
878
894
879
- (defun inf-clojure-repl-sentinel (process event )
895
+ (defun inf-clojure-socket- repl-sentinel (process event )
880
896
" Ensures socket REPL are cleaned up when the REPL buffer is closed.
881
897
882
898
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."
889
905
(kill-buffer inf-clojure-socket-buffer))))))
890
906
891
907
(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" )))
899
916
900
917
(defcustom inf-clojure-socket-repl-port
901
918
nil
902
919
" Port to be used when creating a socket REPL via `inf-clojure-socket-repl' .
903
920
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" ))
905
923
906
924
;;;### autoload
907
925
(defun inf-clojure-socket-repl (cmd )
@@ -912,26 +930,27 @@ provided in `inf-clojure-socket-repl-startup-forms' or
912
930
`inf-clojure-custom-startup' if this is defined."
913
931
(interactive (list (or (unless current-prefix-arg
914
932
inf-clojure-custom-startup)
915
- (completing-read " Select Clojure REPL startup command: "
933
+ (completing-read " Select Clojure socket REPL startup command: "
916
934
(mapcar #'cdr inf-clojure-socket-repl-startup-forms)
917
935
nil
918
936
'confirm-after-completion ))))
919
937
(let* ((host " localhost" )
920
938
(port (or inf-clojure-socket-repl-port (+ 5500 (random 500 ))))
939
+ (project-dir (clojure-project-dir))
921
940
(repl-type (or (unless prefix-arg
922
941
inf-clojure-custom-repl-type)
923
942
(car (rassoc cmd inf-clojure-socket-repl-startup-forms))
924
943
(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" )))
926
945
(socket-process-name (format " *%s -%s -socket-server* " project-name repl-type))
927
946
(socket-buffer-name (format " *%s -%s -socket* " project-name repl-type))
928
947
(socket-buffer (get-buffer-create socket-buffer-name))
929
948
(repl-buffer-name (format " %s -%s -repl" project-name repl-type))
930
949
(socket-form (or (cdr (assoc repl-type inf-clojure-socket-repl-startup-forms))
931
950
inf-clojure-custom-startup
932
951
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)))
935
954
(start-file-process-shell-command
936
955
socket-process-name socket-buffer
937
956
socket-cmd))))
@@ -942,7 +961,6 @@ provided in `inf-clojure-socket-repl-startup-forms' or
942
961
(setq inf-clojure-socket-repl-type
943
962
repl-type
944
963
inf-clojure-custom-repl-name
945
- ; ; comint mode includes the ** chars
946
964
repl-buffer-name
947
965
repl-buffer
948
966
(get-buffer-create repl-buffer-name))
@@ -951,9 +969,9 @@ provided in `inf-clojure-socket-repl-startup-forms' or
951
969
(setq inf-clojure-socket-buffer socket-buffer))
952
970
(set-process-sentinel
953
971
(get-buffer-process (get-buffer (concat " *" repl-buffer-name " *" )))
954
- #'inf-clojure-repl-sentinel ))))
972
+ #'inf-clojure-socket- repl-sentinel ))))
955
973
(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)))
957
975
958
976
959
977
(defun inf-clojure--forms-without-newlines (str )
0 commit comments