Wiadomość zwrotna od Thomasa Dickeya (opiekuna xterm) ma to. Zwróć uwagę w szczególności na część o ?. Ps = 4Oznacza OSC Ps ; Pt STgdzie OSC( „Kontrola system operacyjny” prefiksu) jest ESC ]a ST( „sznur terminator” przyrostek) jest \(ukośnikowe). Jest 4to jedna z możliwych komend OSC.
Dla całej palety, którą można ustawić / pobrać za pomocą rozszerzenia kolorów 88/256. W ctlseqs.txt jest to podsumowane tutaj:
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.
Nieco później w docs więcej podpoleceniami OSC, Ps = 10i Ps = 11, i inne.
Ps = 1 0 -> Change VT100 text foreground color to Pt.
Ps = 1 1 -> Change VT100 text background color to Pt.
Przykład - odpytuje to tło za pomocą Ps = "11"(od góry) i Pt = "?"podłączonego do OSC Ps ; Pt ST. W echu \033jest używany do ucieczki i \\do ostatniego odwrotnego ukośnika.
echo -en "\033]11;?\033\\"
Wynik:
^[]11;rgb:0000/0000/0000^[\
Ostrzeżenie: zwracany kolor nie odzwierciedla, czy -rvwłączone jest odtwarzanie wideo wstecznego, np. Przeszukiwanie ~ 260 dostępnych kolorów za pomocą OSC 4 ; c ; ? STnie pokazuje żadnego, że oba podążają za tłem ORAZ zmieniają się wraz z wideo wstecznym. Ponieważ wielu użytkowników ustawia ciemne tło za pomocą just xterm -rv, komplikuje to ustalenie, czy tło jest rzeczywiście ciemne, czy nie. Większość kolorów też się nie dostosowuje -rv.
Skrypt wykonujący pełne zapytanie i przechwytujący odpowiedź z 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