# `curses` --- 文字セル表示を扱うための端末操作

ソースコード: Lib/curses

`curses` モジュールは、可搬性のある高度な端末操作のデファクトスタンダードである、curses ライブラリへのインターフェースを提供します。

curses が最も広く用いられているのは Unix 環境ですが、Windows、DOS で利用できるバージョンもあり、おそらく他のシステムで利用できるバージョンもあります。この拡張モジュールは Linux および BSD 系の Unixで動作するオープンソースの curses ライブラリである ncurses の API に合致するように設計されています。

注釈

Whenever the documentation mentions a character it can be specified as an integer, a one-character Unicode string or a one-byte byte string.

Whenever the documentation mentions a character string it can be specified as a Unicode string or a byte string.

注釈

version 5.4 から、ncurses ライブラリは `nl_langinfo` 関数を利用して非 ASCII データをどう解釈するかを決定するようになりました。これは、アプリケーションは `locale.setlocale()` 関数を呼び出して、Unicode 文字列をシステムの利用可能なエンコーディングのどれかでエンコードする必要があることを意味します。この例では、システムのデフォルトエンコーディングを利用しています:

    import locale
    locale.setlocale(locale.LC_ALL, '')
    code = locale.getpreferredencoding()

この後、`str.encode()` を呼び出すときに code を利用します。

参考

`curses.ascii` モジュール

  ロケール設定に関わらず ASCII 文字を扱うためのユーティリティ。

`curses.panel` モジュール

  curses ウィンドウにデプス機能を追加するパネルスタック拡張。

`curses.textpad` モジュール

  Emacs ライクなキーバインディングをサポートする編集可能な curses 用テキストウィジェット。

Python で Curses プログラミング

  Andrew Kuchling および Eric Raymond によって書かれた、curses を Python で使うためのチュートリアルです。

Python ソースコードの Tools/demo/ ディレクトリには、このモジュールで提供されている curses バインディングを使ったプログラム例がいくつか収められています。

## 関数

`curses` モジュールでは以下の例外を定義しています:

exception `curses.``error`

  curses ライブラリ関数がエラーを返した際に送出される例外です。

注釈

関数やメソッドにおけるオプションの引数 x および y がある場合、デフォルト値は常に現在のカーソルになります。オプションの attr がある場合、デフォルト値は `A_NORMAL` です。

`curses` では以下の関数を定義しています:

`curses.``baudrate`()

  端末の出力速度をビット/秒で返します。ソフトウェア端末エミュレータの場合、これは固定の高い値を持つことになります。この関数は歴史的な理由で入れられています; かつては、この関数は時間遅延を生成するための出力ループを書くために用いられたり、行速度に応じてインターフェースを切り替えたりするために用いられたりしていました。

`curses.``beep`()

  注意を促す短い音を鳴らします。

`curses.``can_change_color`()

  端末に表示される色をプログラマが変更できるか否かによって、`True` または `False` を返します。

`curses.``cbreak`()

  cbreak モードに入ります。cbreak モード ("rare" モードと呼ばれることもあります) では、通常の tty 行バッファリングはオフにされ、文字を一文字一文字読むことができます。ただし、raw モードとは異なり、特殊文字 (割り込み:interrupt、終了:quit、一時停止:suspend、およびフロー制御) については、tty ドライバおよび呼び出し側のプログラムに対する通常の効果をもっています。まず `raw()` を呼び出し、次いで `cbreak()` を呼び出すと、端末を cbreak モードにします。

`curses.``color_content`(color_number)

  色 color_number の赤、緑、および青 (RGB) 要素の強度を返します。color_number は `0` から `COLORS - 1` の間でなければなりません。与えられた色の R、G、B、の値からなる三要素のタプルが返されます。この値は `0` (その成分はない) から `1000` (その成分の最大強度) の範囲をとります。

`curses.``color_pair`(pair_number)

  Return the attribute value for displaying text in the specified color pair. Only the first 256 color pairs are supported. This attribute value can be combined with `A_STANDOUT`, `A_REVERSE`, and the other `A_*` attributes. `pair_number()` is the counterpart to this function.

`curses.``curs_set`(visibility)

  カーソルの状態を設定します。visibility は `0` 、 `1``または ``2` に設定され、それぞれ不可視、通常、または非常に可視、を意味します。要求された可視属性を端末がサポートしている場合、以前のカーソル状態が返されます; そうでなければ例外が送出されます。多くの端末では、"可視 (通常)" モードは下線カーソルで、"非常に可視" モードはブロックカーソルです。

`curses.``def_prog_mode`()

  現在の端末属性を、稼動中のプログラムが curses を使う際のモードである "プログラム" モードとして保存します。(このモードの反対は、プログラムが curses を使わない "シェル" モードです。) その後 `reset_prog_mode()` を呼ぶとこのモードを復旧します。

`curses.``def_shell_mode`()

  現在の端末属性を、稼動中のプログラムが curses を使っていないときのモードである "シェル" モードとして保存します。(このモードの反対は、プログラムが curses 機能を利用している "プログラム" モードです。) その後 `reset_shell_mode()` を呼ぶとこのモードを復旧します。

`curses.``delay_output`(ms)

  出力に ms ミリ秒の一時停止を入れます。

`curses.``doupdate`()

  物理スクリーンを更新します。curses ライブラリは、現在の物理スクリーンの内容と、次の状態として要求されている仮想スクリーンをそれぞれ表す、2 つのデータ構造を保持しています。`doupdate()` は更新を適用し、物理スクリーンを仮想スクリーンに一致させます。

  仮想スクリーンは `addstr()` のような書き込み操作をウィンドウに行った後に `noutrefresh()` を呼び出して更新することができます。通常の:meth:~window.refresh 呼び出しは、単に `noutrefresh()` を呼んだ後に `doupdate`を呼ぶだけです; 複数のウィンドウを更新しなければならない場合、すべてのウィンドウに対して :meth:()`!noutrefresh` を呼び出した後、一度だけ `doupdate()` を呼ぶことで、パフォーマンスを向上させることができ、おそらくスクリーンのちらつきも押さえることができます。

`curses.``echo`()

  echo モードに入ります。echo モードでは、各文字入力はスクリーン上に入力された通りにエコーバックされます。

