エスケープシーケンスとは?
コンソールに、\033 または \x1b から始まる文字を出力することでコンソールの表示を制御する。
8進数 033 は、16進数で 0x1b、10進数で27であり、ESCを表す。
画面消去
文字列 |
説明 |
\033[0J |
カーソル位置から画面右下まで消去 |
\033[1J |
カーソル位置から画面左上まで消去 |
\033[2J |
全画面消去 |
\033[0K |
カーソル位置から行末まで消去 |
\033[1K |
カーソル位置から行頭まで消去 |
\033[2K |
カーソル位置の行を消去 |
カーソル移動
文字列 |
説明 |
\033[nA |
カーソルをn行上へ移動 |
\033[nB |
カーソルをn行下へ移動 |
\033[nC |
カーソルをn桁右へ移動 |
\033[nD |
カーソルをn桁左へ移動 |
\033[r;cH |
カーソルをr行、c列目へ移動 |
文字修飾
文字列 |
説明 |
\033[1m |
強調(太字) |
\033[4m |
下線 |
\033[7m |
文字色と背景色の反転 |
\033[0m |
標準に戻す |
文字色
文字列 |
説明 |
\033[30m |
黒 |
\033[31m |
赤 |
\033[32m |
緑 |
\033[33m |
黄色 |
\033[34m |
青 |
\033[35m |
マゼンタ |
\033[36m |
シアン |
\033[37m |
白 |
\033[39m |
標準色に戻す |
背景色
文字列 |
説明 |
\033[40m |
黒 |
\033[41m |
赤 |
\033[42m |
緑 |
\033[43m |
黄色 |
\033[44m |
青 |
\033[45m |
マゼンタ |
\033[46m |
シアン |
\033[47m |
白 |
\033[49m |
標準色に戻す |
マクロ
以下のようなマクロを定義しておくと便利かもしれない。
#define CLR_SCR() printf("\033[2J")
#define CLR_RIGHT() printf("\033[0K")
#define CLR_LEFT() printf("\033[1K")
#define CLR_LINE() printf("\033[2K")
#define LOCATE(r,c) printf("\033[%d;%dH", r, c)
#define CHR_BOLD "\033[1m"
#define CHR_REVERT "\033[7m"
#define CHR_RESET "\033[0m"
#define CHR_BLACK "\033[30m"
#define CHR_RED "\033[31m"
#define CHR_GREEN "\033[32m"
#define CHR_YELLOW "\033[33m"
#define CHR_BLUE "\033[34m"
#define CHR_MAGENTA "\033[35m"
#define CHR_CYAN "\033[36m"
#define CHR_WHITE "\033[37m"
#define CHR_NORMAL "\033[39m"
#define BG_BLACK "\033[40m"
#define BG_RED "\033[41m"
#define BG_GREEN "\033[42m"
#define BG_YELLOW "\033[43m"
#define BG_BLUE "\033[44m"
#define BG_MAGENTA "\033[45m"
#define BG_CYAN "\033[46m"
#define BG_WHITE "\033[47m"
#define BG_NORMAL "\033[49m"
使い方
上記のマクロ定義を esc.h としてインクルード。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "esc.h"
int main(void)
{
int count = 0;
CLR_SCR();
LOCATE(1, 1);
printf(CHR_BOLD CHR_GREEN "Escape Sequence Test");
LOCATE(3, 1);
printf(CHR_BLUE "count: \n");
printf(CHR_BLUE "random: \n");
printf(CHR_RESET);
fflush(stdout);
while(1){
LOCATE(3, 9); CLR_RIGHT();
printf("%4d", count);
LOCATE(4, 9); CLR_RIGHT();
printf("%4d", rand() % 10000);
printf("\n");
count++;
usleep(500 * 1000);
}
return 0;
}