En informática y telecomunicaciones, las capacidades de un terminal son varias funciones del terminal, además de las que ofrece un teletipo puro , que los sistemas host (y los programas que se ejecutan en ellos) pueden utilizar. Se trata (principalmente) de códigos de control y códigos de escape que se pueden enviar o recibir del terminal. Los códigos de escape enviados al terminal realizan varias funciones que un terminal CRT (y emuladores de terminal de software ) es capaz de hacer, pero que un teletipo no; como mover el cursor del terminal a posiciones en la pantalla, limpiar y desplazar toda o parte de la pantalla, encender y apagar dispositivos de impresión conectados, programar teclas de función programables, cambiar colores y atributos de visualización (como video inverso ) y configurar cadenas de título de visualización. Los códigos de escape recibidos del terminal significan cosas como tecla de función , tecla de flecha y otras pulsaciones de teclas especiales ( tecla de inicio , tecla de fin , tecla de ayuda , tecla PgUp , tecla PgDn , tecla de inserción , tecla de borrar , etc.) . [1] [2]
En Unix y otros sistemas compatibles con POSIX que admiten la interfaz de terminal POSIX , estas capacidades están codificadas en bases de datos que son configuradas por un administrador de sistema y a las que se accede desde programas a través de la biblioteca terminfo (que reemplaza a la antigua biblioteca termcap ), sobre la que a su vez se construyen bibliotecas como las bibliotecas curses y ncurses , mediante las cuales los programas de aplicación utilizan las capacidades de terminal para proporcionar interfaces de usuario textuales con ventanas, cuadros de diálogo, botones, etiquetas, campos de entrada, menús, etc. [3] [4] La intención es que esto permita que los programas de aplicación sean independientes de las características reales de la terminal. No necesitan cablear ningún código de control o secuencias de escape en su código, y por lo tanto no tienen problemas para ser utilizados en una variedad de terminales con una variedad de capacidades. [5]
La biblioteca termcap (de " capacidades de term inal cap ") fue desarrollada para sistemas BSD. Utiliza una base de datos almacenada en el archivo /etc/termcap . Esta base de datos consta de una serie de registros (cada uno de los cuales consta de una o más líneas en el archivo, unidas por caracteres de barra invertida al final de cada línea que continúa en la siguiente) cada uno de los cuales representa las capacidades de un terminal en particular. Los campos del registro comprenden el nombre del tipo de terminal, o nombres, seguido de una secuencia de capacidades, separadas por dos puntos. [3] [2] Los campos de capacidad en sí se dividen en tres grupos:
La biblioteca terminfo (" información de terminología ") fue desarrollada para sistemas System V. Utiliza una base de datos almacenada en varios archivos dentro de un directorio, que puede ser (en diferentes sistemas compatibles con Unix y POSIX) /usr/lib/terminfo , /usr/share/terminfo o incluso /usr/share/lib/terminfo . [5] (Su ubicación ni siquiera es uniforme en las diferentes distribuciones de Linux . [7] )
A diferencia de la base de datos termcap, la base de datos terminfo está compilada, es decir, es una base de datos legible por máquina que se construye a partir de un formato de archivo fuente legible por humanos mediante un programa de utilidad, tic . Se pueden descompilar de un formato legible por máquina a un formato legible por humanos mediante otro programa de utilidad, infocmp . [8] El comando para generar el formato legible por humanos de la definición de terminal "vt100", por ejemplo, es: [7]
infocmp vt100
El uso de un formato legible por máquina tenía como finalidad evitar la sobrecarga innecesaria, en programas de aplicaciones que utilizan sistemas como la biblioteca termcap, de analizar repetidamente el contenido de la base de datos para leer los campos de un registro. El uso de múltiples archivos tenía como finalidad evitar la sobrecarga similar de analizar el contenido de la base de datos para encontrar el registro de la base de datos para el tipo de terminal de destino. El índice de nombres de tipo de terminal es, efectivamente, la estructura de directorio ordinaria del sistema de archivos Unix/POSIX. Originalmente, Unix tenía graves problemas de rendimiento con directorios grandes que contenían muchos archivos, y por eso terminfo utiliza una estructura de dos niveles, dividiendo las entradas del directorio por la primera letra en una serie de subdirectorios. Los formatos de sistema de archivos más recientes utilizados en sistemas Unix no sufren tanto de estos problemas (porque sus estructuras de directorio en el disco ya no son simples matrices de entradas, sino que están organizadas en árboles o tablas hash) y por eso la necesidad de este elemento de diseño, que todavía existe en las implementaciones modernas de terminfo, ha desaparecido desde entonces. [8]
En los sistemas Unix, el comando tput se utiliza para buscar una capacidad específica en la base de datos del sistema y enviarla a la salida estándar del comando (que es, presumiblemente, la terminal mediante la cual se realizará la función indicada por la capacidad). [1] Una de las operaciones más simples es limpiar la pantalla. El nombre del campo de la base de datos que almacena la secuencia de salida para esto es clear , por lo que los argumentos del comando al programa tput para limpiar la pantalla son [1]
poner claro
Otra operación es inicializar o restablecer el terminal a un estado predeterminado conocido (de atributos de caracteres, fuentes, colores, etc.). Los comandos para esto son: [9]
tput inicialización
y
Reinicio de tput
Normalmente, el comando tput utiliza el tipo de terminal especificado por la variable de entorno , una de las variables de entorno de control de la interfaz de terminal POSIX . Sin embargo, esto se puede anular para obligar a tput a buscar un tipo de terminal diferente en la base de datos, con una opción de línea de comandos para el comando. [1] Por ejemplo, para emitir la secuencia de reinicio adecuada para el tipo de terminal denominado "vt100" en la base de datos (normalmente un terminal DEC VT100 ), independientemente del tipo de terminal especificado en las variables de entorno, el comando es:TERM
tput -T vt100 restablecer