【Linux】C/C++/Shell 改變終端程序輸出的字的顏色

之前在寫shell腳本的時候,嘗試了改變終端程序中輸出的字的顏色,大致格式如下:

echo "\033[字背景顏色;字體顏色m字符串\033[0m"

例如:

echo "\033[41;36m something here \033[0m"

其中41的位置代表底色, 36的位置是代表字的顏色。

今天發現C/C++程序中改變終端程序輸出的字的顏色的方法和Shell腳本中的基本類似,現在來總結一下。

在C中只需要用printf函數代替上邊的echo -e就OK了。參見下例:

#include 
int main()
{
    printf("\033[31mThis is RED.\n\033[0m");
    return 0;
}

31m代表字體爲紅色,0m代表關閉所有屬性。

簡單的說就是ESC[*m,ESC的八進制爲\033,*可以是多個屬性的組合,用分號隔開。

常用的ANSI控制碼如下(有些不支持):

\033[0m 關閉所有屬性 
\033[1m 高亮
\033[2m 亮度減半
\033[3m 斜體
\033[4m 下劃線 
\033[5m 閃爍 
\033[6m 快閃
\033[7m 反顯 
\033[8m 消隱 
\033[9m 中間一道橫線
10-19 關於字體的
21-29 基本與1-9正好相反
30-37 設置前景色
40-47 設置背景色

# 字顏色:30--37
30:黑
31:紅
32:綠
33:黃
34:藍色
35:紫色
36:深綠
37:白色
38 打開下劃線,設置默認前景色 
39 關閉下劃線,設置默認前景色 

# 字背景顏色範圍:40--49
40 黑色背景 
41 紅色背景 
42 綠色背景 
43 棕色背景 
44 藍色背景 
45 品紅背景 
46 孔雀藍背景 
47 白色背景 
48 不知道什麼東西
49 設置默認背景色

50-89 沒用
90-109 又是設置前景背景的,比之前的顏色淺
\033[nA 光標上移n行 
\033[nB 光標下移n行 
\033[nC 光標右移n行 
\033[nD 光標左移n行 
\033[y;xH設置光標位置 
\033[2J 清屏 
\033[K 清除從光標到行尾的內容 
\033[s 保存光標位置 
\033[u 恢復光標位置 
\033[?25l 隱藏光標 
\033[?25h 顯示光標

建議

可以在程序頭部定義一些宏變量,這樣程序看起來更簡潔。
如:發生錯誤的時候,錯誤信息顯示紅色;發送警告的時候,警告信息顯示黃色。

#define WARN_MSG_V(msg, ...) \
    printf("\033[33m" msg "\n\033[0m",  ##__VA_ARGS__)

#define ERR_MSG_V(msg, ...) \
    printf("\033[31m" msg "\n\033[0m",  ##__VA_ARGS__)

當然,也可以加上這些錯誤/警告發送在哪個函數,哪一行:

#define ERR_MSG_V(msg, ...) \
    printf("** ERROR: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)

#define INFO_MSG_V(msg, ...) \
    printf("** INFO: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)

#define WARN_MSG_V(msg, ...) \
    printf("** WARN: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章