com PROMPT="…$(build_prompt)"
, você está executando build_prompt
no momento da atribuição, ou seja, quando seu .zshrc
é lido e usando o resultado dessa execução como o prompt.
Para executar build_prompt
sempre que o prompt for exibido, inclua a string $(build_prompt)
diretamente no valor da variável PROMPT
. Isso requer a ativação da opção prompt_subst
.
setopt prompt_subst
PROMPT="%{%f%b%k%}$(build_prompt)"
Como alternativa, execute o código de configuração de prompt em um precmd
hook .
set_prompt () {
…
PROMPT="%{%f%b%k%}${ref/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode} "
fi
}
precmd_functions+=set_prompt
set_prompt
Observe também que o código que executa setopt
, zstyle
e autoload
não pertence a uma função. Isso funciona, mas impede a alteração dessas configurações mais tarde. Este é um código que precisa ser executado apenas uma vez, portanto, coloque-o em .zshrc
fora de qualquer função.
Para responder à pergunta que você fez, para executar o código em uma alteração de diretório, coloque-a em um chpwd
gancho . Mas isso não é o que você quer: você precisa atualizar o prompt não apenas em uma alteração de diretório, mas também em uma alteração de estado do git, para que o código de atualização precise ser executado toda vez que o prompt for exibido.