smart-compileの設定

Emacsのsmart-compileの設定でハマったこと

smart-compile

Emacsで書いたRubyのコードをそのまま Emacsから実行できるものです。 Rubyに限らず他の言語も可能です。

手順
1.smart-compile.elを こちらからDLする、あるいはpackage.elでインストール (~/.emacs.d/elpaに配置されます)
2.smart-compile.elをloat-pathが通っているディレクトリ(~/.emacs.d/elisp等)に置く
3.人によってEmacsのelの管理は違うと思いますが、
私の場合、~/.emcs.d/initsというディレクトリを作り、そこにパッケージごとの
設定ファイル(71-ruby.el等)を配置し、init-loaderで読み込むという方式にしています。
という訳で、設定ファイル(~/.emacs等)に以下の記述を追加します。

(require 'smart-compile)
(global-set-key (kbd "C-x c") 'smart-compile)
(global-set-key (kbd "C-x C-x") (kbd "C-x c C-m"))

4.smart-compileのデフォルトではRubyのソースをsyntax checkするだけに
なっているので、smart-compile.elを修正します。
64行目あたりの 
("\\.rb\\'" . "ruby -cw %f")("\\.rb\\'" . "ruby %f")に修正し、
直接実行できるようにします。
5.以上で設定は完了です。C-x C-xを実行すると、即実行できます。

のはずだったんですが、C-x C-xを実行しても、ruby -cwが実行されてしまい、
syntax checkだけで終わってしまう・・・。

思考錯誤した結果、以下のように設定ファイルを変更しました。

(require 'smart-compile)
(setq smart-compile-alist
      (append
       '(("\\.rb$" . "ruby %f"))
              smart-compile-alist))
(global-set-key (kbd "C-x c") 'smart-compile)
(global-set-key (kbd "C-x C-x") (kbd "C-x c C-m"))

無事EmacsからRubyを実行することができました。