También disponible en: English · Português · Français · العربية
Códigos de escape ANSI: qué hace cada uno y qué estándar lo define
Pega salida coloreada para verla renderizada y explicada, o construye una secuencia y mira cómo divergen las dos grafías del mismo color.
Qué son los códigos de escape ANSI
Una secuencia de escape es una tira de caracteres corrientes que la terminal lee como una instrucción en vez de imprimirla. Casi todas las que uno se encuentra empiezan por el carácter de escape seguido de un corchete de apertura, luego unos números y luego una letra que dice qué significaban esos números. Cuando esa letra final es m, la secuencia es SGR —Select Graphic Rendition— y los números son los códigos de color y atributo que todo el mundo llama códigos de color ANSI.
El mecanismo es simple y con estado: un código enciende algo y sigue encendido hasta que otro lo apaga. Por eso olvidar el reinicio al final de una cadena coloreada deja el resto del prompt del color equivocado, y por eso los códigos casi siempre se escriben por parejas.
Lo que no es simple es de dónde vienen. Todo lo que se publica sobre ellos los presenta en una única tabla plana, y son tres estándares vestidos con una sola sintaxis. Los colores y atributos normales son de ECMA-48. Los colores brillantes son una extensión del aixterm de IBM. Los códigos de 256 colores y de color verdadero salen de ISO 8613-6, y la referencia de xterm los describe como marcados en la quinta edición de ECMA-48 como reservados para futura normalización: o sea que los dos códigos a los que más recurre cualquiera están, en el estándar que todo el mundo cita para ellos, reservados y no definidos.
Cómo se usa
- Pega salida de terminal o elige un ejemplo. Los ejemplos cubren un log de compilación, el mismo color escrito de la forma estándar, brillantes frente a normales, una secuencia totalmente portable y otra con dos cosas mal.
- Lee la vista previa y la tabla de códigos. La vista previa muestra lo que dibujaría una terminal. Debajo aparece cada código SGR encontrado con el estándar que lo define y lo que significa, y las notas explican lo que conviene saber de lo que has pegado.
- Construye una y compara las grafías. Activa negrita, cursiva y subrayado, pon un color, y la misma instrucción aparece dos veces: una con dos puntos y otra con punto y coma. Significan lo mismo y no son intercambiables.
El separador que nadie escribe de la forma estándar
Los códigos de color extendido llevan subparámetros: 38 dice que viene un color de frente, luego 5 y un índice de la paleta de 256, o 2 y tres valores de canal para color verdadero. La referencia de xterm escribe esos subparámetros separados por dos puntos, y dice sin rodeos que admite tanto los dos puntos, que llama estándar, como el punto y coma, que llama heredado. Todos los tutoriales, todas las bibliotecas y todas las herramientas emiten la forma con punto y coma.
No es una cuestión de gusto, y el coste recae sobre la que elijas. Leyendo el código de los dos renderizadores de JavaScript más usados para esto, ambos parten los parámetros solo por el punto y coma —uno hace un split directo, el otro recorta los punto y coma finales y parte igual— y ninguno contiene dos puntos en ninguna parte de su tratamiento de parámetros. Así que la grafía que la referencia llama estándar es exactamente la que esas bibliotecas descartan en silencio: el color desaparece y el texto se dibuja sin estilo, sin ningún error por ningún lado.
Hay una segunda víctima en la misma línea. La forma con dos puntos del color verdadero lleva un identificador de espacio de color antes del valor de rojo, que se escribe normalmente vacío, de modo que la grafía completa tiene un hueco que parece una errata. La forma con punto y coma no tiene hueco alguno para ese campo, y por eso casi nadie sabe que existe.
El resumen honesto es que no hay ninguna grafía que sea a la vez estándar y ampliamente admitida, y por eso esta página te dice qué compromiso está haciendo tu secuencia en lugar de decirte que una de las dos es la correcta. Si escribes para una terminal, la forma con punto y coma es la que esperan las terminales. Si escribes para una especificación, la forma con dos puntos es la que dice.
Lo que esta página no puede decirte
Los primeros dieciséis colores no los fija nada. Los códigos del 30 al 37 nombran un color, no un valor: cómo se ve realmente el rojo es lo que ponga el tema de la terminal de quien mira, y la misma salida es una imagen distinta en dos ventanas contiguas. La vista previa de aquí usa un juego habitual para que haya algo que mirar, y eso es una demostración, no una respuesta. Del índice 16 en adelante la cosa cambia: el cubo de 216 colores y la rampa de 24 grises están definidos por aritmética, así que esos sí son exactos.
La frase sobre reservados para futura normalización es la caracterización que hace xterm de ECMA-48, no una cita de ECMA-48. ECMA-48 se publica como un PDF que se ha resistido a la extracción de texto todas las veces que se ha intentado aquí, así que en lugar de parafrasear un documento que no se ha podido leer, la atribución se queda donde puede comprobarse: con la referencia que hace la afirmación.
Solo se interpreta SGR. Una secuencia que mueve el cursor, limpia la pantalla o pone el título de la ventana se reconoce, se señala y se deja en paz, porque renderizarla significaría simular una terminal entera en vez de explicar un código de color. Las secuencias que no empiezan por el par escape y corchete —los viejos controles de un solo carácter y las órdenes al sistema operativo que ponen un título— quedan fuera de lo que esto lee.
Por último, esto describe qué significan los códigos, no qué hace con ellos tu terminal concreta. El parpadeo se ignora casi en todas partes. Lo tenue lo ignoran unas y otras lo dibujan como un color más apagado. El subrayado doble es irregular. Una terminal puede no hacer absolutamente nada con un código que no implementa, y la mayoría hace exactamente eso, en silencio.
¿Por qué es gratis?
Analizar secuencias de escape es manejo de cadenas y corre en tu navegador. No hay servidor en medio, así que no hay nada que cobrar ni cuenta que crear.
No se sube nada, lo que aquí importa más de lo habitual: la salida de terminal que uno pega suele llevar rutas, nombres de máquina y algún que otro token. Recarga la página y lo habrá olvidado todo.