ターミナルでのカラー出力方法

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);//明るいスタイル

デフォルト色の設定

タグ: ANSIカラーコード ターミナル出力 C言語 Linuxコマンド SCRT

7月2日 19:20 投稿