Conocimientos básicos
En la era de la amplia utilización de máquinas teletype, las máquinas teletype actuaban como terminales de salida conectadas a computadoras centrales a través de cables. Los usuarios tenían que enviar una serie de comandos de control específicos al programa de terminal para controlar la salida en la pantalla del terminal. Por ejemplo, cambiar la posición del cursor en la pantalla, borrar el contenido de un área determinada de la pantalla, hacer scroll de la pantalla, cambiar los modos de visualización, subrayar texto, cambiar la apariencia, el color, la brillo, etc. de los caracteres. Estos controles se implementan a través de una cadena llamada secuencia de escape. Las secuencias de escape se llaman así porque estos bytes contínuos empiezan con un carácter 0x1B
, que es el carácter de escape (el carácter introducido al presionar la tecla ESC
). Incluso ahora, podemos simular el efecto de salida de las terminales teletype de esa época al introducir secuencias de escape en programas de emulación de terminal. Si quieres mostrar un texto en la terminal (o programa de emulación de terminal) con fondo coloreado, puedes introducir la siguiente secuencia de escape en tu terminal de comandos:
echo "^[[0;31;40mIn Color"
Aquí, ^
y [
son los llamados caracteres de escape. (Nota: en este caso, ^[
es un carácter. No se introduce escribiendo secuencialmente los caracteres ^
y [
. Para imprimir este carácter, primero debes presionar Ctrl+V
y luego la tecla ESC
.) Después de ejecutar el comando anterior, deberías ver que el fondo de In Color
se ha cambiado a rojo. A partir de entonces, todo el texto mostrado se saldrá con este efecto. Si quieres terminar este efecto y volver al formato original, puedes utilizar el siguiente comando:
echo "^[[0;37;40m"
¿Ahora sabes el propósito de estos caracteres (secuencias de escape)? (Intenta cambiar los parámetros entre los dos puntos y ver qué resultados obtienes.) Quizás sea diferente de lo que imaginas. Puede ser porque el entorno de la terminal es diferente, lo que depende de los diferentes terminales o sistemas operativos. (No puedes hacer que una terminal monocroma muestre caracteres coloreados, ¿verdad?) Para evitar estos problemas de compatibilidad y lograr una salida consistente en diferentes terminales, los diseñadores de UNIX inventaron un mecanismo llamado termcap
. termcap
es en realidad un archivo que se libera junto con las secuencias de escape. Este archivo lista todas las secuencias de escape que el terminal actual puede ejecutar correctamente, lo que garantiza que el resultado de la ejecución de las secuencias de escape introducidas coincida con las especificaciones de este archivo. Sin embargo, en los años siguientes a la invención de este mecanismo, otro mecanismo llamado terminfo
fue reemplazando gradualmente a termcap
. Desde entonces, los usuarios ya no necesitan consultar las complejas especificaciones de secuencias de escape en termcap
cuando programan, y solo necesitan acceder a la base de datos terminfo
para controlar la salida de la pantalla.
Asumiendo que todas las aplicaciones acceden a la base de datos terminfo
para controlar la salida (por ejemplo, enviar caracteres de control, etc.) en la situación de utilizar terminfo
, pronto estas llamadas de código harán que todo el programa sea difícil de controlar y administrar. El surgimiento de estos problemas dio lugar al nacimiento de CURSES
. El nombre CURSES
proviene de un juego de palabras llamado cursor optimization
.
La biblioteca CURSES
ofrece a los usuarios una API (interfaz de programación de aplicaciones) flexible y eficiente al encapsular los códigos de control subyacentes (secuencias de escape) de la terminal, lo que permite a los usuarios controlar el cursor, crear ventanas, cambiar los colores de primer plano y de fondo y manejar operaciones con el mouse. Esto permite a los usuarios evitar esos molestos mecanismos de bajo nivel cuando escriben aplicaciones en terminales de caracteres.
NCURSES
es una clonación de CURSES
a partir de System V Release 4.0 (SVr4)
. Es una biblioteca libremente configurable que es completamente compatible con versiones anteriores de CURSES
. En resumen, es una biblioteca que permite a las aplicaciones controlar directamente la visualización de la pantalla de la terminal. Cuando se menciona la biblioteca CURSES
más adelante, también se hace referencia a la biblioteca NCURSES
.
NCURSES
no solo encapsula las funciones de terminal subyacentes, sino que también proporciona un marco de trabajo bastante estable para generar interfaces hermosas. Incluye funciones para crear ventanas. Y sus bibliotecas hermanas, Menu
, Panel
y Form
, son extensiones de la biblioteca base CURSES
. Estas bibliotecas generalmente se distribuyen junto con CURSES
. Podemos construir una aplicación que contenga múltiples ventanas, menús, paneles y formularios. Las ventanas se pueden administrar independientemente, como hacer scroll o ocultarlas. Los menús permiten a los usuarios crear opciones de comando para facilitar la ejecución de comandos. Los formularios permiten a los usuarios crear ventanas para la entrada y visualización sencilla de datos. Los paneles son extensiones de las funciones de gestión de ventanas de NCURSES y pueden superponer o apilar ventanas.