Descrição do Problema
Se eu aumentar a largura de uma janela do Terminal 2.3 (309), use less
(ou algum comando invocando less
, gostar man
) nessa janela, muitas vezes eu tenho saída distorcida, já que as linhas envolvem 80 caracteres, embora a janela seja mais larga e less
tenta formatar o texto para essa janela maior.
- Este é o mesmo para o OS X 10.8.5 nativo
less
e aless
458 MacPorts instala. É mesmo o mesmo seless
é invocado remotamente em algum outro host de uma sessão ssh interativa. resize
imprime o tamanho correto eeval `resize`
não ajuda. O que não é surpreendente, já queless
parece ter a idéia correta de quão larga é a janela, é apenas confusa pelo fato de que as linhas quebram cedo demais.- Saída de linha de comando normal (fora
less
) abrangerá toda a janela.
Análise
Isso parece ser um bug em como o cup (modo de posicionamento do cursor) é manipulado pelo aplicativo. O código a seguir pode ser usado para reproduzir o problema:
tput smcup; echo {0..200}; sleep 2; tput rmcup
A questão toda parece estar relacionada ao fato de que eu configurei o Terminal para definir o modo de emulação e TERM
variável de ambiente para xterm-color
em vez do padrão xterm-256color
. Eu fiz isso, uma vez que o último não está disponível em vários hosts que eu ssh para, fazendo com que os aplicativos nesses hosts para reclamar sobre a falta de funcionalidade.
Soluções alternativas
Uma maneira de evitar esse problema parece estar executando o comando
tput -T xterm-256color smcup; tput -T xterm-256color rmcup
após cada alteração do tamanho do terminal. Mas isso é muito chato. Outra solução alternativa seria alterar a emulação de terminal para xterm-256color
e copiando os dados do terminfo para os hosts remotos que não suportam esse valor fora da caixa. O que pode ser irritante também, se você quiser apenas dar uma olhada rápida em algum host remoto.
Questão central
No geral, parece-me como se a emulação do xterm-color
A configuração não é suportada, assim como seria de esperar. Isso é um bug no Terminal.app, ou eu entendi mal algo sobre como essa bagunça toda deveria funcionar?
Alguém tem uma solução mais apropriada para lidar com essas incompatibilidades?
Detalhes técnicos
Para mais informações, aqui está a saída de infocmp xterm-color xterm-256color
, ligeiramente tronco, removendo algumas definições importantes:
comparing xterm-color to xterm-256color.
comparing booleans.
bce: F:T.
ccc: F:T.
mc5i: F:T.
npc: F:T.
comparing numbers.
colors: 8, 256.
ncv: NULL, NULL.
pairs: 64, 32767.
comparing strings.
blink: NULL, '\E[5m'.
cbt: NULL, '\E[Z'.
civis: NULL, '\E[?25l'.
cnorm: NULL, '\E[?12l\E[?25h'.
cvvis: NULL, '\E[?12;25h'.
ech: NULL, '\E[%p1%dX'.
el1: NULL, '\E[1K'.
enacs: '\E)0', NULL.
flash: NULL, '\E[?5h$<100/>\E[?5l'.
hpa: NULL, '\E[%i%p1%dG'.
ich: NULL, '\E[%p1%d@'.
indn: NULL, '\E[%p1%dS'.
initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
invis: NULL, '\E[8m'.
is2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
kDC: NULL, '\E[3;2~'.
kEND: NULL, '\E[1;2F'.
kHOM: NULL, '\E[1;2H'.
[ ⋮ ]
kri: NULL, '\E[1;2A'.
kslt: '\E[4~', NULL.
mc0: NULL, '\E[i'.
mc4: NULL, '\E[4i'.
mc5: NULL, '\E[5i'.
op: '\E[m', '\E[39;49m'.
rin: NULL, '\E[%p1%dT'.
rmacs: '^O', '\E(B'.
rmam: NULL, '\E[?7l'.
rmcup: '\E[2J\E[?47l\E8', '\E[?1049l'.
rmm: NULL, '\E[?1034l'.
rmso: '\E[m', '\E[27m'.
rmul: '\E[m', '\E[24m'.
rs1: NULL, '\Ec'.
rs2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
sgr: NULL, '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'.
sgr0: '\E[m', '\E(B\E[m'.
smacs: '^N', '\E(0'.
smam: NULL, '\E[?7h'.
smcup: '\E7\E[?47h', '\E[?1049h'.
smm: NULL, '\E[?1034h'.
vpa: NULL, '\E[%i%p1%dd'.
Respostas:
xterm-color
representa uma ramificação antiga do Xterm que não reflete com precisão uma série de recursos importantes suportados pelo Terminal (e Xterm).Nas versões mais antigas do Terminal, o valor padrão do
TERM
variável de ambiente foixterm-color
porque era mais compatível com o Terminal, mas esse não foi o caso de várias versões do OS X. O padrão atual éxterm-256color
.Se você está se conectando a um host remoto que não inclui
xterm-256color
, primeira tentativaxterm-16color
e depoisxterm
e veja se eles estão disponíveis. Eles são essencialmente os mesmos, exceto que eles declaram números diferentes de cores suportadas. Eles representam o Xterm atual e são muito mais compatíveis com o Terminal do quexterm-color
.Veja minha resposta https://apple.stackexchange.com/a/79016/6883 para mais detalhes.
fonte