ターミナルの画面を装飾したい(ANSI Escape Code)
ANSI Escape Codeを使う。
成果物
情報源
概要
bashでecho
をつかい\e[m
などの特殊文字ANSI Escape Codeをつかって装飾する。
echo -e "\e[1m太字強調\e[m"
太字強調のほかにも装飾できる。詳しくはANSI Escape Code参照。
例
太字強調する。方法はつぎの3通りある。
echo
printf
tput
echo -e "\e[1m太字強調\e[m" printf '\033[1m%s\033[m\n' '太字強調' tput bold && echo "太字強調" && tput sgr0
echo
echo -e "\e[1mここを太字強調する\e[m"
末尾の改行をなくすには-n
オプションをつかう。
echo -en "\e[1mここを太字強調する\e[m"
printf
printf '\033[1m%s\033[m\n' 'ここを太字強調する'
末尾の改行をなくすには\n
を消す。
printf '\033[1m%s\033[m' 'ここを太字強調する'
tput
tput bold && echo "ここを太字強調する" && tput sgr0
末尾の改行をなくすには-n
オプションをつかう。
tput bold && echo -n "ここを太字強調する" && tput sgr0
所感
可読性が悪い。装飾する位置にANSI Escape Codeを入れるせい。改行もあるから段組みした装飾はとてつもなく大変になるだろう。
テキスト、装飾、枠をそれぞれ別々に定義できたらよかったのに。指定した枠に、指定したテキストや装飾をあとから指定したかった。
たとえば以下のように。開始位置2行目8列目。幅10高さ20字。その位置に「装飾する文字列」というテキストを出力する。装飾は太字&ブリンク&文字色=赤。
make_frame SOME_FRAME 2 8 10 20 show_frame SOME_FRAME --text '装飾する文字列' --decoration bold blink --font-color red
枠はなくとも、せめて装飾だけは簡単にやりたい。\e[m
のような終了コードなんて書きたくない。しかも太字やアンダーラインなど装飾の種類によって専用の終了コードまであるとか……。
つぎのように簡単に装飾したかった。
decoration '装飾する文字列' bold italic blink underline fg=red bg=green newline
末尾に改行コードをつけるか否かについては配慮したほうがよさそうなのでnewline
の有無で判定する。あるいは以下のようにしてもよいか。
deco '改行しない' bold italic blink underline fg=red bg=green decon '改行する' bold italic blink underline fg=red bg=green
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux