curs_color 3x

curs_color(3x)                                           curs_color(3x)




名前

       start_color, init_pair, init_color, has_colors,
       can_change_color, color_content, pair_content, COLOR_PAIR
       - curses 色を操作するルーチン


書式

       # include <curses.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);
       int COLOR_PAIR(int n);


説明


概要

        curses はその機能項目を持つ端末で色の属性をサポートします。
        これらのルーチンを使うには、通常 initscr の直後に 
       start_color を呼び出す必要があります。
        色は常にペアで使用します。(色のペアといいます。)
        色のペアは前景色(文字の色)と背景色(地の色で、文字はその上に
       表示される)で構成されます。
        色のペアは init_pair ルーチンで初期化します。
        初期化した後は、新しい表示属性として 
       <curses.h> で定義されるマクロ COLOR_PAIR(n) が使えます。

        端末で色の変更が可能な場合は、色の定義の変更に 
       init_color ルーチンを使うことができます。
        has_colorscan_change_color ルーチンは、端末がカラー機能を
       持つかどうか、ユーザーが色を変更できるかどうかにより、それぞれ 
       TRUEFALSE を返します。
        初期化された色から color_content ルーチンで赤・緑・青の成分を
       取り出すことができます。
        pair_content ルーチンを使うと与えられた色のペアが
       現在どのように定義されているかを探ることができます。


色の表示

        curses ライブラリは下記の入力を組み合わせて、実際に画面に
       表示する前景色と背景色を作ります。

       o   文字ごとの表示属性 (例えば waddch 経由)

       o   ウインドウの属性 (例えば wattrset による)

       o   背景文字 (例えば wbkgdset)。

        文字ごとの表示属性とウインドウの属性は通常 
       COLOR_PAIR の値を含む表示属性を含む 1 つのパラメータによって
       設定されます。
        wattr_set のようないくつかの関数は、色のペアの番号である
       別々の引数を使います。

        背景文字は特別な場合です。
        これはちょうど waddch に渡されたかのような文字値を含みます。

        curses ライプラリは、これらの色のペアを組み合わせる
       実際の処理を、 waddch から呼び出される内部関数で処理します。

       o   waddch に渡される引数が空白だった場合、
           特別な色のペア 0 を使います。

           o   curses は次にウインドウの属性を調べます。

           o   ウインドウの属性が色のペア 0 でなければ、 
               curses はウインドウの属性から色のペアを使います。

           o   それ以外の場合 curses は背景文字を使います。

       o    waddch に渡された引数が空白でないか、
           特別な色のペア 0 を使わない場合、引数が 0 でなければ、 
           curses は引数から色のペアを選びます。
            その他の場合、次にウインドウの属性を試し、
           最後は背景文字を使います。

        wprintw のようないくつかの curses 関数は waddch を使います。
        これらは色のペアと引数を組み合わせません。
        その結果、これらの呼び出しはウインドウ属性か背景文字しか
       使いません。


