changeset: 78898:23377e88487b parent: 78771:290a07e57797 user: Victor Stinner date: Wed Aug 29 01:40:57 2012 +0200 files: Doc/library/curses.rst Lib/test/test_curses.py Misc/NEWS Modules/_cursesmodule.c description: 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. diff -r 290a07e57797 -r 23377e88487b Doc/library/curses.rst --- a/Doc/library/curses.rst Sat Aug 25 21:33:08 2012 +0200 +++ b/Doc/library/curses.rst Wed Aug 29 01:40:57 2012 +0200 @@ -869,8 +869,8 @@ .. 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 @@ .. 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 -r 290a07e57797 -r 23377e88487b Lib/test/test_curses.py --- a/Lib/test/test_curses.py Sat Aug 25 21:33:08 2012 +0200 +++ b/Lib/test/test_curses.py Wed Aug 29 01:40:57 2012 +0200 @@ -267,8 +267,7 @@ 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 @@ 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) diff -r 290a07e57797 -r 23377e88487b Misc/NEWS --- a/Misc/NEWS Sat Aug 25 21:33:08 2012 +0200 +++ b/Misc/NEWS Wed Aug 29 01:40:57 2012 +0200 @@ -13,6 +13,11 @@ 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 @@ ----------------- - 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 -r 290a07e57797 -r 23377e88487b Modules/_cursesmodule.c --- a/Modules/_cursesmodule.c Sat Aug 25 21:33:08 2012 +0200 +++ b/Modules/_cursesmodule.c Wed Aug 29 01:40:57 2012 +0200 @@ -1203,7 +1203,10 @@ 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

AltStyle によって変換されたページ (->オリジナル) /