9

一部のプログラム(hgなど)では、ユーザーがコマンドの特定の部分をタブで入力できることに気付きました。たとえば、hgリポジトリの作業ディレクトリで、次のように入力します。

hg qpush --move b8<TAB>

「b8」で始まるパッチキュー内の水銀パッチを使用してコマンドを完了しようとします。

私がやりたいのは、私のプログラムでこの動作を模倣することです。つまり、特定のディレクトリ内のファイルに依存する一連のコマンドがあり、シェルでタブ補完を提供できるようにしたいと考えています。Ubuntu Linuxでこれを提供するためのAPIはありますか(私のスクリプトが書かれているので、Pythonを使用することが望ましいです)?

4

4 に答える 4

8

これを行うには、シェルのタブ補完モジュールを作成する必要があります。ほとんどのLinuxディストリビューションのデフォルトのシェルはですbash。したがって、完了スクリプト(通常はシェルスクリプト)を作成する必要があります。スクリプトを作成したら、に追加し/etc/bash_completion.d/ます。これは、プログラムと一緒に配布する必要があります(Linuxディストリビューションの場合、パッケージに含まれています)。

Debian Administrationには、完了スクリプトを作成するためのガイドがあります。Macでコンプリーションを使用する方法については、https://trac.macports.org/wiki/howto/bash-completionを参照してください。

補完ファイルの例については、bash-completionDebianGithubにもあります)のプロジェクトをご覧ください。https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorialも参照してください。

を使用する場合はzsh補完を書き込むためのドキュメントにリンクされているhack.augustoを使用します。

于 2013-02-14T23:47:42.557 に答える
1

これがreadlineモジュールの目的です。

実際、readline は一般的な C ライブラリであるため、多くの言語でバインドされています。そして、私はそれをとても楽しんだと言えます。

楽しむ B)

于 2013-02-14T16:09:29.770 に答える
0

シェルを試してみるのもいいかもしれません。zshシェルには、多数のアプリケーションをサポートする優れた補完システムがあります。

補完システムはシェル言語で書かれていますが、本当に python を使いたい場合は、補完関数内からインタープリターを実行できます。欠点は、独自のソフトウェアの補完を書きたい場合は、いくつかの読み取りを行う必要があることです (たとえば、ユーザーマニュアルマンページ)。

于 2013-02-14T23:13:11.860 に答える
0

Python ライブラリの「cmd」モジュールのソースを見てください。コマンド補完をサポートしています。

于 2013-02-15T00:31:20.747 に答える