1行毎に背景色を、1列毎に文字色を設定している。色は黒、赤、緑、黄、黄緑、青、マゼンタ、シアン、デフォルトがある(でもシアンってどう見ても白だよね)。
この表現がどういうふうに使えるかというと、例えばビットのON/OFFで情報が入ってくるとして、それを文字だけではなく色として表現することができる。上の画像では青がON、赤がOFFで、現在選択しているデータを緑で表している。hjklキーで選択を移動することができ、スペースキーなどで反転することもできる。
この表現は基本的にUnixライク環境専用だが、Windowsでも使うことは可能。また、C#のConsoleでも同様の表示が可能。C#だとシリアルポートが簡単に使えるので、ちょっとした電子機器のステータス表現に使うと便利かもしれない。
#include <stdio.h> #include <string.h> #define ES_DisplayClear() "\033[2J" #define ES_RightClear() "\033[0K" #define ES_LeftClear() "\033[1K" #define ES_LineClear() "\033[2K" #define ES_Move(y, x) "\033[" #y ";" #x "H" #define ES_Up(y) "\033[" #y "A" #define ES_Down(y) "\033[" #y "B" #define ES_Right(x) "\033[" #x "C" #define ES_Left(x) "\033[" #x "D" #define ES_TextBlack() "\033[30m" #define ES_TextRed() "\033[31m" #define ES_TextGreen() "\033[32m" #define ES_TextYellow() "\033[33m" #define ES_TextYelGrn() "\033[34m" #define ES_TextBlue() "\033[35m" #define ES_TextMagenta() "\033[36m" #define ES_TextCyan() "\033[37m" #define ES_TextDefault() "\033[39m" #define ES_BackBlack() "\033[40m" #define ES_BackRed() "\033[41m" #define ES_BackGreen() "\033[42m" #define ES_BackYellow() "\033[43m" #define ES_BackYelGrn() "\033[44m" #define ES_BackBlue() "\033[45m" #define ES_BackMagenta() "\033[46m" #define ES_BackCyan() "\033[47m" #define ES_BackDefault() "\033[49m" int main(void) { const char *Texts[9] = { ES_TextBlack(), ES_TextRed(), ES_TextGreen(), ES_TextYellow(), ES_TextYelGrn(), ES_TextBlue(), ES_TextMagenta(), ES_TextCyan(), ES_TextDefault(), }; const char *Backs[9] = { ES_BackBlack(), ES_BackRed(), ES_BackGreen(), ES_BackYellow(), ES_BackYelGrn(), ES_BackBlue(), ES_BackMagenta(), ES_BackCyan(), ES_BackDefault(), }; const char *Colors[9] = { "Black", "Red", "Green", "Yellow", "YellowGreen", "Blue", "Magenta", "Cyan", "Default", }; int ColorStrMax = 0; int j; for (j = 0; j < sizeof(Colors) / sizeof(Colors[0]); j++) { int l = strlen(Colors[j]); if (ColorStrMax < l) { ColorStrMax = l; } } for (j = 0; j < sizeof(Backs) / sizeof(Backs[0]);j++) { printf("%*s ", ColorStrMax, Colors[j]); int i; for (i = 0; i < sizeof(Texts) / sizeof(Texts[0]); i++) { printf("%s%s %-*s%s %s ", Backs[j], Texts[i], ColorStrMax, Colors[i], ES_TextDefault(), ES_BackDefault()); } printf("\n"); } return(0); }
0 件のコメント:
コメントを投稿