추가 읽기

추가 읽기

흰색 화면에 검은 글자를 표시하기 위해 콘솔 색상을 반전시키는 방법은 무엇입니까?

tput rev

작동은 되지만, 캐릭터의 배경 중 일부만 흰색이고 화면의 나머지 부분은 여전히 ​​검은색이어서 조금 이상해 보입니다. 문자 없이 전체 콘솔 배경을 흰색으로 변경하는 방법은 무엇입니까?

질문의 확장은 노란색 배경, 검정색 전경과 같은 다른 색상을 만드는 방법입니다.

tput setaf 0 && tput setab 3

사실이지만, 문자가 없는 배경은 여전히 ​​검은색입니다.

나는 X가 없는 텍스트 콘솔, 또는 X에서 Cltr+Alt+F1을 누르고 x 터미널 창이 아닌 전체 검은 화면 콘솔 로그인을 얻을 때 얻는 콘솔에 대해 이야기하고 있습니다.

이것은 데비안 불안정/sid입니다.

답변1

후방카메라가 흥미롭네요.

terminfo 모델은 너무 단순하고 잘못되었습니다. 터미널 에뮬레이터와 실제 터미널이 실제로 작동하는 방식이 일치하지 않습니다. 실제로 여기서는 terminfo에 대해 많이 알지 못할 것입니다.

실제 터미널의 모델은 언뜻 보면 매우 단순해 보입니다.

  • 현재 색상 및 속성 집합이 있으며 그 중 하나가 안티 비디오 속성입니다. 비디오를 반전시키면 문자 글리프의 픽셀이 반전됩니다.존재하다픽셀은 배경색이고떠나다픽셀은 전경색입니다.
  • 모든 셀에 대한 비디오 반전 속성의 의미를 반전시키는 전체 화면 반전 비디오 설정이 있습니다. 켜짐으로 설정하면 모든 반전된 문자 셀이 반전 없이 표시되며 그 반대의 경우도 마찬가지입니다.

흑백 비디오 터미널의 경우 이는 하드웨어의 일부 XOR 로직일 뿐입니다.

안티 비디오 속성은 물론 SGR 7 및 SGR 27이며 수십 년 동안 ECMA-48 외에는 거의 누구도 수행한 적이 없습니다. 전체 화면 반전 비디오 설정은 DECSCNM(DEC 화면 모드)이라고 하는 DEC VT에서 파생된 제어 시퀀스에 의해 제어됩니다. 이는 ECMA-48이 메커니즘을 제공하는 공급업체 전용 모델입니다. 이러한 시퀀스는 DEC 개인 모드 #5에 대한 ECMA-48 SM 및 RM입니다.

만약 너라면진짜다음 출력 줄뿐만 아니라 전체 화면을 반전시키려면 DECSCNM이 최선의 선택입니다. Unicode rxvt, VTE 라이브러리 기반 터미널 에뮬레이터, Konsole, kitty, KiTTY, PuTTY, XTerm, Linux 내장 터미널 에뮬레이터 및 console-terminal-emulatornosh 도구 세트의 my를 포함한 많은 터미널 에뮬레이터가 DECSCNM을 인식하고 응답합니다.

DECSCNM 제어 순서를 사용하여 인쇄할 수 있습니다 printf. terminfo 기능이 없습니다. 이는 제한된 terminfo 모델을 뛰어넘는 것입니다. 제어 순서를 기억하고 싶지 않은 사람들을 위해 내 휴대용 장치는 setterm이를 수행할 수 있는 편리한 방법을 제공합니다.

%setterm -7 --화면을 반전하여 엽니다.
%setterm -7 --화면 반전 끄기

상황이 추악해지는 곳이 바로 여기입니다.

실제로는색상 및 속성 세트. 인쇄된 문자를 그리는 세트가 있고, 문자를 지우고 스크롤하여 삽입된 빈 행과 열을 그리는 세트가 있습니다. 이름이 지정된 설정색상 모드 지우기(DECECM)은 두 세트가 얼마나 분리되어 있는지를 제어합니다. 실제 후기 모델인 DEC VT에서는 기본 설정이 기본적으로 동일하며, 지우기/스크롤 색상이 인쇄 색상과 일치합니다. 그러나 너무 많은 터미널 에뮬레이터는 DECECM 설정을 인쇄 색상과 다르게 색상을 지우거나 스크롤하는 이전 규칙으로 초기화하고 항상 SGR 39/SGR 49로 초기화합니다.

