As configurações a seguir parecem funcionar. O texto na segunda linha desaparece se a linha de comando ultrapassar a primeira linha. A função preexec
apaga a segunda linha antes de executar o comando; Se você quiser mantê-lo, mude para preexec () { echo; }
.
terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]
PS1_2='[some status]'
PS1="%{$terminfo_down_sc$PS1_2$terminfo[rc]%}%~ %# "
preexec () { print -rn -- $terminfo[el]; }
%
escapes estão documentados no manual do zsh ( man zshmisc
).
Terminfo é uma API de acesso ao terminal. Zsh tem um módulo terminfo
que dá acesso ao banco de dados de descrição do terminal: $terminfo[$cap]
é a sequência de caracteres a ser enviada para exercer a capacidade do terminal $cap
, ou seja, executar seu comando $cap
. Veja man 5 terminfo
(no Linux, o número da seção pode variar em outros unices) para mais informações.
A seqüência de ações é: mova o cursor uma linha para baixo ( cud1
), depois faça backup ( cuu1
); salve a posição do cursor ( sc
); mova o cursor para baixo uma linha; imprimir [some status]
; restaure a posição do cursor. O bit down-down no início só é necessário caso o prompt esteja na linha inferior da tela. A linha preexec apaga a segunda linha ( el
) para que não se misture com a saída do comando.
Se o texto na segunda linha for mais largo que o terminal, o visor pode ficar truncado. Use Ctrl + L em um beliscão para reparar.