어둡거나 밝은 터미널 배경을 설정하기 위한 공용 환경 변수

어둡거나 밝은 터미널 배경을 설정하기 위한 공용 환경 변수

나는 썼다숫자 ~의 디버거이들 모두는 터미널 세션에 표시되는 소스 코드 텍스트의 색상을 지정할 수 있습니다. 일부 터미널은 어두운 배경을 가지고 있고 일부 터미널은 밝은 배경을 가지고 있으며 물론 터미널 구성에 따라 색상이 달라야 한다는 것을 그들은 모두 알고 있습니다.

단말기가 기본 배경화면과 맞지 않을 때 다른 방식으로 설정해야 하는 것이 귀찮아서, 이 문제를 자동으로 해결할 수 있는 방법을 찾고 싶었습니다. 제안? (모두 옵션을 지원합니다 --highlight={light|dark|plain})

간단한 메커니즘은 환경 변수를 끄는 것입니다. 내 쉘 프로필에는 을 사용해 왔지만 이미 , , 등과 DARK_BACKGROUND_COLOR같은 기본 이름이 있는 경우 해당 이름을 사용하고 싶습니다.PAGEREDITORSHELLHOME

환경 이름에 대한 규칙이 있습니까? 다른 제안?

편집하다:허용된 답변과 토론을 바탕으로 어두운 배경(검은색에 기술적으로 흰색 텍스트)에 DARK_BACKGROUND_COLOR. COLORFGBG값을 사용하는 것에서 밝은 배경에 (기술적으로 흰색 텍스트) 로 전환했습니다 .15;00;15

답변1

그런 합의는 없습니다. 또한 프로그램이 이 변수를 업데이트하지 않는 다른 터미널 에뮬레이터를 시작하거나 프로그램이 여러 터미널에 연결되는 경우 값이 최신이 될 수 있으므로 환경 변수는 터미널에 대한 정보를 보고하는 좋은 방법이 아닙니다.

( TERM환경 변수는 보편적이기 때문에 이러한 문제가 발생하지 않습니다. 모든 터미널 에뮬레이터가 이를 설정하고 모든 프로그램이 이에 대해 알고 있습니다. 문제는 변수가 부분적으로 지원되는 경우에만 발생합니다.)

정보를 얻는 올바른 방법은 터미널에 쿼리하는 것입니다. Unix 세계에서는 터미널이 "내 쿼리에 응답하는 일부 데이터를 다시 전송"하는 것으로 해석하는 이스케이프 시퀀스를 작성하여 이를 수행합니다. ~처럼토마스 디키는 설명한다,xterm에는 이러한 제어 시퀀스가 ​​있습니다, OSC 11 ; ? BEL(텍스트 매개변수 설정, 매개변수 11=텍스트 배경색, 값은 ?설정이 아니라 쿼리를 나타냄). \e]11;?\a터미널(여기서 \e이스케이프 문자( ^[) 및 \a벨 문자( )) 에 쓰면 ^Gxterm이 비슷한 문자열 \e]11;rgb:0000/0000/0000\a(검은색 배경)로 응답합니다. 불행하게도 이 이스케이프 시퀀스를 지원하는 다른 터미널 에뮬레이터는 거의 없습니다. xterm에서도 이 기능은 비활성화될 수 있습니다.XTerm.VT100.allowColorOps자원) 이는 보안 위험이 있기 때문입니다. 터미널에 쓰면 기록되는 텍스트에 의해 출력이 부분적으로 제어되는 해당 터미널에 출력이 발생할 수 있습니다.

Rxvt는 환경 변수를 전경색(7은 밝은 회색)이고 배경색(검은색)인 문자열 COLORFGBG로 설정합니다. Konsole도 이를 지원합니다.7;070

Emacs는 설정을 위해 터미널의 배경이 밝은지 어두운지 감지하려고 시도합니다.background-mode터미널 매개변수. Emacs 24.5부터 백그라운드 모드를 자동으로 설정하는 세 가지 방법이 있습니다.

  • 존재하다xterm, Emacs는 OSC 11위에서 설명한 대로 이스케이프 시퀀스를 사용합니다.
  • 존재하다가치를 얻다, Emacs는 COLORFGBG위에서 설명한 대로 환경 변수를 사용합니다.
  • 존재하다운영 체제그리고윈도우콘솔, Emacs는 운영 체제별 인터페이스를 사용하여 터미널에 대한 정보를 얻습니다. 이러한 인터페이스는 이스케이프 시퀀스와 동일한 목적으로 사용됩니다 OSC 11.

이로 인해 많은 터미널이 제외되지만 약간의 진전이 있습니다. vte 라이브러리는 gnome-terminal, guake, terminator, xfce4-terminal 등과 같은 많은 터미널 에뮬레이터에 대한 지원을 제공하여 OSC 11xterm과 유사한 보고를 구현합니다.버전 0.35.2부터. 환경 변수를 확인하여 VTE 기반 터미널을 감지할 수 있습니다 VTE_VERSION. 값은 숫자이므로 3502 이상이 필요합니다.

정보가 애플리케이션에 보고되는 방식을 표준화하려는 경우 최종 지원은 중요하지 않을 수 있습니다. 결국 밝은 배경을 선호하는지 어두운 배경을 선호하는지 알 수 있습니다. 그런 다음 rxvt를 고수하고 를 사용하는 것이 좋습니다 COLORFGBG. 왜냐하면 누군가가 이미 사용하고 있는 유일한 인터페이스이고 터미널 지원과 독립적으로 채택할 수 있기 때문입니다. 인터페이스는 COLORFGBG제한되어 있습니다. 16가지 색상만 있고 모두가 한 가지 색상에 동의하는 세상을 위해 설계되었습니다.색상 번호에서 색상으로 매핑(적어도 대략적으로 정확한 색조는 다양합니다). Konsole은 16개 이상의 색상을 지원하지만 보고 시 근사치를 사용합니다 COLORFGBG. 16가지 표준 색상 중 하나로 전경색과 배경색을 근사화합니다. 밝은 것과 어두운 것에만 관심이 있다면 문제가 되지 않습니다. 어두운 배경에 밝은 텍스트 COLORFGBG로 설정하거나 밝은 배경에 어두운 텍스트로 설정하면 됩니다.15;00;15

답변2

비어 있는. 자유롭게 회의를 열 수 있습니다.

일부 프로그램(예:xterm)는 현재 설정된 전경색과 배경색을 애플리케이션에 제공할 수 있습니다(참조:"다이내믹 컬러"). 하지만 다음과 같은 앱 외에도xtermcontrol, 그것을 사용하는 사람은 거의 없습니다. Emacs는 현재 배경색을 쿼리하여 background-mode색상 테마의 "어두운" 또는 "밝은" 버전을 적용할지 여부를 결정하는 터미널 매개변수를 설정합니다. 반면에 Vim은 xterm 제어 시퀀스를 사용하여 특수 키를 통해 전송되는 색상 및 문자열의 수를 제어할 수 있습니다(참조:"Termcap/Terminfo 문자열 요청"존재하다XTerm 제어 순서), 전경색/배경색의 느낌을 감지하지 못합니다.

답변3

사려 깊은 답변을 바탕으로토마스 디키그리고자일스그리고 이 답변의 댓글에서 OSX에 대해 무엇을 해야 하는지에 대해 정리했습니다.github의 스크립트.

핵심은 배경과 전경의 RGB 색상 값을 기반으로 xterm 호환 색상 쿼리를 사용하는 것입니다. 그래도 작동하지 않으면 설명 COLORFGBG하고 실패하여 다양한 터미널에 미리 설정된 기본값을 사용하십시오. 예를 들어, xterm의 기본값은 밝은 배경입니다.

사전 설정된 기본값과 RGB 어두움/밝음 보간에 대한 코드는 GNU emacs 코드(Gilles가 제안한 대로)에서 파생됩니다.

MS Windows 관련 코드를 추가하지는 않았지만 사람들은 해당 코드에 대한 작업을 수행하거나 다른 수정 사항을 추가하기 위해 자유롭게 풀 요청을 제출해야 합니다.

관련 정보