2011-05-24 8 views
3

私はコンソールの自動補完を持っていることの方法を探しています - のようなアプリケーションを与えられたような:それを実行している場合Cコンソールアプリケーションのオートコンプリートダイナミック引数

int main (int argc, char ** argv) 
{ 
    if (argc == 1) return EXIT_FAILURE; 
    if (strcmp(argv[1], "good")==0) printf("good\n"); 
    if (strcmp(argv[1], "bad")==0) printf("bad\n"); 
    return EXIT_FAILURE; 
} 

、私は後に[タブ]を押したいと思います可能な便利なオプションの1つを私に与えるようなコマンドです。

例:

./a.out g[tab] 

./a.out good 

への完全自動私ははるかに強い自動を期待していた、/etc/bash-completion.d/編集したくないでしょう実行可能ファイル自体の中で、呼び出される関数のようなものです。おそらく、可能なオプションのリストをデータベースに問い合わせることができます。あるいは、オプションが何であるかを知らせるメッセージを出力するかもしれません。

これは単に完全に不可能だと思う場合は、私に教えてください!

+0

最も近いと思うのは(少なくともzshで、私が推測するbashではないと思いますが)、 "標準"レイアウトの1つに有効なオプションのリストを返す--helpオプションを追加することですシェルの補完が理解できるようになります。 – Flexo

答えて

2

補完は、アプリケーションを実行するシェルのプロパティです。サポートしたいすべてのシェル(bash、zsh、tcsh、fishにはカスタマイズ可能な補完機能があります)の補完機能を提供する必要があります。完了関数はアプリケーションを呼び出すことができます(たとえばyou_application --list-possible-argumentsを実行)。補完を生成するために選択したものを実行します。これは、用語ではすでに「強力な」補完です。

bashでは、complete built-inで補完を宣言します。例としてを見てください(gpgはかなり簡単な例です; gitはかなり関わりがあります)。

+0

素晴らしい!私はこれ以上見ていないか、または記述子の引数要求でアプリケーション自体を呼び出す洞察力を持っていたことは残念です。私がしなければならないことは、bash-completeをインストールすることです(私はMac OSを使っています - それは似ていると思っていましたが、Mac OSのbashはそれに付属していないようです) –

0

あなたはBASHを使用している場合、この同様のポストを見て:

Auto-complete command line arguments

======================= =========

独自のコマンドラインを提供したい場合は、Readline図書館で見て:

をGNU Readlineライブラリはで使用するための機能の セットを提供 ユーザーが コマンドラインを入力したときに編集できるアプリケーション Emacsとviの編集モードはいずれも です。 Readlineライブラリ は、以前に入力された コマンド行のリストを維持し、それらの行を思い出すと、おそらく 再編集し、そして以前 コマンドに関する cshのような履歴展開を行う に追加機能が含まれています。

+0

これはシェルコマンドラインではなく、アプリケーション内のコンソールスタイルのコマンドです。 – Flexo

+0

@awoodland:ああ、私は質問を誤解しました! – Nick

関連する問題