
¿Cómo puedo cambiar el color de fondo del terminal de una manera que utilice SÓLO el protocolo del terminal y no dependa de NINGUNA configuración (como en "perfiles") almacenada en un programa de terminal específico o del entorno en el que se ejecuta?
Quiero poder escribir un script que cambie de manera confiable el color de fondo del terminal para quien inicie sesión en la máquina usando un terminal y ejecute el script.
Una respuesta rápida y autorizada al efecto de "esto es imposible" será tan apreciada como una solución. Sin embargo, dicha respuesta sólo será aceptada por un experto que conozca exhaustivamente los protocolos de los terminales y pueda dar fe de la ausencia de dicha característica.
Respuesta1
Esto es imposible. No soy un experto que conozca a fondo los protocolos de terminales, pero sí soy consciente de la existencia de terminales que no tienen forma de cambiar el color de fondo. Este es el caso, por ejemplo, de terminales tontos como los proporcionados poresperaro por M-x shell
en Emacs. Este también es el caso de la mayoría de terminales de hardware, pero poca gente los utiliza hoy en día.
La mayoría de los emuladores de terminal tienen una forma de cambiar el color de fondo. Los emuladores de terminal en general copian xterm para la interfaz entre la aplicación y el terminal, por lo que cuando desee una característica como esta, pruebe la forma xterm y espere que funcione en algunos, pero no en todos, los emuladores de terminal. Busque elsecuencias de control xtermy ver si alguno se ajusta a lo que quieres.
Para cambiar el color de fondo de todo el terminal, existeOSC 11; color BEL
, es decir
printf '\e]11;%s\a' "$color"
Esto funciona en xterm, urxvt, gnome-terminal, konsole y lxterm, pero no en rxvt, xfce4-terminal, terminator o Emacs M-x term
. El cambio de color de fondo sobrevive a un reinicio del terminal. También puedes cambiar el color de primer plano reemplazándolo 11;
con 10;
.
Ese es el color de fondo predeterminado, por supuesto. En cualquier terminal que admita esta secuencia de escape, y en la mayoría de los demás terminales que admitan colores de alguna manera, puede cambiar el color de fondo para el texto que se muestra posteriormente con \e[41m
(para rojo).
Si la secuencia de escape no es compatible con una terminal, entonces no hay forma de averiguarlo. Puede intentar encontrar una secuencia de escape que consulte el terminal y que sea compatible con el mismo conjunto de terminales, pero normalmente no existe tal secuencia.
Cambiar a video inverso \e[?5h
probablemente funcione en la mayoría de los terminales, pero esto no sobrevive a un reinicio del terminal. Podrías hacer eso y luego establecer el color de primer plano, de esta manera habría un efecto visual en la mayoría de terminales.