about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog33
-rw-r--r--Completion/AIX/Command/_floppy2
-rw-r--r--Completion/AIX/Command/_lsdev28
-rw-r--r--Completion/AIX/Command/_lslv2
-rw-r--r--Completion/AIX/Command/_lsvg2
-rw-r--r--Completion/AIX/Type/_logical_volumes2
-rw-r--r--Completion/AIX/Type/_object_classes2
-rw-r--r--Completion/AIX/Type/_physical_volumes2
-rw-r--r--Completion/AIX/Type/_volume_groups2
-rw-r--r--Completion/Darwin/Type/_mac_applications3
-rw-r--r--Completion/Debian/Command/_bug3
-rw-r--r--Completion/Unix/Command/_gs2
-rw-r--r--Completion/Unix/Command/_imagemagick8
-rw-r--r--Completion/Unix/Command/_java6
-rw-r--r--Completion/Unix/Command/_last28
-rw-r--r--Completion/Unix/Command/_links29
-rw-r--r--Completion/Unix/Command/_lsof4
-rw-r--r--Completion/Unix/Command/_mount22
-rw-r--r--Completion/Unix/Command/_perldoc6
-rw-r--r--Completion/Unix/Command/_user_admin16
-rw-r--r--Completion/Unix/Command/_yp26
-rw-r--r--Completion/Unix/Command/_zdump7
-rw-r--r--Completion/Unix/Type/_dir_list4
-rw-r--r--Completion/Unix/Type/_domains2
-rw-r--r--Completion/Unix/Type/_file_systems8
-rw-r--r--Completion/Unix/Type/_groups2
-rw-r--r--Completion/Unix/Type/_hosts2
-rw-r--r--Completion/Unix/Type/_java_class2
-rw-r--r--Completion/Unix/Type/_locales2
-rw-r--r--Completion/Unix/Type/_perl_basepods2
-rw-r--r--Completion/Unix/Type/_perl_modules5
-rw-r--r--Completion/Unix/Type/_pids2
-rw-r--r--Completion/Unix/Type/_ports2
-rw-r--r--Completion/Unix/Type/_printers14
-rw-r--r--Completion/Unix/Type/_services18
-rw-r--r--Completion/Unix/Type/_tex2
-rw-r--r--Completion/Unix/Type/_texi2
-rw-r--r--Completion/Unix/Type/_time_zone2
-rw-r--r--Completion/Unix/Type/_users4
-rw-r--r--Completion/X/Type/_x_cursor2
-rw-r--r--Completion/X/Type/_x_extension6
-rw-r--r--Completion/X/Type/_x_font2
-rw-r--r--Completion/X/Type/_x_keysym2
-rw-r--r--Completion/Zsh/Command/_print2
-rw-r--r--Completion/Zsh/Command/_read2
-rw-r--r--Completion/Zsh/Command/_unhash2
-rw-r--r--Completion/Zsh/Type/_arrays2
-rw-r--r--Completion/Zsh/Type/_file_descriptors12
-rw-r--r--Completion/Zsh/Type/_functions2
-rw-r--r--Completion/Zsh/Type/_jobs_bg2
-rw-r--r--Completion/Zsh/Type/_jobs_fg2
-rw-r--r--Completion/Zsh/Type/_limits2
-rw-r--r--Completion/Zsh/Type/_options2
-rw-r--r--Completion/Zsh/Type/_options_set2
-rw-r--r--Completion/Zsh/Type/_options_unset6
55 files changed, 197 insertions, 163 deletions
diff --git a/ChangeLog b/ChangeLog
index 050062599..46854e654 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
 2005-06-08  Oliver Kiddle  <opk@zsh.org>
 
+	* 21315: Completion/AIX/Command/_floppy,
+	Completion/AIX/Command/_lsdev, Completion/AIX/Command/_lslv,
+	Completion/AIX/Command/_lsvg, Completion/AIX/Type/_logical_volumes,
+	Completion/AIX/Type/_object_classes,
+	Completion/AIX/Type/_physical_volumes,
+	Completion/AIX/Type/_volume_groups,
+	Completion/Darwin/Type/_mac_applications,
+	Completion/Debian/Command/_bug, Completion/Unix/Command/_gs,
+	Completion/Unix/Command/_imagemagick, Completion/Unix/Command/_java,
+	Completion/Unix/Command/_last, Completion/Unix/Command/_links,
+	Completion/Unix/Command/_lsof, Completion/Unix/Command/_mount,
+	Completion/Unix/Command/_perldoc, Completion/Unix/Command/_user_admin,
+	Completion/Unix/Command/_yp, Completion/Unix/Command/_zdump,
+	Completion/Unix/Type/_dir_list, Completion/Unix/Type/_domains,
+	Completion/Unix/Type/_file_systems, Completion/Unix/Type/_groups,
+	Completion/Unix/Type/_hosts, Completion/Unix/Type/_java_class,
+	Completion/Unix/Type/_locales, Completion/Unix/Type/_perl_basepods,
+	Completion/Unix/Type/_perl_modules, Completion/Unix/Type/_pids,
+	Completion/Unix/Type/_ports, Completion/Unix/Type/_printers,
+	Completion/Unix/Type/_services, Completion/Unix/Type/_tex,
+	Completion/Unix/Type/_texi, Completion/Unix/Type/_time_zone,
+	Completion/Unix/Type/_users, Completion/X/Type/_x_cursor,
+	Completion/X/Type/_x_extension, Completion/X/Type/_x_font,
+	Completion/X/Type/_x_keysym, Completion/Zsh/Command/_print,
+	Completion/Zsh/Command/_read, Completion/Zsh/Command/_unhash,
+	Completion/Zsh/Type/_arrays, Completion/Zsh/Type/_file_descriptors,
+	Completion/Zsh/Type/_functions, Completion/Zsh/Type/_jobs_bg,
+	Completion/Zsh/Type/_jobs_fg, Completion/Zsh/Type/_limits,
+	Completion/Zsh/Type/_options, Completion/Zsh/Type/_options_set,
+	Completion/Zsh/Type/_options_unset: make completion functions
+	give precendence to descriptions passed as parameters and
+	cleanup	descriptons in calling functions
+
 	* 21314: Doc/Zsh/compsys.yo: declare expl local in example use
 	of _wanted 
 
diff --git a/Completion/AIX/Command/_floppy b/Completion/AIX/Command/_floppy
index 7c030f9bd..3dd3ee8e1 100644
--- a/Completion/AIX/Command/_floppy
+++ b/Completion/AIX/Command/_floppy
@@ -2,4 +2,4 @@
 
 local expl
 
-_wanted floppyfiles expl 'files on floppy' compadd - ${$(dosdir)[1,-5]:l}
+_wanted floppyfiles expl 'file on floppy' compadd - ${$(dosdir)[1,-5]:l}
diff --git a/Completion/AIX/Command/_lsdev b/Completion/AIX/Command/_lsdev
index 1bb1a8802..c54ed7637 100644
--- a/Completion/AIX/Command/_lsdev
+++ b/Completion/AIX/Command/_lsdev
@@ -5,33 +5,33 @@ local curcontext="${curcontext}" state line expl
 _arguments -C \
   '(-P)-C[list info about device in customized devices object class]' \
   '(-C -l)-P[list info about device in predefined object class]' \
-  '-c[specify a device class]:device class:->class' \
-  '-f[read flags from file]:files:_files' \
-  '-F[specify output format]:format:->columnname' \
+  '-c[specify a device class]:device class:->classes' \
+  '-f[read flags from file]:file:_files' \
+  '-F[specify output format]:format:->columnnames' \
   '-H[display headers above columns]' \
   '-h[display command usage]' \
   '(-P)-l[specify device logical name]:device logical name' \
-  '-r[display set of values in a column]:columnname:->columnname' \
+  '-r[display set of values in a column]:column name:->columnnames' \
   '(-P)-S[specify a device state]:device state:(Available Defined Stopped)' \
-  '-s[specify a device subclass]:device subclass:->subclass' \
-  '-t[specify a device type name]:device type name:->devtype' && return 0
+  '-s[specify a device subclass]:device subclass:->subclasses' \
+  '-t[specify a device type name]:device type name:->devtypes' && return 0
 
 case $state in
-  class)
-    _wanted devclass expl 'device class names' \
+  classes)
+    _wanted devclasses expl 'device class name' \
         compadd - $(lsdev ${words[(r)-[CP]]:--P} -r class)
   ;;
-  subclass)
-    _wanted devsubclass expl 'device subclass names' \
+  subclasses)
+    _wanted devsubclasses expl 'device subclass name' \
         compadd - $(lsdev ${words[(r)-[CP]]:--P} -r subclass)
   ;;
-  devtype)
-    _wanted devtype expl 'device type names' \
+  devtypes)
+    _wanted devtypes expl 'device type name' \
         compadd - $(lsdev ${words[(r)-[CP]]:--P} -r type)
   ;;
-  columnname)
+  columnnames)
     [[ $words[CURRENT-1] = -F ]] && compset -P '*[^a-zA-Z]'
-    _wanted devcolumnname expl 'column names' \
+    _wanted devcolumnnames expl 'column name' \
         compadd - ${(s: :)words[(r)-C]:+name status location} \
 	  class subclass description type
   ;;
diff --git a/Completion/AIX/Command/_lslv b/Completion/AIX/Command/_lslv
index 760c8cc3b..5145c48cc 100644
--- a/Completion/AIX/Command/_lslv
+++ b/Completion/AIX/Command/_lslv
@@ -5,4 +5,4 @@ _arguments -C -s \
   '(-p)-l[list physical volumes in logical volume]' \
   '(-p)-m[list partition numbers]' \
   '-n[accesses information from the descriptor area of physical volume]:pv:_physical_volumes' \
-  '1:lv:_logical_volumes'
+  '1:lv: _logical_volumes'
diff --git a/Completion/AIX/Command/_lsvg b/Completion/AIX/Command/_lsvg
index c5b9a1584..028a670ba 100644
--- a/Completion/AIX/Command/_lsvg
+++ b/Completion/AIX/Command/_lsvg
@@ -7,4 +7,4 @@ _arguments -C -s \
   '(-o -n -M -p)-l[list logical volumes in volume group]' \
   '(-o -n -l -p)-M[list mapping of physical and logical partition numbers]' \
   '(-o -n -l -M)-p[list physical volumes used by volume group]' \
-  '*:volume groups:_volume_groups'
+  '*:volume group:_volume_groups'
diff --git a/Completion/AIX/Type/_logical_volumes b/Completion/AIX/Type/_logical_volumes
index 1dd351360..bbfa09238 100644
--- a/Completion/AIX/Type/_logical_volumes
+++ b/Completion/AIX/Type/_logical_volumes
@@ -11,5 +11,5 @@ if zstyle -T ":completion:${curcontext}:" verbose; then
 else
   disp=()
 fi
-_wanted logicalvolumes expl 'logical volumes' \
+_wanted logicalvolumes expl 'logical volume' \
     compadd "$disp[@]" "$@" - "$names[@]"
diff --git a/Completion/AIX/Type/_object_classes b/Completion/AIX/Type/_object_classes
index 6122dcdf4..a0d669ca3 100644
--- a/Completion/AIX/Type/_object_classes
+++ b/Completion/AIX/Type/_object_classes
@@ -3,4 +3,4 @@
 local expl
 
 _wanted objectclasses expl 'object class' \
-   _files -W ${ODMDIR:-/etc/objrepos} -g '^*.vc(-.)'
+   _files -W ${ODMDIR:-/etc/objrepos} -g '^*.vc(-.)' "$@" -
diff --git a/Completion/AIX/Type/_physical_volumes b/Completion/AIX/Type/_physical_volumes
index b53054823..fd31edd09 100644
--- a/Completion/AIX/Type/_physical_volumes
+++ b/Completion/AIX/Type/_physical_volumes
@@ -3,4 +3,4 @@
 local expl
 
 _wanted physicalvolumes expl 'physical volume' \
-    compadd - $(lsdev -C -c disk -S a -F name)
+    compadd "$@" - $(lsdev -C -c disk -S a -F name)
diff --git a/Completion/AIX/Type/_volume_groups b/Completion/AIX/Type/_volume_groups
index dc509f6dc..8b8bebfa6 100644
--- a/Completion/AIX/Type/_volume_groups
+++ b/Completion/AIX/Type/_volume_groups
@@ -2,4 +2,4 @@
 
 local expl
 
-_wanted physicalvolumes expl 'physical volume' compadd - $(lsvg)
+_wanted volumegroups expl 'volume group' compadd "$@" - $(lsvg)
diff --git a/Completion/Darwin/Type/_mac_applications b/Completion/Darwin/Type/_mac_applications
index ac1df46c1..51fa0c470 100644
--- a/Completion/Darwin/Type/_mac_applications
+++ b/Completion/Darwin/Type/_mac_applications
@@ -3,4 +3,5 @@
 _retrieve_mac_apps
 
 local expl
-_wanted commands expl 'Mac OS X application' compadd -- "${(@)${_mac_apps[@]:t}%.app}"
+_wanted commands expl 'Mac OS X application' \
+    compadd "$@" - "${(@)${_mac_apps[@]:t}%.app}"
diff --git a/Completion/Debian/Command/_bug b/Completion/Debian/Command/_bug
index 9bd2cb569..fb97d13fc 100644
--- a/Completion/Debian/Command/_bug
+++ b/Completion/Debian/Command/_bug
@@ -14,8 +14,7 @@ _rb_commonargs=(
   '(-B --bts)'{-B,--bts=}'[use alternate BTS]:system:(debian gnome kde tdyc kde-debian)'
   '(-l --ldap)'{-l,--ldap}'[enable LDAP support]'
   '(-l --ldap)--no-ldap[disable LDAP support]'
-  '(--http_proxy)--proxy=:proxyhost:_hosts'
-  '(--proxy)--http_proxy=:proxyhost:_hosts'
+  '(--proxy --http_proxy)'--{http_,}'proxy=:proxy host:_hosts'
 )
 
 case "$service" in
diff --git a/Completion/Unix/Command/_gs b/Completion/Unix/Command/_gs
index fceedcea7..22f3c789b 100644
--- a/Completion/Unix/Command/_gs
+++ b/Completion/Unix/Command/_gs
@@ -15,7 +15,7 @@ else
     '-q[quiet startup]' \
     '-g-[set device size]:device size (<width>x<height>):' \
     '-r-[set resolution]:resolution (<val> or <x>x<y>):' \
-    '-I[add search paths]:search paths:_dir_list' \
+    '-I[add to library file search path]:directory:_dir_list' \
     \*-{d,D}'-[define name with definition]:def:->dname' \
     \*-{s,S}'-[define name with value]:def:->sname' \
     '*:PostScript or PDF file:_pspdf' && ret=0
diff --git a/Completion/Unix/Command/_imagemagick b/Completion/Unix/Command/_imagemagick
index a47e28cfc..5abae4425 100644
--- a/Completion/Unix/Command/_imagemagick
+++ b/Completion/Unix/Command/_imagemagick
@@ -49,7 +49,7 @@ case "$service" in
       '*-filter:filter type for resizing:(Point Box Triangle Hermite Hanning Hamming Blackman Gaussian Quadratic Cubic Catrom Mitchell Lanczos Bessel Sinc)' \
       '*-flip[vertical mirror image]' \
       '*-flop[horizontal mirror image]' \
-      '*-font:_x_font' \
+      '*-font:font:_x_font' \
       '*-foreground:color:_x_color' \
       '*-frame:border dimensions (<width>x<height>+<out>+<in>)' \
       '*-gamma[gamma correction level]:gamma correction level (<n> or <red>/<green>/<blue>)' \
@@ -84,7 +84,7 @@ case "$service" in
       '*-shared_memory' \
       '*-sharpen:sharpening factor (0.0 - 99.9%%)' \
       '*-size:image size (<width>x<height>+<offset>)' \
-      '*-text_font:_x_font' \
+      '*-text_font:font:_x_font' \
       '*-texture:background texture image:_imagemagick' \
       '*-title:image title' \
       '*-treedepth:color reduction tree depth' \
@@ -117,7 +117,7 @@ case "$service" in
       '*-depth:image depth:(8 16)' \
       '*-display:display:_x_display' \
       '*-dither[apply dithering]' \
-      '*-font:_x_font' \
+      '*-font:font:_x_font' \
       '*-foreground:color:_x_color' \
       '*-gamma[gamma correction level]:gamma correction level (<n> or <red>/<green>/<blue>)' \
       '*+gamma[gamma correction level (don'\''t change pixels)]:gamma correction level (<n> or <red>/<green>/<blue>)' \
@@ -138,7 +138,7 @@ case "$service" in
       '*-scenes:image scene number' \
       '*-shared_memory' \
       '*-size:image size (<width>x<height>+<offset>)' \
-      '*-text_font:_x_font' \
+      '*-text_font:font:_x_font' \
       '*-title:image title' \
       '*-treedepth:color reduction tree depth' \
       '*-trim' \
diff --git a/Completion/Unix/Command/_java b/Completion/Unix/Command/_java
index 3faf10273..f6565bc64 100644
--- a/Completion/Unix/Command/_java
+++ b/Completion/Unix/Command/_java
@@ -27,7 +27,7 @@ javac)
 
 jdb)
   jdb_args=(
-    '-host[specify hostname to connect]:hostname:_hosts'
+    '-host[specify host to connect to]:host:_hosts'
     '-password[specify password]:password:'
   )
   ;&
@@ -140,7 +140,7 @@ javah|javah_g)
     '-bootclasspath[specify path for bootstrap class files]:bootstrap class path:->bootstrapclasspath' \
     '-old[generate old JDK1.0-style header files]' \
     '-force[force output]' \
-    '*:fully qualified classname:_java_class -m main ${(kv)opt_args[(i)-classpath]}' && return 0
+    '*:class:_java_class -m main ${(kv)opt_args[(i)-classpath]}' && return 0
   ;;
 
 javap)
@@ -187,7 +187,7 @@ rmic)
 
 rmiregistry)
   if (( CURRENT == 2 )); then
-    _wanted ports expl 'port to listen' _ports && return
+    _wanted ports expl 'port to listen on' _ports && return
   else
     _message 'no more arguments'
   fi
diff --git a/Completion/Unix/Command/_last b/Completion/Unix/Command/_last
index 56537bf84..3e4d84f00 100644
--- a/Completion/Unix/Command/_last
+++ b/Completion/Unix/Command/_last
@@ -1,17 +1,17 @@
 #compdef last lastb
 
 _arguments \
-	'-a[display hostname in last column]' \
-	'-n[number]:number' \
-	'-[number]:number' \
-	'-f[filename]:filename:_files' \
-	'-R[suppress display of hostname field]' \
-	'-d[translate IP to hostname]' \
-	'-i[display IP]' \
-	'-o[read old-format wtmp]' \
-	'-x[display shutdown/runlevel entries]' \
-	'-h[hostname]:_hosts' \
-	'-s[report duration in seconds]' \
-	'-t[tty]:tty:' \
-	'-w[widen duration field]' \
-	'*:user:_users'
+  '-a[display hostname in last column]' \
+  '-n[number]:number' \
+  '-[number]:number' \
+  '-f[filename]:filename:_files' \
+  '-R[suppress display of hostname field]' \
+  '-d[translate IP to hostname]' \
+  '-i[display IP]' \
+  '-o[read old-format wtmp]' \
+  '-x[display shutdown/runlevel entries]' \
+  '-h[hostname]:host:_hosts' \
+  '-s[report duration in seconds]' \
+  '-t[tty]:tty' \
+  '-w[widen duration field]' \
+  '*:user:_users'
diff --git a/Completion/Unix/Command/_links b/Completion/Unix/Command/_links
index c8a4995d5..464068d46 100644
--- a/Completion/Unix/Command/_links
+++ b/Completion/Unix/Command/_links
@@ -5,25 +5,25 @@ typeset -A opt_args
 
 _arguments -C \
   '(-help)-anonymous[restrict links so that it can run on an anonymous account]' \
-  '(-help)-assume-codepage[use the given codepage when the webpage did not specify its]:codepage:' \
+  '(-help)-assume-codepage[specify default codepage to use]:codepage' \
   '(-help)-async-dns[asynchronous DNS resolver]:bool:((0\:on 1\:off))' \
   '(-help)-download-dir[default download directory]:_files -/' \
   '(-help)-driver[graphics driver to use]:graphics driver:->graphics_drivers' \
   '(-help)-dump[dump the page as pure text]' \
-  '(-help)-format-cache-size[number of formatted document pages cached]:pages:' \
-  '(-help)-ftp-proxy[host and port number of the FTP proxy, or blank]:hostport:_hosts' \
+  '(-help)-format-cache-size[number of formatted document pages cached]:pages' \
+  '(-help)-ftp-proxy[specify ftp proxy server]:proxy:->proxies' \
   '(-help)-g[run in graphics mode rather than plain text mode]' \
   '-help[prints the help screen]' \
-  '(-help)-http-proxy[host and port number of the HTTP proxy, or blank]:hostport:_hosts' \
-  '(-help)-image-cache-size[image cache memory]:kilobytes:' \
-  '(-help)-max-connections[maximum number of concurrent connections]:max:' \
-  '(-help)-max-connections-to-host[maximum number of concurrent connection to a given host]:max:' \
-  '(-help)-memory-cache-size[cache memory]:kilobytes:' \
+  '(-help)-http-proxy[specify web proxy server]:proxy:->proxies' \
+  '(-help)-image-cache-size[image cache memory]:memory (kilobytes)' \
+  '(-help)-max-connections[maximum number of concurrent connections]:connections' \
+  '(-help)-max-connections-to-host[maximum number of concurrent connection to a given host]:connections' \
+  '(-help)-memory-cache-size[cache memory]:kilobytes' \
   '(-help)-no-connect[runs links as a separate instance]' \
-  '(-help)-receive-timeout[timeout on receive]:secs:' \
+  '(-help)-receive-timeout[timeout on receive]:timeout (seconds)' \
   '(-help)-retries[number of retries]:retries' \
   '(-help)-source[dump the source page]' \
-  '(-help)-unrestartable-receive-timeout[timeout on non restartable connections]:secs:' \
+  '(-help)-unrestartable-receive-timeout[timeout on non restartable connections]:timeout (seconds)' \
   '(-help)-version[prints the links version number and exit]' \
   ':URL:->html' && ret=0
 
@@ -35,6 +35,15 @@ case $state in
     vals=(${=${${${(f)"$(_call_program links-graphics-drivers links -driver help 2>&1)"}[-1]}//','/''}} )
     _describe -t links-graphics-drivers 'graphics driver' vals && ret=0
   ;;
+  proxies)
+    local suf=-S:
+    if compset -P '*:'; then
+      _message -e ports 'port number'
+    else
+      compset -S ':*' && suf= 
+      _hosts $suf && ret=0
+    fi
+  ;;  
 esac
 
 return ret
diff --git a/Completion/Unix/Command/_lsof b/Completion/Unix/Command/_lsof
index 0e3bc7a1b..aca9963c2 100644
--- a/Completion/Unix/Command/_lsof
+++ b/Completion/Unix/Command/_lsof
@@ -27,7 +27,7 @@ _arguments -s -S \
   '(-s)-o[list file offset]' \
   '-O[avoid overheads of bypassing potential blocking]' \
   '-P[inhibit conversion of port numbers to port names]' \
-  '-p[list files for specified processes]:processes:_pids' \
+  '-p[list files for specified processes]:process ID:_pids' \
   '-r[repeat listing endlessly]::delay (seconds)' \
   '+r[repeat listing until no files listed]::delay (seconds)' \
   '-R[list parent PID]' \
@@ -35,7 +35,7 @@ _arguments -s -S \
   '-S[specify timeout for kernel functions that might deadlock]:timeout (seconds)' \
   '-T[select reporting of TCP/TPI info]::info type:((q\:queue\ length\ reporting s\:state\ reporting w\:window\ size\ reporting))' \
   '(+w -w)-t[terse output]' \
-  '-u[list files owned by specified users]:user list:_users' \
+  '-u[list files owned by specified users]:user:_users -S,' \
   '-U[list Unix domain socket files]' \
   '(-)-v[list version info]' \
   '-V[indicate unsuccessfully searched for items]' \
diff --git a/Completion/Unix/Command/_mount b/Completion/Unix/Command/_mount
index d905664c7..f19da0869 100644
--- a/Completion/Unix/Command/_mount
+++ b/Completion/Unix/Command/_mount
@@ -24,8 +24,8 @@ if [[ "$OSTYPE" == cygwin ]]; then
     local -a wpaths upaths
     mount | while read -r line; do
       [[ $line == ?:\ * ]] && continue
-      wpaths=($wpaths ${line%% on*})
-      upaths=($upaths ${${line##*on }%% type*})
+      wpaths+=( ${line%% on*} )
+      upaths+=( ${${line##*on }%% type*} )
     done
     _alternative \
       'windowspath:Windows path:compadd -a wpaths' \
@@ -552,10 +552,10 @@ if [[ "$service" = mount ]]; then
   irix*)
     args=( -s
       '-a[mount all filesystems in /etc/fstab]'
-      '-b[mount all filesystems in /etc/fstab except those listed]:list of directories:_dir_list -s,'
+      '-b[mount all filesystems in /etc/fstab except those listed]:mount point:_dir_list -s,'
       '-c[check any dirty filesystems before mounting]'
       "-f[fake a new /etc/mtab entry, but don't mount any filesystems]"
-      '-h[mount all filesystems associated with host]:hostnames:_hosts'
+      '-h[mount all filesystems associated with host]:host:_hosts'
       '-n[mount filesystem without making entry in /etc/mtab]'
       '-o[specify file system options]:file system option:->fsopt'
       '-p[print list of mounted filesystems in format suitable for /etc/fstab]'
@@ -681,8 +681,8 @@ else
     irix*)
       args=(
 	'-a[unmount all mounted file systems]'
-	'-b[unmount all filesystems in /etc/fstab except those listed]:list of directories:_dir_list -s,'
-	'-h[unmount all filesystems associated with host]:hostnames:_hosts'
+	'-b[unmount all filesystems in /etc/fstab except those listed]:mount point:_dir_list -s,'
+	'-h[unmount all filesystems associated with host]:host:_hosts'
 	'-k[kill all processes with files open on filesystems before unmounting]'
 	'-t[unmount all filesystems of specified type]:file system type:_file_systems'
 	'-v[verbose]'
@@ -709,7 +709,7 @@ else
 	'(*)-a[unmount all mounted file systems]'
 	'-A[unmount all mounted file systems except the root]'
 	'-f[force unmount]'
-	'-h[unmount all filesystems associated with host]:hostnames:_hosts'
+	'-h[unmount all filesystems associated with host]:host:_hosts'
 	'-t[unmount all filesystems of specified type]:file system type:->fslist'
 	'-v[verbose mode]'
 	'*:dev or dir:->udevordir'
@@ -775,8 +775,8 @@ devordir)
 	  ;;
 	*)
 	  [[ $mline[(w)3] == swap ]] || \
-	    dev_tmp=( $dev_tmp $mline[(w)1] ) \
-	    mp_tmp=( $mp_tmp $mline[(w)2] )
+	    dev_tmp+=( $mline[(w)1] ) \
+	    mp_tmp+=( $mline[(w)2] )
 	  ;;
       esac
     done < /etc/fstab
@@ -808,8 +808,8 @@ udevordir)
     ;;
   *)
     /sbin/mount | while read mline; do
-      mp_tmp=( $mp_tmp $mline[(w)1] )
-      dev_tmp=( $dev_tmp $mline[(w)3] )
+      mp_tmp+=( $mline[(w)1] )
+      dev_tmp+=( $mline[(w)3] )
     done
     ;;
   esac
diff --git a/Completion/Unix/Command/_perldoc b/Completion/Unix/Command/_perldoc
index 869dbae3a..7a3d806c5 100644
--- a/Completion/Unix/Command/_perldoc
+++ b/Completion/Unix/Command/_perldoc
@@ -49,9 +49,9 @@ case  $state in
           _files -g "*.(pod|pm)(-.)" && ret=0
     else
       _alternative \
-	'modules:: _perl_modules' \
-	'pods:: _perl_basepods' \
-	'files:Perl modules and .pods:_files -g "*.(pod|pm)(-.)"' && ret=0
+	'modules:module: _perl_modules' \
+	'pods:base pod: _perl_basepods' \
+	'files:module or .pod file:_files -g "*.(pod|pm)(-.)"' && ret=0
     fi
   ;;
 esac
diff --git a/Completion/Unix/Command/_user_admin b/Completion/Unix/Command/_user_admin
index 4e7c1d487..281171d17 100644
--- a/Completion/Unix/Command/_user_admin
+++ b/Completion/Unix/Command/_user_admin
@@ -18,23 +18,23 @@ if [[ $service = user* ]]; then
     '(-D)-e+[specify expiration 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)-G+[supplementary groups]:supplementary group:_groups -S,'
     "(-D)-s+[shell]:shell:( $shells /bin/false )"
     '(-D -M)-m[create home directory]'
     '(-D)-u[uid]:uid'
     '(-D)-o[allow non unique uid]'
   )
-  [[ $OSTYPE = linux* ]] && args=( $args[@]
+  [[ $OSTYPE = linux* ]] && args+=(
       '(-D -U -L)-p+[specify encrypted password]:encrypted password' )
 
   if [[ $service = useradd ]]; then
-    (( redhat )) || args=( $args[@]
+    (( redhat )) || args+=(
       "(-D -k -m)-M[don't create home]"
       '(-D)-r[create system account]'
       "(-D)-n[don't create mirrored user]"
     )
     [[ $OSTYPE = linux* ]] || sun=" -s"
-    args=( $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'
@@ -44,7 +44,7 @@ if [[ $service = user* ]]; then
 	"(-U -p)-L[lock user's password]"
 	"(-L -p)-U[unlock user's password]"
     )
-    args=( $args[@]
+    args+=(
       '-l[specify new user name]:new username'
       ':username:_users'
     )
@@ -52,15 +52,15 @@ if [[ $service = user* ]]; then
 else
   args=( '-g+[gid]:gid' '-o[allow non unique gid]' )
   if [[ $service = groupadd ]]; then
-    args=( $args[@] ':group name' )
+    args+=( ':group name' )
     (( redhat )) || args=( $args[@]
       '-r[create system group]'
       '-f[force]'
     )
   else
-    args=( $args[@]
+    args+=(
       '-n[specify new group name]:new group name'
-      ':group name:_groups'
+      ':group:_groups'
     )
   fi
 fi
diff --git a/Completion/Unix/Command/_yp b/Completion/Unix/Command/_yp
index 128de36b7..104a0b4df 100644
--- a/Completion/Unix/Command/_yp
+++ b/Completion/Unix/Command/_yp
@@ -1,13 +1,13 @@
 #compdef ypcat ypmatch yppasswd ypwhich ypset ypserv ypbind yppush yppoll ypxfr domainname
 
-local curcontext="$curcontext" line state ret=1
+local curcontext="$curcontext" line state expl ret=1
 typeset -A opt_args
 
 if (( ! $+_yp_cache_maps )); then
   _yp_cache_maps=( "${(@)${(@f)$(_call_program maps ypwhich -m)}%% *}" )
   _yp_cache_nicks=( "${(@)${(@)${(@f)$(_call_program names ypwhich -x)}#*\"}%%\"*}" )
   _yp_args=(
-    '(-x)-d[specify domain]:domain name:' \
+    '(-x)-d[specify domain]:domain name' \
     '(-x)-k[display keys]' \
     '(-x)-t[inhibit nicknames]' \
     '(: -d -k -t)-x[display nicknames]' \
@@ -28,7 +28,7 @@ yppasswd)
   ;;
 ypwhich)
   _arguments -C \
-    '(-x)-d[specify domain]:domain name:' \
+    '(-x)-d[specify domain]:domain name' \
     '(-x -V2 -m -t)-V1[identify version 1 servers]' \
     '(-x -V1 -m -t)-V2[identify version 2 servers]' \
     '(: -x -V1 -V2 -m)-t[specify map name]:map name:->maponly' \
@@ -40,8 +40,8 @@ ypset)
   _arguments -C \
     '(-V2)-V1[bind version 1 servers]' \
     '(-V1)-V2[bind version 2 servers]' \
-    '-d[specify domain]:domain name:' \
-    '-h[specify host]:set binding on host:_hosts' \
+    '-d[specify domain]:domain name' \
+    '-h[set NIS binding on specified host]:host:_hosts' \
     ':server:_hosts' && ret=0
     ;;
 ypserv)
@@ -57,24 +57,24 @@ ypbind)
   ;;
 yppush)
   _arguments -C \
-    '-d[specify domain]:domain name:' \
+    '-d[specify domain]:domain name' \
     '-v[print messages]' \
     ':map name:->map' && ret=0
   ;;
 yppoll)
   _arguments -C \
-    '-d[specify domain]:domain name:' \
-    '-h[specify host]:ask server on host:_hosts' \
+    '-d[specify domain]:domain name' \
+    '-h[ask specified yp server]:host:_hosts' \
     ':map name:->map' && ret=0
   ;;
 ypxfr)
   _arguments -C \
     '-a[specify database routines]:database routines:((b\:btree d\:dbm/ndbm h\:hash))' \
     '-f[force transfer]' \
-    '-c[don'"'"'t clear current map]' \
-    '-d[specify domain]:domain name:' \
-    '-h[specify host]:get map from host:_hosts' \
-    '-C[call back]:transaction ID: :program number: :IP address: :port number:' \
+    "-c[don't clear current map]" \
+    '-d[specify domain]:domain name' \
+    '-h[get map from specified host instead of master]:host:_hosts' \
+    '-C[call back]:transaction ID: :program number: :IP address: :port number' \
     ':map name:->map' && ret=0
   ;;
 domainname)
@@ -86,8 +86,6 @@ esac
 [[ "$state" = keymap ]] && _message -e keys 'key'
 
 if [[ "$state" = map* ]]; then
-  local expl
-
   if [[ $+opt_args[-t] -eq 0 && "$state" != maponly ]]; then
     _tags maps nicknames
   else
diff --git a/Completion/Unix/Command/_zdump b/Completion/Unix/Command/_zdump
index 1d186d4e3..f96bdd764 100644
--- a/Completion/Unix/Command/_zdump
+++ b/Completion/Unix/Command/_zdump
@@ -1,5 +1,6 @@
 #compdef zdump
 
-_arguments '-v[lowest possible]' \
-           '-c[cutoff]:cutoff year:' \
-           '*:timezone:_time_zone'
+_arguments \
+  '-v[lowest possible]' \
+  '-c[cutoff]:cutoff year:' \
+  '*:time zone:_time_zone'
diff --git a/Completion/Unix/Type/_dir_list b/Completion/Unix/Type/_dir_list
index 574e8a2af..536d424e3 100644
--- a/Completion/Unix/Type/_dir_list
+++ b/Completion/Unix/Type/_dir_list
@@ -4,6 +4,8 @@
 #  -s <sep> to specify the separator (default is a colon)
 #  -S       to say that the separator should be added as a suffix (instead
 #           of the default slash)
+# any description passed should apply to an individual directory and not
+# to the entire list
 
 local sep=: dosuf suf
 
@@ -24,4 +26,4 @@ else
   suf=()
 fi
 
-_files "$suf[@]" -r "${sep}"' /\t\t\-' -/ "$@"
+_directories "$suf[@]" -r "${sep}"' /\t\t\-' "$@"
diff --git a/Completion/Unix/Type/_domains b/Completion/Unix/Type/_domains
index 42a0966dd..851ac7930 100644
--- a/Completion/Unix/Type/_domains
+++ b/Completion/Unix/Type/_domains
@@ -17,4 +17,4 @@ if ! zstyle -a ":completion:${curcontext}:domains" domains domains; then
 fi
 
 _wanted domains expl domain \
-    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" -a domains
+    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - domains
diff --git a/Completion/Unix/Type/_file_systems b/Completion/Unix/Type/_file_systems
index 50b3ed744..ffbf5ac68 100644
--- a/Completion/Unix/Type/_file_systems
+++ b/Completion/Unix/Type/_file_systems
@@ -10,9 +10,9 @@ case $OSTYPE in
     fss=( adfs bfs cramfs ext2 ext3 hfs hpfs iso9660 minix ntfs qnx4
           reiserfs romfs swap udf ufs vxfs xfs xiafs )
     [[ -r /proc/filesystems ]] &&
