Curses C API

curses 為擴充模組公開了一個小型的 C 介面。使用者必須包含標頭檔 py_curses.h(此檔案不會由 Python.h 預設包含),並且必須觸發 import_curses() 以填充 (populate) PyCurses_API,通常是作為模組初始化函式的一部分。

警告

Neither the C API nor the pure Python curses module are compatible with subinterpreters.

import_curses()

引入 curses C API。呼叫此巨集不需要寫分號。

On success, populate the PyCurses_API pointer.

On failure, set PyCurses_API to NULL and set an exception. The caller must check if an error occurred via PyErr_Occurred():

import_curses();  // 建議要寫分號但非必要
if (PyErr_Occurred()) { /* 清理 */ }
void **PyCurses_API

Dynamically allocated object containing the curses C API. This variable is only available once import_curses succeeds.

PyCurses_API[0] corresponds to PyCursesWindow_Type.

PyCurses_API[1]PyCurses_API[2]PyCurses_API[3] 是指向 型別為 int (*)(void) 的謂詞函式 (predicate functions) 的指標。

When called, these predicates return whether curses.setupterm(), curses.initscr(), and curses.start_color() have been called respectively.

See also the convenience macros PyCursesSetupTermCalled, PyCursesInitialised, and PyCursesInitialisedColor.

備註

The number of entries in this structure is subject to changes. Consider using PyCurses_API_pointers to check if new fields are available or not.

PyCurses_API_pointers

The number of accessible fields (4) in PyCurses_API. This number is incremented whenever new fields are added.

PyTypeObject PyCursesWindow_Type

The heap type corresponding to curses.window.

int PyCursesWindow_Check(PyObject *op)

如果 opcurses.window 實例則回傳 true,否則回傳 false。

The following macros are convenience macros expanding into C statements. In particular, they can only be used as macro; or macro, but not macro() or 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

Name of the curses capsule to pass to PyCapsule_Import().

僅供內部使用。請改用 import_curses