2P by GN⁺ | ★ favorite | 댓글 1개
  • 터미널 색상 문제는 취향보다 표준 부재와 구현 차이에 가까워, 같은 명령 출력도 터미널·테마·앱 조합에 따라 읽기 어려워질 수 있음
  • 기본 16 ANSI 색상, 256색, 24비트 hex 색상이 함께 쓰이지만, 색상 번호가 실제 어떤 색으로 보일지는 터미널 에뮬레이터마다 달라짐
  • 파란 글자/검은 배경, 밝은 노란색/흰 배경, Solarized의 회색 매핑, ngrok 배경색처럼 대비 충돌은 프로그램의 가정과 사용자 테마가 어긋날 때 드러남
  • 대응책은 팔레트 재설정, base16-shell, LS_COLORS, NO_COLOR=true, --color=always, unbuffer, Vim/Neovim의 24비트 색상 지원처럼 여러 층으로 나뉨
  • iTerm2, tabby, kitty, Ghostty, Windows Terminal의 minimum contrast 기능은 완벽한 해결책은 아니지만, 읽을 수 없는 출력이 생기는 위험을 줄여줌

ANSI 색상과 터미널별 차이

  • 터미널에는 보통 검정, 빨강, 초록, 노랑, 파랑, 마젠타, 시안, 흰색과 각각의 밝은 버전으로 구성된 16개 ANSI 색상이 있음
  • 프로그램은 ANSI escape code를 출력해 색상을 지정함
    • 예를 들어 \033[38;5;{num}m 형태로 전경색 번호를 지정할 수 있음
  • 문제는 ANSI 색상 번호가 실제 어떤 hex 색상에 대응되는지 일관된 표준이 없다는 점
    • 터미널 에뮬레이터마다 색을 직접 선택함
    • Wikipedia의 ANSI escape code 색상 표에서도 구현별 차이가 큼
  • 이 차이 때문에 ls가 디렉터리에 사용하는 파란색이 검은 배경에서 잘 보이지 않을 수 있음
  • 밝은 노란색과 흰 배경 조합도 거의 읽기 어렵고, 밝은 초록색 같은 다른 색상에서도 비슷한 문제가 생길 수 있음

색상 팔레트를 재설정하는 방법

  • 기본 ANSI 색상이 마음에 들지 않거나 대비 문제가 있으면 팔레트 재설정으로 대응할 수 있음
  • 터미널 에뮬레이터에서 설정

    • 현대적인 터미널 에뮬레이터 대부분은 색상을 재설정하는 기능을 제공함
    • 일부는 기본 포함 테마를 제공함
    • 인기 있는 터미널 에뮬레이터일수록 선택 가능한 테마가 더 많을 수 있음
  • 셸 스크립트로 설정

    • ANSI escape code를 출력해 터미널 에뮬레이터의 색상 팔레트를 바꿀 수 있음
    • base16-shellSolarized Light 스크립트는 여러 터미널별 escape code 관례를 사용함
    • 스크립트는 TERM 환경 변수에 따라 적절한 escape code 스타일을 고르려 함
    • 셸 스크립트 방식은 터미널 에뮬레이터를 바꿔도 같은 색상 설정을 유지하기 쉬움
    • 다만 모든 터미널 에뮬레이터가 이 방식의 팔레트 변경을 지원하지는 않으며, 지원하더라도 결과가 조금씩 다를 수 있음

256색, 24비트 색상, 도구별 테마

  • 많은 터미널은 색상 지정 방식을 3가지로 지원함
    • 16 ANSI 색상
    • 확장 256색
    • #ffea03 같은 24비트 hex 색상
  • fd는 출력에서 ^[[38;5;48m 같은 escape code를 사용해 전경색 48번을 지정함
    • 이 색은 일반 터미널 색상표에 없는 라임색처럼 보일 수 있음
    • 사용 중인 색상표와 대비가 나쁠 수 있음
  • bat도 비슷하게 색상을 사용하지만, 다양한 터미널 테마에서 동작하려는 기본 출력으로 보임
  • fd, bat, delta 같은 일부 최신 터미널 도구는 임의의 사용자 지정 테마를 지원함
    • 기본 테마가 터미널 배경과 충돌할 수 있음
    • 대신 16 ANSI 색상만 고르는 것보다 도구 출력의 테마를 더 세밀하게 제어할 수 있음
  • bat --theme ansi를 쓰면 bat가 일반 터미널 색상표에 설정된 ANSI 색상을 사용함

Solarized와 base16에서 생기는 충돌

  • Solarized Light는 구현에 따라 bright 색상 매핑이 다르게 보일 수 있음
  • iTerm의 기본 Solarized Light 테마는 원래 Solarized 디자인처럼 색상 9~14번, 즉 “bright blue”, “bright red” 등을 회색 계열에 매핑함
    • ls가 디렉터리와 실행 파일에 bright 색상을 쓰면 회색으로 보일 수 있음
  • base16 Solarized Light는 bright 색상을 회색이 아니라 실제 색상으로 유지하는 변형으로 사용될 수 있음
  • 이 차이는 Vim Solarized 색상표가 회색을 사용할 수 있도록 원래 Solarized가 설계된 결과로 보임
  • base16-shellbase16-vim에 추가 색상을 제공하려고 색상 16~21을 설정함
    • ngrok이 배경을 색상 16번 “black”으로 설정하려 할 때, 해당 색상이 밝은 주황색으로 재매핑되어 있으면 매우 이상한 배경이 생김
    • 프로그램이 ANSI 배경색을 지정하고 사용자가 그 색을 다른 의미로 재매핑하면 이런 충돌이 생기기 쉬움

minimum contrast로 대비 문제 줄이기

  • 일부 터미널은 minimum contrast 기능으로 전경색과 배경색의 대비가 충분하지 않을 때 색상을 자동 조정함
  • iTerm2, tabby, kitty의 text_fg_override_threshold, Ghostty, Windows Terminal이 이 기능을 제공함
  • iTerm에서 minimum contrast 값을 40으로 설정하면, ngrok 배경색 충돌처럼 읽기 어려운 출력도 더 읽기 쉬워짐
  • 색상 설정이 잘못되었거나 프로그램과 테마가 충돌했을 때, minimum contrast는 우발적인 가독성 문제를 줄이는 실용적인 안전장치임

TERM, 파이프, 색상 비활성화

  • SSH로 접속한 시스템이 로컬의 TERM 환경 변수 값을 지원하지 않으면 색상이 제대로 동작하지 않을 수 있음
  • 시스템은 terminfo 데이터베이스를 사용하며, TERM 값이 해당 데이터베이스에 없으면 터미널에 맞는 색상 출력을 알기 어려움
  • 재현 가능한 환경은 없었지만, Stack Overflow 답변은 ssh 대신 TERM=xterm ssh 같은 형태를 제안함
  • 명령어를 파이프로 연결하면 색상이 비활성화되는 경우가 있음
    • fd | less는 색상 없이 출력될 수 있음
    • 일반적으로 grep 같은 도구에 넘길 때 escape code 없이 평문만 나오는 것은 유용함
  • 색상을 유지하고 싶으면 unbuffer fd | less -r을 사용할 수 있음
    • unbuffer는 명령이 TTY에 쓰고 있다고 인식하도록 tty를 열어줌
    • 파이프에 쓸 때 프로그램 출력이 버퍼링되는 문제도 해결함
  • 일부 명령어는 fd처럼 --color=always 플래그로 항상 색상을 출력할 수 있음

ls 색상을 끄거나 바꾸기

  • 일부 사용자는 ls 색상 출력을 원하지 않음
    • 파란색이 검은 배경에서 읽기 어렵거나
    • 터미널 색상표를 조정하고 싶지 않거나
    • 색상 자체가 도움이 되지 않을 수 있음
  • 선택지는 여러 가지임
    • ls --color=never로 색상을 끌 수 있음
    • LS_COLORS 환경 변수로 ls가 쓰는 색상을 사용자 지정할 수 있음
    • 일부 프로그램은 NO_COLOR=true를 지원하며, no-color.org에 목록이 있음
  • 예시로 LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" ls처럼 설정하면 여러 파일 종류의 색상 스타일을 0으로 맞출 수 있음

Vim과 Neovim의 변화

  • Vim 색상 설정은 과거에 터미널 색상표와 Vim 색상표를 맞춰야 해서 문제가 많았음
  • 터미널 안의 Vim 색상표 설정 방식은 크게 2가지임
    • Vim 색상 클래스를 ANSI 색상 번호에 매핑함
    • 색상표가 #faea99 같은 24비트 hex 색상을 직접 사용함
  • 20년 전에는 24비트 hex 색상을 지원하는 터미널이 흔하지 않았고, Vim도 터미널에서 24비트 색상 사용을 지원하지 않았음
  • Vim은 2016년에 24비트 색상 지원을 추가함
  • Neovim 0.10은 2024년 5월 릴리스되었고, 24비트 색상 지원 터미널에서는 termguicolors기본으로 켜짐
  • 2024년에 24비트 색상을 지원하지 않는 터미널을 쓸 계획이 없다면, 터미널 색상표와 Vim 색상표를 반드시 동기화해야 하는 부담은 사라짐
  • 이 변화로 base16-shell이 Vim 연동을 위해 색상 16~21을 특수하게 설정할 필요가 줄어듦
    • 해당 부분을 제거하면 ngrok의 주황색 배경 같은 충돌을 피할 수 있음

base16 사용 경험과 한계

  • base16-shellbase16-vim을 함께 쓰면 터미널과 Vim 색상을 맞추기 쉬움
  • fish 설정에 몇 줄을 추가하고 .vimrc에 몇 줄을 넣는 방식으로 설정할 수 있음
  • base16은 모두에게 맞는 방식은 아님
    • 내장 테마 수가 제한적이고 마음에 드는 테마가 없을 수 있음
    • Solarized base16 테마는 bright ANSI 색상을 일반 색상과 같게 설정하며, bright 색상이 달라야 하는 사용 사례에는 문제가 될 수 있음
    • base16-vim에 더 많은 색상을 제공하려고 색상 16~21을 설정하는 방식은 24비트 색상 지원 터미널만 쓰는 환경에서는 필요 없을 수 있음
    • 색상 16~21 설정은 Linux framebuffer terminal처럼 256색을 지원하지 않는 터미널에서 문제가 될 수 있음
  • base16의 커뮤니티 포크로 tinted-theming이 있음

색상표 도구와 인기 테마

여전히 남는 문제

  • tmux, SSH, Vim 조합처럼 여러 프로그램이 만나는 지점에는 추가적인 색상 문제가 생길 수 있음
  • 좋은 색상표를 고르는 일 자체도 어려움
    • 색각 이상이 있는 사용자는 적절한 색상표를 찾기 어려울 수 있음
    • 배경색이 커서나 선택 영역 색상과 너무 가까우면 위치를 찾기 어려움
    • 모든 프로그램에서 잘 동작하는 색상을 찾기는 어렵고, ngrok 사례처럼 충돌이 생길 수 있음
  • Nethack이나 Midnight Commander처럼 기본 ANSI 색상 기반의 특정한 “클래식” 모습을 기대하는 프로그램은 Solarized 같은 테마에서 낯설게 보일 수 있음
  • 한 가지 대응법은 프로그램 실행 직전에 ANSI 팔레트를 바꾸는 것임
    • 예를 들어 Nethack 실행 전에 노란색을 더 밝은 노란색으로 재매핑할 수 있음
  • 색상이 그냥 잘 동작하길 원하는 사용자에게는 많은 수동 설정이 부담이며, 합리적인 기본값과 minimum contrast 같은 기능이 중요함

댓글과 토론

Hacker News 의견들
  • 시스템용 밝은 색상 테마를 제대로 만들려다 이런 문제와 더 많은 문제를 모두 겪었고, 특히 두 가지가 흥미로웠음
    돌이켜보면 당연하지만, 밝은 테마는 화면이 달라질 때 어두운 테마보다 훨씬 미묘하게 달라져 보인다는 점이 놀라웠음. 하드웨어와 소프트웨어 설정이 색 출력 차이를 만들기는 하지만, 밝은 영역 중심의 변화는 어두운 영역 변화보다 훨씬 크게 지각됨
    또 Linux나 BSD 콘솔처럼 글꼴과 화려한 색 지원이 제한된 환경으로 내려가야 할 때가 있는데, 그러면 fdexa/lsd/whatever가 불편하거나 못 쓸 수준이 될 수 있고, 특히 후자를 ls에 매핑해뒀다면 더 귀찮아짐. 긴 삽질 끝에 X 없이도 괜찮은 터미널 기능을 쓰려고 fbterm을 맞췄지만 fbterm에도 고유한 문제가 있음. Vim 색상표를 설정할 때 기능이 빈약한 콘솔용 대체 테마를 준비하거나, Vim 명령을 안 보고 치는 연습을 많이 해둬야 함 :D
    편집: 진지한 작업용은 아니지만 X 없이도 무엇을 할 수 있는지 보여주는 스타일링한 fbterm 화면: https://i.imgur.com/RbDRgtD.png

    • 밝은 테마가 화면별로 더 미묘하게 달라져 보인다는 건 놀랍지 않음. 필름으로 아날로그 흑백 인화를 하는데, 사람 눈은 인화물의 어두운 영역보다 밝은 영역에서 미세한 톤 변화를 훨씬 잘 감지한다는 게 잘 알려져 있음
      그래서 적절한 노출과 대비를 맞출 때 상당한 시간을 하이라이트가 “딱 맞게” 보이도록 조정하는 데 씀. 디지털 인화는 안 하지만 같은 원리가 적용될 것 같음
    • 보통은 제대로 설정된 TERM 변수에 의존할 수 있어야 하고, 명령줄 유틸리티도 TERM 변수에서 알 수 있는 기능을 존중해야 함
      안타깝게도 JavaScript로 작성된 경우가 많은 “현대적” 명령줄 도구 프레임워크들은 이걸 무시하는 경향이 있음
      https://www.gnu.org/software/gettext/manual/html_node/The-TE...
    • 최근 Excel 그래프에서 많은 수의 데이터 계열을 서로 다른 색으로 보여주려 했는데, 많은 색을 쉽게 구분하는 데 가장 좋은 선택은 검은 배경 위의 단색 스펙트럼 무지개색이었음
      데이터 점에 같은 색의 약한 “빛 번짐” 효과를 주는 설정도 있어서 빛나는 점처럼 보이게 할 수 있음. 색 포화도 관점, 즉 스펙트럼 전체의 신호 대 잡음비 관점에서 검은 배경이 더 낫다는 게 말이 됨
      서로 다른 색 10개 정도는 거의 문제없이 쓸 수 있음. 또 노랑은 빨강과 초록 사이, 주황은 빨강과 노랑 사이처럼 순서/거리 정보를 전달하는 장점도 있어서, 세분화하고 두 색이 얼마나 가까운지 해석하기 쉬움
    • 멋진 글꼴과 보기 좋은 색상 테마가 있어도, 어떤 글자를 읽기 어렵게 만드는 배경 하나로 망가질 수 있음
  • 사실 그렇게 어렵다고 보지는 않음
    1단계: 대부분의 터미널 에뮬레이터는 기본 색상표가 형편없으니 바꾸면 됨. 개인적으로는 Solarized, 특히 어두운 테마를 좋아하지만 밝은 테마도 괜찮음. Solarized가 아니어도 기본 배경 위에서 어떤 색이든 읽을 수 있는 테마는 많음
    2단계: 기본으로 8비트나 24비트 색 이스케이프 시퀀스를 쓰는 명령줄 도구는 피해야 함. 논란이 있을 수 있지만, 개인적으로는 사용자에게 적대적이라고 봄. 이미 내 가독성 요구에 맞는 최선의 터미널 색상표를 골라뒀는데, 개발자가 자신을 가짜 디자이너쯤으로 여기고 그걸 덮어쓰는 건 도움이 안 됨. 도구 안에서 테마를 켜는 옵션을 제공할 수는 있지만, 기본값이 아니라 선택 사항이어야 함
    삶의 대부분을 터미널에서 보내는 입장에서 이 두 규칙만 지켜도 거의 설정 부담 없이 일관되고 읽기 쉬운 터미널 환경을 만들 수 있음. 진짜 문제는 개발자들이 8비트와 24비트 색 이스케이프 코드를 쓰는 걸 우리가 너무 용인한다는 데 있음

    • 이건 좋은 기본값의 문제와 맞닿아 있음. 사용자가 설정해야 한다면, 먼저 설정 가능하다는 걸 알아야 하고 실제로 설정까지 해야 함. 이건 큰 장벽이고 아주 적은 사용자만 해냄
      여러 해가 지나며 새 기능은 사용자 눈앞에 들이밀고 좋은 기본값은 강하게 밀어 넣어야 한다는 결론에 도달했음. 그렇지 않으면 기능은 거의 쓰이지 않음
      8비트와 24비트 색은 이미 선택적으로 쓰는 기능이고 설정도 가능함. 잘 동작하는 터미널 프로그램이라면 TERMCOLORTERM 환경 변수가 그런 색을 쓸지 결정함
    • 특히 Solarized Dark는 터미널 사용에 잘 맞지 않음. 작성자가 “bright black”을 배경과 거의 같은 색으로 지정했기 때문임
      많은 애플리케이션은 “bright black” 텍스트가 배경 위에서 보일 거라고 기대함. 예시는 여기 많음: https://github.com/altercation/solarized/issues/220
      거의 모든 다른 색상표는 “bright black”을 검은 배경 위에서 읽을 수 있는 회색으로 표현함
    • 기본 배경 위에서 어떤 색이든 읽을 수 있는 테마가 있더라도, 텍스트와 배경색을 둘 다 지정하는 애플리케이션이 있음
      예를 들어 pamix는 배경을 검정으로 설정하고, tmux 상태줄이나 ngrok도 비슷함. 그러면 그걸 처리하려고 토끼굴로 빠지게 됨
    • “가장 좋은 처리 방식은 무엇인가?”를 먼저 물어봐야 하는데, 여기서 좋다를 정의해야 함. 개인적으로는 사용자 맞춤 설정은 한 곳에 있어야 하고, 프로그램에 미치는 영향은 코드 줄 수 같은 면에서 최소여야 한다는 원칙을 선호함
      둘 다 해결책이 터미널에 있어야 함을 시사함. 터미널 프로그램부터 합리적인 기본 색을 가져야 하며, 파랑은 알아볼 수 있게 파랑이어야 하고 흔한 색각 이상도 고려해야 함. 예를 들어 순수한 빨강을 검은 배경 위에 두면 읽기 어려우니 ff0000만 쓰지 말고 조금이라도 섞는 편이 나음
      터미널이 합리적인 기본값을 갖게 되면 명령줄 프로그램은 표준 16색을 쓰면 됨. 여기서 24비트 색을 쓰려는 시도는 “터미널 쪽이 정상성을 제공하길 포기했다”거나 “내가 제일 잘 안다”는 뜻에 가깝고, 결국 사용자는 N개의 프로그램을 각각 설정해야 함. 명령줄 앱 안에 테마를 정의하지 말자는 쪽이 내가 생각하는 최선임
      웹사이트와 글꼴도 비슷하게 봄. 콘텐츠는 HTML로 제공해서 사용자가 원하는 방식으로 볼 수 있게 해야 하고, 페이지 배치도 잡지 레이아웃처럼 고정하지 말고 흐르게 해야 함
      데스크톱 소프트웨어에서도 비슷함. Wayland 컴포지터가 창 위치를 기억해야 함. X 프로그램마다 자기 창 위치를 저장하고 복원하는 건 어리석었음. Wayland는 환경 정보를 아는 것이 보안 문제라고 말하고, 그 점에는 동의하지만 그러면 그 기억은 데스크톱 환경의 일이 됨. 모든 앱에서 해당 코드를 덜어낼 수도 있음
      “소프트웨어 스택의 어디에서 이걸 처리해야 하는가?”라는 질문은 여러 영역에서 반복됨. 어디에 두어야 하는지 고를 때 목표가 무엇인지부터 답해야 하며, 내 답은 늘 단순성과 유지보수성 쪽으로 기움
    • 기본으로 8비트나 24비트 색 이스케이프 시퀀스를 쓰는 명령줄 도구를 피하는 게 실제로 얼마나 어려운지 궁금함
      Julia의 글도 이 아이디어를 언급하지만, 구체적인 고생까지 들어가지는 않음. 관련해서 터미널 색상표가 기본 16색만 다루는지, RGB와 회색조 영역까지 건드리는지도 궁금함. 8비트와 16비트 색도 가독성 요구에 맞게 조정할 수는 있을 테니까
  • 색을 고르는 입장이라면 새 APCA 알고리즘(Advanced Perception of Colour)으로 색을 확인해보면 좋겠음
    APCA는 앞으로 WCAG 3.0에서 기존 x:y 대비 방식을 대체할 예정인데, 몇 년은 더 걸릴 수 있음. 글꼴 크기, 굵기, 전경/배경, 심지어 주변 조명과 환경, 의도한 용도까지 고려한다고 함
    터미널 에뮬레이터가 기기의 조도 센서를 이용해 환경 요인에 맞춰 대비를 최적화할 수 있다면 꽤 괜찮을 듯함

    • 현재 쓰는 터미널 색상표는 직접 이렇게 맞췄음. 모든 ANSI 색에 대해 개인적인 대비 요구를 만족하는 기성 테마를 하나도 찾을 수 없었기 때문임
  • 색을 아예 끄고 싶어 하는 완전한 광인들도 있음[0]. 직접 시도해보고 싶기도 하지만, 예쁜 색도 좋아함
    [0] https://no-color.org/

    • :syntax off가 내 유일한 Vim 설정임. 터미널 색상 세트는 컴퓨터 프로그래머와 전기공학자, 그리고 색에서 중요한 건 색 자체가 아니라 밝기라는 걸 모르는 사람들이 설계했기 때문임
    • 단색 터미널에 익숙해지면 대부분의 색이 산만하고 주의를 빼앗는다고 느끼기 시작함
      터미널에서 색을 원하지 않는 사람과, 브라우저에서 강한 광고 차단기를 쓰거나 읽기 모드를 많이 쓰는 사람 사이에 상관관계가 있는지 궁금함
    • 색 시퀀스는 이식성이 없고 문제를 일으키는 것으로 알려져 있음. 예를 들어 색이 들어간 pytest 보고 때문에 Jupyter 세션이 죽는 경우가 있음
      출력을 파이프로 넘길 때는 색이 전혀 이득 없이 부채만 됨. 핵심은 선택권에 더 가까움
    • 나도 그쪽임. 특히 코딩할 때는 거의 모든 색칠이 산만하고 역효과라고 봄
      Linux와 Windows를 오가면 더 심해짐. 많은 도구의 기본 색 사용은 거의 못 쓰는 수준이거나 실제로 못 쓰게 만듦
      일부 도구는 --color=never 옵션을 제공하고, 꽤 많은 도구가 NO_COLOR를 존중함. 안타깝게도 전부는 아니고, 그렇게 한다는 도구들도 그 모드가 파이프라인이나 프로그래밍 인터페이스 용도로만 쓰일 거라고 가정하는 경우가 있음. 그래서 온갖 불행한 동작이 생김
    • 나도 그 방향으로 가고 있음. zenbones를 보다가 결국 https://github.com/savq/melange-nvim에 정착했음
      의미 있는 색온도라는 일관된 색상표 개념이 있고, 너무 많은 푸른빛을 바라보는 눈을 덜 피곤하게 하려고 따뜻한 쪽으로 기울어 있음. alacritty 색상표도 함께 제공함
  • 오래전부터 터미널에 밝은 테마를 쓰고 싶었지만, 어두운 터미널 배경에 최적화된 사용자 지정 비ANSI 색을 쓰는 프로그램이 너무 많아서 늘 포기했음
    일부 프로그램은 색을 설정할 수 있지만, 모든 프로그램을 하나씩 설정하는 건 너무 번거롭게 느껴졌음. 그래서 지금은 어두운 터미널 배경을 쓰되, 모든 색이 내 기준에서 충분한 대비율을 갖고 APCA/WCAG 3 대비 검사도 통과하는 ANSI 테마를 직접 골라 쓰고 있음. 만족함 :)

    • 고차 시각 수차가 있는 사람들에게는 어두운 모드가 애초에 선택지가 아님. 반대로 백내장이 있는 일부 사람에게는 밝은 모드가 그럴 수 있음
      OSC 11 제어 시퀀스를 쓰면 프로그램이 배경색을 알아낼 수 있지만, 신경 쓰는 프로그램은 거의 없음. 보통 누군가 노란 경고 메시지가 멋져 보인다고 생각하면 거기서 끝남
      이건 또 다른 문제로 이어짐. xterm 호환이 아니면서 기본으로 TERM=xterm256-color를 설정하는 인기 터미널들이 있음
      편집: 방금 xtermcontrol을 발견했는데, 스크립트에서 배경 확인을 추상화할 수 있고 주요 패키지 관리자에 모두 들어 있음
    • 한동안 이 설정 지옥을 피하려고 256색 미지원 16색 터미널인 척했음. 나쁜 색보다는 색이 없는 게 낫다고 생각해서 https://no-color.org/도 시도했음
      요즘은 포기하고 대부분의 앱을 수동으로 ANSI 색을 쓰도록 설정함. 예를 들어 fzf 같은 건 명령줄 스위치가 있음. Vim과 Emacs만 비ANSI 앱으로 두고, 나머지 터미널에서 쓰는 색상표에 맞춰 설정함. 원하면 vim-dim 같은 것으로 한 단계 더 갈 수도 있음
    • 많은 터미널, 예를 들어 trinity/tde3의 konsole은 기본 색상을 직접 조정할 수 있어서 도움이 됨
    • macOS의 iTerm과 내가 쓰는 프로그램들, 예를 들어 neovim에서는 문제가 없었고, 기본 상태에서도 괜찮아 보였음
  • Emacs에는 잘 발견되지 않는 frame-background-mode[0]가 있는데, 사실상 lightdark 중 하나임
    Emacs가 왜 어떤 항목에 이상한 색을 골랐는지 궁금할 때는 대개 frame-background-mode가 잘못된 경우가 많음
    [0]https://doc.endlessparentheses.com/Var/frame-background-mode...

    • 근본 문제는 터미널이 COLORFGBG 변수를 설정하지 못하는 데 있는 경우가 많음
      흰 글자의 어두운 배경 터미널에서는 export COLORFGBG='15;0'
      검은 글자의 밝은 배경 터미널에서는 export COLORFGBG='0;15'
    • 더 나은 링크: <https://www.gnu.org/software/emacs/manual/html_node/emacs/Fa...>
  • 거의 10년 동안 약간 수정한 FlatUI 색상표를 써왔고, 실제로 문제가 된 상황은 거의 없었음
    png 파일: https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
    imgur 링크: https://imgur.com/a/flatui-7mqVZAY
    기반: https://flatuicolors.com/palette/defo

    • Atom 편집기에서 나온 걸로 기억하는 One Dark 테마와 비슷해 보임
      나도 내 테마를 거의 10년째 쓰고 있음. iTerm, vim, Emacs, vscode 등에서 잘 동작함
  • Apple Terminal을 오래 써왔고, 예전에는 “Terminal Fructose”라는 괜찮은 색상표 모음이 있어서 작업별로 서로 다른 배경색을 쓰곤 했음. Apple도 어느 시점에 테마로 그걸 내장했음
    하지만 Apple은 Terminal 지원을 방치해왔고, 256색 초과를 지원하지 않으며 더 현대적인 기능도 부족함. Neovim+LazyVim 구성과도 잘 맞지 않음
    더 나은 터미널을 찾으려고 iTerm2, Kitty, Alacritty, Wezterm을 오갔지만 모두 더 현대적이면서도, 여러 배경색/테마의 창을 빠르게 여는 기본적인 “New Window with Profile ...” 옵션은 없어 보였음. 적어도 약간의 삽질 없이는 그랬음
    지금은 Wezterm에 정착했는데, 주된 이유는 Windows에서도 동작하고 wezterm.lua 설정을 공유할 수 있기 때문임. 참고로 Windows Terminal도 실제로 꽤 괜찮음. 그래도 빠른 작업, 예를 들어 python3를 REPL로 써서 계산하거나 16진수/2진수 테스트를 할 때는 여전히 Apple Terminal을 실행하곤 함

    • iTerm에는 정확히 그 기능이 있음
    • 이상함. 나는 “new tab with profile” 지원 때문에 Apple Terminal을 아주 빨리 버리고 iTerm2로 갔음
    • Wezterm을 계속 쓰는 이유는 두 가지임. 여러 플랫폼에서 설정을 쉽게 공유할 수 있고, 설정 언어가 Lua
      iTerm2에서 그리운 기능이 몇 가지 있긴 한데, 대부분 마우스 관련임. 그 외에는 며칠 저녁 동안 원하는 대로 설정했고, cmd-n이 현재 디렉터리가 아니라 기본 디렉터리에서 새 창을 열게 만든 뒤로 만족하며 쓰고 있음
    • WezTerm에 “New Window with Profile...”을 추가하고 싶다면, 다른 셸을 시작하는 launch_menu [1]나 명령 팔레트에 항목을 추가하는 augment-command-palette [2] 쪽에 뭔가 해킹해 넣을 수 있을 것 같음
      [1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
      [2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
      맞음, 약간의 삽질이 필요함. 하지만 아주 구체적인 기능을 원하는 방식 그대로 프로그래밍하는 게 WezTerm다운 경험의 정점임
    • KDE 터미널인 Konsole은 이걸 지원함. 메뉴에서 하거나 새 탭 아이콘을 길게 누르면 됨. MacOS에서도 쓸 수 있는 걸로 알고 있음
  • 터미널만이 아니라 네온사인이나 LED 간판에서도 파란색은 밤에 눈에 가장 힘듦
    멀리서 보면 항상 흐릿하고 초점도 맞지 않음. 큰 회사들이 파란 조명으로 거대한 간판을 걸어둔 걸 보면, 사람들이 읽을 수 없다는 걸 깨닫지도 못하고 많은 돈을 쓰는 게 신기함

  • 노트북에서 일광 주기에 맞춰 밝은/어두운 모드를 자동 전환해두었는데, 밝은 배경에 어두운 글자 모드로 바꿀 때 망가지는 색 출력 애플리케이션 수가 놀라울 정도임
    명령줄 도구를 만들면서 반드시 색을 써야겠다면 ANSI 16색만 쓰거나, 최종 사용자가 색상표를 바꿀 수 있게 해야 함