Emacs で processingのファイルを編集する

ふだんはPerlばっかりいじってて、まぁそれはそれで楽しいんですけど、時たまグラフィカルなプログラミングにも手を伸ばしたい欲がでます。なので、ときおりprocessingとかいう言語(環境)をいじってます


http://processing.org/


processingのアーカイブをダウンロードして、メインのバイナリを起動するとprocessing用のエディタが立ち上がります。そこにコードを書いて実行ボタンを押すとグラフィカルな出力がでるって感じなんですが、このエディタが非常に扱いにくい代物です。 ( Emacs/Cocoaアプリのキーバインドに慣れてしまうとこういうところで弊害が )

ということで Emacsでprocessingのソースをいじります。

といってもprocessingアプリで書いたソース自体は、sketch_070531a/sketch_070531a.pde という感じでテキストとして保存されているので任意のエディタで開けます。でこれを編集して実行するには、Emacsで保存 -> processingエディタでソースの最読み込み -> 実行する っていう手順を踏むことになります。これが面倒なのでelisp書きます(Mac向けです。ごめんなさい)

;;; 現在のバッファで編集しているファイルをopenコマンドで開く                                                                                                                                                            
(defun open-current-buffer-file ()
  (shell-command (format "open %s" (buffer-file-name (current-buffer)))))

;;; applescriptを走らせる                                                                                                                                                                                 
(defun run-apple-script ()
  (shell-command-to-string (format "/usr/bin/osascript -e '%s' &" apple-script-code)))

;;; processingの起動、実行                                                                                                                                                                                
(defvar apple-script-code "                                                                                                                                                                               
tell application ?"Processing?"                                                                                                                                                                           
  activate                                                                                                                                                                                                
end tell                                                                                                                                                                                                  
                                                                                                                                                                                                          
tell application ?"System Events?"                                                                                                                                                                        
  if UI elements enabled then                                                                                                                                                                             
    key down command                                                                                                                                                                                      
    keystroke ?"r?"                                                                                                                                                                                       
    key up command                                                                                                                                                                                        
  end if                                                                                                                                                                                                  
end tell                                                                                                                                                                                                  
")

;;; セーブしたら最読み込み/実行                                                                                                                                                                           
(add-hook 'after-save-hook '(lambda ()
                              (open-current-buffer-file)
                              (run-apple-script)))


;;; ? はバックスラッシュです 文字化けてます

少々強引ですが、とりあえずこれで用件は満たせます。Emacsでprocessingのバッファを編集して保存すると、ソースを最読み込み => 実行 となります。

ちなみにprocessingのシンタックスはC言語ライクなんで、c-modeでもなんとか編集できます

( * 環境設定 > ユニバーサルアクセス > 補助装置を使用可能にする をONにする必要があります !.... でも、なんか挙動がおかしいときもあるなぁ... )