contrib: bash: completion.bash: complete options everywhere

pull/343/head
Asbjørn Apeland 2020-11-01 01:47:58 +01:00
parent e4f27632a0
commit ce660a4989
1 changed files with 16 additions and 41 deletions

View File

@ -4,7 +4,7 @@ _btrbk_init_cmds()
#
# for example, for this command:
#
# btrbk -v list config
# btrbk -v list config --long
#
# then $cmds is:
#
@ -16,94 +16,74 @@ _btrbk_init_cmds()
for ((i = 1; i < cword; i++)); do
[[ ${words[i]} != -* ]] && cmds+=(${words[i]})
done
return 0
}
_btrbk()
{
local cur prev words cword split
local cur prev words cword split cmds
_init_completion -s || return
_btrbk_init_cmds || return
case "$prev" in
'-c' | '--config')
_filedir
return
;;
'--exclude')
return
;;
'-l' | '--loglevel')
COMPREPLY=($(compgen -W 'error warn info debug trace' -- "$cur"))
return
;;
'--format')
COMPREPLY=($(compgen -W 'table long raw' -- "$cur"))
return
;;
'--lockfile')
_filedir
return
;;
'--override')
return
;;
esac
$split && return
local cmds
_btrbk_init_cmds
if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
[[ $COMPREPLY == *= ]] && compopt -o nospace
else
if [[ ! -v 'cmds[0]' ]]; then
COMPREPLY=($(compgen -W 'run dryrun snapshot resume prune archive clean stats list usage origin diff ls' -- "$cur"))
fi
fi
case "${cmds[0]}" in
'archive')
# <source>
if [[ ! -v 'cmds[1]' ]]; then
_filedir -d
return
fi
# <target>
if [[ ! -v 'cmds[2]' ]]; then
elif [[ ! -v 'cmds[2]' ]]; then
_filedir -d
return
fi
# [--raw]
if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W '--raw' -- "$cur"))
return
elif [[ $cur == -* ]]; then
COMPREPLY+=($(compgen -W '--raw' -- "$cur"))
fi
;;
'list')
if [[ ! -v 'cmds[1]' ]]; then
COMPREPLY=($(compgen -W 'backups snapshots latest config source volume target' -- "$cur"))
return
fi
;;
'origin')
# <subvolume>
if [[ ! -v 'cmds[1]' ]]; then
_filedir -d
return
fi
;;
'ls')
# <path>|<url>...
_filedir -d
return
;;
esac
if [[ $cur == -* ]]; then
# only complete options before commands
if [[ ! -v 'cmds[0]' ]]; then
COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
[[ $COMPREPLY == *= ]] && compopt -o nospace
return
fi
else
if [[ ! -v 'cmds[0]' ]]; then
COMPREPLY=($(compgen -W 'run dryrun snapshot resume prune archive clean stats list usage origin diff ls' -- "$cur"))
return
fi
fi
} && complete -F _btrbk btrbk
_lsbtr()
@ -114,23 +94,18 @@ _lsbtr()
case "$prev" in
'-c' | '--config')
_filedir
return
;;
'--override')
return
;;
esac
$split && return
if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
[[ $COMPREPLY == *= ]] && compopt -o nospace
return
else
# <path>|<url>...
_filedir -d
return
fi
} && complete -F _lsbtr lsbtr