diff --git a/contrib/bash/completion.bash b/contrib/bash/completion.bash index 558ed45..a7fd1e7 100644 --- a/contrib/bash/completion.bash +++ b/contrib/bash/completion.bash @@ -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') # if [[ ! -v 'cmds[1]' ]]; then _filedir -d - return - fi # - 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') # if [[ ! -v 'cmds[1]' ]]; then _filedir -d - return fi ;; 'ls') # |... _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 # |... _filedir -d - return fi } && complete -F _lsbtr lsbtr