
:mod:`curses` --- 文字セル表示のための端末操作
==============================================

.. module:: curses
   :synopsis: 可搬性のある端末操作を提供する curses ライブラリへのインタフェース．
   :platform: Unix
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
.. sectionauthor:: Eric Raymond <esr@thyrsus.com>

.. versionchanged:: 1.6
   ``ncurses`` ライブラリのサポートを追加し、パッケージに変換しました.

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

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

.. note::

   .. Since version 5.4, the ncurses library decides how to interpret non-ASCII data
      using the ``nl_langinfo`` function.  That means that you have to call
      :func:`locale.setlocale` in the application and encode Unicode strings
      using one of the system's available encodings.  This example uses the
      system's default encoding::

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

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

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

.. seealso::

   Module :mod:`curses.ascii`
      ロケール設定に関わらず ASCII 文字を扱うためのユーティリティ。

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

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

   Module :mod:`curses.wrapper`
      アプリケーションの起動時および終了時に適切な端末のセットアップとリセットを確実に行うための関数。

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

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


.. _curses-functions:

関数
----

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


.. exception:: error

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

.. note::

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

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


.. function:: baudrate()

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


.. function:: beep()

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


.. function:: can_change_color()

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


.. function:: cbreak()

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


.. function:: color_content(color_number)

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


.. function:: color_pair(color_number)

   指定された色の表示テキストにおける属性値を返します。属性値は :const:`A_STANDOUT`, :const:`A_REVERSE` 、およびその他の
   :const:`A_\*` 属性と組み合わせられています。 :func:`pair_number` はこの関数の逆です。


.. function:: curs_set(visibility)

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


.. function:: def_prog_mode()

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


.. function:: def_shell_mode()

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


.. function:: delay_output(ms)

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


.. function:: doupdate()

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

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


.. function:: echo()

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


.. function:: endwin()

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


.. function:: erasechar()

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


.. function:: filter()

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


.. function:: flash()

   スクリーンをフラッシュ(flash) します。すなわち、画面を色反転 (reverse-video) にして、短時間でもとにもどします。人によっては、
   :func:`beep` で生成される可聴な注意音よりも、このような  "可視ベル(visible bell)" を好みます。


.. function:: flushinp()

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


.. function:: getmouse()

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


.. function:: getsyx()

   仮想スクリーンにおける現在のカーソル位置を y および x の順で返します。 leaveok が真に設定されていれば、 -1、-1 が返されます。


.. function:: getwin(file)

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


.. function:: has_colors()

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


.. function:: has_ic()

   端末が文字の挿入／削除機能を持つ場合に真を返します。この関数は、最近の端末エミュレータがどれもこの機能を持っているのと同じく、
   歴史的な理由だけのために含められています。


.. function:: has_il()

   端末が行の挿入／削除機能を持つか、領域単位のスクロールによって機能をシミュレートできる場合に真を返します。
   この関数は、最近の端末エミュレータがどれもこの機能を持っているのと同じく、歴史的な理由だけのために含められています。


.. function:: has_key(ch)

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


.. function:: halfdelay(tenths)

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


.. function:: init_color(color_number, r, g, b)

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


.. function:: init_pair(pair_number, fg, bg)

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


.. function:: initscr()

   ライブラリを初期化します。スクリーン全体をあらわす :class:`WindowObject`  を返します。

   .. note::

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


.. function:: isendwin()

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


.. function:: keyname(k)

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


.. function:: killchar()

   ユーザの現在の行削除文字を返します。 Unix オペレーティングシステムでは、この値は curses プログラムが制御している端末の属性であり、curses
   ライブラリ自体では設定されません。


.. function:: longname()

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


.. function:: meta(yes)

   *yes* が 1 の場合、8 ビット文字を入力として許します。 *yes* が 0 の場合、 7 ビット文字だけを許します。


.. function:: mouseinterval(interval)

   ボタンが押されてから離されるまでの時間をマウスクリック一回として認識する最大の時間間隔を設定します。以前の内部設定値を返します。標準の値は 200
   ミリ秒、または 5 分の 1 秒です。


.. function:: mousemask(mousemask)

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


.. function:: napms(ms)

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


.. function:: newpad(nlines, ncols)

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

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


.. function:: newwin([nlines, ncols,] begin_y, begin_x)

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

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


.. function:: nl()

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


.. function:: nocbreak()

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


.. function:: noecho()

   echo モードから離れます。入力のエコーバックはオフにされます。


