Adding Inferior Lisp Support for clojure-mode

It has been a while since I updated clojure-mode, after the update inferior-lisp stopped working. At first I thought I messed up something because I updated clojure, clojure-contrib, clojure-mode all at the same time (bad move!). After making sure clojure and clojure-contrib works I looked at the clojure-mode's source code and found this commit which removes the subprocess support (inferior-lisp) for clojure-mode and advises to use slime and swank-clojure. Slime is nice but I wanted my inferior-lisp support back.

If you don't have any setup for inferior-lisp support use the following snippet,

(setq inferior-lisp-program "/path/to/lein repl")

or if you prefer a dumb repl,

(setq inferior-lisp-program "/path/to/lein trampoline run -m clojure.main/main")

This will let inferior-lisp to run clojure REPL, to be able to send code from your clojure buffer to inferior-lisp buffer use the following key bindings.

(add-hook 'clojure-mode-hook
          '(lambda ()
             (define-key clojure-mode-map 
               "\C-c\C-e" '(lambda ()
                             (interactive)
                             (let ((curr (point)))
                               (end-of-defun)
                               (lisp-eval-last-sexp)
                               (goto-char curr))))
             (define-key clojure-mode-map 
               "\C-x\C-e" 'lisp-eval-last-sexp)
             (define-key clojure-mode-map 
               "\C-c\C-r" 'lisp-eval-region)
             (define-key clojure-mode-map 
               "\C-c\C-c" '(lambda ()
                             (interactive)
                             (lisp-eval-string (buffer-string))))
             (define-key clojure-mode-map 
               "\C-c\C-z" 'run-lisp)))

From the commit it seems that the only thing that got removed is bunch of key bindings, snippet above pretty much reverses the commit and adds a new function to send the buffer you are working on to REPL and gives you a functional inferior-lisp REPL.