contrib: bash: completion.bash: complete commands

pull/343/head
Asbjørn Apeland 2020-10-31 15:17:35 +01:00
parent ae67a670f0
commit 32c04e0b07
1 changed files with 72 additions and 2 deletions

View File

@ -1,3 +1,23 @@
_btrbk_init_cmds()
{
# set $cmds to an array of the commands so far
#
# for example, for this command:
#
# btrbk -v list config
#
# then $cmds is:
#
# cmds=(list config)
#
cmds=()
local i
for ((i = 1; i < cword; i++)); do
[[ ${words[i]} != -* ]] && cmds+=(${words[i]})
done
}
_btrbk() _btrbk()
{ {
local cur prev words cword split local cur prev words cword split
@ -30,9 +50,59 @@ _btrbk()
$split && return $split && return
local cmds
_btrbk_init_cmds
case "${cmds[0]}" in
'archive')
# <source>
if [[ ! -v 'cmds[1]' ]]; then
_filedir -d
return
fi
# <target>
if [[ ! -v 'cmds[2]' ]]; then
_filedir -d
return
fi
# [--raw]
if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W '--raw' -- "$cur"))
return
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 if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) # only complete options before commands
[[ $COMPREPLY == *= ]] && compopt -o nospace 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 fi
} && complete -F _btrbk btrbk } && complete -F _btrbk btrbk