Pastas coloridas no ZSH com base na profundidade do diretório

3

Atualmente estou editando o tema agnoster de oh-my-zsh para minhas preferências, e queria saber se há alguma maneira de colorir os nomes dos diretórios em a barra de status com base na profundidade. Algo como ...

~(red)/.config(orange)/oh-my-zsh(yellow)

Inicialmente eu estava usando o pacote powerline do repo do ubuntu, mas achei lento, então mudei para os temas zsh . Enquanto usava powerline eu era capaz de fazer o que eu queria, mas só podia mudar a cor do diretório de trabalho atual. Minha configuração era algo como ...

"cwd": {"fg": 'color', "bg": 'color', "attrs": []}

"cwd:current_folder": {"fg": 'color', "bg": 'color', "attrs": []}

Qualquer ajuda na criação desta monstruosidade do arco-íris seria muito apreciada. Eu estou no Ubuntu 16.04 usando o Terminator se isso importa.

    
por zebramints 25.03.2017 / 08:22

1 resposta

0

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.

    
por 28.06.2018 / 23:50