Нарисовал таки себе precmd() и preexec() корректно работающие с эскейп последовательностями и и прочими спецсимволами.
Вроде пустячок, но уже два человека проявили интерес, поэтому посчу.
Хуки выставляют заголовок терминала и скрина (если они есть).
Что крайне удобно - и при ssh сесии куда-то далеко меняет заголовок первого из скринов, в который завёрнута сессия.
local title_prompt=‘%n@%m:%~ ’
precmd()
{
[[ -t 1 ]] || return 0 #stdout is tty or gtfo
[[ -n $DISPLAY ]] && print -Pn “\e]2;$title_prompt\a” #update term emulator title
[[ $TERM -eq “screen” ]] && print -Pn “\ek$title_prompt\e\\” #update screen title
}
preexec()
{
[[ -t 1 ]] || return 0
if [[ -n $DISPLAY ]];then
print -nP “\e]2;$title_prompt”
print -rn $1
print -n “\a”
fi
if [[ $TERM -eq “screen” ]];then
print -nP “\ek$title_prompt”
print -rn $1
print -n “\e\\”
fi
}
ps, для интересующихся -
zshrc целиком, хотя ценного там пока немного - стыдно сказать, но я до сих пор даже line-editor ниасилил.