ルーチンの説明

        start_color ルーチンに引数はありません。
        色を使う場合には、他の色操作ルーチンを呼び出す前に 
       start_color を呼び出す必要があります。
        initscr の直後にこのルーチンを呼び出すのは良い習慣です。
        start_color は以下の処理をします。

       o   2 つの広域(グローバル)変数 COLORSCOLOR_PAIRS を
           初期化します。(それぞれ、端末がサポートする色と色のペアの
           最大数を定義します。)

       o   特別な色のペア 0 をデフォルトの前景色と背景色として
           初期化します。他の色のペアは初期化しません。

       o   端末の色を、端末が起動した時の値に戻します。

       o   端末が initc (initialize_color) 機能項目を
           サポートしている場合、 start_color はカラーパレットの
           赤・緑・青成分を表す内部テーブルを初期化します。

            色成分は、端末が CGA (aka "ANSI") を用いるか、 
           HLS (つまり hls (hue_lightness_saturation) 機能項目が
           設定されている) を用いるかによって異なります。
            まず基本色 8 色(黒、赤、緑、黃、青、マゼンタ、シアン、
           白)でテーブルを初期化し、その後(端末が 8 色より多くを
           サポートしていれば)色成分を 1000 まで初期化します。

            start_color は内蔵のテーブルに合わせて
           端末のカラーパレットを設定しようとはしません。
            端末の色に合わせて内蔵テーブルを変更するには 
           init_color を使います。

        以下の制限が色の値と色のペアに適用されます。
        これらの制限からはずれた値は不正であり、実行中エラーとなる
       でしょう。

       o   COLORS は端末データベースの max_colors 機能項目に
           対応します。典型的には符号付き 16 ビット整数値です。
           ( terminfo(5) を参照してください。)

       o   色の値は 0以上 COLORS-1 以下の範囲を想定しています。
           (両端も含む、つまり 0COLORS-1 も含む)

       o   特別な色の値 -1 が特定の拡張機能関数でデフォルトの色を
           表すのに使われます。
           ( use_default_colors を参照してください。)

       o   COLOR_PAIRS は端末データベースの max_pairs 機能項目に
           対応します。典型的には符号付き 16 ビット整数値です。
           ( terminfo(5) を参照してください。)

       o   有効な色のペアの値は 1 以上 COLOR_PAIRS-1 以下です。

       o   色のペア 0 は特別扱いで、「色がない」ことを表します。

            色のペア 0 は黒地に白と仮定されています。しかし
           実際には、色を初期化する前に端末が実装している色です。
            アプリケーションから変更することはできません。

        init_pair ルーチンは色のペアの定義を変更します。
        変更する色のペアの番号、前景色の番号、背景色の番号の
        3 つの引数を取ります。
        ポータブル・アプリケーションでは、

       o   1 番目の引数は有効な色のペアの値でなければなりません。
            デフォルトの色を使うとき( use_default_colors 参照)、
           上限は前景色と背景色にデフォルトの色を使う拡張的な
           色のペアを受け入れるように調整されます。

       o   2 番目と 3 番目の引数は有効な色の値でなければなりません。

        色のペアが以前に初期化されていた場合、画面を更新し、
       現れた色のペアはすべて新しい定義に変更されます。

        拡張機能として、 ncurses では assume_default_colors 
       ルーチンで色のペア 0 を設定できます。または、初めに 
       use_default_colors ルーチンを呼び出すことでデフォルトの色
       (色番号 STRONG>-1)を使うことを指定できます。

        init_color ルーチンは色の定義を変更します。
        色の番号と、変更後の RGB の値(赤・緑・青の成分の輝度) 3 つの
       計 4 つの引数を取ります。
         1 番目の引数は有効な色の値でなければなりません。
       デフォルトの色はここでは使用できません。
       ( デフォルトの色の一覧は  の節を参照してください。)
        後ろ 3 つの引数は 0 から 1000 までの値でなければなりません。
        init_color を使うと、画面上のその色はすぐに新しい定義に
       変更されます。

        has_colors ルーチンに引数はありません。
        端末が色を扱えれば TRUE を、そうでなければ FALSE を返します。
        このルーチンは端末に依存しないプログラムを作るとき便利です。
        例えば、色を使うか、他の表示属性を使うかを決めるために
       使うことができます。

        can_change_color ルーチンに引数はありません。
        端末が色をサポートし、その定義を変更できるなら TRUE を、
       そうでなければ FALSE を返します。
        このルーチンは端末に依存しないプログラムを作るとき便利です。

        color_content ルーチンを使うと、ある色の RGB (赤・緑・青)
       成分の輝度を知ることができます。
        色の番号と、与えられた色の RGB 成分の値を格納する 
       short 値のアドレス 3 つ、計 4 つの引数を取ります。
         1 番目の引数は有効な色の値、すなわち 0 以上 COLORS-1 以下
       でなければなりません。
        後ろ 3 つの引数で示されるアドレスに格納される値は、 
       0 (全く成分がない) 以上 1000 (最大の成分値) 以下の範囲に
       なります。

        pair_content ルーチンを使うと、与えられた色のペアが
       どの色で構成されているかを知ることができます。
        色のペアの番号と、前景色と背景色の番号を格納する 
       short 値のアドレス 2 つ、計 3 つの引数を取ります。
         1 番目の引数は有効な色の(訳注: ペアの)値、すなわち 1 以上 
       COLOR_PAIRS-1 以下でなければなりません。
         2 番目と 3 番目の引数で示されるアドレスに格納される値は、 
       0 以上 COLORS (訳注: COLORS-1) 以下になります。
        

        <curses.h> は次のマクロを定義しています。
        これらは標準の色です(ISO-6429)。
        curses はまた、すべての端末において COLOR_BLACK を
       デフォルトの背景色と仮定します。

             COLOR_BLACK
             COLOR_RED
             COLOR_GREEN
             COLOR_YELLOW
             COLOR_BLUE
             COLOR_MAGENTA
             COLOR_CYAN
             COLOR_WHITE


