1
# -*- coding: utf-8 -*-
2
""" %env magic command for storing environment variables persistently
6
ip = IPython.ipapi.get()
10
def restore_env(self):
12
env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
13
for k,v in env['set'].items():
15
for k,v in env['add']:
16
os.environ[k] = os.environ.get(k,"") + v
17
for k,v in env['pre']:
18
os.environ[k] = v + os.environ.get(k,"")
19
raise IPython.ipapi.TryNext
21
ip.set_hook('late_startup_hook', restore_env)
23
def persist_env(self, parameter_s=''):
24
""" Store environment variables persistently
26
IPython remembers the values across sessions, which is handy to avoid
27
editing startup files.
29
%env - Show all environment variables
30
%env VISUAL=jed - set VISUAL to jed
31
%env PATH+=;/foo - append ;foo to PATH
32
%env PATH+=;/bar - also append ;bar to PATH
33
%env PATH-=/wbin; - prepend /wbin; to PATH
34
%env -d VISUAL - forget VISUAL persistent val
35
%env -p - print all persistent env modifications
38
if not parameter_s.strip():
39
return os.environ.data
43
env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
45
if parameter_s.startswith('-p'):
48
elif parameter_s.startswith('-d'):
49
parts = (parameter_s.split()[1], '<del>')
52
parts = parameter_s.strip().split('=')
55
k,v = [p.strip() for p in parts]
60
env['add'] = [el for el in env['add'] if el[0] != k]
61
env['pre'] = [el for el in env['pre'] if el[0] != k]
63
print "Forgot '%s' (for next session)" % k
67
env['add'].append((k,v))
69
print k,"after append =",os.environ[k]
72
env['pre'].append((k,v))
73
os.environ[k] = v + os.environ.get(k,"")
74
print k,"after prepend =",os.environ[k]
79
print "Setting",k,"to",v
82
db['stored_env'] = env
84
def env_completer(self,event):
85
""" Custom completer that lists all env vars """
86
return os.environ.keys()
88
ip.expose_magic('env', persist_env)
89
ip.set_hook('complete_command',env_completer, str_key = '%env')