"curses" --- 文字セル表示のターミナル処理
*****************************************

**ソースコード:** Lib/curses

======================================================================

"curses" モジュールは、移植可能な高度な端末処理の事実上の標準である
curses ライブラリへのインターフェースを提供します。

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

利用可能な環境: not Android, not iOS, not WASI.

このモジュールは モバイルプラットフォーム と WebAssemblyプラットフォー
ム をサポートしません。

これは *optional module* です。 お使いの CPython に含まれていない場合
は、配布元 (Python を提供した組織など) のドキュメントを確認してくださ
い。 配布元の方は オプションのモジュールの要件 を参照してください。

利用可能な環境: Unix.

注釈:

  このドキュメントで *文字* と記されている箇所では、整数、1 文字の
  Unicode 文字列、または 1 バイトのバイト文字列を指定できます。 整数は
  エンコードされた 1 バイトのコードであり、"window.inch()" の返り値の
  ように、属性や色ペアを組み合わせたものでも構いません。このドキュメン
  トで *文字列* と記されている箇所では、Unicode 文字列またはバイト文字
  列を指定できます。

注釈:

  複数のスレッドから curses を使用できるかどうかは、基盤となるライブラ
  リとそのビルド方法に依存します。 ncurses のデフォルトビルドを含む多
  くの実装では、スクリーンの状態が共有され、スレッドセーフではありませ
  ん。 ブロックや更新を行うメソッド ("getch()" や "refresh()" など) は
  *GIL* を解放するため、複数のスレッドから同期せずに使用するとインター
  プリタがクラッシュする可能性があります。 呼び出しを直列化してくださ
  い。

参考:

  "curses.ascii" モジュール
     ロケール設定に関わらず ASCII 文字を扱うためのユーティリティ。

  "curses.panel" モジュール
     curses ウィンドウにデプス機能を追加するパネルスタック拡張。

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

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


関数
====

"curses" モジュールは以下の例外を定義します:

exception curses.error

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

注釈:

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

"curses" モジュールは以下の関数を定義します:

curses.assume_default_colors(fg, bg, /)

   この機能をサポートする端末で、色のデフォルト値を使用できるようにし
   ます。 アプリケーションで透過表示をサポートするには、この関数を使用
   してください。

   * 端末のデフォルトの前景色と背景色を色番号 "-1" に割り当てます。 し
     たがって、"init_pair(x, COLOR_RED, -1)" はペア *x* をデフォルトの
     背景色に赤の前景色として初期化し、"init_pair(x, -1, COLOR_BLUE)"
     はペア *x* を青の背景色にデフォルトの前景色として初期化します。

   * 色ペア "0" の定義を "(fg, bg)" に変更します。

   これは ncurses の拡張機能です。

   Added in version 3.14.

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 の値を含む 3 要素のタプルを返します。 各値
   は "0" (成分なし) から "1000" (成分の最大量) の範囲です。 その色が
   サポートされていない場合は例外を送出します。

curses.color_pair(pair_number)

   指定した色ペアでテキストを表示するための属性値を返します。 最初の
   256 個の色ペアだけがサポートされています。 この属性値は
   "A_STANDOUT"、"A_REVERSE"、その他の "A_*" 属性と組み合わせることが
   できます。 "pair_number()" はこの関数と逆の処理を行います。

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()" を呼び出して更新することができます。通常の
   "refresh()" 呼び出しは、単に "noutrefresh()"  を呼んだ後に
   "doupdate()" を呼ぶだけです; 複数のウィンドウを更新しなければならな
   い場合、すべてのウィンドウに対して "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" の値に設定されます。 その結果、カーソルもス
   クリーンの更新も現在の行に限定されます。 これを利用すると、スクリー
   ンの他の部分に触れずに、1 文字ずつ行を編集できるようになります。

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 で変更: 基盤となる curses ライブラリが "BUTTON5_*"
   定数を提供する場合に、それらが公開されるようになりました。

curses.getsyx()

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

curses.getwin(file)

   以前の "window.putwin()" 呼び出しでファイルに保存したウィンドウ関連
   のデータを読み込みます。 続いて、そのデータを使用して新しいウィンド
   ウを作成して初期化し、新しいウィンドウオブジェクトを返します。
   *file* 引数は、バイナリモードで読み込み用に開いたファイルオブジェク
   トでなければなりません。

curses.has_colors()

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

curses.has_extended_color_support()

   モジュールが拡張カラーをサポートしている場合は "True" を、そうでな
   い場合は "False" を返します。 拡張カラーのサポートにより、16 色を超
   える色をサポートする端末 (例えば xterm-256color) で 256 個を超える
   色ペアを使用できます。

   拡張カラーのサポートには ncurses バージョン 6.1 以降が必要です。

   Added in version 3.10.

curses.has_ic()

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

curses.has_il()

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

curses.has_key(ch)

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

curses.halfdelay(tenths)

   半遅延モードに使用します。 このモードは、ユーザが入力した文字をプロ
   グラムがすぐに利用できる点では cbreak モードと同様です。 ただし、
   *tenths* × 0.1 秒間ブロックした後、何も入力されていなければ、
   "getch()" は "-1" を返し、"getkey()" と "get_wch()" は
   "curses.error" を送出します。 *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" は
   "use_default_colors()" と "assume_default_colors()" でのみ変更でき
   ます)。 引数 *fg* と *bg* の値は "0" から "COLORS - 1" の範囲か、
   "use_default_colors()" または "assume_default_colors()" を呼び出し
   た後であれば "-1" でなければなりません。 色ペアが以前に初期化されて
   いた場合、スクリーンが更新され、その色ペアを使用しているすべての箇
   所が新しい定義に変わります。

curses.initscr()

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

   この関数より先に "setupterm()" を呼び出す際の注意事項は、その関数の
   説明を参照してください。

   注釈:

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

curses.intrflush(flag)

   *flag* が "True" の場合、割り込みキー (interrupt、break、quit) を押
   すと端末ドライバのキュー内の出力がすべてフラッシュされます。 *flag*
   が "False" の場合、フラッシュは行われません。

curses.is_term_resized(nlines, ncols)

   "resize_term()" を呼び出した場合にウィンドウ構造が変更されるなら
   "True" を、そうでなければ "False" を返します。

curses.isendwin()

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

curses.keyname(k)

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

   *k* が負の場合は "ValueError" を送出します。

curses.killchar()

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

curses.longname()

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

curses.meta(flag)

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

curses.mouseinterval(interval)

   ボタンを押してから離すまでのイベントをクリックと認識する最大時間を
   ミリ秒で設定し、以前の時間間隔を返します。 デフォルト値は 166 ミリ
   秒、すなわち 6 分の 1 秒です。 時間間隔を変更せずに取得するには、負
   の *interval* を使用してください。

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(flag=True)

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

   *flag* が "False" の場合、"nonl()" の呼び出しと同じ効果があります。

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 機能の値である bytes オブジェクトを出力します。 "putp()"
   の出力先は常に標準出力であることに注意してください。

   先に "setupterm()" (または "initscr()") を呼び出す必要があります。

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()

   "set_escdelay()" で設定した値を取得します。

   Added in version 3.9.

curses.set_escdelay(ms)

   キーボードで入力した単独のエスケープ文字と、カーソルキーやファンク
   ションキーが送信するエスケープシーケンスを区別するため、エスケープ
   文字を読み込んだ後に待機する時間をミリ秒で設定します。

   Added in version 3.9.

curses.get_tabsize()

   "set_tabsize()" で設定した値を取得します。

   Added in version 3.9.

curses.set_tabsize(size)

   curses ライブラリがウィンドウにタブ文字を追加する際、タブ文字を空白
   に変換するために使用する桁数を設定します。

   Added in version 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" のファイル記述子が使用されます。

   端末が見つからないか、その terminfo データベースのエントリーを読み
   込めない場合、"curses.error" を送出します。 端末がすでに初期化され
   ている場合、この関数は何もしません。

   注釈:

     "setupterm()" の後に "initscr()" を呼び出すと、"setupterm()" が確
     保した端末がリークします。 curses ライブラリは現在の端末を 1 つだ
     け保持し、それまでに確保した端末を解放しないためです。

curses.start_color()

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

   "start_color()" は 8 つの基本色 (黒、赤、緑、黄、青、マゼンタ、シア
   ン、白) と、"curses" モジュールの 2 つのグローバル変数 "COLORS" お
   よび "COLOR_PAIRS" を初期化します。 これらの変数には、端末がサポー
   トできる色と色ペアの最大数が格納されます。 また、端末の色を端末の電
   源投入直後の値に戻します。

curses.termattrs()

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

curses.termname()

   使用中の端末名を bytes オブジェクトとして返します。 これは
   "setupterm()" に渡された名前であり、名前が渡されなかった場合は環境
   変数 "TERM" の値です。 curses ライブラリによっては、14 文字に切り詰
   められます。

curses.tigetflag(capname)

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

   先に "setupterm()" (または "initscr()") を呼び出す必要があります。

curses.tigetnum(capname)

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

   先に "setupterm()" (または "initscr()") を呼び出す必要があります。

curses.tigetstr(capname)

   terminfo の機能名 *capname* に対応する文字列機能の値を bytes オブジ
   ェクトとして返します。 *capname* が terminfo の「文字列機能」でない
   場合や、端末の記述で取り消されているか存在しない場合は、"None" を返
   します。

   先に "setupterm()" (または "initscr()") を呼び出す必要があります。

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

   bytes オブジェクト *str* に指定したパラメータを適用します。 *str*
   は terminfo データベースから取得した、パラメータを含むバイト文字列
   でなければなりません。 例えば、"tparm(tigetstr("cup"), 5, 3)" は
   "b'\033[6;4H'" を返すことがありますが、正確な結果は端末の種類によっ
   て異なります。 整数のパラメータを最大 9 個指定できます。

   先に "setupterm()" (または "initscr()") を呼び出す必要があります。

curses.typeahead(fd)

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

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

curses.unctrl(ch)

   文字 *ch* の印字可能な表現を bytes オブジェクトとして返します。 属
   性と色ペアは無視されます。 制御文字は、"b'^C'" のようにキャレットの
   後に文字を続けた形で表されます。 印字可能な文字はそのままです。

curses.ungetch(ch)

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

   *ch* には、整数 (キーコードまたはエンコードされたバイトのコード)、1
   バイト、またはエンコードすると 1 バイトになる長さ 1 の文字列を指定
   できます。

   注釈:

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

curses.update_lines_cols()

   モジュール変数 "LINES" と "COLS" を更新します。 手動によるスクリー
   ンのサイズ変更を検出する際に役立ちます。

   Added in version 3.5.

curses.unget_wch(ch)

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

   *ch* には、整数 (キーコードではなく文字コード) または長さ 1 の文字
   列を指定できます。

   注釈:

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

   Added in version 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()

   "assume_default_colors(-1, -1)" と等価です。

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

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


ウィンドウオブジェクト
======================

class curses.window

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

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

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

   注釈:

     ウィンドウ、サブウィンドウ、パッドの外側に書き込むと
     "curses.error" が送出されます。 ウィンドウ、サブウィンドウ、パッ
     ドの右下隅に書き込もうとすると、文字を表示した後に例外が送出され
     ます。

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* で描画します。以前ディスプレ
   イにあった内容はすべて上書きされます。

   注釈:

     * ウィンドウ、サブウィンドウ、パッドの外側に書き込むと
       "curses.error" が送出されます。 ウィンドウ、サブウィンドウ、パ
       ッドの右下隅に書き込もうとすると、文字列を表示した後に例外が送
       出されます。

     * この Python モジュールのバックエンドである ncurses のバグにより
       、ウィンドウのサイズ変更時にセグメンテーション違反が発生するこ
       とがありました。 このバグは ncurses-6.1-20190511 で修正されまし
       た。 それ以前の ncurses を使用せざるを得ない場合は、改行を含む
       *str* で "addstr()" を呼び出さず、代わりに各行に対して個別に
       "addstr()" を呼び出すことで回避できます。

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)

   現在のカーソル位置、または指定した位置 "(y, x)" にある *num* 文字の
   属性を設定します。 *num* を指定しないか "-1" にした場合は、行末まで
   のすべての文字に属性が設定されます。 "(y, x)" を指定した場合、この
   関数はカーソルをその位置に移動します。 変更した行は "touchline()"
   メソッドで変更済みと記録され、次回のウィンドウ更新時に内容が再表示
   されます。

window.clear()

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

window.clearok(flag)

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

window.clrtobot()

   カーソル位置からウィンドウの末尾までを消去します。 まずカーソルのあ
   る行より下のすべての行を消去し、次に "clrtoeol()" と同等の処理を行
   います。

window.clrtoeol()

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

window.cursyncup()

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

window.delch([y, x])

   カーソルの下、または指定した "(y, x)" の位置の文字を削除します。 同
   じ行の右側にある文字はすべて 1 文字分左に移動します。

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])

   属性 *attr* を持つ文字 *ch* を追加し、すぐにウィンドウの
   "refresh()" を呼び出します。

window.enclose(y, x)

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

   バージョン 3.10 で変更: 以前は "True" または "False" ではなく、"1"
   または "0" を返していました。

window.encoding

   メソッドの文字列の引数をエンコードする際、およびワイド文字をサポー
   トしないビルドで結果をデコードする際に使用するエンコーディングです
   。 例えば "window.subwin()" でサブウィンドウを作成すると、encoding
   属性は親ウィンドウから継承されます。 デフォルトでは現在のロケールの
   エンコーディングが使用されます ("locale.getencoding()" を参照)。

   Added in version 3.3.

window.erase()

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

window.getbegyx()

   左上隅の座標をタプル "(y, x)" として返します。

window.getbkgd()

   指定したウィンドウの現在の背景の文字と属性のペアを返します。 各成分
   は "inch()" の返り値と同様に取り出せます。

window.getch([y, x])

   *y*、*x* が指定されていればカーソルをそこに移動してからキー入力を読
   み取り、整数として返します。 ウィンドウがパッドではなく、前回の更新
   以降に変更されていれば、まず更新します。 キーが押されるまで待機しま
   すが、読み取りが非ブロッキングの場合やタイムアウトした場合は "-1"
   を返します ("nodelay()" と "timeout()" を参照)。

   通常のキーは、現在のロケールのエンコーディングで表した 1 バイトのコ
   ードとして返されるため、複数バイトでエンコードされる文字を読み取る
   には複数回の呼び出しが必要です。 例えば UTF-8 ロケールでは、"'é'"
   は "195"、続いて "169" として読み取られます。 1 文字として読み取る
   には "get_wch()" を使用してください。

   キーパッドモード ("keypad()" を参照) では、ファンクションキーやその
   他の特殊キーは、通常のキーと区別できる KEY_* 定数 のいずれかとして
   返されます。 それ以外の場合、またはエスケープシーケンスが時間内に到
   着しなかった場合 ("notimeout()" と "set_escdelay()" を参照)、バイト
   が 1 つずつ返されます。

   echo モード ("echo()" を参照) では、"addch()" と同様にキーがウィン
   ドウに追加されます。 特殊キーはエコーバックされません。

