このコマンドtput
には色setf
とを設定する2つのオプションがありますが、setaf
どちらも私のコンピュータでうまく機能しているようです。
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
setb
そして似たような二重性を持っているようですsetab
。
これら2つのオプションの違いは何ですか?
答え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背景設定)またはセテフ(前景設定)と設定値(背景設定)。カラー番号という1つのパラメータを使用します。 SVr4 ドキュメントでは、次の内容のみ説明します。セタフ/セットタブ; XPG4ドラフトは次のとおりです。 「ターミナルが背景とフォアグラウンド設定のためにANSIエスケープシーケンスをサポートしている場合は、次のようにエンコードする必要があります。セタフそしてセットタブ、それぞれ。端末が背景とフォアグラウンド設定のために異なるエスケープシーケンスをサポートしている場合は、次のようにエンコードする必要があります。セテフそして設定値、それぞれ。 vidputs() 関数とリフレッシュ関数の使用セタフそしてセットタブ定義されている場合。 」
答えは次のとおりです。セタフ方法ANSI展望設定つまり、ANSIエスケープシーケンスを使用し、セテフ方法前景設定(ANSI以外の一部のエスケープシーケンスを使用)
答え3
2つの機能セットは、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年に復元とよくある質問なぜ赤/青に変わったのですか?。
setf/setb
8色のANSIシーケンスを16色に拡張することは可能ですが(8〜15色が0〜7より明るいバージョンであると仮定)、最初の16色に拡張するスキームを作成する理由はありません。