1#compdef gzip gunzip gzcat=gunzip pigz unpigz -redirect-,<,gunzip=gunzip -redirect-,>,gzip=gunzip -redirect-,<,gzip=gzip -value-,GZIP,-default-
2
3local decompress files expl curcontext="$curcontext" state line ret=1
4local -a pigz
5typeset -A opt_args
6local excl="--decompress --uncompress -1 -2 -3 -4 -5 -6 -7 -8 -9 -11 --best"
7
8files=( '*:files:->files' )
9case "$service" in
10unpigz|pigz)
11  pigz=(
12    '(-K --zip)'{-K,--zip}'[compress to PKWare zip format]'
13    '(-b --blocksize)'{-b+,--blocksize}'[set compression block size]:size (KiB)'
14    '(-p --processes)'{-p,--processes}'[specify number of processes to use]'
15    '(-z --zlib)'{-z,--zlib}'[compress to zlib (.zz) format]'
16    '(-m --no-time)'{-m,--no-time}"[don't store/restore modification time in/from header]"
17    '(-M --time)'{-M,--time}"[store/restore modification time in/from header]"
18    '(--synchronous)-Y[force output file write to permanent storage]'
19  )
20;|
21pigz)
22  pigz+=(
23    '(-i --independent)'{-i,--independent}'[compress blocks independently to allow for damage recovery]'
24    "($excl)-11"
25    '(--rsyncable)-R[make rsync-friendly archive]'
26    "($excl)"{-F,--first}'[do iterations first, before block split]'
27    "($excl)"{-I+,--iterations}'[specify number of iterations for optimization]:iterations [15]'
28    "($excl)"{-J+,--maxsplits}'[specify maximum number of split blocks]:split blocks [15]'
29    "($excl)"{-O,--oneblock}"[don't split into smaller blocks]"
30  )
31;|
32*GZIP*)
33  compset -q
34  words=( fake "$words[@]" )
35  (( CURRENT++ ))
36  files=()
37  ;&
38gunzip|zcat|unpigz)
39  decompress=yes
40  ;&
41gzip|pigz)
42  _arguments -C -s -S \
43    '(--to-stdout --stdout)-c[write on standard output]' \
44    '(-c --stdout)--to-stdout[write on standard output]' \
45    '(-c --to-stdout)--stdout[write on standard output]' \
46    "($excl)"{-d,--decompress,--uncompress}'[decompress]' \
47    '(--force)-f[force overwrite]' \
48    '(-f)--force[force overwrite]' \
49    '(- *)'{-h,--help}'[display help message]' \
50    "(--keep)-k[don't delete input files]" \
51    "(-k)--keep[don't delete input files]" \
52    '(--list)-l[list compressed file contents]' \
53    '(-l)--list[list compressed file contents]' \
54    '(- *)'{-L,--license}'[display software license]' \
55    "(--no-name)-n[don't save or restore the original name and time stamp]" \
56    "(-n)--no-name[don't save or restore the original name and time stamp]" \
57    '(--name)-N[save or restore the original name and time stamp]' \
58    '(-N)--name[save or restore the original name and time stamp]' \
59    '(--quiet --silent)-q[suppress all warnings]' \
60    '(-q --silent)--quiet[suppress all warnings]' \
61    '(-q --quiet)--silent[suppress all warnings]' \
62    '(--recursive)-r[operate recursively on directories]' \
63    '(-r)--recursive[operate recursively on directories]' \
64    '(-R)--rsyncable[make rsync-friendly archive]' \
65    '(--suffix)-S+[specify suffix for compressed files]:suffix:' \
66    '(-S)--suffix=[specify suffix for compressed files]:suffix:' \
67    '(-Y)--synchronous[force output file write to permanent storage]' \
68    '(--test)-t[test compressed file integrity]' \
69    '(-t)--test[test compressed file integrity]' \
70    '(--verbose)-v[verbose mode]' \
71    '(-v)--verbose[verbose mode]' \
72    '(- *)'{-V,--version}'[display version number]' \
73    "($excl)"-{-fast,1,2,3,4,5,6,7,8,9,-best} \
74    "$pigz[@]" "$files[@]" && ret=0
75  ;;
76esac
77
78case "$state" in
79files)
80  (( $+opt_args[-d] || $+opt_args[--decompress] || $+opt_args[--uncompress] ||
81     $+opt_args[-l] || $+opt_args[--list] ||
82     $+opt_args[-t] || $+opt_args[--test] )) &&
83    decompress=yes
84  if (( $+opt_args[-r] || $+opt_args[--recursive] )); then
85    if [[ -z "$decompress" ]]; then
86      _description directories expl 'directory to compress'
87      _files "$expl[@]" -/ && return
88    else
89      _description directories expl 'compressed directory'
90      _files "$expl[@]" -/ && return
91    fi
92  else
93    if [[ -z "$decompress" ]]; then
94      _description files expl 'file to compress'
95      _files "$expl[@]" -g '^*.(([tT]|)[gG]|)[zZ](-.)' && return
96    else
97      _description files expl 'compressed file'
98      if (( $+opt_args[-f] )); then
99	_files "$expl[@]" && return
100      else
101	_files "$expl[@]" -g '*.(([tT]|)[gG]|)[zZ](-.)' && return
102      fi
103    fi
104  fi
105  ;;
106esac
107
108return ret
109