Obter função no PS1 (Zsh)?

15

Isso funciona bash( parse_git_branché uma função definida)

export PS1="\$(parse_git_branch)"

Mas não consigo descobrir o equivalente em zsh.

Nota: Se eu fizer

PROMPT="$(parse_git_branch)"

Parece funcionar, mas, na verdade, ele está executando o comando quando defino o prompt, que não é o ponto.

Dan Rosenstark
fonte

Respostas:

26

Você tem que incluir

setopt PROMPT_SUBST

no seu .zshrc, man zshallexplica na seção PROMPT EXPANSION :

Se a opção PROMPT_SUBST estiver configurada, a sequência de prompt será submetida primeiro à expansão do parâmetro, substituição de comando e expansão aritmética.

akira
fonte
14

Na verdade, seu problema não era apenas a configuração PROMPT_SUBST: você usa aspas duplas no seu script, forçando a avaliação da função ao definir as PROMPTvariáveis. Você só deseja avaliação quando o prompt é calculado, ou seja, você deve usar aspas simples.

JN
fonte
5

Como akira diz, você deve usar subst prompt. Este é o meu código inicial (ainda trabalhando nele):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

ou melhor

setopt PROMPT_SUBST
PROMPT='[$PR_MAGENTA%n$PR_NO_COLOR@$PR_GREEN%U%m%u$PR_NO_COLOR:$PR_RED%2c$PR_NO_COLOR]$(parse_git_branch) %(!.#.$)'
Dan Rosenstark
fonte