`curses.``endwin`()

  ライブラリの非初期化を行い、端末を通常の状態に戻します。

`curses.``erasechar`()

  ユーザの現在の消去文字 (erase character) を1バイトの bytes オブジェクトで返します。Unix オペレーティングシステムでは、この値は curses プログラムが制御している端末の属性であり、curses ライブラリ自体では設定されません。

`curses.``filter`()

  `filter()` ルーチンを使う場合、`initscr()` を呼ぶ前に呼び出さなくてはなりません。この手順のもたらす効果は以下の通りです: まず二つの関数の呼び出しの間は、`LINES` は `1` に設定されます; `clear`, `cup`, `cud`, `cud1`, `cuu1`, `cuu`, `vpa` は無効化されます; `home` 文字列は `cr` の値に設定されます。これにより、カーソルは現在の行に制限されるので、スクリーンの更新も同様に制限されます。この関数は、スクリーンの他の部分に影響を及ぼさずに文字単位の行編集を行う場合に利用できます。

`curses.``flash`()

  スクリーンを点滅します。すなわち、画面を色反転して、短時間でもとにもどします。人によっては、`beep()` で生成される注意音よりも、このような "目に見えるベル" を好みます。

`curses.``flushinp`()

  すべての入力バッファをフラッシュします。この関数は、ユーザによってすでに入力されているが、まだプログラムによって処理されていないすべての先行入力文字を破棄します。

`curses.``getmouse`()

  `getch()` が `KEY_MOUSE` を返してマウスイベントを通知した後、この関数を呼んで待ち行列上に置かれているマウスイベントを取得しなければなりません。イベントは `(id, x, y, z, bstate)` の 5 要素のタプルで表現されています。id は複数のデバイスを区別するための ID 値で、x, y, z はイベントの座標値です。(現在 z は使われていません) bstate は整数値で、その各ビットはイベントのタイプを示す値に設定されています。この値は以下に示す定数のうち一つまたはそれ以上のビット単位 OR になっています。以下の定数の n は 1 から 5 のボタン番号を示します: `BUTTONn_PRESSED`, `BUTTONn_RELEASED`, `BUTTONn_CLICKED`, `BUTTONn_DOUBLE_CLICKED`, `BUTTONn_TRIPLE_CLICKED`, `BUTTON_SHIFT`, `BUTTON_CTRL`, `BUTTON_ALT`。

  バージョン 3.10 で変更: The `BUTTON5_*` constants are now exposed if they are provided by the underlying curses library.

`curses.``getsyx`()

  仮想スクリーンにおける現在のカーソル位置をタプル `(y, x)` で返します。 `leaveok()` が `True` に設定されていれば、 `(-1, -1)` が返されます。

`curses.``getwin`(file)

  以前の `putwin()` 呼び出しでファイルに保存されている、ウィンドウ関連データを読み出します。次に、このルーチンはそのデータを使って新たなウィンドウを生成し初期化して、その新規ウィンドウオブジェクトを返します。

`curses.``has_colors`()

  端末が色表示を行える場合には `True` を返します。そうでない場合には `False` を返します。

`curses.``has_extended_color_support`()

  Return `True` if the module supports extended colors; otherwise, return `False`. Extended color support allows more than 256 color pairs for terminals that support more than 16 colors (e.g. xterm-256color).

  Extended color support requires ncurses version 6.1 or later.

  バージョン 3.10 で追加.

`curses.``has_ic`()

  端末が文字の挿入/削除機能を持つ場合に `True` を返します。最近の端末エミュレータはどれもこの機能を持っており、この関数は歴史的な理由のためだけに存在しています。

`curses.``has_il`()

  端末が行の挿入/削除機能を持つ場合に `True` を返します。最近の端末エミュレータはどれもこの機能を持っていて、この関数は歴史的な理由のためだけに存在しています。

`curses.``has_key`(ch)

  キー値 ch をとり、現在の端末タイプがその値のキーを認識できる場合に `True` を返します。

`curses.``halfdelay`(tenths)

  半遅延モード、すなわち cbreak モードに似た、ユーザが打鍵した文字がすぐにプログラムで利用できるようになるモードで使われます。しかしながら、何も入力されなかった場合、十分の tenths 秒後に例外が送出されます。tenths の値は `1` から `255` の間でなければなりません。半遅延モードから抜けるには `nocbreak()` を使います。

`curses.``init_color`(color_number, r, g, b)

  色の定義を変更します。変更したい色番号と、その後に 3 つ組みの RGB 値 (赤、緑、青の成分の大きさ) をとります。color_number の値は `0` から `COLORS - 1` の間でなければなりません。r, g, b の値は `0` から `1000` の間でなければなりません。`init_color()` を使うと、スクリーン上でカラーが使用されている部分はすべて新しい設定に即時変更されます。この関数はほとんどの端末で何も行いません; `can_change_color()` が `True` を返す場合にのみ動作します。

`curses.``init_pair`(pair_number, fg, bg)

  色ペアの定義を変更します。3 つの引数: 変更したい色ペア、前景色の色番号、背景色の色番号、をとります。pair_number は `1` から `COLOR_PAIRS - 1` の間でなければなりません (`0` 色ペアは黒色背景に白色前景となるように設定されており、変更することができません)。fg および bg 引数は `0` と `COLORS - 1` の間、または、`use_default_colors()` を呼び出した後では `-1` でなければなりません。色ペアが以前に初期化されていれば、スクリーンを更新して、指定された色ペアの部分を新たな設定に変更します。

`curses.``initscr`()

  ライブラリを初期化します。スクリーン全体をあらわす ウィンドウ オブジェクトを返します。

  注釈

  端末のオープン時にエラーが発生した場合、curses ライブラリによってインタープリタが終了される場合があります。

`curses.``is_term_resized`(nlines, ncols)

  `resize_term()` によってウィンドウ構造が変更されている場合に `True` を、そうでない場合は `False` を返します。

`curses.``isendwin`()

  `endwin()` がすでに呼び出されている (すなわち、curses ライブラリが非初期化されてしまっている) 場合に `True` を返します。

