Acesso programático à cor de fundo atual do xterm?

11

Eu gostaria de configurar as cores do prompt em .bashrc , dependendo das cores que ele está usando para primeiro plano e plano de fundo.

Por exemplo, o prompt azul se o plano de fundo estiver claro e bege, se estiver escuro.

Existe uma maneira de descobrir as configurações atuais em um script?

    
por Miserable Variable 28.06.2010 / 08:00

3 respostas

17

O e-mail de Thomas Dickey (mantenedor do xterm) tem isso. Observe, em particular, a parte sobre ? . O Ps = 4 refere-se a OSC Ps ; Pt ST onde OSC (o prefixo "Operating System Control") é ESC ] e ST (o sufixo "String Terminator") é \ (barra invertida). O 4 é um dos possíveis subcomandos do OSC.

For the whole palette, that can be set/retrieved using the 88/256 color extension. In ctlseqs.txt, it's summarized here:

  Ps = 4 ; c ; spec -> Change Color Number c to the color
specified by spec.  This can be a name or RGB specification as
per XParseColor.  Any number of c/spec pairs may be given.
The color numbers correspond to the ANSI colors 0-7, their
bright versions 8-15, and if supported, the remainder of the
88-color or 256-color table.

If a "?" is given rather than a name or RGB specification,
xterm replies with a control sequence of the same form which
can be used to set the corresponding color.  Because more than
one pair of color number and specification can be given in one
control sequence, xterm can make more than one reply.

Um pouco mais tarde em os documentos são mais subcomandos da OSC, Ps = 10 e Ps = 11 , e outros.

Ps = 1 0  -> Change VT100 text foreground color to Pt.
Ps = 1 1  -> Change VT100 text background color to Pt.

Exemplo - isso consulta o fundo usando Ps = "11" (logo acima) e Pt = "?" , conectado ao OSC Ps ; Pt ST . No echo, 3 está sendo usado para escape e \ para a barra invertida final.

echo -en "3]11;?3\"

Saída:

^[]11;rgb:0000/0000/0000^[\ 

Aviso: a cor retornada não reflete se o vídeo reverso, como -rv , está ativado, e o rastreamento das ~ 260 cores disponíveis via OSC 4 ; c ; ? ST não mostra nenhuma que siga o plano de fundo E mude com o vídeo reverso . Como muitos usuários definem um fundo escuro usando apenas xterm -rv , isso complica determinar se o plano de fundo está realmente escuro ou não. A maioria das cores não se ajusta a -rv .

Um script para fazer a consulta completa e realmente capturar a resposta do xterm:

#!/bin/bash
success=false
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
col=11      # background
#          OSC   Ps  ;Pt ST
echo -en "3]${col};?3\" >/dev/tty  # echo opts differ w/ OSes
result=
if IFS=';' read -r -d '\' color ; then
    result=$(echo $color | sed 's/^.*\;//;s/[^rgb:0-9a-f/]//g')
    success=true
fi
stty $oldstty
echo $result
$success
    
por 29.03.2012 / 15:41
0

tipo de

coloque as configurações no seu arquivo ~ / .Xdefaults:

xterm*foreground: blue
xterm*background: white

no seu shell, você apenas usa os valores:

awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults

caso contrário, é muito difícil obter alguns valores internos do xterm.

    
por 28.06.2010 / 08:44
-1

Na verdade, acho que você quer isso:

% xrdb -query

Isso listará as configurações para você. Veja também:

link

Para modificar o tempo de execução, use:

% echo "some*setting: somevalue" | xrdb -merge
    
por 20.08.2011 / 11:35

Tags