13
votes

I have some clojure functions that I would like pre-loaded when I start the clojure REPL. The functions aren't much use unless you are using them within the context of a REPL.

If it helps, I generally use leiningen to start a clojure REPL for me.

How can I tell clojure (or leiningen, if it's not available through flat clojure) to pre-load a clojure file containing these definitions for me?

1

1 Answers

15
votes

There are several ways to do this described in the leiningen sample project one of my favorite methods is so put the code you want in the default repl namespace into

/path/to/project/dev/user.clj:

(ns user)
(def foo 42)

and add a line like this into the project.clj file:

(defproject hello "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]]
  :source-paths ["dev"])

This makes it clear that this is for dev while still getting it loaded into the default namespace.

When you run nrepl-jack-in form emacs or "lein repl" form the shell, you should be greeted with a user> namespace with your code loaded:

; nREPL 0.1.6
user> foo
42