Alterar o plano de fundo do terminal do script bash na plataforma, maneira independente do ambiente de área de trabalho?

1

Como posso alterar a cor de fundo do terminal de uma maneira que utilize APENAS o protocolo do terminal e não dependa de QUALQUER configuração (como em "perfis") armazenados em um programa terminal específico ou no ambiente em que está sendo executado?

Eu quero ser capaz de escrever um script que mude de forma confiável a cor de fundo do terminal para quem quer que faça o login na máquina usando um terminal e execute o script.

Uma resposta rápida e autoritária ao efeito de "isso é impossível" será tão apreciada quanto uma solução. Tal resposta, no entanto, somente será aceita por um especialista que conheça exaustivamente os protocolos terminais e possa atestar a ausência de tal característica.

    
por Szczepan Hołyszewski 26.04.2017 / 20:51

1 resposta

2

Isso é impossível. Eu não sou um especialista que conhece protocolos de terminal de forma exaustiva, mas estou ciente da existência de terminais que não têm como alterar a cor de fundo. Este é o caso, por exemplo, de terminais burros como os fornecidos por esperados ou por M-x shell no Emacs. Este também é o caso da maioria dos terminais de hardware, mas poucas pessoas usam esses recursos hoje em dia.

A maioria dos emuladores de terminal tem uma maneira de alterar a cor do plano de fundo. Emuladores de terminal em geral copiam o xterm para a interface entre o aplicativo e o terminal, portanto, quando você quiser um recurso como este, tente a maneira xterm e espere que ele funcione em alguns, mas não em todos os emuladores de terminal. Procure as seqüências de controle xterm e veja se elas se encaixam no que você deseja.

Para alterar a cor de fundo de todo o terminal, há OSC 11; color BEL , ou seja,

printf '\e]11;%s\a' "$color"

Isso funciona em xterm, urxvt, gnome-terminal, konsole e lxterm, mas não em rxvt, xfce4-terminal, terminator ou Emacs M-x term . A mudança de cor de fundo sobrevive a uma reinicialização do terminal. Você também pode alterar a cor do primeiro plano substituindo 11; por 10; .

Essa é a cor de fundo padrão, é claro. Em qualquer terminal que suporte essa seqüência de escape e na maioria dos outros terminais que suportam cores de qualquer maneira, você pode alternar a cor de segundo plano para o texto exibido subseqüentemente com \e[41m (para vermelho).

Se a sequência de escape não for suportada em um terminal, você não terá como descobrir. Você pode tentar encontrar uma seqüência de escape que consulte o terminal e que seja suportada no mesmo conjunto de terminais, mas geralmente não existe essa sequência.

Mudar para reverter vídeo com \e[?5h provavelmente funciona na maioria dos terminais, mas isso não sobrevive a uma reinicialização do terminal. Você poderia fazer isso e depois definir a cor do primeiro plano, assim haveria um efeito visual na maioria dos terminais.

    
por 27.04.2017 / 02:29

Tags