Polecenie tput
ma dwie różne opcje ustawiania koloru, setf
a setaf
jednak oba wydają się działać dobrze na moim komputerze:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Wydaje się, że istnieje podobna dualność setb
i setab
.
Jaka jest różnica między dwiema opcjami?
terminfo(5)
stronie podręcznika użytkownikancurses
.Odpowiedzi:
setf
jest ograniczony tylko do 8 kolorów.setaf
można ustawić do 256 kolorów.(wszystkie poniższe informacje będą specyficzne dla urxvt, ponieważ to jest mój terminal, ale informacje będą podobne, jeśli nie takie same, jak inne terminale)
Oba
setf
isetaf
zapewniają inny kod ucieczki. Możesz to zobaczyć w następujący sposób:Z mojej
urxvt(7)
strony man:Zatem z powyższego
xxd
wyjścia możemy zobaczyć, żetput setf 2
używaPm = 32
, który ustawi kolor na zielony.tput setaf 2
z drugiej strony używaPm = 38;5
, który dostaje reprezentuje kod koloru zdefiniowany w ISO 8613-6 (także zielony).W ISO 8613-6 kolory 0x00-0x07 są takie same jak kolory standardowe, a 0x08 - 0x0f to standardowe kolory „pogrubione”. Gdy dojdziesz do 0x10-0xff, otrzymasz nowe kolory.
Skradzione z wikipedii :
źródło
tput
wydaje się jednak nie używać dostępnych zakresów sekwencji kolorów ANSI. Dla każdegon > 7
,tput setaf n
nie ma wpływu na tekst w moim terminalu.tput setf 2
itput setaf 2
są oba.[32m
.Z instrukcji:
man 5 terminfo
Zatem odpowiedź brzmi: setaf oznacza Ustaw pierwszy plan ANSI , tj. Użyj sekwencji ucieczki ANSI, a setf oznacza Ustaw pierwszy plan (używając niektórych sekwencji specjalnych innych niż ANSI).
źródło
Dwa zestawy możliwości wykorzystują różne kolejność kolorów czerwony / niebieski na liście kolorów ANSI.
Jak wspomniano, wyjaśniono to na stronie podręcznika terminfo ncurses . Trochę historii:
setf/setb
.Sf/Sb
kodów zamiastsetaf/setab
(iAF/AB
termcap) - ale używając sekwencji ucieczkowych ANSI (które działają z termcap) zamiast używać poprawnych możliwości z możliwościami ANSI.ANSI
setaf/setab
dodano dość późno w historii terminfo, ponieważ można wywnioskować z ich pozycji na liście ciągów zdolności . Należy pamiętać, że były one dodawane etapami przez kilka lat, a niektóre systemy różniły się (ncurses ma kilka przykładów, na przykładCaps.hpux
pozwalających na kompilację w celu dopasowania do tych systemów). Stanowiło to niewielką liczbę przydatnych opisów terminali, które można by wykorzystać w celach informacyjnych.Mimo
setf/setb
to nie zauważono od razu faktu, że istniejące ciągi nie pasowały do kolejności ANSI, co doprowadziło do pewnych poprawek w 1998 r. , A często zadawane pytania Dlaczego wymieniono czerwony / niebieski?.Chociaż można było rozszerzyć 8-kolorową sekwencję ANSI do 16 kolorów (zakładając, że kolory 8-15 były jaśniejszymi wersjami 0-7), nie było żadnego powodu, aby wymyślać schemat
setf/setb
przekraczania pierwszych 16 kolorów.źródło