Clojure-modeへの歩み、その1

 プログラミングするなら前回つくったNetBeans+enclojure環境も良いんだろうけど、
なんかこう、ササッと書きたいんだよ。
違うだろ、俺たちが欲しいのは(-`Д´-;)


 チャチャっと書いちゃいたいときとか
IDEの起動を待ってる間に情熱が冷めちゃいます{{(>_<)}}よね


 じゃあエディタでやっちゃおうよって訳。


 使用するのは勿論xyzzy
私xyzzyerなので、emacsmeadowじゃなくてxyzzyで使いたい><
でも、xyzzyclojure-modeなんて無さそう。

じゃあ、作ればイインダヨ( ̄∀ ̄)d


はい、長い前振りでスミマセン。


 clojure-modeを作ろうってことですが、一から作るのも大変なので、既存のモノを流用します。
で、流用しようと思ってるのがこちらのscheme-mode、
http://fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
ライセンスがイマイチわからないので、問題あれば教えてエライ人。m(_ _)m


 どうしてこれ流用するかって言うと、確かこのscheme-modeはkawa*1も使えたはず*2


 なので、基本評価器を現状設定しているGaucheから
Clojureに置き換えてやればいいだけのはず。

; Gauche - directly
(setf *scheme-process-open-hook*
      #'(lambda (buffer)
          (if (buffer-process)
              (buffer-process)
            (progn
              (save-window-excursion
                (with-output-to-temp-buffer ("*Scheme run*")))
              (make-process
               (format
                nil "~A"
                (map-slash-to-backslash
                 (merge-pathnames "C:/Home/Gauche/bin/gosh.exe -i" (si:system-root)))))))))
(setf *scheme-process-read-filter*
      #'(lambda (proc text)
          (pop-to-buffer "*Scheme run*" 10)
          (goto-char (point-max))
          (insert text)
          (set-window (get-buffer-window (process-buffer proc)))
          (refresh-screen)))

 javaでの実行方法はKawaの設定を参考にすりゅ。

; Kawa - directly
(setf *scheme-process-open-hook*
      #'(lambda (buffer)
          (if (buffer-process)
              (buffer-process)
            (progn
              (set-buffer buffer)
              (make-process
               (format
                nil "java -cp "~A" kawa.repl --full-tailcalls"
                (map-slash-to-backslash (merge-pathnames "kawa-1.7.90.jar" (si:system-root)))))))))

これらを参考に、clojureのパスを設定やコマンド実行に変更してやるように、カキカキすれば。

; Clojure - directly
(setf *scheme-process-open-hook*
      #'(lambda (buffer)
          (if (buffer-process)
              (buffer-process)
            (progn
              (save-window-excursion
                (with-output-to-temp-buffer ("*Clj run*")))
              (make-process
               (format
                nil "java -cp ~A clojure.main"
                (map-slash-to-backslash
                 (merge-pathnames "C:/Home/clojure-1.1.0/clojure.jar" (si:system-root)))))))))
(setf *scheme-process-read-filter*
      #'(lambda (proc text)
          (pop-to-buffer "*Clj run*" 10)
          (goto-char (point-max))
          (insert text)
          (set-window (get-buffer-window (process-buffer proc)))
          (refresh-screen)))

 ほい、完了。
で実行してみると、おぉ〜動く、動く(*⌒∇^)ノ

xyzzyclojureじゃん

 プログラミングClojureのコード参考にチョコチョコっと、スクリプティング


 ほい、問題なさそうですね^^;


 まだDOSプロンプトよりチョット便利ってだけなんですけど、これでclojureライフが満喫できまう(*´Д`)




プログラミングClojure
プログラミングClojure
posted with amazlet at 10.02.15
Stuart Halloway
オーム社
売り上げランキング: 22982

入門xyzzy
入門xyzzy
posted with amazlet at 10.02.15
山本 泰三 日江 政弘 稲原 知久 佐野 匡俊
オーム社
売り上げランキング: 79264

その2へ続く!   と、いいなw;

 続くと良いですよね^^;

*1:JVMscheme実装

*2:コピった評価器の設定項目にはそう書いてた、使った事ないけど(´・ω・),