zsh berechnet meine Shell-Eingabeaufforderung nicht neu

Dies mag ein bisschen Rand sein, aber ich bin kürzlich zu zsh gewechselt und habe ein Problem beim Anpassen meiner Shell-Eingabeaufforderung.

Ein Teil meiner .zshrc sieht so aus:

# 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%}%# "

Wenn ich das Terminal starte, sieht alles gut aus. meine aufforderung ist was ich erwarte:

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

Wenn ich jedoch in ein anderes Verzeichnis wechsle, wird meine Funktion parse_special anscheinend nicht erneut aufgerufen, um meine benutzerdefinierte Eingabeaufforderung neu zu berechnen (beachten Sie, dass sich das Datum nicht ändert):

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 % 

Kann ich zsh auf irgendeine Weise anweisen, die Eingabeaufforderung jedes Mal neu zu berechnen, wenn sie angezeigt wird?

Vielen Dank für alle Vorschläge.

Antwort auf cjhveal

Es scheint, als würde PS1 nicht gerne durch Werte in Anführungszeichen gesetzt. Ich habe folgendes versucht:

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}"

Und bekam diese Ausgabe

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

Ich sollte auch hinzufügen, basierend auf dem Vorschlag von cjhveal, was ich buchstäblich versucht habe. Wieder scheinen die einzelnen Anführungszeichen die Dinge durcheinander zu bringen

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}%# "

Antworten auf die Frage(2)

Ihre Antwort auf die Frage