タツノオトシゴって、あの見た目なのですが、実は魚類だったんです。なんとなく甲殻類と思っていた。最大の種は30cmを超えるそうで、あの姿でその大きさというのを想像するとちょっとこわい。。
Pythonでは、かなり強力なコマンド引数パーサとしてargparseが使えます。
いろんなオプションをもつコマンドを作ったら、引数の入力も面倒。
ということで、自分の作ったPythonスクリプト専用の補完がzshで効くようにしたいなーと思っていたら、genzshcompというパッケージがありました。
コードのほうには全く手を入れる必要はありません。
普通にargparseのオプションを記述していってください。
下のサンプルコードは特に意味はないです。
#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse parser = argparse.ArgumentParser(description = "Description of your code") parser.add_argument('--input-file', '-i', type = str, required = True, help = 'Filename of input data') parser.add_argument('--nprocess', '-n', type = int, help = 'Number of iteration') parser.add_argument('--algorithm', '-a', choices=['minmax', 'alphabeta'], help = 'Algorithm') parser.add_argument('--output', '-o', type = str, help = 'Filename of output') args = parser.parse_args()
ここで、補完スクリプトを置くための場所と設定を確保します。
% mkdir -p $HOME/.zsh/completion % echo "fpath=($HOME/.zsh/completion/ $fpath)" >> ~/.zshrc % echo "autoload -Uz compinit" >> ~/.zshrc % echo compinit >> ~/.zshrc
書いたPythonスクリプトに対して、argparseのヘルプ出力をgenzshcompにかませると補完スクリプトに変換してくれます。なにそれすごいww
% ./prog.py --help | genzshcomp > ~/.zsh/completion/_prog % source ~/.zshrc
これで、zshrcを再読み込みすれば補完が効くようになります。
なお補完スクリプトは、アンダースコアで始まるファイル名でなければいけません。ハマったぜ。。。
スクリプトの方を書き換えたら、completionファイルも併せて更新してzshをリロードしてください。
genzshcompに渡せる情報には限りがあるため、例えば実在するファイルでないとダメとか、何らかのコマンドの結果を補完結果に出す(例えばgitのブランチ名補完)みたいなことは難しそうです。
それでも、オプション何指定しないといけなかったっけ?と思った時ぱっと見られるようになったことで、とてもQoLが上がったので、オススメです。