`curses.``keyname`(k)

  bytes オブジェクト k に番号付けされているキーの名前を返します。 印字可能な ASCII 文字を生成するキーの名前はそのキーの文字自体になります。 コントロールキーと組み合わせたキーの名前は、キャレット(`b'^'`)の後に対応する ASCII 文字が続く 2 バイトの bytes オブジェクトになります。 Alt キーと組み合わせたキー (128--255) の名前は、先頭に `b'M-'` が付き、その後に対応する ASCII 文字が続く bytes オブジェクトになります。

`curses.``killchar`()

  Return the user's current line kill character as a one-byte bytes object. Under Unix operating systems this is a property of the controlling tty of the curses program, and is not set by the curses library itself.

`curses.``longname`()

  現在の端末について記述している terminfo の長形式 name フィールドが入った bytes オブジェクトを返します。verbose 形式記述の最大長は 128 文字です。この値は `initscr()` 呼び出しの後でのみ定義されています。

`curses.``meta`(flag)

  flag が `True` の場合、8 ビット文字の入力を許可します。flag が `False` の場合、7 ビット文字だけを許可します。

`curses.``mouseinterval`(interval)

  ボタンが押されてから離されるまでの時間をマウスクリック一回として認識する最大の時間間隔をミリ秒で設定します。返り値は以前の内部設定値になります。デフォルトは 200 ミリ秒 (5 分の 1 秒) です。

`curses.``mousemask`(mousemask)

  報告すべきマウスイベントを設定し、`(availmask, oldmask)` の組からなるタプルを返します。availmask はどの指定されたマウスイベントのどれが報告されるかを示します; どのイベント指定も完全に失敗した場合には `0` が返ります。oldmask は与えられたウィンドウの以前のマウスイベントマスクです。この関数が呼ばれない限り、マウスイベントは何も報告されません。

`curses.``napms`(ms)

  ms ミリ秒間スリープします。

`curses.``newpad`(nlines, ncols)

  与えられた行とカラム数を持つパッド (pad) データ構造を生成し、そのポインタを返します。パッドはウィンドウオブジェクトとして返されます。

  パッドはウィンドウと同じようなものですが、スクリーンのサイズによる制限をうけず、スクリーンの特定の部分に関連付けられていなくてもかまいません。大きなウィンドウが必要であり、スクリーンにはそのウィンドウの一部しか一度に表示しない場合に使えます。(スクロールや入力エコーなどによる) パッドに対する再描画は起こりません。パッドに対する `refresh()` および `noutrefresh()` メソッドは、パッド中の表示する部分と表示するために利用するスクリーン上の位置を指定する 6 つの引数が必要です。これらの引数は pminrow、pmincol、sminrow、smincol、smaxrow、smaxcol です; p で始まる引数はパッド中の表示領域の左上位置で、s で始まる引数はパッド領域を表示するスクリーン上のクリップ矩形を指定します。

`curses.``newwin`(nlines, ncols)
`curses.``newwin`(nlines, ncols, begin_y, begin_x)

  左上の角が `(begin_y, begin_x)` で、高さ/幅が nlines / ncols の新規 ウィンドウ を返します。

  デフォルトでは、ウィンドウは指定された位置からスクリーンの右下まで広がります。

`curses.``nl`()

  newlime モードに入ります。このモードはリターンキーを入力中の改行として変換し、出力時に改行文字を復帰 (return) と改行 (line-feed) に変換します。newline モードは初期化時にはオンになっています。

`curses.``nocbreak`()

  cbreak モードを終了します。行バッファリングを行う通常の "cooked" モードに戻ります。

`curses.``noecho`()

  echo モードを終了します。入力のエコーバックはオフにされます。

`curses.``nonl`()

  newline モードを終了します。入力時のリターンキーから改行への変換、および出力時の改行から復帰/改行への低レベル変換を無効化します (ただし、`addch('\n')` の振る舞いは変更せず、仮想スクリーン上では常に復帰と改行に等しくなります)。変換をオフにすることで、curses は水平方向の動きを少しだけ高速化できることがあります; また、入力中のリターンキーの検出ができるようになります。

`curses.``noqiflush`()

  `noqiflush()` ルーチンを使うと、通常行われている `INTR` 、 `QUIT` および `SUSP` 文字による入力および出力キューのフラッシュが行われなくなります。シグナルハンドラが終了した際、割り込みが発生しなかったかのように出力を続たい場合、ハンドラ中で `noqiflush()` を呼び出すことができます。

`curses.``noraw`()

  raw モードから離れます。行バッファリングを行う通常の "cooked" モードに戻ります。

`curses.``pair_content`(pair_number)

  要求された色ペアの色を含むタプル `(fg, bg)` を返します。pair_number は `0` から `COLOR_PAIRS - 1` の間でなければなりません。

`curses.``pair_number`(attr)

  attr に対する色ペアセットの番号を返します。`color_pair()` はこの関数の逆に相当します。

`curses.``putp`(str)

  `tputs(str, 1, putchar)` と等価です; 現在の端末における、指定された terminfo 機能の値を出力します。`putp()` の出力は常に標準出力に送られるので注意して下さい。

`curses.``qiflush`([flag])

  flag が `False` なら、`noqiflush()` を呼ぶのとと同じ効果です。flag が `True` か、引数が与えられていない場合、制御文字が読み出された最にキューはフラッシュされます。

`curses.``raw`()

  raw モードに入ります。raw モードでは、通常の行バッファリングと割り込み (interrupt)、終了 (quit)、一時停止 (suspend)、およびフロー制御キーはオフになります; 文字は curses 入力関数に一文字づつ渡されます。

`curses.``reset_prog_mode`()

  端末を "program" モードに復旧し、あらかじめ `def_prog_mode()` で保存した内容に戻します。

`curses.``reset_shell_mode`()

  端末を "shell" モードに復旧し、あらかじめ `def_shell_mode()` で保存した内容に戻します。

`curses.``resetty`()

  端末モードの状態を最後に `savetty()` を呼び出した時の状態に戻します。

