へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

ターミナル上で色付き文字を書く

プログラムを組んで、 シェルに文字を画面に、 単に出力するだけではなんかつまらない。 色とか付けれたら ちょっとは華やかになりそう。

ということで
シェルへの出力を装飾しよう!

まだ詳細は勉強中ですが、 エスケープシーケンス というものを使って、 文字の装飾をします。

今回はCのプログラムの出力に 装飾を加えたいと思います。
(ターミナル上の出力なので、 C以外でも大丈夫だと思います。)

プログラム例
    
#include <stdio.h>

int main(int argc, char **argv)
{
  puts("\e[31mRed\e[0m");
  return 0;
}
    
出力結果
$ cc -o color1 color1.c
$ ./color1
Red
$ 

puts関数内の 文字列の"Red"を赤文字にします。 \e[31mで赤に指定します。 \e[0mで 装飾をリセットします。 エスケープシーケンスの構造としては、 \e[数字;数字;...;数字mで 以降の文字列を装飾します。 文字色以外にも、太字指定など、 いろいろあります。 例えば、太字、下線、 文字色を水色にするには、 \e[1;4;36m と指定すれば可能です。 1は太字指定、4は下線指定、 36は文字色を水色に指定します。

puts関数を puts("\e[1;4;36mHello\e[0m"); と変更

$ cc -o color2 color2.c
$ ./color2
$ Hello
$
    

文字色や文字の装飾を指定する数字 (引数)は色々あるので、 詳細は割愛。

\e[0mは、 エスケープシーケンスで指定した装飾を 全部解除します。 これを書いておかないと、 装飾が解除されません。 例えば、 puts("\e[1;4;36mHello"); と書くと、プログラム実行後も ターミナルの文字の装飾が 反映されたままになります。

$ cc -o color3 color3.c
$ ./color3
Hello
$ cat color3.c
#include <stdio.h>

int main(int argc, char **argv)
{
  puts("\e[1;4;36mHello");
  return 0;
}
$ 

今回はCで文字装飾を行いましたが、 Perlシェルスクリプトなどでも、 同様に文字装飾は行えます。

なんとなく書きたいように書いたので、 至らぬ点が多々あるかと思いますが、 とりあえず今回はここまで。

参考文献