ファイヤープロジェクト
出力文字の属性
2003-07-20T15:13+09:00   matsu
出力文字には強調表示やアンダーラインなどの属性を付加することができる.
SVr4でも実装されている属性には以下がある.
A_BLINK
またたく.
A_BOLD
特にまたたくか太い.
A_DIM
半分またたく.
A_REVERSE
反転.
A_STANDOUT
その端末でもっとも強調.
A_UNDERLINE
下線.
また,curses.hではさらに以下がある.
A_NORMAL
標準
A_PROTECT
プロテクトモード
A_INVIS
見えないか空白.
A_ALTCHARSET
文字セットをかえる.
A_CHARTEXT
拡張文字にビットマスク.
COLOR_PAIR(n)
カラーペア(フォアグラウンドとバックグラウンド)(n番).
なんだか謎めいているので,後でサンプルで実際にやってみる.
属性を設定する関数はいろいろあるようだが,主に使うのは以下のつだろう.
int attroff(int attrs);
指定した属性をoffにする.
int wattroff(WINDOW *win, int attrs);
ウィンドウを指定してattroff.
int attron(int attrs);
指定した属性をonにする.
int wattron(WINDOW *win, int attrs);
ウィンドウを指定してattron.
int attrset(int attrs);
属性を指定する.
int wattrset(WINDOW *win, int attrs);
ウィンドウを指定してattrset.
int color_set(short color_pair_number, void* opts);
色の設定.
int wcolor_set(WINDOW *win, short color_pair_number, void* opts);
ウィンドウを指定してcolor_set.
int standend(void);
attrset(A_NORMAL)と等価.
int wstandend(WINDOW *win);
ウィンドウを指定してstandend.
int standout(void);
attron(A_STANDOUT)と等価.
int wstandout(WINDOW *win);
ウィンドウを指定してstandout.
まず,attron,attrsetを使用して冒頭の属性ごとに(組み合わせはしない)文字を表示するサンプル.
A_STANDOUTはA_REVERSEになっているようだ.そしてA_BLINKとA_BOLDは違いが分からない(同じなのか?).A_DIM,A_PROTECT,A_INVISはA_NORMALと同じに見える.A_ALTCHARSETでは'_'が四角くなった.そしてA_CHARTEXTでは空白が表示されているように見える.これらの事象は端末の各属性に対するサポートの状況で変わるのだろう.
色がつくと嬉しいかもしれないので,色をつけるサンプルを作成してみた.
このサンプルを作成して分かったのだが,色の設定はちょっと面倒臭い(その代わり自由度が高い).まず端末が色をサポートしているかどうかをチェックする.
bool has_colors(void);
この返り値がTRUEなら色のための初期化をする.
int start_color(void);
これがERRを返さなければ(OKを返せば)色の設定をする.色の設定は
attrset(COLOR_PAIR(color_pair_no));
でできるのだが,問題はnである.nはカラーペアの番号で,カラーペアは色の設定をする前にあらかじめ設定しておく必要がある.カラーペアは以下で設定できる.
init_pair(color_pair_no, foregraund_color_no, background_color_no)
第2,3引数は色番号である.この色も
int init_color(short color, short r, short g, short b);
で作成できそうな雰囲気だが,今回はcurses.hで定義されている色を使用した(配列colorsの各要素).最後にstart_colorによって設定される変数をメモしておく.
COLOR_PAIRS
設定できるカラーペアの最大数.
COLORS
設定できるカラーの最大数.
matsu(C)
Since 2002
Mail to matsu