`curses.``resize_term`(nlines, ncols)

  `resizeterm()` で使用されるバックエンド関数で、ウィンドウサイズを変更する時、`resize_term()` は拡張された領域を埋めます。呼び出したアプリケーションはそれらの領域を適切なデータで埋めなくてはなりません。`resize_term()` 関数はすべてのウィンドウのサイズ変更を試みます。ただし、パッド呼び出しの慣例により、アプリケーションとの追加のやり取りを行わないサイズ変更は行えません。

`curses.``resizeterm`(nlines, ncols)

  現在の標準ウィンドウのサイズを指定された寸法に変更し、curses ライブラリが使用する、その他のウィンドウサイズを記憶しているデータ (特に SIGWINCH ハンドラ) を調整します。

`curses.``savetty`()

  `resetty()` で使用される、バッファ内の端末モードの現在の状態を保存します。

`curses.``get_escdelay`()

  Retrieves the value set by `set_escdelay()`.

  バージョン 3.9 で追加.

`curses.``set_escdelay`(ms)

  Sets the number of milliseconds to wait after reading an escape character, to distinguish between an individual escape character entered on the keyboard from escape sequences sent by cursor and function keys.

  バージョン 3.9 で追加.

`curses.``get_tabsize`()

  Retrieves the value set by `set_tabsize()`.

  バージョン 3.9 で追加.

`curses.``set_tabsize`(size)

  Sets the number of columns used by the curses library when converting a tab character to spaces as it adds the tab to a window.

  バージョン 3.9 で追加.

`curses.``setsyx`(y, x)

  仮想スクリーンのカーソルを y, x に設定します。y および x がどちらも `-1` の場合、 `leaveok()` が に``True``に設定されます。

`curses.``setupterm`(term=None, fd=- 1)

  端末を初期化します。term は端末名となる文字列または `None` です。省略または `None` の場合、環境変数 `TERM` の値が使用されます。fd は送信される初期化シーケンスへのファイル記述子です。指定されないまたは `-1` の場合、`sys.stdout` のファイル記述子が使用されます。

`curses.``start_color`()

  プログラマがカラーを利用したい場合で、かつ他の何らかのカラー操作ルーチンを呼び出す前に呼び出さなくてはなりません。この関数は `initscr()` を呼んだ直後に呼ぶようにしておくとよいでしょう。

  `start_color()` は 8 つの基本色 (黒、赤、緑、黄、青、マゼンタ、シアン、および白) と、色数の最大値と端末がサポートする色ペアの最大数が入っている、`curses` モジュールにおける二つのグローバル変数、`COLORS` および `COLOR_PAIRS` を初期化します。この関数はまた、色設定を端末のスイッチが入れられたときの状態に戻します。

`curses.``termattrs`()

  端末がサポートするすべてのビデオ属性を論理和した値を返します。この情報は、curses プログラムがスクリーンの見え方を完全に制御する必要がある場合に便利です。

`curses.``termname`()

  14 文字以下になるように切り詰められた環境変数 `TERM` の値を bytes オブジェクトで返します。

`curses.``tigetflag`(capname)

  terminfo 機能名 capname に対応する真偽値の機能値を整数で返します。capname が真偽値で表せる機能値でない場合 `-1` を返し、機能がキャンセルされているか、端末記述上に見つからない場合 `0` を返します。

`curses.``tigetnum`(capname)

  terminfo 機能名 capname に対応する数値の機能値を整数で返します。capname が数値で表せる機能値でない場合 `-2` を返し、機能がキャンセルされているか、端末記述上に見つからない場合 `-1` を返します。

`curses.``tigetstr`(capname)

  Return the value of the string capability corresponding to the terminfo capability name capname as a bytes object. Return `None` if capname is not a terminfo "string capability", or is canceled or absent from the terminal description.

`curses.``tparm`(str[, ...])

  str を与えられたパラメタを使って bytes オブジェクトにインスタンス化します。str は terminfo データベースから得られたパラメタを持つ文字列でなければなりません。例えば、`tparm(tigetstr("cup"), 5, 3)` は `b'\033[6;4H'` のようになります。厳密には端末の形式によって異なる結果となります。

`curses.``typeahead`(fd)

  先読みチェックに使うためのファイル記述子 fd を指定します。fd が `-1` の場合、先読みチェックは行われません。

  curses ライブラリはスクリーンを更新する間、先読み文字列を定期的に検索することで "行はみ出し最適化 (line-breakout optimization)" を行います。入力が得られ、かつ入力は端末からのものである場合、現在行おうとしている更新は refresh や doupdate を再度呼び出すまで先送りにします。この関数は異なるファイル記述子で先読みチェックを行うように指定することができます。

`curses.``unctrl`(ch)

  Return a bytes object which is a printable representation of the character ch. Control characters are represented as a caret followed by the character, for example as `b'^C'`. Printing characters are left as they are.

`curses.``ungetch`(ch)

  ch をプッシュし、次に `getch()` を呼び出した時にその値が返るようにします。

  注釈

  `getch()` を呼び出すまでは ch は一つしかプッシュできません。

`curses.``update_lines_cols`()

  `LINES` と `COLS` についての更新。マニュアルでスクリーンのサイズを変更したことを検知するために有用です。

  バージョン 3.5 で追加.

`curses.``unget_wch`(ch)

  ch をプッシュし、次に `get_wch()` を呼び出した時にその値が返るようにします。

  注釈

  `get_wch()` を呼び出すまでは ch は一つしかプッシュできません。

  バージョン 3.3 で追加.

`curses.``ungetmouse`(id, x, y, z, bstate)

  与えられた状態データが関連付けられた `KEY_MOUSE` イベントを入力キューにプッシュします。

`curses.``use_env`(flag)

  この関数を使う場合、`initscr()` または newterm を呼ぶ前に呼び出さなくてはなりません。flag が `False` の場合、環境変数 `LINES` および `COLUMNS` の値 (デフォルトで使用されます) の値が設定されていたり、curses がウィンドウ内で動作して (この場合 `LINES` や `COLUMNS` が設定されていないとウィンドウのサイズを使います) いても、terminfo データベースに指定された lines および columns の値を使います。

`curses.``use_default_colors`()

  この機能をサポートしている端末上で、色の値としてデフォルト値を使う設定をします。あなたのアプリケーションで透過性とサポートするためにこの関数を使ってください。デフォルトの色は色番号 `-1` に割り当てられます。この関数を呼んだ後、たとえば `init_pair(x, curses.COLOR_RED, -1)` は色ペア x を赤い前景色とデフォルトの背景色に初期化します。

