O terminal envolve 80 caracteres, mesmo que a janela seja mais larga

2

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 a less 458 MacPorts instala. É mesmo o mesmo se less é invocado remotamente em algum outro host de uma sessão ssh interativa.
  • resize imprime o tamanho correto e eval `resize` não ajuda. O que não é surpreendente, já que less 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'.
MvG
fonte
@mark: Existem muitas semelhanças, mas são questões diferentes. Isso pergunta "como eu corrijo esse problema de empacotamento de 80 colunas", enquanto "pergunta sobre terminfo e emulação de terminal em geral, e apenas incidentalmente menciona uma questão de empacotamento de 80 colunas como uma motivação para fazendo a pergunta.
Chris Page

Respostas:

1

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 foi xterm-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 tentativa xterm-16color e depois xterm 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 que xterm-color.

Veja minha resposta https://apple.stackexchange.com/a/79016/6883 para mais detalhes.

Chris Page
fonte
Se a resposta é a mesma que outra pergunta, então a questão é uma duplicata e deve ser fechada como tal.
Mark
2
A questão é diferente e as respostas apenas se sobrepõem parcialmente. É por isso que eu simplesmente me referi a ele em vez de sinalizar isso como uma duplicata.
Chris Page