##
6.14.2 Window オブジェクト

上記の `initscr()` や `newwin()` が返すウィンドウ は、以下のメソッドを持ちます:

`addch`( | [y, x,] ch[, attr])

  注意: ここで 文字 は Python 文字 (長さ 1 の文字列) C における 文字 (ASCII コード) を意味します。(この注釈は文字について触れている ドキュメントではどこでも当てはまります。) 組み込みの `ord()` は文字列をコードの集まりにする際に 便利です。

  `(y, x)` にある文字 ch を属性 attr で描画します。このときその場所に以前描画された文字は上書きされます。 標準の設定では、文字の位置および属性はウィンドウオブジェクトにおける 現在の設定になります。

`addnstr`( | [y, x,] str, n[, attr])

  文字列 str から最大で n 文字を `(y, x)` に属性 attr で描画します。以前ディスプレイにあった内容はすべて 上書きされます。

`addstr`( | [y, x,] str[, attr])

  `(y, x)` に文字列 str を属性 attr で描画 します。以前ディスプレイにあった内容はすべて上書きされます。

`attroff`( | attr)

  現在のウィンドウに書き込まれた全ての内容に対し ``バックグラウンド'' に設定された属性 attr を除去します。

`attron`( | attr)

  現在のウィンドウに書き込まれた全ての内容に対し ``バックグラウンド'' に属性 attr を追加します。

`attrset`( | attr)

  ``バックグラウンド'' の属性セットを attr に設定します。 初期値は 0 (属性なし) です。

`bkgd`( | ch[, attr])

  ウィンドウ上の背景プロパティを、 attr を属性とする 文字 ch に設定します。変更はそのウィンドウ中の全ての文字に 以下のようにして適用されます:
  - ウィンドウ中の全ての文字の属性が新たな背景属性に変更されます。
  - 以前の背景文字が出現すると、常に新たな背景文字に変更されます。

`bkgdset`( | ch[, attr])

  ウィンドウの背景を設定します。ウィンドウの背景は、文字と何らかの 属性の組み合わせから成り立ちます。背景情報の属性の部分は、 ウィンドウ上に描画されている空白でない全ての文字と組み合わされ (OR され) ます。空白文字には文字部分と属性部分の両方が組み合わされ ます。背景は文字のプロパティとなり、スクロールや行／文字の挿入／削除 操作の際には文字と一緒に移動します。

`border`( | [ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])

  ウィンドウの縁に境界線を描画します。各引数には境界の特定部分を表現 するために使われる文字を指定します; 詳細は以下のテーブルを参照 してください。文字は整数または 1 文字からなる文字列で指定されます。

  注意: どの引数も、`0` を指定した場合標準設定の文字が 使われるようになります。キーワード引数は使うことが できません。 標準の設定はテーブル中に示されています:

  引数 | 記述 | 標準の設定値
  --- | --- | ---
  ls | 左側 | `ACS_VLINE`
  rs | 右側 | `ACS_VLINE`
  ts | 上側 | `ACS_HLINE`
  bs | 下側 | `ACS_HLINE`
  tl | 左上の角 | `ACS_ULCORNER`
  tr | 右上の角 | `ACS_URCORNER`
  bl | 左下の角 | `ACS_BLCORNER`
  br | 右下の角 | `ACS_BRCORNER`

`box`( | [vertch, horch])

  `border()` と同様ですが、ls および rs は 共に vertch で、ts および bs は共に horch です。この関数では、角に使われる文字は常に標準設定の値です。

`clear`( | )

  `erase()` に似ていますが、次に `refresh()` が呼び出された 際に全てのウィンドウを再描画するようにします。

`clearok`( | yes)

  yes が 1 ならば、次の `refresh()` はウィンドウを完全に 消去します。

`clrtobot`( | )

  カーソルの位置からウィンドウの端までを消去します: カーソル以降の 全ての行が削除されるため、 `clrtoeol()` が実行されたのと おなじになります。

`clrtoeol`( | )

  カーソル位置から行末までを消去します。

`cursyncup`( | )

  ウィンドウの全ての親ウィンドウについて、現在のカーソル位置 を反映するよう更新します。

`delch`( | [y, x])

  `(y, x)` にある文字を削除します。 Delete any character at `(y, x)`.

