通過printf設定終端輸出的顏色
阿新 • • 發佈:2019-02-16
前言
終端的字元顏色由轉義序列(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表示背景色為紅色。
通過轉義序列設定終端顯示屬性時,常見格式為:\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命令可檢視更多的引數描述,