Quiero saber si hay alguna forma de verificar si mi programa puede generar salida de terminal usando colores o no.
Ejecutando comandos como less
y mirando la salida de un programa que sale usando colores, la salida se muestra mal, como
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Gracias
Respuestas:
¿En qué idioma escribe su solicitud?
El enfoque normal es verificar si el dispositivo de salida es un tty, y si es así, verificar si ese tipo de terminal admite colores.
En
bash
, eso se vería comoEn C, debe escribir mucho más, pero puede lograr el mismo resultado utilizando isatty y las funciones enumeradas en
man 3 terminfo
.fuente
Esto debería ser suficiente:
colores de tput explicados:
Si miras la página de manual, notarás esto:
Y...
El termcap
colors
está en la base de datos terminfo, por lo que puede solicitarlo. Si tiene un estado de salida cero, entonces se compila el termcap. Pero si tiene algo como:Esto muestra que unknowntermcap no existe. Así que esto:
Muestra que tu comando era correcto.
Otras formas útiles:
Salud
fuente
colors
no está documentado en latput
página del manual (!), entonces ¿debería buscar un número> = 8 en stdout o un código de retorno de 0?colors
capacidad está documentada en terminfo (5) . Las pruebas utilizandotput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
sugiere valores comunes son-1
(sin soporte de color) y8
(8 colores). Tenga en cuenta que esto solo se aplica después de comprobar que el dispositivo de salida es un terminal (p . Ej.[ -t 1 ]
Oisatty
).tput colors
devuelve lo que la base de datos del terminal local piensa del terminal. Esto puede corresponder o no a lo que el terminal realmente puede hacer, especialmente para un tipo de terminal como elxterm
que viene en muchas variantes (que van desde el blanco y negro hasta los 256 colores).Para este caso de uso, lo que suelen hacer los programas (por ejemplo, GNU ls o GNU grep con
--color=auto
) es usar colores si su salida va a un terminal, y no hay colores de otro modo. Los terminales que no admiten secuencias de cambio de color ANSI son lo suficientemente raros como para que sea aceptable hacer que sus usuarios anulen la opción predeterminada. En cualquier caso, asegúrese de que su aplicación tenga la opción de activar o desactivar los colores.En un script de shell, use
[ -t 1 ]
para probar si la salida estándar es un terminal.Desde un programa que usa la API C, llame
isatty(1)
.fuente
Intenta usarlo
less --RAW-CONTROL-CHARS
.En este ejemplo estoy usando logtool , que imprime la salida usando colores.
Sin --RAW-CONTROL-CHARS:
Con --RAW-CONTROL-CHAR (Imagine que esto está en bonitos colores. Además, no estoy seguro de por qué
^G
se está mostrando eso ):fuente
Eso sería culpa de
less
no estar configurado para interpretar escapes de ANSI; buscarR
en$LESSOPTS
. En cuanto a determinar si el sistema sabe que su terminal puede manejar colores,tput colors
generará la cantidad de colores que admite o-1
si no admite colores. (Tenga en cuenta que algunos terminales pueden usar enxterm
lugar dexterm-color
como su descripción de terminal, pero aún admiten colores).fuente
Si desea agregar color a la salida, pero solo cuando los colores son compatibles, simplemente puede usar
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlfuente