miércoles, 27 de enero de 2016

Añadiendo color

La mayoría de los programas emuladores de terminal responden a ciertas secuencias de caracteres no imprimibles para controlar cosas como atributos de caracteres (color, negritas y pavorosos textos parpadeantes) y posiciones del cursor. Veremos la posición del cursor en un rato, pero primero veamos el color.

El color de los caracteres se controla enviando al emulador de terminal un código de escape ANSI incluido en la cadena de caracteres a mostrar. El código de control no se “imprime” en la pantalla, en su lugar es interpretado por la terminal como una instrucción. Como vimos en la tabla anterior, las secuencias \[ y \] se usan para encapsular caracteres no imprimibles. Un código de escape ANSI comienza con un octal 033 (el código generado por la tecla escape), seguido, opcionalmente, de un atributo de carácter, seguido por una instrucción. Por ejemplo, el código para establecer el color del texto a texto negro normal (atributo = 0), es:

\033[0;30m

Aquí tenemos una tabla con los colores disponibles. Fíjate que los colores se dividen en dos grupos, diferenciados por la aplicación del atributo de carácter negrita (1) que crea la apariencia de colores “luminosos”:

Tabla 17-2: Secuencias de escape usadas 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 Rojo claro
\033[0;32m Verde \033[1;32m Verde claro
\033[0;33m Marrón \033[1;33m Amarillo
\033[0;34m Azul \033[1;34m Azul claro
\033[0;35m Morado \033[1;35m Morado claro
\033[0;36m Cían \033[0;36m Cían claro
\033[0;37m Gris claro \033[0;37m Blanco

Probemos un prompt rojo. Insertaremos el código de escape al principio:

<me@linuxbox ~>$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
<me@linuxbox ~>$

Funciona, pero fíjate que todo el texto que escribamos tras el prompt también es rojo. Para arreglarlo, añadiremos otro código de escape al final del prompt que le diga al emulador de terminal que vuelva al color previo:

<me@linuxbox ~>$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\]"
me@linuxbox ~>$

¡Así está mejor!

También es posible establecer el color de fondo usando los códigos listados a continuación. Los colores de fondo no soportan el atributo negrita.

Tabla 13-3: Secuencias de escape usadas para establecer el color de fondo
Secuencia Color de fondo Secuencia Color de fondo
\033[0;40m Negro \033[0;44m Azul
\033[0;41m Rojo \033[0;45m Morado
\033[0;42m Verde \033[0;46m Cían
\033[0;43m Marrón \033[0;47m Gris claro

Podemos crear un prompt con un fondo rojo aplicando un simple cambio al primer código de escape:

<me@linuxbox ~>$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\]"<me@linuxbox ~>$

Prueba los códigos de color y ¡Mira lo que puedes crear!

Nota: Además de los atributos de carácter normal (0) y negrita (1), el texto también tiene atributos para subrayado (4), parpadeante (5) e invertido (7). En beneficio del buen gusto, muchos emuladores de terminal rechazan el honor de tener el atributo parpadeante.

No hay comentarios:

Publicar un comentario