在linux終端下除錯程式時,有時需要輸出大量資訊。若能控制字型的顏色和顯示方式,可使輸出資訊對比鮮明,便於除錯時觀察資料。終端的字元顏色由轉義序列(escape sequence)控制,是文字模式下的系統顯示功能,與具體語言無關。
轉義序列以控制字元'esc'開頭。該字元的ascii碼十進位制表示為27,十六進製制表示為0x1b,八進位制表示為033。多數轉義序列超過兩個字元,故通常以'esc'和左括號'['開頭。該起始序列稱為控制序列引導符(csi,control sequence intro),通常由'\033['或'\e['代替。
通過轉義序列設定終端顯示屬性時,可採用以下格式:
\033[ param m
或\e[ param m
其中,'\033['或'\e['引導轉義序列,'m'表示設定屬性並結束轉義序列。param為屬性值,表示可選(多個引數之間用分號隔開,與順序無關)。
例如,在linux shell中執行下述命令:
調色效果如下圖所示:
因此,通過轉義序列設定終端顯示屬性時,常見格式為:
\033[顯示方式;前景色;背景色m輸出字串\033[0m
或\e[顯示方式;前景色;背景色m輸出字串\033[0m
其中 ,'\033[0m'用於恢復預設的終端輸出屬性,否則會影響後續的輸出。
此外,還有一些ansi控制碼,如:na (游標上移n行 )、nb(游標下移n行 )、nc(游標右移n行 )、nd (游標左移n行 )、2j(清屏)、k(清除從游標到行尾的內容)、s(儲存游標位置)、u(恢復游標位置)、?25l(隱藏游標)、?25l(顯示游標)。
基於常用引數,可定義如下單一控制巨集,用於printf系列語句:
#define none "\e[0m"
#define black "\e[0;30m"
#define l_black "\e[1;30m"
#define red "\e[0;31m"
#define l_red "\e[1;31m"
#define green "\e[0;32m"
#define l_green "\e[1;32m"
#define brown "\e[0;33m"
#define yellow "\e[1;33m"
#define blue "\e[0;34m"
#define l_blue "\e[1;34m"
#define purple "\e[0;35m"
#define l_purple "\e[1;35m"
#define cyan "\e[0;36m"
#define l_cyan "\e[1;36m"
#define gray "\e[0;37m"
#define white "\e[1;37m"
#define bold "\e[1m"
#define underline "\e[4m"
#define blink "\e[5m"
#define reverse "\e[7m"
#define hide "\e[8m"
#define clear "\e[2j"
#define clrline "\r\e[k" //or "\e[1k\r"
也可以定義為輸出。
#define close printf("\033[0m"); //關閉彩色字型
#define red printf("\033[31m"); //紅色字型
#define green printf("\033[36m");//綠色字型
#define yellow printf("\033[33m");//黃色字型
#define blue printf("\033[34m");//藍色字型
輸出時直接使用如 red (後邊無分號)。 Linux下控制環境變數
檢視環境變數 檢視某一環境變數 比如我們需要檢視home這個環境變數,我們可以在shell下直接輸入echo home 我們可以把所有的環境變數和環境變數的值都列印出來 列印環境變數 libc中定義的全域性變數environ指向環境變數表,environ沒有包含在任何標頭檔案中,所以 在使用時 要用...
Linux環境安裝字型
最近工作用itext生成pdf在windows環境下沒有出現中文亂碼而在linux下出現中文亂碼,開啟pdf檢視pdf編碼,以及顯示的編碼,發現編碼並沒有對應。原因是使用的宋體和微軟雅黑在linux環境下並沒有安裝。解決方法 1.到windows環境下將所需字型拷貝到linux下。simsun.tt...
linux下c語言的開發環境(1)
unix是linux的祖師爺 unix商用作業系統 gnu 為gnu s not unix的遞迴縮寫,ps 遞迴縮寫即遞迴首字縮寫,是一種在全稱中遞迴引用它自己的縮寫。在計算機領域 黑客社群中乙個較早的傳統 特別是在 麻省理工大學 就是使用幽默地引用自身或其他縮寫的縮寫。最早的例項可能是在1977年...