2011-09-26 24 views
12

Hay varias bibliotecas como ncurses que ayudan a hacer GUI de línea de comandos.¿Cómo funciona ncurses et. Alabama. ¿Trabajo?

En pocas palabras, ¿cómo funcionan?

Lo primero que pensé fue que ncurses intercepta toda la entrada del teclado y dibuja cada "cuadro" emitiéndolo línea por línea normalmente. Sin embargo, una inspección más detallada revela que cada nuevo marco sobrescribe el anterior. ¿Cómo se modifican las líneas que ya se han generado? Además, ¿cómo maneja el color?

EDITAR: La misma pregunta se aplica a cualquier cosa con una interfaz "elegante", como vim y emacs.

Respuesta

14

terminales de texto tienen secuencias de comandos que hacen cosas como mover el cursor a una posición particular en la pantalla, insertar caracteres, eliminar líneas etc.

Cada tipo de terminal es diferente y tiene su propio conjunto de secuencias de comandos. ncurses tiene un databse (ver terminfo para más detalles)

Internamente ncurses mantiene 2 vistas de la pantalla: los contenidos actuales y la apariencia de la pantalla después de aplicar los cambios actuales pendientes. Una vez que el programa solicita una nueva pantalla, ncurses calcula una forma eficiente de actualizar la pantalla para que se vea como la vista deseada. La salida de caracteres exactos/secuencias de comando depende de qué tipo de terminal esté en uso.

3

maldiciones (y ncurses, también, creo) funciona moviendo el cursor por la pantalla. Hay secuencias de control para hacer tales cosas. Echa un vistazo al código nuevamente y podrás verlos. Estas secuencias no son caracteres de control ASCII, son cadenas que comienzan con (umm ...) ESC, quizás. Eche un vistazo a here para obtener una explicación de mayor nivel.

+0

La mayoría de los terminales admiten (algunas de) las [secuencias de escape ANSI] (https://en.wikipedia.org/wiki/ANSI_escape_code). Comienzan con '\ 033 [' donde '\ 033' es de hecho ESC. Puedes jugar en tu propio terminal usando 'echo -e' para imprimir algunos de ellos y ver qué pasa. ('reset' (escriba a ciegas y presione enter) será su amigo si ha logrado establecer el terminal como invisible ...) – 5gon12eder