터미널에서 256가지 색상의 텍스트를 사용하는 방법을 알고 있습니다.
printf "\033[38;5;196mhello\n"
그러나 배경색의 경우 기본 8가지 색상으로 제한되는 것 같습니다.
printf "\033[41mhello\n"
256색을 배경색으로 사용하는 방법은 무엇입니까?
내 말은, 터미널은 이미 색상을 알고 있으므로 가능해야 한다는 것입니다. 그러나 구문은 무엇입니까?
관련이 있는 경우 이것이 제가 terminator
터미널 에뮬레이터와 zsh
셸로 사용하는 것입니다.
답변1
에서는 zsh
배경색과 전경색을 설정하기 위한 여러 내장 메서드가 있으므로 이스케이프 시퀀스를 하드코딩할 필요가 없습니다.
echoti setaf
터미널 set
nsi a
배경색 을 사용 f
하고 배경색을 echoti setab
설정할 수 있습니다( 해당 erm nfo 함수의 이름이 될 수 있음 ).b
setaf
setab
t
i
터미널이 256색을 지원하고(gnome-terminator와 같은 VTE 기반 터미널처럼) $TERM
올바른 이스케이프 시퀀스로 terminfo 항목을 식별하는 값으로 올바르게 설정되어 있다고 가정하면 제대로 작동합니다.
$ echoti setab 196 | sed -n l
\033[48;5;196m$
print -P
또는 또는 %
매개변수 확장 플래그 와 함께 프롬프트 확장을 사용할 수 있습니다 .
$ print -rP '%K{196}' | sed -n l
\033[48;5;196m$
(이것은 sed -n l
전송되는 해당 이스케이프 시퀀스를 표시하기 위해 여기에서 사용됩니다 $
. 이는 행의 끝만 표시하고 출력의 일부가 아니며 \033
GNU sed
명령 l
의 ESC 문자 표현입니다(8진수 033 바이트가 있음). ASCII 값))
일부 터미널(gnome-terminator와 같은 VTE 기반 터미널 포함)도 RGB 사양을 지원합니다. 이 영역에서 할 수 있는 일
$ print -rP '%K{#ffffff}' | sed -n l
\033[48;2;255;255;255m$
( 여기서 밝은 흰색은 모든 빨간색, 녹색, 파란색 구성 요소의 최대값 fffffff
이기 때문에 표시됩니다 .) ff
이 경우 zsh
xterm 스타일 시퀀스는 하드코딩됩니다(참조:거기배경) 해당하는 terminfo 함수가 없기 때문입니다. 그렇지는 않지만기준, 이는 현재 최신 FLOSS 터미널 에뮬레이터 중에서 가장 널리 지원됩니다.
%K
%F
전경의 배경색을 설정합니다. %k
/ %f
기본 색상을 복원합니다.
88 또는 256 팔레트를 지원하지 않지만 지원하는 터미널의 경우 해당 RGB 사양에 가장 가까운 색상을 얻을 수 있는 모듈 zsh
도 있습니다 .zsh/nearcolor
$ zmodload zsh/nearcolor
$ echoti colors
256
$ print -rP '%K{#ffffff}' | sed -n l
\033[48;5;231m$
(여기서 내 256색 터미널의 색상 231은 밝은 흰색에 가장 가깝고 실제로는 밝은 흰색입니다.)
X11 rgb.txt
파일 에 접근할 수 있는 경우X11 색상 이름다음과 같은 것 :
typeset -A X11_bg X11_fg
while read -r r g b c; do
[[ $r = [0-9]* ]] || continue
printf -v hex %02x $r $g $b
X11_fg[$c]=${(%):-%F{#$hex}}
X11_bg[$c]=${(%):-%K{#$hex}}
done < /etc/X11/rgb.txt
X11_bg[default]=${(%):-%k} X11_fg[default]=${(%):-%f}
(데비안과 같은 시스템은 /etc/X11/rgb.txt
패키지의 일부로 포함되어 있습니다 x11-common
).
다음과 같이 하십시오:
print -r "$X11_bg[dark olive green]text$X11_bg[default]"
자세한 내용은 다음을 참조하세요.
man 5 terminfo
info zsh echoti
info zsh print
info zsh "Prompt Expansion"
info zsh "The zsh/nearcolor Module"
(일부 시스템에서는 페이지를 사용하려면 zsh-doc
소프트웨어 패키지나 이에 상응하는 패키지를 설치해야 합니다 .)info
답변2
printf "\033[48;5;226mhello\e[m\n"
printf "\033[48;2;255;255;0mhello\e[m\n"
더표준 변형이전 버전의 VTE 라이브러리는 두 번째(RGB) 형식(나중에 사용되지 않은 "색 공간 식별자" 포함 2
)을 지원하지 않습니다(예: Debian 10의 Terminator 1.91은 libvte-2.91을 사용합니다).
답변3
전경에 대한 직접 색상 및 인덱스 색상 ITU T.416 제어 시퀀스는 SGR 38:2 및 SGR 38:5입니다. 배경 제어 시퀀스는 SGR 48:2 및 SGR 48:5와 유사합니다.
ITU T.416 섹션 13.1.8을 읽어보세요.
%TERM=rxvt-256color setterm -7 --Background "137" 16진수 덤프 -C | 00000000 1b 5b 34 38 3b 35 3b 31 33 37 6d |.[48;5;137m| 0000000b %
그런데 인덱스 색상 이상을 찾고 있다면 실제로 SGR 38:2 및 SGR 48:2를 올바르게 구현하는 터미널 에뮬레이터가 있다는 것을 알아야 합니다. 현재 일부 사람들에 의해 수정된 두 가지 역사적 오류는 하위 매개변수를 사용하지 않고 잊어버리는 것입니다.색 공간 식별자하위 매개변수. iTerm2는 2013년에 이 문제를 해결했으며 libvte(GNOME Terminator에서 사용됨)에는 :
하위 매개변수 구분 기호에 대한 지원이 추가되었습니다.2014년및 (무시된) 색상 공간 식별자2017년.
%TERM=iterm setterm -7 --Background "137" 16진수 덤프 -C | 00000000 1b 5b 34 38 3a 32 3a 3a 31 37 35 3a 31 33 35 3a |.[48:2::175:135:| 00000010 39 35 6일 |95분| 00000014 %
추가 읽기
- 문자 세트 인코딩을 위한 제어 기능. ECMA-48. 5판. 1991. ECMA 인터내셔널.
- 정보 기술 - ODA(개방형 문서 아키텍처) 및 교환 형식: 문자 콘텐츠 아키텍처. T.416. ITU.
- 조나단 데보인 폴라드(2018).
setterm
. 스낵 가이드. 소프트웨어.