유색 터미널을 사용할 수 있으면 이스케이프 문자를 사용하여 출력의 색상을 지정할 수 있습니다 .
그러나 출력물이 현재 어떤 색으로 표시되는지 알아낼 가능성이 있습니까? 또는 지금 당장 출력하면 텍스트의 색상은 어떻습니까?
이 이스케이프 문자를 사용할 때 이전 색상 설정을 어 기지 말 것을 요청합니다. '기본 전경색'이스케이프 문자는 변경하기 전에 텍스트 색이 아닌 색 구성표에서 정보를 가져옵니다.
유색 터미널을 사용할 수 있으면 이스케이프 문자를 사용하여 출력의 색상을 지정할 수 있습니다 .
그러나 출력물이 현재 어떤 색으로 표시되는지 알아낼 가능성이 있습니까? 또는 지금 당장 출력하면 텍스트의 색상은 어떻습니까?
이 이스케이프 문자를 사용할 때 이전 색상 설정을 어 기지 말 것을 요청합니다. '기본 전경색'이스케이프 문자는 변경하기 전에 텍스트 색이 아닌 색 구성표에서 정보를 가져옵니다.
답변:
일반적으로 현재 색상을 얻는 것은 불가능합니다. 터미널의 제어 시퀀스 처리는 터미널의 "내부"에서 발생합니다. 커널 가상 터미널을 제공하는 운영 체제 커널에 내장 된 터미널 에뮬레이터 와 같은 터미널 에뮬레이터xterm
를 사용하면 현재 "그래픽 변환"개념 (예 : 색상 및 속성)을 포함한 에뮬레이터의 내부 상태가 시스템에 있습니다. 이론적으로 접근 가능합니다. 그러나 실제 터미널의 경우이 정보는 직렬 링크를 통해 연결된 물리적으로 분리 된 시스템의 일부 RAM 위치에 있습니다.
즉, 일부 터미널에는 해당 직렬 링크를 통해 전송되는 터미널 프로토콜의 일부로 이러한 정보를 읽는 메커니즘이 포함되어 있습니다. 이들은 프로그램이 터미널에 보낼 수있는 제어 순서를 제공 하여 터미널 입력으로 내부 상태에 대한 정보를 다시 보냅니다 . 터미널 에뮬레이터가 응답 mikeserv
하는 제어 시퀀스를 보여줍니다 xterm
. 그러나 이들은 특정합니다 xterm
. 리눅스 커널에 내장 된 터미널 에뮬레이터와 다양한 BSD 커널은 예를 들어 터미널 유형이 다르며 이러한 제어 시퀀스를 전혀 구현하지 않습니다. 실제 터미널의 모든 제품군에 대해서도 마찬가지입니다.
DEC VT525 터미널은 판독 메커니즘을 구현하지만에 의해 사용되는 것과 관련이없는 일련의 제어 시퀀스를 갖습니다 xterm
. 하나는 현재 그래픽 표현을 요청하기 위해 DECRQSS (요청 선택 또는 설정) 시퀀스를 전송하고, 단말기는 DECRPSS (보고서 선택 또는 설정)를 전송하여 응답합니다. 구체적으로 특별히:
$
q
m
ST (설정으로 SGR의 제어 기능 부분이있는 DECRQSS)0
$
r
0
;
3
3
;
4
4
m
ST (현재 전경색 및 배경색을 설정하는 SGR 제어 시퀀스의 매개 변수 및 제어 기능 부분이있는 DECRPSS)물론, 질문을주의 깊게 읽으면 유럽 통화 시스템에서 초콜릿으로 덮인 바나나를 다시 흔드는 것으로 나타납니다. 당신이있어 실제로 당신이 솔루션을 선택하고 해당 솔루션의 일부를 수행하는 방법을 요청했습니다하는, 일을하려고한다 이전의 상태를 유지 일부 colourized 출력을 쓰는 동안. 이를 수행하기위한 DEC VT 제어 시퀀스뿐만 아니라 xterm
다양한 커널 내장 터미널 에뮬레이터에 의해 인식되는 SCO 콘솔 터미널 시퀀스 와 터미널에 대한 내용을 알려주는 termcap / terminfo 항목이 있습니다.
termcap 항목은 sc
및 rc
입니다. terminfo 항목은 save_cursor
및 restore_cursor
입니다. (당신이 무언가에 의존하고 있음을 그들이 경고 역할 않지만 이름은 다소 효과로 오해되어 사실상 보다는 합법적 ). 실제 DECSC, DECRC, SCOSC 및 SCORC 제어 시퀀스는 현재 그래픽 표현도 저장하고 복원합니다.
당신이 지적한 기사가 쉘 스크립트에서 제어 시퀀스를 생성하는 것에 관한 것이라면, 지금 찾고 있는 명령 은 tput
입니다.
sc
및 외에 rc
터미널이 지원하는 경우 대체 버퍼를 살펴볼 수도 있습니다. 그렇습니다. 이것은 훌륭한 답변입니다. Minix, 아마도 이것을보십시오 : userspace의 콘솔로 / dev / fb0를 사용하는 방법 . nosh
그가 추천 하는 스위트 룸에는 자신의 것이 있습니다.
에서 xterm
색상 변경 이스케이프를 쿼리로 변경하여보고 된 현재 색상 RGB 색상 코드를 얻을 수 있습니다. ESC ] Ps m
-를 사용 하되 ?
물음표를 추가 하십시오 . 로부터 문서 :
"?"
오히려 이름 또는 RGB 사양보다 주어진다,xterm
해당 동적 색상을 설정하는 데 사용할 수있는 동일 형태의 제어 시퀀스와 응답한다. 하나의 제어 순서로 둘 이상의 색상 번호와 사양 쌍을 지정할 수 있으므로 xterm
둘 이상의 응답을 할 수 있습니다.
이것이 다른 터미널 에뮬레이터에서 작동 할 가능성이 있는지 의심 스럽지만 xterm
실행 중인 경우 에는 ...
printf '\033]11;?\007'
... xterm
다음과 같은 순서로 터미널의 입력 버퍼로 되돌아갑니다.
11;rgb:ffff/ffff/ffff
... 배경 또는 전경 :
printf '\033]10;?\007'
10;rgb:0000/0000/0000
printf '\033]10;rgb:8f8f/8f8f/8f8f8f\007
하면 이전에 "정상"인 터미널의 모든 텍스트가 연한 파란색으로 바뀌 었습니다. 이후에 실행 printf '\033]10;rgb:bfbfbf/bfbfbf/bfbfbf\007'
하면 연한 파란색 텍스트가 모두 "정상"으로 돌아갑니다. 이 값을 사용하여 앞으로 텍스트의 색상 만 변경하려면 어떻게합니까?
clear
처음?
printf '\033]10;?\007'
터미널의 현재 전경색에 대해 xterm을 쿼리합니다. 터미널이 "정상"(예 : 전경색으로 7)으로 시작되었지만 명령 을 실행 tput setaf 3
하기 전에 실행하는 경우 위 명령은 여전히 "정상"을 반환합니다. 이것이 터미널의 현재 전경색이므로 맞습니다. 내가 원했던 것은 현재 커서 위치의 현재 색상을 검색하여 나중에 OP에 따라 "복원"하기 위해 저장할 수있는 방법이었습니다. printf
printf
xterm
관리자이며 여기에서 활발한 회원입니다. (링크는 그의 웹 사이트- xterm
이스케이프 문서는 광범위하다-기본적으로 터미널을 작성하려는 다른 프로그래머를위한 표준 참조)
echotc Co
또는로 지원하는 색상 수를 얻을 수echoti colors
있지만 현재 색상 코드 정의를 저장하는 변수는 없습니다.