`deleteln`( | )

  カーソルの下にある行を削除します。後続の行はすべて 1 行上に移動します。

`derwin`( | [nlines, ncols,] begin_y, begin_x)

  ``derive window (ウィンドウを導出する)'' の短縮形です。 `derwin()` は `subwin()` と同じですが、 begin_y および begin+x はスクリーン全体の原点ではなく、 ウィンドウの原点からの相対位置です。導出されたウィンドウオブジェクト が返されます。

`echochar`( | ch[, attr])

  文字 ch に属性 attr を付与し、即座に `refresh()` をウィンドウに対して呼び出します。

`enclose`( | y, x)

  与えられた文字セル座標をスクリーン原点から相対的なものとし、 ウィンドウの中に含まれるかを調べて、真または偽を返します。 スクリーン上のウィンドウの一部がマウスイベントの発生場所を 含むかどうかを調べる上で便利です。

`erase`( | )

  ウィンドウをクリアします。

`getbegyx`( | )

  左上の角の座標をあらわすタプル `(y, x)` を返します。

`getch`( | [y, x])

  文字を取得します。返される整数は ASCII の範囲の値となる わけではない ので注意してください: ファンクションキー、 キーパッド上のキー等は 256 よりも大きな数字を返します。無遅延 (no-delay) モードでは、入力がない場合 -1 が返されます。

`getkey`( | [y, x])

  文字を取得し、 `getch()` のように整数を返す代わりに 文字列を返します。ファンクションキー、キーバットキーなどは キー名の入った複数バイトからなる文字列を返します。無遅延 モードでは、入力がない場合例外が送出されます。

`getmaxyx`( | )

  ウィンドウの高さおよび幅を表すタプル `(y, x)` を返します。

`getparyx`( | )

  親ウィンドウ中におけるウィンドウの開始位置を x と y の二つの 整数で返します。ウィンドウに親ウィンドウがない場合`-1,-1` を返します。

`getstr`( | [y, x])

  原始的な文字編集機能つきで、ユーザの入力文字列を読み取ります。

`getyx`( | )

  ウィンドウの左上角からの相対で表した現在のカーソル位置をタプル `(y, x)` で返します。

`hline`( | [y, x,] ch, n)

  `(y, x)` から始まり、 n の長さを持つ、 文字 ch で作られる水平線を表示します。

`idcok`( | flag)

  flag が偽の場合、curses は端末のハードウェアによる文字挿入／削除 機能を使おうとしなくなります; flag が真ならば、文字挿入／削除 は有効にされます。curses が最初に初期化された際には文字挿入／削除は 標準の設定で有効になっています。

`idlok`( | yes)

  yes が 1 であれば、`curses` はハードウェアの行編集 機能を利用しようと試みます。行挿入／削除は無効化されます。

`immedok`( | flag)

  flag が真ならば、ウィンドウイメージ内における何らかの変更 があるとウィンドウを更新するようになります; すなわち、`refresh()` を自分で呼ばなくても良くなります。とはいえ、wrefresh を繰り返し 呼び出すことになるため、この操作はかなりパフォーマンスを低下させます。 標準の設定では無効になっています。

`inch`( | [y, x])

  ウィンドウの指定の位置の文字を返します。下位 8 ビットが常に文字となり、 それより上のビットは属性を表します。

`insch`( | [y, x,] ch[, attr])

  `(y, x)` に文字 ch を属性 attr で描画し、 行の x からの内容を 1 文字分右にずらします。

`insdelln`( | nlines)

  nlines 行を指定されたウィンドウの現在の行の上に挿入します。 その下にある nlines 行は失われます。負の nlines を指定 すると、カーソルのある行以降の nlines を削除し、削除された行の 後ろに続く内容が上に来ます。その下にある nlines は消去されます。 現在のカーソル位置はそのままです。

`insertln`( | )

  カーソルの下に空行を 1 行入れます。それ以降の行は 1 行づつ下に移動 します。

`insnstr`( | [y, x,] str, n [, attr])

  文字列をカーソルの下にある文字の前に (一行に収まるだけ) 最大 n 文字 挿入します。n がゼロまたは負の値の場合、文字列全体が挿入されます。 カーソルの右にある全ての文字は右に移動し、行の左端にある文字は失われます。 カーソル位置は (y、 x が指定されていた場合はそこに移動しますが、 その後は) 変化しません。

`insstr`( | [y, x, ] str [, attr])

  キャラクタ文字列を (行に収まるだけ) カーソルより前に挿入します。 カーソルの右側にある文字は全て右にシフトし、行の右端の文字は失われます。 カーソル位置は (y、 x が指定されていた場合はそこに移動しますが、 その後は) 変化しません。

`instr`( | [y, x][, n])

  現在のカーソル位置、または y, x が指定されている場合には その場所から始まるキャラクタ文字列をウィンドウから抽出して返します。 属性は文字から剥ぎ取られます。n が指定された場合、`instr()` は (末尾の NUL 文字を除いて) 最大で n 文字までの長さからなる 文字列を返します。

`is_linetouched`( | line)

  指定した行が、最後に `refresh()` を呼んだ時から変更されている 場合に真を返します; そうでない場合には偽を返します。 line が現在のウィンドウ上の有効な行でない場合、 `curses.error` 例外を送出します。

`is_wintouched`( | )

  指定したウィンドウが、最後に `refresh()` を呼んだ時から変更されている 場合に真を返します; そうでない場合には偽を返します。

`keypad`( | yes)

  yes が 1 の場合、ある種のキー (キーパッドやファンクションキー) によって生成されたエスケープシーケンスは `curses` で 解釈されます。yes が 0 の場合、エスケープシーケンスは 入力ストリームにそのままの状態で残されます。

`leaveok`( | yes)

  yes が 1 の場合、カーソルは ``カーソル位置'' に移動せず 現在の場所にとどめます。これにより、カーソルの移動を減らせる 可能性があります。この場合、カーソルは不可視にされます。

  yes が 0 の場合、カーソルは更新の際に常に ``カーソル位置'' に移動します。

`move`( | new_y, new_x)

  カーソルを `(new_y, new_x)` に移動します。

`mvderwin`( | y, x)

  ウィンドウを親ウィンドウの中で移動します。ウィンドウのスクリーン相対 となるパラメタ群は変化しません。このルーチンは親ウィンドウの一部を スクリーン上の同じ物理位置に表示する際に用いられます。

`mvwin`( | new_y, new_x)

  ウィンドウの左上角が `(new_y, new_x)` になるように移動します。

`nodelay`( | yes)

  yes が `1` の場合、`getch()` は非ブロックで動作します。

`notimeout`( | yes)

  yes が `1` の場合、エスケープシーケンスはタイムアウト しなくなります。

  yes が `0` の場合、数ミリ秒間の間エスケープシーケンスは 解釈されず、入力ストリーム中にそのままの状態で残されます。

`noutrefresh`( | )

  更新をマークはしますが待機します。この関数はウィンドウのデータ構造 を表現したい内容を反映するように更新しますが、物理スクリーン上に 反映させるための強制更新を行いません。更新を行うためには `doupdate()` を呼び出します。

