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.
This commit is contained in:
Victor Stinner 2012-08-29 01:40:57 +02:00
parent 4e07a8c9aa
commit 1d39cde50c
4 changed files with 20 additions and 13 deletions

View File

@ -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()

View File

@ -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)

View File

@ -48,6 +48,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?
===============================================
@ -58,7 +63,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

View File

@ -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