ITookAPill's picture
PyComp First Commit
9273228
|
Raw
History Blame Contribute Delete
4.02 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade

Curses C API

curses{.interpreted-text role="mod"} exposes a small C interface for extension modules. Consumers must include the header file py_curses.h{.interpreted-text role="file"} (which is not included by default by Python.h{.interpreted-text role="file"}) and import_curses{.interpreted-text role="c:func"} must be invoked, usually as part of the module initialisation function, to populate PyCurses_API{.interpreted-text role="c:var"}.

:::: warning ::: title Warning :::

Neither the C API nor the pure Python curses{.interpreted-text role="mod"} module are compatible with subinterpreters. ::::

Import the curses C API. The macro does not need a semi-colon to be called.

On success, populate the PyCurses_API{.interpreted-text role="c:var"} pointer.

On failure, set PyCurses_API{.interpreted-text role="c:var"} to NULL and set an exception. The caller must check if an error occurred via PyErr_Occurred{.interpreted-text role="c:func"}:

import_curses();  // semi-colon is optional but recommended
if (PyErr_Occurred()) { /* cleanup */ }

Dynamically allocated object containing the curses C API. This variable is only available once import_curses{.interpreted-text role="c:macro"} succeeds.

PyCurses_API[0] corresponds to PyCursesWindow_Type{.interpreted-text role="c:data"}.

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{.interpreted-text role="func"}, curses.initscr{.interpreted-text role="func"}, and curses.start_color{.interpreted-text role="func"} have been called respectively.

See also the convenience macros PyCursesSetupTermCalled{.interpreted-text role="c:macro"}, PyCursesInitialised{.interpreted-text role="c:macro"}, and PyCursesInitialisedColor{.interpreted-text role="c:macro"}.

:::: note ::: title Note :::

The number of entries in this structure is subject to changes. Consider using PyCurses_API_pointers{.interpreted-text role="c:macro"} to check if new fields are available or not. ::::

The number of accessible fields (4) in PyCurses_API{.interpreted-text role="c:var"}. This number is incremented whenever new fields are added.

The heap type <heap-types>{.interpreted-text role="ref"} corresponding to curses.window{.interpreted-text role="class"}.

Return true if op is a curses.window{.interpreted-text role="class"} 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();.

Macro checking if curses.setupterm{.interpreted-text role="func"} 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;
    }
}

Macro checking if curses.initscr{.interpreted-text role="func"} 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;
    }
}

Macro checking if curses.start_color{.interpreted-text role="func"} 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.

Name of the curses capsule to pass to PyCapsule_Import{.interpreted-text role="c:func"}.

Internal usage only. Use import_curses{.interpreted-text role="c:macro"} instead.