window.get_wch([y, x])

   *y*、*x* が指定されていればカーソルをそこに移動してからキー入力を読
   み取り、1 文字の "str" として返します。 ウィンドウがパッドではなく
   、前回の更新以降に変更されていれば、まず更新します。 キーが押される
   まで待機しますが、読み取りが非ブロッキングの場合やタイムアウトした
   場合は "error" を送出します ("nodelay()" と "timeout()" を参照)。

   キーパッドモード ("keypad()" を参照) では、ファンクションキーやその
   他の特殊キーは、整数である KEY_* 定数 のいずれかとして返されます。
   それ以外の場合、またはエスケープシーケンスが時間内に到着しなかった
   場合 ("notimeout()" と "set_escdelay()" を参照)、文字が 1 つずつ返
   されます。

   echo モード ("echo()" を参照) では、"addch()" と同様にキーがウィン
   ドウに追加されます。 特殊キーはエコーバックされません。

   Added in version 3.3.

window.getkey([y, x])

   "getch()" と同様にキー入力を読み取りますが、"str" として返します。
   通常のキーはバイトを Latin-1 でデコードした 1 文字の文字列として、
   特殊キーは "'KEY_UP'" のような名前として返します ("keyname()" を参
   照)。 入力がない場合、"-1" を返す代わりに "error" を送出します。

window.getmaxyx()

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

window.getparyx()

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

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

   *y*、*x* が指定されていればカーソルをそこに移動してから、基本的な行
   編集機能を使ってユーザの入力を 1 行読み取ります。 末尾の改行を除き
   、現在のロケールのエンコーディングの bytes オブジェクトとして返しま
   す。 最大 *n* バイトを読み取ります。 *n* のデフォルト値は 2047 で、
   この値を超えることはできません。

   バージョン 3.14 で変更: *n* の最大値が 1023 から 2047 に増えました
   。

window.getyx()

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

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

   "(y, x)" を始点として、属性 *attr* の文字 *ch* からなる長さ *n* の
   水平線を表示します。 使用できるセルが *n* 個に満たない場合、線はウ
   ィンドウの右端で止まります。

window.idcok(flag)

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

window.idlok(flag)

   *flag* が "True" の場合、"curses" はハードウェアの行編集機能を使用
   しようとします。 それ以外の場合、curses はその機能を使用しません。

window.immedok(flag)

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

window.inch([y, x])

   ウィンドウ内の指定した位置の文字を返します。 下位 8 ビットが文字自
   体で、上位ビットが属性です。 "A_CHARTEXT" と "A_ATTRIBUTES" のビッ
   トマスクでそれぞれを取り出し、"pair_number()" で色ペアを取り出せま
   す。 文字のバイトは、"instr()" と同様に、セルの文字をロケールのエン
   コーディングで表したバイトです。 ワイド文字をサポートするビルドでは
   、現在のロケールで 1 バイトに収まらない文字の文字バイトは "0" にな
   ります。 そのような文字を読み取るには "instr()" を使用してください
   。

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

   カーソルの下、または指定した "(y, x)" の位置の文字の前に、属性
   *attr* の文字 *ch* を挿入します。 カーソルの右側の文字はすべて 1 文
   字分右に移動し、行の右端の文字は失われます。 カーソル位置は変わりま
   せん (*y*、*x* が指定されていれば、その位置に移動した後での位置です
   )。

window.insdelln(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* バイトを読み取ります。 *n* のデフォルト値は 2047 で、この値を超
   えることはできません。

   バージョン 3.14 で変更: *n* の最大値が 1023 から 2047 に増えました
   。

window.is_linetouched(line)

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

window.is_wintouched()

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

window.keypad(flag)

   *flag* が "True" の場合、一部のキー (キーパッド、ファンクションキー
   ) が生成するエスケープシーケンスを "curses" が解釈します。 *flag*
   が "False" の場合、エスケープシーケンスは入力ストリーム内にそのまま
   残されます。 キーパッドモードはデフォルトでは無効ですが、
   "wrapper()" はメインウィンドウに対して有効にします。

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)" になるように移動します。

   ウィンドウの一部でもスクリーンの外に出る位置への移動はエラーです。
   ウィンドウは移動せず、"curses.error" が送出されます。

window.nodelay(flag)

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

window.notimeout(flag)

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

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

window.noutrefresh()
window.noutrefresh(pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)

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

   6 つの引数を指定できるのは、ウィンドウが "newpad()" で作成されたパ
   ッドである場合だけで、その場合はすべて必須です。 意味は "refresh()"
   のものと同じです。

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* が正の場
   合は *lines* 行上に、負の場合は下にスクロールします。 "scrollok()"
   でウィンドウのスクロールを有効にしていなければ、"curses.error" を送
   出します。

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*
   のサブパッドを返します。 座標は親パッドからの相対座標です (スクリー
   ン座標を使う "subwin()" とは異なります)。 このメソッドは "newpad()"
   で作成したパッドでのみ利用できます。

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*"=False") とするかを指定します。

window.touchwin()

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

window.untouchwin()

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

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

   "(y, x)" を始点として、属性 *attr* の文字 *ch* からなる長さ *n* の
   垂直線を表示します。


定数
====

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

curses.ERR

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

curses.OK

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

curses.version

   モジュールの現在のバージョンを表す bytes オブジェクトです。

curses.ncurses_version

   ncurses ライブラリのバージョンの 3 つの成分 *major*、*minor*、
   *patch* を含む名前付きタプルです。 値はすべて整数です。 各成分には
   名前でもアクセスできるため、例えば "curses.ncurses_version[0]" は
   "curses.ncurses_version.major" と等価です。

   利用可能な環境: ncurses ライブラリが使用されている場合。

   Added in version 3.8.

