Commit ca2b6468 authored by Victor Stinner's avatar Victor Stinner

Issue #15785: Modify window.get_wch() API of the curses module: return a

character for most keys, and an integer for special keys, instead of always
returning an integer. So it is now possible to distinguish special keys like
keypad keys.
parent 3694401a
......@@ -869,8 +869,8 @@ the following methods and attributes:
.. method:: window.get_wch([y, x])
Get a wide character. Like :meth:`getch`, but the integer returned is the
Unicode code point for the key pressed, so it can be passed to :func:`chr`.
Get a wide character. Return a character for most keys, or an integer for
function keys, keypad keys, and other special keys.
.. versionadded:: 3.3
......@@ -878,8 +878,9 @@ the following methods and attributes:
.. method:: window.getkey([y, x])
Get a character, returning a string instead of an integer, as :meth:`getch`
does. Function keys, keypad keys and so on return a multibyte string containing
the key name. In no-delay mode, an exception is raised if there is no input.
does. Function keys, keypad keys and other special keys return a multibyte
string containing the key name. In no-delay mode, an exception is raised if
there is no input.
.. method:: window.getmaxyx()
......
......@@ -267,8 +267,7 @@ def test_issue6243(stdscr):
def test_unget_wch(stdscr):
if not hasattr(curses, 'unget_wch'):
return
import locale
encoding = locale.getpreferredencoding()
encoding = stdscr.encoding
for ch in ('a', '\xe9', '\u20ac', '\U0010FFFF'):
try:
ch.encode(encoding)
......@@ -277,18 +276,17 @@ def test_unget_wch(stdscr):
try:
curses.unget_wch(ch)
except Exception as err:
raise Exception("unget_wch(%a) failed with locale encoding %s: %s"
% (ch, encoding, err))
raise Exception("unget_wch(%a) failed with encoding %s: %s"
% (ch, stdscr.encoding, err))
read = stdscr.get_wch()
read = chr(read)
if read != ch:
raise AssertionError("%r != %r" % (read, ch))
code = ord(ch)
curses.unget_wch(code)
read = stdscr.get_wch()
if read != code:
raise AssertionError("%r != %r" % (read, code))
if read != ch:
raise AssertionError("%r != %r" % (read, ch))
def test_issue10570():
b = curses.tparm(curses.tigetstr("cup"), 5, 3)
......
......@@ -13,6 +13,11 @@ Core and Builtins
Library
-------
- Issue #15785: Modify window.get_wch() API of the curses module: return
a character for most keys, and an integer for special keys, instead of
always returning an integer. So it is now possible to distinguish special
keys like keypad keys.
What's New in Python 3.3.0 Release Candidate 1?
===============================================
......@@ -23,7 +28,7 @@ Core and Builtins
-----------------
- Issue #15573: memoryview comparisons are now performed by value with full
support for any valid struct module format definition.
support for any valid struct module format definition.
- Issue #15316: When an item in the fromlist for __import__ doesn't exist,
don't raise an error, but if an exception is raised as part of an import do
......
......@@ -1203,7 +1203,10 @@ PyCursesWindow_Get_WCh(PyCursesWindowObject *self, PyObject *args)
PyErr_SetString(PyCursesError, "no input");
return NULL;
}
return PyLong_FromLong(rtn);
if (ct == KEY_CODE_YES)
return PyLong_FromLong(rtn);
else
return PyUnicode_FromOrdinal(rtn);
}
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment