about summary refs log tree commit diff
path: root/Completion/Core
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-02-03 17:22:40 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-02-03 17:22:40 +0000
commited41dafd3c79ebf2ce390ee9af54fe8bb21deb73 (patch)
treea45e062eb30e19f11c04c8bb7d30e36c1b77eb7e /Completion/Core
parent52a67fbbda1eda1e45d9aa6eed6c9650fbd6d0b1 (diff)
downloadzsh-ed41dafd3c79ebf2ce390ee9af54fe8bb21deb73.tar.gz
zsh-ed41dafd3c79ebf2ce390ee9af54fe8bb21deb73.tar.xz
zsh-ed41dafd3c79ebf2ce390ee9af54fe8bb21deb73.zip
zsh-workers/9546
Diffstat (limited to 'Completion/Core')
-rw-r--r--Completion/Core/_alternative2
-rw-r--r--Completion/Core/_approximate11
-rw-r--r--Completion/Core/_complete11
-rw-r--r--Completion/Core/_correct5
-rw-r--r--Completion/Core/_description12
-rw-r--r--Completion/Core/_expand13
-rw-r--r--Completion/Core/_files14
-rw-r--r--Completion/Core/_list6
-rw-r--r--Completion/Core/_main_complete6
-rw-r--r--Completion/Core/_match8
-rw-r--r--Completion/Core/_menu4
-rw-r--r--Completion/Core/_message4
-rw-r--r--Completion/Core/_normal8
-rw-r--r--Completion/Core/_oldlist6
-rw-r--r--Completion/Core/_path_files18
-rw-r--r--Completion/Core/_setup12
-rw-r--r--Completion/Core/_sort_tags6
-rw-r--r--Completion/Core/_tags8
-rw-r--r--Completion/Core/compinit10
19 files changed, 83 insertions, 81 deletions
diff --git a/Completion/Core/_alternative b/Completion/Core/_alternative
index 791d7517e..73292cb52 100644
--- a/Completion/Core/_alternative
+++ b/Completion/Core/_alternative
@@ -7,7 +7,7 @@ subopts=()
 while getopts 'O:C:' opt; do
   case "$opt" in
   O) subopts=( "${(@P)OPTARG}" ) ;;
-  C) curcontext="${curontext}:$OPTARG" ;;
+  C) curcontext="${curcontext%:*}:$OPTARG" ;;
   esac
 done
 
diff --git a/Completion/Core/_approximate b/Completion/Core/_approximate
index bb1faa7b3..283f30e83 100644
--- a/Completion/Core/_approximate
+++ b/Completion/Core/_approximate
@@ -16,11 +16,12 @@ local curcontext="${curcontext}" oldcontext
 
 [[ "${#:-$PREFIX$SUFFIX}" -le 1 ]] && return 1
 
