
터미널 배경을 색상으로 설정하면#1a2b3c
그런 다음 printf '\e]11;?\a'
I get back을 사용하여 쿼리합니다.]11;rgb:1a74/2b98/3cb6
1a74
빨간색, 녹색 , 파란색 2b98
에 대해 가정된 값은 어떤 인코딩입니까 3cb6
?
1a
각 세그먼트의 처음 두 문자( 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