diff options
Diffstat (limited to '')
-rw-r--r-- | completions/rsync | 96 |
1 files changed, 52 insertions, 44 deletions
diff --git a/completions/rsync b/completions/rsync index 0bf5389..f471b46 100644 --- a/completions/rsync +++ b/completions/rsync @@ -1,67 +1,75 @@ # bash completion for rsync -*- shell-script -*- -_rsync() +_comp_cmd_rsync() { - local cur prev words cword split - _init_completion -s -n : || return + local cur prev words cword was_split comp_args + _comp_initialize -s -n : -- "$@" || return + local noargopts='!(-*|*[Te]*)' + # shellcheck disable=SC2254 case $prev in - --config | --password-file | --include-from | --exclude-from | --files-from | \ - --log-file | --write-batch | --only-write-batch | --read-batch) + --config | --password-file | --include-from | --exclude-from | \ + --files-from | --log-file | --write-batch | --only-write-batch | \ + --read-batch) compopt +o nospace - _filedir + _comp_compgen_filedir return ;; - --temp-dir | --compare-dest | --backup-dir | --partial-dir | --copy-dest | \ - --link-dest | -!(-*)T) + --temp-dir | --compare-dest | --backup-dir | --partial-dir | \ + --copy-dest | --link-dest | -${noargopts}T) compopt +o nospace - _filedir -d + _comp_compgen_filedir -d return ;; - --rsh | -!(-*)e) + --rsh | -${noargopts}e) compopt +o nospace - COMPREPLY=($(compgen -W 'rsh ssh' -- "$cur")) + _comp_compgen -- -W 'rsh ssh' return ;; --compress-level) compopt +o nospace - COMPREPLY=($(compgen -W '{1..9}' -- "$cur")) + _comp_compgen -- -W '{1..9}' + return + ;; + --info) + _comp_delimited , -W ' + backup{,0} + copy{,0} + del{,0} + flist{,0,1,2} + misc{,0,1,2} + mount{,0} + name{,0,1,2} + nonreg{,0,1} + progress{,0,1,2} + remove{,0} + skip{,0,1,2} + stats{,0,1,2,3} + symsafe{,0} + all{,0,1,2,3,4} + none + help + ' return ;; esac - $split && return + [[ $was_split ]] && return - _expand || return + _comp_expand || return case $cur in -*) - COMPREPLY=($(compgen -W '--verbose --quiet --no-motd --checksum - --archive --recursive --relative --no-implied-dirs - --backup --backup-dir= --suffix= --update --inplace --append - --append-verify --dirs --old-dirs --links --copy-links - --copy-unsafe-links --safe-links --copy-dirlinks - --keep-dirlinks --hard-links --perms --executability --chmod= - --acls --xattrs --owner --group --devices --copy-devices - --specials --times --omit-dir-times --super --fake-super - --sparse --dry-run --whole-file --no-whole-file - --one-file-system --block-size= --rsh= --rsync-path= - --existing --ignore-existing --remove-source-files --delete - --delete-before --delete-during --delete-delay --delete-after - --delete-excluded --ignore-errors --force --max-delete= - --max-size= --min-size= --partial --partial-dir= - --delay-updates --prune-empty-dirs --numeric-ids --timeout= - --contimeout= --ignore-times --size-only --modify-window= - --temp-dir= --fuzzy --compare-dest= --copy-dest= --link-dest= - --compress --compress-level= --skip-compress= --cvs-exclude - --filter= --exclude= --exclude-from= --include= --include-from= - --files-from= --from0 --protect-args --address= --port= - --sockopts= --blocking-io --no-blocking-io --stats - --8-bit-output --human-readable --progress --itemize-changes - --out-format= --log-file= --log-file-format= --password-file= - --list-only --bwlimit= --write-batch= --only-write-batch= - --read-batch= --protocol= --iconv= --ipv4 --ipv6 --version - --help --daemon --config= --no-detach' -- "$cur")) + local tmp + # Account for the fact that older rsync versions (before cba00be6, + # meaning before v3.2.0) contain the following unusual line in + # --help: + # "(-h) --help show this help (-h is --help only if used alone)" + _comp_compgen -Rv tmp help - <<<"$("$1" --help 2>&1 | command sed -e 's/^([^)]*)//')" + + _comp_compgen -- -W '"${tmp[@]}" + --daemon --old-d{,irs} + --no-{blocking-io,detach,whole-file,inc-recursive,i-r}' -X '--no-OPTION' [[ ${COMPREPLY-} == *= ]] || compopt +o nospace ;; *:*) @@ -73,14 +81,14 @@ _rsync() break fi done - [[ $shell == ssh ]] && _xfunc ssh _scp_remote_files + [[ $shell == ssh ]] && _comp_compgen -x scp remote_files ;; *) - _known_hosts_real -c -a -- "$cur" - _xfunc ssh _scp_local_files + _comp_compgen_known_hosts -c -a -- "$cur" + _comp_compgen -ax scp local_files ;; esac } && - complete -F _rsync -o nospace rsync + complete -F _comp_cmd_rsync -o nospace rsync # ex: filetype=sh |