# 7z(1) completion -*- shell-script -*- proc _7z { var cur = '', prev = '', words = '', cword = '' _init_completion -n = || return if [[ $cword -eq 1 ]] { setglobal COMPREPLY = '( '$( compgen -W 'a b d e l t u x' -- "$cur" ) ) return } var mode = '' [[ ${words[1]} == [adu] ]] && set mode = 'w' || set mode = 'r' match $cur { with -ao* setglobal COMPREPLY = '( '$( compgen -P${cur:0:3} -W 'a s t u' -- "${cur:3}" ) ) return with -?(a)[ix]* var opt = '' if [[ $cur == -a[ix]* ]] { set opt = $(cur:0:3), cur = $(cur:3) } else { set opt = $(cur:0:2), cur = $(cur:2) } if [[ $cur != *[@\!]* ]] { setglobal COMPREPLY = '( '$( compgen -P$opt -W '@ ! r@ r-@ r0@ r! r-! r0!' \ -- "$cur" ) ) } elif [[ $cur == ?(r@(-|0|))@* ]] { var x = '', tmp = '' set x = $[ compgen -P"$(opt)$(cur%%@*)@" -f -- $(cur#*@)] && while read -r tmp { setglobal COMPREPLY = '( '"$tmp" ) } <<< "$x" compopt -o filenames } return with -mhe=*|-mhc=*|-ms=*|-mt=* setglobal COMPREPLY = '( '$( compgen -W 'on off' -- "${cur#*=}" ) ) return with -mx=* setglobal COMPREPLY = '( '$( compgen -W '0 1 3 5 7 9' -- "${cur#*=}" ) ) return with -o*|-w?* var x = '', tmp = '' set x = $[ compgen -P$(cur:0:2) -S/ -d -- $(cur:2)] && while read -r tmp { setglobal COMPREPLY = '( '"$tmp" ) } <<< "$x" compopt -o nospace -o filenames return with -r?* setglobal COMPREPLY = '( '$( compgen -P${cur:0:2} -W '- 0' -- "${cur:2}" ) ) return with -scs* setglobal COMPREPLY = '( '$( compgen -P${cur:0:4} -W 'UTF-8 WIN DOS' \ -- "${cur:4}" ) ) return with -ssc?* setglobal COMPREPLY = '( '$( compgen -P${cur:0:4} -W '-' -- "${cur:4}" ) ) return with -t* if [[ $mode == w ]] { setglobal COMPREPLY = '( '$( compgen -P${cur:0:2} -W '7z bzip2 gzip swfc tar wim xz zip' -- "${cur:2}" ) ) } else { setglobal 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}" ) ) } return with -m*=*|-p*|-u*|-v* return } if [[ $cur == -* ]] { setglobal 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]) ]] || compopt -o nospace return } var args = '' _count_args = if [[ $args -eq 2 ]] { _filedir_xspec unzip [[ $mode == w ]] && _filedir '@(7z|bz2|swf|?(g)tar|?(t)[bglx]z|tb?(z)2|wim)' || _filedir '@(7z|arj|bz2|cab|chm|cpio|deb|dmg|flv|gem|img|iso|lz[ah]|lzma?(86)|pmd|[rx]ar|rpm|sw[fm]|?(g)tar|taz|?(t)[bglx]z|tb?(z)2|vhd|wim|Z)' } else { if [[ ${words[1]} == d ]] { var IFS = '$'\n'' setglobal COMPREPLY = '( '$( compgen -W "$( printf '%s\n' $( $1 l ${words[2]} \ -slt 2>/dev/null | sed -n '/^Path =/s/^Path = \(.*\)$/\1/p' \ 2>/dev/null | tail -n+2 ) )" -- "$cur" ) ) compopt -o filenames } else { _filedir } } } && complete -F _7z 7z 7za # ex: ts=4 sw=4 et filetype=sh