curses 環境内のウィンドウ

curses プログラムは、 端末のディスプレイに表示されたウィンドウを操作します。 ウィンドウは、長さと高さを、ディスプレイ全体と同じ大きさ以下で、 単一の文字以上にすることができます。

注: パッドは、スクリーン・サイズの制限を受けないウィンドウです。

curses プログラム内で、 ウィンドウはタイプ WINDOW として宣言される変数です。 WINDOW データ型は、C データ構造体として /usr/include/curses.h ファイルに定義されます。 ウィンドウを作成するには、 マシンのメモリーの一部をウィンドウ構造体に割り当てます。 この構造体はウィンドウの特性を示します。 あるプログラムがウィンドウ・データをメモリー内部で変更する場合、 そのプログラムは wrefresh サブルーチン (または同等のサブルーチン) を使用して、 該当するウィンドウ構造体の内部の変更を反映するように、 外部の物理スクリーンを更新する必要があります。

デフォルトのウィンドウ構造

curses には、 stdscr と呼ばれる仮想デフォルト・ウィンドウ構造があります。 stdscr はメモリー内で端末ディスプレイ全体を表します。 stdscr ウィンドウ構造体は、curses ライブラリーを初期化すると自動的に作成され、 ディスプレイについて記述します。 ライブラリーを初期化すると、length 変数と width 変数が物理ディスプレイの長さと幅に設定されます。

stdscr を使用するプログラムは、 最初に stdscr を操作します。 それから refresh サブルーチンを呼び出し、 外部ディスプレイをリフレッシュして、それが stdscr ウィンドウに一致するようにします。

stdscr の他に、ユーザー独自のウィンドウを定義することができます。 これらのウィンドウは、stdscr と区別するためにユーザー定義ウィンドウ と呼ばれます。 stdscr と同様に、 ユーザー定義ウィンドウは構造体としてマシン・メモリーに存在します。 プログラムに使用可能なメモリーの量を除いて、 作成可能なウィンドウ数に制限はありません。 curses プログラムはデフォルト・ウィンドウ、 ユーザー定義ウィンドウ、またはその両方を操作することができます。

現行ウィンドウ構造

curses は curscr (現在のスクリーン) と呼ばれるもう 1 つの仮想ウィンドウをサポートします。 curscr ウィンドウは、 端末の外部ディスプレイに現在表示されているものの内部表現です。

プログラムは、内部表現に一致する外部表現を必要とする場合、 物理的なディスプレイを更新するために wrefresh サブルーチンなどのサブルーチン、 (あるいは、プログラムが stdscr を処理している場合には refresh サブルーチン) を呼び出す必要があります。

curscr は curses による内部使用のために予約されています。 curscr を操作してはなりません。

サブウィンドウ

curses によってサブウィンドウ を作成することもできます。 サブウィンドウは他のウィンドウ内の長方形の部分です。 サブウィンドウのタイプも WINDOW です。 サブウィンドウを収容したウィンドウは、サブウィンドウの親と呼ばれ、 サブウィンドウは、サブウィンドウを収容したウィンドウの子と呼ばれます。

サブウィンドウによってオーバーラップされている領域内の親ウィンドウまたは子ウィンドウのいずれかに対する変更は、 両方のウィンドウに対して行われます。 サブウィンドウを変更した後、 親ウィンドウをリフレッシュする前に、 親ウィンドウ上で touchline または touchwin サブルーチンを呼び出してください。

サブルーチン 説明
touchline wrefresh サブルーチンに対する次の呼び出し時に、行の範囲のリフレッシュを強制します。
touchwin wrefresh サブルーチンの次のコール時に、 ウィンドウの文字配列内のすべての文字のリフレッシュを強制します。 touchwin サブルーチンは最適化情報を保管しません。 このサブルーチンはオーバーラップしているウィンドウを使用する場合に役立ちます。

親で呼び出されたリフレッシュは、子もリフレッシュします。 サブウィンドウは親ウィンドウになることもできます。 ウィンドウ内にウィンドウの層を形成するプロセスは、 ネスティング と呼ばれます。

親ウィンドウを削除する前に、 delwin サブルーチンを使用して、 そのすべての子ウィンドウを最初に削除する必要があります。 すべての子ウィンドウを削除する前に、 親ウィンドウの削除を試みると、curses によってエラーが戻されます。

パッド

パッドは端末のディスプレイ・サイズによって制限されない、 あるいはディスプレイの特定の部分に関連するタイプのウィンドウです。 パッドは通常、物理的なディスプレイより大きいので、ある時点では、 パッドの一部しかユーザーに見えません。

1 つのウィンドウに一緒に保持したい大量の関連データがあるが、 すべてのデータを一度に表示する必要がない場合に、 パッドを使用してください。

パッド内のウィンドウは、サブパッド と呼ばれます。 サブパッドは親パッドを基準とした座標にあるパッド内に置かれます。 この配置方法は、 スクリーン座標を使用して配置されるサブウィンドウとは異なります。

他のウィンドウと異なり、入力のスクロールまたはエコーによって、 パッドが自動的にリフレッシュされることはありません。 サブウィンドウと同様に、サブパッドのイメージを変更する場合には、 親パッドをリフレッシュする前に、 親上で touchline または touchwin サブルーチンを呼び出す必要があります。

パッドとともにすべての curses サブルーチンを使用することができます。 ただし、 newwinsubwinwrefresh、および wnoutrefresh サブルーチンを除きます。 これらのサブルーチンの代わりに、newpadsubpadprefresh、および pnoutrefresh の各サブルーチンを使用します。