1. 程式人生 > >通過printf設定終端輸出的顏色

通過printf設定終端輸出的顏色

前言

終端的字元顏色由轉義序列(Escape Sequence)控制,是文字模式下的系統顯示功能,與具體語言無關。

1.格式

  • 轉義序列以控制字元’ESC’開頭。該字元的ASCII碼十進位制表示為27,十六進位制表示為0x1B,八進位制表示為033。
  • 多數轉義序列超過兩個字元,故通常以’ESC’和左括號’[‘開頭。該起始序列稱為控制序列引導符(CSI,Control SequenceIntro),通常由’\033[‘或’\e[‘代替。
  • 通過轉義序列設定終端顯示屬性時,可採用以下格式:\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m

2.常用引數

  • 顯示方式:0(預設)、1(粗體/高亮)、22(非粗體)、4(單條下劃線)、24(無下劃線)、5(閃爍)、25(無閃爍)、7(反顯、翻轉前景色和背景色)、27(無反顯)

  • 顏色:0(黑)、1(紅)、2(綠)、 3(黃)、4(藍)、5(洋紅)、6(青)、7(白),前景色為30+顏色值,如31表示前景色為紅色;背景色為40+顏色值,如41表示背景色為紅色。
    console_codes

  • 通過轉義序列設定終端顯示屬性時,常見格式為:\e[顯示方式;前景色;背景色m輸出字串\e[0m,其中’\e[0m’用於恢復預設的終端輸出屬性,否則會影響後續的輸出。

3.具體用法

在我的工程程式碼中,只使用了對前景色的設定,總共包括5種色彩,對應了系統級錯誤,嚴重錯誤,警告,一般資訊,除錯資訊,冗餘資訊。

3.1.定義

#define ms_consolecodes_none          "\e[0m"
#define ms_consolecodes_brightred     "\e[1;31m"
#define ms_consolecodes_green         "\e[0;32m"
#define ms_consolecodes_brightyellow  "\e[1;33m"
#define ms_consolecodes_brightblue    "\e[1;34m"
#define ms_consolecodes_brightcyan    "\e[1;36m"

static const char *ms_col[64]={
ms_consolecodes_brightblue,        //assert
ms_consolecodes_brightred,         //error
ms_consolecodes_brightyellow,      //waring
ms_consolecodes_brightcyan,        //info
ms_consolecodes_none,              //debug
ms_consolecodes_green};            //verbose

3.2.應用

printf("%s" fmt ms_consolecodes_none "\r\n",ms_col[log_level],##arg );

4.額外補充

通過man命令可檢視更多的引數描述,