Como dar a cada terminal virtual no GNU Screen sua própria cor de fundo?

1

Eu tenho um sonho: eu quero que cada terminal virtual dentro do GNU Screen tenha sua própria cor de fundo única.

Acho que posso falsificá-lo em um script .bashrc que emite códigos de controle xterm para definir a cor de fundo com base na variável $ WINDOW - mas isso não funcionará se eu iniciar um processo não-bash (ou seja, se Eu corro "screen vi foo").

Existe uma maneira mais inteligente de realizar uma mudança na cor de fundo toda vez que eu alternar os terminais virtuais?

    
por Jonathan Mayer 21.08.2014 / 21:37

1 resposta

0

Eu adoraria ser provado errado, mas não parece possível com terminais vt100, que é o que a tela emula, para definir sua cor de fundo padrão ; só é possível, por meio de uma sequência CSI, alterar a cor do plano de fundo para seu valor padrão. É possível, no entanto, fornecer ao seu terminal host o suporte, para enviar uma sequência de escape do OSC para definir a cor de fundo padrão. Uma conseqüência da configuração da cor do plano de fundo com este método significa que as alterações feitas na cor do plano de fundo em outras janelas de tela não serão preservadas. Em outras palavras, se a cor de fundo do terminal do host for alterada em uma janela de tela, você alterna para uma janela diferente e altera a cor de fundo padrão novamente, o que você vê quando volta para a janela de tela original é a cor de fundo mais recente mudar.

O exemplo a seguir .screenrc demonstra uma prova de conceito. Ele funciona para o konsole, mas não é prático, pois requer que cada janela esteja sempre em um prompt de shell, no qual a seqüência apropriada pode ser enviada.

# 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\e4444') 2\""
bind 1 eval "select 1" "stuff \"(echo -n $'\eP\e]11;forestgreen\cg\e4444') 2\""
bind 2 eval "select 2" "stuff \"(echo -n $'\eP\e]11;slategray\cg\e4444') 2\""
bind 3 eval "select 3" "stuff \"(echo -n $'\eP\e]11;purple\cg\e4444') 2\""

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

Para as cores compatíveis, consulte a documentação do Qt

    
por 08.09.2014 / 05:08