Curses C API¶
curses は拡張モジュール向けに小さな C インターフェースを公開しています。
利用する側は py_curses.h ヘッダをインクルードする必要があります (このヘッダは Python.h にはデフォルトで含まれません)。
また、通常はモジュールの初期化関数内で import_curses() を呼び出して PyCurses_API を設定する必要があります。
警告
C API も Python レベルの curses モジュールも、サブインタープリタに対応していません。
-
import_curses()¶
curses C API をインポートします。 このマクロの呼び出しにはセミコロンは必要ありません。
成功した場合は
PyCurses_APIポインタを設定します。失敗した場合は
PyCurses_APIを NULL に設定し、例外を設定します。 呼び出し側はPyErr_Occurred()でエラーの有無を確認する必要があります。import_curses(); // セミコロンは省略可能だが推奨 if (PyErr_Occurred()) { /* 後片付け */ }
-
void **PyCurses_API¶
curses C API を格納する、動的に割り当てられたオブジェクトです。 この変数は
import_cursesが成功した後でのみ利用できます。PyCurses_API[0]はPyCursesWindow_Typeに対応します。PyCurses_API[1]、PyCurses_API[2]、PyCurses_API[3]は、int (*)(void)型の判定関数へのポインタです。これらの判定関数は、それぞれ
curses.setupterm()、curses.initscr()、curses.start_color()が呼び出されたかどうかを返します。便利なマクロ
PyCursesSetupTermCalled、PyCursesInitialised、PyCursesInitialisedColorも参照してください。注釈
この構造体のエントリー数は変更されることがあります。 新しいフィールドが利用できるかどうかを確認するには、
PyCurses_API_pointersの使用を検討してください。
-
PyCurses_API_pointers¶
PyCurses_API内のアクセス可能なフィールドの数 (4)。 新しいフィールドが追加されるたびに増えます。
-
PyTypeObject PyCursesWindow_Type¶
curses.windowに対応する ヒープ型。
-
int PyCursesWindow_Check(PyObject *op)¶
opがcurses.windowのインスタンスの場合は真を返し、それ以外の場合は偽を返します。
以下は C の文に展開される便利なマクロです。
特に、macro; または macro の形でのみ使え、macro() や macro(); では使えません。
-
PyCursesSetupTermCalled¶
curses.setupterm()が呼び出されたかどうかを確認するマクロ。マクロの展開結果は、おおむね次と同等です。
{ typedef int (*predicate_t)(void); predicate_t was_setupterm_called = (predicate_t)PyCurses_API[1]; if (!was_setupterm_called()) { return NULL; } }
-
PyCursesInitialised¶
curses.initscr()が呼び出されたかどうかを確認するマクロ。マクロの展開結果は、おおむね次と同等です。
{ typedef int (*predicate_t)(void); predicate_t was_initscr_called = (predicate_t)PyCurses_API[2]; if (!was_initscr_called()) { return NULL; } }
-
PyCursesInitialisedColor¶
curses.start_color()が呼び出されたかどうかを確認するマクロ。マクロの展開結果は、おおむね次と同等です。
{ typedef int (*predicate_t)(void); predicate_t was_start_color_called = (predicate_t)PyCurses_API[3]; if (!was_start_color_called()) { return NULL; } }
内部データ¶
以下のオブジェクトは C API で公開されていますが、内部専用と考えてください。
-
PyCurses_CAPSULE_NAME¶
PyCapsule_Import()に渡す curses カプセルの名前。内部専用です。 代わりに
import_cursesを使ってください。