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, ignore_keys = ()):
17 Views.View.__init__(self, context, label, x, y, dx, dy )
19 self._ignore_keys = ignore_keys
21 def updateView(self, bindings):
24 keys = bindings.keys()
29 keyname = curses.keyname(key.code)
30 if keyname.startswith('KEY_'):
31 keyname = '%s' % keyname[4:10].lower()
32 if keyname[-2:-1] == '^':
33 keyname = '%sC-%s' % (keyname[:-2],keyname[-1:].lower())
34 if curses.ascii.isupper(ord(keyname[-1:])):
35 keyname = '%sS-%s' % (keyname[:-1],keyname[-1:].lower())
36 if keyname in self._ignore_keys : continue
37 self.win().addstr(row, column, '%-6s %s'
38 % (keyname, bindings[key].label[:self._size]))
42 column += self._size+10
43 if column+self._size+7 >= self.dx : break
44 self.win().vline(1,column-2,curses.ACS_VLINE,self.dy-2)
45 self.win().nooutrefresh()
47 def register( viewmanager,
57 viewmanager.registerView( View(context, label, x,y,dx,dy,size,ignore_keys) )
58 dispatcher.registerSource( Source(context, viewmanager.win()) )