Skip to content
2010/05/05 / highmt

swank-clojure-project時にカレントディレクトリも移動する

slimeをM-x slimeではなくM-x swank-clojure-projectで起動すると、プロジェクトフォルダが選択でき、clojureでcompileできるようにプロジェクトにCLASSPATHを通してもらえるので、javaとの相互運用をいろいろやるときには便利。

ただ、カレントディレクトリをプロジェクトフォルダに指定してくれないので、
*compile-path*がデフォルトの"classes"のままだとクラスファイルがプロジェクトフォルダ以下に生成できない。

ちゃんとpom.xmlを用意するのがまっとうなやり方だけれど、ちょっと試したいときは面倒。

そこで以下のようにして起動時にカレントディレクトリを移動する。

*** swank-clojure.el.orig	Tue Dec 22 10:20:34 2009
--- swank-clojure.el	Wed Apr 28 00:49:28 2010
***************
*** 326,332 ****
      (run-hooks 'swank-clojure-project-hook)
  
      (save-window-excursion
!       (slime))))
  
  (provide 'swank-clojure)
  ;;; swank-clojure.el ends here
--- 326,337 ----
      (run-hooks 'swank-clojure-project-hook)
  
      (save-window-excursion
!       (let ((save-dir (pwd)))
!         (unwind-protect
!             (progn
!               (cd path)
!               (slime))
!           (cd save-dir))))))
  
  (provide 'swank-clojure)
  ;;; swank-clojure.el ends here

たとえば、以下のようなフォルダをつくり、swank-clojure-projectでc:/workspace/project1/ を選択する。

c:/workspace/project1/
  + classes/
  + src/
    + my/
      + test/
        - class1.clj

class1.cljは:

(ns my.test.class1
  (:gen-class))
(use '[clojure.contrib.string :only (join)])
(defn -main [& args]
  (println (join "" args)))

ディスクへのコンパイル:

(compile 'my.test.class1)

実行:

c:\workspace\project1> java -cp .\classes;%CLJ_HOME%\* my.test.class1 a b c
abc

class1.cljの名前空間とかをいろいろ変えてみたり、mainで例外を起こしてみたりすると、clojureとjavaとの関係が垣間見えておもしろい。

広告
%d人のブロガーが「いいね」をつけました。