Електронний лист від Томаса Дікі (керівника xterm) має це. Зазначимо, зокрема, частину о ?
. Ps = 4
Відноситься до OSC Ps ; Pt ST
де OSC
( «Контроль операційної системи» префікс) ESC ]
і ST
(далі «Рядок Terminator» суфікс) є \
(зворотний слеш). Це 4
одна з можливих підкоманд OSC.
Для всієї палітри, яку можна встановити / отримати за допомогою кольорового розширення 88/256. У ctlseqs.txt тут резюмується:
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.
Трохи пізніше в Документах більше OSC підкоманду, Ps = 10
і Ps = 11
, та інші.
Ps = 1 0 -> Change VT100 text foreground color to Pt.
Ps = 1 1 -> Change VT100 text background color to Pt.
Приклад - це запит фону, використовуючи Ps = "11"
(трохи згори) та Pt = "?"
підключений до OSC Ps ; Pt ST
. У відгомоні \033
використовується як для втечі, так і \\
для остаточного нахилу.
echo -en "\033]11;?\033\\"
Вихід:
^[]11;rgb:0000/0000/0000^[\
Попередження: Повернений колір не відображає, чи -rv
включено зворотне відео, як-от , і повзання через ~ 260 кольорів, доступних через OSC 4 ; c ; ? ST
, не показує, що обидва слідують за фоном І змінюються за допомогою зворотного відео. Оскільки багато користувачів встановлюють темний фон за допомогою просто xterm -rv
, це ускладнює визначення того, чи є фон насправді темним чи ні. Більшість кольорів також не підлаштовуються -rv
.
Сценарій для повного запиту та фактичного захоплення відповіді від 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