1 |
|
|
2 |
import java, gzz |
import java, gzz |
3 |
|
|
4 |
class PythonBinder(gzz.client.FallbackBinder): |
MODES = ['normal', 'edit 0', 'edit 1', 'search'] |
|
def __init__(self, bindings): |
|
|
self.bindings = bindings |
|
5 |
|
|
6 |
def setFallback(client): |
class PythonBinder(gzz.client.FallbackBinder): |
7 |
|
def __init__(self, normal_mode, edit_mode, search_mode): |
8 |
|
self.normal_mode = normal_mode |
9 |
|
self.edit_mode = edit_mode |
10 |
|
self.search_mode = search_mode |
11 |
|
|
12 |
|
def setFallback(self, client): |
13 |
self.client = client |
self.client = client |
14 |
|
|
15 |
pendingOp = None |
pendingOp = None |
16 |
|
mode = 'normal' |
17 |
|
|
18 |
|
def getBindings(self): |
19 |
|
if self.mode == 'normal': |
20 |
|
return self.normal_mode |
21 |
|
|
22 |
|
elif self.mode in ['edit 0', 'edit 1']: |
23 |
|
return self.edit_mode |
24 |
|
|
25 |
|
elif self.mode == 'search': |
26 |
|
return self.search_mode |
27 |
|
|
28 |
|
else: |
29 |
|
assert 0 |
30 |
|
|
31 |
def keystroke(self, key, win): |
def keystroke(self, key, win): |
32 |
|
bindings = self.getBindings() |
33 |
|
|
34 |
try: |
try: |
35 |
op = self.bindings[key] |
op = bindings[key] |
36 |
|
|
37 |
except KeyError: |
except KeyError: |
38 |
print "Unbound key: ", key |
if len(key) == 1 and bindings.has_key('CHAR'): |
39 |
return |
op = bindings['CHAR'] |
40 |
|
op.key(State(self, win), key) |
41 |
|
|
42 |
|
elif bindings.has_key('DEFAULT'): |
43 |
|
op = bindings['DEFAULT'] |
44 |
|
op.key(State(self, win), key) |
45 |
|
|
46 |
|
else: |
47 |
|
print "Unbound key: ", key |
48 |
|
|
49 |
|
else: |
50 |
|
op.call(State(self, win)) |
51 |
|
|
52 |
op.call(State(self, win)) |
gzz.client.AbstractUpdateManager.chg() |
53 |
|
|
54 |
def mouse(self, event, win): |
def mouse(self, event, win): |
55 |
pass |
pass |
65 |
|
|
66 |
self.client = binder.client |
self.client = binder.client |
67 |
|
|
68 |
|
if self.binder.mode.startswith('edit '): |
69 |
|
if self.binder.mode == 'edit 0': |
70 |
|
self.editside = 0 |
71 |
|
elif self.binder.mode == 'edit 1': |
72 |
|
self.editside = 1 |
73 |
|
else: |
74 |
|
assert 0 |
75 |
|
|
76 |
|
self.editwin = self.client.windows[editside] |
77 |
|
self.editcell = self.editwin.cursor |
78 |
|
|
79 |
def getPendingOp(self): |
def getPendingOp(self): |
80 |
return self.client.pendingOp |
return self.binder.pendingOp |
81 |
|
|
82 |
def setPendingOp(self, op): |
def setPendingOp(self, op): |
83 |
self.client.pendingOp = op |
self.binder.pendingOp = op |
84 |
|
|
85 |
def getMarks(self): |
def getMarks(self): |
86 |
return list(gzz.view.DefaultBinder.marks) |
return list(gzz.view.DefaultBinder.marks) |
98 |
gzz.view.DefaultBinder.marks = l |
gzz.view.DefaultBinder.marks = l |
99 |
gzz.view.DefaultBinder.markedCells = s |
gzz.view.DefaultBinder.markedCells = s |
100 |
|
|
101 |
|
def setMode(self, mode): |
102 |
|
assert mode in MODES |
103 |
|
self.client.mode = mode |
104 |
|
|
105 |
def setDir(self, side, axis, dir): |
def setDir(self, side, axis, dir): |
106 |
self.side = side |
self.side = side |
107 |
self.axis = axis |
self.axis = axis |
108 |
self.dir = dir |
self.dir = dir |
109 |
|
|
110 |
self.win = self.client.windows[win] |
self.win = self.client.windows[side] |
111 |
self.cell = self.win.cursor |
self.cell = self.win.cursor |
112 |
self.dim = self.win.dims[axis] |
self.dim = self.win.dims[axis] |
113 |
self.new = self.cell.s(self.dim, self.dir) |
self.new = self.cell.s(self.dim, self.dir) |
118 |
if not self.new: |
if not self.new: |
119 |
raise gzz.client.ClientException( |
raise gzz.client.ClientException( |
120 |
"Sorry, but there's no cell %s cell '%s'" % |
"Sorry, but there's no cell %s cell '%s'" % |
121 |
[self.getDirString(), self.cell.t()]) |
(self.getDirString(), self.cell.t())) |
122 |
|
|
123 |
def getDirString(self): |
def getDirString(self): |
124 |
if self.dir < 0: dir = -1 |
if self.dir < 0: dir = -1 |