##// 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]
@@ -80,21 +82,29 b' class LeoNode(object):'
80 82 def get_h(self): return self.p.headString()
81 83 def set_h(self,val):
82 84 print "set head",val
85 c.beginUpdate()
86 try:
83 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 95 print "set body",val
96 c.beginUpdate()
97 try:
90 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,6 +140,9 b' def workbook_complete(obj, prev):'
130 140
131 141
132 142 def add_var(varname, value = _dummyval):
143 c.beginUpdate()
144 try:
145
133 146 nodename = '@ipy-var ' + varname
134 147 p2 = g.findNodeAnywhere(c,nodename)
135 148 if not c.positionExists(p2):
@@ -145,11 +158,15 b' def add_var(varname, value = _dummyval):'
145 158 formatted = format_for_leo(val)
146 159 c.setBodyString(p2,formatted)
147 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):
168 c.beginUpdate()
169 try:
153 170 ohist = ip.IP.output_hist
154 171 hstart = len(ip.IP.input_hist)
155 172 script = g.getScript(c,p,useSelectedText=False,forcePythonSentinels=False,useSentinels=False)
@@ -173,6 +190,8 b' def push_script(p):'
173 190
174 191 if not has_output:
175 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):
@@ -190,10 +209,6 b' def push_variable(p,varname):'
190 209 g.es('ipy var: %s' % (varname,), tabName = "IPython")
191 210
192 211 def push_from_leo(p):
193 # headstring without @ are just scripts
194 if not p.headString().startswith('@'):
195 push_script(p)
196 return
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':
@@ -201,15 +216,33 b' def push_from_leo(p):'
201 216 push_variable(p,varname)
202 217 return
203 218
219 push_script(p)
220 return
221
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