`overlay`( | destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

  ウィンドウを destwin の上に重ね書き (overlay) します。 ウィンドウは同じサイズである必要はなく、重なっている領域だけが 複写されます。この複写は非破壊的 (non-destructive) です。これは 現在の背景文字が destwin の内容を上書きしないことを意味します。

  複写領域をきめ細かく制御するために、`overlay()` の第二形式を 使うことができます。sminrow および smincol は 元のウィンドウの左上の座標で、他の変数は destwin 内の矩形を 表します。

`overwrite`( | destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

  destwin の上にウィンドウの内容を上書き (overwrite) します。 ウィンドウは同じサイズである必要はなく、重なっている領域だけが 複写されます。この複写は破壊的 (destructive) です。これは 現在の背景文字が destwin の内容を上書きすることを意味します。

  複写領域をきめ細かく制御するために、`overlay()` の第二形式を 使うことができます。sminrow および smincol は 元のウィンドウの左上の座標で、他の変数は destwin 内の矩形を 表します。

`putwin`( | file)

  ウィンドウに関連付けられている全てのデータを与えられたファイルオブジェクト に書き込みます。この情報は後に `getwin()` 関数を使って 取得することができます。

`redrawln`( | beg, num)

  beg 行から始まる num スクリーン行の表示内容が壊れており、 次の `refresh()` 呼び出しで完全に再描画されなければならない ことを通知します。

`redrawwin`( | )

  ウィンドウ全体を更新 (touch) し、次の `refresh()` 呼び出しで 完全に再描画されるようにします。

`refresh`( | [pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])

  ディスプレイを即時更新し (現実のウィンドウとこれまでの描画／削除 メソッドの内容との同期をとり) ます。

  6 つのオプション引数はウィンドウが `newpad()` で生成された 場合にのみ指定することができます。追加の引数はパッドやスクリーンの どの部分が含まれるのかを示すために必要です。 pminrow および pmincol にはパッドが表示されている矩形の 左上角を指定します。sminrow, smincol, smaxrow, および smaxcol には、スクリーン上に表示される矩形の縁を指定します。 パッド内に表示される矩形の右下角はスクリーン座標から計算されるので、 矩形は同じサイズでなければなりません。矩形は両方とも、それぞれの ウィンドウ構造内に完全に含まれていなければなりません。 pminrow, pmincol, sminrow, または smincol に負の値を指定すると、ゼロを指定したものとして扱われます。

`scroll`( | [lines`= 1`])

  スクリーンまたはスクロール領域を上に lines 行スクロール します。

`scrollok`( | flag)

  ウィンドウのカーソルが、最下行で改行を行ったり最後の文字を入力したり した結果、ウィンドウやスクロール領域の縁からはみ出して移動した際の 動作を制御します。flag が偽の場合、カーソルは最下行にそのまま にしておかれます。flag が真の場合、ウィンドウは 1 行上に スクロールします。端末の物理スクロール効果を得るためには `idlok()` も呼び出す必要があるので注意してください。

`setscrreg`( | top, bottom)

  スクロール領域を top から bottom に設定します。 スクロール動作は全てこの領域で行われます。

`standend`( | )

  A_STANDOUT 属性をオフにします。端末によっては、この操作で 全ての属性をオフにする副作用が発生します。

`standout`( | )

  A_STANDOUT 属性をオンにします。

`subpad`( | [nlines, ncols,] begin_y, begin_x)

  左上の角が `(begin_y, begin_x)` にあり、幅／高さが それぞれ ncols/nlines であるようなサブウィンドウを返します。

`subwin`( | [nlines, ncols,] begin_y, begin_x)

  左上の角が `(begin_y, begin_x)` にあり、幅／高さが それぞれ ncols/nlines であるようなサブウィンドウを返します。

  標準の設定では、サブウィンドウは指定された場所からウィンドウの右下角まで 広がります。

`syncdown`( | )

  このウィンドウの上位のウィンドウのいずれかで更新(touch)された各場所を このウィンドウ内でも更新します。 このルーチンは `refresh()` から呼び出されるので、 手動で呼び出す必要はほとんどないはずです。

`syncok`( | flag)

  flag を真にして呼び出すと、ウィンドウが変更された際は常に `syncup()` を自動的に呼ぶようになります。

`syncup`( | )

  ウィンドウ内で更新 (touch) した場所を、上位の全てのウィンドウ内でも更新します。

`timeout`( | delay)

  ウィンドウのブロックまたは非ブロック読み込み動作を設定します。 delay が負の場合、ブロック読み出しが使われ、入力を無期限で 待ち受けます。delay がゼロの場合、非ブロック読み出しが 使われ、 入力待ちの文字がない場合 `getch()` は -1 を返し ます。delay が正の値であれば、 `getch()` は delay ミリ秒間ブロックし、ブロック後の時点で入力がない場合には -1 を返します。

`touchline`( | start, count)

  start から始まる count 行が変更されたかのように 振舞わせます。

`touchwin`( | )

  描画を最適化するために、全てのウィンドウが変更されたかのように 振舞わせます。

`untouchwin`( | )

  ウィンドウ内の全ての行を、最後に `refresh()` を呼んだ際から 変更されていないものとしてマークします。

`vline`( | [y, x,] ch, n)

  `(y, x)` から始まり、 n の長さを持つ、 文字 ch で作られる垂直線を表示します。