Відповіді:
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 та сетбвідповідно. Функція vidputs () та функції оновлення використовують setaf та setab, якщо вони визначені. "
Отже, відповідь: setaf означає встановити передній план ANSI , тобто використовувати послідовності відходу ANSI, а setf означає встановити передній план (використовуючи деякі послідовності втечі, відмінні від ANSI).
У двох наборах можливостей використовується різний порядок для червоного / синього у списку кольорів ANSI.
Як зазначалося, це пояснюється на сторінці ncurses terminfo . Деякі історії:
setf/setb
.Sf/Sb
коди, а не setaf/setab
(і AF/AB
для termcap) - але використовуючи послідовності аварійних передач ANSI (які працюють з termcap), а не використовували правильні можливості з можливостями ANSI.ANSI setaf/setab
були додані досить пізно в історії терміна, оскільки ви можете зробити висновок з їх позиції у списку рядків можливостей . Майте на увазі, що вони додавались поетапно протягом декількох років, а деякі системи відрізнялися (ncurses має кілька прикладів, Caps.hpux
щоб дозволити їх складати для відповідності цим системам). Це пояснювало малу кількість корисних описів терміналів, які можуть бути використані для довідок.
Зважаючи на це, той факт, що існуючі setf/setb
рядки не відповідали порядку ANSI, не відразу було помічено, що призвело до деяких виправлень у 1998 році , і faq Чому червоний / синій замінений? .
Хоча можна було розширити 8-кольорову послідовність ANSI до 16-ти кольорів (припускаючи, що кольори 8-15 були яскравішими версіями 0-7), не було поважних причин для створення схеми подовження setf/setb
останніх 16 кольорів.
terminfo(5)
сторінці чоловіка, яка постачаєтьсяncurses
.