57 lines
2.2 KiB
Bash
57 lines
2.2 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
eval "$_z4h_opt"
|
|
setopt octalzeroes
|
|
|
|
local curcontext=$1
|
|
local list_types=$2
|
|
|
|
local -a list_colors
|
|
zstyle -a :completion:$curcontext:default list-colors list_colors || return
|
|
(( $#list_colors )) || return
|
|
|
|
if [[ ${list_types}${(pj:\0:)list_colors} != $_z4h_last_list_colors ]]; then
|
|
# This takes ~20ms. Can be easily optimized.
|
|
typeset -g _z4h_last_list_colors=${list_types}${(pj:\0:)list_colors}
|
|
typeset -gA _z4h_name_colors=(${(@s:=:)${(@s.:.)list_colors}:#[[:alpha:]][[:alpha:]]=*})
|
|
typeset -gA _z4h_mode_colors=(${(@Ms:=:)${(@s.:.)list_colors}:#[[:alpha:]][[:alpha:]]=*})
|
|
typeset -gA _z4h_mode_codes=()
|
|
() {
|
|
local -i8 a b c d
|
|
local -a codes
|
|
local suf
|
|
for a in 0140000 0120000 0100000 0060000 0040000 0020000 0010000; do
|
|
for b in 0 02000 04000 06000; do
|
|
for c in 0 01000 00002 01002; do
|
|
for d in 0 0001 0010 0011 0100 0101 0110 0111; do
|
|
suf=
|
|
codes=()
|
|
if (( a == 0120000 )); then
|
|
_z4h_mode_codes[$((a|b|c|d))]=$'@\0.'
|
|
continue
|
|
fi
|
|
if (( a == 0100000 )); then
|
|
(( d )) && suf='*'
|
|
else
|
|
if (( a == 0140000 )); then codes+=($_z4h_mode_colors[so]); suf='=';
|
|
elif (( a == 0060000 )); then codes+=($_z4h_mode_colors[bd]); suf='' ;
|
|
elif (( a == 0040000 )); then codes+=($_z4h_mode_colors[di]); suf='/';
|
|
elif (( a == 0020000 )); then codes+=($_z4h_mode_colors[cd]); suf='' ;
|
|
elif (( a == 0010000 )); then codes+=($_z4h_mode_colors[pi]); suf='|'; fi
|
|
if (( c == 01000 )); then codes+=($_z4h_mode_colors[st]);
|
|
elif (( c == 00002 )); then codes+=($_z4h_mode_colors[ow]);
|
|
elif (( c == 01002 )); then codes+=($_z4h_mode_colors[tw]); fi
|
|
fi
|
|
(( b & 04000 )) && codes+=($modecolors[su])
|
|
(( b & 02000 )) && codes+=($modecolors[sg])
|
|
(( $#codes || a != 0100000 || !d )) || codes+=($_z4h_mode_colors[ex])
|
|
(( list_types )) || suf=
|
|
_z4h_mode_codes[$((a|b|c|d))]=$suf$'\0'${(j:;:)codes}
|
|
done
|
|
done
|
|
done
|
|
done
|
|
}
|
|
fi
|
|
|
|
return 0
|