-[[ "$curcontext" != *:correct* ]] && curcontext="${curcontext}:approximate"
+[[ "$curcontext" != [^:]#:correct:* ]] &&
+    curcontext="${curcontext/:[^:]#:/:approximate:}"
 
 oldcontext="$curcontext"
 
-zstyle -s ":completion${curcontext}:" max-errors cfgacc
+zstyle -s ":completion:${curcontext}:" max-errors cfgacc
 
 # Get the number of errors to accept.
 
@@ -73,18 +74,18 @@ compstate[matcher]=-1
 [[ -z "$compstate[pattern_match]" ]] && compstate[pattern_match]='*'
 
 while [[ _comp_correct -le comax ]]; do
-  curcontext="${oldcontext}:$_comp_correct"
+  curcontext="${oldcontext/(#b)([^:]#:[^:]#:)/${match[1][1,-2]}-${_comp_correct}:}"
 
   _description corrections _correct_expl corrections \
                "e:$_comp_correct" "o:$PREFIX$SUFFIX"
 
   if _complete; then
-    if zstyle -t ":completion${curcontext}:" insert-unambiguous &&
+    if zstyle -t ":completion:${curcontext}:" insert-unambiguous &&
        [[ "${#compstate[unambiguous]}" -ge "${#:-$PREFIX$SUFFIX}" ]]; then
       compstate[pattern_insert]=unambiguous
     elif _requested original &&
          ( [[ compstate[nmatches] -gt 1 ]] ||
-           zstyle -t ":completion${curcontext}:" original ); then
+           zstyle -t ":completion:${curcontext}:" original ); then
       local expl
 
       _description -V original expl original
diff --git a/Completion/Core/_complete b/Completion/Core/_complete
index 00c5e1e9a..d589c1707 100644
--- a/Completion/Core/_complete
+++ b/Completion/Core/_complete
@@ -4,16 +4,17 @@
 # a normal completion function, but as one possible value for the
 # completer style.
 
-local comp name curcontext="$curcontext" oldcontext
+local comp name oldcontext
+typeset -T curcontext="$curcontext" ccarray
 
-[[ "$funcstack[2]" = _main_complete ]] && curcontext="${curcontext}:complete"
+ccarray[2]=complete
 
 oldcontext="$curcontext"
 
 # If we have a user-supplied context name, use only that.
 
 if [[ -n "$compcontext" ]]; then
-  curcontext="${curcontext}:$compcontext"
+  ccarray[3]="$compcontext"
 
   comp="$_comps[$compcontext]"
   [[ -z "$comp" ]] || "$comp"
@@ -25,7 +26,7 @@ fi
 
 comp="$_comps[-first-]"
 if [[ ! -z "$comp" ]]; then
-  curcontext="${curcontext}:-first-"
+  ccarray[3]=-first-
   "$comp"
   if [[ "$_compskip" = all ]]; then
     _compskip=''
@@ -46,7 +47,7 @@ else
 
   local cname="-${compstate[context]:s/_/-/}-"
 
-  curcontext="${oldcontext}:$cname"
+  ccarray[3]="$cname"
 
   comp="$_comps[$cname]"
 
diff --git a/Completion/Core/_correct b/Completion/Core/_correct
index 35114ed22..76560dfb2 100644
--- a/Completion/Core/_correct
+++ b/Completion/Core/_correct
@@ -8,9 +8,8 @@
 # Supported configuration keys are the same as for `_approximate', only
 # starting with `correct'.
 
-local ret=1 opm="$compstate[pattern_match]" curcontext="${curcontext}"
-
-[[ "$curcontext" != :correct* ]] && curcontext="${curcontext}:correct"
+local ret=1 opm="$compstate[pattern_match]"
+local curcontext="${curcontext/:[^:]#:/:correct:}"
 
 compstate[pattern_match]='-'
 
diff --git a/Completion/Core/_description b/Completion/Core/_description
index ffe016df8..b35889c4d 100644
--- a/Completion/Core/_description
+++ b/Completion/Core/_description
@@ -18,19 +18,19 @@ _setup "$1"
 
 name="$2"
 
-zstyle -s ":completion${curcontext}:$1" format format ||
-    zstyle -s ":completion${curcontext}:descriptions" format format
+zstyle -s ":completion:${curcontext}:$1" format format ||
+    zstyle -s ":completion:${curcontext}:descriptions" format format
 
-zstyle -s ":completion${curcontext}:$1" hidden hidden
+zstyle -s ":completion:${curcontext}:$1" hidden hidden
 if [[ "$hidden" = (all|yes|true|1|on) ]]; then
   [[ "$hidden" = all ]] && format=''
   hide=(-n)
 fi
-zstyle -s ":completion${curcontext}:$1" group-name gname &&
+zstyle -s ":completion:${curcontext}:$1" group-name gname &&
     [[ -z "$gname" ]] && gname="$1"
-zstyle -s ":completion${curcontext}:$1" matcher match &&
+zstyle -s ":completion:${curcontext}:$1" matcher match &&
     match=(-M "${(q)match}")
-if zstyle -a ":completion${curcontext}:$1" ignored-patterns _comp_ignore; then
+if zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore; then
   ign=(-F _comp_ignore)
 else
   _comp_ignore=()
diff --git a/Completion/Core/_expand b/Completion/Core/_expand
index cdfc2a8d1..b1609ad40 100644
--- a/Completion/Core/_expand
+++ b/Completion/Core/_expand
@@ -7,13 +7,12 @@
 # the expansions done produce no result or do not change the original
 # word from the line.
 
-local exp word="$PREFIX$SUFFIX" sort expr expl curcontext="${curcontext}"
-
-[[ "$curcontext" != :expand* ]] && curcontext="${curcontext}:expand"
+local exp word="$PREFIX$SUFFIX" sort expr expl
+local curcontext="${curcontext/:[^:]#:/:expand:}"
 
 # First, see if we should insert all *completions*.
 
-if zstyle -s ":completion${curcontext}:" completions expr &&
+if zstyle -s ":completion:${curcontext}:" completions expr &&
    [[ "${(e):-\$[$expr]}" -eq 1 ]]; then
   compstate[insert]=all
   return 1
@@ -30,7 +29,7 @@ exp=("$word")
 # First try substitution. That weird thing spanning multiple lines
 # changes quoted spaces, tabs, and newlines into spaces.
 
-zstyle -s ":completion${curcontext}:" substitute expr &&
+zstyle -s ":completion:${curcontext}:" substitute expr &&
     [[ "${(e):-\$[$expr]}" -eq 1 ]] &&
     exp=( "${(e)exp//\\[ 	
 ]/ }" )
