about summary refs log tree commit diff
path: root/Completion/Unix/Command/_zip
blob: cfa51be367a96bfbfc14d9a005759bb82350e258 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#compdef zip unzip zipinfo

local suffixes suf zipfile uzi testfile
local expl curcontext="$curcontext" state line ret=1
typeset -A opt_args

case $service in
  zip)
    _arguments -C -s -S \
      '(-u --update)'{-u,--update}'[update: only changed or new files]' \
      '(-f --freshen)'{-f,--freshen}'[freshen: update existing files only (no files added)]' \
      '(-FS --filesync)'{-FS,--filesync}'[filesync: update if date or size changed]' \
      '(-d --delete)'{-d,--delete}'[delete: delete files from archive]' \
      '(-U --copy)'{-U,--copy}'[copy: select files in archive to copy]' \
      '-r[recurse into directories]' \
      '(-m --move)'{-m,--move}'[after archive created, delete original files]' \
      '(-j --junk-paths)'{-j,--junk-paths}'[junk directory names (store just file names)]' \
      '-q[quiet operation]' \
      '-v[verbose operation/print version info]' \
      '(-c --entry-comments)'{-c,--entry-comments}'[prompt for one-line comment for each entry]' \
      '(-z --archive-comment)'{-z,--archive-comment}'[prompt for comment for archive]' \
      '(-@ --names-stdin)'{-@,--names-stdin}'[read names to zip from stdin]' \
      '-o[make zipfile as old as latest entry]' \
      '(-i --include)'{-i,--include}'[include files that match a pattern]:*(-*|@):pattern:_files' \
      '(-x --exclude)'{-x,--exclude}'[exclude files that match a pattern]:*(-*|@):pattern:_files' \
      '-l[convert LF to CR LF]' \
      '-ll[convert CR LF to LF]' \
      '-R[recurse current dir and match patterns]' \
      '-t+[exclude files modified before specified date]:date (mmddyyyy)' \
      '-tt+[exclude files modified on or after specified date]:date (mmddyyyy)' \
      '(   -1 -2 -3 -4 -5 -6 -7 -8 -9)-0[store only]' \
      '(-0    -2 -3 -4 -5 -6 -7 -8 -9)-1[compress faster]' \
      '(-0 -1    -3 -4 -5 -6 -7 -8 -9)-2' \
      '(-0 -1 -2    -4 -5 -6 -7 -8 -9)-3' \
      '(-0 -1 -2 -3    -5 -6 -7 -8 -9)-4' \
      '(-0 -1 -2 -3 -4    -6 -7 -8 -9)-5' \
      '(-0 -1 -2 -3 -4 -5    -7 -8 -9)-6' \
      '(-0 -1 -2 -3 -4 -5 -6    -8 -9)-7' \
      '(-0 -1 -2 -3 -4 -5 -6 -7    -9)-8' \
      '(-0 -1 -2 -3 -4 -5 -6 -7 -8   )-9[compress better]' \
      '(-Z --compression-method)'{-Z+,--compression-method=}'[specify compression method]:method:(store deflate bzip2)' \
      '(-e --encrypt)'{-e,--encrypt}'[encrypt using (weak) PKZip 2.0 encryption, prompt for password]' \
      '-P+[specify password for standard encryption]:password' \
      '-s+[create split archive with splits of specified size]:size (MB)' \
      '-sp[pause after each split to allow changing disks]' \
      '-sb[ring bell when pausing between splits]' \
      '-sv[be verbose about creating splits]' \
      '(-O --out)'{-O,--out=}'[output to new archive]:archive' \
      '(-FI --fifo)'{-FI,--fifo}'[support reading from a pipe]' \
      '(-db --display-bytes)'{-db,--display-bytes}'[display running count of bytes processed and bytes to go]' \
      '(-dc --display-counts)'{-dc,--display-counts}'[display running count of entries done and entries to go]' \
      '(-dd --display-dots)'{-dd,--display-dots}'[display dots while each entry is zipped]' \
      '(-dg --display-globaldots)'{-dg,--display-globaldots}'[display dots for the archive instead of each file]' \
      '(-ds --dot-size)'{-ds,--dot-size=}'[specify size at which a dot is output while processing files]:size [10MB]' \
      '(-du --display-usize)'{-du,--display-usize}'[display original uncompressed size for each entry as added]' \
      '(-dv --display-volume)'{-dv,--display-volume}'[display volume (disk) number in format in_disk>out_disk]' \
      '(-lf --logfile-path)'{-lf,--logfile-path=}'[specify log file]:file:_files' \
      '(-la --log-append)'{-la,--log-append}'[append to existing log file]' \
      '(-li --log-info)'{-li,--log-info}'[include info messages in log]' \
      '(-T --test)'{-T,--test}'[test zipfile integrity]' \
      '(-TT --unzip-command)'{-TT,--unzip-command=}'[specify command for testing archive]:command [unzip -tqq]:_cmdstring' \
      '(-F --fix)'{-F,--fix}'[fix zipfile]' \
      '(-F --fix -FF --fixfix)'{-FF,--fixfix}'[try harder to fix zipfile]' \
      '(-DF --dif)'{-DF,--dif}'[only include files that have changed or are new as compared to the input archive]' \
      '-sf[show files to operate on and exit]' \
      '-su[as -sf but show escaped UTF-8 Unicode names also]' \
      '-su[as -sf but show escaped UTF-8 Unicode names instead]' \
      '-UN=[specify Unicode path mismatch handling]:mismatch handling:(Quit Warn Ignore No Escape UTF8)' \
      '(-A --adjust-sfx)'{-A,--adjust-sfx}'[adjust self-extracting exe]' \
      '(-J --junk-sfx)'{-J,--junk-sfx}'[junk zip file prefix (unzipsfx)]' \
      '(-b --temp-path)'{-b,--temp-path}'[specify location for temporary archive]:path for temporary archive:_directories' \
      '-nw[no wildcards]' \
      '(-X --no-extra)'{-X,--no-extra}'[eXclude eXtra file attributes]' \
      '(-y --symlinks)'{-y,--symlinks}'[store symbolic links as the link instead of the referenced file]' \
      '(-)'{-h,--help}'[display help information]' \
      '(-)'{-h2,--more-help}'[display extended help information]' \
      '(-g --grow)'{-g,--grow}'[allow growing existing zipfile]' \
      '(-L --license)'{-L,--license}'[display license]' \
      '(-D --no-dir-entries)'{-D,--no-dir-entries}"[don't add directory entries]" \
      '-n[specify suffixes of files not to be compressed]:suffixes:->suffixes' \
      "(-f -d -R -q -c -b -@ -F -FF -A -T -y -e -h -u -m -g -j -l -ll -L -v -z -t -tt -o -D -J -X -n -0 -1 -2 -3 -4 -5 -6 -7 -8 -9):zip file:_files -g '(#i)*.(zip|xpi|[ejw]ar)(-.)'" \
      '*:file:->files' && ret=0
  ;;
  unzip)
    _arguments -C -s -S \
      '(-Z)-M[page output]' \
      - unzip \
      '(-f -u -l -t -z -d -p)-c[extract files to stdout including file names]' \
      '(-p -u -l -t -z)-f[freshen existing files; create none]' \
      '(-f -u -l -t -z -c -d)-p[extract files to stdout]' \
      '(-p -f -l -t -z)-u[update files; create if necessary]' \
      '(-p -f -u -t -z -d)-l[list files]' \
      '(-p -f -u -l -z -d)-t[test compressed archive data]' \
      '-T[timestamp archive to latest]' \
      '(-p -f -u -l -t -d)-z[display archive comment]' \
      '(-p -l -t -z)-d+[specify directory to extract files to]:directory:_files -/' \
      '(-p -l -t -z -o)-n[never overwrite existing files]' \
      '(-p -l -t -z -n)-o[overwrite files without prompting]' \
      "(-p -l -t -z)-j[junk paths (don't make directories)]" \
      '-C[match filenames case-insensitively]' \
      '(-p -l -t -z)-X[restore UID/GID info]' \
      '-q[quiet]' '-qq[quieter]' \
      '(-l -t -z)-a[auto-convert any text files]' \
      '(-l -t -z)-aa[treat all files as text]' \
      '(-l -t -z)-b[treat all files as binary]' \
      '(-l -t -z)-B[save backup copy of each overwritten file]' \
      '(-DD)-D[skip restoration of timestamps for extracted directories]' \
      '(-D)-DD[skip restoration of timestamps for all entries]' \
      '-v[verbose/display version info]' \
      '(-c -p -z -LL)-L[lowercase filenames from case-insensitive file systems]' \
      '(-c -p -z -L)-LL[lowercase all filenames]' \
      '-K[keep setuid/setgid/sticky permissions]' \
      '-P[specify password for decryption]:password' \
      '(-UU)-U[use escapes for all non-ASCII Unicode]' \
      '(-U)-UU[ignore any Unicode fields]' \
      '-W[modify pattern matching so only ** matches /]' \
      '-\:[allow extraction outside of extraction base directory]' \
      '-^[allow control characters in extracted entries]' \
      '-i[include the following names]:*-*:pattern' \
      '-x[exclude the following names]:*-*:pattern' \
      "(-p -f -u -l -t -z -n -o -j -C -X -q -qq -a -aa -v -L -M)1:zip file:_files -g '(#i)*.(zip|xpi|[ejw]ar)(-.)'" \
      '*:file:->files' \
      - help \
      '-hh[display detailed help information]' \
      - zipinfo \
      '-Z[zipinfo mode]:zipinfomode:->zipinfo' && ret=0
  ;;
