Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: use exclusions for compression/decompression options in _xz



Quite a few options to xz are specific to either compression or
decompression modes but the exclusion lists are not as complete as
they might be. We might have used sets before but sets have some
disadvantages. This makes use of the new grouping syntax which also
works well for the options for compression levels and filters. This does
a nice job of limiting the options you see after, e.g. xz -d.

There are also one or two new options bringing this in line with xz
5.2.3.

Oliver

diff --git a/Completion/Unix/Command/_xz b/Completion/Unix/Command/_xz
index 01e56022b..333557e66 100644
--- a/Completion/Unix/Command/_xz
+++ b/Completion/Unix/Command/_xz
@@ -2,7 +2,6 @@
 
 local decompress files expl state line curcontext="$curcontext" ret=1
 typeset -A opt_args
-local decomp="(-z --compress --decompress -d --test -t --list -l --single-stream --no-sparse)"
 
 files=( '(--files --files0)*:files:->files' )
 case "$service" in
@@ -14,46 +13,48 @@ case "$service" in
   ;&
   xz) decompress=no;&
   unxz) _arguments -C -s -S "$files[@]" \
+    '--robot[use machine-parsable messages]' \
+    + 'common' \
+    '(I -k --keep)'{-k,--keep}"[keep (don't delete) input files]" \
+    '(I -f --force)'{-f,--force}'[force overwrite]' \
+    '(I -c --stdout)'{-c,--stdout}'[write on standard output]' \
+    '(I)*'{-q,--quiet}'[suppress all warnings]' \
+    '(I)*'{-v,--verbose}'[verbose mode]' \
+    '(I * --files --files0)--files=-[read list of files to process from file]::file:_files' \
+    '(I * --files --files0)--files0=-[read null terminated list of files to process from file]::file:_files' \
+    '(I -F --format)'{-F,--format}'=[specify file format]:format:(auto xz lzma raw)' \
+    '(I -T --threads)'{-T+,--threads=}'[use specified number of threads]:threads [1]' \
+    '(I -M --memlimit --memory)'{-M+,--memlimit=,--memory=}'[set memory usage limit]:memory usage' \
+    '(I)--no-adjust[give error if settings exceed memory limit]' \
+    '(I -Q --no-warn)'{-Q,--no-warn}'[make warnings not affect exit status]' \
+    + 'comp' \
+    "(I decomp)"{-z,--compress}'[compress]' \
+    '(I decomp -e --extreme)'{-e,--extreme}'[try to improve compression ratio by using more CPU time]' \
+    '(I decomp -S --suffix)'{-S+,--suffix=}'[use specified suffix for compressed files]:suffix [.xz]' \
+    '(I decomp -C --check)'{-C,--check}'=[integrity check type]:check type:(none crc32 crc64 sha256)' \
+    '(I decomp)--block-size=[start a new .xz block after specified bytes of input]:size' \
+    '(I decomp)--block-list=[start a new .xz block after specified intervals of uncompressed data]:size' \
+    '(I decomp)--flush-timeout=[specify maximum time between flushing of output]:time (ms) [0]' \
+    '(I decomp)--memlimit-compress=[set memory usage limit for compression]:memory usage' \
+    + 'decomp' \
+    '(I comp level filters)'{-d,--decompress}'[decompress]' \
+    '(I comp level filters)'{-t,--test}'[test compressed file integrity]' \
+    '(I comp level filters)'{-l,--list}'[list information about .xz files]' \
+    "(I comp level filters)--ignore-check[don't verify integrity when decompressing]" \
+    '(I comp level filters)--single-stream[decompress only the first stream]' \
+    "(I comp level filters)--no-sparse[don't create sparse files when decompressing]" \
+    '(I comp level filters)--memlimit-decompress=[set memory usage limit for decompression]:memory usage' \
+    + '(I)' \
+    '(* comp decomp level filters common)--info-memory[display amount of RAM and memory usage limits]' \
     '(- *)'{-h,--help}'[display help message]' \
     '(- *)'{-H,--long-help}'[display the long help (lists also the advanced options)]' \
