about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--Completion/Unix/Command/_cvs1
-rw-r--r--Completion/Unix/Command/_dd30
-rw-r--r--Completion/Unix/Command/_dict69
-rw-r--r--Completion/Unix/Command/_grep87
-rw-r--r--Completion/Unix/Command/_loadkeys22
-rw-r--r--Completion/Unix/Command/_ls133
-rw-r--r--Completion/Unix/Command/_patch2
-rw-r--r--Completion/Unix/Command/_user_admin67
-rw-r--r--Completion/Unix/Command/_wget105
-rw-r--r--Completion/Unix/Type/_diff_options29
-rw-r--r--Completion/Unix/Type/_directories2
-rw-r--r--Completion/Unix/Type/_groups2
-rw-r--r--Completion/Unix/Type/_users2
14 files changed, 287 insertions, 276 deletions
diff --git a/ChangeLog b/ChangeLog
index 3b1aaa6aa..cfb7fccf9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2001-08-06  Oliver Kiddle  <opk@zsh.org>
+
+	* 15574: Completion/Unix/Command/_cvs, Completion/Unix/Command/_dd,
+	Completion/Unix/Command/_dict, Completion/Unix/Command/_grep,
+	Completion/Unix/Command/_loadkeys, Completion/Unix/Command/_ls,
+	Completion/Unix/Command/_patch, Completion/Unix/Command/_user_admin,
+	Completion/Unix/Command/_wget, Completion/Unix/Type/_diff_options,
+	Completion/Unix/Type/_directories,  Completion/Unix/Type/_groups,
+	Completion/Unix/Type/_users: new _user_admin for useradd, groupmod etc,
+	rewrite of _dd to use _values and make more completions share
+	descriptions for long and short options
+
 2001-08-03  Oliver Kiddle  <opk@zsh.org>
 
 	* 15562, Akinori Musha: 15559, 15563: Completion/BSD/Command/_chflags,
diff --git a/Completion/Unix/Command/_cvs b/Completion/Unix/Command/_cvs
index cd845e364..7e6a83f28 100644
--- a/Completion/Unix/Command/_cvs
+++ b/Completion/Unix/Command/_cvs
@@ -163,7 +163,6 @@ _cvs_checkout () {
     '(-D)-r+[specify revision]:tag:_cvs_revisions' \
     '(-r)-D+[specify date]:date:_cvs_D' \
     '-j+[merge]:tag:_cvs_revisions' \
-    '-j+[merge]:tag:_cvs_revisions' \
     '*:module:_cvs_modules'
 }
 
diff --git a/Completion/Unix/Command/_dd b/Completion/Unix/Command/_dd
index 419fc1a7a..27cff1198 100644
--- a/Completion/Unix/Command/_dd
+++ b/Completion/Unix/Command/_dd
@@ -1,20 +1,14 @@
 #compdef dd
 
-local expl
-
-if compset -P 1 'conv='; then
-  # If there's a comma present, ignore up to the last one.  The
-  # test alone will have that effect.
-  compset -p '*,'
-  _wanted values expl conversion \
-      compadd -qS, ascii ebcdic ibm block unblock lcase ucase swab noerror sync
-elif compset -P 1 'if='; then
-  _description files expl 'input file'
-  _tilde_files "$expl[@]"
-elif compset -P 1 'of='; then
-  _description files expl 'output file'
-  _tilde_files "$expl[@]"
-else
-  _wanted values expl option \
-      compadd -S '=' if of ibs obs bs cbs skip files seek count conv
-fi
+_values -S '=' 'option' \
+  'if[specify input file]:input file:_tilde_files' \
+  'of[specify output file]:output file:_tilde_files' \
+  'ibs[input block size]:block size (bytes)' \
+  'obs[output block size]:block size (bytes)' \
+  'bs[block size]:block size (bytes)' \
+  'cbs[conversion buffer size]:buffer size (bytes)' \
+  'skip[input blocks initially skipped]:blocks' \
+  'seek[output blocks initially skipped]:blocks' \
+  'files[specify number of input files to copy and concatenate]:number of files' \
+  'count[number of input blocks to copy]:blocks' \
+  'conv[specify conversions to apply]:conversion:_values -s , "conversion" ascii ebcdic ibm block unblock lcase ucase swab noerror sync'
diff --git a/Completion/Unix/Command/_dict b/Completion/Unix/Command/_dict
index 31b89ee1c..b86ec4267 100644
--- a/Completion/Unix/Command/_dict
+++ b/Completion/Unix/Command/_dict
@@ -1,47 +1,28 @@
 #compdef dict
 
 _arguments \
