2008-09-16 20 views
8

¿Cómo algunos programas editan lo que se muestra en el 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?Redibujar la pantalla en el terminal

Respuesta

3

Muchas aplicaciones hacen uso de la biblioteca 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 "carriage return", a menudo especificado por la secuencia de escape "\ r", puede devolver el cursor al inicio de la línea actual permitiendo salida posterior a sobrescribe lo que estaba escrito anteriormente allí.

2

Hay caracteres que pueden enviarse al terminal que mueven el cursor hacia atrás. Entonces el texto se puede sobrescribir.

Hay una lista here. Tenga en cuenta las líneas "mover cursor algo".

+0

Ahora entiendo por qué ver archivos binarios en 'cat' o' less' rompería mi terminal ... siempre cambiaría el juego de caracteres y tuve que reiniciar, jaja. – krs013

3

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 para imprimir 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 ediciones de terminal que eso, use ncurses o una variante de las mismas.

0

Para construir sobre la respuesta de @Corporal delicado, hay bibliotecas disponibles que se encargará de algunas de esta funcionalidad para usted como curses/ncurses

4

probar este shellscript

#!/bin/bash 
i=1 
while [ true ] 
    do 
      echo -e -n "\r $i" 
      i=$((i+1)) 
    done 

las opciones -n evita el salto de línea. .. y el \ r hace el retorno de carro ... que escribir de nuevo y otra vez en la misma línea - sin scroling o lo que nunca

1

cabo Susceptible ha respondido a cómo se hace en el nivel más bajo. Para un desarrollo más fácil, el curses library proporciona un mayor nivel de control que el simple envío de caracteres al terminal.

1

NCurses es una biblioteca multiplataforma que le permite dibujar interfaces de usuario en terminales inteligentes.

5

Según el terminal envía seuqences 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.

Cuestiones relacionadas