Por que o tmux falha ao “rolar” ao digitar um comando que excede uma linha? (OSX Terminal.app)

6

Quando eu uso tmux e insiro um comando que excede a linha, ele não redesenhará a linha anterior. Simplesmente limpa a linha atual e não consigo ver o que acabei de escrever. Ele apenas redesenha a primeira linha.

Isso também acontece quando pressiono para cima e o último comando não se encaixa na linha atual (vejo apenas a última linha). Se eu, então, pressionar para cima e para baixo novamente, eu posso ver todas as linhas do comando.

Não tenho certeza do que causa esse problema, mas é muito chato. Tem que fazer alguma coisa com o meu prompt? Apenas no caso, aqui está:

export PS1="%{$fg[blue]%}%n%{$reset_color%}@%{$fg[green]%}%m %{$fg[yellow]%}%~ %{$reset_color%}% "
export PS2=$_>
($TERM is set to screen)

A propósito, estou usando zsh e OSX Termial, mas o problema também está lá com o bash.

Além disso, o problema não existe com xterm (XQuartz), então eu acho que é causado pelo 'Terminal.app' do OSX.

  • Alguém sabe uma maneira de corrigir isso de qualquer maneira?
  • Talvez eu possa forçar um redesenho de alguma forma?

Apenas encontrei este tópico antigo na lista de discussão do tmux.

Eu tentei valores diferentes para $TERM (screen, screen-256colors, xterm, xterm-color, nsterm), mas o erro persiste.

Então eu acho que não há nada que eu possa fazer apesar de mudar para outro emulador de terminal?

    
por groxxda 03.07.2014 / 19:37

2 respostas

3

Este é um bug no Terminal.app que foi percebido por outros, por exemplo, em Qualquer maneira de corrigir o manuseio incorreto de tela de linha? (Talvez apenas Terminal.app)

Eu posso reproduzir o efeito usando o bash + tmux, e capturar o texto enviado para a tela ver que o tmux está definindo as margens de rolagem para excluir a última linha na tela antes de atualizações que possam causar uma quebra de linha. Enquanto isso, bash está escrevendo uma longa linha escrevendo a parte que caberia na primeira linha, mais mais dois caracteres, e então um retorno de carro e a segunda linha, etc.

Os dois caracteres extras devem forçar a linha a envolver. Mas o Terminal.app parece estar confuso com a troca de margens de rolagem, movendo o cursor até a última linha da região de rolagem e, em seguida, escrevendo uma longa linha ali. Em vez de embrulhar, fica onde está e a segunda parte da linha longa é escrita em cima da primeira.

Embora seja um recurso para desativar o agrupamento de linhas, a maioria dos aplicativos supõe que ele esteja ativado. No rastreio (usando script ), nem o tmux nem o bash o usavam. A menos que um deles manipule o revestimento de linha, não há nada para ganhar lá. O tmux, por exemplo, apenas assume o recurso e nem verifica a descrição do terminal para o recurso am (automargin). Ele verifica o flag xenl (falha na nova linha), mas removê-lo da descrição do terminal só pioraria as coisas.

Então ... se esse bug impedir você de usar o Terminal.app, o iTerm2 é uma alternativa adequada.

    
por 06.05.2016 / 03:31
0

Gostaria apenas de baixar o iterm2 e usá-lo.
A maioria dos desenvolvedores que conheço que usam o mac só fazem isso.

Acho que você achará um ambiente mais prazeroso.

Eu uso o iterm2 com o tmux e ele funciona muito bem.

link

    
por 03.07.2014 / 21:57