about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Core/_description7
-rw-r--r--Completion/Core/_setup13
2 files changed, 16 insertions, 4 deletions
diff --git a/Completion/Core/_description b/Completion/Core/_description
index 700f39575..b1b98741c 100644
--- a/Completion/Core/_description
+++ b/Completion/Core/_description
@@ -11,7 +11,10 @@ fi
 
 _lastdescr=( "$_lastdescr[@]" "$3" )
 
-_setup "$1"
+zstyle -s ":completion:${curcontext}:$1" group-name gname &&
+    [[ -z "$gname" ]] && gname="$1"
+
+_setup "$1" "${gname:--default-}"
 
 name="$2"
 
@@ -23,8 +26,6 @@ if zstyle -s ":completion:${curcontext}:$1" hidden hidden &&
   [[ "$hidden" = all ]] && format=''
   opts=(-n)
 fi
-zstyle -s ":completion:${curcontext}:$1" group-name gname &&
-    [[ -z "$gname" ]] && gname="$1"
 zstyle -s ":completion:${curcontext}:$1" matcher match &&
     opts=($opts -M "$match")
 [[ -n "$_matcher" ]] && opts=($opts -M "$_matcher")
diff --git a/Completion/Core/_setup b/Completion/Core/_setup
index 6bc36e3ef..50e3dbfd8 100644
--- a/Completion/Core/_setup
+++ b/Completion/Core/_setup
@@ -2,12 +2,21 @@
 
 local val nm="$compstate[nmatches]"
 
+[[ $# -eq 1 ]] && 2="$1"
+
 if zstyle -a ":completion:${curcontext}:$1" list-colors val; then
   zmodload -i zsh/complist
   if [[ "$1" = default ]]; then
     ZLS_COLORS="${(j.:.)${(@)val:gs/:/\\\:}}"
   else
-    eval "ZLS_COLORS=\"(${1})\${(j.:(${1}).)\${(@)val:gs/:/\\\:}}:\${ZLS_COLORS}\""
+    local simple grouped
+
+    simple=( "(${2})${(@)^val:#\(*\)*}" )
+    grouped=( "${(M@)val:#\(*\)*}" )
+    simple="${(j.:.)simple}:"
+    grouped="${(j.:.)grouped}:"
+    [[ "$ZLS_COLORS" != *${simple}*  ]] && ZLS_COLORS="${simple}$ZLS_COLORS"
+    [[ "$ZLS_COLORS" != *${grouped}* ]] && ZLS_COLORS="${grouped}$ZLS_COLORS"
   fi
 
 # Here is the problem mentioned in _main_complete.
@@ -16,6 +25,8 @@ if zstyle -a ":completion:${curcontext}:$1" list-colors val; then
 #   zmodload -i zsh/complist
 #   ZLS_COLORS="$ZLS_COLORS$ZLS_COLOURS"
 
+elif [[ "$1" = default ]]; then
+  ZLS_COLORS=
 fi
 
 if zstyle -t ":completion:${curcontext}:$1" list-packed; then