commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r9065 - trunk/gnue-forms/src/uidrivers/curses/widgets


From: johannes
Subject: [gnue] r9065 - trunk/gnue-forms/src/uidrivers/curses/widgets
Date: Mon, 27 Nov 2006 04:03:28 -0600 (CST)

Author: johannes
Date: 2006-11-27 04:03:27 -0600 (Mon, 27 Nov 2006)
New Revision: 9065

Modified:
   trunk/gnue-forms/src/uidrivers/curses/widgets/page.py
Log:
Improved get_key() method so it supports all utf encodings (and it's 
prepared for resize events)


Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/page.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/curses/widgets/page.py       2006-11-25 
11:47:42 UTC (rev 9064)
+++ trunk/gnue-forms/src/uidrivers/curses/widgets/page.py       2006-11-27 
10:03:27 UTC (rev 9065)
@@ -87,9 +87,35 @@
 
     # -------------------------------------------------------------------------
 
+    def __get_next_key(self):
+
+        # In nodelay mode the result of getch() is -1 if there is no input.
+        # This appears to be returned after a window resize (RESIZE event) too.
+        code = -1
+        while code < 0:
+            code = self.__window.getch()
+
+        return code
+
+    # -------------------------------------------------------------------------
+
+    def __get_hibits(self, value):
+        """ Returns the number of set bits starting at the MSB """
+
+        result = 0
+        for i in range(7, -1, -1):
+            if value & (1 << i):
+                result += 1
+            else:
+                break
+
+        return result
+
+    # -------------------------------------------------------------------------
+
     def __get_key(self):
 
-        key = self.__window.getch()
+        key = self.__get_next_key()
 
         # Function keys are returned as key-code
         if key > 255:
@@ -97,8 +123,8 @@
 
         result = [key]
         if i18n.encoding.startswith('utf'):
-            if (key > 127 and key <= 255):
-                result.append(self.__window.getch())
+            for i in range(self.__get_hibits(key)-1):
+                result.append(self.__get_next_key())
 
         return unicode("".join([chr(i) for i in result]), i18n.encoding)
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]