tputの「setf」と「setaf」の違いは何ですか?

tputの「setf」と「setaf」の違いは何ですか?

このコマンドtputには色setfとを設定する2つのオプションがありますが、setafどちらも私のコンピュータでうまく機能しているようです。

$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'

setbそして似たような二重性を持っているようですsetab

これら2つのオプションの違いは何ですか?

ベストアンサー1

setf8つの色に制限されています。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 2Pm = 32tput setaf 2Pm = 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

おすすめ記事