_argc_completer() {
local new_words
_argc_completer_reassemble_words
local candidates=() values=() displays=() colors display_value
while IFS=$'\n' read -r line; do
if [[ "$line" == "" ]]; then line=$'\0'; fi
candidates+=( "$line" )
done < <(argc --argc-compgen zsh $'\0' $new_words 2>/dev/null)
for candidate in ${candidates[@]}; do
IFS=$'\t' read -r value display color_key color <<< "$candidate"
colors="$colors:=(#b)($color_key)([ ]## -- *)=0=$color=2:=(#b)($color_key)=0=$color"
values+=( "${value}" )
displays+=( "$display" )
done
zstyle ":completion:${curcontext}:*" list-colors "${colors:1}:=(#b)(-- *)=0=2"
_describe "" displays values -Q -S '' -o nosort
}
_argc_completer_reassemble_words() {
local i cword
new_words=()
for ((i=1; i<=$CURRENT; i++)); do
cword="$words[$i]"
if [[ "$cword" == "" ]]; then
new_words+=( $'\0' )
else
if [[ "$cword" == *"\\"* ]]; then
local j char next_char cword_len word
cword_len="${#cword}"
for ((j=0; j<$cword_len; j++)); do
char="${cword:$j:1}"
if [[ "$char" == "\\" ]]; then
next_char="${cword:$((j+1)):1}"
if [[ "$next_char" == "\\" ]]; then
word="$word$char"
j=$((j+1))
fi
else
word="$word$char"
fi
done
cword="$word"
fi
new_words+=( "$cword" )
fi
done
}
compdef _argc_completer \
__COMMANDS__