As linhas de terminal do OS X não entram no scrollback

12

Eu tenho um problema que surge ao usar o Terminal do Mac OS X (TERM = xterm): às vezes ele entra em um estado em que as linhas que rolam para cima não são adicionadas ao buffer de rolagem. Eu não estou usando screenou similar; este é um shell bash simples dentro de uma guia Terminal.

Não faz isso imediatamente após abrir uma nova guia. Acredito que seja um efeito colateral de algo que executei na guia do problema. Meu palpite é que ele tem algo a ver com a emulação xterm, possivelmente a região de rolagem.

O que não funcionou:

  • Redefinição suave e física através do menu Shell
  • Executando resetna guia

Existe uma maneira confiável de redefinir o Terminal e / ou o estado xterm?

Alguém pode fornecer uma explicação para o que está acontecendo, mesmo que a única solução seja fechar a guia e abrir uma nova?

Steve Madsen
fonte
Qual versão do Mac OS X você está executando? Você tem o buffer em algo menor que "ilimitado" e as linhas que estão faltando são simplesmente as linhas mais antigas que caíram no final do buffer?
Spiff
Mac OS X 10.6.2, e o buffer é de 10.000 linhas; no entanto, as linhas perdidas são aquelas roladas na tela. Se eu paginar uma tela, essas linhas não estarão lá e, na verdade, como as linhas rolam para cima, a página mais recente da rolagem nunca muda.
211310 Steve Madsen

Respostas:

19

Isso significa que o terminal está usando o buffer de tela alternativo. Há uma tela principal, que rola para o log de rolagem, e uma tela alternativa que não. Programas de "tela cheia" ou "orientados à tela", como top, less, emacs, vim e screen, alternam o terminal para a tela alternativa por padrão.

Cada tela tem seu próprio conteúdo e estado. Ter uma tela alternativa permite que os programas assumam a tela inteira e restaure o conteúdo anterior quando eles saírem, voltando à tela principal.

No Mac OS X Lion 10.7, o Terminal possui um item de menu que você pode usar para alternar manualmente as telas:

Exibir> Mostrar / ocultar tela alternativa

Isso é fornecido principalmente para que você possa exibir ou copiar texto da tela alternativa após a saída do programa "tela cheia". Xterm tem um comando semelhante.

Você também pode usá-lo para forçar manualmente um programa a usar uma tela específica, para controlar se a saída vai para o log de rolagem, por exemplo. No entanto, se você estiver atualmente usando um programa que muda explicitamente para a tela alternativa, poderá confundi-lo ou obter resultados inesperados se forçá-lo à tela principal enquanto o programa estiver em execução, portanto, use-o com cuidado.

Dependendo do programa, ele pode ter um argumento de linha de comando ou algum outro meio para configurá-lo para usar a tela principal. por exemplo less -X,.

Algumas entradas terminfo são projetadas especificamente para suprimir usando a tela alternativa, por exemplo xterm1,. TERM=xterm1 emacsexecutará o Emacs na tela principal. Não recomendo usar xterm1permanentemente, porque desativa vários outros recursos úteis em comparação com o padrão xterm-256colorno Lion.

Você também pode alternar as telas usando o tputcomando para emitir as seqüências de escape de dentro de um shell ou script. tput smcupmuda para a tela alternativa e tput rmcupvolta para a tela principal.

Para ver qual programa está sendo executado no momento, veja o nome do programa exibido na janela do terminal ou no título da guia ou na janela do Inspetor ( Shell> Mostrar Inspetor ). O último processo da lista no Inspetor é (geralmente) o programa atual usando a tela. É o que você precisará configurar para usar a tela principal.

Chris Page
fonte
1
Parece uma resposta muito promissora. Existe uma explicação razoável de que um programa pode sair anormalmente, deixando a tela alternativa ativa?
Steve Madsen
Se você está de volta ao shell depois de executar um programa de "tela cheia", sim, é uma possibilidade, embora os programas mais populares, como os que listei, sejam confiáveis ​​sobre a limpeza de si mesmos. Se um programa de "tela cheia" travar, pode deixar o terminal na tela alternativa. No entanto, você disse que tentou o Shell> Enviar reinicialização total , o que inclui retornar à tela principal. Se isso acontecer novamente, você pode tentar usar este comando para voltar:tput rmcup
Chris Page
Outra possibilidade é que um programa tenha saído do terminal com uma "região de rolagem". Existem códigos para informar o terminal para rolar apenas um sub-intervalo de linhas ao rolar. Os programas usam isso para exibir linhas de status, por exemplo, que não rolam para fora da tela. Se a região de rolagem não incluir a linha superior, o texto não será rolado no log de rolagem. Mais uma vez, no entanto, você disse que tentou um Hard Reset, o que deve esclarecer isso também.
31511 Chris Página
2
No meu caso, o que parece ter acontecido é que minha sshsessão em uma máquina remota falhou (atingiu o tempo limite?) Enquanto eu estava vi, aparentemente deixando o terminal na Tela Alternativa (porque vinunca tive a chance de limpar). Posteriormente, qualquer nova sshsessão no mesmo terminal exibirá o problema descrito pelo OP, até que eu resolvesse o problema selecionando o item de menu Exibir> Ocultar tela alternativa .
Hefesto
Obrigado, Ver> Mostrar / Ocultar Tela Alternativa ajudado. Ele tem uma combinação de teclas que eu devo ter atingido sem saber e não sabia o que aconteceu ou como desfazer
aexl