about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_zip128
2 files changed, 133 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7b03552f5..135ab46b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-08-14  Clint Adams  <clint@zsh.org>
+
+        * 15629: Completion/Unix/Command/_zip: unzip -Z
+        should behave the same as zipinfo.
+
 2001-08-13  Bart Schaefer  <schaefer@brasslantern.com>
 
 	* 15613 (plus unposted additions): Test/B02typeset.ztst: Tests for
diff --git a/Completion/Unix/Command/_zip b/Completion/Unix/Command/_zip
new file mode 100644
index 000000000..b8117c7b4
--- /dev/null
+++ b/Completion/Unix/Command/_zip
@@ -0,0 +1,128 @@
+#compdef zip unzip zipinfo
+
+local suffixes suf zipfile izip uzi
+local expl curcontext="$curcontext" state line
+typeset -A opt_args
+
+case $service in
+  zip)
+    _arguments -C -s \
+      '-f[freshen: only changed files]' \
+      '-d[delete entries in zipfile]' \
+      '-R[recurse into directories]' \
+      '-q[quiet operation]' \
+      '-c[add one-line comments]' \
+      '-b[use "path" for temp file]:path for temporary archive:_files -/' \
+      '-@[read names from stdin]' \
+      '-F[fix zipfile]' \
+      '-FF[try harder to fix zipfile]' \
+      '-A[adjust self-extracting exe]' \
+      '-T[test zipfile integrity]' \
+      '-y[store symbolic links as the link instead of the referenced file]' \
+      '-e[encrypt]' \
+      '-h[show help]' \
+      '-u[update: only changed or new files]' \
+      '-m[move into zipfile (delete files)]' \
+      '-g[allow growing existing zipfile]' \
+      '-j[junk: do not record directory names]' \
+      '-l[convert LF to CR LF]' \
+      '-ll[convert CR LF to LF]' \
+      '-L[display license]' \
+      '-v[verbose operation/print version info]' \
+      '-z[add zipfile comment]' \
+      '-t[only do files after or at "mmddyyyy"]:mmddyyyy' \
+      '-tt[only do files before "mmddyyyy"]:mmddyyyy' \
+      '-o[make zipfile as old as latest entry]' \
+      '-D[do not add directory entries]' \
+      '-J[junk zip file prefix (unzipsfx)]' \
+      '-X[eXclude eXtra file attributes]' \
+      '-n[specify suffixes of files not to be compressed]:suffixes:->suffixes' \
+      '(   -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]' \
+      '-x[exclude the following names]' \
+      '-i[include only the following names]' \
+      "(-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|[jw]ar)'" \
+      ':file:->files' && return 0
+  ;;
+  unzip)
+    _arguments -C -s \
+      '(-f -u -l -t -z -d)-p[extract files to pipe]' \
+      '(-p -u -l -t -z)-f[freshen existing files; create none]' \
+      '(-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]' \
+      '(-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]' \
+      '-v[verbose/display version info]' \
+      '(-p -z)-L[lowercase (some) filenames]' \
+      '-M[page output]' \
+      '-x[exclude the following names]' \
+      '-Z[zipinfo mode]:zipinfomode:->zipinfo' \
+      "(-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|[jw]ar)'" \
+      '*:file:->files' && return 0
+  ;;
+esac
+
+[[ $state == zipinfo ]] && uzi="-Z[zipinfo mode]"
+
+if [[ $service == zipinfo ]] || [[ -n $uzi ]]; then
+    _arguments -C -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|[jw]ar)'" \
+      '*:file:->files' && return 0
+fi
+
+case $state in
+  suffixes)
+    compset -P '*:'
+    compset -S ':*' || suf=":."
+    suffixes=( *.*(N:e) )
+    _wanted suffixes expl suffixes \
+	compadd -S "$suf" -r ": \t" .$^suffixes && return 0
+  ;;
+  files)
+    if [[ $service = zip ]] && (( ! ${+opt_args[-d]} )); then
+      _files -g '^(#i)*.(zip|[jw]ar)' && return 0
+    else
+      (( izip = 1 + words[(I)-[^xi]*] ))
+      (( izip == 1 )) && (( izip++ ))
+      zipfile=( $~words[izip](|.zip|.ZIP) )
+      [[ -z $zipfile[1] ]] && return 1
+      if [[ $zipfile[1] !=  $_zip_cache_list ]]; then
+	_zip_cache_name="$zipfile[1]"
+	_zip_cache_list=( ${(f)"$(zipinfo -1 $_zip_cache_name)"} )
+      fi
+     _wanted files expl 'file from archive' \
+	 _multi_parts / _zip_cache_list && return 0
+    fi
+  ;;
+esac