-        fss=( $fss ${$(</proc/filesystems)#nodev} )
+        fss+=( ${$(</proc/filesystems)#nodev} )
     [[ -r /etc/filesystems ]] &&
-        fss=( $fss ${$(</etc/filesystems)#nodev} )
+        fss+=( ${$(</etc/filesystems)#\*} )
   ;;
   osf*) fss=( advfs ufs nfs mfs cdfs ) ;;
   solaris*) fss=( ufs nfs hsfs s5fs pcfs cachefs tmpfs ) ;;
@@ -22,11 +22,11 @@ case $OSTYPE in
   ;;
   *)
     # default for all other systems
-    fss=( ufs)
+    fss=( ufs )
   ;;
 esac
 
-_wanted fstypes expl 'file system type' compadd "$@" -M 'L:|no=' -a fss
+_wanted fstypes expl 'file system type' compadd "$@" -M 'L:|no=' -a "$@" - fss
 
 
  
diff --git a/Completion/Unix/Type/_groups b/Completion/Unix/Type/_groups
index 6ba32f4f0..923c34599 100644
--- a/Completion/Unix/Type/_groups
+++ b/Completion/Unix/Type/_groups
@@ -21,4 +21,4 @@ if ! zstyle -a ":completion:${curcontext}:" groups groups; then
   groups=( "$_cache_groups[@]" )
 fi
 
-_wanted groups expl group compadd "$@" -a groups
+_wanted groups expl group compadd -a "$@" - groups
diff --git a/Completion/Unix/Type/_hosts b/Completion/Unix/Type/_hosts
index e530c8b42..67e06f295 100644
--- a/Completion/Unix/Type/_hosts
+++ b/Completion/Unix/Type/_hosts
@@ -18,4 +18,4 @@ if ! zstyle -a ":completion:${curcontext}:hosts" hosts hosts; then
 fi
 
 _wanted hosts expl host \
-    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" -a hosts
+    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - hosts
diff --git a/Completion/Unix/Type/_java_class b/Completion/Unix/Type/_java_class
index 1abca1291..d81669c00 100644
--- a/Completion/Unix/Type/_java_class
+++ b/Completion/Unix/Type/_java_class
@@ -20,5 +20,5 @@ for i in "${(s.:.)classpath}"; do
   fi
 done
 
-_wanted classes expl 'java class' compadd "$@" -M 'r:|.=* r:|=*' -a c
+_wanted classes expl 'java class' compadd "$@" -M 'r:|.=* r:|=*' -a - c
 
diff --git a/Completion/Unix/Type/_locales b/Completion/Unix/Type/_locales
index edc86ed78..e809667d1 100644
--- a/Completion/Unix/Type/_locales
+++ b/Completion/Unix/Type/_locales
@@ -9,4 +9,4 @@ else
   locales=( /usr/lib/locale/*(:t) )
 fi
 
-_wanted locales expl locale compadd "$@" -a locales
+_wanted locales expl locale compadd -a "$@" - locales
diff --git a/Completion/Unix/Type/_perl_basepods b/Completion/Unix/Type/_perl_basepods
index 1dbd92551..80a8c8321 100644
--- a/Completion/Unix/Type/_perl_basepods
+++ b/Completion/Unix/Type/_perl_basepods
@@ -29,4 +29,4 @@ fi
 
 local expl
 
-_wanted pods expl 'perl base pods' compadd -a - _perl_basepods
+_wanted pods expl 'perl base pod' compadd -a "$@" - _perl_basepods
diff --git a/Completion/Unix/Type/_perl_modules b/Completion/Unix/Type/_perl_modules
index 21ebb4441..4ed06ff31 100644
--- a/Completion/Unix/Type/_perl_modules
+++ b/Completion/Unix/Type/_perl_modules
@@ -18,9 +18,6 @@
 #   modules which don't begin with an uppercase letter).
 
 _perl_modules () {
-  local opts
-  zparseopts -D -a opts S: q
-
   # Set a sensible default caching policy.  This has to be done inside
   # this function otherwise we wouldn't know the context for the style.
   local update_policy
@@ -87,7 +84,7 @@ _perl_modules () {
 
   local expl
 
-  _wanted modules expl 'Perl modules' compadd "$opts[@]" -a $perl_modules
+  _wanted modules expl 'Perl module' compadd "$@" -a - $perl_modules
 }
 
 _perl_modules_caching_policy () {
diff --git a/Completion/Unix/Type/_pids b/Completion/Unix/Type/_pids
index e20844703..18ed4616e 100644
--- a/Completion/Unix/Type/_pids
+++ b/Completion/Unix/Type/_pids
@@ -38,7 +38,7 @@ else
 fi
 
 _wanted processes expl 'process ID' \
-    compadd "$@" "$desc[@]" "$all[@]" -a pids && ret=0
+    compadd "$@" "$desc[@]" "$all[@]" -a - pids && ret=0
 
 if [[ -n "$all" ]]; then
   zstyle -s ":completion:${curcontext}:processes" insert-ids out || out=menu
diff --git a/Completion/Unix/Type/_ports b/Completion/Unix/Type/_ports
index 958917bd6..8c8da531e 100644
--- a/Completion/Unix/Type/_ports
+++ b/Completion/Unix/Type/_ports
@@ -9,4 +9,4 @@ if ! zstyle -a ":completion:${curcontext}:" ports ports; then
   ports=( "$_cache_ports[@]" )
 fi
 
-_wanted ports expl port compadd "$@" -a ports
+_wanted ports expl port compadd -a "$@" - ports
diff --git a/Completion/Unix/Type/_printers b/Completion/Unix/Type/_printers
index 02196daee..edbc9aaae 100644
--- a/Completion/Unix/Type/_printers
+++ b/Completion/Unix/Type/_printers
@@ -4,7 +4,7 @@ local expl ret=1 list disp sep tmp
 
 if (( $+commands[lsallq] )); then
   # Use AIX's command to list print queues
-  _wanted printers expl printer compadd $(lsallq)
+  _wanted printers expl printer compadd "$@" - $(lsallq)
   return
 fi
 
@@ -30,11 +30,11 @@ if (( ! $+_lp_cache )); then
           disp=''
         fi
         if [[ -n "$disp" ]]; then
-          _lp_cache=( "$_lp_cache[@]" "${names[1]}:${disp}" )
-  	_lp_alias_cache=( "$_lp_alias_cache[@]" "${(@)^names[2,-1]:#*\ *}:${disp}" )
+          _lp_cache+=( "${names[1]}:${disp}" )
+  	  _lp_alias_cache+=( "${(@)^names[2,-1]:#*\ *}:${disp}" )
         else
-          _lp_cache=( "$_lp_cache[@]" "${names[1]}" )
-  	_lp_alias_cache=( "$_lp_alias_cache[@]" "${(@)names[2,-1]:#*\ *}" )
+          _lp_cache+=( "${names[1]}" )
+  	  _lp_alias_cache+=( "${(@)names[2,-1]:#*\ *}" )
         fi
       fi
     done < $file[1]
@@ -56,7 +56,7 @@ else
   disp=()
 fi
 _wanted printers expl printer \
-    compadd "$disp[@]" - "${(@)_lp_cache%%:*}" && return 0
+    compadd "$@" "$disp[@]" - "${(@)_lp_cache%%:*}" && return 0
 
 (( $+_lp_alias_cache )) || return 1
 
@@ -67,6 +67,6 @@ else
   disp=()
 fi
 _wanted printers expl printer \
-    compadd "$disp[@]" - "${(@)_lp_alias_cache%%:*}" && return 0
+    compadd "$@" "$disp[@]" - "${(@)_lp_alias_cache%%:*}" && return 0
 
 return 1
diff --git a/Completion/Unix/Type/_services b/Completion/Unix/Type/_services
index 8e682bd52..2965e0f3e 100644
--- a/Completion/Unix/Type/_services
+++ b/Completion/Unix/Type/_services
@@ -7,18 +7,12 @@ if chkconfig --list > /dev/null 2>&1; then
   alls=( ${(f)"$(LANGUAGE=C LANG=C LC_ALL=C chkconfig --list)"} )
   inits=( ${${${alls[1,(r)xinetd based*]}[1,-2]}/%[[:space:]]*/} )
   xinetds=( ${${${${alls[(r)xinetd based*,-1]}[2,-1]}/#[[:space:]]#}/%:*} )
+
+  _alternative \
+    'init:init service:compadd -a inits' \
+    'xinetd:xinetd service:compadd -a xinetds' && ret=0
 else
-  inits=( /etc/init.d/*(-*:t) )
+  _wanted services expl service compadd "$@" - /etc/init.d/*(-*:t) && ret=0
 fi
 
-_tags init xinetd
-
-while _tags; do
-  _requested init expl 'init services' \
-    compadd  -a inits && ret=0
-  _requested xinetd expl 'xinetd services' \
-    compadd  -a xinetds && ret=0
-  (( ret )) || break
-done
-
-return $ret
+return ret
diff --git a/Completion/Unix/Type/_tex b/Completion/Unix/Type/_tex
index 0d9130930..fcbafbd67 100644
--- a/Completion/Unix/Type/_tex
+++ b/Completion/Unix/Type/_tex
@@ -3,4 +3,4 @@
 local expl
 
 _description files expl 'TeX or LaTeX file'
-_files "$expl[@]" -g '*.(tex|TEX|texinfo|texi)(-.)'
+_files "$@" "$expl[@]" -g '*.(tex|TEX|texinfo|texi)(-.)'
diff --git a/Completion/Unix/Type/_texi b/Completion/Unix/Type/_texi
index fb9c488ca..10ccfa28b 100644
--- a/Completion/Unix/Type/_texi
+++ b/Completion/Unix/Type/_texi
@@ -3,4 +3,4 @@
 local expl
 
 _description files expl 'texinfo file'
-_files "$expl[@]" -g '*.(texinfo|texi)(-.)'
+_files "$@" "$expl[@]" -g '*.(texinfo|texi)(-.)'
diff --git a/Completion/Unix/Type/_time_zone b/Completion/Unix/Type/_time_zone
index 5bad7329b..cd924bbc7 100644
--- a/Completion/Unix/Type/_time_zone
+++ b/Completion/Unix/Type/_time_zone
@@ -6,4 +6,4 @@ if (( ! $+_zoneinfo_dirs )); then
   _zoneinfo_dirs=( /usr/{share,lib,share/lib}/{zoneinfo*,locale/TZ}(/) )
 fi
 
-_wanted time-zones expl 'time zone' _files -W _zoneinfo_dirs
+_wanted time-zones expl 'time zone' _files -W _zoneinfo_dirs "$@" -
diff --git a/Completion/Unix/Type/_users b/Completion/Unix/Type/_users
index 08c22bbc2..de671f27d 100644
--- a/Completion/Unix/Type/_users
+++ b/Completion/Unix/Type/_users
@@ -3,6 +3,6 @@
 local expl users
 
 zstyle -a ":completion:${curcontext}:" users users &&
-    _wanted users expl user compadd "$@" -a users && return 0
+    _wanted users expl user compadd "$@" -a - users && return 0
 
-_wanted users expl user compadd "$@" -k userdirs
+_wanted users expl user compadd "$@" -k - userdirs
diff --git a/Completion/X/Type/_x_cursor b/Completion/X/Type/_x_cursor
index 5346710d7..466aea0c2 100644
--- a/Completion/X/Type/_x_cursor
+++ b/Completion/X/Type/_x_cursor
@@ -15,4 +15,4 @@ if (( ! $+_cursor_cache )); then
 fi
 
 _wanted cursors expl 'cursor name' \
-    compadd "$@" -M 'm:-=_ r:|_=*' -a _cursor_cache
+    compadd "$@" -M 'm:-=_ r:|_=*' -a - _cursor_cache
diff --git a/Completion/X/Type/_x_extension b/Completion/X/Type/_x_extension
index d1a299e8b..4e410a82b 100644
--- a/Completion/X/Type/_x_extension
+++ b/Completion/X/Type/_x_extension
@@ -9,11 +9,11 @@ _tags extensions || return 1
 if [[ "$1" = -a ]]; then
   shift
 
-  _wanted extensions expl 'X extensions' \
+  _wanted extensions expl 'X extension' \
       compadd "$@" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' - all "$_xe_cache[@]"
 else
   [[ "$1" = - ]] && shift
 
-  _wanted extensions expl 'X extensions' \
-      compadd "$@" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' -a _xe_cache
+  _wanted extensions expl 'X extension' \
+      compadd "$@" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' -a - _xe_cache
 fi
diff --git a/Completion/X/Type/_x_font b/Completion/X/Type/_x_font
index 6208faaca..134cfdf1c 100644
--- a/Completion/X/Type/_x_font
+++ b/Completion/X/Type/_x_font
@@ -13,4 +13,4 @@ if (( ! $+_font_cache )); then
 fi
 
 _wanted fonts expl font \
-    compadd -M 'r:|-=* r:|=*' "$@" -S '' -a _font_cache
+    compadd -M 'r:|-=* r:|=*' "$@" -S '' -a - _font_cache
diff --git a/Completion/X/Type/_x_keysym b/Completion/X/Type/_x_keysym
index 39fbaebdd..84212e71b 100644
--- a/Completion/X/Type/_x_keysym
+++ b/Completion/X/Type/_x_keysym
@@ -19,4 +19,4 @@ if (( ! $+_keysym_cache )); then
 fi
 
 _wanted keysyms expl 'key symbol' \
-    compadd "$@" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' -a _keysym_cache
+    compadd "$@" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' -a - _keysym_cache
diff --git a/Completion/Zsh/Command/_print b/Completion/Zsh/Command/_print
index 07cb4de1d..af0501b7a 100644
--- a/Completion/Zsh/Command/_print
+++ b/Completion/Zsh/Command/_print
@@ -25,7 +25,7 @@ _arguments -C -s -A "-*" -S \
   '(-n -l -N -f -s -z)-a[with -c/-C, print arguments across before down]' \
   '(-n -l -N -f -C -s -z)-c[print arguments in columns]' \
   '(-n -l -N -f -c -s -z)-C+[print arguments in specified number of columns]:columns' \
-  '(-s -p -z)-u+[specify file-descriptor to print arguments to]:file-descriptor:_file_descriptors' \
+  '(-s -p -z)-u+[specify file descriptor to print arguments to]:file descriptor:_file_descriptors' \
   '(-s -p -u)-z[push arguments onto editing buffer stack]' \
   '-D[substitute any arguments which are named directories using ~ notation]' \
   '-P[perform prompt expansion]' \
diff --git a/Completion/Zsh/Command/_read b/Completion/Zsh/Command/_read
index acf356a44..1f733b0e8 100644
--- a/Completion/Zsh/Command/_read
+++ b/Completion/Zsh/Command/_read
@@ -17,5 +17,5 @@ _arguments -s -A "-*" -S \
   '(-e)-E[input read is echoed]' \
   '(-q -z -p)-s[suppress terminal echoing]' \
   '-A[first name is taken as an array]' \
-  '(-q -z -p)-u+[specify file-descriptor to read from]:file-descriptor:_file_descriptors' \
+  '(-q -z -p)-u+[specify file descriptor to read from]:file descriptor:_file_descriptors' \
   $pflag '1:varprompt:_vars -qS\?' '*:vars:_vars'
diff --git a/Completion/Zsh/Command/_unhash b/Completion/Zsh/Command/_unhash
index 54c8d1669..c05c27ea3 100644
--- a/Completion/Zsh/Command/_unhash
+++ b/Completion/Zsh/Command/_unhash
@@ -6,7 +6,7 @@ _arguments -C -s -S \
   '(-a -f -s *)-d[remove named directories]:*:named directory:->nameddir' \
   '(-d -f -s *)-a[remove aliases]:*:alias:_aliases' \
   '(-a -d -f *)-s[remove suffix aliases]:*:suffix alias:_aliases -s s' \
-  '(-d -a -s *)-f[remove functions]:*:function:_functions' \
+  '(-d -a -s *)-f[remove functions]:*:shell function:_functions' \
   '-m[treat arguments as patterns]' \
   '(-a -d -f -m)*:command: _command_names -e' && return 0
 
diff --git a/Completion/Zsh/Type/_arrays b/Completion/Zsh/Type/_arrays
index c28fb179e..24c8957e8 100644
--- a/Completion/Zsh/Type/_arrays
+++ b/Completion/Zsh/Type/_arrays
@@ -2,4 +2,4 @@
 
 local expl
 
-_wanted arrays expl array _parameters "$@" -g '*array*'
+_wanted arrays expl array _parameters "$@" - -g '*array*'
diff --git a/Completion/Zsh/Type/_file_descriptors b/Completion/Zsh/Type/_file_descriptors
index 3ea94a7b7..6d21ed2b6 100644
--- a/Completion/Zsh/Type/_file_descriptors
+++ b/Completion/Zsh/Type/_file_descriptors
@@ -2,7 +2,7 @@
 
 local i fds expl list link sep
 
-for i in {0..9}; [[ -e /dev/fd/$i ]] && fds=( ${fds[@]} $i )
+for i in {0..9}; [[ -e /dev/fd/$i ]] && fds+=( $i )
 
 if zstyle -T ":completion:${curcontext}:" verbose && [[ -e /proc/$$/fd ]]; then
   zstyle -s ":completion:${curcontext}:" list-separator sep || sep=--
@@ -10,20 +10,20 @@ if zstyle -T ":completion:${curcontext}:" verbose && [[ -e /proc/$$/fd ]]; then
   if zmodload -e zsh/stat; then
     for i in "${fds[@]}"; do
       stat +link -A link /proc/$$/fd/$i
-      list=( ${list[@]} "$i $sep ${link[1]}" )
+      list+=( "$i $sep ${link[1]}" )
     done
   elif (( $+commands[readlink] )); then
-    for i in "${fds[@]}"; list=( ${list[@]} "$i $sep $(readlink /proc/$$/fd/$i)" )
+    for i in "${fds[@]}"; list+=( "$i $sep $(readlink /proc/$$/fd/$i)" )
   else
     for i in "${fds[@]}"; do
-      list=( ${list[@]} "$i $sep $(ls -l /proc/$$/fd/$i|sed 's/.*-> //' )" )
+      list+=( "$i $sep $(ls -l /proc/$$/fd/$i|sed 's/.*-> //' )" )
     done
   fi
 
   if (( $list[(I)* $sep ?*] )); then
-    _wanted file-descriptors expl 'file descriptors' compadd "$@" -d list -a fds
+    _wanted file-descriptors expl 'file descriptor' compadd "$@" -d list -a - fds
     return
   fi
 fi
 
-_wanted file-descriptors expl 'file descriptors' compadd "$@" -a fds
+_wanted file-descriptors expl 'file descriptor' compadd -a "$@" - fds
diff --git a/Completion/Zsh/Type/_functions b/Completion/Zsh/Type/_functions
index 7f818bd66..912a7f134 100644
--- a/Completion/Zsh/Type/_functions
+++ b/Completion/Zsh/Type/_functions
@@ -2,4 +2,4 @@
 
 local expl
 
-_wanted functions expl 'shell function' compadd "$@" -k functions
+_wanted functions expl 'shell function' compadd -k "$@" - functions
diff --git a/Completion/Zsh/Type/_jobs_bg b/Completion/Zsh/Type/_jobs_bg
index 4362f8949..0c1842203 100644
--- a/Completion/Zsh/Type/_jobs_bg
+++ b/Completion/Zsh/Type/_jobs_bg
@@ -1,3 +1,3 @@
 #compdef bg
 
-_jobs -s
+_jobs -s "$@"
diff --git a/Completion/Zsh/Type/_jobs_fg b/Completion/Zsh/Type/_jobs_fg
index e0f3012ef..57117f0d6 100644
--- a/Completion/Zsh/Type/_jobs_fg
+++ b/Completion/Zsh/Type/_jobs_fg
@@ -1,3 +1,3 @@
 #compdef disown fg
 
-_jobs
+_jobs "$@"
diff --git a/Completion/Zsh/Type/_limits b/Completion/Zsh/Type/_limits
index 232ce7e94..11ee7efaa 100644
--- a/Completion/Zsh/Type/_limits
+++ b/Completion/Zsh/Type/_limits
@@ -2,4 +2,4 @@
 
 local expl
 
-_wanted limits expl 'process limits' compadd ${${(f)"$(limit)"}%% *}
+_wanted limits expl 'process limit' compadd "$@" - ${${(f)"$(limit)"}%% *}
diff --git a/Completion/Zsh/Type/_options b/Completion/Zsh/Type/_options
index 351220bde..c6cf30d99 100644
--- a/Completion/Zsh/Type/_options
+++ b/Completion/Zsh/Type/_options
@@ -5,4 +5,4 @@
 local expl
 
 _wanted zsh-options expl 'zsh option' \
-    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -k options
+    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -k - options
diff --git a/Completion/Zsh/Type/_options_set b/Completion/Zsh/Type/_options_set
index 6082909fd..ddb57c3e2 100644
--- a/Completion/Zsh/Type/_options_set
+++ b/Completion/Zsh/Type/_options_set
@@ -7,4 +7,4 @@
 local expl
 
 _wanted zsh-options expl 'set zsh option' \
-    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -a _options_set
+    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -a - _options_set
diff --git a/Completion/Zsh/Type/_options_unset b/Completion/Zsh/Type/_options_unset
index 3af92f61c..32d58d427 100644
--- a/Completion/Zsh/Type/_options_unset
+++ b/Completion/Zsh/Type/_options_unset
@@ -1,10 +1,10 @@
 #autoload
 
 # Complete all unset options. This relies on `_main_complete' to store the
-# names of the options that were set when it was called in the array
-# `_options_set'.
+# names of the options that were unset when it was called in the array
+# `_options_unset'.
 
 local expl
 
 _wanted zsh-options expl 'unset zsh option' \
-    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -a _options_unset
+    compadd "$@" -M 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' -a - _options_unset