Skip to content

Instantly share code, notes, and snippets.

@jsn
Last active December 26, 2019 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jsn/41305bc491891a8e9c9380c89bd721c7 to your computer and use it in GitHub Desktop.
Save jsn/41305bc491891a8e9c9380c89bd721c7 to your computer and use it in GitHub Desktop.
my clojure repl setup
{
:aliases {
:deps {:extra-deps
{org.clojure/tools.deps.alpha {:mvn/version "0.6.474"}}}
:dev {:extra-paths ["/home/jason/.clojure/my-dev"]
:extra-deps
{com.bhauman/rebel-readline {:mvn/version "0.1.4"}
nrepl/nrepl {:mvn/version "0.6.0"}
cider/cider-nrepl {:mvn/version "0.21.1"}}
:main-opts ["-m" "myrepl"]}
}
(ns myrepl
(:require [nrepl.server]
[clojure.java.io :as io]
[cider.nrepl :refer [cider-nrepl-handler]]
[clojure.repl :as clj-repl]
[rebel-readline.core :as rebel-core]
[rebel-readline.clojure.main :as rebel-clj-main]
[rebel-readline.main :as rebel]))
(def port-file ".nrepl-port")
(defn -handle-sigint-form
[]
`(let [thread# (Thread/currentThread)]
(clj-repl/set-break-handler! (fn [_signal#] (.stop thread#)))))
(defn -main [& [init-ns]]
(let [nr (nrepl.server/start-server :handler cider-nrepl-handler)
port (:port nr)]
(println "nrepl server at port" port)
(spit port-file port))
(rebel-core/ensure-terminal
(rebel-clj-main/repl*
; See https://github.com/bhauman/rebel-readline/issues/157.
{:init #(when (some? init-ns)
(let [init-ns (symbol init-ns)]
(require init-ns)
(in-ns init-ns)))
; See https://github.com/bhauman/rebel-readline/issues/180
:eval #(eval `(do ~(-handle-sigint-form) ~%))}))
(io/delete-file port-file)
(System/exit 0))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment