Situação estranha
No Linux meu terminal funciona bem, neste exemplo depois de man wget...
No Solaris 10...
##IMAGEM COMEÇA AQUI##
##IMAGEM FIM AQUI##
Como você pode ver, a saída é truncada no meio, quando root@solaris10 aparece.
Estas são minhas configurações para terminal no Linux
stty -g
4500:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
Aqueles no Solaris stty -g
500:5:f00bf:8a3b:3:1c:7f:15:4:0:0:0:11:13:1a:19:12:f:17:16:0:0:1:1:0:00:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
Saída mais amigável stty -a no Linux
speed 38400 baud; rows 24; columns 120; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Isto está no Solaris
speed 38400 baud;
rows = 24; columns = 120; ypixels = 0; xpixels = 0;
csdata ?
eucw 1:0:0:0, scrw 1:0:0:0
intr = ^c; quit = ^\; erase = ^?; kill = ^u;
eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;
-parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts -crtsxoff -parext
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff -imaxbel
isig icanon -xcase echo echoe echok -echonl -noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel
Termo usado, no Linux e Solaris, ambos xterm, eu altero para TERM=dtterm no Solaris, mas nada muda.
Este gif mostra o que acontece com o vim no Solaris
EDIT1: fiz uma reinicialização do terminal e o terminal Solaris também ficou bom , mas ele volta com bugs depois de algum uso, então não é uma solução.
EDIT2: acontece no terminal ssh, no terminal do console funciona bem.
Em ambos os sistemas, as
stty -a
informações indicam que a janela do terminal deve ter 120x24 caracteres de tamanho (rows 24; columns 120
no Linux erows = 24; columns = 120
). Na sua captura de tela do Linux, isso parece ser verdade. Mas na sua captura de tela do Solaris, há claramente mais de 24 linhas, e astty -a
saída naquele momento deve refletir esse fato . A saída do Solaris parece ser truncada após a 24ª linha, então o shell e quaisquer outros programas que você esteja executando estão apenas tomando o tamanho do terminal indicado porstty -a
como uma verdade absoluta.Quando você redimensiona sua janela de terminal, o processo do emulador de terminal (por exemplo,
xterm
no seu caso) deve enviar um sinal de mudança de janela (SIGWINCH
) para o(s) processo(s) em execução dentro daquela janela de terminal para informá-los que o tamanho da janela mudou. Então, o(s) processo(s) deve(m) atualizar asstty
configurações e sua ideia interna do tamanho da tela.Quando complicações como conexões de terminais remotos e software Unix comercial antigo são adicionadas à mistura, às vezes pode acontecer que o sinal não seja entregue ou seja entregue apenas ao processo que está ativo no terminal naquele momento.
Então, quando você se conecta a um host remoto, faz login, inicia um editor de texto e redimensiona a janela para ver melhor o que está editando, o editor pode receber a mensagem de que o tamanho da janela foi alterado e se adaptar... mas quando você sai do editor e inicia outro programa, por
man
exemplo, você pode ver que o shell não obteve o SIGWINCH e ainda tem as informações erradas sobre o tamanho da janela nasstty
informações e/ou nas variáveis de ambienteCOLUMNS
eLINES
... e como as variáveis de ambiente do shell são herdadas por seus processos filhos, o shell agora está propagando informações incorretas sobre o tamanho da janela.Sim, a maneira correta de consertar isso seria garantir que todos os programas relevantes lidem com o SIGWINCH e as alterações de tamanho do terminal corretamente... mas infelizmente softwares antigos e cheios de bugs parecem nunca desaparecer completamente.
A solução alternativa usual seria sair do programa de tela cheia exibindo o comportamento incorreto e executar
eval $(resize)
(ou equivalente) no shell que você usou para iniciá-lo. Ele deve sondar novamente o tamanho atual da janela e ajustar asstty
informações e as variáveis de ambiente mencionadas acima para corresponder ao tamanho real da janela. Em outras palavras, ele força manualmente as coisas que deveriam ter acontecido automaticamente como resultado do SIGWINCH.Às vezes, algo simples
resize
pode ser suficiente; mas usar o formulário também faz com que as variáveis de ambiente e doeval $(resize)
shell sejam atualizadas... e ocasionalmente você usará algum software antigo que usa os valores nessas variáveis de ambiente e espera que eles estejam corretos.COLUMNS
LINES
Depois disso, pode ser bom ter em mente algo como "Estou em um sistema com tratamento SIGWINCH imperfeito; seria melhor ajustar o tamanho das janelas do terminal somente quando houver apenas um prompt de shell no terminal, e não quando algum programa de tela cheia estiver em execução".
(Parece-me lembrar que versões antigas do Solaris costumavam ter implementações padrão bem antigas de
vi
emore
... e esta última provavelmente também era usada como paginador padrão porman
e similares. Eu não ficaria muito surpreso se o tratamento do SIGWINCH não fosse tão perfeito.)Solução encontrada. Após sugestão do usuário que acontece no ssh, tentei
Parece funcionar bem.