ANSIエスケープシーケンスを駆使すれば、
こんな感じでターミナルの出力に色を付けたり
[PHP]ゲーム作成初心者がPHPでテト〇ス風ゲームを作ってみた
上記記事にて出力されるブロックの色を変更したり、出力内容を上書きしたりするのに使った。
記法
指定がない限り、太字の部分が可変となる箇所。
カーソル移動
記法 | 内容 |
---|---|
\e[nA | 上にn移動 |
\e[nB | 下にn移動 |
\e[nC | 右にn移動 |
\e[nD | 左にn移動 |
\e[nE | n行下の先頭に移動 |
\e[nF | n行上の先頭に移動 |
\e[nG | 現在位置と関係なく左からnの場所に移動 |
\e[n;mH \e[n;mf |
現在位置と関係なく上からn、左からmの場所に移動 |
コンソールスクロール
記法 | 内容 |
---|---|
\e[nS | n行分コンソールを次にスクロール |
\e[nT | n行分コンソールを前にスクロール |
出力消去
記法 | 内容 |
---|---|
\e[nJ | 画面消去 0(or省略)・・・カーソルより後ろを消去 1・・・カーソルより前を消去 2・・・画面全体を消去 |
\e[nK | 行消去 0(or省略)・・・カーソルより後ろを消去 1・・・カーソルより前を消去 2・・・行全体を消去 |
出力文字の変更
注:ターミナルによって対応してる/してないが分かれる
記法 | 内容 |
---|---|
\e[0m | 指定をリセットし未指定状態に戻す(0は省略可) |
\e[1m | 太字 |
\e[2m | 薄く表示 |
\e[3m | イタリック |
\e[4m | アンダーライン |
\e[5m | ブリンク |
\e[6m | 高速ブリンク |
\e[7m | 文字色と背景色の反転 |
\e[8m | 表示を隠す(コピペ可能) |
\e[9m | 取り消し |
出力色の変更
先述した \e[0m
でリセット可能。
文字色 | 背景色 | 色 |
---|---|---|
\e[30m | \e[40m | 黒 |
\e[31m | \e[41m | 赤 |
\e[32m | \e[42m | 緑 |
\e[33m | \e[43m | 黄色 |
\e[34m | \e[44m | 青 |
\e[35m | \e[45m | マゼンダ |
\e[36m | \e[46m | シアン |
\e[37m | \e[47m | 白 |
出力色の変更(拡張)
注:ターミナルによって対応してる/してないが分かれる
文字色 | 背景色 | 内容 |
---|---|---|
\e[38;5;nm | \e[48;5;nm | nを0~255のカラーコードを指定 |
\e[38;2;r;g;bm | \e[48;2;r;g;bm | RGBでのカラーコードを指定 (対応端末少ない) |
サンプル
サンプルは Windows10 + Cygwin で表示された内容
出力文字
for ((i = 1; i <= 9; i++)); do
printf '\e[%dm%d\e[m ' $i $i
done
ブリンクはしなかった。
文字色
for ((i = 30; i <= 37; i++)); do
printf '\e[%dm%d\e[m ' $i $i
done
背景色
for ((i = 40; i <= 47; i++)); do
printf '\e[%dm%d\e[m ' $i $i
done
文字色(拡張)
for ((i = 0; i < 16; i++)); do
for ((j = 0; j < 16; j++)); do
hex=$(($i*16 + $j))
printf '\e[38;5;%dm0x%02X\e[m ' $hex $hex
done
echo "";
done
背景色(拡張)
for ((i = 0; i < 16; i++)); do
for ((j = 0; j < 16; j++)); do
hex=$(($i*16 + $j))
printf '\e[48;5;%dm0x%02X\e[m ' $hex $hex
done
echo "";
done