Gostaria de configurar as cores do prompt, .bashrc
dependendo das cores usadas para primeiro e segundo plano.
Por exemplo, azul avisa se o fundo é claro e bege se está escuro.
Existe uma maneira de descobrir as configurações atuais em um script?
Gostaria de configurar as cores do prompt, .bashrc
dependendo das cores usadas para primeiro e segundo plano.
Por exemplo, azul avisa se o fundo é claro e bege se está escuro.
Existe uma maneira de descobrir as configurações atuais em um script?
Respostas:
O e-mail de Thomas Dickey (mantenedor do xterm) tem isso. Observe em particular a parte sobre ?
. A Ps = 4
refere-se a OSC Ps ; Pt ST
em que OSC
(o prefixo "Controlo Operating System") é ESC ]
e ST
(a "cadeia Terminator" sufixo) é \
(invertida). Esse 4
é um dos subcomandos possíveis para o OSC.
Para toda a paleta, isso pode ser definido / recuperado usando a extensão de cor 88/256. Em ctlseqs.txt, está resumido aqui:
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 nos documentos, há mais subcomandos do 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 plano de fundo usando Ps = "11"
(logo acima) e Pt = "?"
, conectado ao OSC Ps ; Pt ST
. No eco, \033
está sendo usado para fuga e \\
para a barra invertida final.
echo -en "\033]11;?\033\\"
Resultado:
^[]11;rgb:0000/0000/0000^[\
Aviso: a cor retornada não reflete se o vídeo reverso, como -rv
, está ativado, e o rastreamento pelas ~ 260 cores disponíveis via OSC 4 ; c ; ? ST
não mostra nenhuma que segue o plano de fundo E muda com o vídeo reverso. Como muitos usuários definem um fundo escuro usando just xterm -rv
, isso complica determinar se o fundo é realmente escuro ou não. A maioria das cores também não se ajusta -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 "\033]${col};?\033\\" >/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
mais ou menos
coloque as configurações no seu arquivo ~ / .Xdefaults:
xterm*foreground: blue
xterm*background: white
no seu shell você apenas cumprimenta os valores:
awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults
caso contrário, é muito difícil obter alguns valores internos do xterm.
Na verdade, eu acho que você quer isso:
% xrdb -query
Isso listará as configurações para você. Veja também:
http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm
Para modificar o tempo de execução, use:
% echo "some*setting: somevalue" | xrdb -merge
-query
lista todos os recursos. especificar um recurso não funciona no meu ubuntu.
xrdb -query
apenas fornece a lista de todos os recursos .. que você precisa ativar / grep novamente para chegar ao primeiro plano. e é isso que eu já admiti. xrdb -merge
é completamente offtopic aqui, porque o OP não deseja modificar os recursos x, mas a aparência do prompt de comando.