curses.COLORS

   端末がサポートできる色の最大数です。 "start_color()" の呼び出し後に
   のみ定義されます。

curses.COLOR_PAIRS

   端末がサポートできる色ペアの最大数です。 "start_color()" の呼び出し
   後にのみ定義されます。

curses.COLS

   スクリーンの幅、すなわち列数です。 "initscr()" の呼び出し後にのみ定
   義されます。 "update_lines_cols()"、"resizeterm()"、"resize_term()"
   により更新されます。

curses.LINES

   スクリーンの高さ、すなわち行数です。 "initscr()" の呼び出し後にのみ
   定義されます。 "update_lines_cols()"、"resizeterm()"、
   "resize_term()" により更新されます。

文字セルの属性を指定するための定数が用意されています。 実際に利用でき
る定数はシステムによって異なります。

+--------------------------+---------------------------------+
| 属性                     | 意味                            |
|==========================|=================================|
| curses.A_ALTCHARSET      | 代替文字セットモード            |
+--------------------------+---------------------------------+
| curses.A_BLINK           | 点滅モード                      |
+--------------------------+---------------------------------+
| curses.A_BOLD            | 太字モード                      |
+--------------------------+---------------------------------+
| curses.A_DIM             | 低輝度モード                    |
+--------------------------+---------------------------------+
| curses.A_INVIS           | 非表示または空白モード          |
+--------------------------+---------------------------------+
| curses.A_ITALIC          | イタリックモード                |
+--------------------------+---------------------------------+
| curses.A_NORMAL          | 通常の属性                      |
+--------------------------+---------------------------------+
| curses.A_PROTECT         | 保護モード                      |
+--------------------------+---------------------------------+
| curses.A_REVERSE         | 背景色と前景色を反転            |
+--------------------------+---------------------------------+
| curses.A_STANDOUT        | 強調モード                      |
+--------------------------+---------------------------------+
| curses.A_UNDERLINE       | 下線モード                      |
+--------------------------+---------------------------------+
| curses.A_HORIZONTAL      | 水平強調                        |
+--------------------------+---------------------------------+
| curses.A_LEFT            | 左強調                          |
+--------------------------+---------------------------------+
| curses.A_LOW             | 下強調                          |
+--------------------------+---------------------------------+
| curses.A_RIGHT           | 右強調                          |
+--------------------------+---------------------------------+
| curses.A_TOP             | 上強調                          |
+--------------------------+---------------------------------+
| curses.A_VERTICAL        | 垂直強調                        |
+--------------------------+---------------------------------+

Added in version 3.7: "A_ITALIC" が追加されました。

一部のメソッドが返す値から対応する属性を取り出すための定数が用意されて
います。

+---------------------------+---------------------------------+
| ビットマスク              | 意味                            |
|===========================|=================================|
| curses.A_ATTRIBUTES       | 属性を取り出すビットマスク      |
+---------------------------+---------------------------------+
| curses.A_CHARTEXT         | 文字を取り出すビットマスク      |
+---------------------------+---------------------------------+
| curses.A_COLOR            | 色ペアフィールドの情報を取り出  |
|                           | すビットマスク                  |
+---------------------------+---------------------------------+

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

