##// END OF EJS Templates
ipy_leo: handle @ipy varname on leox.push()
ipy_leo: handle @ipy varname on leox.push()

File last commit:

r982:8920c110
r982:8920c110
Show More
ipy_leo.py
80 lines | 2.1 KiB | text/x-python | PythonLexer
import IPython.ipapi
import IPython.genutils
ip = IPython.ipapi.get()
leo = ip.user_ns['leox']
c,g = leo.c, leo.g
from IPython.external.simplegeneric import generic
import pprint
@generic
def format_for_leo(obj):
""" Convert obj to string representiation (for editing in Leo)"""
return pprint.pformat(obj)
@format_for_leo.when_type(list)
def format_list(obj):
return '@ipy-type list\n' + "\n".join(str(s) for s in obj)
def add_var(self,varname):
nodename = '@ipy-var ' + varname
p2 = g.findNodeAnywhere(c,nodename)
if not c.positionExists(p2):
p2 = c.currentPosition().insertAfter()
c.setHeadString(p2,'@ipy-var ' + varname)
c.setCurrentPosition(p2)
val = ip.user_ns[varname]
formatted = format_for_leo(val)
c.setBodyString(p2,formatted)
def add_file(self,fname):
p2 = c.currentPosition().insertAfter()
def push_script(p):
script = g.getScript(c,p,useSelectedText=False,forcePythonSentinels=True,useSentinels=True)
script = g.splitLines(script + '\n')
script = ''.join(z for z in script if z.strip())
ip.runlines(script)
print "- Script end -"
def eval_body(body):
print "eval",body
try:
val = ip.ev(body)
except:
# just use stringlist if it's not completely legal python expression
val = IPython.genutils.SList(body.splitlines())
return val
def push_variable(p,varname):
body = p.bodyString()
val = eval_body(body.strip())
ip.user_ns[varname] = val
def push_from_leo(p):
# headstring without @ are just scripts
if not p.headString().startswith('@'):
push_script(p)
return
tup = p.headString().split(None,1)
# @ipy foo is variable foo
if len(tup) == 2 and tup[0] == '@ipy':
varname = tup[1]
push_variable(p,varname)
return
ip.user_ns['leox'].push = push_from_leo
def leo_f(self,s):
ip = self.getapi()
s = s.strip()
if s in ip.user_ns:
add_var(self,s)
elif os.path.isfile(s):
# todo open file
pass
ip.expose_magic('leo',leo_f)