2 import sys, curses, curses.ascii
4 class Source(Events.EventSource):
6 def __init__(self, context, win):
7 Events.EventSource.__init__(self, sys.stdin, context)
11 return [Events.Event(self.context(), self._win.getch())]
14 class View(Views.View):
16 def __init__(self, context, label, x, y, dx, dy, size=9):
17 Views.View.__init__(self, context, label, x, y, dx, dy)
20 def updateView(self, bindings):
23 keys = bindings.keys()
28 keyname = curses.keyname(key.code)
29 if keyname.startswith('KEY_'):
30 keyname = '%s' % keyname[4:10].lower()
31 if keyname[-2:-1] == '^':
32 keyname = '%sC-%s' % (keyname[:-2],keyname[-1:].lower())
33 if curses.ascii.isupper(ord(keyname[-1:])):
34 keyname = '%sS-%s' % (keyname[:-1],keyname[-1:].lower())
35 self.win().addstr(row, column, '%-6s %s'
36 % (keyname, bindings[key].label[:self._size]))
40 column += self._size+10
41 if column+self._size+7 >= self.dx : break
42 self.win().vline(1,column-2,curses.ACS_VLINE,self.dy-2)
43 self.win().nooutrefresh()
45 def register( viewmanager,
53 viewmanager.registerView( View(context, label, x,y,dx,dy) )
54 dispatcher.registerSource( Source(context, viewmanager.win()) )