`curses.``wrapper`(func, /, *args, **kwargs)

  curses を初期化し、呼び出し可能なオブジェクト func (その他の curses を使用するアプリケーション) を呼び出します。アプリケーションが例外を送出した場合、この関数は端末を例外を再送出する前に正常な状態に戻し、トレースバックを作成します。その後、呼び出し可能オブジェクト func には、第一引数としてメインウィンドウ 'stdscr' が、続いて `wrapper()` に渡されたその他の引数が渡されます。func を呼び出す前、`wrapper()` は cbreak モードをオンに、エコーをオフに、端末キーパッドを有効にし、端末が色表示をサポートしている場合は色を初期化します。終了時 (通常終了、例外による終了のどちらでも)、cooked モードに戻し、エコーをオンにし、端末キーパッドを無効にします。

## Window オブジェクト

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

`window.``addch`(ch[, attr])
`window.``addch`(y, x, ch[, attr])

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

  注釈

  Writing outside the window, subwindow, or pad raises a `curses.error`. Attempting to write to the lower right corner of a window, subwindow, or pad will cause an exception to be raised after the character is printed.

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

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

`window.``addstr`(str[, attr])
`window.``addstr`(y, x, str[, attr])

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

  注釈

  - Writing outside the window, subwindow, or pad raises `curses.error`. Attempting to write to the lower right corner of a window, subwindow, or pad will cause an exception to be raised after the string is printed.

  - A bug in ncurses, the backend for this Python module, can cause SegFaults when resizing windows. This is fixed in ncurses-6.1-20190511. If you are stuck with an earlier ncurses, you can avoid triggering this if you do not call `addstr()` with a str that has embedded newlines. Instead, call `addstr()` separately for each line.

`window.``attroff`(attr)

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

`window.``attron`(attr)

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

`window.``attrset`(attr)

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

`window.``bkgd`(ch[, attr])

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

  - ウィンドウ中のすべての文字の属性が新たな背景属性に変更されます。

  - 以前の背景文字が出現すると、常に新たな背景文字に変更されます。

`window.``bkgdset`(ch[, attr])

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

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

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

  注釈

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

  引数 | 説明 | デフォルト値
  --- | --- | ---
  ls | 左側 | `ACS_VLINE`
  rs | 右側 | `ACS_VLINE`
  ts | 上側 | `ACS_HLINE`
  bs | 下側 | `ACS_HLINE`
  tl | 左上の角 | `ACS_ULCORNER`
  tr | 右上の角 | `ACS_URCORNER`
  bl | 左下の角 | `ACS_LLCORNER`
  br | 右下の角 | `ACS_LRCORNER`

`window.``box`([vertch, horch])

  `border()` と同様ですが、ls および rs は共に vertch で、ts および bs は共に horch です。この関数では、角に使われるデフォルト文字が常に使用されます。

`window.``chgat`(attr)
`window.``chgat`(num, attr)
`window.``chgat`(y, x, attr)
`window.``chgat`(y, x, num, attr)

  Set the attributes of num characters at the current cursor position, or at position `(y, x)` if supplied. If num is not given or is `-1`, the attribute will be set on all the characters to the end of the line. This function moves cursor to position `(y, x)` if supplied. The changed line will be touched using the `touchline()` method so that the contents will be redisplayed by the next window refresh.

`window.``clear`()

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

`window.``clearok`(flag)

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

`window.``clrtobot`()

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

`window.``clrtoeol`()

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

`window.``cursyncup`()

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

`window.``delch`([y, x])

  `(y, x)` にある文字を削除します。

`window.``deleteln`()

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

`window.``derwin`(begin_y, begin_x)
`window.``derwin`(nlines, ncols, begin_y, begin_x)

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

`window.``echochar`(ch[, attr])

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

`window.``enclose`(y, x)

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

  バージョン 3.10 で変更: Previously it returned `1` or `0` instead of `True` or `False`.

`window.``encoding`

  encode メソッドの引数 (Unicode 文字列および文字) で使用されるエンコーディングです。例えば `window.subwin()` などでサブウィンドウを生成した時、エンコーディング属性は親ウィンドウから継承します。デフォルトでは、そのロケールのエンコーディングが使用されます (`locale.getpreferredencoding()` 参照)。

  バージョン 3.3 で追加.

`window.``erase`()

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

`window.``getbegyx`()

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

`window.``getbkgd`()

  与えられたウィンドウの現在の背景文字と属性のペアを返します。

`window.``getch`([y, x])

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

`window.``get_wch`([y, x])

  ワイド文字を 1 個取得します。ほとんどのキー、ファンクションキーの数値、キーパッドのキー、およびその他の特殊キーの文字を返します。無遅延モードでは、入力がない場合例外を送出します。

  バージョン 3.3 で追加.

`window.``getkey`([y, x])

  文字を 1 個取得し、 `getch()` が返すような整数ではなく文字列を返します。ファンクションキー、キーパッドのキー、およびその他特殊キーはキー名を含む複数文字を返します。無遅延モードでは、入力がない場合例外を送出します。

`window.``getmaxyx`()

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

`window.``getparyx`()

  親ウィンドウ中におけるウィンドウの開始位置をタプル `(y, x)` で返します。ウィンドウに親ウィンドウがない場合 `(-1, -1)` を返します。

`window.``getstr`()
`window.``getstr`(n)
`window.``getstr`(y, x)
`window.``getstr`(y, x, n)

  原始的な文字編集機能つきで、ユーザの入力した byte オブヘクトを読み取ります。

`window.``getyx`()

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

`window.``hline`(ch, n)
`window.``hline`(y, x, ch, n)

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

`window.``idcok`(flag)

  flag が `False` の場合、curses は端末のハードウェアによる文字挿入/削除機能を使おうとしなくなります; flag が `True` ならば、文字挿入/削除は有効にされます。curses が最初に初期化された際には文字挿入/削除はデフォルトで有効になっています。

`window.``idlok`(flag)

  flag が `True` であれば、`curses` はハードウェアの行編集機能の利用を試みます。行挿入/削除は無効化されます。

