2016-03-30 14 views
1

git checkout için normal otomatik tamamlama, daha sonra otomatik tamamlayabileceğiniz dalların listesini görüntülemektir. git checkout'u saran işlevim için aynı otomatik tamamlama davranışını eklemek için ne yapabilirim?Başka bir şeymiş gibi otomatik tamamlayacak bir bash işlevini nasıl edinirsiniz?

Varsayımlı:

function git_checkout() { 
    git checkout $1 
    do_some_custom_other_stuff 
} 

Nasıl bu git_checkout işlev git checkout aynı otomatik olarak tamamlar, böylece yapabilirim?

+0

'Git checkout' için belirli bir tamamlama işlevi olup olmadığını bulup, bunu da işlevinize ekleyin. Ama sanırım yok.Git tamamlama işlevi tamamlanmış komut satırını test ettiğimi düşünüyorum, bu yüzden muhtemelen bir kısmı ile oynamak ve muhtemelen bunun için kendi küçük (küçük) tamamlama işlevini yazmanız gerekir. Bunu bir takma ad olarak yazarsanız yardımcı işlevinizi çağırmak için varsayılan tamamlama işlevini kullanabilirsiniz (ab). –

cevap

2

complete -p git'u çalıştırırsanız, varsayılan tamamlamanın git için ne olduğunu görebilirsiniz.

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

Burada önemli olan kısım -F __git_wrap__git_main bittir.

Eğer __git_wrap__git_main fonksiyonunu incelemek ise: Bunun sadece __git_func_wrap işlevi aracılığıyla __git_main işlevini çağırır görebilirsiniz

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

. (İstersen kendin kontrol edebilirsiniz.)

__git_main fonksiyonu baktığımızda bunu tabii ki, çalıştırılan ve komuta dayalı _git_XXX işlevlerini aramak çalışır görüyoruz, bir _git_checkout işlevi var ( type -t _git_checkout == function).

Bu işlev, git checkout için tamamlama desteğini sağlar. Özel işlevin için istediğin bu. Yani bu, tamamlanma kullanımına sahip olmanız gereken işlevdir.

Doğrudan bunu çağıramazsınız, hatırlamanıza rağmen, tüm bunları başlatan __git_func_wrap numaralı çağrıdan biraz kurulum beklediğinden, kendiniz sarmanız gerekir.

Başladığımız __git_wrap__git_main işlevinin tam anlamı nedir (__git_main için).

__git_wrap_git_checkout() { 
    __git_func_wrap _git_checkout 
} 

ve ardından fonksiyonu için tamamlama fonksiyonu olarak kanca:

Öyleyse bunu bizim gibi bir işlev yazmak

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

ve biz gitmek için iyi olmalıdır.


biz yararlanmak gelmesi anlamına gelecekti yerine bağımsız bir kabuk işlevinin bir git takma adı olarak bu işlevi uygulamak git tamamlama yerleşik destek ve sadece bizim __git_wrap_git_checkout işleviyle aynı _git_git_checkout fonksiyonunu (sağlamak yukarıda ve _git_ + alias_name için __git_main beklediği gibi) ve git bu çağrıyı otomatik olarak yapar.

İlgili konular