Zsh не пересчитывает мою командную строку

Это может быть немного странно, но я недавно перешел на zsh и у меня возникла проблема с настройкой приглашения оболочки

Часть моего .zshrc выглядит так:

# 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]%}%[email protected]%m %{$fg[blue]%}%c %{$fg[yellow]%}%{$(parse_special)%} %{$reset_color%}%# "

Когда я запускаю терминал, все выглядит хорошо; моя подсказка - то, что я ожидаю

[email protected] ~ Wed Aug 8 22:56:22 PDT 2012 %

Но когда я перехожу в другой каталог, кажется, что моя функция parse_special больше не вызывается для повторного вычисления моего пользовательского приглашения (обратите внимание, что дата не меняется):

[email protected] ~ Wed Aug 8 22:56:22 PDT 2012 % cd .ssh 
[email protected] .ssh Wed Aug 8 22:56:22 PDT 2012 % cd ../workspace 
[email protected] workspace Wed Aug 8 22:56:22 PDT 2012 % 

Можно ли как-нибудь сказать zsh пересчитывать подсказку каждый раз, когда она собирается показать?

Большое спасибо за любые предложения.

ответить на cjhveal

Похоже, PS1 не любит, когда его устанавливают значения в одинарных кавычках. Я попробовал следующее:

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

И получил этот вывод

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

Я должен также добавить, основываясь на предложении cjhveal, вот то, что я буквально попробовал. Снова, одиночные кавычки, кажется, портят вещи

function parse_special {    
    print $(date)
}

autoload -U colors && colors
local prompt_user='%{$fg[green]%}%[email protected]%m%{$reset_color%}'
local prompt_root='%{$fg[red]%}%[email protected]%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}%# "

Ответы на вопрос(2)

Ваш ответ на вопрос