`window.``immedok`(flag)

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

`window.``inch`([y, x])

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

`window.``insch`(ch[, attr])
`window.``insch`(y, x, ch[, attr])

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

`window.``insdelln`(nlines)

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

`window.``insertln`()

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

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

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

`window.``insstr`(str[, attr])
`window.``insstr`(y, x, str[, attr])

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

`window.``instr`([n])
`window.``instr`(y, x[, n])

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

`window.``is_linetouched`(line)

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

`window.``is_wintouched`()

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

`window.``keypad`(flag)

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

`window.``leaveok`(flag)

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

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

`window.``move`(new_y, new_x)

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

`window.``mvderwin`(y, x)

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

`window.``mvwin`(new_y, new_x)

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

`window.``nodelay`(flag)

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

`window.``notimeout`(flag)

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

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

`window.``noutrefresh`()

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

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

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

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

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

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

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

`window.``putwin`(file)

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

`window.``redrawln`(beg, num)

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

`window.``redrawwin`()

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

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

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

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

`window.``resize`(nlines, ncols)

  curses ウィンドウの記憶域を、指定値のサイズに調整するため再割当てします。サイズが現在の値より大きい場合、ウィンドウのデータは現在の背景設定 (`bkgdset()` で設定) で埋められマージされます。

`window.``scroll`([lines=1])

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

`window.``scrollok`(flag)

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

`window.``setscrreg`(top, bottom)

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

`window.``standend`()

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

`window.``standout`()

  A_STANDOUT 属性をオンにします。

`window.``subpad`(begin_y, begin_x)
`window.``subpad`(nlines, ncols, begin_y, begin_x)

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

`window.``subwin`(begin_y, begin_x)
`window.``subwin`(nlines, ncols, begin_y, begin_x)

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

  デフォルトでは、サブウィンドウは指定された場所からウィンドウの右下角まで広がります。

`window.``syncdown`()

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

`window.``syncok`(flag)

  flag が `True` の場合、ウィンドウが変更された際は常に `syncup()` を自動的に呼ぶようになります。

`window.``syncup`()

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

`window.``timeout`(delay)

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

`window.``touchline`(start, count[, changed])

  start から始まる count 行が変更されたかのように振舞わせます。もし changed が与えられた場合、その引数は指定された行が変更された(changed`=True`)か、変更されていないか(changed)を指定します。

`window.``touchwin`()

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

`window.``untouchwin`()

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

`window.``vline`(ch, n[, attr])
`window.``vline`(y, x, ch, n[, attr])

  Display a vertical line starting at `(y, x)` with length n consisting of the character ch with attributes attr.

## 定数

`curses` モジュールでは以下のデータメンバを定義しています:

`curses.``ERR`

  `getch()` のような整数を返す curses ルーチンのいくつかは、失敗した際に `ERR` を返します。

`curses.``OK`

  `napms()` のような整数を返す curses ルーチンのいくつかは、成功した際に `OK` を返します。

`curses.``version`

  モジュールの現在のバージョンを表現する bytes オブジェクトです。`__version__` でも取得できます。

`curses.``ncurses_version`

  A named tuple containing the three components of the ncurses library version: major, minor, and patch. All values are integers. The components can also be accessed by name, so `curses.ncurses_version[0]` is equivalent to `curses.ncurses_version.major` and so on.

  Availability: if the ncurses library is used.

  バージョン 3.8 で追加.

Some constants are available to specify character cell attributes. The exact constants available are system dependent.

属性 | 意味
--- | ---
`A_ALTCHARSET` | 代替文字セットモード
`A_BLINK` | 点滅モード
`A_BOLD` | 太字モード
`A_DIM` | 低輝度モード
`A_INVIS` | Invisible or blank mode
`A_ITALIC` | イタリックモード
`A_NORMAL` | 通常の属性
`A_PROTECT` | Protected mode
`A_REVERSE` | Reverse background and foreground colors
`A_STANDOUT` | 強調モード
`A_UNDERLINE` | 下線モード
`A_HORIZONTAL` | Horizontal highlight
`A_LEFT` | Left highlight
`A_LOW` | Low highlight
`A_RIGHT` | Right highlight
`A_TOP` | Top highlight
`A_VERTICAL` | Vertical highlight
`A_CHARTEXT` | Bit-mask to extract a character

バージョン 3.7 で追加: `A_ITALIC` が追加されました。

Several constants are available to extract corresponding attributes returned by some methods.

Bit-mask | 意味
--- | ---
`A_ATTRIBUTES` | Bit-mask to extract attributes
`A_CHARTEXT` | Bit-mask to extract a character
`A_COLOR` | Bit-mask to extract color-pair field information

キーは `KEY_` で始まる名前をもつ整数定数です。利用可能なキーキャップはシステムに依存します。