+---------------------------+----------------------------------------------+
| キー定数                  | キー                                         |
|===========================|==============================================|
| curses.KEY_MIN            | 最小のキー値                                 |
+---------------------------+----------------------------------------------+
| curses.KEY_BREAK          | ブレークキー (Break, 信頼できません)         |
+---------------------------+----------------------------------------------+
| curses.KEY_DOWN           | 下矢印                                       |
+---------------------------+----------------------------------------------+
| curses.KEY_UP             | 上矢印                                       |
+---------------------------+----------------------------------------------+
| curses.KEY_LEFT           | 左矢印                                       |
+---------------------------+----------------------------------------------+
| curses.KEY_RIGHT          | 右矢印                                       |
+---------------------------+----------------------------------------------+
| curses.KEY_HOME           | ホームキー (Home, または上左矢印)            |
+---------------------------+----------------------------------------------+
| curses.KEY_BACKSPACE      | バックスペース (Backspace, 信頼できません)   |
+---------------------------+----------------------------------------------+
| curses.KEY_F0             | ファンクションキー。64 個までサポートされて  |
|                           | います。                                     |
+---------------------------+----------------------------------------------+
| curses.KEY_Fn             | ファンクションキー *n* の値                  |
+---------------------------+----------------------------------------------+
| curses.KEY_DL             | 行削除 (Delete line)                         |
+---------------------------+----------------------------------------------+
| curses.KEY_IL             | 行挿入 (Insert line)                         |
+---------------------------+----------------------------------------------+
| curses.KEY_DC             | 文字削除 (Delete char)                       |
+---------------------------+----------------------------------------------+
| curses.KEY_IC             | 文字挿入、または文字挿入モードへ入る         |
+---------------------------+----------------------------------------------+
| curses.KEY_EIC            | 文字挿入モードから抜ける                     |
+---------------------------+----------------------------------------------+
| curses.KEY_CLEAR          | 画面消去                                     |
+---------------------------+----------------------------------------------+
| curses.KEY_EOS            | 画面の末端まで消去                           |
+---------------------------+----------------------------------------------+
| curses.KEY_EOL            | 行末端まで消去                               |
+---------------------------+----------------------------------------------+
| curses.KEY_SF             | 前に 1 行スクロール                          |
+---------------------------+----------------------------------------------+
| curses.KEY_SR             | 後ろ (逆方向) に 1 行スクロール              |
+---------------------------+----------------------------------------------+
| curses.KEY_NPAGE          | 次のページ (Page Next)                       |
+---------------------------+----------------------------------------------+
| curses.KEY_PPAGE          | 前のページ (Page Prev)                       |
+---------------------------+----------------------------------------------+
| curses.KEY_STAB           | タブ設定                                     |
+---------------------------+----------------------------------------------+
| curses.KEY_CTAB           | タブリセット                                 |
+---------------------------+----------------------------------------------+
| curses.KEY_CATAB          | すべてのタブをリセット                       |
+---------------------------+----------------------------------------------+
| curses.KEY_ENTER          | 入力または送信 (信頼できません)              |
+---------------------------+----------------------------------------------+
| curses.KEY_SRESET         | ソフトウェア (部分的) リセット (信頼できませ |
|                           | ん)                                          |
+---------------------------+----------------------------------------------+
| curses.KEY_RESET          | リセットまたはハードリセット (信頼できません |
|                           | )                                            |
+---------------------------+----------------------------------------------+
| curses.KEY_PRINT          | 印刷 (Print)                                 |
+---------------------------+----------------------------------------------+
| curses.KEY_LL             | 下ホーム (Home down) または最下行 (左下)     |
+---------------------------+----------------------------------------------+
| curses.KEY_A1             | キーパッドの左上キー                         |
+---------------------------+----------------------------------------------+
| curses.KEY_A3             | キーパッドの右上キー                         |
+---------------------------+----------------------------------------------+
| curses.KEY_B2             | キーパッドの中央キー                         |
+---------------------------+----------------------------------------------+
| curses.KEY_C1             | キーパッドの左下キー                         |
+---------------------------+----------------------------------------------+
| curses.KEY_C3             | キーパッドの右下キー                         |
+---------------------------+----------------------------------------------+
| curses.KEY_BTAB           | Back tab                                     |
+---------------------------+----------------------------------------------+
| curses.KEY_BEG            | 開始 (Beg)                                   |
+---------------------------+----------------------------------------------+
| curses.KEY_CANCEL         | キャンセル (Cancel)                          |
+---------------------------+----------------------------------------------+
| curses.KEY_CLOSE          | Close [閉じる]                               |
+---------------------------+----------------------------------------------+
| curses.KEY_COMMAND        | コマンド (Cmd)                               |
+---------------------------+----------------------------------------------+
| curses.KEY_COPY           | Copy [コピー]                                |
+---------------------------+----------------------------------------------+
| curses.KEY_CREATE         | 生成 (Create)                                |
+---------------------------+----------------------------------------------+
| curses.KEY_END            | 終了 (End)                                   |
+---------------------------+----------------------------------------------+
| curses.KEY_EXIT           | Exit [終了]                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_FIND           | 検索 (Find)                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_HELP           | ヘルプ (Help)                                |
+---------------------------+----------------------------------------------+
| curses.KEY_MARK           | マーク (Mark)                                |
+---------------------------+----------------------------------------------+
| curses.KEY_MESSAGE        | メッセージ (Message)                         |
+---------------------------+----------------------------------------------+
| curses.KEY_MOVE           | 移動 (Move)                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_NEXT           | 次へ (Next)                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_OPEN           | 開く (Open)                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_OPTIONS        | オプション                                   |
+---------------------------+----------------------------------------------+
| curses.KEY_PREVIOUS       | 前へ (Prev)                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_REDO           | Redo [やり直し]                              |
+---------------------------+----------------------------------------------+
| curses.KEY_REFERENCE      | 参照 (Ref)                                   |
+---------------------------+----------------------------------------------+
| curses.KEY_REFRESH        | 更新 (Refresh)                               |
+---------------------------+----------------------------------------------+
| curses.KEY_REPLACE        | 置換 (Replace)                               |
+---------------------------+----------------------------------------------+
| curses.KEY_RESTART        | 再起動 (Restart)                             |
+---------------------------+----------------------------------------------+
| curses.KEY_RESUME         | 再開 (Resume)                                |
+---------------------------+----------------------------------------------+
| curses.KEY_SAVE           | Save [保存]                                  |
+---------------------------+----------------------------------------------+
| curses.KEY_SBEG           | シフト付き Beg                               |
+---------------------------+----------------------------------------------+
| curses.KEY_SCANCEL        | シフト付き Cancel                            |
+---------------------------+----------------------------------------------+
| curses.KEY_SCOMMAND       | シフト付き Command                           |
+---------------------------+----------------------------------------------+
| curses.KEY_SCOPY          | シフト付き Copy                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SCREATE        | シフト付き Create                            |
+---------------------------+----------------------------------------------+
| curses.KEY_SDC            | シフト付き Delete char                       |
+---------------------------+----------------------------------------------+
| curses.KEY_SDL            | シフト付き Delete line                       |
+---------------------------+----------------------------------------------+
| curses.KEY_SELECT         | 選択 (Select)                                |
+---------------------------+----------------------------------------------+
| curses.KEY_SEND           | シフト付き End                               |
+---------------------------+----------------------------------------------+
| curses.KEY_SEOL           | シフト付き Clear line                        |
+---------------------------+----------------------------------------------+
| curses.KEY_SEXIT          | シフト付き Exit                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SFIND          | シフト付き Find                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SHELP          | シフト付き Help                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SHOME          | シフト付き Home                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SIC            | シフト付き Input                             |
+---------------------------+----------------------------------------------+
| curses.KEY_SLEFT          | シフト付き Left arrow                        |
+---------------------------+----------------------------------------------+
| curses.KEY_SMESSAGE       | シフト付き Message                           |
+---------------------------+----------------------------------------------+
| curses.KEY_SMOVE          | シフト付き Move                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SNEXT          | シフト付き Next                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SOPTIONS       | シフト付き Options                           |
+---------------------------+----------------------------------------------+
| curses.KEY_SPREVIOUS      | シフト付き Prev                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SPRINT         | シフト付き Print                             |
+---------------------------+----------------------------------------------+
| curses.KEY_SREDO          | シフト付き Redo                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SREPLACE       | シフト付き Replace                           |
+---------------------------+----------------------------------------------+
| curses.KEY_SRIGHT         | シフト付き Right arrow                       |
+---------------------------+----------------------------------------------+
| curses.KEY_SRSUME         | シフト付き Resume                            |
+---------------------------+----------------------------------------------+
| curses.KEY_SSAVE          | シフト付き Save                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SSUSPEND       | シフト付き Suspend                           |
+---------------------------+----------------------------------------------+
| curses.KEY_SUNDO          | シフト付き Undo                              |
+---------------------------+----------------------------------------------+
| curses.KEY_SUSPEND        | 一時停止 (Suspend)                           |
+---------------------------+----------------------------------------------+
| curses.KEY_UNDO           | Undo [元に戻す]                              |
+---------------------------+----------------------------------------------+
| curses.KEY_MOUSE          | マウスイベント通知                           |
+---------------------------+----------------------------------------------+
| curses.KEY_RESIZE         | 端末リサイズイベント                         |
+---------------------------+----------------------------------------------+
| curses.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 コード               | 意味                                       |
|==========================|============================================|
| curses.ACS_BBSS          | 右上隅の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_BLOCK         | 黒四角ブロック                             |
+--------------------------+--------------------------------------------+
| curses.ACS_BOARD         | 白四角ブロック                             |
+--------------------------+--------------------------------------------+
| curses.ACS_BSBS          | 水平線の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_BSSB          | 左上隅の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_BSSS          | 上向き T 字罫線の別名                      |
+--------------------------+--------------------------------------------+
| curses.ACS_BTEE          | 下向き T 字罫線                            |
+--------------------------+--------------------------------------------+
| curses.ACS_BULLET        | 黒丸(bullet)                               |
+--------------------------+--------------------------------------------+
| curses.ACS_CKBOARD       | チェッカーボードパタン (点描)              |
+--------------------------+--------------------------------------------+
| curses.ACS_DARROW        | 下向き矢印                                 |
+--------------------------+--------------------------------------------+
| curses.ACS_DEGREE        | 度記号                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_DIAMOND       | ダイアモンド                               |
+--------------------------+--------------------------------------------+
| curses.ACS_GEQUAL        | 大なりイコール                             |
+--------------------------+--------------------------------------------+
| curses.ACS_HLINE         | 水平線                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_LANTERN       | ランタン(lantern) シンボル                 |
+--------------------------+--------------------------------------------+
| curses.ACS_LARROW        | 左向き矢印                                 |
+--------------------------+--------------------------------------------+
| curses.ACS_LEQUAL        | 小なりイコール                             |
+--------------------------+--------------------------------------------+
| curses.ACS_LLCORNER      | 左下隅                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_LRCORNER      | 右下隅                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_LTEE          | 左向き T 字罫線                            |
+--------------------------+--------------------------------------------+
| curses.ACS_NEQUAL        | 不等号                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_PI            | パイ記号                                   |
+--------------------------+--------------------------------------------+
| curses.ACS_PLMINUS       | プラスマイナス記号                         |
+--------------------------+--------------------------------------------+
| curses.ACS_PLUS          | 大プラス記号                               |
+--------------------------+--------------------------------------------+
| curses.ACS_RARROW        | 右向き矢印                                 |
+--------------------------+--------------------------------------------+
| curses.ACS_RTEE          | 右向き T 字罫線                            |
+--------------------------+--------------------------------------------+
| curses.ACS_S1            | スキャンライン 1                           |
+--------------------------+--------------------------------------------+
| curses.ACS_S3            | スキャンライン 3                           |
+--------------------------+--------------------------------------------+
| curses.ACS_S7            | スキャンライン 7                           |
+--------------------------+--------------------------------------------+
| curses.ACS_S9            | スキャンライン 9                           |
+--------------------------+--------------------------------------------+
| curses.ACS_SBBS          | 右下隅の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_SBSB          | 垂直線の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_SBSS          | 右向き T 字罫線の別名                      |
+--------------------------+--------------------------------------------+
| curses.ACS_SSBB          | 左下隅の別名                               |
+--------------------------+--------------------------------------------+
| curses.ACS_SSBS          | 下向き T 字罫線の別名                      |
+--------------------------+--------------------------------------------+
| curses.ACS_SSSB          | 左向き T 字罫線の別名                      |
+--------------------------+--------------------------------------------+
| curses.ACS_SSSS          | 交差罫線または大プラス記号の別名           |
+--------------------------+--------------------------------------------+
| curses.ACS_STERLING      | ポンドスターリング記号                     |
+--------------------------+--------------------------------------------+
| curses.ACS_TTEE          | 上向き T 字罫線                            |
+--------------------------+--------------------------------------------+
| curses.ACS_UARROW        | 上向き矢印                                 |
+--------------------------+--------------------------------------------+
| curses.ACS_ULCORNER      | 左上隅                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_URCORNER      | 右上隅                                     |
+--------------------------+--------------------------------------------+
| curses.ACS_VLINE         | 垂直線                                     |
+--------------------------+--------------------------------------------+

