linux bash terminal terminfo

linux - Usar la "pantalla alternativa" en un script bash



terminal terminfo (3)

La pantalla alternativa es utilizada por muchas aplicaciones de terminal "interactivas con el usuario" como vim, htop, screen, alsamixer, less, ... Es como un buffer diferente del contenido del terminal, que desaparece cuando la aplicación sale, por lo que todo el terminal se restaura y parece que la aplicación no ha generado nada.

Me gustaría lograr exactamente lo mismo en mi propio script de shell (bash), excepto que no tiene que ser tan portátil. Me quedaría con linux solo y emuladores de terminal basados ​​en xterm; pero la solución debería usar algo como tput si es posible. Sin embargo, no quiero usar un lenguaje de scripting externo (o algo así como C).

Aunque no quiero usar C (como debería ser un script bash con el menor número de dependencias posible), eché un vistazo al código fuente de menos. Parece utilizar terminfo como la base de datos y busca la capacidad del terminal "ti" en su inicialización. Al quitar la línea, no usa el sceen alternativo, así que asumí que encontré la línea de código responsable.

Sin embargo, no puedo encontrar esa capacidad en el man terminfo . Pero tal vez estoy en el camino equivocado para encontrar una solución para esto. Quizás terminfo / tput no sea mi amigo.

Entonces, ¿cómo puedo usar la pantalla alternativa en un script bash? ¿Alguien sabe una aplicación simple en la cual el código fuente puedo encontrar una pista? (Aplicación C o script bash o lo que sea ...)


Para la aplicación de la consola C:

ncurses

Wikipedia:

ncurses (new curses) es una biblioteca de programación que proporciona una API que permite al programador escribir interfaces de usuario basadas en texto de una manera independiente del terminal.

less usa esta biblioteca.

Un hello world program desde aquí , para compilarlo en gcc, flag -lncurses es necesario.

#include <ncurses.h> int main() { initscr(); /* Start curses mode */ printw("Hello World !!!"); /* Print Hello World */ refresh(); /* Print it on to the real screen */ getch(); /* Wait for user input */ endwin(); /* End curses mode */ return 0; }


Puede cambiar a la pantalla alternativa usando este comando:

$ tput smcup

Y de vuelta con:

$ tput rmcup

Estos comandos solo emiten las secuencias de escape apropiadas para su terminal. Si es un XTERM, será equivalente al (más conocido pero menos elegante o portátil):

$ echo -e "/e[?1049h"

Y:

$ echo -e "/e[?1049l"

Para obtener más comandos de control de terminal, vea man 5 terminfo .


smcup / rmcup se usan, pero solo para el efecto secundario: la secuencia de escape que alterna entre pantallas normales / alternativas generalmente está incorporada en esas capacidades terminfo, no siempre.

Algunos antecedentes están en xterm faq ¿Por qué la pantalla no se borra al ejecutar vi?