#!/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