EmacsでProcessingを実行する際につまずいたこと

processing-mode自体はすんなり入ったんだけどemacsからの実行で詰まった。
4時間くらい格闘してemacsLispのコードを解読してみたりとか、結果的にいい経験になったのかな

環境はwindows7 64bit、gnupack11.0basic、Processing2.1.1
導入はProcessing を Emacs で書いて Emacs から実行するを参考にさせていただきました。

ソースコードはgitを使わなくてもhttps://github.com/ptrv/processing2-emacsからzipでダウンロードできる。*1適当な場所に解凍した後は設定ファイルに以下のように記述するのだけれど、ここで注意が必要なのが~/.emacs等がすでにあるとそちらが呼ばれて~/.emacs.d/init.elは読み込まれないということ。
今回の僕の環境、gnupack11.0basicに入っているemacsはあらかじめ色々と設定が施されており、その設定ファイルは~/.emacs.d/init.elにある。これに気付かずに~/.emacsを作成して追加の設定を記述してしまった僕のemacsは、shellが正しく起動されず、processing-javaコマンドが打てなかったらしい。
初心者はやりがちなのかもしれない。

(add-to-list 'load-path "~/elisp/processing2-emacs/")
(autoload 'processing-mode "processing-mode" "Processing mode" t)
(add-to-list 'auto-mode-alist '("\\.pde$" . processing-mode))
(setq processing-location "c:/processing-2.1.1/processing-java.exe")
(setq processing-application-dir "c:/processing-2.1.1/processing.exe")
(setq processing-sketch-dir "c:/Users/soma/Documents/Processing")

次に適当なProcessingコードを書いて実行させるのだけれど、今度はコマンドをつかうとスケッチと出力ファイルのパスが以下のようになってしまう。
f\:/workspace/program/processing/ProcessingTest/
つまりf:/の部分に\が挿入されてパスがおかしくなってしまう。
これはprocessing-mode.elのprocessing-make-compile-commandの定義に使われているshell-quote-argument関数が原因らしい。shell-quote-argument関数はマニュアルによるとシェル構文で表した引数を文字列で返す関数らしい。これによってc:/部分がおかしくなってしまったみたいだ。
UNIXwindowsの違いで駄目な感じなんだと思う。
僕はとりあえずprocessing-mode.el中の三箇所(147、157、159行目)のshell-quote-argumentをすべてevalに直すことで動作した。

これで快適なProcessing環境が整いました。
めでたしめでたし

*1:フォルダ名はprocessing2-emacs-masterになっていたので直しました