Você pode criar uma função que faça isso. Não é perfeito, absolutamente não é portátil, mas parece funcionar. Para usá-lo em $PS1
, basta alterar $fg_
e $bg_
(com %F
/ %B
ou $fg
/ $bg
, não lembro) e configurar e precmd hook ( add-zsh-hook precmd function_precmd
) com uma função que você irá criar e que irá modificar uma variável usada em $PS1
.
Para personalizar a função, basta definir PRE_ASSOC corretamente.
function colorize_array () {
local reset='3[0m'
for (( i = 1; i <= $# ; i++ )); do
pre=""
if (( $+PRE_ASSOC[$i] )); then
pre=$PRE_ASSOC[$i]
elif (( $+PRE_ASSOC[$(( $i - $# - 1 ))] )) ;then
pre=$PRE_ASSOC[$(( $i - $# - 1 ))]
else
pre=$PRE_ASSOC[default]
fi
echo -n -e $pre$@[$i]$reset
done
}
typeset -A fg_ bg_
typeset -A PRE_ASSOC
fg_=([black]="3[30m" [white]="3[37m" [red]="3[31m" [yellow]="3[33m" [cyan]="3[36m")
bg_=([black]="3[40m" [white]="3[47m" [red]="3[41m" [yellow]="3[43m" [cyan]="3[46m")
PRE_ASSOC=([default]="$fg_[cyan]/" [1]="$fg_[red]" [-1]="$fg_[yellow]/")
local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})
out=$(colorize_array $pwd_list)
echo $out
O código está longe de ser perfeito, mas funciona.