diff --git a/modules/lang/clojure/autoload.el b/modules/lang/clojure/autoload.el index f583821de..5be877f6c 100644 --- a/modules/lang/clojure/autoload.el +++ b/modules/lang/clojure/autoload.el @@ -13,10 +13,26 @@ at point." ;;; Commands ;;;###autoload -(defun +clojure/open-repl (&optional arg) - "Open a Cider REPL and return the buffer." +(defun +clojure/open-repl (&optional arg type) + "Open a Cider REPL for clojure and return the buffer." (interactive "P") - (process-buffer (cider-jack-in arg))) + ;; TODO Better error handling + (let ((type (or type 'clj))) + (if-let (buffer (cider-current-repl type)) + (pop-to-buffer buffer) + (let ((process (cider-jack-in-clj arg))) + (message "Starting CIDER server for the first time...") + (while (and (process-live-p process) + (not (cider-current-repl type))) + (sit-for 1)) + (message "Starting CIDER server for the first time...done") + (pop-to-buffer (cider-current-repl type)))))) + +;;;###autoload +(defun +clojure/open-cljs-repl (&optional arg) + "Open a Cider REPL for clojurescript and return the buffer." + (interactive "P") + (+clojure/open-repl arg 'cljs)) ;;;###autoload (defun +clojure/cider-switch-to-repl-buffer-and-switch-ns () diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 1d809d6f9..2fb475e21 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -12,7 +12,8 @@ :init (after! clojure-mode (set-repl-handler! 'clojure-mode #'+clojure/open-repl) - (set-eval-handler! 'clojure-mode #'cider-eval-region)) + (set-repl-handler! 'clojurescript-mode #'+clojure/open-cljs-repl) + (set-eval-handler! '(clojure-mode clojurescript-mode) #'cider-eval-region)) :config (add-hook 'cider-mode-hook #'eldoc-mode) (set-lookup-handlers! 'cider-mode