Comprobando cuántos colores admite mi emulador de terminal

21

¿Hay alguna forma confiable de verificar cuántos colores admite mi emulador de terminal?

Si se echo $TERMimprime xterm, ¿eso me dice inequívocamente cuántos colores admite mi emulador de terminal? ¿Cómo podría verificar esta información de manera confiable?

Amelio Vazquez-Reina
fuente
44
Ver también: unix.stackexchange.com/questions/9957/…
jasonwryan

Respuestas:

20

El valor de $TERMno proporciona mucha información sobre la cantidad de colores admitidos. Muchos terminales se anuncian como xtermy pueden admitir cualquier cantidad de colores (2, 8, 16, 88 y 256 son valores comunes).

Puede consultar el valor de cada color con la OSC 4 ; c ; ? BEL secuencia de control . Si cse admite el número de color , y si el terminal comprende esta secuencia de control, el terminal responderá con el valor del color. Si el número de color no es compatible o si el terminal no comprende esta secuencia de control, el terminal no responde nada. Aquí hay un fragmento de bash / zsh para consultar si el color 42 es compatible (redirigir a / desde la terminal si es necesario):

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

Entre los terminales populares, xterm y los terminales basados ​​en la biblioteca VTE (Gnome-terminal, Terminator, Xfce4-terminal, ...) admiten esta secuencia de control; rxvt, konsole, screen y tmux no.

No sé de una manera más directa.

Gilles 'SO- deja de ser malvado'
fuente
Gracias @Gilles. Esto se ve genial. ¿Puedo preguntar qué read -d $'\a' -s -t 1hace?
Amelio Vazquez-Reina
1
@intrpc Lea la entrada hasta el primer \a(carácter de campana), sin hacer eco de entrada, con un tiempo de espera de 1 segundo.
Gilles 'SO- deja de ser malvado'
55
@ l0b0 tput colorsconsulta la base de datos terminfo. Lo más probable es que tengas TERM=xterm. Xterm puede admitir al menos 2, 8, 16, 88 o 256 colores según la versión y las opciones de compilación y tiempo de ejecución, pero la base de datos terminfo solo puede almacenar un valor. Puede configurar TERM=xterm+256color, por ejemplo , pero se molestará cuando inicie sesión en una máquina que no tiene esta entrada en su base de datos termcap / terminfo.
Gilles 'SO- deja de ser malvado'
2
@ l0b0 Su tubería obviamente no tiene nada que ver con el terminal. Necesita imprimir en la terminal ( printf … >/dev/tty) y luego leer desde la terminal ( read … </dev/tty). Xterm responde a la OSC 4; …; ? BELsecuencia inyectando teclas.
Gilles 'SO- deja de ser malvado'
9

Puedes usar

$ tput colors

En mi instalación de Debian, tput es parte del ncurses-binpaquete que se instala por defecto.

Victor Klos
fuente
66
Eso solo informará cuántos colores su terminal informa al medio ambiente TERM, no cuántos colores puede admitir si se le da un TERM
color