컬러 터미널이 있다면 가능하다는 것을 알고 있습니다.이스케이프 문자를 사용하여 출력 색상 지정.
그런데 출력이 현재 어떤 색상으로 표시되는지 알 수 있습니까? 아니면 지금 텍스트를 출력하면 텍스트가 어떤 색으로 표시되나요?
이러한 이스케이프 문자를 사용할 때 이전 색상 설정이 깨지지 않도록 요청합니다. "기본 전경색" 이스케이프 문자는 변경 전 텍스트 색상이 아닌 색상 구성표에서 정보를 가져옵니다.
답변1
여기에서 xterm
쿼리 RGB 색상 코드의 색상 변경 이스케이프를 변경하여 보고서의 현재 색상을 얻을 수 있습니다. -를 사용 ESC ] Ps m
하되 ?
물음표를 추가하세요. ~에서문서:
"?"
이름이나 RGB 사양 대신 a가 제공되면 동일한xterm
형식의 제어 시퀀스가 응답되며, 이는 해당 동적 색상을 설정하는 데 사용할 수 있습니다. 하나의 제어 순서에 두 쌍 이상의 색상 번호와 사양이 제공될 수 있으므로xterm
두 개 이상의 응답이 가능합니다.- P s = 1 0 → VT100 텍스트 전경색을 P t 로 변경합니다.
- P s = 1 1 → VT100 텍스트 배경색을 P t 로 변경합니다.
- P s = 1 2 → 텍스트 커서 색상을 P t 로 변경합니다.
- P s = 1 3 → 마우스 전경색을 P t 로 변경합니다.
- P s = 1 4 → 마우스 배경색을 P t 로 변경합니다.
- P s = 1 5 → Tektronix 전경색을 P t 로 변경합니다.
- P s = 1 6 → Tektronix 배경색을 P t 로 변경합니다.
- P s = 1 7 → 하이라이트 배경색을 P t 로 변경합니다.
- P s = 1 8 → Tektronix 커서 색상을 P t 로 변경합니다.
- P s = 1 9 → 하이라이트 전경색을 P t 로 변경합니다.
이것이 다른 터미널 에뮬레이터에서 작동할 수 있을지 심각하게 의심되지만, xterm
실행하면...
printf '\033]11;?\007'
... xterm
다음 시퀀스를 터미널의 입력 버퍼로 다시 푸시합니다...
11;rgb:ffff/ffff/ffff
...배경 또는 전경의 경우:
printf '\033]10;?\007'
10;rgb:0000/0000/0000
답변2
일반적으로 현재 색상을 얻는 것은 불가능합니다. 터미널의 제어 시퀀스 처리는 터미널의 위치에 관계없이 터미널에 대해 "내부적으로" 발생합니다. 터미널 포함에뮬레이터예를 들어, xterm
커널 가상 터미널을 제공하는 운영 체제 커널에 내장된 에뮬레이터, "그래픽 표현"(즉, 색상 및 속성)의 현재 개념을 포함한 에뮬레이터의 내부 상태는 머신 자체에 상주하며 이론적으로 액세스 가능합니다. . 그러나 실제 터미널의 경우 이 정보는 직렬 링크로 연결된 물리적으로 분리된 시스템의 일부 RAM 위치에 있습니다.
즉 말하자면,일부터미널에는 터미널 프로토콜의 일부로 직렬 링크를 통해 전송되는 정보를 읽는 메커니즘이 포함되어 있습니다. 프로그램이 터미널로 보낼 수 있는 제어 시퀀스를 제공하므로반품터미널 입력과 같은 내부 상태에 대한 정보입니다. 터미널 에뮬레이터 응답에 대한 제어 순서가 표시되었습니다 mikeserv
. xterm
그러나 이는 구체적입니다 xterm
. 예를 들어 Linux 커널과 다양한 BSD 커널에 내장된 터미널 에뮬레이터는 서로 다른 터미널 유형이며 그러한 제어 시퀀스를 전혀 구현하지 않습니다. 실제 터미널 전체 제품군에도 동일하게 적용됩니다.
DEC VT525 터미널은 판독 메커니즘을 구현하지만 사용된 제어 시퀀스와 독립적인 제어 시퀀스 세트를 사용합니다 xterm
. 현재 그래픽의 변환을 요청하기 위해 DECRQSS(Request Selection or Set) 시퀀스가 전송되고, 단말은 DECRPSS(Report Selection or Set)를 전송하여 응답합니다. 구체적으로:
- 호스트 전송: DCS
$
q
m
ST(SGR의 제어 기능 부분으로 설정된 DECRQSS) - 터미널 응답: DCS
0
$
r
0
;
3
3
;
4
4
m
ST(DECRPSS에는 현재 전경색과 배경색을 설정하는 SGR 제어 시퀀스의 매개변수 및 제어 기능 부분이 있음)
물론, 귀하의 질문을 자세히 읽어보면 귀하가 해당 EMU에서 다시 한 번 초콜릿 바나나를 흔들고 있다는 것을 알 수 있습니다. 너 뭐야실제로당신이 하려는 것은 해결책을 선택한 다음 그 해결책의 일부를 어떻게 수행할지 묻는 것입니다.이전 상태 유지컬러 출력물을 작성할 때. 이를 수행하기 위한 DEC VT 제어 시퀀스가 있을 뿐만 아니라 xterm
다양한 커널 내장 터미널 에뮬레이터에서 인식되는 SCO 콘솔 터미널 시퀀스와 터미널에 대한 정보를 알려주는 termcap/terminfo 항목 도 있습니다. .라는 단어는 무엇입니까?
termcap 항목은 sc
및 입니다 rc
. terminfo 항목은 save_cursor
및 입니다 restore_cursor
. 이러한 이름은 실제로는 다소 오해의 소지가 있습니다(물론 이는 귀하가 의존하고 있는 것이사실은대신에법학). 실제 DECSC, DECRC, SCOSC 및 SCORC 제어 시퀀스도 현재 그래픽 렌더링을 저장하고 복원합니다.
당신이 가리키는 기사가 쉘 스크립트에서 제어 시퀀스를 생성하는 것에 관한 것이라면, 당신이 사용한 명령은지금당신이 찾고 있는 것은 입니다 tput
.
추가 읽기
- 조나단 드 보인 폴라드. 2007. 초콜릿 바나나를 내려놓고 유럽 통화 시스템을 멀리하세요.. 자주 주어지는 답변입니다.
- VT420 프로그래머 참조 매뉴얼. EK-VT420-RM-002. 1992년 2월. 숫자.
- VT520/VT525 비디오 터미널 프로그래머 정보. EK-VT520-RM. 1994년 7월. 숫자.