a key with that value.
+.. function:: define_key(definition, keycode)
+
+ Define an escape sequence *definition*, a string, as a key that generates
+ the key code *keycode*, so that :mod:`curses` interprets it like one of the
+ keys predefined in the terminal database.
+
+ If *definition* is ``None``, any existing binding for *keycode* is removed.
+ If *keycode* is zero or negative, any existing binding for *definition* is
+ removed.
+
+ .. versionadded:: next
+
+
+.. function:: key_defined(definition)
+
+ Return the key code bound to the escape sequence *definition*, a string,
+ ``0`` if no key code is bound to it, or ``-1`` if *definition* is a prefix
+ of a longer bound sequence (and so is ambiguous).
+
+ .. versionadded:: next
+
+
+.. function:: keyok(keycode, enable)
+
+ Enable (if *enable* is true) or disable (otherwise) interpretation of the
+ key code *keycode*. Unlike :meth:`window.keypad`, this affects a single
+ key code rather than all of them.
+
+ .. versionadded:: next
+
+
.. function:: halfdelay(tenths)
Used for half-delay mode, which is similar to cbreak mode in that characters
}
#endif
+#if defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS
+/*[clinic input]
+_curses.define_key
+
+ definition: str(accept={str, NoneType})
+ Escape sequence to bind, or None to remove a binding.
+ keycode: int
+ Key code to generate.
+ /
+
+Define an escape sequence for a key code.
+
+If definition is None, any existing binding for keycode is removed.
+If keycode is zero or negative, the binding for definition is removed.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_define_key_impl(PyObject *module, const char *definition,
+ int keycode)
+/*[clinic end generated code: output=9dc655653bb09062 input=8db9e0d8802c709f]*/
+{
+ PyCursesStatefulInitialised(module);
+
+ return curses_check_err(module, define_key(definition, keycode),
+ "define_key", NULL);
+}
+
+/*[clinic input]
+_curses.key_defined
+
+ definition: str
+ Escape sequence.
+ /
+
+Return the key code bound to an escape sequence.
+
+Return 0 if no key code is bound to the escape sequence, or -1 if the
+escape sequence is a prefix of another bound sequence (so ambiguous).
+[clinic start generated code]*/
+
+static PyObject *
+_curses_key_defined_impl(PyObject *module, const char *definition)
+/*[clinic end generated code: output=2d357e01fe277c88 input=03749d7bd79d8d2c]*/
+{
+ PyCursesStatefulInitialised(module);
+
+ return PyLong_FromLong(key_defined(definition));
+}
+
+/*[clinic input]
+_curses.keyok
+
+ keycode: int
+ Key code.
+ enable: bool
+ Whether the key code is interpreted.
+ /
+
+Enable or disable interpretation of an individual key code.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_keyok_impl(PyObject *module, int keycode, int enable)
+/*[clinic end generated code: output=43eab0b4d9973e44 input=5bee51d850f481b9]*/
+{
+ PyCursesStatefulInitialised(module);
+
+ return curses_check_err(module, keyok(keycode, enable), "keyok", NULL);
+}
+#endif
+
/*[clinic input]
_curses.init_color
_CURSES_HAS_IC_METHODDEF
_CURSES_HAS_IL_METHODDEF
_CURSES_HAS_KEY_METHODDEF
+ _CURSES_DEFINE_KEY_METHODDEF
+ _CURSES_KEY_DEFINED_METHODDEF
+ _CURSES_KEYOK_METHODDEF
_CURSES_HALFDELAY_METHODDEF
_CURSES_INIT_COLOR_METHODDEF
_CURSES_INIT_PAIR_METHODDEF
#endif /* defined(HAVE_CURSES_HAS_KEY) */
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS)
+
+PyDoc_STRVAR(_curses_define_key__doc__,
+"define_key($module, definition, keycode, /)\n"
+"--\n"
+"\n"
+"Define an escape sequence for a key code.\n"
+"\n"
+" definition\n"
+" Escape sequence to bind, or None to remove a binding.\n"
+" keycode\n"
+" Key code to generate.\n"
+"\n"
+"If definition is None, any existing binding for keycode is removed.\n"
+"If keycode is zero or negative, the binding for definition is removed.");
+
+#define _CURSES_DEFINE_KEY_METHODDEF \
+ {"define_key", _PyCFunction_CAST(_curses_define_key), METH_FASTCALL, _curses_define_key__doc__},
+
+static PyObject *
+_curses_define_key_impl(PyObject *module, const char *definition,
+ int keycode);
+
+static PyObject *
+_curses_define_key(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+ PyObject *return_value = NULL;
+ const char *definition;
+ int keycode;
+
+ if (!_PyArg_CheckPositional("define_key", nargs, 2, 2)) {
+ goto exit;
+ }
+ if (args[0] == Py_None) {
+ definition = NULL;
+ }
+ else if (PyUnicode_Check(args[0])) {
+ Py_ssize_t definition_length;
+ definition = PyUnicode_AsUTF8AndSize(args[0], &definition_length);
+ if (definition == NULL) {
+ goto exit;
+ }
+ if (strlen(definition) != (size_t)definition_length) {
+ PyErr_SetString(PyExc_ValueError, "embedded null character");
+ goto exit;
+ }
+ }
+ else {
+ _PyArg_BadArgument("define_key", "argument 1", "str or None", args[0]);
+ goto exit;
+ }
+ keycode = PyLong_AsInt(args[1]);
+ if (keycode == -1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ return_value = _curses_define_key_impl(module, definition, keycode);
+
+exit:
+ return return_value;
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS) */
+
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS)
+
+PyDoc_STRVAR(_curses_key_defined__doc__,
+"key_defined($module, definition, /)\n"
+"--\n"
+"\n"
+"Return the key code bound to an escape sequence.\n"
+"\n"
+" definition\n"
+" Escape sequence.\n"
+"\n"
+"Return 0 if no key code is bound to the escape sequence, or -1 if the\n"
+"escape sequence is a prefix of another bound sequence (so ambiguous).");
+
+#define _CURSES_KEY_DEFINED_METHODDEF \
+ {"key_defined", (PyCFunction)_curses_key_defined, METH_O, _curses_key_defined__doc__},
+
+static PyObject *
+_curses_key_defined_impl(PyObject *module, const char *definition);
+
+static PyObject *
+_curses_key_defined(PyObject *module, PyObject *arg)
+{
+ PyObject *return_value = NULL;
+ const char *definition;
+
+ if (!PyUnicode_Check(arg)) {
+ _PyArg_BadArgument("key_defined", "argument", "str", arg);
+ goto exit;
+ }
+ Py_ssize_t definition_length;
+ definition = PyUnicode_AsUTF8AndSize(arg, &definition_length);
+ if (definition == NULL) {
+ goto exit;
+ }
+ if (strlen(definition) != (size_t)definition_length) {
+ PyErr_SetString(PyExc_ValueError, "embedded null character");
+ goto exit;
+ }
+ return_value = _curses_key_defined_impl(module, definition);
+
+exit:
+ return return_value;
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS) */
+
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS)
+
+PyDoc_STRVAR(_curses_keyok__doc__,
+"keyok($module, keycode, enable, /)\n"
+"--\n"
+"\n"
+"Enable or disable interpretation of an individual key code.\n"
+"\n"
+" keycode\n"
+" Key code.\n"
+" enable\n"
+" Whether the key code is interpreted.");
+
+#define _CURSES_KEYOK_METHODDEF \
+ {"keyok", _PyCFunction_CAST(_curses_keyok), METH_FASTCALL, _curses_keyok__doc__},
+
+static PyObject *
+_curses_keyok_impl(PyObject *module, int keycode, int enable);
+
+static PyObject *
+_curses_keyok(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+ PyObject *return_value = NULL;
+ int keycode;
+ int enable;
+
+ if (!_PyArg_CheckPositional("keyok", nargs, 2, 2)) {
+ goto exit;
+ }
+ keycode = PyLong_AsInt(args[0]);
+ if (keycode == -1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ enable = PyObject_IsTrue(args[1]);
+ if (enable < 0) {
+ goto exit;
+ }
+ return_value = _curses_keyok_impl(module, keycode, enable);
+
+exit:
+ return return_value;
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS) */
+
PyDoc_STRVAR(_curses_init_color__doc__,
"init_color($module, color_number, r, g, b, /)\n"
"--\n"
#define _CURSES_HAS_KEY_METHODDEF
#endif /* !defined(_CURSES_HAS_KEY_METHODDEF) */
+#ifndef _CURSES_DEFINE_KEY_METHODDEF
+ #define _CURSES_DEFINE_KEY_METHODDEF
+#endif /* !defined(_CURSES_DEFINE_KEY_METHODDEF) */
+
+#ifndef _CURSES_KEY_DEFINED_METHODDEF
+ #define _CURSES_KEY_DEFINED_METHODDEF
+#endif /* !defined(_CURSES_KEY_DEFINED_METHODDEF) */
+
+#ifndef _CURSES_KEYOK_METHODDEF
+ #define _CURSES_KEYOK_METHODDEF
+#endif /* !defined(_CURSES_KEYOK_METHODDEF) */
+
#ifndef _CURSES_ALLOC_PAIR_METHODDEF
#define _CURSES_ALLOC_PAIR_METHODDEF
#endif /* !defined(_CURSES_ALLOC_PAIR_METHODDEF) */
#ifndef _CURSES_ASSUME_DEFAULT_COLORS_METHODDEF
#define _CURSES_ASSUME_DEFAULT_COLORS_METHODDEF
#endif /* !defined(_CURSES_ASSUME_DEFAULT_COLORS_METHODDEF) */
-/*[clinic end generated code: output=864fa5c0f22fcad3 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=db4cb7f72e1dc166 input=a9049054013a1b77]*/