Penyelesaian tab bash khusus

34

Saya memiliki utilitas konsol khusus saya cooltooldengan daftar opsi

fooOption
barOption

Apa yang harus saya lakukan untuk mem-bash autocomplete opsi dengan menekan tabtombol?

Maksud saya pengguna mengetik

$ ./cooltool foo_

lalu ditekan tab. Lalu

$ ./cooltool fooOption _

muncul.

Wuffers
sumber
1
Jangan posting silang.
Wuffers
2
Perhatikan bahwa yang ini dimigrasi dan yang lain tidak. Saya pikir banyak pengguna masih tidak menyadari bahwa mereka seharusnya tidak memposting pertanyaan di beberapa situs SE. Mereka digunakan untuk membedakan forum yang bukan sistem terpadu, di mana Anda dapat bertanya di beberapa forum yang berbeda untuk peluang jawaban cepat yang lebih baik.
jcrawfordor

Jawaban:

2

Tulis skrip penyelesaian bash untuk cooltool. Paket bash-completion dilengkapi dengan skrip untuk banyak program populer, yang dapat Anda gunakan sebagai contoh.

grawity
sumber
40

Cara paling sederhana adalah menambahkan berikut ini ke .bashrc Anda.

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

Setiap kali Anda mengetik cooltool f[TAB][TAB], _cooltool()fungsi dipanggil. Ini akan mengetahui apa kata parsial Anda saat ini dan kemudian compgenakan menentukan opsi mana yang cocok. Ini disimpan dalam array yang disebut COMPREPLYyang kemudian ditampilkan. Lihat man completedan man compgenuntuk detailnya.

Untuk tutorial yang bagus, lihat: Menulis Fungsi Penyelesaian Bash Anda sendiri

dogbane
sumber
7

Anda mungkin ingin melihat lebih dekat di dalam direktori /etc/bash_completion.d di sistem Anda.

Anda juga harus membaca pengantar ini . Bagian kedua dari pendahuluan adalah yang Anda butuhkan.

AlexTheBird
sumber
1
Saya menggunakan Mac OS X 10.6, jadi tidak ada direktori
Ah, bagus untuk tahu.
2

Selain jawaban dogbane, Anda juga bisa melakukan:

complete -W "fooOption barOption" cooltool

jika Anda hanya ingin mencocokkan daftar kata dari awal string. Tampaknya sebagian besar opsi lengkap dan kompen. Saya hanya memperhatikan "permulaan string" yang cocok dengan perintah yang saya gunakan, jadi saya merasa rapi bahwa Anda dapat melakukan hal-hal lain dalam fungsi _cooltool seperti:

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

untuk mencocokkan di mana saja dalam nama opsi.

dcc310
sumber