tuikit/driver/curses.py
changeset 109 105b1affc3c2
parent 97 0c2e0c09ba5c
child 113 6796adfdc7eb
--- a/tuikit/driver/curses.py	Fri Mar 28 19:58:59 2014 +0100
+++ b/tuikit/driver/curses.py	Wed Sep 03 19:08:21 2014 +0200
@@ -43,6 +43,7 @@
         (0x44,              1,      'left'          ),
         (0x46,              1,      'end'           ),  # xterm
         (0x48,              1,      'home'          ),  # xterm
+        (0x5a,              1,      'shift+tab'     ),  # xterm
         (0x5b, 0x41,        1,      'f1'            ),  # linux
         (0x5b, 0x42,        1,      'f2'            ),  # linux
         (0x5b, 0x43,        1,      'f3'            ),  # linux
@@ -79,7 +80,7 @@
 
     def __init__(self):
         Driver.__init__(self)
-        self._log = logging.getLogger('tuikit')
+        self._log = logging.getLogger(__name__)
         self.stdscr = None
         self.cursor = None
         self.colors = {}     # maps names to curses attributes
@@ -378,7 +379,7 @@
             keyname = match[-1]
 
         if match is None:
-            self.log.debug('Unknown control sequence: %s',
+            self._log.debug('Unknown control sequence: %s',
                            ','.join(['0x%x' % x for x in consumed]))
             return [('keypress', 'Unknown', None, set())]
 
@@ -460,7 +461,7 @@
             if len(codes) == 0:
                 # no match -> unknown code
                 seq = ','.join(['0x%x' % x for x in debug_seq])
-                self.log.debug('Unknown control sequence: %s', seq)
+                self._log.debug('Unknown control sequence: %s', seq)
                 return [('keypress', 'Unknown:' + seq, None, set())]
             elif len(codes) == 1:
                 # one match -> we got the winner
@@ -483,7 +484,7 @@
         if len(matching_codes) == 0:
             # no match -> unknown code
             seq = ','.join(['0x%x' % x for x in debug_seq])
-            self.log.debug('Unknown control sequence: %s', seq)
+            self._log.debug('Unknown control sequence: %s', seq)
             return [('keypress', 'Unknown:' + seq, None, set())]
 
         if len(matching_codes) > 1:
@@ -502,6 +503,14 @@
             if mod_bits & 1<<bit:
                 mod_set.add(name)
 
+        # parse keynames in form "shift+tab"
+        if '+' in keyname:
+            parts = keyname.split('+')
+            for mod in parts[:-1]:
+                assert(mod in ('shift', 'alt', 'ctrl', 'meta'))
+                mod_set.add(mod)
+            keyname = parts[-1]
+
         return [('keypress', keyname, None, mod_set)]