.. function:: nonl()

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


.. function:: noqiflush()

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


.. function:: noraw()

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


.. function:: pair_content(pair_number)

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


.. function:: pair_number(attr)

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


.. function:: putp(string)

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


.. function:: qiflush( [flag] )

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


.. function:: raw()

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


.. function:: reset_prog_mode()

   端末を "program" モードに復旧し、予め :func:`def_prog_mode` で保存した内容に戻します。


.. function:: reset_shell_mode()

   端末を "shell" モードに復旧し、予め :func:`def_shell_mode` で保存した内容に戻します。


.. function:: setsyx(y, x)

   仮想スクリーンカーソルを *y*, *x* に設定します。 *y* および *x* が共に -1 の場合、leaveok が設定されます。


.. function:: setupterm([termstr, fd])

   端末を初期化します。 *termstr* は文字列で、端末の名前を与えます; 省略された場合、TERM 環境変数の値が使われます。 *fd* は
   初期化シーケンスが送られる先のファイル記述子です; *fd* を与えない場合、 ``sys.stdout`` のファイル記述子が使われます。


.. function:: start_color()

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

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


.. function:: termattrs()

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


.. function:: termname()

   14 文字以下になるように切り詰められた環境変数 TERM の値を返します。


.. function:: tigetflag(capname)

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


.. function:: tigetnum(capname)

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


.. function:: tigetstr(capname)

   terminfo 機能名 *capname* に対応する機能値を文字列値で返します。 *capname* が文字列値で表される機能値でない場合や、
   機能がキャンセルされているか、端末記述上に見つからない場合には ``None`` を返します。


.. function:: tparm(str[,...])

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


.. function:: typeahead(fd)

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

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


.. function:: unctrl(ch)

   *ch* の印字可能な表現を文字列で返します。制御文字は例えば ``^C`` のようにキャレットに続く文字として表示されます。印字可能文字はそのままです。


.. function:: ungetch(ch)

   *ch* をプッシュして、 :meth:`getch` を次に呼び出したときに返されるようにします。

   .. note::

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


.. function:: ungetmouse(id, x, y, z, bstate)

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


.. function:: use_env(flag)

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


.. function:: use_default_colors()

   この機能をサポートしている端末上で、色の値としてデフォルト値を使う設定をします。
   あなたのアプリケーションで透過性とサポートするためにこの関数を使ってください。デフォルトの色は色番号-1に割り当てられます。

   この関数を呼んだ後、たとえば ``init_pair(x, curses.COLOR_RED, -1)``
   は色ペア *x* を赤い前景色とデフォルトの背景色に初期化します。


.. _curses-window-objects:

Window オブジェクト
-------------------

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


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

   .. note::

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

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


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

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


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

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


.. method:: window.attroff(attr)

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


.. method:: window.attron(attr)

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


.. method:: window.attrset(attr)

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


.. method:: window.bkgd(ch[, attr])

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

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

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


.. method:: window.bkgdset(ch[, attr])

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


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

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

   .. note::

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

   +------+----------+-----------------------+
   | 引数 | 記述     | 標準の設定値          |
   +======+==========+=======================+
   | *ls* | 左側     | :const:`ACS_VLINE`    |
   +------+----------+-----------------------+
   | *rs* | 右側     | :const:`ACS_VLINE`    |
   +------+----------+-----------------------+
   | *ts* | 上側     | :const:`ACS_HLINE`    |
   +------+----------+-----------------------+
   | *bs* | 下側     | :const:`ACS_HLINE`    |
   +------+----------+-----------------------+
   | *tl* | 左上の角 | :const:`ACS_ULCORNER` |
   +------+----------+-----------------------+
   | *tr* | 右上の角 | :const:`ACS_URCORNER` |
   +------+----------+-----------------------+
   | *bl* | 左下の角 | :const:`ACS_LLCORNER` |
   +------+----------+-----------------------+
   | *br* | 右下の角 | :const:`ACS_LRCORNER` |
   +------+----------+-----------------------+


.. method:: window.box([vertch, horch])

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


.. method:: window.chgat([y, x, ] [num,] attr)

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

   現在のカーソルのポジションか、引数が指定された場合は ``(y, x)`` から、
   *num* 文字の属性を設定します。
   *num* が指定されない、または *num* = -1 の場合は、属性はその行の終わりまでの\
   すべての文字に適用されます。
   この関数はカーソルを移動しません。
   変更された行に対して :meth:`touchline` メソッドが呼び出されるので、
   その行の内容は次のwindow refreshの時に再描画されます。


