¿Cómo darle a cada terminal virtual en GNU Screen su propio color de fondo?

1

Tengo un sueño: quiero que cada terminal virtual dentro de GNU Screen tenga su propio color de fondo único.

Creo que puedo fingirlo en un script .bashrc que emite códigos de control xterm para establecer el color de fondo basado en la variable $ WINDOW, pero esto no funcionará si inicio un proceso que no sea bash (es decir, si ejecuto " pantalla vi foo ").

¿Hay alguna forma más inteligente de lograr un cambio en el color de fondo cada vez que cambio terminales virtuales?

Jonathan Mayer
fuente

Respuestas:

0

Me encantaría que me demuestren lo contrario, pero no parece posible con los terminales vt100, que es lo que emula la pantalla, establecer su color de fondo predeterminado ; solo es posible, a través de una secuencia CSI, cambiar el color de fondo a su valor predeterminado. Sin embargo, es posible, siempre que su terminal host lo admita, enviar una secuencia de escape OSC para establecer el color de fondo predeterminado. Sin embargo, una consecuencia de establecer el color de fondo con este método significa que los cambios realizados en el color de fondo en otras ventanas de pantalla no se conservan. En otras palabras, si el color de fondo de la terminal host se cambia en una ventana de pantalla, entonces cambia a una ventana diferente y cambia el color de fondo predeterminado nuevamente, lo que ve cuando vuelve a la ventana de pantalla original es el color de fondo más reciente cambio.

El siguiente ejemplo .screenrc demuestra una prueba de concepto. Funciona para konsole pero no es práctico, ya que requiere que cada ventana esté siempre en un indicador de shell donde se pueda enviar la secuencia adecuada.

# start a few screen windows
screen 0
screen 1
screen 2
screen 3

# set up key bindings to set the host terminal bg color when you switch windows
# spawn the echo in a subshell to avoid displaying single quote/also need to quote the trailing backslash
bind 0 eval "select 0" "stuff \"(echo -n $'\eP\e]11;navy\cg\e\134\134\134\134') \012\""
bind 1 eval "select 1" "stuff \"(echo -n $'\eP\e]11;forestgreen\cg\e\134\134\134\134') \012\""
bind 2 eval "select 2" "stuff \"(echo -n $'\eP\e]11;slategray\cg\e\134\134\134\134') \012\""
bind 3 eval "select 3" "stuff \"(echo -n $'\eP\e]11;purple\cg\e\134\134\134\134') \012\""

# switch to the first window and set the background color to blue
eval "select 0" "stuff \"(echo -n $'\eP\e]11;navy\cg\e\134\134\134\134') \012\""

Para los colores admitidos, consulte la documentación de Qt

Mover
fuente