2P by neo 10달전 | favorite | 댓글 1개

Emacs를 예쁘게 만들고 싶었다 — 터미널에서 24비트 색상 사용하기

  • Emacs 커뮤니티가 활성화되어 있으며, LSP를 통해 현대적인 자동완성 및 인라인 타입 검사 기능을 제공함.
  • 그래픽 환경에서 Emacs는 자동으로 24비트 색상을 지원하지만, 터미널에서는 그렇지 않음.

ANSI 이스케이프 코드

  • 초기 하드웨어 터미널은 서로 호환되지 않는 제어 코드를 제공했으며, ANSI는 이를 표준화함.
  • SGR(Select Graphics Rendition)을 통해 다양한 문자 디스플레이 속성을 설정할 수 있음.

3-, 4-, 8비트 색상

  • 색상이 도입되었을 때 8가지 기본 색상이 있었으며, 나중에 밝은 색상을 추가하여 총 16가지 색상이 됨.
  • 1999년 Todd Larason이 xterm에 256색상을 지원하는 패치를 추가함.

24비트 색상 지원은 어디에서 왔는가?

  • 8비트 및 24비트 색상을 호환 터미널로 보내는 방법은 잘 문서화되어 있음.
  • 70년대 ANSI 표준화 과정과 90년대 ISO 8613-6 (ITU T.416)을 통해 38과 48이 확장된 전경 및 배경 색상 모드로 정의됨.

Terminfo

  • Terminfo는 터미널 기능의 데이터베이스를 제공하며, TERM 환경 변수를 통해 프로그램이 어떤 terminfo 레코드를 사용할지 알려줌.
  • xterm-256colorxterm-direct는 각각 256색상과 RGB 색상을 지원함.

TERM 설정: 세미콜론 문제

  • 여러 터미널에서 세미콜론 구문만 지원하므로, TERM이 올바르게 설정되어 있는지 확인해야 함.

Emacs 설정

  • Emacs는 truecolor 지원을 감지하는 방법을 문서화하고 있음.
  • RGB는 Emacs의 기본 색상 기능으로, setf24setb24 문자열을 먼저 찾음.

중첩된 터미널

  • 일반적인 워크플로우는 여러 터미널을 중첩하여 사용함.
  • 모든 레이어가 24비트 색상을 이해하고 정확하게 변환해야 함.

그래픽 터미널 에뮬레이터

  • 대부분의 터미널은 TERM을 합리적인 기본값으로 설정하거나 오버라이드할 수 있음.

ssh

  • ssh는 원격 호스트로 TERM 값을 전달함.

tmux

  • tmux 내에서는 tmux-direct와 같은 TERM을 설정해야 함.

GN⁺의 의견

  • 이 글에서 가장 중요한 것은 터미널 환경에서도 고품질의 색상을 사용하고자 하는 사용자의 요구와 이를 가능하게 하는 기술적인 발전임.
  • 24비트 색상 지원은 개발자들이 더 나은 사용자 경험을 제공할 수 있게 해주는 중요한 기능으로, 특히 코드 편집기와 같은 도구에서 시각적인 편의성을 크게 향상시킴.
  • 이 글은 터미널과 Emacs 사용자들에게 흥미롭고 도움이 될 것이며, 터미널 기반 작업 환경에서도 뛰어난 시각적 경험을 추구하는 사용자들에게 유용한 정보를 제공함.
