diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2012-08-28 23:40:57 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2012-08-28 23:40:57 (GMT) |
commit | ca2b64682e2f3c5e3fb2ed150600a73105119e82 (patch) | |
tree | 69f5e40353c33dfbbfc79fb7c49cc1a1aaca3bcc | |
parent | 3694401ad278040c6517095ecb2d50ee43b0d7fb (diff) | |
download | cpython-ca2b64682e2f3c5e3fb2ed150600a73105119e82.zip cpython-ca2b64682e2f3c5e3fb2ed150600a73105119e82.tar.gz cpython-ca2b64682e2f3c5e3fb2ed150600a73105119e82.tar.bz2 |
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.
-rw-r--r-- | Doc/library/curses.rst | 9 | ||||
-rw-r--r-- | Lib/test/test_curses.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 7 | ||||
-rw-r--r-- | Modules/_cursesmodule.c | 5 |
4 files changed, 20 insertions, 13 deletions
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index ff3a793..c424148 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -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() diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 21ac608..e959622 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -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 diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index de45f51..0436e7f 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -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 |