Skip to content

Commit

Permalink
Merge pull request #285 from Futurile/patch-7
Browse files Browse the repository at this point in the history
Add documentation to embed an nREPL, specifically for Rebel Readline
  • Loading branch information
liquidz authored Jan 31, 2021
2 parents f04e1dd + 6a02d60 commit 5d3c321
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions doc/vim-iced.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ CONTENTS *vim-iced-contents*
Leiningen |vim-iced-manual-leiningen|
Boot |vim-iced-manual-boot|
shadow-cljs |vim-iced-manual-shadow-cljs|
Rebel Readline |vim-iced-manual-rebel-readline|
Boost by Python |vim-iced-install-python|
Docker |vim-iced-install-docker|
REPL Connection |vim-iced-repl-connection|
Expand Down Expand Up @@ -220,6 +221,55 @@ SHADOW-CLJS~
<
To start CLJS REPL, see |vim-iced-shadow-cljs|.

*vim-iced-manual-rebel-readline*
REBEL READLINE~

If you use Rebel Readline or want to embed an nREPL in your application,
then one approach is to create a `user.clj` with the following:
>
(ns user
(:require [nrepl.server :as nrepl-server]
[clojure.java.io :as io]))
(def nrepl-port 7888)
(defonce nrepl-server (atom nil))
(defn cider-middleware
"Get cider middleware, see
https://github.com/clojure-emacs/cider-nrepl/issues/447"
[]
(require 'cider.nrepl)
(map ns-resolve
['cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl]
['wrap-classpath 'wrap-clojuredocs 'wrap-complete 'wrap-debug 'wrap-format 'wrap-info 'wrap-macroexpand 'wrap-ns 'wrap-out 'wrap-spec 'wrap-test 'wrap-trace 'wrap-undef 'wrap-xref]))
(defn dev-middleware []
(mapcat (fn [[ns syms]] (require ns) (map (partial ns-resolve ns) syms))
[['refactor-nrepl.middleware ['wrap-refactor]] ['iced.nrepl ['wrap-iced]]]))
(defn nrepl-handler
"Re-implement cider-nrepl-handler so we can add middleware to the default list"
[]
(apply nrepl-server/default-handler (concat (cider-middleware) (dev-middleware))))
(defn start-nrepl-server! []
(reset!
nrepl-server
(nrepl-server/start-server :port nrepl-port :handler (nrepl-handler)))
(println "Cider nREPL server started on port" nrepl-port)
(spit ".nrepl-port" nrepl-port))
(defn stop-nrepl-server! []
(when (not (nil? @nrepl-server))
(nrepl-server/stop-server @nrepl-server)
(println "Cider nREPL server on port" nrepl-port "stopped")
(reset! nrepl-server nil)
(io/delete-file ".nrepl-port" true)
(System/exit 0)))
<
Start the Rebel Readline REPL and from it's prompt start the nREPL server
using `start-nrepl-server!`, then in Vim do `:IcedConnect`.

==============================================================================
BOOST BY PYTHON *vim-iced-install-python*

Expand Down

0 comments on commit 5d3c321

Please sign in to comment.