esac

[[ $state == zipinfo ]] && uzi="-Z[zipinfo mode]"

if [[ $service == zipinfo ]] || [[ -n $uzi ]]; then
    _arguments -C -s -S \
      $uzi \
      '(-2 -s -m -l -v -h -t -T -z)-1[filenames only]' \
      '(-1 -s -m -l -v -T)-2[just filenames but allow -h/-t/-z]' \
      '(-1 -2 -m -l -v -h -t)-s[short format]' \
      '(-1 -2 -s -l -v -h -t)-m[medium format]' \
      '(-1 -2 -s -m -v -h -t)-l[long format]' \
      '(-1 -2 -s -m -l -h -z)-v[verbose, multi-page format]' \
      '(-1 -s -m -l -v)-h[print header line]' \
      '(-1 -v)-z[print zipfile comment]' \
      '-C[match filenames case-insensitively]' \
      '(-1 -s -m -l)-t[print totals]' \
      '(-1 -2)-T[use sortable decimal format for file times]' \
      '-M[page output]' \
      '-x[exclude the following names]' \
      "(-1 -2 -s -m -l -v -h -z -C -t -T -M)1:zip file:_files -g '(#i)*.(zip|xpi|[ejw]ar)(-.)'" \
      '*:file:->files' && ret=0
fi

case $state in
  suffixes)
    suffixes=( *.*(N:e) )
    _sequence -s : _wanted -x suffixes expl suffix compadd - .$^suffixes && return
  ;;
  files)
    if [[ $service = zip ]] && (( ! ${+opt_args[-d]} )); then
      _wanted files expl zfile _files -g '^(#i)*.(zip|xpi|[ejw]ar)(-.)' && return
    else
      testfile=${~${(Q)line[1]}}
      if [[ -f $testfile ]]; then
	zipfile=$testfile
      elif [[ -f $testfile.zip ]]; then
	zipfile=$testfile.zip
      elif [[ -f $testfile.ZIP ]]; then
	zipfile=$testfile.ZIP
      else
	return 1
      fi 2>/dev/null
      if [[ $zipfile !=  $_zip_cache_name ]]; then
	_zip_cache_name="$zipfile"
	_zip_cache_list=( ${(f)"$(zipinfo -1 -- $_zip_cache_name)"} )
      fi
     _wanted files expl 'file from archive' \
	 _multi_parts / _zip_cache_list && return
    fi
  ;;
esac

return ret