--- a/tuikit/driver/curses.py Fri Mar 28 14:58:20 2014 +0100
+++ b/tuikit/driver/curses.py Fri Mar 28 19:58:59 2014 +0100
@@ -139,7 +139,7 @@
def flush(self):
if self.cursor:
- self.stdscr.move(*self.cursor)
+ self.stdscr.move(self.cursor.y, self.cursor.x)
curses.curs_set(True)
else:
curses.curs_set(False)
@@ -175,18 +175,6 @@
res = res | self.attr_map[a]
return res
- ## cursor ##
-
- def showcursor(self, x, y):
- if self.clipstack.test(x, y):
- self.cursor = (y, x)
- else:
- self.cursor = None
-
- def hidecursor(self):
- curses.curs_set(False)
- self.cursor = None
-
## input, events ##
def getevents(self, timeout=None):
@@ -224,7 +212,7 @@
res += self._process_utf8_chars()
elif curses.ascii.isprint(c):
- res += [('keypress', None, str(chr(c)))]
+ res += [('keypress', None, str(chr(c)), set())]
else:
self._inputqueue_unget(c)
@@ -337,7 +325,7 @@
utf.append(c)
try:
uni = str(bytes(utf), 'utf-8')
- return [('keypress', None, uni)]
+ return [('keypress', None, uni, set())]
except UnicodeDecodeError:
continue
raise Exception('Invalid UTF-8 sequence: %r' % utf)
@@ -392,7 +380,7 @@
if match is None:
self.log.debug('Unknown control sequence: %s',
','.join(['0x%x' % x for x in consumed]))
- return [('keypress', 'Unknown', None)]
+ return [('keypress', 'Unknown', None, set())]
if keyname == 'mouse':
return self._process_xterm_mouse()
@@ -400,7 +388,7 @@
if keyname == 'CSI':
return self._process_control_sequence()
- return [('keypress', keyname, None)]
+ return [('keypress', keyname, None, set())]
def _process_xterm_mouse(self):
t = self._inputqueue_get_wait()
@@ -473,7 +461,7 @@
# no match -> unknown code
seq = ','.join(['0x%x' % x for x in debug_seq])
self.log.debug('Unknown control sequence: %s', seq)
- return [('keypress', 'Unknown:' + seq, None)]
+ return [('keypress', 'Unknown:' + seq, None, set())]
elif len(codes) == 1:
# one match -> we got the winner
break
@@ -496,7 +484,7 @@
# no match -> unknown code
seq = ','.join(['0x%x' % x for x in debug_seq])
self.log.debug('Unknown control sequence: %s', seq)
- return [('keypress', 'Unknown:' + seq, None)]
+ return [('keypress', 'Unknown:' + seq, None, set())]
if len(matching_codes) > 1:
raise Exception('Internal error: invalid csi_codes, more than one matching')
@@ -504,11 +492,17 @@
keyname = matching_codes[0][1]
# modifiers
- mod = 0
+ mod_bits = 0
if len(params) > 1:
- mod = params[1] - 1
+ mod_bits = params[1] - 1
- return [('keypress', keyname, None, mod)]
+ # convert modifiers from bit-map to set
+ mod_set = set()
+ for bit, name in enumerate(('shift', 'alt', 'ctrl', 'meta')):
+ if mod_bits & 1<<bit:
+ mod_set.add(name)
+
+ return [('keypress', keyname, None, mod_set)]
driver_class = CursesDriver