@@ -41,7 +40,7 @@ zstyle -s ":completion${curcontext}:" substitute expr &&
 
 # Now try globbing.
 
-zstyle -s ":completion${curcontext}:" glob expr &&
+zstyle -s ":completion:${curcontext}:" glob expr &&
     [[ "${(e):-\$[$expr]}" -eq 1 ]] &&
     exp=( ${~exp}(N) )
 
@@ -53,7 +52,7 @@ zstyle -s ":completion${curcontext}:" glob expr &&
 
 # Now add as matches whatever the user requested.
 
-zstyle -s ":completion${curcontext}:" sort sort
+zstyle -s ":completion:${curcontext}:" sort sort
 
 [[ "$sort" = (yes|true|1|on) ]] && exp=( "${(@o)exp}" )
 
diff --git a/Completion/Core/_files b/Completion/Core/_files
index f7ce74d80..cd337713a 100644
--- a/Completion/Core/_files
+++ b/Completion/Core/_files
@@ -25,11 +25,11 @@ if [[ "$group[2]" = files ]]; then
   group=()
 fi
 
-if zstyle -s ":completion${curcontext}:all-files" file-patterns tmp &&
+if zstyle -s ":completion:${curcontext}:all-files" file-patterns tmp &&
    [[ -n "$tmp" ]]; then
   aopts=(-g "$tmp")
 fi
-if zstyle -s ":completion${curcontext}:directories" file-patterns tmp &&
+if zstyle -s ":completion:${curcontext}:directories" file-patterns tmp &&
    [[ -n "$tmp" ]]; then
   dopts=(-g "$tmp")
   if [[ "$type" = (*dir*glob*|*glob*dir*) ]]; then
@@ -38,7 +38,7 @@ if zstyle -s ":completion${curcontext}:directories" file-patterns tmp &&
     type="${type}dir"
   fi
 fi
-if zstyle -s ":completion${curcontext}:globbed-files" file-patterns tmp &&
+if zstyle -s ":completion:${curcontext}:globbed-files" file-patterns tmp &&
    [[ -n "$tmp" ]]; then
   gopts=(-g "$tmp")
   if [[ "$type" != (*dir*glob*|*glob*dir*) ]]; then
@@ -64,7 +64,7 @@ while _tags; do
       group[2]=all-files
       _setup all-files
       [[ -z "$hasign" ]] &&
