Por que meu prompt zsh se move para cima quando a janela é muito estreita?

2

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.

    
por javex 25.01.2014 / 17:56

1 resposta

1

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).

    
por 25.01.2014 / 23:38