Este comportamiento proviene de la función de "pantalla alternativa" incluida en algunos terminales (hardware) y la mayoría de los emuladores de terminal (software). Lo que sucede es que algunos programas compatibles con terminales cambian a la 'pantalla' alternativa para hacer su trabajo y vuelven a la 'pantalla' normal cuando se los cierra (salir, suspender, etc.). Esto efectivamente elimina el resultado final de tales programas.
Una búsqueda en la web para “terminfo prevent altscreen” proporcionó una página que discute el 'problema' de la pantalla alternativa y varias soluciones .
Como se describe en esa página vinculada, algunos programas se pueden configurar para evitar el uso de la pantalla alternativa. La -X
opción por menos es una forma indirecta de hacerlo. Vim se puede configurar de manera similar desarmando las variables t_ti
y t_te
.
Una solución con un alcance más amplio es editar la entrada terminfo para su terminal para que no incluya las secuencias de control de pantalla alternativas. Las entradas terminfo forman una base de datos que le dice a los programas qué secuencias de control enviar a un terminal para crear ciertos efectos (mover el cursor, borrar la pantalla, borrar parte de la línea actual, etc.). Al editar la entrada de terminfo que usa su terminal, puede hacer arreglos para 'descuidar' a todos los programas que usan terminfo que las secuencias de control de "pantalla alternativa" existen.
De la lista de secuencias de control para xterm , podemos ver que las secuencias de control de interés (para emuladores de terminal tipo xterm ) son
- habilitar pantalla alternativa:
ESC [ ? 47 h
(del mismo modo para 1047 y 1049), y
- restaurar la pantalla normal:
ESC [ ? 47 l
(igualmente para 1047 y 1049).
Es muy probable que estos códigos estén presentes en las variables terminfo smcup
y rmcup
. Una forma rápida y sucia de eliminar estas variables para su TERM actual podría verse así:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Este método es bastante burdo y ciertamente no funcionará para todos los terminales, pero probablemente funcionará para la mayoría de los emuladores de terminal similares a xterm . Idealmente, debe investigar los valores en las variables smcup
y rmcup
de la entrada terminfo para su terminal y editarlos de forma conservadora para evitar el comportamiento no deseado. La página de discusión / solución vinculada anteriormente tiene un archivo terminfo "precocinado" que puede usar en lugar de hackear el suyo (pero ¿cuál es la diversión?).