-        zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
+        zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
 	  ign=(-F _comp_ignore)
     fi
     _path_files "$opts[@]" "$ign[@]" "$aopts[@]"
@@ -75,7 +75,7 @@ while _tags; do
         group[2]=globbed-files
 	_setup globbed-files
         [[ -z "$hasign" ]] &&
-          zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
+          zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
 	    ign=(-F _comp_ignore)
       fi
       _path_files "$opts[@]" "$ign[@]" "$dopts[@]" "$gopts[@]" && return 0
@@ -84,7 +84,7 @@ while _tags; do
         group[2]=directories
 	_setup directories
         [[ -z "$hasign" ]] &&
-          zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
+          zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
 	    ign=(-F _comp_ignore)
       fi
       _path_files "$opts[@]" "$ign[@]" "$dopts[@]" && return 0
@@ -94,7 +94,7 @@ while _tags; do
       group[2]=globbed-files
       _setup globbed-files
       [[ -z "$hasign" ]] &&
-        zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
+        zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
 	  ign=(-F _comp_ignore)
     fi
     if [[ "$type" = (*dir*glob*|*glob*dir*) ]]; then
diff --git a/Completion/Core/_list b/Completion/Core/_list
index 294467eca..597d173ad 100644
--- a/Completion/Core/_list
+++ b/Completion/Core/_list
@@ -4,11 +4,11 @@
 # insert possible completions only after the list has been shown at
 # least once.
 
-local pre suf curcontext="${curcontext}:list" expr
+local pre suf expr curcontext="${curcontext/:[^:]#:/:list:}"
 
 # Get the strings to compare.
 
-if zstyle -t ":completion${curcontext}:" word; then
+if zstyle -t ":completion:${curcontext}:" word; then
   pre="$HISTNO$LBUFFER"
   suf="$RBUFFER"
 else
@@ -18,7 +18,7 @@ fi
 
 # Should we only show a list now?
 
-zstyle -s ":completion${curcontext}:" condition expr
+zstyle -s ":completion:${curcontext}:" condition expr
 if [[ ( -z "$expr" || "${(e):-\$[$expr]}" -eq 1 ) &&
       ( "$pre" != "$_list_prefix" || "$suf" != "$_list_suffix" ) ]]; then
 
diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete
index 09feae10f..ebe256588 100644
--- a/Completion/Core/_main_complete
+++ b/Completion/Core/_main_complete
@@ -35,6 +35,8 @@ _failed_tags=()
 
 typeset -U _lastdescr
 
+[[ -z "$curcontext" ]] && curcontext=:::
+
 # Special completion contexts after `~' and `='.
 
 if compset -P 1 '='; then
