Não existe tal convenção. Além disso, uma variável de ambiente não é uma boa maneira de relatar informações sobre um terminal, porque o valor pode ficar obsoleto se um programa iniciar outro emulador de terminal que não atualize essa variável ou se um programa se conectar a vários terminais.
(A variável de ambiente TERM
não sofre com esses problemas porque é universal: cada emulador de terminal a configura e todo programa está ciente disso. Os problemas só surgem quando uma variável é parcialmente suportada.)
O caminho certo para obter as informações seria consultar o terminal. No mundo unix, isso é feito escrevendo uma sequência de escape que o terminal interpreta como “envie de volta alguns dados que respondam a minha consulta”. Como Thomas Dickey explica , o xterm tem essa sequência de controle , OSC 11 ; ? BEL
(definir parâmetros de texto, parâmetro 11 = cor de fundo do texto, valor ?
significa consulta em vez de definir). Escreva \e]11;?\a
para o terminal (onde \e
é o caractere de escape ( ^[
) e \a
é o caractere da campainha ( ^G
)), e xterm responde com uma string como \e]11;rgb:0000/0000/0000\a
fundo). Infelizmente, poucos outros emuladores de terminal suportam essa sequência de escape.
Rxvt define a variável de ambiente COLORFGBG
como uma string como 7;0
, em que 7
é a cor do primeiro plano (7 é cinza claro) e 0
é a cor do plano de fundo (preto). O Konsole também suporta isso.
O Emacs tenta detectar se o terminal tem um fundo claro ou escuro, a fim de definir os background-mode
terminal parameter . A partir do Emacs 24.5, existem três métodos para definir o modo de fundo automaticamente:
- Em xterm , o Emacs usa o
OSC 11
sequência de escape, conforme explicado acima.
- Em rxvt , o Emacs usa o
COLORFGBG
variável de ambiente, como explicado acima.
- Em DOS e Windows consoles, o Emacs usa interfaces específicas do SO para obter informações sobre o terminal; essas interfaces desempenham o mesmo papel que a seqüência de escape
OSC 11
.
Isso deixa muitos terminais, no entanto, há algum progresso: a biblioteca vte, que alimenta muitos emuladores de terminal, como gnome-terminal, guake, terminator, xfce4-terminal,…, implementa OSC 11
reportando como xterm desde a versão 0.35.2 . Você pode detectar terminais baseados em VTE verificando a variável de ambiente VTE_VERSION
; o valor é um número, você quer 3502 e acima.
Se você quiser padronizar de maneira a relatar as informações aos aplicativos, o suporte no lado do terminal pode não importar: afinal, você sabe se prefere fundos claros ou escuros. Então você pode também alinhar com rxvt e usar COLORFGBG
, já que é a única interface que alguém já está usando e que você pode adotar independentemente de qualquer suporte de terminal. A interface COLORFGBG
é limitada: foi concebida para um mundo com apenas 16 cores e todos concordam com um mapeamento a partir dos números das cores para cores (pelo menos aproximadamente, os matizes exatos diferem). O Konsole suporta mais de 16 cores, mas usa uma aproximação ao reportar COLORFGBG
: aproxima as cores do primeiro plano e do segundo plano por uma das 16 cores padrão. Se tudo o que importa é claro ou escuro, isso não é um problema, basta definir COLORFGBG
a 15;0
para texto claro em um fundo escuro ou 0;15
para texto escuro em um fundo claro.