GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Table of Contents
  • Curses C API
  • Objects for Type Hinting
  • DateTime Objects
  • Report a bug
  • Improve this page
  • Show source
  • index
  • modules
  • Python
  • 3.15.2 documentation
  • Python/C API reference manual
  • Concrete Objects Layer

This view

  • Original page
  • New address

GeezerVison is showing docs.python.org — 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.

Warning

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.

Note

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.

© Copyright 2001 Python Software Foundation.
This page is licensed under the Python Software Foundation License Version 2.
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
See History and License for more information.

The Python Software Foundation is a non-profit corporation. Please donate.

Last updated on Nov 12, 2026 (08:53 UTC). Found a bug?
Created using Sphinx 9.1.1.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.