Zsh Completion Function for setup.py

setup.py のサブコマンド(install とか)やオプションをよく忘れるので、 Zsh補完関数を書いてみました。

http://farm3.static.flickr.com/2701/4274000899_0692d0967a.jpg http://farm5.static.flickr.com/4058/4274000717_130c32cf9b.jpg

hhatto / zshcomp_for_setuppy / source . _setup.py — bitbucket.org

補完関数自体の書き方がほとんどわからなかったので、 既にあるcvsコマンドの補完関数を参考に作成しました。 若干意味の無い処理が紛れ込んでいると可能性がありますが、 追々対応していきたいです。

工夫した点

setup.pyのヘルプ表示(--help オプション)を元にして手書きでもいいのですが、 それだとつまんないのでスクリプト組んでみました。

hhatto / zshcomp_for_setuppy / source . get_distutils-option.py — bitbucket.org

参考程度に書くとオプションリストを引き出すには、 以下のようなコードとなります。

from distutils import dist
d = dist.Distribution()
print d.get_command_list()
print d._get_toplevel_options()
print d.get_command_obj('install').user_options

どの辺にオプション処理あるのかなぁと思って、 ちょろっとソーストレースしてみました。 setup.pyにsetuptoolsがインポートされているので setuptoolsをダウンロードして検索してみましたがマッチしない。 あっ、と思って、distutilsを検索しなおしたら無事該当処理が 見つかりましたとさ。 setuptoolsは拡張コマンドをサポートしているので、 それ以外のコマンドについてはdistutilsを見てあげないといけませんね。

おわりに

そもそもがsetup.pyのZsh補完関数ってすでにありそうなんだけどな。。。 ググっても見つかりませんでした。 install しか使わないからそんなに需要無いんかな?

拙作のgenzshcompで生成したかったですが、 サブコマンドとか難しそうなので今回は一時しのぎ的に作成しました。

setuptoolsで拡張したコマンドについても今後対応したいです。 (bdist_egg とか。)