キー定数 | キー
--- | ---
`KEY_MIN` | 最小のキー値
`KEY_BREAK` | ブレークキー (Break, 信頼できません)
`KEY_DOWN` | 下矢印
`KEY_UP` | 上矢印
`KEY_LEFT` | 左矢印
`KEY_RIGHT` | 右矢印
`KEY_HOME` | ホームキー (Home, または上左矢印)
`KEY_BACKSPACE` | バックスペース (Backspace, 信頼できません)
`KEY_F0` | ファンクションキー。64 個までサポートされています。
`KEY_Fn` | ファンクションキー n の値
`KEY_DL` | 行削除 (Delete line)
`KEY_IL` | 行挿入 (Insert line)
`KEY_DC` | 文字削除 (Delete char)
`KEY_IC` | 文字挿入、または文字挿入モードへ入る
`KEY_EIC` | 文字挿入モードから抜ける
`KEY_CLEAR` | 画面消去
`KEY_EOS` | 画面の末端まで消去
`KEY_EOL` | 行末端まで消去
`KEY_SF` | 前に 1 行スクロール
`KEY_SR` | 後ろ (逆方向) に 1 行スクロール
`KEY_NPAGE` | 次のページ (Page Next)
`KEY_PPAGE` | 前のページ (Page Prev)
`KEY_STAB` | タブ設定
`KEY_CTAB` | タブリセット
`KEY_CATAB` | すべてのタブをリセット
`KEY_ENTER` | 入力または送信 (信頼できません)
`KEY_SRESET` | ソフトウェア (部分的) リセット (信頼できません)
`KEY_RESET` | リセットまたはハードリセット (信頼できません)
`KEY_PRINT` | 印刷 (Print)
`KEY_LL` | 下ホーム (Home down) または最下行 (左下)
`KEY_A1` | キーパッドの左上キー
`KEY_A3` | キーパッドの右上キー
`KEY_B2` | キーパッドの中央キー
`KEY_C1` | キーパッドの左下キー
`KEY_C3` | キーパッドの右下キー
`KEY_BTAB` | Back tab
`KEY_BEG` | 開始 (Beg)
`KEY_CANCEL` | キャンセル (Cancel)
`KEY_CLOSE` | Close [閉じる]
`KEY_COMMAND` | コマンド (Cmd)
`KEY_COPY` | Copy [コピー]
`KEY_CREATE` | 生成 (Create)
`KEY_END` | 終了 (End)
`KEY_EXIT` | Exit [終了]
`KEY_FIND` | 検索 (Find)
`KEY_HELP` | ヘルプ (Help)
`KEY_MARK` | マーク (Mark)
`KEY_MESSAGE` | メッセージ (Message)
`KEY_MOVE` | 移動 (Move)
`KEY_NEXT` | 次へ (Next)
`KEY_OPEN` | 開く (Open)
`KEY_OPTIONS` | オプション
`KEY_PREVIOUS` | 前へ (Prev)
`KEY_REDO` | Redo [やり直し]
`KEY_REFERENCE` | 参照 (Ref)
`KEY_REFRESH` | 更新 (Refresh)
`KEY_REPLACE` | 置換 (Replace)
`KEY_RESTART` | 再起動 (Restart)
`KEY_RESUME` | 再開 (Resume)
`KEY_SAVE` | Save [保存]
`KEY_SBEG` | シフト付き Beg
`KEY_SCANCEL` | シフト付き Cancel
`KEY_SCOMMAND` | シフト付き Command
`KEY_SCOPY` | シフト付き Copy
`KEY_SCREATE` | シフト付き Create
`KEY_SDC` | シフト付き Delete char
`KEY_SDL` | シフト付き Delete line
`KEY_SELECT` | 選択 (Select)
`KEY_SEND` | シフト付き End
`KEY_SEOL` | シフト付き Clear line
`KEY_SEXIT` | シフト付き Exit
`KEY_SFIND` | シフト付き Find
`KEY_SHELP` | シフト付き Help
`KEY_SHOME` | シフト付き Home
`KEY_SIC` | シフト付き Input
`KEY_SLEFT` | シフト付き Left arrow
`KEY_SMESSAGE` | シフト付き Message
`KEY_SMOVE` | シフト付き Move
`KEY_SNEXT` | シフト付き Next
`KEY_SOPTIONS` | シフト付き Options
`KEY_SPREVIOUS` | シフト付き Prev
`KEY_SPRINT` | シフト付き Print
`KEY_SREDO` | シフト付き Redo
`KEY_SREPLACE` | シフト付き Replace
`KEY_SRIGHT` | シフト付き Right arrow
`KEY_SRSUME` | シフト付き Resume
`KEY_SSAVE` | シフト付き Save
`KEY_SSUSPEND` | シフト付き Suspend
`KEY_SUNDO` | シフト付き Undo
`KEY_SUSPEND` | 一時停止 (Suspend)
`KEY_UNDO` | Undo [元に戻す]
`KEY_MOUSE` | マウスイベント通知
`KEY_RESIZE` | 端末リサイズイベント
`KEY_MAX` | 最大キー値

VT100 や、X 端末エミュレータのようなソフトウェアエミュレーションでは、通常少なくとも 4 つのファンクションキー (`KEY_F1`, `KEY_F2`, `KEY_F3`, `KEY_F4`) が利用可能で、矢印キーは `KEY_UP`, `KEY_DOWN`, `KEY_LEFT` および `KEY_RIGHT` が対応付けられています。計算機に PC キーボードが付属している場合、矢印キーと 12 個のファンクションキー (古い PC キーボードには 10 個しかファンクションキーがないかもしれません) が利用できると考えてよいでしょう; また、以下のキーパッド対応付けは標準的なものです:

キーキャップ | 定数
--- | ---
`Insert` | KEY_IC
`Delete` | KEY_DC
`Home` | KEY_HOME
`End` | KEY_END
``Page` `Up`` | KEY_PPAGE
``Page` `Down`` | KEY_NPAGE

代替文字セットを以下の表に列挙します。これらは VT100 端末から継承したものであり、X 端末のようなソフトウェアエミュレーション上で一般に利用可能なものです。グラフィックが利用できない場合、curses は印字可能 ASCII文字による粗雑な近似出力を行います。

注釈

これらは `initscr()` が呼び出された後でしか利用できません。

ACS コード | 意味
--- | ---
`ACS_BBSS` | 右上角の別名
`ACS_BLOCK` | 黒四角ブロック
`ACS_BOARD` | 白四角ブロック
`ACS_BSBS` | 水平線の別名
`ACS_BSSB` | 左上角の別名
`ACS_BSSS` | 上向き T 字罫線の別名
`ACS_BTEE` | 下向き T 字罫線
`ACS_BULLET` | 黒丸(bullet)
`ACS_CKBOARD` | チェッカーボードパタン (点描)
`ACS_DARROW` | 下向き矢印
`ACS_DEGREE` | 度記号
`ACS_DIAMOND` | ダイアモンド
`ACS_GEQUAL` | 大なりイコール
`ACS_HLINE` | 水平線
`ACS_LANTERN` | ランタン(lantern) シンボル
`ACS_LARROW` | 左向き矢印
`ACS_LEQUAL` | 小なりイコール
`ACS_LLCORNER` | 左下角
`ACS_LRCORNER` | 右下角
`ACS_LTEE` | 左向き T 字罫線
`ACS_NEQUAL` | 不等号
`ACS_PI` | パイ記号
`ACS_PLMINUS` | プラスマイナス記号
`ACS_PLUS` | 大プラス記号
`ACS_RARROW` | 右向き矢印
`ACS_RTEE` | 右向き T 字罫線
`ACS_S1` | スキャンライン 1
`ACS_S3` | スキャンライン 3
`ACS_S7` | スキャンライン 7
`ACS_S9` | スキャンライン 9
`ACS_SBBS` | 右下角の別名
`ACS_SBSB` | 垂直線の別名
`ACS_SBSS` | 右向き T 字罫線の別名
`ACS_SSBB` | 左下角の別名
`ACS_SSBS` | 下向き T 字罫線の別名
`ACS_SSSB` | 左向き T 字罫線の別名
`ACS_SSSS` | 交差罫線または大プラス記号の別名
`ACS_STERLING` | ポンドスターリング記号
`ACS_TTEE` | 上向き T 字罫線
`ACS_UARROW` | 上向き矢印
`ACS_ULCORNER` | 左上角
`ACS_URCORNER` | 右上角
`ACS_VLINE` | 垂直線

