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?

¿Fue útil?

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:

Captura muestras mostrando valor de color

Nota 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top