Secuencias de escape ANSI: Colores y atributos en la consola

per Victor Carceler darrera modificació 2020-03-31T12:34:40+01:00

Las secuencias de escape ANSI permiten enviar información de control a la consola para cambiar los atributos del texto representado.

Así es posible seleccionar:

  1. El estilo del texto: normal, claro, subrayado, parpadeante, inverso y oculto
  2. El color del fondo
  3. El color del texto

El funcionamiento es muy sencillo, entre la información que se envía de salida a la consola, se incluyen las secuencias de escape dando instrucciones de cómo se ha de representar el texto a continuación.

Por ejemplo, si con printf se vuelca "Palabra %sresaltada%s" insertando en el primer %s la cadena de control para hacer que el texto sea verde, el texto que se escribe a continuación ('resaltada') tendrá color verde. En el último %s se debería introducir la secuencia de escape para volver a la normalidad. De no ser así, toda salida posterior sería de color verde !!!

Sintáxis:

Las secuencias de escape se pueden utilizar desde cualquier script o programa que envíe información a la consola. Por ejemplo, en C podríamos definir las siguientes secuencias:

  1. const char *const normal = "\033[0m";
  2. const char *const verde = "\033[0;40;32m";
  3. const char *const subrayado_fazul_verde = "\033[4;44;32m";

La primera selecciona el estilo, fondo y color de texto normal. Es la cadena que deberiamos utilizar para terminar los efectos anteriormente aplicados. La segunda cadena determina que el color de texto sea verde. La tercera cadena determina que el texto ha de estar subrayado, ser de color verde y estar sobre fondo azul.

La sintáxis sería: "\033[x;xx;xxm" dónde cada 'x' representa un dígito.

El primer dígito especifica el estilo:

  • 0 -> Normal
  • 1 -> Claro (el color se diluye, permite hacer dos tonos de cada color: azul/azulclaro, rojo/rojoclaro...)
  • 4 -> Subrayado
  • 5 -> Parpadeante
  • 7 -> Inverso
  • 8 -> Oculto (Pensado para pedir contraseñas al usuario)

Los códigos para especificar un color (para el texto o el fondo) utilizan dos dígitos. Dá igual en qué orden se especifique el fondo y el texto, existen distintos código. A continuación muestro la lista de códigos para el texto, para el fondo serían los mismos sumando 10 (fondo verde: 42, fondo marrón: 43 ...).

Lista de colores de texto utilizando combinaciones con el atributo claro:

  • 30 -> Negro
  • 1;30 -> Gris oscuro
  • 31 -> Rojo
  • 1;31 -> Rojo claro
  • 32 -> Verde
  • 1;32 -> Verde claro
  • 33 -> Marrón
  • 1;33 -> Marrón claro
  • 34 -> Azul
  • 1;34 -> Azul claro
  • 35 -> Púrpura
  • 1;35 -> Púrpura claro
  • 36 -> Cyan
  • 1;36 -> Cyan claro
  • 37 -> Gris claro
  • 1;37 -> Blanco

Ejemplo en C:

Un ejemplo en C que muestra dos líneas con la palabra 'colores' decorada. En la primera línea la palabra es de color verde, en la segunda el texto es verde, sobre fondo azul y está subrayado.

#include 

int main(void)
{
const char *const verde = "\033[0;40;32m";
const char *const subrayado_fazul_verde = "\033[4;44;32m";
const char *const normal = "\033[0m";

printf("Mostrando %scolores%s !!!\n", verde, normal);
printf("Mostrando %scolores%s !!!\n", subrayado_fazul_verde, normal);

return 0;
}