Gunakan readline
Python binding. Misalnya,
import readline
def completer(text, state):
options = [i for i in commands if i.startswith(text)]
if state < len(options):
return options[state]
else:
return None
readline.parse_and_bind("tab: complete")
readline.set_completer(completer)
Dokumen modul resmi tidak lebih mendetail, lihat dokumen readline untuk info lebih lanjut.
Ikuti dokumentasi cmd dan Anda akan baik-baik saja
import cmd
addresses = [
'[email protected]',
'[email protected]',
'[email protected]',
]
class MyCmd(cmd.Cmd):
def do_send(self, line):
pass
def complete_send(self, text, line, start_index, end_index):
if text:
return [
address for address in addresses
if address.startswith(text)
]
else:
return addresses
if __name__ == '__main__':
my_cmd = MyCmd()
my_cmd.cmdloop()
Keluaran untuk tab -> tab -> kirim -> tab -> tab -> f -> tab
(Cmd)
help send
(Cmd) send
[email protected] [email protected] [email protected]
(Cmd) send [email protected]
(Cmd)
Karena Anda mengatakan "BUKAN juru bahasa" dalam pertanyaan Anda, saya rasa Anda tidak ingin jawaban yang melibatkan python readline dan semacamnya. (edit :kalau dipikir-pikir, jelas bukan itu masalahnya. Ho hum. Saya pikir info ini menarik, jadi saya akan meninggalkannya di sini. )
Saya pikir Anda mungkin setelah ini.
Ini tentang menambahkan penyelesaian tingkat shell ke perintah arbitrer, memperluas penyelesaian tab bash sendiri.
Singkatnya, Anda akan membuat file yang berisi fungsi shell yang akan menghasilkan kemungkinan penyelesaian, simpan ke dalam /etc/bash_completion.d/
dan daftarkan dengan perintah complete
. Berikut cuplikan dari halaman tertaut:
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--help --verbose --version"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _foo foo
Dalam hal ini, ketikkan foo --[TAB]
akan memberi Anda nilai dalam variabel opts
, yaitu --help
, --verbose
dan --version
. Untuk tujuan Anda, pada dasarnya Anda ingin menyesuaikan nilai yang dimasukkan ke dalam opts
.
Lihat contoh di halaman tertaut, semuanya cukup mudah.