2016-03-30 1 views
1

git checkoutの通常の自動補完では、自動補完できる分岐のリストが表示されることがあります。 git checkoutをラップする自分の関数に同じオートコンプリート動作を追加するにはどうすればよいですか?bash関数を他の何かのように自動補完するにはどうすればよいですか?

仮に:git_checkout機能はgit checkoutと同じように自動的に補完するよう

function git_checkout() { 
    git checkout $1 
    do_some_custom_other_stuff 
} 

は、どのように私はそれを作るのですか?

+0

'git checkout'に特定の補完機能があるかどうかを確認し、それをあなたの関数にもアタッチします。しかし、私はそこにないと思う。私はgit補完関数がコマンドラインをテストしていると思うので、おそらくそれをいくつかプレイし、おそらくあなた自身の(小さな)補完関数を書く必要があります。これをgitエイリアスとして書くと、デフォルトの補完関数を使ってヘルパー関数を呼び出すことができます。 –

答えて

2

complete -p gitを実行すると、gitのデフォルトの完了を確認できます。

$ complete -p git 
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git 

ここで重要な部分は-F __git_wrap__git_mainビットです。

あなたは__git_wrap__git_main機能点検場合:

$ type __git_wrap__git_main 
__git_wrap__git_main is a function 
__git_wrap__git_main() 
{ 
    __git_func_wrap __git_main 
} 

をあなたはそれだけで__git_func_wrap機能を通じて__git_main関数を呼び出すことがわかります。 (あなたがしたい場合は、自分自身のためにそれを調べることができます。)あなたは==それはコマンドが実行さに基づいて_git_XXX機能を検索しようとすると、案の定、_git_checkout機能(type -t _git_checkoutがあることを見__git_main機能を見てみると

function)。

この機能は、git checkoutの補完サポートを提供します。それがあなたのカスタム関数に必要なものです。それで、あなたが完成した使用をするために必要な機能です。

これを直接呼び出すことはできませんが、これをすべて開始した__git_func_wrapコールの設定が少し必要であることを覚えておいてください。したがって、自分でラップする必要があります。

私たちが始めた__git_wrap__git_mainの機能は(__git_mainの場合)まさにそれです。

だから我々は自分自身そのような関数を書く:その後、

__git_wrap_git_checkout() { 
    __git_func_wrap _git_checkout 
} 

とあなたの機能のための補完機能としてそれをフックアップ:

complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout git_checkout 

と私達は行くために良いことがあります。


代わりに、独立したシェル関数のGitの別名として、この機能を実装すること_git_git_checkout機能を提供し、我々はgitの補完サポートを内蔵し、のみを利用することができることを意味します(当社__git_wrap_git_checkout関数と同じ_git_ + alias_nameの名前は__git_mainとなります)、gitは自動的に呼び出しを行います。

関連する問題