エスケープシーケンスの文字装飾を試す
エスケープシーケンスを試してみる。
カーソル移動も可能だが、とりあえず文字表示の装飾機能を試す。
文字装飾エスケープシーケンスは、C言語だとprintfで\x1b[制御コードm
を出力すればいい。
制御コードは1〜107まであるらしい。0はリセット。
(参照:ANSI escape code - Wikipedia, the free encyclopedia)
例えば、
printf("\x1b[1mA");
は1を指定して、これはAをBold体で表示する。
制御コードは複数指定も可能、その場合は;
で区切る。
printf("\x1b[1;4mA");
は1と4を指定で、これはBoldかつアンダーラインでAを表示する。
さて、とりあえず自分のMac OS XのiTerm2で表示してみた。 試してみると、iTerm2だと以下コード指定が有効だった。
1: Bold 4: アンダーライン 7: 反転表示 30-37: 文字色変更 40-47: 背景色変更 90-97: 文字色変更(明るい) 100-107: 背景色変更(明るい)
で、有効なやつを並べて表示させてみた。 (もともとのターミナルの色設定によって印象は変わるでしょうが) 以下結果:
(※注)背景色変更したときは文字色を白にしている。
文字色表示の場合、Bold指定(1指定)も同時にやると色合いが変わる。 ことも確認できた(これは仕様らしい)。
以下ソースコード:
#include <stdio.h> void esc_prt(int mode, const char *str) { printf("\x1b[%dm%s",mode,str); printf("\x1b[0m"); } void color_prt(int color, const char *str) { printf("%d: ",color); // change foreground color printf("\x1b[%dm%s", 30+color, str); printf("\x1b[0m\t"); printf("\x1b[%d;1m%s", 30+color, str); printf("\x1b[0m\t"); printf("\x1b[%dm%s", 90+color, str); // change background color printf("\x1b[37m\t"); printf("\x1b[%dm%s", 40+color, str); printf("\x1b[37m\t"); printf("\x1b[%d;1m%s", 40+color, str); printf("\x1b[37m\t"); printf("\x1b[%dm%s", 100+color, str); printf("\x1b[0m\t"); // reset to normal printf("\x1b[0m"); printf("\n"); } int main(int argc, char **argv) { int i; printf("1m \t4m \t7m\n"); esc_prt(1, "abcABC\t"); esc_prt(4, "abcABC\t"); esc_prt(7, "abcABC\n"); printf("\n"); printf(" 30m \t30;1m \t90m \t40m \t40;1m \t100m\n"); for(i=0; i <= 7; i++) color_prt(i, "abcABC"); }