Hacker News 의견
  • 터미널 애플리케이션의 복잡성에 대해 놀라움을 표현하며, iTerm과 Kitty와 같은 터미널 애플리케이션 개발자들에게 감사함을 전함.

    • iTerm과 zsh를 위한 탭 색상 설정 함수를 모아둔 링크를 공유함.
    • terminfo와 구식 telnet을 통한 HTTP 또는 SMTP 연결 방식을 비교하며, 텍스트 기반 인터페이스의 복잡성을 지적함.
  • 개인적으로 터미널 앱마다 16색 팔레트를 조정하는 것이 애플리케이션 측 터미널 코드를 정확하게 맞추는 것보다 쉽다고 생각함.

    • .Xdefaults 파일과 사용자 정의 테마 .el 파일에서 색상을 설정하는 코드 예시를 제공함.
    • 이를 통해 ls 출력 등의 색상도 더 나아짐을 언급함.
  • 저자가 "export COLORTERM=truecolor"를 알았다면 더 나은 경험을 했을 것이라고 추측함.

    • 이는 Emacs 문서의 각주에서 truecolor 지원 감지에 대해 언급되며, Konsole 스크린샷에서도 나타나지만, 터미널 멀티플렉서의 여러 계층 속에서 놓칠 수 있음을 지적함.
    • 이 설정을 통해 복잡한 설정을 건너뛰고 애플리케이션이 true color를 원한다는 것을 이해하게 만드는 단계로 바로 넘어갈 수 있음을 설명함.
  • Emacs를 사용할 때 반드시 터미널을 사용할 필요는 없으며, MacOS, Windows, X.org 또는 Wayland용 "그래픽" 프론트엔드를 사용할 수 있음을 강조함.

    • 그래픽 Emacs는 터미널에서 실행되는 것처럼 보이지만, 실제로는 이미지 뷰어를 포함한 다양한 기능을 가짐을 언급함.
    • Emacs 사용자 설문조사에서 80%가 그래픽 프론트엔드를 사용한다고 답함.
  • 컴퓨팅이 1970년대 터미널 에뮬레이터와 편집기, 운영 체제 버전을 사용하는 생산 시스템을 통해 방향을 잃었을 수 있음을 지적함.

    • 컴퓨터가 수백만 배 더 강력해졌음에도 불구하고, 여전히 반세기 전과 같은 방식으로 작업을 수행하고 있음을 비판함.
  • Cool Retro Term을 사용하여 Emacs를 더 멋지게 보이게 하고 싶어함을 농담으로 표현함.

    • 실제로는 프레젠테이션을 위해서만 Cool Retro Term을 사용함을 밝힘.
    • 자신의 Emacs가 상자에서 24비트 색상을 지원한다는 것을 발견하고, 문법 강조가 약간 성가시다고 언급함.
  • Windows 10 명령 프롬프트에서 표준 ANSI 이스케이프 시퀀스가 작동하며, 24비트 색상도 잘 작동한다는 것을 발견함.

    • 빨간색 배경으로 "Hello"를 출력하는 예시 코드를 제공함.
  • Emacs가 vim/neovim과 비교하여 GUI 지원이 일급 시민으로 취급된다는 것이 가장 좋은 점임을 언급함.

    • gVim과 수많은 미완성 neovim 프론트엔드가 있지만, Emacs는 기본적으로 진정한 GUI를 통해 실행됨을 선호함.
    • 터미널에는 현대에는 불필요한 역사적 잔재와 제한이 많다고 지적함.
    • 원격 서버에서 Emacs를 실행하는 문제가 있다면 TRAMP와 emacsclient(TCP를 통해 작동하는지 여부)를 사용할 수 있음을 언급함.
  • 색상을 최소한으로 사용하는 Emacs 설정을 사용하기 때문에 이 기능을 사용하지 않을 것이라고 하면서도, 읽는 것을 매우 즐겁게 생각함을 표현함.

    • tmux의 선명한 녹색과 Emacs 색상의 녹슨 빨간색 갈색에 익숙해짐을 언급함.
  • 표준이 높은 가격에 묶여 있어 사람들이 구매하지 않고도 이러한 길이를 갈 수밖에 없는 것은 정말 부끄러운 일임을 비판함.

    • 표준은 공개적으로 이용 가능해야 하며, 과거에는 인쇄 비용을 청구하는 것이 타당했을 수 있지만, PDF가 $200인 것은 믿을 수 없음을 지적함.