-	'(--host)-h[host]:dict server:_hosts' \
-	'(-h)--host:dict server:_hosts' \
-	'(--port)-p[port]:service:' \
-	'(-p)--port:service:' \
-	'(--database)-d[database]:db name:' \
-	'(-d)--database:db name:' \
-	'(--match)-m[match]' \
-	'(-m)--match' \
-	'(--strategy)-s[strategy]:strategy:' \
-	'(-s)--strategy:strategy:' \
-	'(--nocorrect)-C[nocorrect]' \
-	'(-C)--nocorrect' \
-	'(--config)-c[config]:config file:_files' \
-	'(-c)--config:config file:_files' \
-	'(--dbs)-D[list dbs]' \
-	'(-D)--dbs' \
-	'(--strats)-S[strats]' \
-	'(-S)--strats' \
-	'(--serverhelp)-H[server help]' \
-	'(-H)--serverhelp' \
-	'(--info)-i[db info]:db name:' \
-	'(-i)--info:db name:' \
-	'(--noauth)-a[disable authentication]' \
-	'(-a)--noauth' \
-	'(--user)-u[user]:user name:' \
-	'(-u)--user:user name:' \
-	'(--key)-k[key]:shared secret:' \
-	'(-k)--key:shared secret:' \
-	'(--version)-V[display version]' \
-	'(-V)--version' \
-	'(--license)-L[display license]' \
-	'(-L)--license' \
-	'--help' \
-	'(--verbose)-v[be verbose]' \
-	'(-v)--verbose' \
-	'(--raw)-r[be very verbose]' \
-	'(-r)--raw' \
-	'(--pager)-P[pager]:program:_command_names -e' \
-	'(-P)--pager:_command_names -e:' \
-	'--html' \
-	'--pipesize:buffer size:' \
-	'--client:client text:' \
-	'--debug:debug flag:(verbose raw scan parse pipe serial time)' \
-	':word:_dict_words'
+  '(--host -h)'{--host,-h}'[host]:dict server:_hosts' \
+  '(--port -p)'{--port,-p}'[port]:service:' \
+  '(--database -d)'{--database,-d}'[database]:db name:' \
+  '(--match -m)'{--match,-m}'[match]' \
+  '(--strategy -s)'{--strategy,-s}'[strategy]:strategy:' \
+  '(--nocorrect -C)'{--nocorrect,-C}'[nocorrect]' \
+  '(--config -c)'{--config,-c}'[config]:config file:_files' \
+  '(--dbs -D)'{--dbs,-D}'[list dbs]' \
+  '(--strats -S)'{--strats,-S}'[strats]' \
+  '(--serverhelp -H)'{--serverhelp,-H}'[server help]' \
+  '(--info -i)'{--info,-i}'[db info]:db name:' \
+  '(--noauth -a)'{--noauth,-a}'[disable authentication]' \
+  '(--user -u)'{--user,-u}'[user]:user name:' \
+  '(--key -k)'{--key,-k}'[key]:shared secret:' \
+  '(--version -V)'{--version,-V}'[display version]' \
+  '(--license -L)'{--license,-L}'[display license]' \
+  '--help' \
+  '(--verbose -v)'{--verbose,-v}'[be verbose]' \
+  '(--raw -r)'{--raw,-r}'[be very verbose]' \
+  '(--pager -P)'{--pager,-P}'[pager]:program:_command_names -e' \
+  '--html' \
+  '--pipesize:buffer size:' \
+  '--client:client text:' \
+  '--debug:debug flag:(verbose raw scan parse pipe serial time)' \
+  ':word:_dict_words'
diff --git a/Completion/Unix/Command/_grep b/Completion/Unix/Command/_grep
index 5c2fd8869..64dd5cb4e 100644
--- a/Completion/Unix/Command/_grep
+++ b/Completion/Unix/Command/_grep
@@ -1,7 +1,7 @@
 #compdef grep egrep fgrep
 # Ulrik Haugen 2001
 
-local efgrep="" efarguments arguments
+local arguments matchers
 
 (( $+_is_gnu )) || typeset -gA _is_gnu
 
@@ -14,59 +14,50 @@ if (( ! $+_is_gnu[$words[1]] )); then
   fi
 fi
 