-    '(-d --decompress --compress -z --test -t --list -l)'{-d,--decompress}'[decompress]' \
-    "${decomp}"{-z,--compress}'[compress]' \
-    '(-k --keep)'{-k,--keep}"[keep (don't delete) input files]" \
-    '(-f --force)'{-f,--force}'[force overwrite]' \
-    '(-t --test --decompress -d --compress -z --list -l)'{-t,--test}'[test compressed file integrity]' \
-    '(-t --test --decompress -d --compress -z --list -l)'{-l,--list}'[list information about .xz files]' \
-    '(-c --stdout)'{-c,--stdout}'[write on standard output]' \
-    \*{-q,--quiet}'[suppress all warnings]' \
-    \*{-v,--verbose}'[verbose mode]' \
-    '(- *)'{-V,--version}'[display version number]' \
-    '(-e --extreme)'{-e,--extreme}'[try to improve compression ratio by using more CPU time]' \
-    '(-1 -2 -3 -4 -5 -6 -7 -8 -9 --fast       )--best' \
-    '(-1 -2 -3 -4 -5 -6 -7 -8 -9        --best)--fast' \
-    '(   -2 -3 -4 -5 -6 -7 -8 -9 --fast --best)-1' \
-    '(-1    -3 -4 -5 -6 -7 -8 -9 --fast --best)-2' \
-    '(-1 -2    -4 -5 -6 -7 -8 -9 --fast --best)-3' \
-    '(-1 -2 -3    -5 -6 -7 -8 -9 --fast --best)-4' \
-    '(-1 -2 -3 -4    -6 -7 -8 -9 --fast --best)-5' \
-    '(-1 -2 -3 -4 -5	-7 -8 -9 --fast --best)-6' \
-    '(-1 -2 -3 -4 -5 -6    -8 -9 --fast --best)-7' \
-    '(-1 -2 -3 -4 -5 -6 -7    -9 --fast --best)-8' \
-    '(-1 -2 -3 -4 -5 -6 -7 -8	 --fast --best)-9' \
-    "${decomp}--single-stream[decompress only the first stream]" \
-    "${decomp}--no-sparse[do not create sparse files when decompressing]" \
-    '(* --files --files0)--files=-[read list of files to process from file]::file:_files' \
-    '(* --files --files0)--files0=-[read null terminated list of files to process from file]::file:_files' \
-    '(-F --format)'{-F,--format}'=[specify file format]:format:(auto xz lzma raw)' \
-    '(-C --check)'{-C,--check}'=[integrity check type]:check type:(none crc32 crc64 sha256)' \
-    '--memlimit-compress=[set memory usage limit for compression]:memory usage' \
-    '--memlimit-decompress=[set memory usage limit for decompression]:memory usage' \
-    '(-M --memlimit --memory)'{-M+,--memlimit=,--memory=}'[set memory usage limit]:memory usage' \
-    '--no-adjust[give error if settings exceed memory limit]' \
-    '(-Q --no-warn)'{-Q,--no-warn}'[make warnings not affect exit status]' \
-    '--robot[use machine-parsable messages]' \
-    --{x86,powerpc,ia64,arm,armthumb,sparc}=-'[add a branch/call/jump filter]::option:->bcj-options' \
-    --lzma{1,2}=-'[add lzma filter]::option:->lzma-options' \
-    '--delta=-[add delta filter]::option:->delta-options' \
-    '(- *)--info-memory[display amount of RAM and memory usage limits]' && ret=0
+    '(* comp decomp level filters common)'{-V,--version}'[display version number]' \
+    + '(level)' \
+    '(I filters decomp)-'{-best,-fast,1,2,3,4,5,6,7,8,9} \
+    + filters \
+    '(I level decomp --extreme)'--{x86,powerpc,ia64,arm,armthumb,sparc}=-'[add a branch/call/jump filter]::option:->bcj-options' \
+    '(I level decomp --extreme)'--lzma{1,2}=-'[add lzma filter]::option:->lzma-options' \
+    '(I level decomp --extreme)--delta=-[add delta filter]::option:->delta-options' && ret=0
   ;;
 esac
 
@@ -71,7 +72,7 @@ case $state in
   ;;
   lzma-options)
     _values -s , options 'preset:preset' 'dict:size' 'lc:context bits' \
-      'lp:position bits' 'mf:matchfinder:(hc3 hc4 bt2 bt3 bt4)' \
+      'lp:position bits' 'pb:position bites' 'mf:matchfinder:(hc3 hc4 bt2 bt3 bt4)' \
       'mode:mode:(fast normal)' 'nice:length' 'depth:depth' && ret=0
   ;;
   bcj-options)



Messages sorted by: Reverse Date, Date, Thread, Author