[Python-checkins] cpython: Issue #15785: Modify window.get_wch() API of the curses module: return a

georg.brandl python-checkins at python.org
Sun Sep 9 11:18:59 CEST 2012


http://hg.python.org/cpython/rev/23377e88487b
changeset:   78898:23377e88487b
parent:      78771:290a07e57797
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Wed Aug 29 01:40:57 2012 +0200
summary:
  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.

files:
  Doc/library/curses.rst  |   9 +++++----
  Lib/test/test_curses.py |  12 +++++-------
  Misc/NEWS               |   7 ++++++-
  Modules/_cursesmodule.c |   5 ++++-
  4 files changed, 20 insertions(+), 13 deletions(-)


diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -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 --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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 --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -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
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list