web-dev-qa-db-ja.com

自分のスクリプトからShellをフィッシュするためのタブ補完を提供するにはどうすればよいですか?

Ubuntu13.10とfish2.1.0を実行しています。コマンドラインからいくつかのタスクを実行するためのPythonスクリプトを自分で作成したいと思います。スクリプトにはコマンドライン引数が必要です。

Fishが特定の引数に対して可能な値を要求して取得できるように、スクリプトを作成するにはどうすればよいですか。潜在的な値のリストは動的です。つまり、プログラムによって決定されます(たとえば、いくつかの基準に一致するフォルダー名のリスト)。

私が目指している最終結果は次のようなものです。

user@machine ~> myprog argument=fol<TAB>
folder1  folder2  folder3

ここで、myprogは私のスクリプトファイル、argumentは引数名、folder1 etcは、スクリプト内の関数によって生成された有効な値です。

これは可能ですか?もしそうなら、どのように?

20
david.libremone

GitHubに関するzancheyのコメント から適応:

--_completionオプションを使用するプログラムmyprogがある場合、次のようなmyprogの単一の完了スタブを記述できます。

complete --command myprog --arguments '(myprog --_completion (commandline -cp)'

その後、プログラムはmyprog --_completion myprog some arguments hereとして呼び出され、適切な完了で応答できます。完了している現在のトークンのみを返す必要があり(これを(commandline -ct)でプログラムに渡すか、自分でトークン化することもできます)、オプションでタブと簡単な説明が続きます。複数の補完は新しい行で区切られます。

ノート:

  • --_completionpython-selfcompletion ライブラリによって提案された規則ですが、好きなものを使用でき、この回答はPython固有ではありません
  • dbarnett/python-selfcompletion#2(GitHubコメント) で説明されているように、デフォルトの補完を指定する方法はありません。コマンドごとに短いスタブを作成する必要があります。

特にPythonスクリプトの場合、次のライブラリは将来のある時点で魚の補完をサポートする可能性があります(ただし、まだサポートしていません)。

13
david.libremone

スクリプトの魚のオートコンプリート関数を提案どおりに作成する必要があります ここ そしてsourceするか、~/.config/fish/completionsフォルダー内に配置します。

参照: 魚のドキュメント

9
furins