Vorrei impostare i colori di richiesta in .bashrc
base ai colori che sta usando per il primo piano e lo sfondo.
Ad esempio, blu richiede se lo sfondo è chiaro e beige se è scuro.
C'è un modo per scoprire le impostazioni correnti in uno script?
Vorrei impostare i colori di richiesta in .bashrc
base ai colori che sta usando per il primo piano e lo sfondo.
Ad esempio, blu richiede se lo sfondo è chiaro e beige se è scuro.
C'è un modo per scoprire le impostazioni correnti in uno script?
Risposte:
L'email di ritorno da Thomas Dickey (manutentore di xterm) ha questo. Nota in particolare la parte su ?
. Il Ps = 4
riferimento a OSC Ps ; Pt ST
dove si trova OSC
(il prefisso "Controllo del sistema operativo") ESC ]
e ST
(il suffisso "Terminatore di stringa") è \
(barra rovesciata). La 4
è una delle possibili sottocomandi a OSC.
Per l'intera tavolozza, che può essere impostato / recuperato utilizzando l'estensione colore 88/256. In ctlseqs.txt, è riassunto qui:
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.
Un po 'più avanti nei documenti ci sono più sottocomandi OSC Ps = 10
e Ps = 11
, e altri.
Ps = 1 0 -> Change VT100 text foreground color to Pt. Ps = 1 1 -> Change VT100 text background color to Pt.
Esempio: questo interroga lo sfondo usando Ps = "11"
(appena sopra) e Pt = "?"
, collegato a OSC Ps ; Pt ST
. Nell'eco, \033
viene utilizzato per la fuga e \\
per la barra rovesciata finale.
echo -en "\033]11;?\033\\"
Produzione:
^[]11;rgb:0000/0000/0000^[\
Avvertenza: il colore restituito non riflette se il video inverso, come -rv
, è abilitato e la scansione dei ~ 260 colori disponibili tramite OSC 4 ; c ; ? ST
non mostra alcuno che segua entrambi lo sfondo E cambi con video inverso. Poiché molti utenti impostano uno sfondo scuro usando solo xterm -rv
, ciò complica la determinazione se lo sfondo è effettivamente scuro o no. La maggior parte dei colori non si adatta -rv
nemmeno a.
Uno script per eseguire la query completa e catturare effettivamente la risposta da 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
tipo
inserisci le impostazioni nel tuo file ~ / .Xdefaults:
xterm*foreground: blue
xterm*background: white
nella tua shell devi solo grep i valori:
awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults
altrimenti è piuttosto difficile ottenere alcuni valori interni di xterm.
In realtà penso che tu voglia questo:
% xrdb -query
Questo elencherà le impostazioni per te. Guarda anche:
http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm
Per modificare il runtime, utilizzare:
% echo "some*setting: somevalue" | xrdb -merge
-query
elenca tutte le risorse. specificare una risorsa non funziona sul mio Ubuntu.
xrdb -query
ti dà solo l'elenco di tutte le risorse .. che devi riavviare / grep per arrivare in primo piano. e questo è quello che ho già ammesso. xrdb -merge
è completamente offtopico qui perché OP non vuole modificare le risorse x ma l'aspetto del prompt di base.