回答:
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(背景の設定)を使用します。これらは、色番号という1つのパラメーターを取ります。SVr4のドキュメントでは、setaf / setabのみが説明されています。XPG4ドラフトでは、 「端末がバックグラウンドとフォアグラウンドを設定するANSIエスケープシーケンスをサポートする場合、それぞれsetafとsetabとしてコーディングする必要があります。端末がバックグラウンドとフォアグラウンドを設定する他のエスケープシーケンスをサポートする場合、setfおよびsetb、それぞれ。vidputs()関数と更新関数は、定義されている場合、setafとsetabを使用します。」
したがって、答えは次のとおりです。setafはANSIフォアグラウンドの設定、つまりANSIエスケープシーケンスの使用を意味し、setfはフォアグラウンドの設定(ANSI以外のエスケープシーケンスの使用)を意味します。
2つの機能セットは、ANSIカラーのリストで赤/青の異なる順序を使用します。
前述のように、ncurses terminfoのマニュアルページで説明されています。いくつかの歴史:
setf/setb
。Sf/Sb
ではなくsetaf/setab
(およびAF/AB
termcapに)対応するコードを使用したtermcapユーザーとの混乱がありましたが、ANSI機能で正しい機能を使用するのではなく、ANSIエスケープシーケンス(termcapで機能します)を使用しました。ANSI setaf/setab
は、機能文字列のリストでの位置から推測できるため、terminfoの歴史のかなり後期に追加されました。これらは数年にわたって段階的に追加され、システムによっては異なるCaps.hpux
ものがあることに注意してください(ncursesには、それらのシステムに合わせてコンパイルできるようにする例があります)。これは、参照に使用できる少数の有用な端末記述を説明しました。
そのすべてを使用すると、既存の事実setf/setb
一部につながっANSIの順序と一致しなかった文字列はすぐに気づいていなかった、1998年に修正し、よくある質問は、なぜ赤/青入れ替わっ?。
8色ANSIシーケンスを16色に拡張することは可能ですが(8〜15色が0〜7の明るいバージョンであると仮定することにより)、setf/setb
最初の16色を超えて拡張するスキームを発明する正当な理由はありません。
terminfo(5)
、付属のマニュアルページを参照しncurses
てください。