<Anterior | Contenido | Siguiente>
Añadiendo color
La mayoría de los programas emuladores de terminal responden a ciertas secuencias de caracteres que no se imprimen para controlar cosas como los atributos de los caracteres (como el color, el texto en negrita y el temido texto parpadeante) y la posición del cursor. Cubriremos la posición del cursor en un momento, pero primero veremos el color.
Confusión terminal
En la antigüedad, cuando las terminales estaban conectadas a computadoras remotas, había muchas marcas de terminales en competencia y todas funcionaban de manera diferente. Tenían diferentes teclados y todos tenían diferentes formas de interpretar la información de control. Los sistemas Unix y similares a Unix tienen dos subsistemas bastante complejos para lidiar con la babel del control de terminal (llamado termcap y información terminológica). Si busca en los recovecos más profundos de la configuración de su emulador de terminal, puede encontrar una configuración para el tipo de emulación de terminal.
En un esfuerzo por hacer que los terminales hablen algún tipo de lenguaje común, el Instituto Nacional de Estándares de América (ANSI) desarrolló un conjunto estándar de secuencias de caracteres para controlar los terminales de video. Los antiguos usuarios de DOS recordarán AN-SI.SYS archivo que se utilizó para permitir la interpretación de estos códigos.
El color de los caracteres se controla enviando al emulador de terminal un Código de escape ANSI incrustado en el flujo de caracteres que se mostrarán. El código de control no se “imprime” en la pantalla, sino que el terminal lo interpreta como una instrucción. Como vimos en la tabla de arriba, el \[ y \] Las secuencias se utilizan para encapsular caracteres que no se imprimen. Un código de escape ANSI comienza con un octal 033 (el código generado por la tecla de escape), seguido de un atributo de carácter opcional, seguido de una instrucción. Por ejemplo, el código para establecer el color del texto en normal (atributo = 0), el texto negro es:
\ 033 [0; 30m
A continuación, se muestra una tabla de colores de texto disponibles. Observe que los colores se dividen en dos grupos, diferenciados por la aplicación del atributo de carácter en negrita (1) que crea la apariencia de colores “claros”:
Tabla 13-2: Secuencias de escape utilizadas para establecer colores de texto
Secuencia | Color del texto | Secuencia | Color del texto |
\ 033 [0; 30m | Negro | \ 033 [1; 30m | Gris oscuro |
\ 033 [0; 31m | Rojo | \ 033 [1; 31m | Luz roja |
\ 033 [0; 32m | Verde | \ 033 [1; 32m | Verde Claro |
\ 033 [0; 33m | Marrón | \ 033 [1; 33m | Amarillo |
\ 033 [0; 34m | Celeste | \ 033 [1; 34m | Azul celeste |
\ 033 [0; 35m | Lila | \ 033 [1; 35m | purpúreo claro |
Añadiendo color
\ 033 [0; 36m | Cian | \ 033 [1; 36m | Cian claro |
\ 033 [0; 37m | gris claro | \ 033 [1; 37m | Blanco |
Intentemos hacer un mensaje rojo. Insertaremos el código de escape al principio:
PS PS1 = "\ [\ 033 [0; 31 m \] <\ u @ \ h \ W> \ $"
PS
PS PS1 = "\ [\ 033 [0; 31 m \] <\ u @ \ h \ W> \ $"
PS
Eso funciona, pero observe que todo el texto que escribimos después del mensaje también es rojo. Para solucionar esto, agregaremos otro código de escape al final del mensaje que le dice al emulador de terminal que regrese al color anterior:
PS PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
PS
PS PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
PS
¡Eso es mejor!
También es posible establecer el color de fondo del texto utilizando los códigos que se enumeran a continuación. Los colores de fondo no admiten el atributo negrita.
Tabla 13-3: Secuencias de escape utilizadas para establecer el color de fondo
Secuencia | Color de fondo | Secuencia | Color de fondo |
\ 033 [0; 40m | Negro | \ 033 [0; 44m | Celeste |
\ 033 [0; 41m | Rojo | \ 033 [0; 45m | Lila |
\ 033 [0; 42m | Verde | \ 033 [0; 46m | Cian |
\ 033 [0; 43m | Marrón | \ 033 [0; 47m | gris claro |
Podemos crear un mensaje con un fondo rojo aplicando un simple cambio al primer código de escape:
PS PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~> $
PS PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~> $
¡Pruebe los códigos de color y vea lo que puede crear!
Nota: Además de los atributos de carácter normal (0) y negrita (1), al texto también se le pueden asignar atributos de subrayado (4), parpadeo (5) e inverso (7). Sin embargo, en aras del buen gusto, muchos emuladores de terminales se niegan a respetar el atributo de parpadeo.