mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef gzip gunzip gzcat=gunzip pigz unpigz -redirect-,<,gunzip=gunzip -redirect-,>,gzip=gunzip -redirect-,<,gzip=gzip -value-,GZIP,-default-
 | |
| 
 | |
| local decompress files expl curcontext="$curcontext" state line ret=1
 | |
| local -a pigz
 | |
| typeset -A opt_args
 | |
| local excl="--decompress --uncompress -1 -2 -3 -4 -5 -6 -7 -8 -9 -11 --best"
 | |
| 
 | |
| files=( '*:files:->files' )
 | |
| case "$service" in
 | |
| unpigz|pigz)
 | |
|   pigz=(
 | |
|     '(-K --zip)'{-K,--zip}'[compress to PKWare zip format]'
 | |
|     '(-b --blocksize)'{-b+,--blocksize}'[set compression block size]:size (KiB)'
 | |
|     '(-p --processes)'{-p,--processes}'[specify number of processes to use]'
 | |
|     '(-z --zlib)'{-z,--zlib}'[compress to zlib (.zz) format]'
 | |
|     '(-T --no-time)'{-T,--no-time}"[don't store/restore modification time in/from header]"
 | |
|   )
 | |
| ;|
 | |
| pigz)
 | |
|   pigz+=(
 | |
|     '(-i --independent)'{-i,--independent}'[compress blocks independently to allow for damage recovery]'
 | |
|     "($excl)-11"
 | |
|     '(--rsyncable)-R[make rsync-friendly archive]'
 | |
|     "($excl)"{-F,--first}'[do iterations first, before block split]'
 | |
|     "($excl)"{-I+,--iterations}'[specify number of iterations for optimization]:iterations [15]'
 | |
|     "($excl)"{-M+,--maxsplits}'[specify maximum number of split blocks]:split blocks [15]'
 | |
|     "($excl)"{-O,--oneblock}"[don't split into smaller blocks]"
 | |
|   )
 | |
| ;|
 | |
| *GZIP*)
 | |
|   compset -q
 | |
|   words=( fake "$words[@]" )
 | |
|   (( CURRENT++ ))
 | |
|   files=()
 | |
|   ;&
 | |
| gunzip|zcat|unpigz)
 | |
|   decompress=yes
 | |
|   ;&
 | |
| gzip|pigz)
 | |
|   _arguments -C -s -S \
 | |
|     '(--to-stdout --stdout)-c[write on standard output]' \
 | |
|     '(-c --stdout)--to-stdout[write on standard output]' \
 | |
|     '(-c --to-stdout)--stdout[write on standard output]' \
 | |
|     "($excl)"{-d,--decompress,--uncompress}'[decompress]' \
 | |
|     '(--force)-f[force overwrite]' \
 | |
|     '(-f)--force[force overwrite]' \
 | |
|     '(- *)'{-h,--help}'[display help message]' \
 | |
|     "(--keep)-k[don't delete input files]" \
 | |
|     "(-k)--keep[don't delete input files]" \
 | |
|     '(--list)-l[list compressed file contents]' \
 | |
|     '(-l)--list[list compressed file contents]' \
 | |
|     '(- *)'{-L,--license}'[display software license]' \
 | |
|     "(--no-name)-n[don't save or restore the original name and time stamp]" \
 | |
|     "(-n)--no-name[don't save or restore the original name and time stamp]" \
 | |
|     '(--name)-N[save or restore the original name and time stamp]' \
 | |
|     '(-N)--name[save or restore the original name and time stamp]' \
 | |
|     '(--quiet --silent)-q[suppress all warnings]' \
 | |
|     '(-q --silent)--quiet[suppress all warnings]' \
 | |
|     '(-q --quiet)--silent[suppress all warnings]' \
 | |
|     '(--recursive)-r[operate recursively on directories]' \
 | |
|     '(-r)--recursive[operate recursively on directories]' \
 | |
|     '(-R)--rsyncable[make rsync-friendly archive]' \
 | |
|     '(--suffix)-S+[specify suffix for compressed files]:suffix:' \
 | |
|     '(-S)--suffix=[specify suffix for compressed files]:suffix:' \
 | |
|     '(--test)-t[test compressed file integrity]' \
 | |
|     '(-t)--test[test compressed file integrity]' \
 | |
|     '(--verbose)-v[verbose mode]' \
 | |
|     '(-v)--verbose[verbose mode]' \
 | |
|     '(- *)'{-V,--version}'[display version number]' \
 | |
|     "($excl)"-{-fast,1,2,3,4,5,6,7,8,9,-best} \
 | |
|     "$pigz[@]" "$files[@]" && ret=0
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| case "$state" in
 | |
| files)
 | |
|   (( $+opt_args[-d] || $+opt_args[--decompress] || $+opt_args[--uncompress] ||
 | |
|      $+opt_args[-l] || $+opt_args[--list] ||
 | |
|      $+opt_args[-t] || $+opt_args[--test] )) &&
 | |
|     decompress=yes
 | |
|   if (( $+opt_args[-r] || $+opt_args[--recursive] )); then
 | |
|     if [[ -z "$decompress" ]]; then
 | |
|       _description directories expl 'directory to compress'
 | |
|       _files "$expl[@]" -/ && return
 | |
|     else
 | |
|       _description directories expl 'compressed directory'
 | |
|       _files "$expl[@]" -/ && return
 | |
|     fi
 | |
|   else
 | |
|     if [[ -z "$decompress" ]]; then
 | |
|       _description files expl 'file to compress'
 | |
|       _files "$expl[@]" -g '^*.(([tT]|)[gG]|)[zZ](-.)' && return
 | |
|     else
 | |
|       _description files expl 'compressed file'
 | |
|       if (( $+opt_args[-f] )); then
 | |
| 	_files "$expl[@]" && return
 | |
|       else
 | |
| 	_files "$expl[@]" -g '*.(([tT]|)[gG]|)[zZ](-.)' && return
 | |
|       fi
 | |
|     fi
 | |
|   fi
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| return ret
 |