出力文字の属性
出力文字には強調表示やアンダーラインなどの属性を付加することができる.
SVr4でも実装されている属性には以下がある.
- A_BLINK
- またたく.
- A_BOLD
- 特にまたたくか太い.
- A_DIM
- 半分またたく.
- A_REVERSE
- 反転.
- A_STANDOUT
- その端末でもっとも強調.
- A_UNDERLINE
- 下線.
- 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
- 設定できるカラーの最大数.

