emacsのpython-modeでもauto-complete.elを使う

NO IMAGE

こないだは、R用のauto-complete.el拡張を書いてみたわけですが、ここまで来るとpython開発環境もemacsにしておきたい。

というわけで、どうにか使えるようになったので、まとめてみます。ちなみに当方の環境は32bit ubuntu9.04です。

python開発環境の整備

その前に、python開発環境on emacsの整備から。
実は、emacsとpythonの関係はかなりややこしいことになっていましてemacs21時代はpython-mode.elなるpython-modeが主流だったようなのですが、emacs22ではpython.elなるpython-modeがデフォルトで入ってしまい、かなり混乱している模様。(ref:Python開発環境 ‎(紫藤のWiki)‎
しかもpython.elはあまりできがよろしくないらしく、あんまり普及してないっぽい。てなわけで、今回は、python-mode.elベースでやってみます。

まずは、pymacsをインストール。ubuntuでは sudo apt-get install pymacsでおk。それ以外の方は、ぐぐってください。
次にpython-mode.elを入れとく。これは多分入れなくてもうまくいくはずなのですが、たいして手間もかからないので入れとく。
python-mode.el project filesから落としてきてload-pathの通ったところに入れておいて~/.emacsに次のように書きます。

[cpp]
(setq auto-mode-alist (cons ‘("\.py$" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons ‘("python" . python-mode)
interpreter-mode-alist))
(autoload ‘python-mode "python-mode" "Python editing mode." t)
[/cpp]

ここまでして、いちおベースは完成。次は補完環境を作っていきます。

補完ライブラリの導入

何はともあれ、auto-complete.elを導入。~/.emacsに次のように書きます。

[cpp]
(require ‘auto-complete)
(global-auto-complete-mode t)
[/cpp]

ここからが、ちと大変でした。まずは、こちらで紹介されていたropemacsを使おうかとしたのですが、どうやら現行のauto-complete.el Ver0.2.0ではうまくいかんようです。
てなわけで、さっさと見切りを付けて他の補完ライブラリを探してみるとpysmellなるものを発見。
インストール方法はeasy_installを入れているのであれば、端末でeasy_install pysmellでおk。入れてないときは、落としてきたやつを解凍してできたフォルダの中でpython setup.py installします。
んで、フォルダの中にあるpysmell.elをload-pathの通ったところに入れておいて~/.emacsに次のように書きます。

[cpp]
(require ‘pysmell)
(add-hook ‘python-mode-hook (lambda () (pysmell-mode 1)))
[/cpp]

ここまでくれば、もう少し。お次は補完候補用のファイルを生成するために、.pyを入れるディレクトリより浅いところでPYSMELLTAGS fileを作ります。僕はhomeにいれときました。
これは端末に次のように打ち込みます。

[cpp]
cd /home/hogehoge
pysmell .
[/cpp]

これでpysmellを使った補完ができるようになります。でも、補完するときにM-/押したりしないといけないだの、かなり使い勝手悪いのでauto-complete.elから呼び出せるように~/.emacsに次のように書きます。

[cpp]
(defvar ac-source-pysmell
‘((candidates
. (lambda ()
(require ‘pysmell)
(pysmell-get-all-completions))))
"Source for PySmell")

(add-hook ‘python-mode-hook
‘(lambda ()
(set (make-local-variable ‘ac-sources) (append ac-sources ‘(ac-source-pysmell)))))
[/cpp]

emacs22とemacs23で試してみましたが、問題なく使えそうです。
これで、ちょっと面倒でしたが、auto-complete.elでpythonの関数群を補完できるようになるはず。
python開発環境としてあまり評判の良くないemacsですが、ここまでくるとかなり使い勝手よくなります。