Parece que consertei usando %{fg[color]%}
em vez dos códigos de cores bash (claro que para isso eu preciso carregar o módulo color).
Eu tenho um comportamento estranho que parece ser uma combinação de zsh e talvez urxvt (?)
Minha configuração é esta: eu inicio urxvt -e 'tmux'
para obter um terminal que ative zsh
como o shell padrão.
Eu comecei a personalizar meu $PROMPT
e atualmente é assim:
zstyle ':vcs_info:*' enable git svn hg bzr
zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
precmd () { vcs_info }
PROMPT+=$'\e[0;31m%n\e[0m'
PROMPT+="@"
PROMPT+=$'\e[0;34m%m\e[0m'
PROMPT+=":"
PROMPT+=$'\e[0;36m%3c\e[0m'
PROMPT+=$'\e[0;33m%c\e[0m'
PROMPT+='${vcs_info_msg_0_}'
export PROMPT
Você pode notar a segunda linha %c
, ou seja, é claro, para testes.
O comportamento normal de um prompt é criar uma nova linha após pressionar enter, opcionalmente, executando o comando que pode estar presente. A nova linha é impressa. No entanto, percebo um comportamento diferente sob certas circunstâncias: Quando pressiono enter, o comando é executado e a saída é exibida. No entanto , quando o prompt anterior não estava no topo do terminal, a última linha da saída anterior é sobrescrita porque toda a nova saída é movida uma linha para cima.
Talvez um exemplo esteja em ordem. Comece com um terminal vazio e um novo prompt:
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Agora entramos ls -la
neste diretório (saída de amostra):
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Observe como algo está faltando, pois, na realidade, há um diretório .git
aqui:
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git
O que aconteceu aqui é facilmente descrito: A saída do comando é gerada corretamente, mas a linha de prompt é movida para cima por uma linha e sobrescreve a última linha de saída. Então, se eu fizer o mesmo novamente, minha saída será assim:
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Como você pode ver, tudo foi movido novamente, desta vez substituindo o ..
da última saída e o .git
desta saída.
Mas isso não acontece em todas as configurações. Isso só acontece quando a janela é muito estreita. Eu, adicionalmente, testei isso redimensionando a janela aberta do urxvt com zsh dentro. Quando eu faço isso muito estreito. Pelo que vejo, é iniciado assim que o prompt ocupa cerca de dois terços da largura das janelas. No entanto, eu não sei porque isso acontece nesta ocasião.
Algumas notas:
- Isso não acontece com o bash (mesmo quando o prompt em si é multilinha)
- RPROMPT
e RPROMPT2
estão vazios
- Não parece depender do tipo de informação exibida (por exemplo, desabilitar vcs_info
só ajuda se o prompt ficar curto o suficiente)
- Isso não acontece quando o prompt é multilinha (e a segunda linha não atinge a marca de dois terços)
- Isso não acontece em um console (tty), mas acontece com o xterm e urxvt.
Resumo : Meu prompt zsh é movido quando a linha é para cima, se a linha de prompt tiver cerca de dois terços da janela.