Esse comportamento vem do recurso "tela alternativa" incluído em alguns terminais (hardware) e na maioria dos emuladores de terminal (software). O que acontece é que alguns programas com reconhecimento de terminal alternam para a 'tela' alternativa para fazer seu trabalho e retornam para a 'tela' normal quando são descartados (encerrados, suspensos etc.). Isso efetivamente limpa a produção final de tais programas.
Uma pesquisa na web por “terminfo prevent altscreen” forneceu uma página que discute o 'problema' da tela alternativa e várias soluções .
Como a página vinculada descreve, alguns programas podem ser configurados para evitar o uso da tela alternativa. A -X
opção por menos é uma maneira indireta de fazer isso. O Vim pode ser configurado de maneira semelhante, desmarcando as variáveis t_ti
e t_te
.
Uma solução com um escopo mais amplo é editar a entrada terminfo do seu terminal para que ele não inclua as seqüências alternativas de controle de tela. As entradas terminfo formam um banco de dados que informa aos programas que controlam as seqüências a serem enviadas para um terminal para criar certos efeitos (mover o cursor, limpar a tela, apagar parte da linha atual, etc.). Editando a entrada terminfo usada pelo seu terminal, você pode 'negligenciar a dizer' a todos os programas que usam terminfo que as seqüências de controle de “tela alternativa” existem.
A partir da lista de seqüências de controle do xterm , podemos ver que as seqüências de controle de interesse (para emuladores de terminal do tipo xterm ) são
- ativar tela alternativa:
ESC [ ? 47 h
(da mesma forma para 1047 e 1049) e
- restaurar tela normal:
ESC [ ? 47 l
(da mesma forma para 1047 e 1049).
Esses códigos provavelmente estão presentes nas variáveis terminfo smcup
e rmcup
. Uma maneira rápida e suja de consumir essas variáveis para o seu TERM atual pode ser assim:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Esse método é bastante bruto e certamente não funcionará para todos os terminais, mas provavelmente funcionará para a maioria dos emuladores de terminal do tipo xterm . Idealmente, você deve investigar os valores nas variáveis smcup
e rmcup
da entrada terminfo do seu terminal e editá-los de forma conservadora para evitar o comportamento indesejado. A página de discussão / solução vinculada acima tem um arquivo terminfo "pré-preparado" que você pode usar em vez de invadir o seu próprio país (mas qual é a graça nisso?).