端末の背景を色に設定すると#1a2b3c
その後、printf '\e]11;?\a'
I get backを使用してクエリします。]11;rgb:1a74/2b98/3cb6
1a74
赤、緑、青2b98
の仮定値はどのエンコードですか3cb6
?
1a
各セグメントの最初の2文字(74 / 2b
98 / b6)のみを選択すると、3c
元の色が得られます。それでは1a2b3c
、とは何ですか?74
98
b6
ベストアンサー1
〜のようにxterm制御シーケンスリファレンスドキュメント、OSC 11 ; <spec> BEL
エスケープシーケンス変化[これ]VT100テキストの背景色標準サポートカラー仕様を受け入れます。XParseColor
X11機能1.<spec>
いつ?
:
名前またはRGB仕様の代わりに「?」が指定されている場合、xtermは対応する動的色を設定するために使用できる同じ形式の制御シーケンスで応答します。
マニュアルXParseColor(3)
ページには次の情報が表示されます。
RGB デバイス仕様はプレフィックスで識別され、
rgb:
次の構文に従います。rgb:<red>/<green>/<blue>
<red>
,<green>
, :<blue>
= |h
hh
hhh
hhhh
h
:=単一の16進数(大文字と小文字を区別しない)
h
注:4ビットにスケーリングされた値、hh
8ビットにスケーリングされた値、hhh
12ビットにスケーリングされた値、およびhhhh
16ビットにスケーリングされた値がそれぞれ表示されます。以前のバージョンとの互換性のために、RGBデバイスの古い構文はサポートされていますが、引き続き使用することはお勧めできません。構文は、次の形式のいずれかの数値指定が続く最初の文字の鋭い文字です。
#RGB
(各4桁)
#RRGGBB
(各8桁)
#RRRGGGBBB
(各12桁)
#RRRRGGGGBBBB
(各16桁)、
R
およびG
はB
単一の16進数を表します。ビットあたり16ビット未満が指定されている場合は、値の最上位ビットを表します(値のrgb:
スケーリング構文とは異なり)。たとえば、この文字列#3a7
はと同じです#3000a0007000
。
<ESC>]11;rgb:1a74/2b98/3cb6<BEL>
したがって、色を意味するものを取得します。
- 赤色の強度は、16進数0xffffの0x1a74です。
- 緑色の強度は、16進数0xffffの0x2b98です。
- 青色の強度は、16進数0xffffの0x3cb6です。
#1a2b3c
端末でスケーリングがどのように実行されるかはわかりませんが、デフォルトの色ごとに16ビットにスケーリングされます。
Debianやxterm
、konsole
またはベースのvte
端末(たとえば)では、0x1a1aが0x1a * 0xffff / 0xffの場所であることがgnome-terminal
わかりますが、$'\e]11;rgb:1a1a/2b2b/3c3c\a'
これはまだ上記のテキストと矛盾しているように見えます。これ#1a2b3c
は仮定したものと同じでなければなりません。最も明るい白ではありません。#1a002b003c00
rgb:1a00/2b00/3c00
#ffffff
rxvtで私は$'\e]11;rgb:1a00/2b00/3c00\a'
(そして上記のマニュアルページと一致するように$'\e]11;rgb:1a1a/2b2b/3c3c\a'
送信されたとき)得る。$'\e]11;rgb:1a/2b/3c\a'
XParseColor
キティでは$'\e]11;rgb:1a1a/2b2b/3c3c\e\\'
(ESC \
(別名ST
)BELの代わりに区切り文字を使用しますが、それ以外はxtermとcoと同じです。
を実行すると、ltrace -e XParseColor "$terminal" -bg '#1a2b3c'
以下を追加した後:
typedef XColor = struct(ulong, hex(ushort), hex(ushort), hex(ushort), hex(char), hex(char));
int XParseColor(addr, int, string, +XColor*);
~/.ltrace.conf
、rxvt
またはに次のように表示されxterm
ます。
xterm->XParseColor(0x55df687228f0, 57, "#1a2b3c", { 0, 0x1a00, 0x2b00, 0x3c00, 0x7, 0 }) = 1
については、ltrace -e XParseColor "$terminal" -bg rgb:1a/2b/3c
以下が表示されます。
xterm->XParseColor(0x557da7d8b8f0, 57, "rgb:1a/2b/3c", { 0, 0x1a1a, 0x2b2b, 0x3c3c, 0x7, 0 }) = 1
これはこれが唯一正しいことを示唆しているように見えますが、rxvt
実際にはほとんどのディスプレイデバイスがデフォルトの色ごとに8ビットしかサポートしていないため、あまり違いはありません。
¹ 以下は、Man ページとして提供される Arch Linux のマニュアルページへのリンクです。x.orgにあるもの現在破損しています。システムでまたはを確認してくださいman XParseColor
。man XQueryColor