답변:
setf
8 색으로 제한됩니다. setaf
최대 256 색을 설정할 수 있습니다.
(다음 모든 정보는 내 터미널이므로 urxvt에만 적용되지만 정보는 동일하지 않으면 다른 터미널과 유사합니다)
모두 setf
와 setaf
다른 이스케이프 코드를 제공합니다. 다음에서이를 볼 수 있습니다.
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
내 urxvt(7)
맨 페이지에서 :
"ESC [ Pm m"
Character Attributes (SGR)
...
Pm = 30 / 40 fg/bg Black
Pm = 31 / 41 fg/bg Red
Pm = 32 / 42 fg/bg Green
Pm = 33 / 43 fg/bg Yellow
Pm = 34 / 44 fg/bg Blue
Pm = 35 / 45 fg/bg Magenta
Pm = 36 / 46 fg/bg Cyan
Pm = 37 / 47 fg/bg White
Pm = 38;5 / 48;5 set fg/bg to colour #m (ISO 8613-6)
따라서 위의 xxd
출력 tput setf 2
에서을 사용 Pm = 32
하여 색상을 녹색으로 설정하는 것을 볼 수 있습니다 . tput setaf 2
반면에는 Pm = 38;5
ISO 8613-6 (녹색)에 정의 된 색상 코드를 나타내는을 사용합니다 .
ISO 8613-6에서 색상 0x00-0x07은 표준 색상과 동일하고 0x08-0x0f는 표준 "굵은"색상입니다. 0x10-0xff에 도달하면 새로운 색상을 얻게됩니다.
위키 백과 에서 도난당한 경우 :
0x00-0x07: standard colors (as in ESC [ 30..37 m)
0x08-0x0f: high intensity colors (as in ESC [ 90..97 m)
0x10-0xe7: 6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5)
0xe8-0xff: grayscale from black to white in 24 steps
tput
그러나 실제로 사용 가능한 ANSI 색상 순서 범위를 사용 하지 않는 것 같습니다 . 어떤을 위해 n > 7
, tput setaf n
내 터미널에서 텍스트에 영향을주지 않습니다.
tput setf 2
하고 tput setaf 2
있다 모두 .[32m
.
매뉴얼에서 : man 5 terminfo
Tektronix 유형 터미널에서 현재 전경색 또는 배경색을 변경하려면 setaf (ANSI 전경 설정) 및 setab (ANSI 배경 설정) 또는 setf (전경 설정) 및 setb (배경 설정)를 사용하십시오. 이들은 하나의 매개 변수, 색상 번호를 사용합니다. SVr4 문서는 setaf / setab 만 설명합니다 . XPG4 초안은 "터미널이 백그라운드 및 포 그라운드를 설정하기 위해 ANSI 이스케이프 시퀀스를 지원하는 경우 각각 setaf 및 setab 로 코딩되어야합니다 . 터미널이 백그라운드 및 포 그라운드를 설정하기 위해 다른 이스케이프 시퀀스를 지원하는 경우 setf 및 setb각각. vidputs () 함수와 refresh 함수는 setaf 와 setab 이 정의 된 경우이를 사용 합니다. "
따라서 대답은 다음과 같습니다. setaf 는 ANSI 전경 설정을 의미 합니다 . 즉, ANSI 이스케이프 시퀀스를 사용하고 setf 는 Set Foreground를 의미합니다 (ANSI 이외의 일부 이스케이프 시퀀스 사용).
두 기능 세트는 ANSI 색상 목록에서 빨강 / 파랑에 대해 서로 다른 순서를 사용합니다.
언급 한대로 ncurses terminfo 매뉴얼 페이지에 설명되어 있습니다 . 일부 역사 :
setf/setb
.Sf/Sb
보다는 코드를 setaf/setab
(그리고 AF/AB
termcap을 위해) - 그러나 ANSI 이스케이프 시퀀스를 사용하여가 (이 termcap을 작업) 대신 사용하는 것보다 올바른 은 ANSI 기능과 능력을.기능 문자열 목록setaf/setab
에서 해당 위치를 유추 할 수 있으므로 ANSI 는 terminfo의 기록에서 상당히 늦게 추가되었습니다 . 그것들은 몇 년에 걸쳐 단계적으로 추가되었으며 일부 시스템은 달랐습니다 (ncurses는 그러한 시스템과 일치하도록 컴파일하는 것과 같은 몇 가지 예가 있습니다). 그것은 참조를 위해 사용될 수있는 소수의 유용한 터미널 설명을 설명했다.Caps.hpux
이 모든 점에서 기존 setf/setb
문자열이 ANSI 순서와 일치하지 않는다는 사실 은 즉시 눈에 띄지 않았 으며 1998 년 에 일부 수정 사항이 발생했으며 faq는 왜 빨간색 / 파란색으로 바뀌 었 습니까? .
8 색 ANSI 시퀀스를 16 색으로 확장 할 수 있었지만 (8-15 색이 0-7의 밝은 버전이라고 가정 setf/setb
하여) 처음 16 색을 넘어 확장하는 구성표를 발명 할 이유는 없었습니다 .
terminfo(5)
은 함께 제공 되는 매뉴얼 페이지를 참조ncurses
하십시오.