이 명령 tput
에는 색상 setf
및 을 설정하는 두 가지 옵션이 있지만 setaf
둘 다 내 컴퓨터에서는 제대로 작동하는 것 같습니다.
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
setb
그리고 비슷한 이중성을 갖고 있는 것 같아요 setab
.
이 두 가지 옵션의 차이점은 무엇입니까?
답변1
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
볼 수 있습니다 . 반면에 ISO 8613-6(녹색)에 정의된 색상 코드를 나타냅니다. ISO 8613-6에서 색상 0x00-0x07은 표준 색상과 동일하며 0x08 - 0x0f는 표준 "굵은" 색상입니다. 0x10-0xff에 도달하면 새로운 색상을 얻게 됩니다.tput setf 2
Pm = 32
tput setaf 2
Pm = 38;5
에서 도난당함위키피디아:
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
답변2
매뉴얼에서:man 5 terminfo
Tektronix 유형 터미널에서 현재 전경색이나 배경색을 변경하려면 다음을 사용하십시오.세타프(ANSI 전경 설정) 및세트탭(ANSI 배경 설정) 또는세테프(전경 설정) 및설정값(배경 설정). 색상 번호라는 하나의 매개변수를 사용합니다. SVr4 문서에서는 다음과 같은 내용만 설명합니다.세타프/세트탭; XPG4 초안은 다음과 같습니다. "터미널이 배경 및 전경 설정을 위해 ANSI 이스케이프 시퀀스를 지원하는 경우 다음과 같이 인코딩되어야 합니다.세타프그리고세트탭, 각각. 터미널이 배경 및 전경 설정을 위해 다른 이스케이프 시퀀스를 지원하는 경우 다음과 같이 인코딩되어야 합니다.세테프그리고설정값, 각각. vidputs() 함수 및 새로고침 함수 사용세타프그리고세트탭정의된 경우. "
대답은 다음과 같습니다.세타프방법ANSI 전망 설정즉, ANSI 이스케이프 시퀀스를 사용하고세테프방법전경 설정(ANSI 이외의 일부 이스케이프 시퀀스 사용)
답변3
두 가지 기능 세트는 ANSI 색상 목록에서 서로 다른 빨간색/파란색 순서를 사용합니다.
언급했듯이 이것은 ncurses에 설명되어 있습니다.terminfo 매뉴얼 페이지. 일부 역사:
- 초기(1990년대 중반), 대부분 사용 가능"색상"사용된 터미널에 대한 설명입니다
setf/setb
. Sf/Sb
termcap 사용자는 대신 해당 코드setaf/setab
(termcap도 포함AF/AB
)를 사용하지만 다음 대신 ANSI 이스케이프 시퀀스(termcap과 함께 사용)를 사용합니다.옳은ANSI 기능을 갖춘 기능.- 따라서 두 가지 모두와 동일한 터미널 항목을 찾을 수 있습니다. 예를 들어,mg 용어,색인,베뎀(또한 초기 혼란과 다른 사람들이 프로그램 수정을 꺼렸기 때문에 FreeBSD의 termcap 파일에 있는 여러 항목도 마찬가지입니다.)
ANSI는 setaf/setab
terminfo의 역사에서 아주 늦게 추가되었습니다. terminfo에서의 위치에서 추론할 수 있듯이기능 문자열 목록. 이것들은 몇 년에 걸쳐 단계적으로 추가되었으며 일부 시스템은 다양하다는 점을 명심하십시오(ncurses에는 몇 가지 예가 있습니다.Caps.hpux
이러한 시스템과 일치하도록 컴파일하십시오. 이는 참조할 수 있는 소수의 유용한 터미널 설명을 보여줍니다.
그럼에도 불구하고 setf/setb
기존 문자열이 ANSI 순서와 일치하지 않는다는 사실이 즉시 인식되지 않아 몇 가지 문제가 발생했습니다.1998년에 복원됨및 FAQ왜 빨간색/파란색으로 바뀌었나요?.
setf/setb
8색 ANSI 시퀀스를 16색으로 확장하는 것이 가능하지만(8~15색이 0~7보다 더 밝은 버전이라고 가정) 처음 16색으로 확장하는 구성표를 만들 이유가 없습니다 .