Códigos ANSI: cómo funcionan y por qué siguen vigentes casi 50 años después

Fuentes: There's no escaping it: an exploration of ANSI codes
Imagen generada por IA con el prompt: Retro CRT terminal screen displaying colorful ANSI escape codes: bold red and green text, a moving progress bar, and cursor positioning, dark background with soft phosphor glow, no text or logos
Imagen generada con IA

Los códigos de escape ANSI son un estándar de casi 50 años que continúa controlando cómo los terminales muestran formato de texto, colores y movimientos del cursor. Surgido en 1979, el estándar nació como respuesta a las limitaciones de los primeros terminales "tontos": monitores CRT conectados a mainframes mediante cables serie, capaces únicamente de procesar flujos de texto plano carácter a carácter.

La base técnica es sencilla. Cada secuencia de escape arranca con el carácter ESC (ASCII 27, o \x1b) seguido de un corchete izquierdo, que en conjunto forman el Control Sequence Introducer (CSI). Tras este prefijo llega el comando en cuestión. Ejemplos habituales son \x1b[31m para texto rojo, \x1b[1m para negrita, \x1b[0m para restablecer el formato, \x1b[2J para borrar la pantalla y \x1b[H para situar el cursor en la esquina superior izquierda. Varios atributos se combinan con punto y coma, de modo que \x1b[1;31m produce texto rojo en negrita. La letra "m" final designa el comando Select Graphic Rendition (SGR), responsable de todas las operaciones de estilo. La especificación original definía 8 colores, pero los terminales modernos la han ampliado: el modo de 256 colores recurre a códigos como \x1b[38;5;208m, mientras que el soporte RGB real de 24 bits adopta la forma \x1b[38;2;255;128;0m.

A pesar de su antigüedad, el estándar sigue siendo la columna vertebral de la interacción con la CLI. La salida coloreada de los comandos, los indicadores de progreso y los prompts de shell personalizados dependen de los códigos ANSI. Bibliotecas como Spectre.Console en .NET y chalk en Node exponen utilidades que se apoyan en el estándar y permiten patrones sofisticados como spinners y edición de contenido en sitio mediante manipulación del cursor. El comando aspire deploy ilustra cómo componer esos elementos en interfaces vistosas. Aplicaciones a pantalla completa como Vim y htop llevan el estándar más lejos, empleando secuencias de posicionamiento como \x1b[10;20H para construir interfaces sorprendentemente elaboradas únicamente a partir de flujos de texto.

El artículo incluye un widget interactivo para experimentar con distintas secuencias y observar su renderizado en tiempo real. La autora, Safia Abdalla, explica que el widget fue desarrollado en gran parte con ayuda de IA, y que su aportación principal se centró en el diseño de la experiencia.