2012年9月30日 星期日

程式上色

其實這是整理在BBS上的舊文,想說就把它轉到這裡來,是記錄如何在程式裡面加上顏色的控制,如果熟BBS的人應該很熟悉,似乎是一個公訂的標準上色方式,大家參考參考,也許可以讓你的程式增添不少色彩,能不能為人生上色就說不準了。

1. ANSI C:
開始上色格式:\033[x;y;zm
結束上色格式:\033[0m //其實就是設定為無屬性
\033就是escape字元,可以用\e來代替
x,y,z三數字分別定義字型格式、前景、背景。

x:
0 無屬性
1 明亮字體
2 暗淡字體
4 底線字體
7 反白字體
8 匿蹤字體 

y,z:
30~37 為字體顏色 黑紅綠黃藍紫青白
40~47 為背景顏色 黑紅綠黃藍紫青白

ex: printf("\033[1;33mtest\033[0m")
ex: printf("\e[1;33mtest\e[0m")

2. BASH shell:
第一種方法,可以用printf來實作,這和C就是一樣的了
至於echo,要用echo -e的方式,讓它解讀escape跳脫 ,之後的寫法也一模一樣。
值得一提的,這個設定對bash prompt也有用,比如說我的PS1參數的設定: [\e[1;32m\u\e[0m@\e[1;34m\h\e[0m \e[1;33m\W\e[0m]\$
很難看懂,總之,綠色的使用者名稱,藍色的電腦名稱跟黃色的路徑,還滿潮的XD

3. curses.h 雖然說現在用curses.h的程式好像滿少了,不過就寫一下吧,主要有五個步驟,那時候在ubuntu上測試是OK,還寫了一些東西,這次把它拿出來看發現已經看不懂了Orz。
    一、利用has_color() 偵測是否有顏色支援
    二、start_color() 開啟顏色支援
    三、init_pair(pair,f,b) 設定屬性
    四、attrset(COLOR_PAIR(pair)) 設定接下來使用這個屬性來輸出
    五、attroff(COLOR_PAIR(pair)) 關掉這個屬性
第三部的init_pair裡:
pair指的是要存在第幾個顏色設定暫存中 可以指定1~COLOR_PAIRS這麼多組,可以用printf("%d",COLOR_PAIRS)來得知,ubuntu10.10終端是64組。
f 指字體顏色,b 指背景顏色 可以用數字,也可以用在curses.h中定義好的代碼
COLOR_BLACK    0
COLOR_RED 1
COLOR_YELLOW 2
COLOR_GREEN 3
COLOR_BLUE 4
COLOR_MAGENTA 5
COLOR_CYAN 6
COLOR_WHITE 7
其實順序跟就跟之前提的一模一樣…
屬性的部分,也有預先定義好的可以使用,ex直接attrset(A_BOLD即可),不同的屬性可以用 | 來加總,不過也別加太多= =。
A_NORMAL 正常
A_STANDOUT 些許高亮度
A_UNDERLINE 底線
A_REVERSE 反白
A_BLINK 閃鑠
A_DIM 暗淡
A_BOLD 粗體
A_PROTECT 沒試過…不清楚
A_INVIS 匿蹤
A_ALTCHARSET 沒試過…不清楚
A_CHARTEXT 沒試過…不清楚

4. 參考資料:
基本上色:
https://wiki.archlinux.org/index.php/Color_Bash_Prompt
其餘關於ncurses:
http://doc.linuxpk.com/55549.html
http://fanqiang.chinaunix.net/a4/b2/20020626/060200258.html
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

5. 結論: 顏色上色固然漂亮,可是也會讓輸出的內容變得較難閱讀,請不要太頻繁的使用。

1 則留言:

  1. http://blog.longwin.com.tw/2008/12/vim-screen-set-support-256-color-2008/

    回覆刪除