Özel bash sekmesi tamamlama


34

cooltoolSeçenekler listesi ile özel konsol yardımcı programı var

fooOption
barOption

tabTuşuna basarak seçenekleri otomatik olarak tamamlayabilmek için ne yapmalıyım ?

Ben yazılan kullanıcı demek

$ ./cooltool foo_

daha sonra basıldı tab. Ve sonra

$ ./cooltool fooOption _

ortaya çıktı.


1
Yayını geçme.
Wuffers

2
Bunun taşındığını ve diğerinin göç etmediğine dikkat edin. Birçok kullanıcının hala birden fazla SE sitesine soru göndermemesi gerektiğinin farkında olmadığını düşünüyorum. Hızlı bir cevap daha iyi bir şans için birkaç farklı forumda isteyebileceğiniz birleşik bir sistem olmayan forumları ayırmak için kullanılırlar.
jcrawfordor

Yanıtlar:


2

İçin bir bash tamamlama komut dosyası yazın cooltool. Bash tamamlama paketi örnek olarak kullanabileceğiniz birçok popüler programlar için komut dosyaları ile birlikte gelir.


40

En basit yol, aşağıdakileri .bashrc dosyasına eklemektir.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Her yazdığınızda cooltool f[TAB][TAB], _cooltool()işlev çağrılır. Mevcut kısmi kelimenizin ne olduğunu ve ardından compgenhangi seçeneklerin eşleştiğini hesaplar. Bunlar daha COMPREPLYsonra görüntülenen bir dizide saklanır . Bak man completeve man compgendetaylar için.

Güzel bir eğitim için: Kendi Bash Tamamlama İşlevinizi yazma




2

Dogbane'nin cevabına ek olarak, şunları da yapabilirsiniz:

complete -W "fooOption barOption" cooltool

Eğer sadece dize başından itibaren bir kelime listesini eşleştirmek istiyorsanız. Görünüşe göre, komple ve kompgen çoğu seçeneği paylaşıyor. Yalnızca kullandığım komutlarda "dizgenin başlangıcı" ile eşleştiğimi fark ettim, bu nedenle _cooltool işlevinde başka şeyler de yapabileceğinizi temiz buldum:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

Seçenek adındaki herhangi bir yeri eşleştirmek için

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.