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:
parent
4e07a8c9aa
commit
1d39cde50c
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue