curs_color(3)

名称
start_color, init_pair, init_color, has_colors, can_change_color, color_content, pair_content - ncurses カラー操作ルーチン

書式
# include <ncurses.h>
int start_color(void);
int init_pair(short pair, short f, short b);
int init_color(short color, short r, short g, short b);
bool has_colors(void);
bool can_change_color(void);
int color_content(short color, short *r, short *g, short *b);
int pair_content(short pair, short *f, short *b);

解説
ncurses は、機能のある端末でカラー属性をサポートします。 これらのルーチンを使用するには、通常、initscr の直後で start_color を呼び出す必要があります。 色は必ずペアで使用されます (色のペアと呼ばれます)。 色のペアは、(文字用の) 前景色と (文字が表示されるブランクのフィルタ用の) 背景色で構成されます。 プログラマは、ルーチン init_pair で色のペアを初期化します。 初期化が済んだ後は、<ncurses.h> 内で定義されているマクロである COLOR_PAIR(n) を、新しいビデオ属性として使用できます。 端末が色を再定義できる場合は、プログラマは、 ルーチン init_color を使用して、色の定義を変更できます。 ルーチン has_colors とルーチン can_change_color は、 端末に色の機能があるかどうか、 プログラマが色を変更できるかどうかに従って、 TRUE または FALSE を返します。 ルーチン color_content によって、 プログラマは初期化された色の赤、緑、青のコンポーネントを取り出せます。 ルーチン pair_content によって、プログラマは、 指定の色のペアが現時点でどのように定義されているかを見つけられます。

  ルーチンの解説
start_color ルーチンには引数は必要ありません。 プログラマが色を使用する場合は、 他の色操作ルーチンが呼び出す前にこれを呼び出す必要があります。 initscr のすぐ後でこのルーチンを呼び出すのは賢明な方法です。 start_color は 8 つの基本色 (黒、赤、緑、黄色、青、赤紫、水色、白) と 2 つのグローバル変数 COLORS と COLOR_PAIRS を初期化します (それぞれ端末がサポートできる色および色のペアの最大数を定義します)。 また、端末をオンに切り替えたときの色に、端末上の色を復元します。 init_pair ルーチンは、色のペアの定義を変更します。 次の 3 つの引数を取ります。 変更する色のペアの番号、前景色の番号、および背景色の番号です。 最初の引数の値は 1 と COLOR_PAIRS-1 の間である必要があります。 2 番めの引数の値と 3 番めの引数の値は 0 と COLORS の間にある必要があります (0 色のペアは黒の上の白に結びつけれているので、変更できません)。 色のペアが以前に初期化されている場合、画面はリフレッシュされ、 その色のペアが発生したところはすべて新しい定義に変更されます。 init_color ルーチンは色の定義を変更します。 次の 4 つの引数を取ります。 変更する色の番号の後に 3 つの RGB 値が続いたものです (赤、緑、青の各コンポーネントの量についてです)。 最初の引数の値は、0 と COLORS の間である必要があります (デフォルトのカラーインデックスについては、 Colors のセクションを参照してください)。 最後の 3 つの引数はそれぞれ 0 と 1000 の値の間にある必要があります。 init_color を使用するとき、 画面上にその色が発生したところはすべてただちに新しい定義に変化します。 has_colors ルーチンには引数は必要ありません。 端末が色を操作できる場合は TRUE を返します。 そうでない場合は、FALSE を返します。 このルーチンは、端末に独立なプログラムを作成するのを簡単にします。 たとえば、プログラマは、これを使用して、 色または他のビデオ属性を使用するかどうか決定できます。 can_change_color ルーチンには引数は必要ありません。 端末が色をサポートし、色の定義を変更できる場合は TRUE を返します。 そうでない場合、FALSE を返します。 このルーチンは端末に独立なプログラムを作成するのを簡単にします。 color_content ルーチンは、色の中に赤、緑、青 (RGB) コンポーネントの強度を見つける方法をプログラマに与えます。 次の 4 つの引数が必要です。 色の番号、および指定の色の中の赤、緑、青のコンポーネントに 関する情報を保存する short の 3 つのアドレスです。 最初の引数の値は 0 と COLORS の間です。 最後の 3 つの引数が指すアドレスに保存される値は 0 (コンポーネントなし) と 1000 (コンポーネントの最大量) の間です。 pair_content ルーチンによって、プログラマは、 指定の色のペアが何の色で構成されるかを見つけることができます。 次の 3 つの引数が必要です。 色のペアの番号、前景色の番号と背景色の番号を保存するための short の 2 つのアドレスです。 最初の引数の値は 1 と COLOR_PAIRS-1 の間にある必要があります。 2 番めの引数と 3 番めの引数が指すアドレスに保存される値は 0 と COLORS の間にあります。

  色
<ncurses.h> では、次のマクロが定義されています。 これらはデフォルトの色です。 また、ncurses は、COLOR_BLACK が すべての端末についてデフォルトの背景色であると想定します。
      COLOR_BLACK
      COLOR_RED
      COLOR_GREEN
      COLOR_YELLOW
      COLOR_BLUE
      COLOR_MAGENTA
      COLOR_CYAN
      COLOR_WHITE

戻り値
すべてのルーチンが処理失敗したときに整数 ERR を返し、 処理が正常に完了したときは OK を返します。

注釈
いくつかの警告が VGA 互換のグラフィックスがある 386 マシンと 486 マシンに適用されます。 COLOR_YELLOW は実際には茶色です。 黄色にするためには、A_BOLD 属性とCOLOR_YELLOW を組み合わせて使用します。 A_BLINK 属性は、理論的には背景を明るくするはずです。 これは動作に失敗することが多く、 最も多く動作しているカード (たとえば、Paradise およびこれと互換性のあるもの) でも、 明るい "黄色の" 背景を設定しようとするときに 間違った動作をすることがあります (代わりに前景が黄色でまたたきます)。 色の RGB 値は設定できません。

機能
setf, setb, setaf, setab. curses ライブラリは 2 番めのペアを選んで使用してから、最初のペアに依存します。

関連項目
ncurses(3), curs_initscr(3), curs_attr(3)