Esse comportamento vem do recurso de “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 mudam para a "tela" alternativa para fazer seu trabalho e voltar para a "tela" normal quando são dispensados (sair, suspenso, etc.). Isso efetivamente limpa a saída final de tais programas.
Uma pesquisa na web para "terminfo prevent altscreen", fornecida uma página que discute a tela alternativa 'problema' e várias soluções .
Como essa página vinculada descreve, alguns programas podem ser configurados para evitar o uso da tela alternativa. A opção -X
para menos é uma maneira indireta de fazer isso. O Vim pode ser configurado de maneira semelhante desativando 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 ela não inclua a alternativa seqüências de controle de tela. As entradas terminfo formam um banco de dados que informa aos programas que controlam as sequências a serem enviadas para um terminal para criar certos efeitos (mover o cursor, limpar a tela, apagar parte da linha atual, etc.). Ao editar a entrada terminfo que o seu terminal usa, você pode organizar a "negligência de informar" todos os programas que usam terminologias que as seqüências de controle da "tela alternativa" existem.
A partir da lista de sequências de controlo para xterm , podemos ver que as sequências de controle de interesse (para xterm como emuladores de terminal) são
- ativar tela alternativa:
ESC [ ? 47 h
(da mesma forma para 1047 e 1049) e - restaura a tela normal:
ESC [ ? 47 l
(da mesma forma para 1047 e 1049).
Esses códigos provavelmente estão presentes nas variáveis de terminfo smcup
e rmcup
. Uma forma rápida e suja de extirpar 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
Este método é bastante grosseiro 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, de maneira conservadora, editá-los para evitar o comportamento indesejado. A página de discussão / solução com links acima tem um arquivo terminfo “pré-preparado” que você pode usar em vez de hackeá-los (mas qual é a graça disso?).