.. method:: window.clear()

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


.. method:: window.clearok(yes)

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


.. method:: window.clrtobot()

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


.. method:: window.clrtoeol()

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


.. method:: window.cursyncup()

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


.. method:: window.delch([y, x])

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


.. method:: window.deleteln()

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


.. method:: window.derwin([nlines, ncols,] begin_y, begin_x)

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


.. method:: window.echochar(ch[, attr])

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


.. method:: window.enclose(y, x)

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


.. method:: window.erase()

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


.. method:: window.getbegyx()

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


.. method:: window.getch([y, x])

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


.. method:: window.getkey([y, x])

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


.. method:: window.getmaxyx()

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


.. method:: window.getparyx()

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


.. method:: window.getstr([y, x])

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


.. method:: window.getyx()

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


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

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


.. method:: window.idcok(flag)

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


.. method:: window.idlok(yes)

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


.. method:: window.immedok(flag)

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


.. method:: window.inch([y, x])

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


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

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


.. method:: window.insdelln(nlines)

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


.. method:: window.insertln()

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


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

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


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

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


.. method:: window.instr([y, x] [, n])

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


.. method:: window.is_linetouched(line)

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


.. method:: window.is_wintouched()

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


.. method:: window.keypad(yes)

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


.. method:: window.leaveok(yes)

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

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


.. method:: window.move(new_y, new_x)

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


.. method:: window.mvderwin(y, x)

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


.. method:: window.mvwin(new_y, new_x)

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


.. method:: window.nodelay(yes)

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


.. method:: window.notimeout(yes)

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

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


.. method:: window.noutrefresh()

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


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

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

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


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

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

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


.. method:: window.putwin(file)

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


.. method:: window.redrawln(beg, num)

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


.. method:: window.redrawwin()

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


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

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

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


.. method:: window.scroll([lines=1])

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


.. method:: window.scrollok(flag)

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


.. method:: window.setscrreg(top, bottom)

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


.. method:: window.standend()

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


.. method:: window.standout()

   *A_STANDOUT* 属性をオンにします。


.. method:: window.subpad([nlines, ncols,] begin_y, begin_x)

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


.. method:: window.subwin([nlines, ncols,] begin_y, begin_x)

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

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


.. method:: window.syncdown()

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


.. method:: window.syncok(flag)

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


.. method:: window.syncup()

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


.. method:: window.timeout(delay)

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


.. method:: window.touchline(start, count[, changed])

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


.. method:: window.touchwin()

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


.. method:: window.untouchwin()

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


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

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


定数
----

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


.. data:: ERR

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


.. data:: OK

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


.. data:: version

   モジュールの現在のバージョンを表現する文字列です。 :const:`__version__` でも取得できます。

以下に文字セルの属性を指定するために利用可能ないくつかの定数を示します:

+------------------+-----------------------------------------+
| 属性             | 意味                                    |
+==================+=========================================+
| ``A_ALTCHARSET`` | 代用文字 (alternate character) モード。 |
+------------------+-----------------------------------------+
| ``A_BLINK``      | 点滅モード。                            |
+------------------+-----------------------------------------+
| ``A_BOLD``       | 太字モード。                            |
+------------------+-----------------------------------------+
| ``A_DIM``        | 低輝度モード。                          |
+------------------+-----------------------------------------+
| ``A_NORMAL``     | 通常の属性。                            |
+------------------+-----------------------------------------+
| ``A_STANDOUT``   | 強調モード。                            |
+------------------+-----------------------------------------+
| ``A_UNDERLINE``  | 下線モード。                            |
+------------------+-----------------------------------------+

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

.. XXX this table is far too large! should it be alphabetized?

