Email balik dari Thomas Dickey (pengelola xterm) memiliki ini. Perhatikan khususnya tentang bagian ?
. The Ps = 4
mengacu OSC Ps ; Pt ST
mana OSC
( "Sistem Operasi Control" prefix) adalah ESC ]
dan ST
(yang "String Terminator" akhiran) adalah \
(backslash). Ini 4
adalah salah satu sub-perintah yang mungkin untuk OSC.
Untuk seluruh palet, itu dapat diatur / diambil menggunakan ekstensi warna 88/256. Di ctlseqs.txt, ini dirangkum di sini:
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.
Beberapa saat kemudian di dalam dokumen terdapat lebih banyak sub- perintah OSC, Ps = 10
dan Ps = 11
, dan lainnya.
Ps = 1 0 -> Change VT100 text foreground color to Pt.
Ps = 1 1 -> Change VT100 text background color to Pt.
Contoh - ini menanyakan latar belakang menggunakan Ps = "11"
(dari atas) dan Pt = "?"
, dicolokkan ke OSC Ps ; Pt ST
. Dalam gema, \033
digunakan untuk melarikan diri, dan \\
untuk backslash terakhir.
echo -en "\033]11;?\033\\"
Keluaran:
^[]11;rgb:0000/0000/0000^[\
Peringatan: Warna yang dikembalikan tidak mencerminkan apakah video terbalik, seperti -rv
, diaktifkan, dan merangkak melalui ~ 260 warna yang tersedia via OSC 4 ; c ; ? ST
tidak menunjukkan apa pun yang mengikuti latar belakang DAN berubah dengan video terbalik. Karena banyak pengguna menetapkan latar belakang gelap dengan menggunakan hanya xterm -rv
, ini menyulitkan menentukan apakah latar belakang sebenarnya gelap atau tidak. Kebanyakan warna juga tidak menyesuaikan -rv
.
Sebuah skrip untuk melakukan kueri penuh dan benar-benar menangkap balasan dari 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