目次

前のトピックへ

15.7. getpass — 可搬性のあるパスワード入力機構

次のトピックへ

15.11. curses.ascii — ASCII 文字に関するユーティリティ

このページ

15.8. curses — 文字セル表示のための端末操作

バージョン 1.6 で変更: ncurses ライブラリのサポートを追加し、パッケージに変換しました.

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

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

ノート

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

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

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

参考

Module curses.ascii
ロケール設定に関わらず ASCII 文字を扱うためのユーティリティ。
Module curses.panel
curses ウィンドウにデプス機能を追加するパネルスタック拡張。
Module curses.textpad
Emacs ライクなキーバインディングをサポートする編集可能な curses 用テキストウィジェット。
Module curses.wrapper
アプリケーションの起動時および終了時に適切な端末のセットアップとリセットを確実に行うための関数。
Python で Curses プログラミング
Andrew Kuchling および Eric Raymond によって書かれた、curses を Python で使うためのチュートリアルです。

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

15.8.1. 関数

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

exception curses.error

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

ノート

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

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

curses.baudrate()

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

curses.beep()

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

curses.can_change_color()

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

curses.cbreak()

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

curses.color_content(color_number)

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

curses.color_pair(color_number)

指定された色の表示テキストにおける属性値を返します。属性値は 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()

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

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

curses.echo()

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

curses.endwin()

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

curses.erasechar()

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

curses.filter()

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

curses.flash()

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

curses.flushinp()

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

curses.getmouse()

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

curses.getsyx()

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

curses.getwin(file)

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

curses.has_colors()

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

curses.has_ic()

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

curses.has_il()

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

curses.has_key(ch)

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

curses.halfdelay(tenths)

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

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

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

curses.init_pair(pair_number, fg, bg)

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

curses.initscr()

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

ノート

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

curses.isendwin()

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

curses.keyname(k)

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

curses.killchar()

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

curses.longname()

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

curses.meta(yes)

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

curses.mouseinterval(interval)

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

curses.mousemask(mousemask)

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

curses.napms(ms)

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

curses.newpad(nlines, ncols)

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

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

curses.newwin([nlines, ncols], begin_y, begin_x)

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

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

curses.nl()

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

curses.nocbreak()

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

curses.noecho()

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

curses.nonl()

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

curses.noqiflush()

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

curses.noraw()

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

curses.pair_content(pair_number)

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

curses.pair_number(attr)

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

curses.putp(string)

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

curses.qiflush([flag])

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

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.setsyx(y, x)

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

curses.setupterm([termstr, fd])

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

curses.start_color()

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

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

curses.termattrs()

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

curses.termname()

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

curses.tigetflag(capname)

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

curses.tigetnum(capname)

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

curses.tigetstr(capname)

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

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

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

curses.typeahead(fd)

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

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

curses.unctrl(ch)

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

curses.ungetch(ch)

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

ノート

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

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

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

curses.use_env(flag)

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

curses.use_default_colors()

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

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

15.8.2. Window オブジェクト

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

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

ノート

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

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

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

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

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

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

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

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

ノート

どの引数も、 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([y, x, ] [num,] attr)

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

window.clear()

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

window.clearok(yes)

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

window.clrtobot()

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

window.clrtoeol()

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

window.cursyncup()

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

window.delch([y, x])

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

window.deleteln()

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

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

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

window.echochar(ch[, attr])

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

window.enclose(y, x)

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

window.erase()

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

window.getbegyx()

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

window.getch([y, x])

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

window.getkey([y, x])

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

window.getmaxyx()

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

window.getparyx()

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

window.getstr([y, x])

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

window.getyx()

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

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

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

window.idcok(flag)

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

window.idlok(yes)

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

window.immedok(flag)

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

window.inch([y, x])

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

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

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

window.insdelln(nlines)

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

window.insertln()

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

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

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

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

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

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

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

window.is_linetouched(line)

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

window.is_wintouched()

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

window.keypad(yes)

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

window.leaveok(yes)

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

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

window.move(new_y, new_x)

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

window.mvderwin(y, x)

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

window.mvwin(new_y, new_x)

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

window.nodelay(yes)

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

window.notimeout(yes)

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

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

window.noutrefresh()

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

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

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

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

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

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

複写領域をきめ細かく制御するために、 overlay() の第二形式を使うことができます。 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.scroll([lines=1])

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

window.scrollok(flag)

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

window.setscrreg(top, bottom)

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

window.standend()

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

window.standout()

A_STANDOUT 属性をオンにします。

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

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

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

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

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

window.syncdown()

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

window.syncok(flag)

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

window.syncup()

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

window.timeout(delay)

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

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

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

window.touchwin()

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

window.untouchwin()

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

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

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

15.8.3. 定数

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

curses.ERR

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

curses.OK

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

curses.version

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

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

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

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

キー定数 キー
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 つのファンクションキー (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_NPAGE
Page Down KEY_PPAGE

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

ノート

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

ACS コード 意味
ACS_BBSS 右上角の別名
ACS_BLOCK 黒四角ブロック
ACS_BOARD 白四角ブロック
ACS_BSBS 水平線の別名
ACS_BSSB 左上角の別名
ACS_BSSS 上向き T 字罫線の別名
ACS_BTEE 下向き T 字罫線
ACS_BULLET 黒丸(bullet)
ACS_CKBOARD チェッカーボードパタン (点描)
ACS_DARROW 下向き矢印
ACS_DEGREE
ACS_DIAMOND ダイアモンド
ACS_GEQUAL より大きいか等しい
ACS_HLINE 水平線
ACS_LANTERN ランタン(lantern) シンボル
ACS_LARROW 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 黄色

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

バージョン 1.6 で追加.

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

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

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

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

15.9.1. Textbox オブジェクト

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

class curses.textpad.Textbox(win)

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

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

edit([validator])

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

do_command(ch)

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

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

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

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

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

gather()

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

stripspaces

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

15.10. curses.wrapper — curses プログラムのための端末ハンドラ

バージョン 1.6 で追加.

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

curses.wrapper.wrapper(func, ...)

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

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