3 class Action(Node.Node):
5 def __init__(self, name):
6 Node.Node.__init__(self)
9 def __call__(self, binding):
10 raise NotImplementedError()
14 for binding in self.owners
15 if isinstance(binding, Bindings.Binding) ]
18 class _ActionRegistry(object):
23 def register(self, action):
24 self._registry[action.name] = action
26 def __getitem__(self, key):
27 return self._registry[key]
29 Actions = _ActionRegistry()
34 def __init__(self, name='nop'):
35 Action.__init__(self, name)
37 def __call__(self, binding):
43 _actions = Node.NodeList()
45 def __init__(self, name, actions):
46 Action.__init__(self, name)
47 for i in range(len(actions)):
48 if type(actions[i]) is str:
49 actions[i] = Actions[actions[i]]
50 self._actions = actions
52 def __call__(self, binding):
53 for action in self._actions:
56 class Command(Action):
58 def __init__(self, name, callable):
59 Action.__init__(self, name)
60 self._callable = callable
62 def __call__(self, binding):
63 self._callable(binding)
66 class ChangeBindingsAbsolute(Action):
68 def __init__(self, name, mapIndex, keymaps):
69 Action.__init__(self, name)
70 self._mapIndex = mapIndex
71 self._keymaps = keymaps
73 def __call__(self, binding):
74 binding.keymap().keylist().replaceFromIndex(self._mapIndex, self._keymaps)
77 class ChangeBindingsRelative(Action):
79 def __init__(self, name, mapIndex, keymaps):
80 Action.__init__(self, name)
81 self._mapIndex = mapIndex
82 self._keymaps = keymaps
84 def __call__(self, binding):
85 keymap = binding.keymap()
86 keymap.keylist().replaceFromIndex(keymap.index()+self._mapIndex, self._keymaps)
89 action = Command(func.__name__, func)
90 Actions.register(action)