diff options
Diffstat (limited to 'completions/7z')
-rw-r--r-- | completions/7z | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/completions/7z b/completions/7z index 96a64f1f..a8acbc59 100644 --- a/completions/7z +++ b/completions/7z @@ -5,8 +5,8 @@ _7z() local cur prev words cword _init_completion -n = || return - if [[ $cword -eq 1 ]]; then - COMPREPLY=( $(compgen -W 'a b d e l t u x' -- "$cur") ) + if ((cword == 1)); then + COMPREPLY=($(compgen -W 'a b d e l t u x' -- "$cur")) return fi @@ -15,7 +15,7 @@ _7z() case $cur in -ao*) - COMPREPLY=( $(compgen -P${cur:0:3} -W 'a s t u' -- "${cur:3}") ) + COMPREPLY=($(compgen -P${cur:0:3} -W 'a s t u' -- "${cur:3}")) return ;; -?(a)[ix]*) @@ -26,74 +26,79 @@ _7z() opt=${cur:0:2} cur=${cur:2} fi if [[ $cur != *[@\!]* ]]; then - COMPREPLY=( $(compgen -P$opt -W '@ ! r@ r-@ r0@ r! r-! r0!' \ - -- "$cur") ) + COMPREPLY=($(compgen -P$opt -W '@ ! r@ r-@ r0@ r! r-! r0!' \ + -- "$cur")) elif [[ $cur == ?(r@(-|0|))@* ]]; then - local IFS=$' \t\n' reset=$(shopt -po noglob); set -o noglob - COMPREPLY=( $(compgen -P"${opt}${cur%%@*}@" -f -- "${cur#*@}") ) + local IFS=$' \t\n' reset=$(shopt -po noglob) + set -o noglob + COMPREPLY=($(compgen -P"${opt}${cur%%@*}@" -f -- "${cur#*@}")) $reset compopt -o filenames fi return ;; - -mhe=*|-mhc=*|-ms=*|-mt=*) - COMPREPLY=( $(compgen -W 'on off' -- "${cur#*=}") ) + -mhe=* | -mhc=* | -ms=* | -mt=*) + COMPREPLY=($(compgen -W 'on off' -- "${cur#*=}")) return ;; -mx=*) - COMPREPLY=( $(compgen -W '0 1 3 5 7 9' -- "${cur#*=}") ) + COMPREPLY=($(compgen -W '0 1 3 5 7 9' -- "${cur#*=}")) return ;; - -o*|-w?*) - local IFS=$' \t\n' reset=$(shopt -po noglob); set -o noglob - COMPREPLY=( $(compgen -P${cur:0:2} -S/ -d -- "${cur:2}") ) + -o* | -w?*) + local reset=$(shopt -po noglob) + set -o noglob + compopt -o filenames + local ifs=$IFS IFS=$'\n' + COMPREPLY=($(compgen -d -P${cur:0:2} -S/ -- "${cur:2}")) + IFS=$ifs $reset - compopt -o nospace -o filenames + compopt -o nospace return ;; -r?*) - COMPREPLY=( $(compgen -P${cur:0:2} -W '- 0' -- "${cur:2}") ) + COMPREPLY=($(compgen -P${cur:0:2} -W '- 0' -- "${cur:2}")) return ;; -scs*) - COMPREPLY=( $(compgen -P${cur:0:4} -W 'UTF-8 WIN DOS' \ - -- "${cur:4}") ) + COMPREPLY=($(compgen -P${cur:0:4} -W 'UTF-8 WIN DOS' \ + -- "${cur:4}")) return ;; -ssc?*) - COMPREPLY=( $(compgen -P${cur:0:4} -W '-' -- "${cur:4}") ) + COMPREPLY=($(compgen -P${cur:0:4} -W '-' -- "${cur:4}")) return ;; -t*) if [[ $mode == w ]]; then - COMPREPLY=( $(compgen -P${cur:0:2} -W '7z bzip2 gzip swfc - tar wim xz zip' -- "${cur:2}") ) + COMPREPLY=($(compgen -P${cur:0:2} -W '7z bzip2 gzip swfc + tar wim xz zip' -- "${cur:2}")) else - COMPREPLY=( $(compgen -P${cur:0:2} -W '7z apm arj bzip2 cab + COMPREPLY=($(compgen -P${cur:0:2} -W '7z apm arj bzip2 cab chm cpio cramfs deb dmg elf fat flv gzip hfs iso lzh lzma lzma86 macho mbr mslz mub nsis ntfs pe ppmd rar rpm squashfs swf swfc tar udf vhd wim xar xz z zip' \ - -- "${cur:2}") ) + -- "${cur:2}")) fi return ;; - -m*=*|-p*|-u*|-v*) + -m*=* | -p* | -u* | -v*) return ;; esac if [[ $cur == -* ]]; then - COMPREPLY=( $(compgen -W '-ai -an -ao -ax -bd -i -m{x,s,f,he,hc,mt}= + COMPREPLY=($(compgen -W '-ai -an -ao -ax -bd -i -m{x,s,f,he,hc,mt}= -o -p -r -scs -sfx -si -slp -slt -so -ssc -t -u -v -w -x -y' \ - -- "$cur") ) - [[ $COMPREPLY == -@(an|bd|sfx|si|slt|so|ssc|[rwy]) ]] || + -- "$cur")) + [[ ${COMPREPLY-} == -@(an|bd|sfx|si|slt|so|ssc|[rwy]) ]] || compopt -o nospace return fi local args _count_args = - if [[ $args -eq 2 ]]; then + if ((args == 2)); then _filedir_xspec unzip # TODO: parsing 7z i output? # - how to figure out if the format is input or output? @@ -109,15 +114,15 @@ _7z() else if [[ ${words[1]} == d ]]; then local IFS=$'\n' - COMPREPLY=( $(compgen -W "$(printf '%s\n' $($1 l ${words[2]} \ + COMPREPLY=($(compgen -W "$(printf '%s\n' "$($1 l ${words[2]} \ -slt 2>/dev/null | command sed -n '/^Path =/s/^Path = \(.*\)$/\1/p' \ - 2>/dev/null | tail -n+2))" -- "$cur") ) + 2>/dev/null | tail -n+2)")" -- "$cur")) compopt -o filenames else _filedir fi fi } && -complete -F _7z 7z 7za + complete -F _7z 7z 7za # ex: filetype=sh |