Quando o terminal é redimensionado, o shell recebe um SIGWINCH BAR em uma armadilha. Em zsh, você pode definir a função de interceptação correspondente:
TRAPWINCH () {
BAR=$(printf '=%.0s' {1..$COLUMNS})
}
Você não precisa chamar tput , já que zsh rastreia o número de colunas do terminal no COLUMNS variable .
Certifique-se de ativar a opção prompt_subst ( setopt prompt_subst ) para que $PROMPT seja reavaliado sempre que for exibido. Como alternativa, atualize PROMPT em TRAPWINCH também.
Em vez de bifurcar para chamar printf de uma maneira estranha, você pode usar o parâmetro expansão para obter uma string acolchoada. A expansão de parâmetro normalmente funciona a partir do valor de uma variável, mas ${:-STRING} permite que você trabalhe a partir de uma string, neste caso, uma string vazia. Desta forma, você não precisa de uma armadilha.
setopt prompt_subst
PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}