Curses C API
Curses C API#
"curses" exposes a small C interface for extension modules. Consumers must include the header file "py_curses.h" (which is not included by default by "Python.h") and "import_curses()" must be invoked, usually as part of the module initialisation function, to populate "PyCurses_API".
Advertencia:
Neither the C API nor the pure Python "curses" module are compatible with subinterpreters.
import_curses()
Import the curses C API. The macro does not need a semi-colon to be called.
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(); // semi-colon is optional but recommended
if (PyErr_Occurred()) { /* cleanup */ }
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]", and "PyCurses_API[3]" are pointers to predicate functions of type "int (*)(void)".
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".
Nota:
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)
Return true if op is a "curses.window" instance, false otherwise.
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
Macro checking if "curses.setupterm()" has been called.
The macro expansion is roughly equivalent to:
{
typedef int (*predicate_t)(void);
predicate_t was_setupterm_called = (predicate_t)PyCurses_API[1];
if (!was_setupterm_called()) {
return NULL;
}
}
PyCursesInitialised
Macro checking if "curses.initscr()" has been called.
The macro expansion is roughly equivalent to:
{
typedef int (*predicate_t)(void);
predicate_t was_initscr_called = (predicate_t)PyCurses_API[2];
if (!was_initscr_called()) {
return NULL;
}
}
PyCursesInitialisedColor
Macro checking if "curses.start_color()" has been called.
The macro expansion is roughly equivalent to:
{
typedef int (*predicate_t)(void);
predicate_t was_start_color_called = (predicate_t)PyCurses_API[3];
if (!was_start_color_called()) {
return NULL;
}
}
Internal data#
The following objects are exposed by the C API but should be considered internal-only.
PyCurses_CAPSULE_NAME
Name of the curses capsule to pass to "PyCapsule_Import()".
Internal usage only. Use "import_curses" instead.