¿Cómo puedo salida de diferentes tonos de verde al terminal?
-
26-09-2019 - |
Pregunta
Actualmente estoy usando el siguiente código al texto de salida en verde al terminal:
printf("%c[1;32mHello, world!\n", 27);
Sin embargo, quiero más tonos de verde. ¿Cuál es la forma más fácil de lograr esto?
Solución
Puede utilizar el href="http://www.robmeerman.co.uk/_media/unix/256colors2.pl" rel="nofollow noreferrer"> 256colors2.pl guión sitio de Rob Meerman para asegurarse de que sus manijas terminales 256 colores correctamente. A continuación, elija la combinación correcta de los valores RGB para darle el tono adecuado de color verde.
Sobre la base de su guión, parece que los números de color son esencialmente un desplazamiento de un esquema de color de base 6:
COLOR = r*6^2 + g*6 + b) + 16
Y para el color de primer plano que necesitamos para el uso:
\x1b[38;5;${COLORNUM}m
Y de nuevo sobre la base de su guión, aquí hay un bucle (Perl) que muestra la letra O en el color deseado:
# now the color values
for ($green = 0; $green < 6; $green++) {
for ($red = 0; $red < 6; $red++) {
for ($blue = 0; $blue < 6; $blue++) {
$color = 16 + ($red * 36) + ($green * 6) + $blue;
print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m ";
print "\n" if ($blue == 2 || $blue == 5);
}
}
print "\n";
}
Y aquí está una muestra de su producción:
Nota ??em> Charles parece un poco más sobre cómo funciona realmente y lo que tendrá que hacer para verificar que el la concha es compatible con las capacidades requeridas. Mi información se basa estrictamente en la observación y pruebas con una cáscara conocido para apoyar 256 colores (Konsole).
Otros consejos
La forma de hacerlo depende de su terminal. Es posible que debería ser capaz de consultar una base de datos termcap o terminfo para averiguar cómo.
Esto es más fácil de demostrar con algunos comandos tput
.
por ejemplo. en mi terminal actual:
tput initc 2 500 900 100
tput setaf 2
define el color 2 para ser un tono de verde (los parámetros son valores RGB entre 0 y 1000) y conmuta el primer plano a este color.
Para ver la secuencia de caracteres necesarios en un programa C
para sus terminales dados se pueden mostrar las capacidades con infocmp
.
por ejemplo. (Para mi terminal)
$ infocmp -1 | grep initc
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
$ infocmp -1 | grep setaf
setaf=\E[38;5;%p1%dm,
El %
parametro el formato es un poco (muy bien) para analizar dolorosa, pero se documenta en la página del manual infocmp
. Traduciendo esto a printf
cadena de formato no es demasiado difícil.
Esto puede ayudarle a:
http://en.wikipedia.org/wiki/ANSI_escape_code
Puede realmente sólo conseguir 2 diferentes tonos de cada color. Trate de reemplazar el 1 con un 2 para obtener verde oscuro.