[ 'A','S','D','F','G','H','J','K','L'],
['+','Z','X','C','V','B','N','M','\'',':']
]
+keymap['lower-ctrl'] = [
+ ['q','w','e','r','t','y','u','i','o','p'],
+ [ 'a','s','d','f','g','h','j','k','l'],
+ ['Dwn','z','x','c','v','b','n','m','Lft','Rgt']
+]
+
#keymap['number'] = [
# ['1','2','3','4','5','6','7','8','9','0'],
# [ '+','*','-','/','#','(',')','[',']'],
['\\','|','+','=','_','-','Home','End','Insert','Delete']
]
+symmap = {
+ 'Home' : '\x1bOH',
+ 'End' : '\x1bOF',
+ 'Insert': '\x1b[2~',
+ 'Delete': '\x1b[3~',
+ 'Del' : '\0177',
+ 'PgUp' : '\x1b[5~',
+ 'PgDn' : '\x1b[6~',
+ 'Up' : '\x1b[A',
+ 'Dwn' : '\x1b[B',
+ 'Rgt' : '\x1b[C',
+ 'Lft' : '\x1b[D',
+}
+
class TapBoard(gtk.VBox):
__gsignals__ = {
'key' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
b = self.add_button('Num', self.nextmode, True, h, fd)
self.modebutton = b
b = self.add_button('SPC', self.tap, (-1,(' ','\t')), h, fd)
- b = self.add_button('Entr', self.tap, (-1,('\n','\e')), h, fd)
- b = self.add_button(gtk.STOCK_UNDO, self.tap, (-1,('\b','up')), h)
+ b = self.add_button('Entr', self.tap, (-1,('\n','\x1b')), h, fd)
+ b = self.add_button(gtk.STOCK_UNDO, self.tap, (-1,('\b','Up')), h)
# mode can be 'lower' or 'number'
# shift can be '' or '-shift'
self.set_button_images()
def set_button_images(self):
- mode = self.mode + self.shift
+ if (self.mode + self.shift) in keymap:
+ mode = self.mode + self.shift
+ else:
+ # probably -ctrl: no separe keymap
+ mode = self.mode
if self.image_mode == mode:
return
for row in range(3):
def tap(self, rc, moved):
(row,col) = rc
- m = self.mode + self.shift
+ if (self.mode + self.shift) in keymap:
+ m = self.mode + self.shift
+ else:
+ m = self.mode
if moved:
if moved == 2 and (self.mode + '-xtra') in keymap\
and keymap[self.mode + '-xtra'][row][col] != ' ':
sym = col[0]
else:
sym = keymap[m][row][col]
+ if self.shift == '-ctrl' and len(sym) == 1 and sym.isalpha():
+ sym = chr(ord(sym) & 31)
+
+ if sym in symmap:
+ sym = symmap[sym]
self.emit('key', sym)
if self.shift and not self.locked:
self.nextshift(True)
self.button_timeout = gobject.timeout_add(500, self.do_buttons)
def nextshift(self, a, moved=False):
- if self.shift == '' and not a:
+ if moved:
+ lbl = '(ctrl)'
+ self.shift = '-ctrl'
+ self.locked = False
+ elif self.shift == '' and not a:
self.shift = '-shift'
self.locked = False
lbl = 'Lock'
elif not self.locked and not a:
self.locked = True
lbl = 'UnLk'
+ if self.shift == '-ctrl':
+ lbl = '(ctrl-lock)'
else:
self.shift = ''
lbl = 'Shft'