zsh nie przelicza mojego monitu powłoki

Może to być trochę frędzla, ale ostatnio przeniosłem się do zsh i mam problem z dostosowaniem zachęty do powłoki.

Część mojego .zshrc wygląda tak:

# keeping this simple right now by just printing the date, but imagine this function would look for something specific when moving to a new directory each time
function parse_special {
    print $(date)
}

autoload -U colors && colors
PS1="%{$fg[green]%}%n@%m %{$fg[blue]%}%c %{$fg[yellow]%}%{$(parse_special)%} %{$reset_color%}%# "

Kiedy uruchamiam terminal, wszystko wygląda dobrze; mój podpowiedź jest tym, czego oczekuję:

me@someHost ~ Wed Aug 8 22:56:22 PDT 2012 %

Ale kiedy przechodzę do innego katalogu, wygląda na to, że moja funkcja parse_special nie jest ponownie wywoływana, aby przeliczyć mój niestandardowy monit (zauważ, że data się nie zmienia):

me@someHost ~ Wed Aug 8 22:56:22 PDT 2012 % cd .ssh 
me@someHost .ssh Wed Aug 8 22:56:22 PDT 2012 % cd ../workspace 
me@someHost workspace Wed Aug 8 22:56:22 PDT 2012 % 

Czy jest jakiś sposób, w jaki mogę powiedzieć zsh, aby przeliczał monit za każdym razem, gdy ma to pokazać?

wielkie dzięki za wszelkie sugestie.

odpowiedz na cjhveal

Wygląda na to, że PS1 nie lubi ustawiać wartości pojedynczych kwotowań. Próbowałem:

local tp1="%{$fg[green]%}%n@%m%{$reset_color%}"
PS1="${tp1}"
print "PS1 set by tp1: ${PS1}"
local tp2='%{$fg[green]%}%n@%m%{$reset_color%}'
PS1="${tp2}"
print "PS1 set by tp2: ${PS1}"

I otrzymałem to wyjście

#inner stuff was green
PS1 set by tp1: %{%}%n@%m%{%}
#everything was uncolored
PS1 set by tp2: %{$fg[green]%}%n@%m%{$reset_color%}

Powinienem też dodać, na podstawie sugestii cjhveala, oto, co próbowałem dosłownie. Ponownie, pojedyncze cytaty wydają się burzyć

function parse_special {    
    print $(date)
}

autoload -U colors && colors
local prompt_user='%{$fg[green]%}%n@%m%{$reset_color%}'
local prompt_root='%{$fg[red]%}%n@%m%{$reset_color%}'
local prompt_dir='%{$fg[blue]%}%c%{$reset_color%}'
local prompt_special='%{$fg[yellow]%}%{$(parse_special)%}%{$reset_color%}'
PS1="${prompt_user} ${prompt_dir}${prompt_special}%# "

questionAnswers(2)

yourAnswerToTheQuestion