プロンプトに色を付けていきます。下の画像は今回使用する CSI (Control Sequence Introducer) sequences という文字出力を制御する設定の一部で文字に色・太さ・下線などの属性を設定する機能です。
色の変更 \e[nm
\e[
文字出力の制御の設定(CSI)を開始しする合図です。
よく検索すると、\033[ や \x1b[ と出てきますが同じ意味です。前者が8進数、後者が16進数で e の文字を表現しています。
n
制御する属性を0~107の数値(SGR)で設定します。
複数の属性を設定する場合は「;」セミコロンで区切ります。数値を入力せずに「;;」と1つ以上続いた場合、値のない箇所は0が入力されたことになります。
\e[m と n は省略することができます。この場合、全ての属性が初期値にリセットされます。(\e[0m と同じです。)
m
文字の色やスタイルを設定する記号です。
属性を設定するとリセットするか上書きするまで、その属性が生き続きます。必要な場所でリセット(\e[0m)をすると良いでしょう。
n(SGR)属性の設定
これで色が変えられますね。 0〜107の内、色に関係してくるのは以下の表通りです。
文字色 | 背景色 | 備考 |
---|---|---|
30 ~ 47 | 40 ~ 47 | 基本の8色 |
90 ~ 97 | 100 ~ 107 | 明るい8色 |
38;5;n | 48;5;n | 256色。 nに0~255の数値を入力 |
38;2;r;g;b | 38;2;r;g;b | RGB色。r;g;b にはそれぞれ0~255の数値を入力 |
39 | 49 | 39文字色・49背景色を初期値に戻す |
7 | 文字色と背景色を入れ替える |
詳細
Fe Escape sequences
CSI (Control Sequence Introducer) sequences
SGR (Select Graphic Rendition) parameters
色の数
ここまで色を付けてきましたが環境によっては256色、RGB色が使えないということがあります。
- 使っているターミナルアプリケーションが対応していない
- エミュレートしている端末タイプが対応していない
等です。確認するには以下のコマンドを実行してください。
echo $TERM echo $COLORTERM
さらに、Terminal Colors にある次のコマンドでテストしてください。
awk 'BEGIN{ s="/\\/\\/\\/\\/\\"; s=s s s s s s s s; for (colnum = 0; colnum<77; colnum++) { r = 255-(colnum*255/76); g = (colnum*510/76); b = (colnum*255/76); if (g>255) g = 510-g; printf "\033[48;2;%d;%d;%dm", r,g,b; printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b; printf "%s\033[0m", substr(s,colnum+1,1); } printf "\n"; }'
TERM の値が *-256color 、COLORTERM の値が truecolor 、
次にテストしたコマンドでグラデーションに段差が出ていなければ、RGBまで対応しています。
グラデーションに段差が出ている場合、アプリケーションが対応していないのでサイトを覗いて確認してください。
truecolorとは
RGB色、#ffffff のこと。R,G,Bをそれぞれ8bit、計24bitで表現
おわりに
次回は見た目をデザインしていきます。