"getmouse()" で使用するマウスボタン定数を以下の表に示します:

+------------------------------------+-----------------------------------------------+
| マウスボタン定数                   | 意味                                          |
|====================================|===============================================|
| curses.BUTTONn_PRESSED             | マウスボタン *n* が押された                   |
+------------------------------------+-----------------------------------------------+
| curses.BUTTONn_RELEASED            | マウスボタン *n* が離された                   |
+------------------------------------+-----------------------------------------------+
| curses.BUTTONn_CLICKED             | マウスボタン *n* がクリックされた             |
+------------------------------------+-----------------------------------------------+
| curses.BUTTONn_DOUBLE_CLICKED      | マウスボタン *n* がダブルクリックされた       |
+------------------------------------+-----------------------------------------------+
| curses.BUTTONn_TRIPLE_CLICKED      | マウスボタン *n* がトリプルクリックされた     |
+------------------------------------+-----------------------------------------------+
| curses.BUTTON_SHIFT                | ボタンの状態変更時に Shift が押されていた     |
+------------------------------------+-----------------------------------------------+
| curses.BUTTON_CTRL                 | ボタンの状態変更時に Control が押されていた   |
+------------------------------------+-----------------------------------------------+
| curses.BUTTON_ALT                  | ボタンの状態変更時に Alt が押されていた       |
+------------------------------------+-----------------------------------------------+

