Windowsターミナルでのカラー実装
#include "stdio.h"
#include "stdlib.h"
#define BYTE unsigned char
/*********************************************************************************/
// 明るい文字色(グレー背景付き)
#define COLOR_RED "\e[1;47;31m" // 赤
#define COLOR_GREEN "\e[1;47;32m" // 緑
#define COLOR_BLUE "\e[1;47;34m" // 青
#define COLOR_YELLOW "\e[1;47;33m" // 黄色
#define COLOR_CYAN "\e[1;47;36m" // シアン
#define COLOR_PURPLE "\e[1;47;35m" // 紫
#define COLOR_BLACK "\e[1;47;30m" // 黒
#define COLOR_WHITE "\e[1;47;37m" // 白
// 暗い文字色
#define DARK_RED "\e[0;31m" // 暗赤
#define DARK_GREEN "\e[0;32m" //
#define DARK_BLUE "\e[0;34m" //
#define DARK_YELLOW "\e[0;33m" //
#define DARK_CYAN "\e[0;36m" //
#define DARK_PURPLE "\e[0;35m" //
#define DARK_BLACK "\e[0;30m" //
#define DARK_WHITE "\e[0;37m" // 暗白(灰色)
// 背景色
#define BG_RED "\e[1;41m"
#define BG_GREEN "\e[1;42m"
#define BG_BLUE "\e[1;44m"
#define BG_YELLOW "\e[1;43m"
#define BG_CYAN "\e[1;46m"
#define BG_PURPLE "\e[1;45m"
#define BG_WHITE "\e[1;47m"
#define BG_GREEN2 "\e[1;48m"
// 強調
#define RESET_COLOR "\e[0m"
#define BOLD_TEXT "\e[1m" //
#define UNDERLINE_TEXT "\e[4m" //
#define BLINK_TEXT "\e[5m" //
#define REVERSE_TEXT "\e[7m" //
#define HIDE_TEXT "\e[8m" //
#define CLEAR_SCREEN "\e[2J" // クリア
#define CLEAR_LINE "\r\e[K" // 行クリア
/*********************************************************************************/
// カラー メッセージ 強調 リセット, 改行
#define log_error(x ,...) (printf(COLOR_RED "[%s %d]:" x RESET_COLOR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_success(x ,...) (printf(COLOR_GREEN "[%s %d]:" x RESET_COLOR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_info(x ,...) (printf(COLOR_BLUE "[%s %d]:" x RESET_COLOR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_warning(x ,...) (printf(COLOR_YELLOW "[%s %d]:" x RESET_COLOR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_debug(x ,...) (printf(COLOR_CYAN "[%s %d]:" x RESET_COLOR,__FUNCTION__,__LINE__,##__VA_ARGS__))
/*********************************************************************************/
int main(int argc, char const *argv[])
{
#if 1//0
printf("背景色の表示\n");
for(BYTE i=40;i<48;i++)
{
// 文字色
printf("\e[%dm %d\e[0m(通常)\n",i,i);
printf("\e[1;%dm %d\e[0m(太字)\n",i,i);
}
printf("文字色の表示\n");
for(BYTE i=30;i<38;i++)
{
// 文字色
printf("\e[%dm███████████████████████████████████████████████████████████████████%d\e[0m(通常)\n",i,i);
printf("\e[1;%dm███████████████████████████████████████████████████████████████████%d\e[0m(太字)\n",i,i);
}
printf("背景色と文字色の組み合わせ\n");
for(BYTE bg=40;bg<48;bg++)
{
for(BYTE fg=30;fg<38;fg++)
{
// 文字色
printf("通常>>\e[%d;%d>>11 \\e[%d;%d\\e[0m<<\e[0m",bg,fg,bg,fg);
printf(" 太字>>\e[1;%d;%d>>22 \\e[%d;%d\\e[0m<<\e[0m",bg,fg,bg,fg);
static BYTE counter;counter++;counter%=2;
if(!counter)printf("\n");
}
}
#else
log_error("エラーメッセージ███████████████████████████████████████████████████████████████████\n");
log_success("成功メッセージ███████████████████████████████████████████████████████████████████\n");
log_info("情報メッセージ███████████████████████████████████████████████████████████████████\n");
log_warning("警告メッセージ███████████████████████████████████████████████████████████████████\n");
log_debug("デバッグメッセージ███████████████████████████████████████████████████████████████████\n");
#endif
return 0;
}
Linuxターミナルでのカラー表示
# 文字色(間隔なしのブロック)
for i in {0..257};do echo -en "\e[38;5;${i}m████████████████████████████████████████████████████████████████████████${i}\e[0m\n";done;echo
# 文字色(小間隔のブロック)
for i in {0..257};do echo -en "\e[38;5;${i}m▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇${i}\e[0m\n";done;echo
# 背景色
for i in {39..48};do echo -en "\e[${i}m ${i}\e[0m\n";done;echo
SCRTセッションでのカラー設定
SCRTセッションでは、以下の設定が必要です:
ANSIカラーの有効化をチェック シリアルポート出力の設定
/////////////////////////////////////////////////////////////////////////////////////
// 文字色
#define TERM_RED "\e[1;31m" // 赤
#define TERM_GREEN "\e[1;32m" // 緑
#define TERM_BLUE "\e[1;34m" // 青
#define TERM_YELLOW "\e[1;33m" // 黄色
#define TERM_CYAN "\e[1;36m" // シアン
#define TERM_PURPLE "\e[1;35m" // 紫
#define TERM_BLACK "\e[1;30m" // 黒
#define TERM_WHITE "\e[1;37m" // 白
#define DARK_TERM_RED "\e[0;31m" // 暗赤
#define DARK_TERM_GREEN "\e[0;32m" //
#define DARK_TERM_BLUE "\e[0;34m" //
#define DARK_TERM_YELLOW "\e[0;33m" //
#define DARK_TERM_CYAN "\e[0;36m" //
#define DARK_TERM_PURPLE "\e[0;35m" //
#define DARK_TERM_BLACK "\e[0;30m" //
#define DARK_TERM_WHITE "\e[0;37m" // 暗白(灰色)
// 背景色
#define BG_TERM_RED "\e[1;41m"
#define BG_TERM_GREEN "\e[1;42m"
#define BG_TERM_BLUE "\e[1;44m"
#define BG_TERM_YELLOW "\e[1;43m"
#define BG_TERM_CYAN "\e[1;46m"
#define BG_TERM_PURPLE "\e[1;45m"
#define BG_TERM_WHITE "\e[1;47m"
#define BG_TERM_GREEN2 "\e[1;48m"
// 強調
#define RESET_ATTR "\e[0m"
#define BOLD_STYLE "\e[1m" //
#define UNDERLINE_STYLE "\e[4m" //
#define BLINK_STYLE "\e[5m" //
#define REVERSE_STYLE "\e[7m" //
#define HIDE_STYLE "\e[8m" //
#define CLEAR_ALL "\e[2J" // クリア
#define CLEAR_LINE_CUR "\r\e[K" // 行クリア
////////////////////////////////////////////////////////////////////////////////////////////
// カラー メッセージ 強調 リセット, 改行
#if 0//
#define log_red(x ,...) (printf(TERM_RED "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_green(x ,...) (printf(TERM_GREEN "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_blue(x ,...) (printf(TERM_BLUE "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_yellow(x ,...) (printf(TERM_YELLOW "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_cyan(x ,...) (printf(TERM_CYAN "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_purple(x ,...) (printf(TERM_PURPLE "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_black(x ,...) (printf(TERM_BLACK "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#define log_white(x ,...) (printf(TERM_WHITE "%s %d",__FUNCTION__,__LINE__),printf( x RESET_ATTR, ##__VA_ARGS__))
#else
#define log_red(x ,...) (printf(TERM_RED "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_green(x ,...) (printf(TERM_GREEN "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_blue(x ,...) (printf(TERM_BLUE "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_yellow(x ,...) (printf(TERM_YELLOW "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_cyan(x ,...) (printf(TERM_CYAN "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_purple(x ,...) (printf(TERM_PURPLE "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_black(x ,...) (printf(TERM_BLACK "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#define log_white(x ,...) (printf(TERM_WHITE "[%s %d]:" x RESET_ATTR,__FUNCTION__,__LINE__,##__VA_ARGS__))
#endif
Linuxカラー実装例
#define ARRAY_LEN(arr) (sizeof(arr)/sizeof(arr[0]))
///////////////////////////////////////////////////////////
char* terminal_colors[16]={
"\e[0;31m",//暗赤
"\e[1;31m",//赤
"\e[0;32m",//
"\e[1;32m",//緑
"\e[0;34m",//
"\e[1;34m",//青
"\e[0;33m",//
"\e[1;33m",//黄
"\e[0;36m",//
"\e[1;36m",//シアン
"\e[0;35m",//
"\e[1;35m",//紫
"\e[0;30m",//
"\e[1;30m",//黒
"\e[0;37m",//暗白(灰)
"\e[1;37m",//白
};
char* text_styles[4]={
"\e[1m", //1 太字
"\e[4m", //2 下線
"\e[5m", //3 点滅
"\e[7m", //4 反転
};
///////////////////////////////////////////////////////////
printf("キー単一_0 配列サイズ(terminal_colors):%d--配列サイズ(text_styles):%d\n",ARRAY_LEN(terminal_colors),ARRAY_LEN(text_styles));
for(BYTE i=0;i<ARRAY_LEN(terminal_colors);i++)
{
for(BYTE i2=0;i2<ARRAY_LEN(text_styles);i2++)
{
printf("%s%si:%d--i2:%d msg:L%d-%s: Hello World%s", terminal_colors[i],text_styles[i2],i,i2, __LINE__,__FUNCTION__,"\e[0m");
}
}
256色表示例
for(BYTE i=0;i<255;i++)
{
printf("\e[%dm████████████████████████████████████████████████████████████████████████%d\e[0m\n",i,i);
}
背景色と文字色の組み合わせ
for(BYTE bg=41;bg<50;bg++)//背景色40以下と49以上は無効スタイル
for(BYTE fg=30;fg<40;fg++)//文字色29以下と38以上は無効スタイル
// \e[明るさ;背景色m表示文字列\e[0m\n"
printf("\e[1;%d;%dm################################################### \\e[1;%d;%dm###\\e[0m \e[0m\n",fg,bg,fg,bg);//明るいスタイル
デフォルト色の設定