autocomplete : add my own funcs.

This commit is contained in:
Dmitry Voronin 2023-10-23 13:07:57 +03:00
parent cb7d6668fb
commit 41ba3676cd

View file

@ -68,3 +68,92 @@ chmod a+x admin.sh autocomplete.sh
Source: https://askubuntu.com/a/483149/24155
[source](https://unix.stackexchange.com/a/291867)
# My own autocomplete functions.
```bash
# bash autocomplete.
# usage: _foo () { _autocomplete "{foo,bar}" } ; complete -F _foo foo
# there are also options like -o nospace. see man for more info.
_autocomplete()
{
local commands="$@"
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
command="${COMP_WORDS[0]}"
COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
return 0
}
# autocomplete only first argument.
_autocomplete_first()
{
local commands="$@"
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
command="${COMP_WORDS[0]}"
if [[ "${prev}" = "${command}" ]]; then
COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
return 0
fi
}
# autocomplete only first argument. the rest is ls output.
_autocomplete_first_ls()
{
local commands="$@"
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
command="${COMP_WORDS[0]}"
if [[ "${prev}" = "${command}" ]]; then
COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
return 0
else
COMPREPLY=( $(compgen -W "$(ls -a)" -- ${cur}) )
return 0
fi
}
# autocomplete nested program.
_autocomplete_nested()
{
local cur prev words cword split i
_init_completion -s || return
for ((i = 1; i <= cword; i++)); do
if [[ ${words[i]} != -* ]]; then
local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
local root_command=${words[i]}
_command_offset $i
return
fi
done
}
```
sample usage:
```bash
# autocomplete.
_tb_containers()
{
_autocomplete "$(toolbox list -c | sed -e '1d' | awk '{ print $2 }')"
}
complete -F _tb_containers tb tbk tb_rpmfusion
```