##// END OF EJS Templates
ipy_leo improvements (%leo opens a file as @auto file)
ville -
Show More
@@ -53,7 +53,9 b' def all_cells():'
53 53
54 54
55 55 class TrivialLeoWorkbook:
56 """ class to find cells """
56 """ class to find cells with simple syntax
57
58 """
57 59 def __getattr__(self, key):
58 60 cells = all_cells()
59 61 p = cells[key]
@@ -79,22 +81,30 b' class LeoNode(object):'
79 81
80 82 def get_h(self): return self.p.headString()
81 83 def set_h(self,val):
82 print "set head",val
83 c.setHeadString(self.p,val)
84 print "set head",val
85 c.beginUpdate()
86 try:
87 c.setHeadString(self.p,val)
88 finally:
89 c.endUpdate()
84 90
85 91 h = property( get_h, set_h)
86 92
87 93 def get_b(self): return self.p.bodyString()
88 94 def set_b(self,val):
89 print "set body",val
90 c.setBodyString(self.p, val)
95 print "set body",val
96 c.beginUpdate()
97 try:
98 c.setBodyString(self.p, val)
99 finally:
100 c.endUpdate()
91 101
92 102 b = property(get_b, set_b)
93 103
94 104 def set_val(self, val):
95 105 self.b = pprint.pformat(val)
96 106
97 val = property(lambda self: ip.ev(self.b.strip()), set_val)
107 v = property(lambda self: ip.ev(self.b.strip()), set_val)
98 108
99 109 def set_l(self,val):
100 110 self.b = '\n'.join(val )
@@ -130,49 +140,58 b' def workbook_complete(obj, prev):'
130 140
131 141
132 142 def add_var(varname, value = _dummyval):
133 nodename = '@ipy-var ' + varname
134 p2 = g.findNodeAnywhere(c,nodename)
135 if not c.positionExists(p2):
136 p2 = c.currentPosition().insertAfter()
137 c.setHeadString(p2,'@ipy ' + varname)
143 c.beginUpdate()
144 try:
138 145
139 c.setCurrentPosition(p2)
140 if value is _dummyval:
141 val = ip.user_ns[varname]
142 else:
143 val = value
144 if val is not None:
145 formatted = format_for_leo(val)
146 c.setBodyString(p2,formatted)
147 return p2
146 nodename = '@ipy-var ' + varname
147 p2 = g.findNodeAnywhere(c,nodename)
148 if not c.positionExists(p2):
149 p2 = c.currentPosition().insertAfter()
150 c.setHeadString(p2,'@ipy ' + varname)
151
152 c.setCurrentPosition(p2)
153 if value is _dummyval:
154 val = ip.user_ns[varname]
155 else:
156 val = value
157 if val is not None:
158 formatted = format_for_leo(val)
159 c.setBodyString(p2,formatted)
160 return p2
161 finally:
162 c.endUpdate()
148 163
149 164 def add_file(self,fname):
150 165 p2 = c.currentPosition().insertAfter()
151 166
152 167 def push_script(p):
153 ohist = ip.IP.output_hist
154 hstart = len(ip.IP.input_hist)
155 script = g.getScript(c,p,useSelectedText=False,forcePythonSentinels=False,useSentinels=False)
156
157 script = g.splitLines(script + '\n')
158 script = ''.join(z for z in script if z.strip())
159
160 ip.runlines(script)
161
162 has_output = False
163 for idx in range(hstart,len(ip.IP.input_hist)):
164 val = ohist.get(idx,None)
165 if val is None:
166 continue
167 has_output = True
168 inp = ip.IP.input_hist[idx]
169 if inp.strip():
170 g.es('In: %s' % (inp[:40], ), tabName = 'IPython')
171
172 g.es('<%d> %s' % (idx, pprint.pformat(ohist[idx],width = 40)), tabName = 'IPython')
173
174 if not has_output:
175 g.es('ipy run: %s' %( p.headString(),), tabName = 'IPython')
168 c.beginUpdate()
169 try:
170 ohist = ip.IP.output_hist
171 hstart = len(ip.IP.input_hist)
172 script = g.getScript(c,p,useSelectedText=False,forcePythonSentinels=False,useSentinels=False)
173
174 script = g.splitLines(script + '\n')
175 script = ''.join(z for z in script if z.strip())
176
177 ip.runlines(script)
178
179 has_output = False
180 for idx in range(hstart,len(ip.IP.input_hist)):
181 val = ohist.get(idx,None)
182 if val is None:
183 continue
184 has_output = True
185 inp = ip.IP.input_hist[idx]
186 if inp.strip():
187 g.es('In: %s' % (inp[:40], ), tabName = 'IPython')
188
189 g.es('<%d> %s' % (idx, pprint.pformat(ohist[idx],width = 40)), tabName = 'IPython')
190
191 if not has_output:
192 g.es('ipy run: %s' %( p.headString(),), tabName = 'IPython')
193 finally:
194 c.endUpdate()
176 195
177 196
178 197 def eval_body(body):
@@ -189,27 +208,41 b' def push_variable(p,varname):'
189 208 ip.user_ns[varname] = val
190 209 g.es('ipy var: %s' % (varname,), tabName = "IPython")
191 210
192 def push_from_leo(p):
193 # headstring without @ are just scripts
194 if not p.headString().startswith('@'):
195 push_script(p)
196 return
211 def push_from_leo(p):
197 212 tup = p.headString().split(None,1)
198 213 # @ipy foo is variable foo
199 214 if len(tup) == 2 and tup[0] == '@ipy':
200 215 varname = tup[1]
201 216 push_variable(p,varname)
202 217 return
218
219 push_script(p)
220 return
221
203 222
204 223 ip.user_ns['leox'].push = push_from_leo
205 224
206 225 def leo_f(self,s):
207 ip = self.getapi()
208 s = s.strip()
209 if s in ip.user_ns:
210 add_var(s)
211 elif os.path.isfile(s):
212 # todo open file
213 pass
226 """ open file(s) in Leo
227
228 Takes an mglob pattern, e.g. '%leo *.cpp' or %leo 'rec:*.cpp'
229 """
230 import os
231 from IPython.external import mglob
232
233 files = mglob.expand(s)
234 c.beginUpdate()
235 try:
236 for fname in files:
237 p = g.findNodeAnywhere(c,'@auto ' + fname)
238 if not p:
239 p = c.currentPosition().insertAfter()
240
241 p.setHeadString('@auto ' + fname)
242 if os.path.isfile(fname):
243 c.setBodyString(p,open(fname).read())
244 c.selectPosition(p)
245 finally:
246 c.endUpdate()
214 247
215 248 ip.expose_magic('leo',leo_f)
General Comments 0
You need to be logged in to leave comments. Login now