¿Cómo habilitar la salida de color rgb en la terminal?

¿Cómo habilitar la salida de color rgb en la terminal?

Estoy intentando imprimir una cadena de color en un terminal gnome usando códigos de escape ANSI, pero, aunque funciona para los colores personalizados, o incluso los 256 colores adicionales, no funciona con códigos RGB.

Entonces, simplificando:

cout << "\033[33m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;5;135m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;2;0;135;0m" << '.' << "\033[0m"; # doesn't work, prints with default color

¿Cómo puedo generar algo con un código de color RGB en gnome-terminal?

Estoy siguiendo este enlace para ver los resultados:Código de escape ANSI de Wikipedia.

Yo añadí:

$ export TERM=xterm-256color

A mi archivo .bashrc para admitir 256 colores y:

$ tput colors

Salidas 256, si eso es importante.

Respuesta1

Los colores RGB no se pueden utilizar en el terminal por estos motivos:

  • Bash no elige los colores de la línea de comando.
  • Bash sólo puede especificar colores ANSI.

Las dos razones anteriores están muy estrechamente relacionadas. La mayoría de estos dependen de su pantalla y de la especificación de color ANSI. Si utiliza un buen emulador de terminal, es posible que pueda configurar colores RGB personalizados para ciertos códigos de color ANSI.

Bash como shell no tiene poder sobre lo que la pantalla puede hacer con las pantallas. Solo pasa las palabras del terminal a su pantalla. La pantalla puede decidir qué hacer con él. La pantalla puede decidir qué colores representan los códigos de escape ANSI (si es que el terminal permite colores).

Una solución alternativa es cambiar las especificaciones de color del terminal. Sin embargo, muy pocos (no conozco ninguno) te permitirán cambiar de color.

Respuesta2

Necesita vte >= 0.36 para que los colores verdaderos funcionen en gnome-terminal. Asegúrese de que su vte sea lo suficientemente reciente y, en ese caso, su código debería funcionar.

(Nota: cuando genera cadenas codificadas, como lo hace en su aplicación de ejemplo, el valor de $TERM es necesariamente absolutamente irrelevante. Solo importa si está utilizando bibliotecas cuyo comportamiento depende de esto, como ncurses).

información relacionada