-
-[[ "$service" = [ef]grep ]] && efgrep=t
-
-if [[ -z $efgrep ]]; then
-  efarguments=( \
-    '(--extended-regexp -F --fixed-strings)-E[extended regexp]' \
-    '(-E -F --fixed-strings)--extended-regexp' \
-    '(--fixed-strings -E --extended-regexp)-F[fixed strings]' \
-    '(-F -E --extended-regexp)--fixed-strings' \
+if [[ $service != [ef]grep ]]; then
+  matchers='(--extended-regexp --fixed-strings --basic-regexp -E -F -G)'
+  arguments=(
+    $matchers{--extended-regexp,-E}'[use extended regular expression]'
+    $matchers{--fixed-strings,-F}'[use literal strings]'
+    $matchers{--basic-regexp,-G}'[use basic regular expression]'
   )
 fi
 
-arguments=( \
-  '(-e --regexp -f --file)1:pattern:' \
-  {'(--regexp -f --file 1)-e+[regexp]','(-e -f --file 1)--regexp='}':regexp:' \
-  {'(--file -e --regexp 1)-f+[file]','(-f -e --regexp 1)--file='}':pattern file:_files' \
-  \
-  '*:files:_files' \
-  \
-  {'(--after-context)-A+[after context]','(-A)--after-context='}':after context:(1)' \
-  '(--text --binary-files)-a[text]' '(-a --binary-files)--text' \
-  {'(--before-context)-B+[before context]','(-B)--before-context='}':before context:(1)' \
-  {'(--context)-C+[context]','(-C)--context='}':context:(1)' \
-  '(--byte-offset)-b[byte offset]' '(-b)--byte-offset' \
-  '(-a --text -I)--binary-files:binary files:(binary without-match text)' \
-  '(--count)-c[count]' '(-c)--count' \
-  {'(--directories -r --recursive)-d+[directories]','(-d -r --recursive)--directories='}':directories:(read skip recurse grep)' \
-  \
-  $efarguments \
-  \
-  '(--basic-regexp)-G[basic regexp]' '(-G)--basic-regexp' \
-  '(--with-filename)-H[with filename]' '(-H)--with-filename' \
-  '(--no-filename)-h[no filename]' '(-h)--no-filename' \
-  '--help' \
-  '(--binary-files)-I[ignore binary]' \
-  '(--ignore-case)-i[ignore case]' '(-i)--ignore-case' \
-  '(--files-without-match)-L[files without match]' '(-L)--files-without-match' \
-  '(--file-with-matches)-l[files with matches]' '(-l)--files-with-matches' \
-  '--mmap' \
-  '(--line-number)-n[line number]' '(-n)--line-number' \
-  '(--quiet --silent)-q[quiet]' '(-q --quiet)--silent' '(-q --silent)--quiet' \
-  '(--recursive -d --directories)-r[recursive]' '(-r -d --directories)--recursive' \
-  '(--no-mesages)-s[no messages]' '(-s)--no-messages' \
-  '(--version)-V[version]' '(-V)--version' \
-  '(--invert-match)-v[invert match]' '(-v)--invert-match' \
-  '(--word-regexp)-w[word regexp]' '(-w)--word-regexp' \
-  '(--line-regexp)-x[line regexp]' '(-x)--line-regexp' \
-  '(--null)-Z[null]' '(-Z)--null' \
+arguments=( $arguments[@]
+  '(--after-context -A)'{--after-context=,-A+}'[specify lines of trailing context]:lines'
+  '(--text -a --binary-files -I)'{--text,-a}'[process binary file as if it were text]'
+  '(--before-context -B)'{--before-context=,-B+}'[specify lines of leading context]:lines'
+  '(--context,-C)'{--context=,-C+}'[specify lines of context]:lines'
+  '(--byte-offset -b -c)'{--byte-offset,-b}'[print the byte offset with output lines]'
+  '(--text -a -I)--binary-files=[specify type to assume for binary files]:file type:(binary without-match text)'
+  '(--count -c --byte-offset -b --line-number -n)'{--count,-c}'[only print a count of matching lines]'
+  '(--directories -d -r --recursive)'{--directories=,-d+}'[specify handling of directories]:action on directory:(read skip recurse)'
+  '(1)*'{--regexp=,-e+}'[specify pattern]:pattern'
+  '(1)*'{--file=,-f+}'[specify pattern file]:file:_files'
+  '(--with-filename -H --no-filename -h)'{--with-filename,-H}'[print filename with each match]'
+  '(--no-filename -h --with-filename -H --null -Z --files-without-match -L --file-with-matches -l)'{--no-filename,-h}'[suppress printing of filenames]'
+  '(--text -a --binary-files)-I[process binary files as if non-matching]'
+  '(--ignore-case -i -y)'{--ignore-case,-i,-y}'[case-insensitive]'
+  '(--files-without-match -L --file-with-matches -l --no-filename -h)'{--files-without-match,-L}"[output non-matching files' names only]"
+  '(--files-with-matches -l --files-without-match -L --no-filename -h)'{--files-with-matches,-l}"[output matching files' names only]"
+  '(--line-number -n -c)'{--line-number,-n}'[prefix output with line numbers]'
+  '(--quiet --silent -q)'{--quiet,--silent,-q}'[suppress normal output]'
+  '(--recursive -r -d --directories)'{--recursive,-r}'[recurse subdirectories]'
+  '(--no-mesages -s)'{--no-messages,-s}'[suppress messages about unreadable]'
+  '(--version -V)'{--version,-V}'[display version info]'
+  '(--invert-match -v)'{--invert-match,-v}'[select non-matching lines]'
+  '(--word-regexp -w --line-regexp -x)'{--word-regexp,-w}'[force pattern to match only whole words]'
+  '(--line-regexp -x --word-regexp -w)'{--line-regexp,-x}'[force pattern to match only whole lines]'
+  '(--null -Z --no-filename -h)'{--null,-Z}'[print 0 byte after FILE name]'
+  '--help[display help]'
+  '--mmap[memory map input]'
+  '(-e --regexp -f --file)1:pattern:_guard "^--*"'
+  '*:files:_files'
 )
 
 # remove long options?
 [[ -z "$_is_gnu[$words[1]]" ]] &&
-    arguments=( ${${${${arguments:#*\)--*}:#--*}//--[^ )]#/}/\( #\)/} )
+    arguments=( ${${${arguments:#(|*\)(\*|))--*}//--[^ )]#/}/\( #\)/} )
 
-_arguments -s $arguments
+_arguments -s $arguments[@]
 
diff --git a/Completion/Unix/Command/_loadkeys b/Completion/Unix/Command/_loadkeys
index 9244392fc..d0a87b6f6 100644
--- a/Completion/Unix/Command/_loadkeys
+++ b/Completion/Unix/Command/_loadkeys
@@ -3,22 +3,16 @@
 case $OSTYPE in
   linux*)
     _arguments \
-	'(--clearcompose)-c[clearcompose]' \
-	'(-c)--clearcompose' \
-	'(--default)-d[default]' \
-	'(-d)--default' \
-	'(--help)-h[help]' \
-	'(-h)--help' \
-	'(--mktable)-m[mktable]' \
-	'(-m)--mktable' \
-	'(--clearstrings)-s[clearstrings]' \
-	'(-s)--clearstrings' \
-	'(--verbose)-v[verbose]' \
-	'(-v)--verbose' \
-	':keymap:_files -W /usr/share/keymaps'
+      '(--clearcompose -c)'{--clearcompose,-c}'[clear kernel compose table]' \
+      '(--default -d)'{--default,-d}'[load default keymap file]' \
+      '(--help -h)'{--help,-h}'[display help information]' \
+      '(--mktable -m)'{--mktable,-m}'[output a "defkeymap.c" to stdout]' \
+      '(--clearstrings)'{--clearstrings,-s}'[clear kernel string table]' \
+      '*'{--verbose,-v}'[print more details]' \
+      ':keymap:_files -W /usr/share/keymaps'
   ;;
   solaris*)
-	_files -W /usr/share/lib/keytables
+    _files -W /usr/share/lib/keytables
   ;;
 
   *) _default;;
diff --git a/Completion/Unix/Command/_ls b/Completion/Unix/Command/_ls
index 0e5625cd2..b9588c5f4 100644
--- a/Completion/Unix/Command/_ls
+++ b/Completion/Unix/Command/_ls
@@ -14,79 +14,72 @@ if (( ! $+_is_gnu[$words[1]] )); then
   fi
 fi
 
-arguments=( \
-  '*:files:_files' \
-  \
-  '(--all -A --almost-all)-a[all]' '(-a -A --almost-all)--all' \
-  '(--almost-all -a --all)-A[almost all]' '(-A -a --all)--almost-all' \
-  '(--ignore-backups)-B[ignore backups]' '(-B)--ignore-backups' \
-  '(--directory)-d[directory]' '(-d)--directory' \
-  {'(--ignore)-I+[ignore]','(-I)--ignore='}':ignore:' \
-  '(--dereference)-L[dereference]' '(-L)--dereference' \
-  '(--recursive)-R[recursive]' '(-R)--recursive' \
-  \
-  '(--no-group)-G[no group]' '(-G)--no-group' \
-  '(--human-readable -H --si)-h[human readable]' '(-h -H --si)--human-readable' \
-  '(--si -h --human-readable)-H[si]' '(-H -h --human-readable)--si' \
-  '(--inode)-i[inode]' '(-i)--inode' \
-  \
-  '(--format -o -1 -C -m -x)-l[long]' \
-  '(--format -l --no-group -1 -C -m -x)-o[no group, long]' \
-  '(--format -l -o -C -m -x)-1[single column]' \
-  '(--format -l -o -1 -m -x)-C[sort vertically]' \
-  '(--format -l -o -1 -C -x)-m[comma separated]' \
-  '(--format -l -o -1 -C -m)-x[sort horizontally]' \
-  '(-l -o -1 -C -m -x)--format=:format:(verbose long commas horizontal across vertical single-column)' \
-  \
-  '(--size -f)-s[size]' '(-s -f)--size' \
-  \
-  '(--time -u)-c[status change time]' \
-  '(--time -c)-u[access time]' \
-  '(-c -u)--time=:time:(ctime status use atime access)' \
-  \
-  '(-a --all -U -l --format -s --size -t --sort)-f[no sort, all]' \
-  '(--reverse)-r[reverse]' '(-r)--reverse' \
-  \
-  '(--sort -t -U -v -X)-S[sort by size]' \
-  '(--sort -S -U -v -X)-t[sort by time]' \
-  '(--sort -S -t -v -X)-U[no sort]' \
-  '(--sort -S -t -U -X)-v[sort by version]' \
-  '(--sort -S -t -U -v)-X[sort by extension]' \
-  '(-S -t -U -v -X)--sort=:sort:(size time none version extension)' \
-  \
-  '--color=-::color:(never always auto)' \
-  \
-  '(--classify --indicator-style -p --file-type)-F[classify]'  \
-  '(-F --indicator-style -p --file-type)--classify' \
-  '(--file-type --indicator-style -F --classify)-p[file type]' \
-  '(-p --indicator-style -F --classify)--file-type' \
-  '(-F --classify -p --file-type)--indicator-style=:indicator style:(none file-type classify)' \
-  \
-  '--full-time' \
-  \
-  '(--kilobytes --block-size)-k[kilobytes]' '(-k --blocksize)--kilobytes' \
-  '(-k --kilobytes)--block-size:blocksize:(1024)' \
-  \
-  '(--numeric-uid-gid)-n[numeric uid, gid]' \
-  {'(--tabsize)-T+[tabsize]','(-T)--tabsize='}':tabsize:(8)' \
-  {'(--width)-w+[width]','(-w)--width='}':width:(80)' \
-  \
-  '(--quoting-style --escape -N --literal -Q --quote-name)-b[escape]' \
-  '(--quoting-style -b -N --literal -Q --quote-name)--escape' \
-  '(--quoting-style -b --escape --literal -Q --quote-name)-N[literal]' \
-  '(--quoting-style -b --escape -N -Q --quote-name)--literal' \
-  '(--quoting-style -b --escape -N --literal --quote-name)-Q[quote name]' \
-  '(--quoting-style -b --escape -N --literal -Q)--quote-name' \
-  '(-b --escape -N --literal -Q --quote-name)--quoting-style=:quoting style:(literal shell shell-always c escape clocale locale)' \
-  \
-  '(--hide-control-chars --show-control-chars)-q[hide control chars]' \
-  '(-q --show-control-chars)--hide-control-chars' \
-  '(-q --hide-control-chars)--show-control-chars' \
-  '--version' \
+arguments=(
+  '(--all -a -A --almost-all)'{--all,-a}'[list entries starting with .]'
+  '(--almost-all -A -a --all)'{--almost-all,-A}'[list all except . and ..]'
+  '(--ignore-backups -B)'{--ignore-backups,-B}"[don't list entries ending with ~]"
+  '(--directory -d)'{--directory,-d}'[list directory entries instead of contents]'
+  '(--ignore,-I)'{--ignore,-I}"[don't list entires matching pattern]:pattern:"
+  '(--dereference -L)'{--dereference,-L}'[list referenced file for sym link]'
+  '(--recursive -R)'{--recursive,-R}'[list subdirectories recursively]'
+ 
+  '(--no-group -G)'{--no-group,-G}'[inhibit display of group information]'
+  '(--human-readable -h -H --si)'{--human-readable,-h}'[print sizes in human readable form]'
+  '(--si -H -h --human-readable)'{--si,-H}'[sizes in human readable form; powers of 1000]'
+  '(--inode -i)'{--inode,-i}'[print file inode numbers]'
+ 
+  '(--format -o -1 -C -m -x)-l[long listing]'
+  '(--format -l --no-group -G -1 -C -m -x)-o[no group, long]'
+  '(--format -l -o -C -m -x)-1[single column output]'
+  '(--format -l -o -1 -m -x)-C[sort vertically]'
+  '(--format -l -o -1 -C -x)-m[comma separated]'
+  '(--format -l -o -1 -C -m)-x[sort horizontally]'
+  '(-l -o -1 -C -m -x)--format=:format:(verbose long commas horizontal across vertical single-column)'
+ 
+  '(--size -s -f)'{--size,-s}'[display size of each file in blocks]'
+ 
+  '(--time -u)-c[status change time]'
+  '(--time -c)-u[access time]'
+  '(-c -u)--time=[specify time to show]:time:(ctime status use atime access)'
+ 
+  '(-a --all -U -l --format -s --size -t --sort --full-time)-f[unsorted, all, short list]'
+  '(--reverse)'{--reverse,-r}'[reverse sort order]'
+ 
+  '(--sort -t -U -v -X)-S[sort by size]'
+  '(--sort -S -U -v -X)-t[sort by modification time]'
+  '(--sort -S -t -v -X)-U[unsorted]'
+  '(--sort -S -t -U -X)-v[sort by version (filename treated numerically)]'
+  '(--sort -S -t -U -v)-X[sort by extension]'
+  '(-S -t -U -v -X)--sort=:sort:(size time none version extension)'
+ 
+  '--color=-[control use of color]:color:(never always auto)'
+ 
+  '(--classify -F --indicator-style -p --file-type)'{--classify,-F}'[append file type indicators]' 
+  '(--file-type -p --indicator-style -F --classify)'{--file-type,-p}'[append file type indicators except *]'
+  '(-F --classify -p --file-type)--indicator-style=:indicator style:(none file-type classify)'
+ 
+  '(-f)--full-time[list both full date and full time]'
+ 
+  '(--kilobytes -k --block-size)'{--kilobytes,-k}'[use block size of 1k]'
+  '(-k --kilobytes)--block-size=[specify block size]:block size (bytes):(1024)'
+ 
+  '(--numeric-uid-gid -n)'{--numeric-uid-gid,-n}'[numeric uid, gid]'
+  '(--tabsize -T)'{--tabsize=,-T+}'[specify tab size]:tab size'
+  '(--width -w)'{--width=,-w+}'[specify screen width]:screen width'
+ 
+  '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--escape,-b}'[print octal escapes for control characters]'
+  '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--literal,-N}'[print raw characters]'
+  '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--quote-name,-Q}'[quote names]'
+  '(-b --escape -N --literal -Q --quote-name)--quoting-style=:quoting style:(literal shell shell-always c escape clocale locale)'
+ 
+  '(--hide-control-chars -q --show-control-chars)'{--hide-control-chars,-q}'[hide control chars]'
+  '(-q --hide-control-chars)--show-control-chars'
+  '--version[display version information]'
+  '*:files:_files'
 )
 
 # remove long options?
 [[ -z "$_is_gnu[$words[1]]" ]] &&
-    arguments=( ${${${${arguments:#*\)--*}:#--*}//--[^ )]#/}/\( #\)/} )
+    arguments=( ${${${arguments:#(|*\))--*}//--[^ )]#/}/\( #\)/} )
 
 _arguments -s $arguments
diff --git a/Completion/Unix/Command/_patch b/Completion/Unix/Command/_patch
index c5867a6b1..c85720d1c 100644
--- a/Completion/Unix/Command/_patch
+++ b/Completion/Unix/Command/_patch
@@ -56,7 +56,7 @@ if (( ! $+_patch_args )); then
 
     '* --quoting-style=WORD[, ]*' '--quoting-style=[quoting style]:quoting style:(literal shell shell-always c escape)'
 
-    '*(\[-[a-zA-Z]#b[a-zA-Z]#\]| -b[, ])*' '(--backup)-b[back up original]'
+    '*(\[-[a-zA-Z]#b[a-zA-Z]#\]| -b[, ])*' '(--backup)-b[backup original]'
     '* --backup[, ]*' '(-b)--backup[backup original]'
     '* --backup-if-mismatch[, ]*' '(--no-backup-if-mismatch)--backup-if-mismatch[back up if not match exactly]'
     '* --no-backup-if-mismatch[, ]*' '(--backup-if-mismatch)--no-backup-if-mismatch[back up only if otherwise requested]'
diff --git a/Completion/Unix/Command/_user_admin b/Completion/Unix/Command/_user_admin
new file mode 100644
index 000000000..831f365b8
--- /dev/null
+++ b/Completion/Unix/Command/_user_admin
@@ -0,0 +1,67 @@
+#compdef useradd usermod groupadd groupmod
+
+local args shells home=${${words[(r)-D]:+b}:-d} sun=" -s"
+
+if [[ $service = user* ]]; then
+  if [[ -r /etc/shells ]]; then
+    shells=( $(</etc/shells) )
+  else
+    shells=( ${(M)commands:#*/(|[abckz]|tc|ba)sh} )
+  fi
+
+  args=(
+    '(-D)-c+[comment]:comment'
+    "(-D)-${home}+[home directory]:home directory:_directories -W /"
+    '(-D)-e+[specify expriration date]:expiration date (YYYY-MM-DD)'
+    '(-D)-f+[specify inactive days]:inactive days'
+    '(-D)-g+[initial group]:initial group:_groups'
+    '(-D)-G+[supplementary groups]:supplementary groups:_groups -S,'
+    "(-D)-s+[shell]:shell:( $shells /dev/null )"
+    '(-D)-m[create home directory]'
+    '(-D)-u[uid]:uid'
+    '(-D)-o[allow non unique uid]'
+  )
+  [[ $OSTYPE = linux* ]] && args=( $args[@] 
+      '(-D)-p+[specify encrypted password]:encrypted password' )
+
+  if [[ $service = useradd ]]; then
+    if [[ $OSTYPE = linux* ]]; then
+      args=( $args[@]
+	"(-D -k)-M[don't create home]"
+	'(-D)-r[create system account]'
+	"(-D)-n[don't create mirrored user]"
+      )
+      unset sun
+    fi
+    args=( $args[@]
+      "(-c -G -m -k -M -p -u -o -n -r$sun)-D[modify or display defaults]"
+      '(-D -M)-k[skeleton home directory]:skeleton directory:_directories -W /'
+      ':username'
+    )
+  else
+    [[ $OSTYPE = linux* ]] && args=( $args[@]
+	"(-U)-L[lock user's password]"
+	"(-L)-U[unlock user's password]"
+    )
+    args=( $args[@]
+      '-l[specify new user name]:new username'
+      ':username:_users'
+    )
+  fi
+else
+  args=( '-g+[gid]:gid' '-o[allow non unique gid]' )
+  if [[ $service = groupadd ]]; then
+    args=( $args[@] ':group name' )
+    [[ $OSTYPE = linux* ]] && args=( $args[@]
+      '-r[create system group]'
+      '-f[force]'
+    )
+  else
+    args=( $args[@] 
+      '-n[specify new group name]:new group name'
+      ':group name:_groups'
+    )
+  fi
+fi
+
+_arguments -A "-*" -s $args[@]
diff --git a/Completion/Unix/Command/_wget b/Completion/Unix/Command/_wget
index 3f195cc8c..eb940782d 100644
--- a/Completion/Unix/Command/_wget
+++ b/Completion/Unix/Command/_wget
@@ -3,72 +3,67 @@
 local curcontext="$curcontext" state line
 typeset -A opt_args
 
-local tmp1 tmp2
-
 _arguments -C -s \
-  '(--version)-V[version]' '(-V)--version' \
-  '(--help)-h[help]' '(-h)--help' \
-  '(--background)-b[background]' '(-b)--background' \
-  {'(--execute)-e+[execute]','(-e)--execute='}':.wgetrc command:' \
-  {'(--output-file)-o+[output file]','(-o)--output-file='}':log file to output:_files' \
-  {'(--append-output)-a+[append output file]','(-a)--append-output='}':log file to append:_files' \
-  '(--debug)-d[debug]' '(-d)--debug' \
-  '(--quiet)-q[quiet]' '(-q)--quiet' \
-  '(--verbose)-v[verbose]' '(-v)--verbose' \
-  '*-n+[no]:flags:->noflags' \
-  {'(--input-file)-i+[input file]','(-i)--input-file='}':file containing URLs:_files' \
-  '(--force-html)-F[force html]' '(-F)--force-html' \
-  {'(--base)-B+[prepend URL to relative links]','(-B)--base='}':base URL:_urls' \
+  '(--version -V)'{--version,-V}'[display version info]' \
+  '(--help -h)'{--help,-h}'[display help]' \
+  '(--background -b)'{--background,-b}'[run in background]' \
+  '(--execute -e)'{--execute=,-e+}'[execute .wgetrc command]:.wgetrc command' \
+  '(--output-file -o --append-output -a)'{--output-file=,-o+}'[specify output logfile]:log file to output:_files' \
+  '(--append-output -a --output-file -o)'{--append-output=,-a+}'[specify output logfile to append to]:log file to append:_files' \
+  '(--debug -d)'{--debug,-d}'[turn on debug output]' \
+  '(--quiet -q --verbose -v --non-verbose -nv)'{--quiet,-q}'[turn off output]' \
+  '(--quiet -q --verbose -v --non-verbose -nv)'{--verbose,-v}'[turn on verbose output]' \
+  '*-n+[turn off flags]:flags:->noflags' \
+  '(--input-file -i)'{--input-file=,-i+}'[specify input file]:file containing URLs:_files' \
+  '(--force-html -F)'{--force-html,-F}'[treat input file as html]' \
+  '(--base -B)'{--base=,-B+}'[prepend URL to relative links]:base URL:_urls' \
   '--bind-address=:address to bind to (hostname or IP):_hosts' \
-  {'(--tries)-t+[tries]','(-t)--tries='}':number of retries:(0)' \
-  {'(--output-document)-O+[output document]','(-O)--output-document='}':output file:_files' \
-  '(--continue)-c[continue]' '(-c)--continue' \
-  '--dot-style=:display style:(default binary mega giga micro)' \
-  '(--timestamping)-N[timestamping]' '(-N)--timestamping' \
-  '(--server-response)-S[server response]' '(-S)--server-response' \
-  '--spider' \
-  {'(--timeout)-T+[timeout]','(-T)--timeout='}':read timeout(seconds):' \
-  {'(--wait)-w+[wait]','(-w)--wait='}':wait between retrievals(seconds):' \
-  '--waitretry=:seconds to wait between retries of a retrieval:' \
-  {'(--proxy --use-proxy)-Y+[proxy]','(-Y --use-proxy)--proxy=','(-Y --proxy)--use-proxy='}':proxy:(on off)' \
-  {'(--quota)-Q+[quota]','(-Q)--quota='}':number:' \
-  '(--force-directories)-x[force directories]' '(-x)--force-directories' \
-  {'(--directory-prefix)-P+[directory prefix]','(-P)--directory-prefix='}':prefix:_files -/' \
+  '(--tries -t)'{--tries=,-t+}'[set number of retries]:number of retries' \
+  '(--output-document -O)'{--output-document=,-O+}'[specify file to write documents to]:output file:_files' \
+  '(--continue -c)'{--continue,-c}'[continue getting an existing file]'  \
+  '--dot-style=[set retrieval display style]:display style:(default binary mega giga micro)' \
+  '(--timestamping -N)'{--timestamping,-N}'[retrieve only files newer than existing]' \
+  '(--server-response -S)'{--server-response,-S}'[print server response]' \
+  "--spider[don't download anything]" \
+  '(--timeout -T)'{--timeout=,-T+}'[specify read timeout]:read timeout (seconds)' \
+  '(--wait,-w)'{--wait=,-w+}'[specify wait between retrievals]:wait between retrievals (seconds)' \
+  '--waitretry=:wait between retries of a retrieval (seconds)' \
+  '(--proxy -Y)'{--proxy=,-Y+}'[turn proxy on or off]:proxy use:(on off)' \
+  '(--quota -Q)'{--quota=,-Q+}'[set retrieval quota]:number' \
+  '(--force-directories -x)'{--force-directories,-x}'[force creation of directories]' \
+  '(--directory-prefix -P)'{--directory-prefix=,-P+}'[specify prefix to save files to]:prefix:_files -/' \
   '--cut-dirs=:number:' \
   '--http-user=:user:' \
   '--http-passwd=:password:' \
-  '(--html-extension)-E[save all text/html files with a .html extension]' \
-  '(-E)--html-extension' \
-  '--ignore-length' \
+  '(--html-extension -E)'{--html-extension,-E}'[save all text/html files with a .html extension]' \
+  "--ignore-length[ignore \`Content-Length' header field]" \
   '--header=:string:' \
   '--proxy-user=:user:' \
   '--proxy-passwd=:password:' \
   '--referer=:url:_urls' \
-  '(--save-headers)-s[save headers]' '(-s)--save-headers' \
-  {'(--user-agent)-U+[user agent]','(-U)--user-agent='}':user-agent:' \
+  '(--save-headers -s)'{--save-headers,-s}'[save http headers]' \
+  '(--user-agent -U)'{--user-agent=,-U+}'[specify user agent to identify as]:user-agent' \
   '--retr-symlinks' \
-  {'(--glob)-g+[glob]','(-g)--glob='}':glob:(on off)' \
+  '(--glob -g)'{--glob=,-g+}'[turn file globbing on or off]:glob:(on off)' \
   '--passive-ftp' \
-  '(--recursive)-r[recursive]' '(-r)--recursive' \
-  {'(--level)-l+[level]','(-l)--level='}':level:(0)' \
+  '(--recursive -r)'{--recursive,-r}'[recurse subdirectories]' \
+  '(--level -l)'{--level=,-l+}'[specify maximum recursion depth]:level' \
   '--delete-after' \
-  '(--convert-links)-k[convert links]' '(-k)--convert-links' \
-  '(--backup-converted)-K[backup files before conversion]' \
-  '(-K)--backup-converted' \
-  '(--mirror)-m[mirror]' '(-m)--mirror' \
-  '(--page-requisites)-p[get all images needed to display page]' \
-  '(-p)--page-requisites' \
-  {'(--accept)-A+[accept]','(-A)--accept='}':accepted extensions:' \
-  {'(--reject)-R+[reject]','(-R)--reject='}':rejected extensions:' \
-  {'(--domains)-D+[domains]','(-D)--domains='}':accepted domains:' \
+  '(--convert-links -k)'{--convert-links,-k}'[convert links to be relative]' \
+  '(--backup-converted -K)'{--backup-converted,-K}'[backup files before conversion]' \
+  '(--mirror -m -r -N -l)'{--mirror,-m}'[mirror (-r -N -l inf -nr)]' \
+  '(--page-requisites -p)'{--page-requisites,-p}'[get all images needed to display page]' \
+  '(--accept -A)'{--accept=,-A+}'[specify accepted extensions]:extensions' \
+  '(--reject -R)'{--reject=,-R+}'[specify rejected extensions]:extensions' \
+  '(--domains -D)'{--domains=,-D+}'[specify accepted domains]:domains' \
   '--exclude-domains=:rejected domains:' \
   '--follow-ftp' \
   '--follow-tags=:HTML tags:' \
-  {'(--ignore-tags)-G+[ignored HTML tags]','(-G)--ignore-tags='}':HTML tags:' \
-  '(--span-hosts)-H[span hosts]' '(-H)--span-hosts' \
-  '(--relative)-L[follow relative links only]' '(-L)--relative' \
-  {'(--include-directories)-I+[include directories]','(-I)--include-directories='}':allowed directories:' \
-  {'(--exclude-directories)-X+[exclude directories]','(-X)--exclude-directories='}':excluded directories:' \
+  '(--ignore-tags -G)'{--ignore-tags=,-G+}'[spcify ignored HTML tags]:HTML tags' \
+  '(--span-hosts -H)'{--span-hosts,-H}'[span hosts]' \
+  '(--relative -L)'{--relative,-L}'[follow relative links only]' \
+  '(--include-directories -I)'{--include-directories=,-I+}'[include directories]:allowed directories' \
+  '(--exclude-directories -X)'{--exclude-directories=,-X+}'[exclude directories]:excluded directories' \
   '--no-host-lookup' \
   '--no-parent' \
   '--non-verbose' \
@@ -76,17 +71,11 @@ _arguments -C -s \
   '--no-directories' \
   '--no-host-directories' \
   '--dont-remove-listing' \
-  '--cache=:cache:(on off)' \
+  '(--cache -C)'{--cache=,-C+}'[(dis)allow server-cached data]:cache:(on off)' \
   '--htmlify=:htmlify:' \
   '--no:no:->noflags' \
   '*:url:_urls' && return 0
 
-#  '--backups:backups:' \
-#  '-W' \
-#  '(--email-address)-E+[email address]' '(-E)--email-address' \
-#  '-C+[cache]:cache:(on off)' \
-#  '--force-hier' \
-
 case "$state" in
 noflags)
   _values -s '' 'option' \
diff --git a/Completion/Unix/Type/_diff_options b/Completion/Unix/Type/_diff_options
index 3526fc984..cc25a8ae8 100644
--- a/Completion/Unix/Type/_diff_options
+++ b/Completion/Unix/Type/_diff_options
@@ -49,19 +49,16 @@ if [[ -n "$_is_gnu[$cmd]" ]]; then
   --unchanged-group-format"
 
   _arguments -s \
-    '(-i)--ignore-case[case insensitive]' \
-    '(--ignore-case)-i[case insensitive]' \
-    '(-w)--ignore-all-space[ignore all white space]' \
-    '(--ignore-all-space)-w[ignore all white space]' \
+    '(--ignore-case -i)'{--ignore-case,-i}'[case insensitive]' \
+    '(--ignore-all-space -w)'{--ignore-all-space,-w}'[ignore all white space]' \
     '(-b)--ignore-space-change[ignore changes in the amount of white space]' \
     '(--ignore-space-change)-b[ignore changes in the amount of white space]' \
     '(-B)--ignore-blank-lines[ignore lines that are all blank]' \
     '(--ignore-blank-lines)-B[ignore lines that are all blank]' \
     '(-I)--ignore-matching-lines=[ignore lines that match regex]:line exclusion regex:' \
     '(--ignore-matching-lines)-I+[ignore lines that match regex]:line exclusion regex:' \
-    '(-a)--text[treat all files as text]' \
-    '(--text)-a[treat all files as text]' \
-    "($of $oss)--context=-[context diff]:number of lines of copied context:" \
+    '(--text -a)'{--text,-a}'[treat all files as text]' \
+    "($of $oss)--context=-[output a context diff]:number of lines of copied context:" \
     "($of $oss)-C+[output a context diff]:number of lines of copied context:" \
     "($of $oss)-c[output a context diff]" \
     "($of $oss)--unified=-[output a unified diff]:number of lines of unified context:" \
@@ -95,16 +92,12 @@ if [[ -n "$_is_gnu[$cmd]" ]]; then
     "($ofwl $ouc $oss)--old-line-format=[set old line format]:old line format:" \
     "($ofwl $ouc $oss)--new-line-format=[set new line format]:new line format:" \
     "($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format:" \
-    '(-l)--paginate[output through pr]' \
-    '(--paginate)-l[output through pr]' \
-    '(-t)--expand-tabs[expand tabs to spaces]' \
-    '(--expand-tabs)-t[expand tabs to spaces]' \
-    '(-T)--initial-tab[prepend a tab]' \
-    '(--initial-tab)-T[prepend a tab]' \
+    '(--paginate -l)'{--paginate,-l}'[output through pr]' \
+    '(--expand-tabs -t)'{--expand-tabs,-t}'[expand tabs to spaces]' \
+    '(--initial-tab -T)'{--initial-tab,-T}'[prepend a tab]' \
     '(-r)--recursive[recursively compare subdirectories]' \
     '(--recursive)-r[recursively compare subdirectories]' \
-    '(-N)--new-file[treat absent files as empty]' \
-    '(--new-file)-N[treat absent files as empty]' \
+    '(--new-file -N)'{--new-file,-N}'[treat absent files as empty]' \
     '(-P)--unidirectional-new-file[treat absent first files as empty]' \
     '(--unidirectional-new-file)-P[treat absent first files as empty]' \
     '(-s)--report-identical-files[report when two files are the same]' \
@@ -116,12 +109,10 @@ if [[ -n "$_is_gnu[$cmd]" ]]; then
     '(-S)--starting-file=[set first file in comparison]:start with file:_files' \
     '(--starting-file)-S+[set first file in comparison]:start with file:_files' \
     '--horizon-lines=[set number of lines to keep in prefix and suffix]:number of horizon lines:' \
-    '(-d)--minimal[try to find a smaller set of changes]' \
-    '(--minimal)-d[try to find a smaller set of changes]' \
+    '(--minimal -d)'{--minimal,-d}'[try to find a smaller set of changes]' \
     '(-H)--speed-large-files[assume large files and many small changes]' \
     '(--speed-large-files)-H[assume large files and many small changes]' \
-    '(--version)-v[output version info]' \
-    '(-v)--version[output version info]' \
+    '(--version -v)'{--version,-v}'[output version info]' \
     '--help[help text]' \
     "$@"
 else
diff --git a/Completion/Unix/Type/_directories b/Completion/Unix/Type/_directories
index 40d027188..9a1a9c1f3 100644
--- a/Completion/Unix/Type/_directories
+++ b/Completion/Unix/Type/_directories
@@ -1,3 +1,3 @@
 #compdef rmdir df du dircmp dirs
 
-_files -/
+_files -/ "$@"
diff --git a/Completion/Unix/Type/_groups b/Completion/Unix/Type/_groups
index a8d8ad068..bbb80868b 100644
--- a/Completion/Unix/Type/_groups
+++ b/Completion/Unix/Type/_groups
@@ -1,4 +1,4 @@
-#compdef newgrp
+#compdef newgrp groupdel
 
 local expl groups tmp
 
diff --git a/Completion/Unix/Type/_users b/Completion/Unix/Type/_users
index 573d8fdb1..d04a16afe 100644
--- a/Completion/Unix/Type/_users
+++ b/Completion/Unix/Type/_users
@@ -1,4 +1,4 @@
-#compdef passwd groups
+#compdef passwd groups userdel
 
 local expl users