editar - linux easytag
Redibujar pantalla en terminal (9)
¿Cómo algunos programas editan lo que se muestra en la terminal (para elegir un ejemplo al azar, el programa ''sl'')? Estoy pensando en la terminal de Linux aquí, puede suceder en otros sistemas operativos también, no sé. Siempre pensé que una vez que se mostraba algún texto, se quedaba allí. ¿Cómo lo cambias sin redibujar toda la pantalla?
Corporal Touchy ha respondido cómo se hace en el nivel más bajo. Para un desarrollo más fácil, la biblioteca de curses proporciona un mayor nivel de control que el simple envío de caracteres al terminal.
Dependiendo del terminal, envía secuencias de control. Las secuencias comunes son, por ejemplo, esc [; H para enviar el cursor a una posición específica (por ejemplo, en Ansi, Xterm, Linux, VT100). Sin embargo, esto variará según el tipo o terminal que tenga el usuario ... curses (junto con los archivos terminfo) envolverá esa información por usted.
Estoy de acuerdo con danio, ncurses es el camino a seguir. Aquí hay un buen tutorial:
Hay caracteres que se pueden enviar a la terminal que mueven el cursor hacia atrás. Entonces el texto se puede sobrescribir.
Hay una lista aquí . Tenga en cuenta las líneas "mover cursor algo".
Muchas aplicaciones hacen uso de la biblioteca de curses , o de algún lenguaje vinculante para ella.
Para reescribir en una sola línea, como actualizar información de progreso, el carácter especial " retorno de carro ", a menudo especificado por la secuencia de escape "/ r", puede devolver el cursor al inicio de la línea actual permitiendo que el resultado subsiguiente sobrescriba lo que era escrito previamente allí.
NCurses es una biblioteca multiplataforma que le permite dibujar interfaces de usuario en terminales inteligentes.
Para construir sobre la respuesta de @Corporal Touchy, hay bibliotecas disponibles que manejarán parte de esta funcionalidad para usted, como curses / ncurses
Si finaliza una línea enviada al terminal con un retorno de carro (''/ r'') en lugar de un salto de línea (''/ n''), moverá el cursor al comienzo de la línea actual, permitiendo que el programa imprima más texto encima de lo que imprimió antes. Lo uso ocasionalmente para mensajes de progreso para tareas largas.
Si alguna vez necesita hacer más edición de terminal que eso, use ncurses o una variante de eso.
prueba este shellscript
#!/bin/bash
i=1
while [ true ]
do
echo -e -n "/r $i"
i=$((i+1))
done
las opciones -n previenen la nueva línea ... y / r / n regresa el carro ... escribes una y otra vez en la misma línea - sin desplazamiento o lo que sea