バージョン 3.10 で変更: 基盤となる curses ライブラリが "BUTTON5_*" 定
数を提供する場合に、それらが公開されるようになりました。

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

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


"curses.textpad" --- curses プログラム用のテキスト入力ウィジェット
******************************************************************

"curses.textpad" モジュールは、curses ウィンドウで基本的なテキスト編集
を行う "Textbox" クラスを提供します。 このクラスは Emacs (したがって
Netscape Navigator、BBedit 6.x、FrameMaker、その他多くのプログラム) に
似たキーバインディングをサポートします。 このモジュールは、テキストボ
ックスの枠を描く場合などに役立つ、矩形を描画する関数も提供します。

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

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

   矩形を描画します。 最初の引数はウィンドウオブジェクトでなければなら
   ず、残りの引数はそのウィンドウからの相対座標です。 2 番目と 3 番目
   の引数は描画する矩形の左上隅の y 座標と x 座標、4 番目と 5 番目は右
   下隅の y 座標と x 座標です。 対応する端末 (xterm やその他の大半のソ
   フトウェア端末エミュレータを含む) では、VT100/IBM PC の罫線文字を使
   用して矩形を描画します。 それ以外の場合は、ASCII のダッシュ、縦棒、
   プラス記号で描画します。


Textbox オブジェクト
====================

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

class curses.textpad.Textbox(win, insert_mode=False)

   テキストボックスウィジェットオブジェクトを返します。 *win* 引数には
   、テキストボックスを配置する curses の ウィンドウ オブジェクトを指
   定する必要があります。 *insert_mode* が真の場合、テキストボックスは
   入力した文字で既存のテキストを上書きせず、右にずらして挿入します。
   テキストボックスの編集カーソルは、初期状態では配置先のウィンドウの
   左上隅、座標 "(0, 0)" にあります。 インスタンスの "stripspaces" フ
   ラグは、初期状態ではオンです。

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

   edit(validate=None)

      これは通常使用するエントリーポイントです。 終了用のキー操作が入
      力されるまで、編集のキー操作を受け付けます。 *validate* を指定す
      る場合は関数でなければなりません。 入力されたキー操作ごとに、そ
      のキー操作をパラメータとしてこの関数を呼び出し、結果に基づいて実
      行するコマンドを決めます。 関数が偽の値を返した場合、そのキー操
      作は無視されます。 このメソッドはウィンドウの内容を文字列として
      返します。 ウィンドウ内の空白を含むかどうかは "stripspaces" 属性
      に左右されます。

   do_command(ch)

      コマンドのキー操作を 1 つ処理します。 編集を継続する場合は "1"
      を、終了用のキー操作を処理した場合は "0" を返します。 サポートす
      る特殊なキー操作は以下のとおりです:

      +--------------------+---------------------------------------------+
      | キーストローク     | 動作                                        |
      |====================|=============================================|
      | "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

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