+-------------------+----------------------------------------------------+
| キー定数          | キー                                               |
+===================+====================================================+
| ``KEY_MIN``       | 最小のキー値                                       |
+-------------------+----------------------------------------------------+
| ``KEY_BREAK``     | ブレーク (Break, 信頼できません)                   |
+-------------------+----------------------------------------------------+
| ``KEY_DOWN``      | 下向き矢印 (Down-arrow)                            |
+-------------------+----------------------------------------------------+
| ``KEY_UP``        | 上向き矢印 (Up-arrow)                              |
+-------------------+----------------------------------------------------+
| ``KEY_LEFT``      | 左向き矢印 (Left-arrow)                            |
+-------------------+----------------------------------------------------+
| ``KEY_RIGHT``     | 右向き矢印 (Right-arrow)                           |
+-------------------+----------------------------------------------------+
| ``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``   | オプション (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``     | シフト付き Dxit                                    |
+-------------------+----------------------------------------------------+
| ``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 つのファンクションキー (:const:`KEY_F1`,
:const:`KEY_F2`, :const:`KEY_F3`, :const:`KEY_F4`) が利用可能で、矢印キーは
:const:`KEY_UP`, :const:`KEY_DOWN`, :const:`KEY_LEFT` および :const:`KEY_RIGHT`
が対応付けられています。計算機に PC キーボードが付属している場合、矢印キーと 12 個のファンクションキー (古い PC キーボードには 10 個しか
ファンクションキーがないかもしれません) が利用できると考えてよいでしょう; また、以下のキーパッド対応付けは標準的なものです:

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

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

.. note::

   これらは :func:`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``   | left arrow                       |
+------------------+----------------------------------+
| ``ACS_LEQUAL``   | より小さいか等しい               |
+------------------+----------------------------------+
| ``ACS_LLCORNER`` | 左下角                           |
+------------------+----------------------------------+
| ``ACS_LRCORNER`` | 右下角                           |
+------------------+----------------------------------+
| ``ACS_LTEE``     | left tee                         |
+------------------+----------------------------------+
| ``ACS_NEQUAL``   | 等号否定                         |
+------------------+----------------------------------+
| ``ACS_PI``       | パイ記号                         |
+------------------+----------------------------------+
| ``ACS_PLMINUS``  | プラスマイナス記号               |
+------------------+----------------------------------+
| ``ACS_PLUS``     | 大プラス記号                     |
+------------------+----------------------------------+
| ``ACS_RARROW``   | 右向き矢印                       |
+------------------+----------------------------------+
| ``ACS_RTEE``     | 右向き T 字罫線                  |
+------------------+----------------------------------+
| ``ACS_S1``       | scan line 1                      |
+------------------+----------------------------------+
| ``ACS_S3``       | scan line 3                      |
+------------------+----------------------------------+
| ``ACS_S7``       | scan line 7                      |
+------------------+----------------------------------+
| ``ACS_S9``       | scan line 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``  | 黄色                      |
+-------------------+---------------------------+


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

.. module:: curses.textpad
   :synopsis: curses ウィンドウ内での Emacs ライクな入力編集機能。
.. moduleauthor:: Eric Raymond <esr@thyrsus.com>
.. sectionauthor:: Eric Raymond <esr@thyrsus.com>


.. versionadded:: 1.6

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

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


.. function:: rectangle(win, uly, ulx, lry, lrx)

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


.. _curses-textpad-objects:

Textbox オブジェクト
--------------------

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


.. class:: Textbox(win)

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

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

   .. method:: edit([validator])

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


   .. method:: do_command(ch)

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

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

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

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

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


   .. method:: gather()

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


   .. attribute:: stripspaces

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


:mod:`curses.wrapper` --- curses プログラムのための端末ハンドラ
===============================================================

.. module:: curses.wrapper
   :synopsis: curses プログラムのための端末設定ラッパ。
.. moduleauthor:: Eric Raymond <esr@thyrsus.com>
.. sectionauthor:: Eric Raymond <esr@thyrsus.com>


.. versionadded:: 1.6

このモジュールでは関数 :func:`wrapper` 一つを提供しています。これは curses 使用アプリケーションの残りの部分となるもう一つの関数です。
アプリケーションが例外を送出した場合、 :func:`wrapper` は例外を再送出してトレースバックを生成する前に端末を正常な状態に復元します。


.. function:: wrapper(func, ...)

   curses を初期化し、別の関数 *func* を呼び出、エラーが発生した場合には通常のキーボード／スクリーン動作に戻すラッパ関数です。
   呼び出し可能オブジェクト *func* は主ウィンドウの 'stdscr' に対する最初の引数として渡されます。その他の引数は :func:`wrapper`
   に渡されます。

フック関数を呼び出す前に、 :func:`wrapper` は cbreak モードをオン、エコーをオフにし、端末キーパッドを有効にします。
端末がカラーをサポートしている場合にはカラーを初期化します。 (通常終了も例外による終了も) 終了時には cooked モードに復元し、
エコーをオンにし、端末キーパッドを無効化します。

