Estoy en el proceso de colorear mi terminal PS1
.
Estoy configurando variables de color usando tput
; por ejemplo, aquí está el morado:
PURPLE=$(tput setaf 125)
Pregunta:
¿Cómo encuentro los códigos de color (p 125
. Ej. ) De otros colores?
¿Hay alguna guía de tabla de colores / hoja de trucos en alguna parte?
No estoy seguro de qué 125
es ... ¿Hay alguna forma de tomar un color hexadecimal y convertirlo en un número que setaf
pueda usar?
Respuestas:
El recuento de colores disponibles para tput viene dado por
tput colors
.Para ver los 8 colores básicos (como los utilizados
setf
en el terminal urxvt ysetaf
en el terminal xterm):Y generalmente se llama así:
Para ver los 256 colores extendidos (como los utilizados
setaf
en urxvt):Si desea números y una salida ordenada:
Los 16 millones de colores necesitan bastante código (algunas consolas no pueden mostrar esto).
Lo básico es:
fb
esfront/back
o3/4
.Una prueba simple de la capacidad de su consola para presentar tantos colores es:
Presentará una línea roja con un cambio de tono muy pequeño de izquierda a derecha. Si ese pequeño cambio es visible, su consola es capaz de 16 millones de colores.
Cada uno
r
,g
yb
es un valor de 0 a 255 para RGB (rojo, verde, azul).Si su tipo de consola admite esto, este código creará una tabla de colores:
Para convertir un valor de color hexadecimal a un índice de color 0-255 (más cercano):
Úselo como:
Para encontrar el número de color como se usa en formato de colores HTML :
Úselo como ("básico" son los primeros 16 colores, "color" es el grupo principal, "gris" son los últimos colores grises):
fuente
fromhex
. ¡Gracias de nuevo! Además, agregué un cheque para el#
. ¿Realimentación?hex=${1#"#"}
. No eliminará nada si$1
no tiene un#
, y lo eliminará si existe. Ver mi código actualizado.\e[0;%s8;2;%s;%s;%sm
, no me da 16 millones de colores, solo el color en la paleta de 240 colores más cercano al rgb solicitado.La respuesta corta es que puede encontrar en la web tablas de colores y combinarlas con el número de color.
La respuesta larga es que la asignación correcta depende del terminal:
El
125
es un parámetro para una secuencia de escape denominadasetaf
en la descripción del terminal.tput
no atribuye ningún significado particular al número. Eso realmente depende del emulador de terminal particular.Hace un tiempo, ANSI definió códigos para 8 colores, y había dos esquemas para numerarlos. Los dos se ven en algunas descripciones terminales como los pares
setf/setb
osetaf/setab
. Como este último tiene la connotación de "colores ANSI", verá que se usa con más frecuencia. El primero (setf / setb) cambió el orden de rojo / azul como se indica en las preguntas frecuentes de ncurses ¿Por qué se intercambian rojo / azul? , pero en cualquier caso, el esquema se estableció solo para numerar los colores. No existe una relación predefinida entre esos números y el contenido RGB.Para emuladores de terminal específicos, hay paletas de colores predefinidas que se pueden enumerar con bastante facilidad y se pueden programar utilizando estas secuencias de escape. No hay estándares relevantes, y verá diferencias entre los emuladores de terminal, como se señala en las preguntas frecuentes de xterm . No me gusta ese tono de azul .
Sin embargo, la convención a menudo se confunde con los estándares. En el desarrollo de xterm en los últimos 20 años, incorporó colores ANSI (8), adaptó la
aixterm
función (16) colores, agregó extensiones para 88 y 256 colores. Gran parte de eso ha sido adoptado por otros desarrolladores para diferentes emuladores de terminal. Esto se resume en las preguntas frecuentes de xterm ¿Por qué no hacer que "xterm" se equipare a "xterm-256color"? .El código fuente de xterm incluye scripts para demostrar los colores, por ejemplo, usando las mismas secuencias de escape que
tput
usaría.También puede encontrar útil esta pregunta / respuesta: valores RGB de los colores en el índice de colores extendidos de Ansi (17-255)
fuente
La
tput
utilidad está utilizando una tabla de búsqueda de 256 colores para imprimir secuencias de escape ANSI de 8 bits (comenzando con Escy[
) que hace uso de capacidades de terminal , por lo que estas secuencias de control pueden interpretarse como colores. Estos son un conjunto predefinido de 256 colores que se usan comúnmente en las tarjetas gráficas.Para imprimir los 256 colores en el terminal, intente con la siguiente línea:
Sugerencia: agregue
| column
a la lista de columnas.Esta tabla de búsqueda de 256 colores también se puede encontrar en la página de Wikipedia de la siguiente manera:
fuente
Con zsh y en un
xterm
terminal similar (xterm
yvte
terminales basados comognome-terminal
,xfce4-terminal
... al menos), puede hacer:El equivalente bash:
(desea que la secuencia de escape consulte el color que se enviará después de que
echo
se deshabilite la disciplina del terminal (con-s
) de lo contrario, la disciplina de la línea mostrará la respuesta la mitad del tiempo, de ahí el envío como parte de laread
solicitud (var?prompt
en zsh como en ksh,-p prompt
en bash)).para obtener la definición del color 125 (aquí como una especificación RGB, cada número es la intensidad de los componentes rojo, verde y azul como un número hexadecimal entre 0 y FFFF).
Puede hacer lo mismo para los primeros 16 colores con el
xtermcontrol
comando:fuente
tput colors
informa solo8
si la terminal es capaz de presentar 256 colores. Además, el xterm-color (Konsole)tput colors
solo informa8
incluso si ese terminal es totalmente capaz de presentar 16 millones de colores (y los 256 colores, por supuesto). Y no, no hay tmux o pantalla que pueda "colorear" :-) (cambio) los resultados (estaba al tanto de ese detalle). En resumen: su código puede fallar en algunos terminales / consolas.Colores ANSI en término de consola
Según el protocolo de término que utilice su consola, la secuencia podría ser:
\e[38;5;XXXm
o\e[3XXXm
dondeXXX
corresponda al número ansi.Para asegurarse de usar la secuencia ANSI correcta, debe usarla
tput
.Con respecto al código de escape ANSI de Wikipedia , escribí esto:
Podría representar algo como:
... Entonces, como odio ejecutar más de 200 tenedores en un pequeño script, escribí esto:
¡Con solo 1 tenedor! ¡El mismo resultado, pero mucho más rápido!
fuente