戻り値

        can_change_color()has_colors() ルーチンは TRUE または 
       FALSE を返します。

        他のすべてのルーチンは、失敗したときに整数値 ERR を、
       正常終了したときに OK ( SVr4 は「 ERR 以外の整数値」としか
       指定していません) を返します。

        X/Open はエラーの条件を何も定義していません。
        この実装は、 0 以上 COLORS-1 以下の範囲の外の色の値を
       使おうとした場合(デフォルトの色を使う拡張を除く)、または 
       0 以上 COLOR_PAIRS-1 以下の範囲の外の色のペアの値を
       使おうとした場合に ERR を返します。
        init_color で使う色(訳注: 色の成分)の値は、 0 から 1000 の
       範囲でなければなりません。
        端末が初期化されていない場合、すべての関数はエラーを
       返します。
        start_color が呼び出されていない場合、 init_pair のような
       後続的な関数はエラーを返します。

          init_color
                端末がこの機能をサポートしていない場合、例えば 
               initialize_color 機能項目が端末記述から欠落している
               場合にエラーを返します。

          start_color
                色のテーブルが割り当てられない場合にエラーを
               返します。


注意

        ncurses の実装では、各端末ごとに別々の色有効化フラグ、
       カラーパレット、色のペアのテーブル、 COLORS と 
       COLOR_PAIRS の値があり、 start_color 関数は現在画面にしか
       作用しません。
        SVr4/XSI のインターフェイスはこのような考えで実際に設計
       されておらず、歴史的な実装では 1 つのカラーパレットを
       共有して使うことがあります。

        色のペアを通して暗黙に背景色を設定すると、文字の
       書き込み操作が明示的にタッチしたマスにしか作用しないことに
       注意してください。
        ウインドウの一部分が消去かスクロール操作で空白になるときに
       使われる背景色を変えるには curs_bkgd(3x) を参照してください。

        VGA 互換グラフィックスを持つ 386 と 486 マシンに適用される
       いくつかの注意があります。

            COLOR_YELLOW は実際には茶色です。黄色にするには、
           COLOR_YELLOW を A_BOLD 属性と組み合わせてください。

            A_BLINK 属性は理論的には背景が明るくなるはずです。
            これはしばしばうまく動作しません。
           そして、ほぼ正しく動作するビデオカード( Paradise とその
           互換品)でさえ、明るい黄色の背景色を設定しようとすると
           間違った動作をします。(代わりに黄色の前景色が点滅します)

       o   色の RGB 値は設定できません。


PORTABILITY 移植性

        この実装は XSI Curses による COLORSCOLOR_PAIRS の
       最大値の最小限度を満足しています。	

        init_pair ルーチンは use_default_colors 拡張機能を
       サポートするため、負の値の前景色と背景色を受け付けますが、
       それは use_default_colors ルーチンを初めに呼び出した場合だけ
       です。

        すべての端末でデフォルトの背景色が COLOR_BLACK である
       という仮定は assume_default_colors 拡張機能を使うことで
       変更できます。

        この実装はポインタ、例えば color_contentpair_content が
       返す値のためのポインタを検査します。そしてヌルのときには
       省略可能な引数のように扱います。


SEE ALSO 関連項目

       curses(3x),  curs_initscr(3x),  curs_attr(3x),  
       curs_variables(3x),  default_colors(3x)



                                                         curs_color(3x)