Obter função no PS1 (Zsh)?

8

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

export PS1="\$(parse_git_branch)"

Mas não consigo descobrir o equivalente em zsh .

Observação: se eu fizer

PROMPT="$(parse_git_branch)"

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

    
por Dan Rosenstark 17.05.2010 / 16:25

3 respostas

16

Você precisa incluir

setopt PROMPT_SUBST

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

If the PROMPT_SUBST option is set, the prompt string is first subjected to parameter expansion, command substitution and arithmetic expansion.

    
por 17.05.2010 / 16:57
10

Na verdade, seu problema não foi apenas definir PROMPT_SUBST : você usa aspas duplas em seu script, forçando a avaliação da função quando você define as variáveis PROMPT . Você só quer avaliação quando o prompt é computado, ou seja, você deve usar aspas simples.

    
por 05.02.2013 / 05:13
2

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

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) %(!.#.$)'
    
por 17.05.2010 / 17:07

Tags