초기 상태는 PuTTY의 체크박스를 통해 선택할 수 있으며 이를 배경색 삭제라고 합니다. terminfo 모델도 이것을 이것을 호출하지만 반전합니다. 먼저 해당 터미널이 있는 터미널에서는 다음과 같습니다.구성 가능한 모드, 터미널의 고정된 측면이 아닙니다. 이는 제어 시퀀스를 발행하는 호스트에 의해 전환될 수 있습니다. terminfo는 이를 설정하는 기능을 제공하지 않지만 폐쇄 또는 개방 여부를 나타내는 고정 값 플래그만 제공하므로 터미널의 현재 상태와 일치하지 않을 수 있습니다. 다시 말하지만, 제어 순서를 기억하고 싶지 않은 사람들을 위해:

%setterm -7 --bce 켜기
%setterm -7 --bce 닫기

하지만 DECECM엄밀히 말하자면(배경) 색상만 제어합니다. 엄밀히 말하면 연결이 안 된다.속성. 지워지거나 스크롤된 문자 셀에는 인쇄된 문자에 할당된 역방향 비디오 속성(또는 실제로 밑줄과 같은 다른 속성)을 부여할 필요가 없습니다. 일부 터미널(예: 내 터미널 및 FreeBSD 커널에 내장된 터미널 에뮬레이터)은 작동하지만 대부분은 그렇지 않습니다.

또한 지우기/스크롤이 먼저 발생하는 경우에만 작동합니다. 지우기/스크롤하지 않고 줄의 전체 길이까지 인쇄하지 않으면 섹션에 다른 색상/속성이 남습니다.

이것이 많은 터미널 에뮬레이터에서 볼 수 있는 나머지 줄이 강조 표시되지 않는 이유입니다. (내 터미널 에뮬레이터나 FreeBSD KVT를 사용하는 경우 스크롤할 때 전체 줄이 역방향 비디오로 나타나거나 EL로 지워집니다. printf '\e[7m\e[117hwibble\e[K\n'결과를 확인하세요.)

충분하지 않으면 이상한 동작이 많이 발생합니다.

  • DECECM이 켜짐으로 설정되면 PuTTY 및 그 파생물(예: 혼란스러운 이름의 MobaXTerm)은 지우기 색상을 배경 색상에 연결하지만 역방향 비디오를 유사하게 전파하지는 않습니다. (화면의 마지막 행에서) 행의 일부는 비디오가 반전되고 일부는 비디오가 반전되지 않지만 색상은 동일하게 유지되는 효과를 즐겨보세요.
    tput setaf 4; 출력 세트 3;
    Windows 터미널도 이 작업을 수행할 수 있는 것 같습니다.
  • Interix 터미널 에뮬레이터는 SGR 7을 사용하여 역방향 비디오를 켤 수 있지만 SGR 27을 인식하지 못해 비디오를 끌 수 없습니다.
  • 일부 터미널 에뮬레이터에는 Unicode rxvt와 같은 역방향 비디오에 대한 "나는 당신보다 더 잘 압니다"라는 미친 아이디어가 있습니다.완전히 다른 색상 쌍으로 전환배경색과 전경색이 동일하게 설정된 경우 반전 비디오를 켜십시오. 즐기다파란색 전혀 없어그리고:
    tput setaf 4; 출력 속도;

역방향 비디오를 버리고 지우거나 스크롤하고 전체 화면 역방향 비디오를 사용하는 것을 생각할 수도 있습니다. 하지만 재미는 멈추지 않습니다.

  • PuTTY는 DECSNM을 빠르게 열고 닫는 것을 벨을 울리려는 시도로 해석합니다.
  • 여러 터미널 에뮬레이터는 밝은 색상과 어두운 색상을 바꿉니다. 더 어두운 배경을 위해 DECSCNM을 요청하면 밝은 배경을 얻을 수 있으며 그 반대의 경우도 마찬가지입니다.
  • Windows 터미널은 여러 팔레트 항목, 특히 색인 색상 #232를 변경하는 DECSCNM에 응답합니다. XTerm은 색상 팔레트도 변경합니다.

그렇습니다. 전폭 역방향 비디오 바를 인쇄하는 전체 화면 응용 프로그램은 DECECM 및 EL 시퀀스를 사용하여 일부 작업을 수행해야 합니다(지연된 줄 바꿈에는 사용하기 까다로우며 언급하지도 않았습니다)... 또는 많은 공백을 인쇄하고 전경/배경 색상을 명시적으로 바꾸고 반전 비디오를 완전히 피하십시오.

추가 읽기

관련 정보