Primeiro, você precisa definir uma função que será testada:
- Se você estiver em um repositório do git
- Se houver alterações ocultas
Felizmente, os dois podem ser combinados em um. O comando que você está procurando é:
[ "$(git stash list 2>/dev/null)" != "" ]
Se não houver repo, o próprio comando git stash list imprimirá um erro para o erro padrão, mas nada para o padrão (ele, aliás, retornará um código de erro neste caso). Se houver um repo, ele não imprimirá nada além de erro. Então, testar contra uma string em branco abrange ambos.
Então você precisa colocar isso no seu prompt. Estou assumindo que você está familiarizado com a variável $ PS1, então mostrarei apenas uma definição que mostre apenas isto:
PS1='$(if [ "$(git stash list 2>/dev/null)" != "" ]; then echo "[ S ]"; fi)'
A parte final é adicionar cor. Você deve estar ciente de que a cor é adicionada ao seu terminal, escrevendo códigos de escape. Esses códigos não são renderizados, mas todo o texto que os segue é alterado. Isso significa que você não precisa apenas ativá-los, mas também precisa desativá-los. Finalmente, desde que você está fazendo isso em um prompt, você precisa indicar o fato de que eles não ocupam espaço (caso contrário, seu terminal irá se redesenhar mal quando você percorrer o histórico).
A definição de cores geralmente é feita usando este clichê:
# Try to load colors
autoload colors zsh/terminfo
if [[ "$terminfo[colors]" -ge 8 ]]; then
colors
fi
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
done
PR_NO_COLOR="%{$terminfo[sgr0]%}"
Cole isso no seu .zshrc antes de definir $ PS1 e você pode se referir às cores usando variáveis chamadas $ PR_ COLOR-NAME . Para que estes não ocupem espaço, é necessário envolvê-los em % { VAR %} . Isso significa que você acaba com algo como:
PS1='$(if [ "$(git stash list 2>/dev/null)" != "" ]; then echo "%{$PR_GREEN%}[ S ]%{$PR_NO_COLOR%}"; fi)'
Você pode usar $ PR_LIGHT_GREEN se preferir que o texto não fique em negrito. Pesquise os valores disponíveis em $ terminfo para obter mais efeitos de texto.