Clojure を emacs で

2010/5/6追記:ここの情報は古いので Ubuntu 10.04 での Clojure + Emacs + Leiningen の環境構築 を参照した方が良いと思います。

環境
Mac Snow leopard
Carbon emacs 22.3.1

まずここをそのままやれば emacsから使う事ができた。
http://riddell.us/tutorial/clojure/clojure.html
http://riddell.us/tutorial/slime_swank/slime_swank.html
C-x C-e で評価もできる。

プログラミングClojureのサンプルを試す場合は以下のように ~/.emacs.el にCLASSPATHを追加する。

2010/2/16追記:これもやると便利 jarファイルをまとめてクラスパスに追加する。appendを忘れずに。

2010/3/26追記:Leiningenを使ったプロジェクトならクラスパスとか全部面倒見てくれる Leiningen + Clojure + Emacs

;; clojure-mode
(add-to-list 'load-path "~/opt/clojure-mode")
(require 'clojure-mode)

;; swank-clojure
(add-to-list 'load-path "~/opt/swank-clojure/src/emacs")

(setq swank-clojure-jar-path "~/code/shcloj-code/lib/clojure.jar"
      swank-clojure-extra-classpaths (list
                                      "~/opt/swank-clojure/src/main/clojure"
                                      "~/code/shcloj-code"
                                      "~/code/shcloj-code/lib/commons-io-1.4.jar"
                                      "~/code/shcloj-code/lib/commons-fileupload-1.2.1.jar"
                                      "~/code/shcloj-code/lib/commons-codec-1.3.jar"
                                      "~/code/shcloj-code/lib/jline-0.9.94.jar"
                                      "~/code/shcloj-code/lib/clojure.jar"
                                      "~/code/shcloj-code/lib/clojure-contrib.jar"
                                      "~/code/shcloj-code/lib/ant.jar"
                                      "~/code/shcloj-code/lib/ant-launcher.jar"
                                      "~/code/shcloj-code/lib/compojure.jar"
                                      "~/code/shcloj-code/lib/hsqldb.jar"
                                      "~/code/shcloj-code/lib/jetty-6.1.14.jar"
                                      "~/code/shcloj-code/lib/jetty-util-7.1.14.jar"
                                      "~/code/shcloj-code/lib/servlet-api-2.5-6.1.14.jar"
                                      "~/code/shcloj-code/classes"))
(add-to-list 'load-path "~/opt/swank-clojure")
;(setq swank-clojure-binary "/Users/fatrow/code/shcloj-code/bin/repl.sh.bak")
(require 'swank-clojure-autoload)

;; slime
(eval-after-load "slime"
  '(progn (slime-setup '(slime-repl))))

(add-to-list 'load-path "~/opt/slime")
(require 'slime)
(slime-setup)

または プログラミングClojure のサンプルにある repl.sh を編集して
swank-clojure を追加し、かつ絶対パスの記述にしておく。

% cp -p repl.sh repl.emacs.sh

repl.emacs.sh

java -cp .:\
/Users/fatrow/opt/swank-clojure/src/main/clojure:\
/Users/fatrow/code/shcloj-code:\
/Users/fatrow/code/shcloj-code/lib/commons-io-1.4.jar:\
/Users/fatrow/code/shcloj-code/lib/commons-fileupload-1.2.1.jar:\
/Users/fatrow/code/shcloj-code/lib/commons-codec-1.3.jar:\
/Users/fatrow/code/shcloj-code/lib/jline-0.9.94.jar:\
/Users/fatrow/code/shcloj-code/lib/clojure.jar:\
/Users/fatrow/code/shcloj-code/lib/clojure-contrib.jar:\
/Users/fatrow/code/shcloj-code/lib/ant.jar:\
/Users/fatrow/code/shcloj-code/lib/ant-launcher.jar:\
/Users/fatrow/code/shcloj-code/lib/compojure.jar:\
/Users/fatrow/code/shcloj-code/lib/hsqldb.jar:\
/Users/fatrow/code/shcloj-code/lib/jetty-6.1.14.jar:\
/Users/fatrow/code/shcloj-code/lib/jetty-util-7.1.14.jar:\
/Users/fatrow/code/shcloj-code/lib/servlet-api-2.5-6.1.14.jar:\
/Users/fatrow/code/shcloj-code/classes \
jline.ConsoleRunner clojure.lang.Repl

そして ~/.emacs.el を次のように変更する

;; clojure-mode
(add-to-list 'load-path "~/opt/clojure-mode")
(require 'clojure-mode)

;; swank-clojure
(add-to-list 'load-path "~/opt/swank-clojure/src/emacs")

(add-to-list 'load-path "~/opt/swank-clojure")
(setq swank-clojure-binary "/Users/fatrow/code/shcloj-code/bin/repl.emacs.sh")
(require 'swank-clojure-autoload)

;; slime
(eval-after-load "slime"
  '(progn (slime-setup '(slime-repl))))

(add-to-list 'load-path "~/opt/slime")
(require 'slime)
(slime-setup)


どちらの方法でもできた。
ただ、C-x C-e の評価結果が ミニバッファに出てすぐ消えてしまうので
REPL 側に出て欲しいんだけど、そのやり方は分からない。

参考
http://www.lispcast.com/drupal/Clojure-Setup.html ;セットアップの動画がある
http://stackoverflow.com/questions/257333/clojure-editor-ide-recommendations-on-os-x