以下のテーブルは定義済みの色を列挙したものです:

定数 | 色
--- | ---
`COLOR_BLACK` | 黒
`COLOR_BLUE` | 青
`COLOR_CYAN` | シアン (薄く緑がかった青)
`COLOR_GREEN` | 緑
`COLOR_MAGENTA` | マゼンタ (紫がかった赤)
`COLOR_RED` | 赤
`COLOR_WHITE` | 白
`COLOR_YELLOW` | 黄色

# `curses.textpad` --- curses プログラムのためのテキスト入力ウィジェット

`curses.textpad` モジュールでは、curses ウィンドウ内での基本的なテキスト編集を処理し、Emacs に似た (すなわち Netscape Navigator, BBedit 6.x, FrameMaker, その他諸々のプログラムとも似た) キーバインドをサポートしている `Textbox` クラスを提供します。このモジュールではまた、テキストボックスを枠で囲むなどの目的のために有用な、矩形描画関数を提供しています。

`curses.textpad` モジュールでは以下の関数を定義しています:

`curses.textpad.``rectangle`(win, uly, ulx, lry, lrx)

  矩形を描画します。最初の引数はウィンドウオブジェクトでなければなりません; 残りの引数はそのウィンドウからの相対座標になります。2 番目および 3 番目の引数は描画すべき矩形の左上角の y および x 座標です; 4 番目および 5 番目の引数は右下角の y および x 座標です。矩形は、VT100/IBM PC におけるフォーム文字を利用できる端末 (xterm やその他のほとんどのソフトウェア端末エミュレータを含む) ではそれを使って描画されます。そうでなければ ASCII 文字のダッシュ、垂直バー、およびプラス記号で描画されます。

## Textbox オブジェクト

以下のような `Textbox` オブジェクトをインスタンス生成することができます:

class `curses.textpad.``Textbox`(win)

  テキストボックスウィジェットオブジェクトを返します。win 引数は、テキストボックスを入れるための ウィンドウ オブジェクトでなければなりません。テキストボックスの編集カーソルは、最初はテキストボックスが入っているウィンドウの左上角に配置され、その座標は `(0, 0)` です。インスタンスの `stripspaces` フラグの初期値はオンに設定されます。

  `Textbox` オブジェクトは以下のメソッドを持ちます:

  `edit`([validator])

    普段使うことになるエントリポイントです。終了キーストロークの一つが入力されるまで編集キーストロークを受け付けます。validator を与える場合、関数でなければなりません。validator はキーストロークが入力されるたびにそのキーストロークが引数となって呼び出されます; 返された値に対して、コマンドキーストロークとして解釈が行われます。このメソッドはウィンドウの内容を文字列として返します; ウィンドウ内の空白が含められるかどうかは `stripspaces` 属性で決められます。

  `do_command`(ch)

    単一のコマンドキーストロークを処理します。以下にサポートされている特殊キーストロークを示します:

    キーストローク | 動作
    --- | ---
    ``Control`-`A`` | ウィンドウの左端に移動します。
    ``Control`-`B`` | カーソルを左へ移動し、必要なら前の行に折り返します。
    ``Control`-`D`` | カーソル下の文字を削除します。
    ``Control`-`E`` | 右端 (stripspaces がオフのとき) または行末 (stripspaces がオンのとき) に移動します。
    ``Control`-`F`` | カーソルを右に移動し、必要なら次の行に折り返します。
    ``Control`-`G`` | ウィンドウを終了し、その内容を返します。
    ``Control`-`H`` | 逆方向に文字を削除します。
    ``Control`-`J`` | ウィンドウが 1 行であれば終了し、そうでなければ新しい行を挿入します。
    ``Control`-`K`` | 行が空白行ならその行全体を削除し、そうでなければカーソル以降行末までを消去します。
    ``Control`-`L`` | スクリーンを更新します。
    ``Control`-`N`` | カーソルを下に移動します; 1 行下に移動します。
    ``Control`-`O`` | カーソルの場所に空行を 1 行挿入します。
    ``Control`-`P`` | カーソルを上に移動します; 1 行上に移動します。

    移動操作は、カーソルがウィンドウの縁にあって移動ができない場合には何も行いません。場合によっては、以下のような同義のキーストロークがサポートされています:

    定数 | キーストローク
    --- | ---
    `KEY_LEFT` | ``Control`-`B``
    `KEY_RIGHT` | ``Control`-`F``
    `KEY_UP` | ``Control`-`P``
    `KEY_DOWN` | ``Control`-`N``
    `KEY_BACKSPACE` | ``Control`-`h``

    他のキーストロークは、与えられた文字を挿入し、(行折り返し付きで) 右に移動するコマンドとして扱われます。

  `gather`()

    ウィンドウの内容を文字列として返します; ウィンドウ内の空白が含められるかどうかは `stripspaces` メンバ変数で決められます。

  `stripspaces`

    この属性はウィンドウ内の空白領域の解釈方法を制御するためのフラグです。フラグがオンに設定されている場合、各行の末端にある空白領域は無視されます; すなわち、末端空白領域にカーソルが入ると、その場所の代わりに行の末尾にカーソルが移動します。また、末端の空白領域はウィンドウの内容を取得する際に剥ぎ取られます。