Selector de colores ANSI 256 | Toda la paleta xterm-256color en una pantalla
Una rejilla plana con los 256 colores que define xterm-256color: 16 colores del sistema, el cubo RGB 6×6×6 de 216 celdas y la rampa de 24 grises. Haz clic o escribe un índice 0-255 y la herramienta muestra el escape de primer plano \e[38;5;Nm, el de fondo \e[48;5;Nm, la forma bash $'...', la forma printf \033[...] y el reset \e[0m — cada uno en su propia fila con su propio botón de copiar, además de hex y RGB como información. Pensada para ese instante en el que estás afinando un colorscheme de Neovim, un starship.toml, la línea de estado de tmux o un tema de oh-my-zsh y no quieres saltar entre una chuleta y un PNG con la tabla de 256 colores.
💡 Sobre esta herramienta
La numeración de 256 colores no es nada intuitiva. Los índices 0-15 son los slots del "sistema", que cada emulador pinta de manera distinta. 16-231 es el cubo RGB, donde el índice se calcula como 16 + r·36 + g·6 + b con cada canal en {0,1,2,3,4,5}. 232-255 es una rampa de grises con valor 8 + 10·N. Las matemáticas son fáciles cuando ya las has leído, pero en la práctica — cuando quieres "un azul un poco más oscuro" o "un verde un punto más apagado" — calcular el índice a mano es la fricción que hace que mucha gente acabe usando hex truecolor.
Este selector despliega las 256 celdas en tres secciones para que elijas a ojo. La celda seleccionada lleva un contorno #ec1380, y dos franjas de previsualización muestran el color elegido: una como texto sobre fondo oscuro, otra como fondo relleno con texto en blanco o negro según la luminancia WCAG, para verificar el contraste antes de fijar el color en el tema. Si escribes un índice, la rejilla se sincroniza; si haces clic, el input numérico salta a esa posición. Hex, RGB y las cuatro formas de secuencia se actualizan a la vez.
Cada salida está en su propia tarjeta con botón de copia. Usa $'\e[38;5;Nm' cuando asignes a una variable bash o construyas un PS1 (bash interpreta la comilla ANSI-C). Usa \033[38;5;Nm dentro de cadenas de formato printf o en cualquier contexto POSIX sh. Deja \e[38;5;Nm desnudo para echo -e y similares. El reset \e[0m está en su propia fila para que lo cojas sin desplazarte.
🧐 Preguntas Frecuentes
P. ¿Por qué los índices 0-15 se ven diferentes en mi terminal?
Los slots 0-15 son la paleta del "sistema" que cada emulador sobreescribe con su tema. Solarized, Gruvbox, Tokyo Night y los esquemas por defecto de iTerm2 o Windows Terminal pintan estos slots de forma distinta. El selector muestra el default de xterm, que coincide con un xterm-256color puro pero no con tu emulador con tema cargado. Si necesitas colores portables entre temas, apunta a los índices 16-231 (cubo RGB) — esos slots están fijos.
P. ¿Qué diferencia hay entre \e[38;5;Nm y \033[38;5;Nm?
Ambos codifican el mismo byte de escape (0x1B). \e es una extensión que reconoce el quoting ANSI-C de bash ($'...') y zsh, mientras que \033 (octal) y \x1b (hex) son formas portables que entiende printf. Elige \e para scripts solo de bash, \033 para shell portable, y \x1b para lenguajes con escapes estilo C.
P. Existe truecolor de 24 bits. ¿Sigo necesitando los índices de 256?
Sí, cuando truecolor no es fiable. tmux por debajo de 2.2, screen, algunos saltos ssh y builds antiguos de Cygwin descartan la forma de 24 bits y caen al ANSI de respaldo. Si tu tema tiene que verse igual en un xterm-256color pelado y en una alacritty moderna, el índice de 256 colores es el mínimo común denominador. truecolor (\e[38;2;R;G;Bm) es para entornos donde ya has verificado COLORTERM=truecolor.
P. Mi PS1 se ve bien pero el cursor salta a la columna equivocada.
Bash usa la longitud en bytes para medir el prompt y cuenta las secuencias de escape como visibles a menos que las envuelvas en \[ y \]. Usa PS1='\[\e[38;5;82m\]\u@\h\[\e[0m\] ' (fíjate en los corchetes alrededor de la secuencia de color). zsh tiene el mismo problema y usa %{...%}. starship resuelve esto por ti, motivo por el que se ha vuelto tan popular.
P. ¿Cómo se decide si la previsualización de fondo lleva texto negro o blanco? Usa la luminancia relativa WCAG con umbral 0.5. Las celdas cuya luminancia linealizada está por encima de 0.5 reciben texto negro; el resto, texto blanco. Es una comprobación rápida de legibilidad, no una garantía colorimétrica — tu terminal real renderizará un poco distinto según GPU y perfil del monitor.
P. ¿Qué pasa si escribo 300 o -5 en el índice?
El selector recorta a [0, 255]. Un input no numérico se ignora silenciosamente (el parse falla y no se dispara ninguna actualización).
📚 Datos Curiosos
La extensión de 256 colores llegó con el parche #115 de xterm, allá por 1999, según las notas de Thomas Dickey. Hasta entonces solo existían los 8 colores ANSI (\e[30m–\e[37m) y el set "bright" 90-97. El empuje para 256 vino sobre todo de la comunidad emacs y Vim, que quería colorschemes más ricos que los 16 slots disponibles; tty-color-define de emacs es un par de años anterior a la extensión de xterm y fue la prueba de concepto que después los emuladores adoptaron.
Los niveles del cubo [0, 95, 135, 175, 215, 255] parecen raros porque no son equidistantes. Una distribución equidistante 0-51-102-153-204-255 cubriría mal el brillo percibido en sRGB, así que el cubo se afinó para tener más resolución en las sombras. La rampa de grises 232-255 sí es un 8 + 10·N regular, y por eso las líneas de estado de tmux y los fondos atenuados se agrupan alrededor de colour234–colour240. El que se escriba colour y no color en la configuración de tmux se suele atribuir al origen británico de Nicholas Marriott; color se acepta como alias por portabilidad, y ambas grafías siguen funcionando hoy.
Si quieres profundizar, la referencia canónica es XTerm Control Sequences (Dickey, edición continua) y la entrada xterm.terminfo de ncurses-term. La mayoría de chuletas modernas de terminal en internet derivan sus números de esos dos archivos.