about summary refs log tree commit diff
path: root/Completion/User/_compress
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/User/_compress')
-rw-r--r--Completion/User/_compress46
1 files changed, 44 insertions, 2 deletions
diff --git a/Completion/User/_compress b/Completion/User/_compress
index 860aeb5b0..288bb1645 100644
--- a/Completion/User/_compress
+++ b/Completion/User/_compress
@@ -1,3 +1,45 @@
-#defcomp compress
+#compdef compress uncompress
 
-_files -g '*~*.Z'
+local expl state line bits common_args1 common_args2 decompress
+typeset -A opt_args
+bits=( {9..16} )
+
+common_args1=( \
+  '-n[omit compressed file header from compressed file]' \
+  '-V[display current version and compile options]' \
+  '*:files:->files')
+common_args2=( \
+  '-c[write on standard output]' \
+  '(-F)-f[force overwrite]' \
+  '(-f)-F[force overwrite]' \
+  '(-v)-q[suppress display of compression statistics]' \
+  '(-q)-v[display compression statistics]' \
+  "${common_args1[@]}" )
+
+case "${words[1]:t}" in
+  compress)
+    _arguments -s \
+      "-b[specify maximum number of bits used to replace common substring]:bits:(${bits[*]})" \
+      '-C[produce output compatible with BSD 2.0]' \
+      '(-b -C)-d[decompress]' \
+      "${common_args2[@]}"
+  ;;
+  uncompress)
+    _arguments -s "${common_args2[@]}"
+    decompress=yes
+  ;;
+  zcat)
+    _arguments -s "${common_args1[@]}"
+    decompress=yes
+  ;;
+esac
+
+if [[ "$state" = files ]]; then
+  if [[ -z "$decompress" ]] || (( $+opt_args[-d] )); then
+    _description files expl 'file to compress'
+    _files "$expl[@]" -g '*~*.Z'
+  else
+    _description files expl 'compressed file'
+    _files "$expl[@]" -g '*.Z'
+  fi
+fi