@@ -55,7 +57,7 @@ _last_menu_style=()
 if (( ! $# )); then
   local tmp
 
-  zstyle -a ":completion${curcontext}:" completer tmp
+  zstyle -a ":completion:${curcontext}:" completer tmp
   set -- "$tmp[@]"
 fi
 
@@ -123,7 +125,7 @@ if (( $compstate[nmatches] )); then
   fi
 elif [[ compstate[matcher] -eq compstate[total_matchers] &&
         $#_lastdescr -ne 0 ]] &&
-     zstyle -s ":completion${curcontext}:warnings" format format; then
+     zstyle -s ":completion:${curcontext}:warnings" format format; then
   local str
 
   _lastdescr=( "\`${(@)^_lastdescr:#}'" )
diff --git a/Completion/Core/_match b/Completion/Core/_match
index b7075b715..42416242d 100644
--- a/Completion/Core/_match
+++ b/Completion/Core/_match
@@ -1,7 +1,7 @@
 #autoload
 
 # This is intended to be used as a completer function after the normal
-# completer as in: `zstyle ":completion:*" completer _complete _match'.
+# completer as in: `zstyle ":completion:::::" completer _complete _match'.
 # It temporarily switches on pattern matching, allowing you to try 
 # completion on patterns without having to setopt glob_complete.
 #
@@ -10,7 +10,7 @@
 # be expanded using globbing.
 
 local tmp opm="$compstate[pattern_match]" ret=0 orig ins
-local curcontext="${curcontext}:match"
+local curcontext="${curcontext/:[^:]#:/:match:}"
 
 # Do nothing if we don't have a pattern or there are still global
 # match specifications to try.
@@ -19,8 +19,8 @@ tmp="${${:-$PREFIX$SUFFIX}#[~=]}"
 [[ "$tmp:q" = "$tmp" ||
    compstate[matcher] -ne compstate[total_matchers] ]] && return 1
 
-zstyle -s ":completion${curcontext}:" original orig
-zstyle -b ":completion${curcontext}:" insert-unambiguous ins
+zstyle -s ":completion:${curcontext}:" original orig
+zstyle -b ":completion:${curcontext}:" insert-unambiguous ins
 
 # Try completion without inserting a `*'?
 
diff --git a/Completion/Core/_menu b/Completion/Core/_menu
index 7f8035098..5ec1a1a55 100644
--- a/Completion/Core/_menu
+++ b/Completion/Core/_menu
@@ -1,12 +1,12 @@
 #autoload
 
-local curcontext="${curcontext}:menu"
+local curcontext="${curcontext/:[^:]#:/:menu:}"
 
 # This completer is an example showing how menucompletion can be
 # implemented with the new completion system.
 # Use this one before the normal _complete completer, as in:
 #
-#   zstyle ":completion:*" completer _menu _complete
+#   zstyle ":completion:::::" completer _menu _complete
 
 if [[ -n "$compstate[old_list]" ]]; then
 
diff --git a/Completion/Core/_message b/Completion/Core/_message
index 8ae93f973..a6cb799e5 100644
--- a/Completion/Core/_message
+++ b/Completion/Core/_message
@@ -4,8 +4,8 @@ local format
 
 _tags messages || return 1
 
-zstyle -s ":completion${curcontext}:messages" format format ||
-    zstyle -s ":completion${curcontext}:descriptions" format format
+zstyle -s ":completion:${curcontext}:messages" format format ||
+    zstyle -s ":completion:${curcontext}:descriptions" format format
 
 if [[ -n "$format" ]]; then
   zformat -f format "$format" "d:$1" "${(@)argv[2,-1]}"
diff --git a/Completion/Core/_normal b/Completion/Core/_normal
index a9e1dc5e4..c3315610f 100644
--- a/Completion/Core/_normal
+++ b/Completion/Core/_normal
@@ -16,7 +16,7 @@ local curcontext="$curcontext"
 
 command="$words[1]"
 if [[ CURRENT -eq 1 ]]; then
-  curcontext="${curcontext}:-command-"
+  curcontext="${curcontext%:*:*}:-command-:"
 
   comp="$_comps[-command-]"
   [[ -z "$comp" ]] || "$comp" && ret=0
@@ -26,15 +26,15 @@ else
   if [[ "$command[1]" == '=' ]]; then
     eval cmd1\=$command
     cmd2="$command[2,-1]"
-    curcontext="${curcontext}::${cmd2}:"
+    curcontext="${curcontext%:*:*}:${cmd2}:"
   elif [[ "$command" == */* ]]; then
     cmd1="$command"
     cmd2="${command:t}"
-    curcontext="${curcontext}::${cmd2}:"
+    curcontext="${curcontext%:*:*}:${cmd2}:"
   else
     cmd1="$command"
     cmd2="$commands[$command]"
-    curcontext="${curcontext}::${cmd1}:"
+    curcontext="${curcontext%:*:*}:${cmd1}:"
   fi
 fi
 
diff --git a/Completion/Core/_oldlist b/Completion/Core/_oldlist
index b0092d586..450e3cb29 100644
--- a/Completion/Core/_oldlist
+++ b/Completion/Core/_oldlist
@@ -1,8 +1,8 @@
 #autoload
 
-local curcontext="${curcontext}:oldlist" list
+local curcontext="${curcontext/:[^:]#:/:oldlist:}" list
 
-zstyle -s ":completion${curcontext}:" list list
+zstyle -s ":completion:${curcontext}:" list list
 
 # If this is a listing widget and there is already an old list,
 # and either the style :oldlist:list is `always', or it is not `never'
@@ -34,7 +34,7 @@ fi
 if [[ -z $compstate[old_insert] && -n $compstate[old_list] ]]; then
   compstate[old_list]=keep
 elif [[ $WIDGET = *complete(|-prefix|-word) ]] &&
-     zstyle -t ":completion${curcontext}:" menu; then
+     zstyle -t ":completion:${curcontext}:" menu; then
   if [[ -n $compstate[old_insert] ]]; then
     compstate[old_list]=keep
     if [[ $WIDGET = *reverse* ]]; then
diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files
index cacf62cd7..a41f8d73a 100644
--- a/Completion/Core/_path_files
+++ b/Completion/Core/_path_files
@@ -82,7 +82,7 @@ while getopts "P:S:qr:R:W:F:J:V:X:f/g:M:12n" opt; do
 done
 
 if [[ -z "$_file_pat_checked" ]] &&
-   zstyle -s ":completion${curcontext}:files" file-patterns tmp1 &&
+   zstyle -s ":completion:${curcontext}:files" file-patterns tmp1 &&
    [[ -n "$tmp1" ]]; then
   if [[ "$tmp1" = '*(-/)' ]]; then
     gopt=''
@@ -126,7 +126,7 @@ if [[ "$sopt" = - ]]; then
   fi
 fi
 
-if zstyle -s ":completion${curcontext}:files" sort tmp1; then
+if zstyle -s ":completion:${curcontext}:files" sort tmp1; then
   case "$tmp1" in
   *size*)             sort=oL;;
   *links*)            sort=ol;;
@@ -159,7 +159,7 @@ fi
 
 # Skip over sequences of slashes.
 
-zstyle -t ":completion${curcontext}:paths" squeeze-slashes && skips=yes
+zstyle -t ":completion:${curcontext}:paths" squeeze-slashes && skips=yes
 
 # We get the prefix and the suffix from the line and save the whole
 # original string. Then we see if we will do menucompletion.
@@ -293,7 +293,7 @@ for prepath in "$prepaths[@]"; do
       [[ ! -o globdots && "$PREFIX" = .* ]] &&
           tmp2=( "$tmp2[@]" ${^tmp1}.*(-/) )
       if [[ -o globdots || "$PREFIX" = .* ]] &&
-         zstyle -s ":completion${curcontext}:paths" special-dirs atmp; then
+         zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
 	if [[ "$atmp" = (yes|true|1|on) ]]; then
 	  tmp2=( "$tmp2[@]" . .. )
 	elif [[ "$atmp" = .. ]]; then
@@ -305,7 +305,7 @@ for prepath in "$prepaths[@]"; do
       [[ ! -o globdots && "$PREFIX" = .* ]] &&
           tmp2=( "$tmp2[@]" ${^tmp1}.${^~pats} )
       if (( $#tmp2 )) &&
-         zstyle -s ":completion${curcontext}:files" ignore-parents rem &&
+         zstyle -s ":completion:${curcontext}:files" ignore-parents rem &&
 	 [[ ( "$rem" != *dir* || "$pats" = '*(-/)' ) &&
 	    ( "$rem" != *..* || "$tmp1" = *../* ) ]]; then
         if [[ "$rem" = *parent* ]]; then
@@ -330,7 +330,7 @@ for prepath in "$prepaths[@]"; do
            expl=( "$expl[@]" -F _comp_ignore )
       fi
       if [[ "$sopt" = *[/f]* && ( -o globdots || "$PREFIX" = .* ) ]] &&
-	  zstyle -s ":completion${curcontext}:paths" special-dirs atmp; then
+	  zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
 	if [[ "$atmp" = (yes|true|1|on) ]]; then
 	  tmp2=( "$tmp2[@]" . .. )
 	elif [[ "$atmp" = .. ]]; then
@@ -465,8 +465,8 @@ for prepath in "$prepaths[@]"; do
       compquote tmp1 tmp2
 
       if [[ -n $menu ]] ||
-         ! zstyle -t ":completion${curcontext}:paths" expand suffix; then
-        (( $#tmp4 )) && zstyle -t ":completion${curcontext}:paths" cursor &&
+         ! zstyle -t ":completion:${curcontext}:paths" expand suffix; then
+        (( $#tmp4 )) && zstyle -t ":completion:${curcontext}:paths" cursor &&
             compstate[to_end]=''
         if [[ "$tmp3" = */* ]]; then
 	  compadd -Qf "$mopts[@]" -p "$linepath$tmp2" -s "/${tmp3#*/}" \
@@ -555,7 +555,7 @@ done
 
 exppaths=( "${(@)exppaths:#$eorig}" )
 
-if zstyle -t ":completion${curcontext}:paths" expand prefix &&
+if zstyle -t ":completion:${curcontext}:paths" expand prefix &&
    [[ $#exppaths -gt 0 && nm -eq compstate[nmatches] ]]; then
   PREFIX="${opre}"
   SUFFIX="${osuf}"
diff --git a/Completion/Core/_setup b/Completion/Core/_setup
index 4054f5ecc..b3b2bdb33 100644
--- a/Completion/Core/_setup
+++ b/Completion/Core/_setup
@@ -2,7 +2,7 @@
 
 local val nm="$compstate[nmatches]"
 
-if zstyle -a ":completion${curcontext}:$1" list-colors val; then
+if zstyle -a ":completion:${curcontext}:$1" list-colors val; then
   zmodload -e zsh/complist || zmodload -i zsh/complist
   if [[ "$1" = default ]]; then
     ZLS_COLORS="${(j.:.)${(@)val:gs/:/\\\:}}"
@@ -11,7 +11,7 @@ if zstyle -a ":completion${curcontext}:$1" list-colors val; then
   fi
 fi
 
-if zstyle -s ":completion${curcontext}:$1" list-packed val; then
+if zstyle -s ":completion:${curcontext}:$1" list-packed val; then
   if [[ "$val" = (yes|true|1|on) ]]; then
     compstate[list]="${compstate[list]} packed"
   else
@@ -21,7 +21,7 @@ else
   compstate[list]="$_saved_list"
 fi
 
-if zstyle -s ":completion${curcontext}:$1" list-rows-first val; then
+if zstyle -s ":completion:${curcontext}:$1" list-rows-first val; then
   if [[ "$val" = (yes|true|1|on) ]]; then
     compstate[list]="${compstate[list]} rows"
   else
@@ -31,7 +31,7 @@ else
   compstate[list]="$_saved_list"
 fi
 
-if zstyle -s ":completion${curcontext}:$1" last-prompt val; then
+if zstyle -s ":completion:${curcontext}:$1" last-prompt val; then
   if [[ "$val" = (yes|true|1|on) ]]; then
     compstate[last_prompt]=yes
   else
@@ -41,7 +41,7 @@ else
   compstate[last_prompt]="$_saved_lastprompt"
 fi
 
-if zstyle -s ":completion${curcontext}:$1" accept-exact val; then
+if zstyle -s ":completion:${curcontext}:$1" accept-exact val; then
   if [[ "$val" = (yes|true|1|on) ]]; then
     compstate[exact]=accept
   else
@@ -54,7 +54,7 @@ fi
 [[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]] &&
     _menu_style=( "$_last_menu_style[@]" "$_menu_style[@]" )
 
-if zstyle -a ":completion${curcontext}:$1" menu val; then
+if zstyle -a ":completion:${curcontext}:$1" menu val; then
   _last_nmatches="$nm"
   _last_menu_style=( "$val[@]" )
 else
diff --git a/Completion/Core/_sort_tags b/Completion/Core/_sort_tags
index 6f07eec1c..778a6000b 100644
--- a/Completion/Core/_sort_tags
+++ b/Completion/Core/_sort_tags
@@ -6,15 +6,15 @@ comptry options
 case "$curcontext" in
 # Some silly examples commented out:
 #
-# *::*p[bgpn]m:*)           # change the order for file-completion
+# *:*:*:*p[bgpn]m:*)           # change the order for file-completion
 #   comptry globbed-files directories
 #   comptry all-files
 #   ;;
-# *::dvips::-o*)            # automatic context set by _arguments
+# *:*:*:dvips:-o*)            # automatic context set by _arguments
 #   comptry all-files
 #   return
 #   ;;
-# *::kill:*)
+# *:*:*:kill:*)
 #   comptry processes
 #   return                  # this return ensures that we use only processes
 #   ;;
diff --git a/Completion/Core/_tags b/Completion/Core/_tags
index 208ec32b1..d2d5555fa 100644
--- a/Completion/Core/_tags
+++ b/Completion/Core/_tags
@@ -7,10 +7,10 @@ if (( $# )); then
   local curcontext="$curcontext" order tag nodef
 
   if [[ "$1" = -C?* ]]; then
-    curcontext="${curcontext}:${1[3,-1]}"
+    curcontext="${curcontext%:*}:${1[3,-1]}"
     shift
   elif [[ "$1" = -C ]]; then
-    curcontext="${curcontext}:${2}"
+    curcontext="${curcontext%:*}:${2}"
     shift 2
   else
     targs=()
@@ -18,7 +18,7 @@ if (( $# )); then
 
   [[ "$1" = -(|-) ]] && shift
 
-  if zstyle -a ":completion${curcontext}" group-order order; then
+  if zstyle -a ":completion:${curcontext}:" group-order order; then
     local name
 
     for name in "$order[@]"; do
@@ -42,7 +42,7 @@ if (( $# )); then
 
   if [[ -n "$_sort_tags" ]]; then
     "$_sort_tags" "$@"
-  elif zstyle -a ":completion${curcontext}" tag-order order; then
+  elif zstyle -a ":completion:${curcontext}:" tag-order order; then
 
     for tag in $order; do
       case $tag in
diff --git a/Completion/Core/compinit b/Completion/Core/compinit
index bfb697279..cd9ec7c2f 100644
--- a/Completion/Core/compinit
+++ b/Completion/Core/compinit
@@ -475,11 +475,11 @@ compstyle() {
 zstyle ':completion:*'                      verbose       'yes'
 zstyle ':completion:*'                      prefix-needed 'yes'
 zstyle ':completion:*'                      prefix-hidden 'no'
-zstyle ':completion:(correct|approximate):' max-errors    '2' numeric
-zstyle ':completion:correct:'               prompt        'correct to:'
-zstyle ':completion:*'                      completer     '_complete'
-zstyle ':completion*:default'               list-colors   "${(s.:.)ZLS_COLORS:-${ZLS_COLOURS:-no=0:fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:ex=0}}"
-(( $+SELECTMIN )) && zstyle ':completion*:default' menu "select=$SELECTMIN"
+zstyle ':completion:*:(correct|approximate):*' max-errors    '2' numeric
+zstyle ':completion:*:correct:*'               prompt        'correct to:'
+zstyle ':completion:*::::'                      completer     '_complete'
+zstyle ':completion:*::::default'               list-colors   "${(s.:.)ZLS_COLORS:-${ZLS_COLOURS:-no=0:fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:ex=0}}"
+(( $+SELECTMIN )) && zstyle ':completion:*::::default' menu "select=$SELECTMIN"
 zstyle ':completion:*' tag-order 'arguments values' options \
                                  globbed-files directories all-files