auto-complete-ruby.elを使ってオムニ補完する

 数日前からauto-complete.elを使い出している。知らない人のために説明しておくと、auto-complete.elというのはカーソル位置にポップアップで補完候補を出してくれるEmacs用のライブラリだ。auto-complete.elという名前だけど、カーソル位置にポップアップが出てくるというのが非常に重要だと思っている。
 今仕事で書いているのは主にpythonperlのコードなのでオムニ補完(文脈を見て補完してくれる)はできないんだけど、長めのメソッド名などをサクッと補完できると、それだけで結構いい感じだ。
 Rubyの場合はauto-complete-ruby.elを使うことでrcodetoolsを使ったオムニ補完ができるのだが、これを動かすのに結構ハマったのでメモを残しておく。rcodetoolsはgemで普通にインストールできる。

gem install rcodetools

 rcodetoolsは動かすのにreadlineが必要らしいので、libreadline-rubyもインストールしておく。

aptitude install libreadline-ruby

 debパッケージのrubygemsを入れるとgemは基本的に/var/lib/gems以下に入るけど、ここには普通はパスが通ってないので、パスを通しておく。

export PATH=$PATH:/var/lib/gems/1.8/bin

 ここまでが事前準備。後はauto-complete で Ruby のメソッドを補完するを参考にすれば普通に動くはずなんだけど、手元の環境では動かなかった。手元では.emacsの設定を以下のようにしてある。

 (when (require 'auto-complete nil t)
   (global-auto-complete-mode t)
   (setq ac-dwim nil)
   (set-face-background 'ac-selection-face "steelblue")
   (set-face-background 'ac-menu-face "skyblue")
   (setq ac-auto-start t)
   (global-set-key "\M-/" 'ac-start)
   (setq ac-sources '(ac-source-abbrev ac-source-words-in-buffer))
   (add-hook 'ruby-mode-hook
             (lambda ()
               (require 'rcodetools)
               (require 'auto-complete-ruby)
               (make-local-variable 'ac-omni-completion-sources)
               (setq ac-omni-completion-sources '(("\\.\\=" . (ac-source-rcodetools)))))))

 Emacsは詳しくないので、make-local-variableとかが必要なのかどうかはよく分かってない。
 あと、PythonPerlではオムニ補完できないと書いたけど、Pythonではもうできるみたい。

 後で設定しておこう。この分だとPerlも誰かがもう実装してそうな気がしてきた。