##// END OF EJS Templates
TryNext editor if editor hook fails. Patch by Lukasz Pankowski
Ville M. Vainio -
Show More
@@ -1,84 +1,85 b''
1 """ 'editor' hooks for common editors that work well with ipython
1 """ 'editor' hooks for common editors that work well with ipython
2
2
3 They should honor the line number argument, at least.
3 They should honor the line number argument, at least.
4
4
5 Contributions are *very* welcome.
5 Contributions are *very* welcome.
6 """
6 """
7
7
8 import IPython.ipapi
8 import IPython.ipapi
9 ip = IPython.ipapi.get()
9 ip = IPython.ipapi.get()
10
10
11 from IPython.Itpl import itplns
11 from IPython.Itpl import itplns
12 import os
12 import os
13
13
14 def install_editor(run_template, wait = False):
14 def install_editor(run_template, wait = False):
15 """ Gets a template in format "myeditor bah bah $file bah bah $line"
15 """ Gets a template in format "myeditor bah bah $file bah bah $line"
16
16
17 $file will be replaced by file name, $line by line number (or 0).
17 $file will be replaced by file name, $line by line number (or 0).
18 Installs the editor that is called by IPython, instead of the default
18 Installs the editor that is called by IPython, instead of the default
19 notepad or vi.
19 notepad or vi.
20
20
21 If wait is true, wait until the user presses enter before returning,
21 If wait is true, wait until the user presses enter before returning,
22 to facilitate non-blocking editors that exit immediately after
22 to facilitate non-blocking editors that exit immediately after
23 the call.
23 the call.
24 """
24 """
25
25
26 def call_editor(self, file, line=0):
26 def call_editor(self, file, line=0):
27 if line is None:
27 if line is None:
28 line = 0
28 line = 0
29 cmd = itplns(run_template, locals())
29 cmd = itplns(run_template, locals())
30 print ">",cmd
30 print ">",cmd
31 os.system(cmd)
31 if os.system(cmd) != 0:
32 raise IPython.ipapi.TryNext()
32 if wait:
33 if wait:
33 raw_input("Press Enter when done editing:")
34 raw_input("Press Enter when done editing:")
34
35
35 ip.set_hook('editor',call_editor)
36 ip.set_hook('editor',call_editor)
36
37
37
38
38 # in these, exe is always the path/name of the executable. Useful
39 # in these, exe is always the path/name of the executable. Useful
39 # if you don't have the editor directory in your path
40 # if you don't have the editor directory in your path
40
41
41 def komodo(exe = 'komodo'):
42 def komodo(exe = 'komodo'):
42 """ Activestate Komodo [Edit] """
43 """ Activestate Komodo [Edit] """
43 install_editor(exe + ' -l $line "$file"', wait = True)
44 install_editor(exe + ' -l $line "$file"', wait = True)
44
45
45 def scite(exe = "scite"):
46 def scite(exe = "scite"):
46 """ SciTE or Sc1 """
47 """ SciTE or Sc1 """
47 install_editor(exe + ' "$file" -goto:$line')
48 install_editor(exe + ' "$file" -goto:$line')
48
49
49 def notepadplusplus(exe = 'notepad++'):
50 def notepadplusplus(exe = 'notepad++'):
50 """ Notepad++ http://notepad-plus.sourceforge.net """
51 """ Notepad++ http://notepad-plus.sourceforge.net """
51 install_editor(exe + ' -n$line "$file"')
52 install_editor(exe + ' -n$line "$file"')
52
53
53 def jed(exe = 'jed'):
54 def jed(exe = 'jed'):
54 """ JED, the lightweight emacsish editor """
55 """ JED, the lightweight emacsish editor """
55 install_editor(exe + ' +$line "$file"')
56 install_editor(exe + ' +$line "$file"')
56
57
57 def idle(exe = None):
58 def idle(exe = None):
58 """ Idle, the editor bundled with python
59 """ Idle, the editor bundled with python
59
60
60 Should be pretty smart about finding the executable.
61 Should be pretty smart about finding the executable.
61 """
62 """
62 if exe is None:
63 if exe is None:
63 import idlelib
64 import idlelib
64 p = os.path.dirname(idlelib.__file__)
65 p = os.path.dirname(idlelib.__file__)
65 exe = p + '/idle.py'
66 exe = p + '/idle.py'
66 install_editor(exe + ' "$file"')
67 install_editor(exe + ' "$file"')
67
68
68
69
69 # these are untested, report any problems
70 # these are untested, report any problems
70
71
71 def emacs(exe = 'emacs'):
72 def emacs(exe = 'emacs'):
72 install_editor(exe + ' +$line "$file"')
73 install_editor(exe + ' +$line "$file"')
73
74
74 def gnuclient(exe= 'gnuclient'):
75 def gnuclient(exe= 'gnuclient'):
75 install_editor(exe + ' -nw +$line "$file"')
76 install_editor(exe + ' -nw +$line "$file"')
76
77
77 def crimson_editor(exe = 'cedt.exe'):
78 def crimson_editor(exe = 'cedt.exe'):
78 install_editor(exe + ' /L:$line "$file"')
79 install_editor(exe + ' /L:$line "$file"')
79
80
80 def kate(exe = 'kate'):
81 def kate(exe = 'kate'):
81 install_editor(exe + ' -u -l $line "$file"')
82 install_editor(exe + ' -u -l $line "$file"')
82
83
83
84
84 No newline at end of file
85
@@ -1,3401 +1,3405 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 2996 2008-01-30 06:31:39Z fperez $"""
4 $Id: Magic.py 2996 2008-01-30 06:31:39Z fperez $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38 from sets import Set
38 from sets import Set
39
39
40 # cProfile was added in Python2.5
40 # cProfile was added in Python2.5
41 try:
41 try:
42 import cProfile as profile
42 import cProfile as profile
43 import pstats
43 import pstats
44 except ImportError:
44 except ImportError:
45 # profile isn't bundled by default in Debian for license reasons
45 # profile isn't bundled by default in Debian for license reasons
46 try:
46 try:
47 import profile,pstats
47 import profile,pstats
48 except ImportError:
48 except ImportError:
49 profile = pstats = None
49 profile = pstats = None
50
50
51 # Homebrewed
51 # Homebrewed
52 import IPython
52 import IPython
53 from IPython import Debugger, OInspect, wildcard
53 from IPython import Debugger, OInspect, wildcard
54 from IPython.FakeModule import FakeModule
54 from IPython.FakeModule import FakeModule
55 from IPython.Itpl import Itpl, itpl, printpl,itplns
55 from IPython.Itpl import Itpl, itpl, printpl,itplns
56 from IPython.PyColorize import Parser
56 from IPython.PyColorize import Parser
57 from IPython.ipstruct import Struct
57 from IPython.ipstruct import Struct
58 from IPython.macro import Macro
58 from IPython.macro import Macro
59 from IPython.genutils import *
59 from IPython.genutils import *
60 from IPython import platutils
60 from IPython import platutils
61 import IPython.generics
61 import IPython.generics
62 import IPython.ipapi
62 import IPython.ipapi
63 from IPython.ipapi import UsageError
63 from IPython.ipapi import UsageError
64 from IPython.testing import decorators as testdec
64 from IPython.testing import decorators as testdec
65
65
66 #***************************************************************************
66 #***************************************************************************
67 # Utility functions
67 # Utility functions
68 def on_off(tag):
68 def on_off(tag):
69 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
69 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
70 return ['OFF','ON'][tag]
70 return ['OFF','ON'][tag]
71
71
72 class Bunch: pass
72 class Bunch: pass
73
73
74 def compress_dhist(dh):
74 def compress_dhist(dh):
75 head, tail = dh[:-10], dh[-10:]
75 head, tail = dh[:-10], dh[-10:]
76
76
77 newhead = []
77 newhead = []
78 done = Set()
78 done = Set()
79 for h in head:
79 for h in head:
80 if h in done:
80 if h in done:
81 continue
81 continue
82 newhead.append(h)
82 newhead.append(h)
83 done.add(h)
83 done.add(h)
84
84
85 return newhead + tail
85 return newhead + tail
86
86
87
87
88 #***************************************************************************
88 #***************************************************************************
89 # Main class implementing Magic functionality
89 # Main class implementing Magic functionality
90 class Magic:
90 class Magic:
91 """Magic functions for InteractiveShell.
91 """Magic functions for InteractiveShell.
92
92
93 Shell functions which can be reached as %function_name. All magic
93 Shell functions which can be reached as %function_name. All magic
94 functions should accept a string, which they can parse for their own
94 functions should accept a string, which they can parse for their own
95 needs. This can make some functions easier to type, eg `%cd ../`
95 needs. This can make some functions easier to type, eg `%cd ../`
96 vs. `%cd("../")`
96 vs. `%cd("../")`
97
97
98 ALL definitions MUST begin with the prefix magic_. The user won't need it
98 ALL definitions MUST begin with the prefix magic_. The user won't need it
99 at the command line, but it is is needed in the definition. """
99 at the command line, but it is is needed in the definition. """
100
100
101 # class globals
101 # class globals
102 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
102 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
103 'Automagic is ON, % prefix NOT needed for magic functions.']
103 'Automagic is ON, % prefix NOT needed for magic functions.']
104
104
105 #......................................................................
105 #......................................................................
106 # some utility functions
106 # some utility functions
107
107
108 def __init__(self,shell):
108 def __init__(self,shell):
109
109
110 self.options_table = {}
110 self.options_table = {}
111 if profile is None:
111 if profile is None:
112 self.magic_prun = self.profile_missing_notice
112 self.magic_prun = self.profile_missing_notice
113 self.shell = shell
113 self.shell = shell
114
114
115 # namespace for holding state we may need
115 # namespace for holding state we may need
116 self._magic_state = Bunch()
116 self._magic_state = Bunch()
117
117
118 def profile_missing_notice(self, *args, **kwargs):
118 def profile_missing_notice(self, *args, **kwargs):
119 error("""\
119 error("""\
120 The profile module could not be found. It has been removed from the standard
120 The profile module could not be found. It has been removed from the standard
121 python packages because of its non-free license. To use profiling, install the
121 python packages because of its non-free license. To use profiling, install the
122 python-profiler package from non-free.""")
122 python-profiler package from non-free.""")
123
123
124 def default_option(self,fn,optstr):
124 def default_option(self,fn,optstr):
125 """Make an entry in the options_table for fn, with value optstr"""
125 """Make an entry in the options_table for fn, with value optstr"""
126
126
127 if fn not in self.lsmagic():
127 if fn not in self.lsmagic():
128 error("%s is not a magic function" % fn)
128 error("%s is not a magic function" % fn)
129 self.options_table[fn] = optstr
129 self.options_table[fn] = optstr
130
130
131 def lsmagic(self):
131 def lsmagic(self):
132 """Return a list of currently available magic functions.
132 """Return a list of currently available magic functions.
133
133
134 Gives a list of the bare names after mangling (['ls','cd', ...], not
134 Gives a list of the bare names after mangling (['ls','cd', ...], not
135 ['magic_ls','magic_cd',...]"""
135 ['magic_ls','magic_cd',...]"""
136
136
137 # FIXME. This needs a cleanup, in the way the magics list is built.
137 # FIXME. This needs a cleanup, in the way the magics list is built.
138
138
139 # magics in class definition
139 # magics in class definition
140 class_magic = lambda fn: fn.startswith('magic_') and \
140 class_magic = lambda fn: fn.startswith('magic_') and \
141 callable(Magic.__dict__[fn])
141 callable(Magic.__dict__[fn])
142 # in instance namespace (run-time user additions)
142 # in instance namespace (run-time user additions)
143 inst_magic = lambda fn: fn.startswith('magic_') and \
143 inst_magic = lambda fn: fn.startswith('magic_') and \
144 callable(self.__dict__[fn])
144 callable(self.__dict__[fn])
145 # and bound magics by user (so they can access self):
145 # and bound magics by user (so they can access self):
146 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
146 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
147 callable(self.__class__.__dict__[fn])
147 callable(self.__class__.__dict__[fn])
148 magics = filter(class_magic,Magic.__dict__.keys()) + \
148 magics = filter(class_magic,Magic.__dict__.keys()) + \
149 filter(inst_magic,self.__dict__.keys()) + \
149 filter(inst_magic,self.__dict__.keys()) + \
150 filter(inst_bound_magic,self.__class__.__dict__.keys())
150 filter(inst_bound_magic,self.__class__.__dict__.keys())
151 out = []
151 out = []
152 for fn in Set(magics):
152 for fn in Set(magics):
153 out.append(fn.replace('magic_','',1))
153 out.append(fn.replace('magic_','',1))
154 out.sort()
154 out.sort()
155 return out
155 return out
156
156
157 def extract_input_slices(self,slices,raw=False):
157 def extract_input_slices(self,slices,raw=False):
158 """Return as a string a set of input history slices.
158 """Return as a string a set of input history slices.
159
159
160 Inputs:
160 Inputs:
161
161
162 - slices: the set of slices is given as a list of strings (like
162 - slices: the set of slices is given as a list of strings (like
163 ['1','4:8','9'], since this function is for use by magic functions
163 ['1','4:8','9'], since this function is for use by magic functions
164 which get their arguments as strings.
164 which get their arguments as strings.
165
165
166 Optional inputs:
166 Optional inputs:
167
167
168 - raw(False): by default, the processed input is used. If this is
168 - raw(False): by default, the processed input is used. If this is
169 true, the raw input history is used instead.
169 true, the raw input history is used instead.
170
170
171 Note that slices can be called with two notations:
171 Note that slices can be called with two notations:
172
172
173 N:M -> standard python form, means including items N...(M-1).
173 N:M -> standard python form, means including items N...(M-1).
174
174
175 N-M -> include items N..M (closed endpoint)."""
175 N-M -> include items N..M (closed endpoint)."""
176
176
177 if raw:
177 if raw:
178 hist = self.shell.input_hist_raw
178 hist = self.shell.input_hist_raw
179 else:
179 else:
180 hist = self.shell.input_hist
180 hist = self.shell.input_hist
181
181
182 cmds = []
182 cmds = []
183 for chunk in slices:
183 for chunk in slices:
184 if ':' in chunk:
184 if ':' in chunk:
185 ini,fin = map(int,chunk.split(':'))
185 ini,fin = map(int,chunk.split(':'))
186 elif '-' in chunk:
186 elif '-' in chunk:
187 ini,fin = map(int,chunk.split('-'))
187 ini,fin = map(int,chunk.split('-'))
188 fin += 1
188 fin += 1
189 else:
189 else:
190 ini = int(chunk)
190 ini = int(chunk)
191 fin = ini+1
191 fin = ini+1
192 cmds.append(hist[ini:fin])
192 cmds.append(hist[ini:fin])
193 return cmds
193 return cmds
194
194
195 def _ofind(self, oname, namespaces=None):
195 def _ofind(self, oname, namespaces=None):
196 """Find an object in the available namespaces.
196 """Find an object in the available namespaces.
197
197
198 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
198 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
199
199
200 Has special code to detect magic functions.
200 Has special code to detect magic functions.
201 """
201 """
202
202
203 oname = oname.strip()
203 oname = oname.strip()
204
204
205 alias_ns = None
205 alias_ns = None
206 if namespaces is None:
206 if namespaces is None:
207 # Namespaces to search in:
207 # Namespaces to search in:
208 # Put them in a list. The order is important so that we
208 # Put them in a list. The order is important so that we
209 # find things in the same order that Python finds them.
209 # find things in the same order that Python finds them.
210 namespaces = [ ('Interactive', self.shell.user_ns),
210 namespaces = [ ('Interactive', self.shell.user_ns),
211 ('IPython internal', self.shell.internal_ns),
211 ('IPython internal', self.shell.internal_ns),
212 ('Python builtin', __builtin__.__dict__),
212 ('Python builtin', __builtin__.__dict__),
213 ('Alias', self.shell.alias_table),
213 ('Alias', self.shell.alias_table),
214 ]
214 ]
215 alias_ns = self.shell.alias_table
215 alias_ns = self.shell.alias_table
216
216
217 # initialize results to 'null'
217 # initialize results to 'null'
218 found = 0; obj = None; ospace = None; ds = None;
218 found = 0; obj = None; ospace = None; ds = None;
219 ismagic = 0; isalias = 0; parent = None
219 ismagic = 0; isalias = 0; parent = None
220
220
221 # Look for the given name by splitting it in parts. If the head is
221 # Look for the given name by splitting it in parts. If the head is
222 # found, then we look for all the remaining parts as members, and only
222 # found, then we look for all the remaining parts as members, and only
223 # declare success if we can find them all.
223 # declare success if we can find them all.
224 oname_parts = oname.split('.')
224 oname_parts = oname.split('.')
225 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
225 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
226 for nsname,ns in namespaces:
226 for nsname,ns in namespaces:
227 try:
227 try:
228 obj = ns[oname_head]
228 obj = ns[oname_head]
229 except KeyError:
229 except KeyError:
230 continue
230 continue
231 else:
231 else:
232 #print 'oname_rest:', oname_rest # dbg
232 #print 'oname_rest:', oname_rest # dbg
233 for part in oname_rest:
233 for part in oname_rest:
234 try:
234 try:
235 parent = obj
235 parent = obj
236 obj = getattr(obj,part)
236 obj = getattr(obj,part)
237 except:
237 except:
238 # Blanket except b/c some badly implemented objects
238 # Blanket except b/c some badly implemented objects
239 # allow __getattr__ to raise exceptions other than
239 # allow __getattr__ to raise exceptions other than
240 # AttributeError, which then crashes IPython.
240 # AttributeError, which then crashes IPython.
241 break
241 break
242 else:
242 else:
243 # If we finish the for loop (no break), we got all members
243 # If we finish the for loop (no break), we got all members
244 found = 1
244 found = 1
245 ospace = nsname
245 ospace = nsname
246 if ns == alias_ns:
246 if ns == alias_ns:
247 isalias = 1
247 isalias = 1
248 break # namespace loop
248 break # namespace loop
249
249
250 # Try to see if it's magic
250 # Try to see if it's magic
251 if not found:
251 if not found:
252 if oname.startswith(self.shell.ESC_MAGIC):
252 if oname.startswith(self.shell.ESC_MAGIC):
253 oname = oname[1:]
253 oname = oname[1:]
254 obj = getattr(self,'magic_'+oname,None)
254 obj = getattr(self,'magic_'+oname,None)
255 if obj is not None:
255 if obj is not None:
256 found = 1
256 found = 1
257 ospace = 'IPython internal'
257 ospace = 'IPython internal'
258 ismagic = 1
258 ismagic = 1
259
259
260 # Last try: special-case some literals like '', [], {}, etc:
260 # Last try: special-case some literals like '', [], {}, etc:
261 if not found and oname_head in ["''",'""','[]','{}','()']:
261 if not found and oname_head in ["''",'""','[]','{}','()']:
262 obj = eval(oname_head)
262 obj = eval(oname_head)
263 found = 1
263 found = 1
264 ospace = 'Interactive'
264 ospace = 'Interactive'
265
265
266 return {'found':found, 'obj':obj, 'namespace':ospace,
266 return {'found':found, 'obj':obj, 'namespace':ospace,
267 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
267 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
268
268
269 def arg_err(self,func):
269 def arg_err(self,func):
270 """Print docstring if incorrect arguments were passed"""
270 """Print docstring if incorrect arguments were passed"""
271 print 'Error in arguments:'
271 print 'Error in arguments:'
272 print OInspect.getdoc(func)
272 print OInspect.getdoc(func)
273
273
274 def format_latex(self,strng):
274 def format_latex(self,strng):
275 """Format a string for latex inclusion."""
275 """Format a string for latex inclusion."""
276
276
277 # Characters that need to be escaped for latex:
277 # Characters that need to be escaped for latex:
278 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
278 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
279 # Magic command names as headers:
279 # Magic command names as headers:
280 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
280 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
281 re.MULTILINE)
281 re.MULTILINE)
282 # Magic commands
282 # Magic commands
283 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
283 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
284 re.MULTILINE)
284 re.MULTILINE)
285 # Paragraph continue
285 # Paragraph continue
286 par_re = re.compile(r'\\$',re.MULTILINE)
286 par_re = re.compile(r'\\$',re.MULTILINE)
287
287
288 # The "\n" symbol
288 # The "\n" symbol
289 newline_re = re.compile(r'\\n')
289 newline_re = re.compile(r'\\n')
290
290
291 # Now build the string for output:
291 # Now build the string for output:
292 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
292 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
293 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
293 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
294 strng)
294 strng)
295 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
295 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
296 strng = par_re.sub(r'\\\\',strng)
296 strng = par_re.sub(r'\\\\',strng)
297 strng = escape_re.sub(r'\\\1',strng)
297 strng = escape_re.sub(r'\\\1',strng)
298 strng = newline_re.sub(r'\\textbackslash{}n',strng)
298 strng = newline_re.sub(r'\\textbackslash{}n',strng)
299 return strng
299 return strng
300
300
301 def format_screen(self,strng):
301 def format_screen(self,strng):
302 """Format a string for screen printing.
302 """Format a string for screen printing.
303
303
304 This removes some latex-type format codes."""
304 This removes some latex-type format codes."""
305 # Paragraph continue
305 # Paragraph continue
306 par_re = re.compile(r'\\$',re.MULTILINE)
306 par_re = re.compile(r'\\$',re.MULTILINE)
307 strng = par_re.sub('',strng)
307 strng = par_re.sub('',strng)
308 return strng
308 return strng
309
309
310 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
310 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
311 """Parse options passed to an argument string.
311 """Parse options passed to an argument string.
312
312
313 The interface is similar to that of getopt(), but it returns back a
313 The interface is similar to that of getopt(), but it returns back a
314 Struct with the options as keys and the stripped argument string still
314 Struct with the options as keys and the stripped argument string still
315 as a string.
315 as a string.
316
316
317 arg_str is quoted as a true sys.argv vector by using shlex.split.
317 arg_str is quoted as a true sys.argv vector by using shlex.split.
318 This allows us to easily expand variables, glob files, quote
318 This allows us to easily expand variables, glob files, quote
319 arguments, etc.
319 arguments, etc.
320
320
321 Options:
321 Options:
322 -mode: default 'string'. If given as 'list', the argument string is
322 -mode: default 'string'. If given as 'list', the argument string is
323 returned as a list (split on whitespace) instead of a string.
323 returned as a list (split on whitespace) instead of a string.
324
324
325 -list_all: put all option values in lists. Normally only options
325 -list_all: put all option values in lists. Normally only options
326 appearing more than once are put in a list.
326 appearing more than once are put in a list.
327
327
328 -posix (True): whether to split the input line in POSIX mode or not,
328 -posix (True): whether to split the input line in POSIX mode or not,
329 as per the conventions outlined in the shlex module from the
329 as per the conventions outlined in the shlex module from the
330 standard library."""
330 standard library."""
331
331
332 # inject default options at the beginning of the input line
332 # inject default options at the beginning of the input line
333 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
333 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
334 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
334 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
335
335
336 mode = kw.get('mode','string')
336 mode = kw.get('mode','string')
337 if mode not in ['string','list']:
337 if mode not in ['string','list']:
338 raise ValueError,'incorrect mode given: %s' % mode
338 raise ValueError,'incorrect mode given: %s' % mode
339 # Get options
339 # Get options
340 list_all = kw.get('list_all',0)
340 list_all = kw.get('list_all',0)
341 posix = kw.get('posix',True)
341 posix = kw.get('posix',True)
342
342
343 # Check if we have more than one argument to warrant extra processing:
343 # Check if we have more than one argument to warrant extra processing:
344 odict = {} # Dictionary with options
344 odict = {} # Dictionary with options
345 args = arg_str.split()
345 args = arg_str.split()
346 if len(args) >= 1:
346 if len(args) >= 1:
347 # If the list of inputs only has 0 or 1 thing in it, there's no
347 # If the list of inputs only has 0 or 1 thing in it, there's no
348 # need to look for options
348 # need to look for options
349 argv = arg_split(arg_str,posix)
349 argv = arg_split(arg_str,posix)
350 # Do regular option processing
350 # Do regular option processing
351 try:
351 try:
352 opts,args = getopt(argv,opt_str,*long_opts)
352 opts,args = getopt(argv,opt_str,*long_opts)
353 except GetoptError,e:
353 except GetoptError,e:
354 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
354 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
355 " ".join(long_opts)))
355 " ".join(long_opts)))
356 for o,a in opts:
356 for o,a in opts:
357 if o.startswith('--'):
357 if o.startswith('--'):
358 o = o[2:]
358 o = o[2:]
359 else:
359 else:
360 o = o[1:]
360 o = o[1:]
361 try:
361 try:
362 odict[o].append(a)
362 odict[o].append(a)
363 except AttributeError:
363 except AttributeError:
364 odict[o] = [odict[o],a]
364 odict[o] = [odict[o],a]
365 except KeyError:
365 except KeyError:
366 if list_all:
366 if list_all:
367 odict[o] = [a]
367 odict[o] = [a]
368 else:
368 else:
369 odict[o] = a
369 odict[o] = a
370
370
371 # Prepare opts,args for return
371 # Prepare opts,args for return
372 opts = Struct(odict)
372 opts = Struct(odict)
373 if mode == 'string':
373 if mode == 'string':
374 args = ' '.join(args)
374 args = ' '.join(args)
375
375
376 return opts,args
376 return opts,args
377
377
378 #......................................................................
378 #......................................................................
379 # And now the actual magic functions
379 # And now the actual magic functions
380
380
381 # Functions for IPython shell work (vars,funcs, config, etc)
381 # Functions for IPython shell work (vars,funcs, config, etc)
382 def magic_lsmagic(self, parameter_s = ''):
382 def magic_lsmagic(self, parameter_s = ''):
383 """List currently available magic functions."""
383 """List currently available magic functions."""
384 mesc = self.shell.ESC_MAGIC
384 mesc = self.shell.ESC_MAGIC
385 print 'Available magic functions:\n'+mesc+\
385 print 'Available magic functions:\n'+mesc+\
386 (' '+mesc).join(self.lsmagic())
386 (' '+mesc).join(self.lsmagic())
387 print '\n' + Magic.auto_status[self.shell.rc.automagic]
387 print '\n' + Magic.auto_status[self.shell.rc.automagic]
388 return None
388 return None
389
389
390 def magic_magic(self, parameter_s = ''):
390 def magic_magic(self, parameter_s = ''):
391 """Print information about the magic function system.
391 """Print information about the magic function system.
392
392
393 Supported formats: -latex, -brief, -rest
393 Supported formats: -latex, -brief, -rest
394 """
394 """
395
395
396 mode = ''
396 mode = ''
397 try:
397 try:
398 if parameter_s.split()[0] == '-latex':
398 if parameter_s.split()[0] == '-latex':
399 mode = 'latex'
399 mode = 'latex'
400 if parameter_s.split()[0] == '-brief':
400 if parameter_s.split()[0] == '-brief':
401 mode = 'brief'
401 mode = 'brief'
402 if parameter_s.split()[0] == '-rest':
402 if parameter_s.split()[0] == '-rest':
403 mode = 'rest'
403 mode = 'rest'
404 rest_docs = []
404 rest_docs = []
405 except:
405 except:
406 pass
406 pass
407
407
408 magic_docs = []
408 magic_docs = []
409 for fname in self.lsmagic():
409 for fname in self.lsmagic():
410 mname = 'magic_' + fname
410 mname = 'magic_' + fname
411 for space in (Magic,self,self.__class__):
411 for space in (Magic,self,self.__class__):
412 try:
412 try:
413 fn = space.__dict__[mname]
413 fn = space.__dict__[mname]
414 except KeyError:
414 except KeyError:
415 pass
415 pass
416 else:
416 else:
417 break
417 break
418 if mode == 'brief':
418 if mode == 'brief':
419 # only first line
419 # only first line
420 if fn.__doc__:
420 if fn.__doc__:
421 fndoc = fn.__doc__.split('\n',1)[0]
421 fndoc = fn.__doc__.split('\n',1)[0]
422 else:
422 else:
423 fndoc = 'No documentation'
423 fndoc = 'No documentation'
424 else:
424 else:
425 if fn.__doc__:
425 if fn.__doc__:
426 fndoc = fn.__doc__.rstrip()
426 fndoc = fn.__doc__.rstrip()
427 else:
427 else:
428 fndoc = 'No documentation'
428 fndoc = 'No documentation'
429
429
430
430
431 if mode == 'rest':
431 if mode == 'rest':
432 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
432 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
433 fname,fndoc))
433 fname,fndoc))
434
434
435 else:
435 else:
436 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
436 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
437 fname,fndoc))
437 fname,fndoc))
438
438
439 magic_docs = ''.join(magic_docs)
439 magic_docs = ''.join(magic_docs)
440
440
441 if mode == 'rest':
441 if mode == 'rest':
442 return "".join(rest_docs)
442 return "".join(rest_docs)
443
443
444 if mode == 'latex':
444 if mode == 'latex':
445 print self.format_latex(magic_docs)
445 print self.format_latex(magic_docs)
446 return
446 return
447 else:
447 else:
448 magic_docs = self.format_screen(magic_docs)
448 magic_docs = self.format_screen(magic_docs)
449 if mode == 'brief':
449 if mode == 'brief':
450 return magic_docs
450 return magic_docs
451
451
452 outmsg = """
452 outmsg = """
453 IPython's 'magic' functions
453 IPython's 'magic' functions
454 ===========================
454 ===========================
455
455
456 The magic function system provides a series of functions which allow you to
456 The magic function system provides a series of functions which allow you to
457 control the behavior of IPython itself, plus a lot of system-type
457 control the behavior of IPython itself, plus a lot of system-type
458 features. All these functions are prefixed with a % character, but parameters
458 features. All these functions are prefixed with a % character, but parameters
459 are given without parentheses or quotes.
459 are given without parentheses or quotes.
460
460
461 NOTE: If you have 'automagic' enabled (via the command line option or with the
461 NOTE: If you have 'automagic' enabled (via the command line option or with the
462 %automagic function), you don't need to type in the % explicitly. By default,
462 %automagic function), you don't need to type in the % explicitly. By default,
463 IPython ships with automagic on, so you should only rarely need the % escape.
463 IPython ships with automagic on, so you should only rarely need the % escape.
464
464
465 Example: typing '%cd mydir' (without the quotes) changes you working directory
465 Example: typing '%cd mydir' (without the quotes) changes you working directory
466 to 'mydir', if it exists.
466 to 'mydir', if it exists.
467
467
468 You can define your own magic functions to extend the system. See the supplied
468 You can define your own magic functions to extend the system. See the supplied
469 ipythonrc and example-magic.py files for details (in your ipython
469 ipythonrc and example-magic.py files for details (in your ipython
470 configuration directory, typically $HOME/.ipython/).
470 configuration directory, typically $HOME/.ipython/).
471
471
472 You can also define your own aliased names for magic functions. In your
472 You can also define your own aliased names for magic functions. In your
473 ipythonrc file, placing a line like:
473 ipythonrc file, placing a line like:
474
474
475 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
475 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
476
476
477 will define %pf as a new name for %profile.
477 will define %pf as a new name for %profile.
478
478
479 You can also call magics in code using the ipmagic() function, which IPython
479 You can also call magics in code using the ipmagic() function, which IPython
480 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
480 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
481
481
482 For a list of the available magic functions, use %lsmagic. For a description
482 For a list of the available magic functions, use %lsmagic. For a description
483 of any of them, type %magic_name?, e.g. '%cd?'.
483 of any of them, type %magic_name?, e.g. '%cd?'.
484
484
485 Currently the magic system has the following functions:\n"""
485 Currently the magic system has the following functions:\n"""
486
486
487 mesc = self.shell.ESC_MAGIC
487 mesc = self.shell.ESC_MAGIC
488 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
488 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
489 "\n\n%s%s\n\n%s" % (outmsg,
489 "\n\n%s%s\n\n%s" % (outmsg,
490 magic_docs,mesc,mesc,
490 magic_docs,mesc,mesc,
491 (' '+mesc).join(self.lsmagic()),
491 (' '+mesc).join(self.lsmagic()),
492 Magic.auto_status[self.shell.rc.automagic] ) )
492 Magic.auto_status[self.shell.rc.automagic] ) )
493
493
494 page(outmsg,screen_lines=self.shell.rc.screen_length)
494 page(outmsg,screen_lines=self.shell.rc.screen_length)
495
495
496
496
497 def magic_autoindent(self, parameter_s = ''):
497 def magic_autoindent(self, parameter_s = ''):
498 """Toggle autoindent on/off (if available)."""
498 """Toggle autoindent on/off (if available)."""
499
499
500 self.shell.set_autoindent()
500 self.shell.set_autoindent()
501 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
501 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
502
502
503
503
504 def magic_automagic(self, parameter_s = ''):
504 def magic_automagic(self, parameter_s = ''):
505 """Make magic functions callable without having to type the initial %.
505 """Make magic functions callable without having to type the initial %.
506
506
507 Without argumentsl toggles on/off (when off, you must call it as
507 Without argumentsl toggles on/off (when off, you must call it as
508 %automagic, of course). With arguments it sets the value, and you can
508 %automagic, of course). With arguments it sets the value, and you can
509 use any of (case insensitive):
509 use any of (case insensitive):
510
510
511 - on,1,True: to activate
511 - on,1,True: to activate
512
512
513 - off,0,False: to deactivate.
513 - off,0,False: to deactivate.
514
514
515 Note that magic functions have lowest priority, so if there's a
515 Note that magic functions have lowest priority, so if there's a
516 variable whose name collides with that of a magic fn, automagic won't
516 variable whose name collides with that of a magic fn, automagic won't
517 work for that function (you get the variable instead). However, if you
517 work for that function (you get the variable instead). However, if you
518 delete the variable (del var), the previously shadowed magic function
518 delete the variable (del var), the previously shadowed magic function
519 becomes visible to automagic again."""
519 becomes visible to automagic again."""
520
520
521 rc = self.shell.rc
521 rc = self.shell.rc
522 arg = parameter_s.lower()
522 arg = parameter_s.lower()
523 if parameter_s in ('on','1','true'):
523 if parameter_s in ('on','1','true'):
524 rc.automagic = True
524 rc.automagic = True
525 elif parameter_s in ('off','0','false'):
525 elif parameter_s in ('off','0','false'):
526 rc.automagic = False
526 rc.automagic = False
527 else:
527 else:
528 rc.automagic = not rc.automagic
528 rc.automagic = not rc.automagic
529 print '\n' + Magic.auto_status[rc.automagic]
529 print '\n' + Magic.auto_status[rc.automagic]
530
530
531 @testdec.skip_doctest
531 @testdec.skip_doctest
532 def magic_autocall(self, parameter_s = ''):
532 def magic_autocall(self, parameter_s = ''):
533 """Make functions callable without having to type parentheses.
533 """Make functions callable without having to type parentheses.
534
534
535 Usage:
535 Usage:
536
536
537 %autocall [mode]
537 %autocall [mode]
538
538
539 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
539 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
540 value is toggled on and off (remembering the previous state).
540 value is toggled on and off (remembering the previous state).
541
541
542 In more detail, these values mean:
542 In more detail, these values mean:
543
543
544 0 -> fully disabled
544 0 -> fully disabled
545
545
546 1 -> active, but do not apply if there are no arguments on the line.
546 1 -> active, but do not apply if there are no arguments on the line.
547
547
548 In this mode, you get:
548 In this mode, you get:
549
549
550 In [1]: callable
550 In [1]: callable
551 Out[1]: <built-in function callable>
551 Out[1]: <built-in function callable>
552
552
553 In [2]: callable 'hello'
553 In [2]: callable 'hello'
554 ------> callable('hello')
554 ------> callable('hello')
555 Out[2]: False
555 Out[2]: False
556
556
557 2 -> Active always. Even if no arguments are present, the callable
557 2 -> Active always. Even if no arguments are present, the callable
558 object is called:
558 object is called:
559
559
560 In [2]: float
560 In [2]: float
561 ------> float()
561 ------> float()
562 Out[2]: 0.0
562 Out[2]: 0.0
563
563
564 Note that even with autocall off, you can still use '/' at the start of
564 Note that even with autocall off, you can still use '/' at the start of
565 a line to treat the first argument on the command line as a function
565 a line to treat the first argument on the command line as a function
566 and add parentheses to it:
566 and add parentheses to it:
567
567
568 In [8]: /str 43
568 In [8]: /str 43
569 ------> str(43)
569 ------> str(43)
570 Out[8]: '43'
570 Out[8]: '43'
571
571
572 # all-random (note for auto-testing)
572 # all-random (note for auto-testing)
573 """
573 """
574
574
575 rc = self.shell.rc
575 rc = self.shell.rc
576
576
577 if parameter_s:
577 if parameter_s:
578 arg = int(parameter_s)
578 arg = int(parameter_s)
579 else:
579 else:
580 arg = 'toggle'
580 arg = 'toggle'
581
581
582 if not arg in (0,1,2,'toggle'):
582 if not arg in (0,1,2,'toggle'):
583 error('Valid modes: (0->Off, 1->Smart, 2->Full')
583 error('Valid modes: (0->Off, 1->Smart, 2->Full')
584 return
584 return
585
585
586 if arg in (0,1,2):
586 if arg in (0,1,2):
587 rc.autocall = arg
587 rc.autocall = arg
588 else: # toggle
588 else: # toggle
589 if rc.autocall:
589 if rc.autocall:
590 self._magic_state.autocall_save = rc.autocall
590 self._magic_state.autocall_save = rc.autocall
591 rc.autocall = 0
591 rc.autocall = 0
592 else:
592 else:
593 try:
593 try:
594 rc.autocall = self._magic_state.autocall_save
594 rc.autocall = self._magic_state.autocall_save
595 except AttributeError:
595 except AttributeError:
596 rc.autocall = self._magic_state.autocall_save = 1
596 rc.autocall = self._magic_state.autocall_save = 1
597
597
598 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
598 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
599
599
600 def magic_system_verbose(self, parameter_s = ''):
600 def magic_system_verbose(self, parameter_s = ''):
601 """Set verbose printing of system calls.
601 """Set verbose printing of system calls.
602
602
603 If called without an argument, act as a toggle"""
603 If called without an argument, act as a toggle"""
604
604
605 if parameter_s:
605 if parameter_s:
606 val = bool(eval(parameter_s))
606 val = bool(eval(parameter_s))
607 else:
607 else:
608 val = None
608 val = None
609
609
610 self.shell.rc_set_toggle('system_verbose',val)
610 self.shell.rc_set_toggle('system_verbose',val)
611 print "System verbose printing is:",\
611 print "System verbose printing is:",\
612 ['OFF','ON'][self.shell.rc.system_verbose]
612 ['OFF','ON'][self.shell.rc.system_verbose]
613
613
614
614
615 def magic_page(self, parameter_s=''):
615 def magic_page(self, parameter_s=''):
616 """Pretty print the object and display it through a pager.
616 """Pretty print the object and display it through a pager.
617
617
618 %page [options] OBJECT
618 %page [options] OBJECT
619
619
620 If no object is given, use _ (last output).
620 If no object is given, use _ (last output).
621
621
622 Options:
622 Options:
623
623
624 -r: page str(object), don't pretty-print it."""
624 -r: page str(object), don't pretty-print it."""
625
625
626 # After a function contributed by Olivier Aubert, slightly modified.
626 # After a function contributed by Olivier Aubert, slightly modified.
627
627
628 # Process options/args
628 # Process options/args
629 opts,args = self.parse_options(parameter_s,'r')
629 opts,args = self.parse_options(parameter_s,'r')
630 raw = 'r' in opts
630 raw = 'r' in opts
631
631
632 oname = args and args or '_'
632 oname = args and args or '_'
633 info = self._ofind(oname)
633 info = self._ofind(oname)
634 if info['found']:
634 if info['found']:
635 txt = (raw and str or pformat)( info['obj'] )
635 txt = (raw and str or pformat)( info['obj'] )
636 page(txt)
636 page(txt)
637 else:
637 else:
638 print 'Object `%s` not found' % oname
638 print 'Object `%s` not found' % oname
639
639
640 def magic_profile(self, parameter_s=''):
640 def magic_profile(self, parameter_s=''):
641 """Print your currently active IPyhton profile."""
641 """Print your currently active IPyhton profile."""
642 if self.shell.rc.profile:
642 if self.shell.rc.profile:
643 printpl('Current IPython profile: $self.shell.rc.profile.')
643 printpl('Current IPython profile: $self.shell.rc.profile.')
644 else:
644 else:
645 print 'No profile active.'
645 print 'No profile active.'
646
646
647 def magic_pinfo(self, parameter_s='', namespaces=None):
647 def magic_pinfo(self, parameter_s='', namespaces=None):
648 """Provide detailed information about an object.
648 """Provide detailed information about an object.
649
649
650 '%pinfo object' is just a synonym for object? or ?object."""
650 '%pinfo object' is just a synonym for object? or ?object."""
651
651
652 #print 'pinfo par: <%s>' % parameter_s # dbg
652 #print 'pinfo par: <%s>' % parameter_s # dbg
653
653
654
654
655 # detail_level: 0 -> obj? , 1 -> obj??
655 # detail_level: 0 -> obj? , 1 -> obj??
656 detail_level = 0
656 detail_level = 0
657 # We need to detect if we got called as 'pinfo pinfo foo', which can
657 # We need to detect if we got called as 'pinfo pinfo foo', which can
658 # happen if the user types 'pinfo foo?' at the cmd line.
658 # happen if the user types 'pinfo foo?' at the cmd line.
659 pinfo,qmark1,oname,qmark2 = \
659 pinfo,qmark1,oname,qmark2 = \
660 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
660 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
661 if pinfo or qmark1 or qmark2:
661 if pinfo or qmark1 or qmark2:
662 detail_level = 1
662 detail_level = 1
663 if "*" in oname:
663 if "*" in oname:
664 self.magic_psearch(oname)
664 self.magic_psearch(oname)
665 else:
665 else:
666 self._inspect('pinfo', oname, detail_level=detail_level,
666 self._inspect('pinfo', oname, detail_level=detail_level,
667 namespaces=namespaces)
667 namespaces=namespaces)
668
668
669 def magic_pdef(self, parameter_s='', namespaces=None):
669 def magic_pdef(self, parameter_s='', namespaces=None):
670 """Print the definition header for any callable object.
670 """Print the definition header for any callable object.
671
671
672 If the object is a class, print the constructor information."""
672 If the object is a class, print the constructor information."""
673 self._inspect('pdef',parameter_s, namespaces)
673 self._inspect('pdef',parameter_s, namespaces)
674
674
675 def magic_pdoc(self, parameter_s='', namespaces=None):
675 def magic_pdoc(self, parameter_s='', namespaces=None):
676 """Print the docstring for an object.
676 """Print the docstring for an object.
677
677
678 If the given object is a class, it will print both the class and the
678 If the given object is a class, it will print both the class and the
679 constructor docstrings."""
679 constructor docstrings."""
680 self._inspect('pdoc',parameter_s, namespaces)
680 self._inspect('pdoc',parameter_s, namespaces)
681
681
682 def magic_psource(self, parameter_s='', namespaces=None):
682 def magic_psource(self, parameter_s='', namespaces=None):
683 """Print (or run through pager) the source code for an object."""
683 """Print (or run through pager) the source code for an object."""
684 self._inspect('psource',parameter_s, namespaces)
684 self._inspect('psource',parameter_s, namespaces)
685
685
686 def magic_pfile(self, parameter_s=''):
686 def magic_pfile(self, parameter_s=''):
687 """Print (or run through pager) the file where an object is defined.
687 """Print (or run through pager) the file where an object is defined.
688
688
689 The file opens at the line where the object definition begins. IPython
689 The file opens at the line where the object definition begins. IPython
690 will honor the environment variable PAGER if set, and otherwise will
690 will honor the environment variable PAGER if set, and otherwise will
691 do its best to print the file in a convenient form.
691 do its best to print the file in a convenient form.
692
692
693 If the given argument is not an object currently defined, IPython will
693 If the given argument is not an object currently defined, IPython will
694 try to interpret it as a filename (automatically adding a .py extension
694 try to interpret it as a filename (automatically adding a .py extension
695 if needed). You can thus use %pfile as a syntax highlighting code
695 if needed). You can thus use %pfile as a syntax highlighting code
696 viewer."""
696 viewer."""
697
697
698 # first interpret argument as an object name
698 # first interpret argument as an object name
699 out = self._inspect('pfile',parameter_s)
699 out = self._inspect('pfile',parameter_s)
700 # if not, try the input as a filename
700 # if not, try the input as a filename
701 if out == 'not found':
701 if out == 'not found':
702 try:
702 try:
703 filename = get_py_filename(parameter_s)
703 filename = get_py_filename(parameter_s)
704 except IOError,msg:
704 except IOError,msg:
705 print msg
705 print msg
706 return
706 return
707 page(self.shell.inspector.format(file(filename).read()))
707 page(self.shell.inspector.format(file(filename).read()))
708
708
709 def _inspect(self,meth,oname,namespaces=None,**kw):
709 def _inspect(self,meth,oname,namespaces=None,**kw):
710 """Generic interface to the inspector system.
710 """Generic interface to the inspector system.
711
711
712 This function is meant to be called by pdef, pdoc & friends."""
712 This function is meant to be called by pdef, pdoc & friends."""
713
713
714 #oname = oname.strip()
714 #oname = oname.strip()
715 #print '1- oname: <%r>' % oname # dbg
715 #print '1- oname: <%r>' % oname # dbg
716 try:
716 try:
717 oname = oname.strip().encode('ascii')
717 oname = oname.strip().encode('ascii')
718 #print '2- oname: <%r>' % oname # dbg
718 #print '2- oname: <%r>' % oname # dbg
719 except UnicodeEncodeError:
719 except UnicodeEncodeError:
720 print 'Python identifiers can only contain ascii characters.'
720 print 'Python identifiers can only contain ascii characters.'
721 return 'not found'
721 return 'not found'
722
722
723 info = Struct(self._ofind(oname, namespaces))
723 info = Struct(self._ofind(oname, namespaces))
724
724
725 if info.found:
725 if info.found:
726 try:
726 try:
727 IPython.generics.inspect_object(info.obj)
727 IPython.generics.inspect_object(info.obj)
728 return
728 return
729 except IPython.ipapi.TryNext:
729 except IPython.ipapi.TryNext:
730 pass
730 pass
731 # Get the docstring of the class property if it exists.
731 # Get the docstring of the class property if it exists.
732 path = oname.split('.')
732 path = oname.split('.')
733 root = '.'.join(path[:-1])
733 root = '.'.join(path[:-1])
734 if info.parent is not None:
734 if info.parent is not None:
735 try:
735 try:
736 target = getattr(info.parent, '__class__')
736 target = getattr(info.parent, '__class__')
737 # The object belongs to a class instance.
737 # The object belongs to a class instance.
738 try:
738 try:
739 target = getattr(target, path[-1])
739 target = getattr(target, path[-1])
740 # The class defines the object.
740 # The class defines the object.
741 if isinstance(target, property):
741 if isinstance(target, property):
742 oname = root + '.__class__.' + path[-1]
742 oname = root + '.__class__.' + path[-1]
743 info = Struct(self._ofind(oname))
743 info = Struct(self._ofind(oname))
744 except AttributeError: pass
744 except AttributeError: pass
745 except AttributeError: pass
745 except AttributeError: pass
746
746
747 pmethod = getattr(self.shell.inspector,meth)
747 pmethod = getattr(self.shell.inspector,meth)
748 formatter = info.ismagic and self.format_screen or None
748 formatter = info.ismagic and self.format_screen or None
749 if meth == 'pdoc':
749 if meth == 'pdoc':
750 pmethod(info.obj,oname,formatter)
750 pmethod(info.obj,oname,formatter)
751 elif meth == 'pinfo':
751 elif meth == 'pinfo':
752 pmethod(info.obj,oname,formatter,info,**kw)
752 pmethod(info.obj,oname,formatter,info,**kw)
753 else:
753 else:
754 pmethod(info.obj,oname)
754 pmethod(info.obj,oname)
755 else:
755 else:
756 print 'Object `%s` not found.' % oname
756 print 'Object `%s` not found.' % oname
757 return 'not found' # so callers can take other action
757 return 'not found' # so callers can take other action
758
758
759 def magic_psearch(self, parameter_s=''):
759 def magic_psearch(self, parameter_s=''):
760 """Search for object in namespaces by wildcard.
760 """Search for object in namespaces by wildcard.
761
761
762 %psearch [options] PATTERN [OBJECT TYPE]
762 %psearch [options] PATTERN [OBJECT TYPE]
763
763
764 Note: ? can be used as a synonym for %psearch, at the beginning or at
764 Note: ? can be used as a synonym for %psearch, at the beginning or at
765 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
765 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
766 rest of the command line must be unchanged (options come first), so
766 rest of the command line must be unchanged (options come first), so
767 for example the following forms are equivalent
767 for example the following forms are equivalent
768
768
769 %psearch -i a* function
769 %psearch -i a* function
770 -i a* function?
770 -i a* function?
771 ?-i a* function
771 ?-i a* function
772
772
773 Arguments:
773 Arguments:
774
774
775 PATTERN
775 PATTERN
776
776
777 where PATTERN is a string containing * as a wildcard similar to its
777 where PATTERN is a string containing * as a wildcard similar to its
778 use in a shell. The pattern is matched in all namespaces on the
778 use in a shell. The pattern is matched in all namespaces on the
779 search path. By default objects starting with a single _ are not
779 search path. By default objects starting with a single _ are not
780 matched, many IPython generated objects have a single
780 matched, many IPython generated objects have a single
781 underscore. The default is case insensitive matching. Matching is
781 underscore. The default is case insensitive matching. Matching is
782 also done on the attributes of objects and not only on the objects
782 also done on the attributes of objects and not only on the objects
783 in a module.
783 in a module.
784
784
785 [OBJECT TYPE]
785 [OBJECT TYPE]
786
786
787 Is the name of a python type from the types module. The name is
787 Is the name of a python type from the types module. The name is
788 given in lowercase without the ending type, ex. StringType is
788 given in lowercase without the ending type, ex. StringType is
789 written string. By adding a type here only objects matching the
789 written string. By adding a type here only objects matching the
790 given type are matched. Using all here makes the pattern match all
790 given type are matched. Using all here makes the pattern match all
791 types (this is the default).
791 types (this is the default).
792
792
793 Options:
793 Options:
794
794
795 -a: makes the pattern match even objects whose names start with a
795 -a: makes the pattern match even objects whose names start with a
796 single underscore. These names are normally ommitted from the
796 single underscore. These names are normally ommitted from the
797 search.
797 search.
798
798
799 -i/-c: make the pattern case insensitive/sensitive. If neither of
799 -i/-c: make the pattern case insensitive/sensitive. If neither of
800 these options is given, the default is read from your ipythonrc
800 these options is given, the default is read from your ipythonrc
801 file. The option name which sets this value is
801 file. The option name which sets this value is
802 'wildcards_case_sensitive'. If this option is not specified in your
802 'wildcards_case_sensitive'. If this option is not specified in your
803 ipythonrc file, IPython's internal default is to do a case sensitive
803 ipythonrc file, IPython's internal default is to do a case sensitive
804 search.
804 search.
805
805
806 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
806 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
807 specifiy can be searched in any of the following namespaces:
807 specifiy can be searched in any of the following namespaces:
808 'builtin', 'user', 'user_global','internal', 'alias', where
808 'builtin', 'user', 'user_global','internal', 'alias', where
809 'builtin' and 'user' are the search defaults. Note that you should
809 'builtin' and 'user' are the search defaults. Note that you should
810 not use quotes when specifying namespaces.
810 not use quotes when specifying namespaces.
811
811
812 'Builtin' contains the python module builtin, 'user' contains all
812 'Builtin' contains the python module builtin, 'user' contains all
813 user data, 'alias' only contain the shell aliases and no python
813 user data, 'alias' only contain the shell aliases and no python
814 objects, 'internal' contains objects used by IPython. The
814 objects, 'internal' contains objects used by IPython. The
815 'user_global' namespace is only used by embedded IPython instances,
815 'user_global' namespace is only used by embedded IPython instances,
816 and it contains module-level globals. You can add namespaces to the
816 and it contains module-level globals. You can add namespaces to the
817 search with -s or exclude them with -e (these options can be given
817 search with -s or exclude them with -e (these options can be given
818 more than once).
818 more than once).
819
819
820 Examples:
820 Examples:
821
821
822 %psearch a* -> objects beginning with an a
822 %psearch a* -> objects beginning with an a
823 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
823 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
824 %psearch a* function -> all functions beginning with an a
824 %psearch a* function -> all functions beginning with an a
825 %psearch re.e* -> objects beginning with an e in module re
825 %psearch re.e* -> objects beginning with an e in module re
826 %psearch r*.e* -> objects that start with e in modules starting in r
826 %psearch r*.e* -> objects that start with e in modules starting in r
827 %psearch r*.* string -> all strings in modules beginning with r
827 %psearch r*.* string -> all strings in modules beginning with r
828
828
829 Case sensitve search:
829 Case sensitve search:
830
830
831 %psearch -c a* list all object beginning with lower case a
831 %psearch -c a* list all object beginning with lower case a
832
832
833 Show objects beginning with a single _:
833 Show objects beginning with a single _:
834
834
835 %psearch -a _* list objects beginning with a single underscore"""
835 %psearch -a _* list objects beginning with a single underscore"""
836 try:
836 try:
837 parameter_s = parameter_s.encode('ascii')
837 parameter_s = parameter_s.encode('ascii')
838 except UnicodeEncodeError:
838 except UnicodeEncodeError:
839 print 'Python identifiers can only contain ascii characters.'
839 print 'Python identifiers can only contain ascii characters.'
840 return
840 return
841
841
842 # default namespaces to be searched
842 # default namespaces to be searched
843 def_search = ['user','builtin']
843 def_search = ['user','builtin']
844
844
845 # Process options/args
845 # Process options/args
846 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
846 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
847 opt = opts.get
847 opt = opts.get
848 shell = self.shell
848 shell = self.shell
849 psearch = shell.inspector.psearch
849 psearch = shell.inspector.psearch
850
850
851 # select case options
851 # select case options
852 if opts.has_key('i'):
852 if opts.has_key('i'):
853 ignore_case = True
853 ignore_case = True
854 elif opts.has_key('c'):
854 elif opts.has_key('c'):
855 ignore_case = False
855 ignore_case = False
856 else:
856 else:
857 ignore_case = not shell.rc.wildcards_case_sensitive
857 ignore_case = not shell.rc.wildcards_case_sensitive
858
858
859 # Build list of namespaces to search from user options
859 # Build list of namespaces to search from user options
860 def_search.extend(opt('s',[]))
860 def_search.extend(opt('s',[]))
861 ns_exclude = ns_exclude=opt('e',[])
861 ns_exclude = ns_exclude=opt('e',[])
862 ns_search = [nm for nm in def_search if nm not in ns_exclude]
862 ns_search = [nm for nm in def_search if nm not in ns_exclude]
863
863
864 # Call the actual search
864 # Call the actual search
865 try:
865 try:
866 psearch(args,shell.ns_table,ns_search,
866 psearch(args,shell.ns_table,ns_search,
867 show_all=opt('a'),ignore_case=ignore_case)
867 show_all=opt('a'),ignore_case=ignore_case)
868 except:
868 except:
869 shell.showtraceback()
869 shell.showtraceback()
870
870
871 def magic_who_ls(self, parameter_s=''):
871 def magic_who_ls(self, parameter_s=''):
872 """Return a sorted list of all interactive variables.
872 """Return a sorted list of all interactive variables.
873
873
874 If arguments are given, only variables of types matching these
874 If arguments are given, only variables of types matching these
875 arguments are returned."""
875 arguments are returned."""
876
876
877 user_ns = self.shell.user_ns
877 user_ns = self.shell.user_ns
878 internal_ns = self.shell.internal_ns
878 internal_ns = self.shell.internal_ns
879 user_config_ns = self.shell.user_config_ns
879 user_config_ns = self.shell.user_config_ns
880 out = []
880 out = []
881 typelist = parameter_s.split()
881 typelist = parameter_s.split()
882
882
883 for i in user_ns:
883 for i in user_ns:
884 if not (i.startswith('_') or i.startswith('_i')) \
884 if not (i.startswith('_') or i.startswith('_i')) \
885 and not (i in internal_ns or i in user_config_ns):
885 and not (i in internal_ns or i in user_config_ns):
886 if typelist:
886 if typelist:
887 if type(user_ns[i]).__name__ in typelist:
887 if type(user_ns[i]).__name__ in typelist:
888 out.append(i)
888 out.append(i)
889 else:
889 else:
890 out.append(i)
890 out.append(i)
891 out.sort()
891 out.sort()
892 return out
892 return out
893
893
894 def magic_who(self, parameter_s=''):
894 def magic_who(self, parameter_s=''):
895 """Print all interactive variables, with some minimal formatting.
895 """Print all interactive variables, with some minimal formatting.
896
896
897 If any arguments are given, only variables whose type matches one of
897 If any arguments are given, only variables whose type matches one of
898 these are printed. For example:
898 these are printed. For example:
899
899
900 %who function str
900 %who function str
901
901
902 will only list functions and strings, excluding all other types of
902 will only list functions and strings, excluding all other types of
903 variables. To find the proper type names, simply use type(var) at a
903 variables. To find the proper type names, simply use type(var) at a
904 command line to see how python prints type names. For example:
904 command line to see how python prints type names. For example:
905
905
906 In [1]: type('hello')\\
906 In [1]: type('hello')\\
907 Out[1]: <type 'str'>
907 Out[1]: <type 'str'>
908
908
909 indicates that the type name for strings is 'str'.
909 indicates that the type name for strings is 'str'.
910
910
911 %who always excludes executed names loaded through your configuration
911 %who always excludes executed names loaded through your configuration
912 file and things which are internal to IPython.
912 file and things which are internal to IPython.
913
913
914 This is deliberate, as typically you may load many modules and the
914 This is deliberate, as typically you may load many modules and the
915 purpose of %who is to show you only what you've manually defined."""
915 purpose of %who is to show you only what you've manually defined."""
916
916
917 varlist = self.magic_who_ls(parameter_s)
917 varlist = self.magic_who_ls(parameter_s)
918 if not varlist:
918 if not varlist:
919 if parameter_s:
919 if parameter_s:
920 print 'No variables match your requested type.'
920 print 'No variables match your requested type.'
921 else:
921 else:
922 print 'Interactive namespace is empty.'
922 print 'Interactive namespace is empty.'
923 return
923 return
924
924
925 # if we have variables, move on...
925 # if we have variables, move on...
926 count = 0
926 count = 0
927 for i in varlist:
927 for i in varlist:
928 print i+'\t',
928 print i+'\t',
929 count += 1
929 count += 1
930 if count > 8:
930 if count > 8:
931 count = 0
931 count = 0
932 print
932 print
933 print
933 print
934
934
935 def magic_whos(self, parameter_s=''):
935 def magic_whos(self, parameter_s=''):
936 """Like %who, but gives some extra information about each variable.
936 """Like %who, but gives some extra information about each variable.
937
937
938 The same type filtering of %who can be applied here.
938 The same type filtering of %who can be applied here.
939
939
940 For all variables, the type is printed. Additionally it prints:
940 For all variables, the type is printed. Additionally it prints:
941
941
942 - For {},[],(): their length.
942 - For {},[],(): their length.
943
943
944 - For numpy and Numeric arrays, a summary with shape, number of
944 - For numpy and Numeric arrays, a summary with shape, number of
945 elements, typecode and size in memory.
945 elements, typecode and size in memory.
946
946
947 - Everything else: a string representation, snipping their middle if
947 - Everything else: a string representation, snipping their middle if
948 too long."""
948 too long."""
949
949
950 varnames = self.magic_who_ls(parameter_s)
950 varnames = self.magic_who_ls(parameter_s)
951 if not varnames:
951 if not varnames:
952 if parameter_s:
952 if parameter_s:
953 print 'No variables match your requested type.'
953 print 'No variables match your requested type.'
954 else:
954 else:
955 print 'Interactive namespace is empty.'
955 print 'Interactive namespace is empty.'
956 return
956 return
957
957
958 # if we have variables, move on...
958 # if we have variables, move on...
959
959
960 # for these types, show len() instead of data:
960 # for these types, show len() instead of data:
961 seq_types = [types.DictType,types.ListType,types.TupleType]
961 seq_types = [types.DictType,types.ListType,types.TupleType]
962
962
963 # for numpy/Numeric arrays, display summary info
963 # for numpy/Numeric arrays, display summary info
964 try:
964 try:
965 import numpy
965 import numpy
966 except ImportError:
966 except ImportError:
967 ndarray_type = None
967 ndarray_type = None
968 else:
968 else:
969 ndarray_type = numpy.ndarray.__name__
969 ndarray_type = numpy.ndarray.__name__
970 try:
970 try:
971 import Numeric
971 import Numeric
972 except ImportError:
972 except ImportError:
973 array_type = None
973 array_type = None
974 else:
974 else:
975 array_type = Numeric.ArrayType.__name__
975 array_type = Numeric.ArrayType.__name__
976
976
977 # Find all variable names and types so we can figure out column sizes
977 # Find all variable names and types so we can figure out column sizes
978 def get_vars(i):
978 def get_vars(i):
979 return self.shell.user_ns[i]
979 return self.shell.user_ns[i]
980
980
981 # some types are well known and can be shorter
981 # some types are well known and can be shorter
982 abbrevs = {'IPython.macro.Macro' : 'Macro'}
982 abbrevs = {'IPython.macro.Macro' : 'Macro'}
983 def type_name(v):
983 def type_name(v):
984 tn = type(v).__name__
984 tn = type(v).__name__
985 return abbrevs.get(tn,tn)
985 return abbrevs.get(tn,tn)
986
986
987 varlist = map(get_vars,varnames)
987 varlist = map(get_vars,varnames)
988
988
989 typelist = []
989 typelist = []
990 for vv in varlist:
990 for vv in varlist:
991 tt = type_name(vv)
991 tt = type_name(vv)
992
992
993 if tt=='instance':
993 if tt=='instance':
994 typelist.append( abbrevs.get(str(vv.__class__),
994 typelist.append( abbrevs.get(str(vv.__class__),
995 str(vv.__class__)))
995 str(vv.__class__)))
996 else:
996 else:
997 typelist.append(tt)
997 typelist.append(tt)
998
998
999 # column labels and # of spaces as separator
999 # column labels and # of spaces as separator
1000 varlabel = 'Variable'
1000 varlabel = 'Variable'
1001 typelabel = 'Type'
1001 typelabel = 'Type'
1002 datalabel = 'Data/Info'
1002 datalabel = 'Data/Info'
1003 colsep = 3
1003 colsep = 3
1004 # variable format strings
1004 # variable format strings
1005 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1005 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1006 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1006 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1007 aformat = "%s: %s elems, type `%s`, %s bytes"
1007 aformat = "%s: %s elems, type `%s`, %s bytes"
1008 # find the size of the columns to format the output nicely
1008 # find the size of the columns to format the output nicely
1009 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1009 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1010 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1010 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1011 # table header
1011 # table header
1012 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1012 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1013 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1013 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1014 # and the table itself
1014 # and the table itself
1015 kb = 1024
1015 kb = 1024
1016 Mb = 1048576 # kb**2
1016 Mb = 1048576 # kb**2
1017 for vname,var,vtype in zip(varnames,varlist,typelist):
1017 for vname,var,vtype in zip(varnames,varlist,typelist):
1018 print itpl(vformat),
1018 print itpl(vformat),
1019 if vtype in seq_types:
1019 if vtype in seq_types:
1020 print len(var)
1020 print len(var)
1021 elif vtype in [array_type,ndarray_type]:
1021 elif vtype in [array_type,ndarray_type]:
1022 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1022 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1023 if vtype==ndarray_type:
1023 if vtype==ndarray_type:
1024 # numpy
1024 # numpy
1025 vsize = var.size
1025 vsize = var.size
1026 vbytes = vsize*var.itemsize
1026 vbytes = vsize*var.itemsize
1027 vdtype = var.dtype
1027 vdtype = var.dtype
1028 else:
1028 else:
1029 # Numeric
1029 # Numeric
1030 vsize = Numeric.size(var)
1030 vsize = Numeric.size(var)
1031 vbytes = vsize*var.itemsize()
1031 vbytes = vsize*var.itemsize()
1032 vdtype = var.typecode()
1032 vdtype = var.typecode()
1033
1033
1034 if vbytes < 100000:
1034 if vbytes < 100000:
1035 print aformat % (vshape,vsize,vdtype,vbytes)
1035 print aformat % (vshape,vsize,vdtype,vbytes)
1036 else:
1036 else:
1037 print aformat % (vshape,vsize,vdtype,vbytes),
1037 print aformat % (vshape,vsize,vdtype,vbytes),
1038 if vbytes < Mb:
1038 if vbytes < Mb:
1039 print '(%s kb)' % (vbytes/kb,)
1039 print '(%s kb)' % (vbytes/kb,)
1040 else:
1040 else:
1041 print '(%s Mb)' % (vbytes/Mb,)
1041 print '(%s Mb)' % (vbytes/Mb,)
1042 else:
1042 else:
1043 try:
1043 try:
1044 vstr = str(var)
1044 vstr = str(var)
1045 except UnicodeEncodeError:
1045 except UnicodeEncodeError:
1046 vstr = unicode(var).encode(sys.getdefaultencoding(),
1046 vstr = unicode(var).encode(sys.getdefaultencoding(),
1047 'backslashreplace')
1047 'backslashreplace')
1048 vstr = vstr.replace('\n','\\n')
1048 vstr = vstr.replace('\n','\\n')
1049 if len(vstr) < 50:
1049 if len(vstr) < 50:
1050 print vstr
1050 print vstr
1051 else:
1051 else:
1052 printpl(vfmt_short)
1052 printpl(vfmt_short)
1053
1053
1054 def magic_reset(self, parameter_s=''):
1054 def magic_reset(self, parameter_s=''):
1055 """Resets the namespace by removing all names defined by the user.
1055 """Resets the namespace by removing all names defined by the user.
1056
1056
1057 Input/Output history are left around in case you need them."""
1057 Input/Output history are left around in case you need them."""
1058
1058
1059 ans = self.shell.ask_yes_no(
1059 ans = self.shell.ask_yes_no(
1060 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1060 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1061 if not ans:
1061 if not ans:
1062 print 'Nothing done.'
1062 print 'Nothing done.'
1063 return
1063 return
1064 user_ns = self.shell.user_ns
1064 user_ns = self.shell.user_ns
1065 for i in self.magic_who_ls():
1065 for i in self.magic_who_ls():
1066 del(user_ns[i])
1066 del(user_ns[i])
1067
1067
1068 # Also flush the private list of module references kept for script
1068 # Also flush the private list of module references kept for script
1069 # execution protection
1069 # execution protection
1070 self.shell._user_main_modules[:] = []
1070 self.shell._user_main_modules[:] = []
1071
1071
1072 def magic_logstart(self,parameter_s=''):
1072 def magic_logstart(self,parameter_s=''):
1073 """Start logging anywhere in a session.
1073 """Start logging anywhere in a session.
1074
1074
1075 %logstart [-o|-r|-t] [log_name [log_mode]]
1075 %logstart [-o|-r|-t] [log_name [log_mode]]
1076
1076
1077 If no name is given, it defaults to a file named 'ipython_log.py' in your
1077 If no name is given, it defaults to a file named 'ipython_log.py' in your
1078 current directory, in 'rotate' mode (see below).
1078 current directory, in 'rotate' mode (see below).
1079
1079
1080 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1080 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1081 history up to that point and then continues logging.
1081 history up to that point and then continues logging.
1082
1082
1083 %logstart takes a second optional parameter: logging mode. This can be one
1083 %logstart takes a second optional parameter: logging mode. This can be one
1084 of (note that the modes are given unquoted):\\
1084 of (note that the modes are given unquoted):\\
1085 append: well, that says it.\\
1085 append: well, that says it.\\
1086 backup: rename (if exists) to name~ and start name.\\
1086 backup: rename (if exists) to name~ and start name.\\
1087 global: single logfile in your home dir, appended to.\\
1087 global: single logfile in your home dir, appended to.\\
1088 over : overwrite existing log.\\
1088 over : overwrite existing log.\\
1089 rotate: create rotating logs name.1~, name.2~, etc.
1089 rotate: create rotating logs name.1~, name.2~, etc.
1090
1090
1091 Options:
1091 Options:
1092
1092
1093 -o: log also IPython's output. In this mode, all commands which
1093 -o: log also IPython's output. In this mode, all commands which
1094 generate an Out[NN] prompt are recorded to the logfile, right after
1094 generate an Out[NN] prompt are recorded to the logfile, right after
1095 their corresponding input line. The output lines are always
1095 their corresponding input line. The output lines are always
1096 prepended with a '#[Out]# ' marker, so that the log remains valid
1096 prepended with a '#[Out]# ' marker, so that the log remains valid
1097 Python code.
1097 Python code.
1098
1098
1099 Since this marker is always the same, filtering only the output from
1099 Since this marker is always the same, filtering only the output from
1100 a log is very easy, using for example a simple awk call:
1100 a log is very easy, using for example a simple awk call:
1101
1101
1102 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1102 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1103
1103
1104 -r: log 'raw' input. Normally, IPython's logs contain the processed
1104 -r: log 'raw' input. Normally, IPython's logs contain the processed
1105 input, so that user lines are logged in their final form, converted
1105 input, so that user lines are logged in their final form, converted
1106 into valid Python. For example, %Exit is logged as
1106 into valid Python. For example, %Exit is logged as
1107 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1107 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1108 exactly as typed, with no transformations applied.
1108 exactly as typed, with no transformations applied.
1109
1109
1110 -t: put timestamps before each input line logged (these are put in
1110 -t: put timestamps before each input line logged (these are put in
1111 comments)."""
1111 comments)."""
1112
1112
1113 opts,par = self.parse_options(parameter_s,'ort')
1113 opts,par = self.parse_options(parameter_s,'ort')
1114 log_output = 'o' in opts
1114 log_output = 'o' in opts
1115 log_raw_input = 'r' in opts
1115 log_raw_input = 'r' in opts
1116 timestamp = 't' in opts
1116 timestamp = 't' in opts
1117
1117
1118 rc = self.shell.rc
1118 rc = self.shell.rc
1119 logger = self.shell.logger
1119 logger = self.shell.logger
1120
1120
1121 # if no args are given, the defaults set in the logger constructor by
1121 # if no args are given, the defaults set in the logger constructor by
1122 # ipytohn remain valid
1122 # ipytohn remain valid
1123 if par:
1123 if par:
1124 try:
1124 try:
1125 logfname,logmode = par.split()
1125 logfname,logmode = par.split()
1126 except:
1126 except:
1127 logfname = par
1127 logfname = par
1128 logmode = 'backup'
1128 logmode = 'backup'
1129 else:
1129 else:
1130 logfname = logger.logfname
1130 logfname = logger.logfname
1131 logmode = logger.logmode
1131 logmode = logger.logmode
1132 # put logfname into rc struct as if it had been called on the command
1132 # put logfname into rc struct as if it had been called on the command
1133 # line, so it ends up saved in the log header Save it in case we need
1133 # line, so it ends up saved in the log header Save it in case we need
1134 # to restore it...
1134 # to restore it...
1135 old_logfile = rc.opts.get('logfile','')
1135 old_logfile = rc.opts.get('logfile','')
1136 if logfname:
1136 if logfname:
1137 logfname = os.path.expanduser(logfname)
1137 logfname = os.path.expanduser(logfname)
1138 rc.opts.logfile = logfname
1138 rc.opts.logfile = logfname
1139 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1139 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1140 try:
1140 try:
1141 started = logger.logstart(logfname,loghead,logmode,
1141 started = logger.logstart(logfname,loghead,logmode,
1142 log_output,timestamp,log_raw_input)
1142 log_output,timestamp,log_raw_input)
1143 except:
1143 except:
1144 rc.opts.logfile = old_logfile
1144 rc.opts.logfile = old_logfile
1145 warn("Couldn't start log: %s" % sys.exc_info()[1])
1145 warn("Couldn't start log: %s" % sys.exc_info()[1])
1146 else:
1146 else:
1147 # log input history up to this point, optionally interleaving
1147 # log input history up to this point, optionally interleaving
1148 # output if requested
1148 # output if requested
1149
1149
1150 if timestamp:
1150 if timestamp:
1151 # disable timestamping for the previous history, since we've
1151 # disable timestamping for the previous history, since we've
1152 # lost those already (no time machine here).
1152 # lost those already (no time machine here).
1153 logger.timestamp = False
1153 logger.timestamp = False
1154
1154
1155 if log_raw_input:
1155 if log_raw_input:
1156 input_hist = self.shell.input_hist_raw
1156 input_hist = self.shell.input_hist_raw
1157 else:
1157 else:
1158 input_hist = self.shell.input_hist
1158 input_hist = self.shell.input_hist
1159
1159
1160 if log_output:
1160 if log_output:
1161 log_write = logger.log_write
1161 log_write = logger.log_write
1162 output_hist = self.shell.output_hist
1162 output_hist = self.shell.output_hist
1163 for n in range(1,len(input_hist)-1):
1163 for n in range(1,len(input_hist)-1):
1164 log_write(input_hist[n].rstrip())
1164 log_write(input_hist[n].rstrip())
1165 if n in output_hist:
1165 if n in output_hist:
1166 log_write(repr(output_hist[n]),'output')
1166 log_write(repr(output_hist[n]),'output')
1167 else:
1167 else:
1168 logger.log_write(input_hist[1:])
1168 logger.log_write(input_hist[1:])
1169 if timestamp:
1169 if timestamp:
1170 # re-enable timestamping
1170 # re-enable timestamping
1171 logger.timestamp = True
1171 logger.timestamp = True
1172
1172
1173 print ('Activating auto-logging. '
1173 print ('Activating auto-logging. '
1174 'Current session state plus future input saved.')
1174 'Current session state plus future input saved.')
1175 logger.logstate()
1175 logger.logstate()
1176
1176
1177 def magic_logstop(self,parameter_s=''):
1177 def magic_logstop(self,parameter_s=''):
1178 """Fully stop logging and close log file.
1178 """Fully stop logging and close log file.
1179
1179
1180 In order to start logging again, a new %logstart call needs to be made,
1180 In order to start logging again, a new %logstart call needs to be made,
1181 possibly (though not necessarily) with a new filename, mode and other
1181 possibly (though not necessarily) with a new filename, mode and other
1182 options."""
1182 options."""
1183 self.logger.logstop()
1183 self.logger.logstop()
1184
1184
1185 def magic_logoff(self,parameter_s=''):
1185 def magic_logoff(self,parameter_s=''):
1186 """Temporarily stop logging.
1186 """Temporarily stop logging.
1187
1187
1188 You must have previously started logging."""
1188 You must have previously started logging."""
1189 self.shell.logger.switch_log(0)
1189 self.shell.logger.switch_log(0)
1190
1190
1191 def magic_logon(self,parameter_s=''):
1191 def magic_logon(self,parameter_s=''):
1192 """Restart logging.
1192 """Restart logging.
1193
1193
1194 This function is for restarting logging which you've temporarily
1194 This function is for restarting logging which you've temporarily
1195 stopped with %logoff. For starting logging for the first time, you
1195 stopped with %logoff. For starting logging for the first time, you
1196 must use the %logstart function, which allows you to specify an
1196 must use the %logstart function, which allows you to specify an
1197 optional log filename."""
1197 optional log filename."""
1198
1198
1199 self.shell.logger.switch_log(1)
1199 self.shell.logger.switch_log(1)
1200
1200
1201 def magic_logstate(self,parameter_s=''):
1201 def magic_logstate(self,parameter_s=''):
1202 """Print the status of the logging system."""
1202 """Print the status of the logging system."""
1203
1203
1204 self.shell.logger.logstate()
1204 self.shell.logger.logstate()
1205
1205
1206 def magic_pdb(self, parameter_s=''):
1206 def magic_pdb(self, parameter_s=''):
1207 """Control the automatic calling of the pdb interactive debugger.
1207 """Control the automatic calling of the pdb interactive debugger.
1208
1208
1209 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1209 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1210 argument it works as a toggle.
1210 argument it works as a toggle.
1211
1211
1212 When an exception is triggered, IPython can optionally call the
1212 When an exception is triggered, IPython can optionally call the
1213 interactive pdb debugger after the traceback printout. %pdb toggles
1213 interactive pdb debugger after the traceback printout. %pdb toggles
1214 this feature on and off.
1214 this feature on and off.
1215
1215
1216 The initial state of this feature is set in your ipythonrc
1216 The initial state of this feature is set in your ipythonrc
1217 configuration file (the variable is called 'pdb').
1217 configuration file (the variable is called 'pdb').
1218
1218
1219 If you want to just activate the debugger AFTER an exception has fired,
1219 If you want to just activate the debugger AFTER an exception has fired,
1220 without having to type '%pdb on' and rerunning your code, you can use
1220 without having to type '%pdb on' and rerunning your code, you can use
1221 the %debug magic."""
1221 the %debug magic."""
1222
1222
1223 par = parameter_s.strip().lower()
1223 par = parameter_s.strip().lower()
1224
1224
1225 if par:
1225 if par:
1226 try:
1226 try:
1227 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1227 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1228 except KeyError:
1228 except KeyError:
1229 print ('Incorrect argument. Use on/1, off/0, '
1229 print ('Incorrect argument. Use on/1, off/0, '
1230 'or nothing for a toggle.')
1230 'or nothing for a toggle.')
1231 return
1231 return
1232 else:
1232 else:
1233 # toggle
1233 # toggle
1234 new_pdb = not self.shell.call_pdb
1234 new_pdb = not self.shell.call_pdb
1235
1235
1236 # set on the shell
1236 # set on the shell
1237 self.shell.call_pdb = new_pdb
1237 self.shell.call_pdb = new_pdb
1238 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1238 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1239
1239
1240 def magic_debug(self, parameter_s=''):
1240 def magic_debug(self, parameter_s=''):
1241 """Activate the interactive debugger in post-mortem mode.
1241 """Activate the interactive debugger in post-mortem mode.
1242
1242
1243 If an exception has just occurred, this lets you inspect its stack
1243 If an exception has just occurred, this lets you inspect its stack
1244 frames interactively. Note that this will always work only on the last
1244 frames interactively. Note that this will always work only on the last
1245 traceback that occurred, so you must call this quickly after an
1245 traceback that occurred, so you must call this quickly after an
1246 exception that you wish to inspect has fired, because if another one
1246 exception that you wish to inspect has fired, because if another one
1247 occurs, it clobbers the previous one.
1247 occurs, it clobbers the previous one.
1248
1248
1249 If you want IPython to automatically do this on every exception, see
1249 If you want IPython to automatically do this on every exception, see
1250 the %pdb magic for more details.
1250 the %pdb magic for more details.
1251 """
1251 """
1252
1252
1253 self.shell.debugger(force=True)
1253 self.shell.debugger(force=True)
1254
1254
1255 @testdec.skip_doctest
1255 @testdec.skip_doctest
1256 def magic_prun(self, parameter_s ='',user_mode=1,
1256 def magic_prun(self, parameter_s ='',user_mode=1,
1257 opts=None,arg_lst=None,prog_ns=None):
1257 opts=None,arg_lst=None,prog_ns=None):
1258
1258
1259 """Run a statement through the python code profiler.
1259 """Run a statement through the python code profiler.
1260
1260
1261 Usage:
1261 Usage:
1262 %prun [options] statement
1262 %prun [options] statement
1263
1263
1264 The given statement (which doesn't require quote marks) is run via the
1264 The given statement (which doesn't require quote marks) is run via the
1265 python profiler in a manner similar to the profile.run() function.
1265 python profiler in a manner similar to the profile.run() function.
1266 Namespaces are internally managed to work correctly; profile.run
1266 Namespaces are internally managed to work correctly; profile.run
1267 cannot be used in IPython because it makes certain assumptions about
1267 cannot be used in IPython because it makes certain assumptions about
1268 namespaces which do not hold under IPython.
1268 namespaces which do not hold under IPython.
1269
1269
1270 Options:
1270 Options:
1271
1271
1272 -l <limit>: you can place restrictions on what or how much of the
1272 -l <limit>: you can place restrictions on what or how much of the
1273 profile gets printed. The limit value can be:
1273 profile gets printed. The limit value can be:
1274
1274
1275 * A string: only information for function names containing this string
1275 * A string: only information for function names containing this string
1276 is printed.
1276 is printed.
1277
1277
1278 * An integer: only these many lines are printed.
1278 * An integer: only these many lines are printed.
1279
1279
1280 * A float (between 0 and 1): this fraction of the report is printed
1280 * A float (between 0 and 1): this fraction of the report is printed
1281 (for example, use a limit of 0.4 to see the topmost 40% only).
1281 (for example, use a limit of 0.4 to see the topmost 40% only).
1282
1282
1283 You can combine several limits with repeated use of the option. For
1283 You can combine several limits with repeated use of the option. For
1284 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1284 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1285 information about class constructors.
1285 information about class constructors.
1286
1286
1287 -r: return the pstats.Stats object generated by the profiling. This
1287 -r: return the pstats.Stats object generated by the profiling. This
1288 object has all the information about the profile in it, and you can
1288 object has all the information about the profile in it, and you can
1289 later use it for further analysis or in other functions.
1289 later use it for further analysis or in other functions.
1290
1290
1291 -s <key>: sort profile by given key. You can provide more than one key
1291 -s <key>: sort profile by given key. You can provide more than one key
1292 by using the option several times: '-s key1 -s key2 -s key3...'. The
1292 by using the option several times: '-s key1 -s key2 -s key3...'. The
1293 default sorting key is 'time'.
1293 default sorting key is 'time'.
1294
1294
1295 The following is copied verbatim from the profile documentation
1295 The following is copied verbatim from the profile documentation
1296 referenced below:
1296 referenced below:
1297
1297
1298 When more than one key is provided, additional keys are used as
1298 When more than one key is provided, additional keys are used as
1299 secondary criteria when the there is equality in all keys selected
1299 secondary criteria when the there is equality in all keys selected
1300 before them.
1300 before them.
1301
1301
1302 Abbreviations can be used for any key names, as long as the
1302 Abbreviations can be used for any key names, as long as the
1303 abbreviation is unambiguous. The following are the keys currently
1303 abbreviation is unambiguous. The following are the keys currently
1304 defined:
1304 defined:
1305
1305
1306 Valid Arg Meaning
1306 Valid Arg Meaning
1307 "calls" call count
1307 "calls" call count
1308 "cumulative" cumulative time
1308 "cumulative" cumulative time
1309 "file" file name
1309 "file" file name
1310 "module" file name
1310 "module" file name
1311 "pcalls" primitive call count
1311 "pcalls" primitive call count
1312 "line" line number
1312 "line" line number
1313 "name" function name
1313 "name" function name
1314 "nfl" name/file/line
1314 "nfl" name/file/line
1315 "stdname" standard name
1315 "stdname" standard name
1316 "time" internal time
1316 "time" internal time
1317
1317
1318 Note that all sorts on statistics are in descending order (placing
1318 Note that all sorts on statistics are in descending order (placing
1319 most time consuming items first), where as name, file, and line number
1319 most time consuming items first), where as name, file, and line number
1320 searches are in ascending order (i.e., alphabetical). The subtle
1320 searches are in ascending order (i.e., alphabetical). The subtle
1321 distinction between "nfl" and "stdname" is that the standard name is a
1321 distinction between "nfl" and "stdname" is that the standard name is a
1322 sort of the name as printed, which means that the embedded line
1322 sort of the name as printed, which means that the embedded line
1323 numbers get compared in an odd way. For example, lines 3, 20, and 40
1323 numbers get compared in an odd way. For example, lines 3, 20, and 40
1324 would (if the file names were the same) appear in the string order
1324 would (if the file names were the same) appear in the string order
1325 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1325 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1326 line numbers. In fact, sort_stats("nfl") is the same as
1326 line numbers. In fact, sort_stats("nfl") is the same as
1327 sort_stats("name", "file", "line").
1327 sort_stats("name", "file", "line").
1328
1328
1329 -T <filename>: save profile results as shown on screen to a text
1329 -T <filename>: save profile results as shown on screen to a text
1330 file. The profile is still shown on screen.
1330 file. The profile is still shown on screen.
1331
1331
1332 -D <filename>: save (via dump_stats) profile statistics to given
1332 -D <filename>: save (via dump_stats) profile statistics to given
1333 filename. This data is in a format understod by the pstats module, and
1333 filename. This data is in a format understod by the pstats module, and
1334 is generated by a call to the dump_stats() method of profile
1334 is generated by a call to the dump_stats() method of profile
1335 objects. The profile is still shown on screen.
1335 objects. The profile is still shown on screen.
1336
1336
1337 If you want to run complete programs under the profiler's control, use
1337 If you want to run complete programs under the profiler's control, use
1338 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1338 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1339 contains profiler specific options as described here.
1339 contains profiler specific options as described here.
1340
1340
1341 You can read the complete documentation for the profile module with::
1341 You can read the complete documentation for the profile module with::
1342
1342
1343 In [1]: import profile; profile.help()
1343 In [1]: import profile; profile.help()
1344 """
1344 """
1345
1345
1346 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1346 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1347 # protect user quote marks
1347 # protect user quote marks
1348 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1348 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1349
1349
1350 if user_mode: # regular user call
1350 if user_mode: # regular user call
1351 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1351 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1352 list_all=1)
1352 list_all=1)
1353 namespace = self.shell.user_ns
1353 namespace = self.shell.user_ns
1354 else: # called to run a program by %run -p
1354 else: # called to run a program by %run -p
1355 try:
1355 try:
1356 filename = get_py_filename(arg_lst[0])
1356 filename = get_py_filename(arg_lst[0])
1357 except IOError,msg:
1357 except IOError,msg:
1358 error(msg)
1358 error(msg)
1359 return
1359 return
1360
1360
1361 arg_str = 'execfile(filename,prog_ns)'
1361 arg_str = 'execfile(filename,prog_ns)'
1362 namespace = locals()
1362 namespace = locals()
1363
1363
1364 opts.merge(opts_def)
1364 opts.merge(opts_def)
1365
1365
1366 prof = profile.Profile()
1366 prof = profile.Profile()
1367 try:
1367 try:
1368 prof = prof.runctx(arg_str,namespace,namespace)
1368 prof = prof.runctx(arg_str,namespace,namespace)
1369 sys_exit = ''
1369 sys_exit = ''
1370 except SystemExit:
1370 except SystemExit:
1371 sys_exit = """*** SystemExit exception caught in code being profiled."""
1371 sys_exit = """*** SystemExit exception caught in code being profiled."""
1372
1372
1373 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1373 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1374
1374
1375 lims = opts.l
1375 lims = opts.l
1376 if lims:
1376 if lims:
1377 lims = [] # rebuild lims with ints/floats/strings
1377 lims = [] # rebuild lims with ints/floats/strings
1378 for lim in opts.l:
1378 for lim in opts.l:
1379 try:
1379 try:
1380 lims.append(int(lim))
1380 lims.append(int(lim))
1381 except ValueError:
1381 except ValueError:
1382 try:
1382 try:
1383 lims.append(float(lim))
1383 lims.append(float(lim))
1384 except ValueError:
1384 except ValueError:
1385 lims.append(lim)
1385 lims.append(lim)
1386
1386
1387 # Trap output.
1387 # Trap output.
1388 stdout_trap = StringIO()
1388 stdout_trap = StringIO()
1389
1389
1390 if hasattr(stats,'stream'):
1390 if hasattr(stats,'stream'):
1391 # In newer versions of python, the stats object has a 'stream'
1391 # In newer versions of python, the stats object has a 'stream'
1392 # attribute to write into.
1392 # attribute to write into.
1393 stats.stream = stdout_trap
1393 stats.stream = stdout_trap
1394 stats.print_stats(*lims)
1394 stats.print_stats(*lims)
1395 else:
1395 else:
1396 # For older versions, we manually redirect stdout during printing
1396 # For older versions, we manually redirect stdout during printing
1397 sys_stdout = sys.stdout
1397 sys_stdout = sys.stdout
1398 try:
1398 try:
1399 sys.stdout = stdout_trap
1399 sys.stdout = stdout_trap
1400 stats.print_stats(*lims)
1400 stats.print_stats(*lims)
1401 finally:
1401 finally:
1402 sys.stdout = sys_stdout
1402 sys.stdout = sys_stdout
1403
1403
1404 output = stdout_trap.getvalue()
1404 output = stdout_trap.getvalue()
1405 output = output.rstrip()
1405 output = output.rstrip()
1406
1406
1407 page(output,screen_lines=self.shell.rc.screen_length)
1407 page(output,screen_lines=self.shell.rc.screen_length)
1408 print sys_exit,
1408 print sys_exit,
1409
1409
1410 dump_file = opts.D[0]
1410 dump_file = opts.D[0]
1411 text_file = opts.T[0]
1411 text_file = opts.T[0]
1412 if dump_file:
1412 if dump_file:
1413 prof.dump_stats(dump_file)
1413 prof.dump_stats(dump_file)
1414 print '\n*** Profile stats marshalled to file',\
1414 print '\n*** Profile stats marshalled to file',\
1415 `dump_file`+'.',sys_exit
1415 `dump_file`+'.',sys_exit
1416 if text_file:
1416 if text_file:
1417 pfile = file(text_file,'w')
1417 pfile = file(text_file,'w')
1418 pfile.write(output)
1418 pfile.write(output)
1419 pfile.close()
1419 pfile.close()
1420 print '\n*** Profile printout saved to text file',\
1420 print '\n*** Profile printout saved to text file',\
1421 `text_file`+'.',sys_exit
1421 `text_file`+'.',sys_exit
1422
1422
1423 if opts.has_key('r'):
1423 if opts.has_key('r'):
1424 return stats
1424 return stats
1425 else:
1425 else:
1426 return None
1426 return None
1427
1427
1428 @testdec.skip_doctest
1428 @testdec.skip_doctest
1429 def magic_run(self, parameter_s ='',runner=None):
1429 def magic_run(self, parameter_s ='',runner=None):
1430 """Run the named file inside IPython as a program.
1430 """Run the named file inside IPython as a program.
1431
1431
1432 Usage:\\
1432 Usage:\\
1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1434
1434
1435 Parameters after the filename are passed as command-line arguments to
1435 Parameters after the filename are passed as command-line arguments to
1436 the program (put in sys.argv). Then, control returns to IPython's
1436 the program (put in sys.argv). Then, control returns to IPython's
1437 prompt.
1437 prompt.
1438
1438
1439 This is similar to running at a system prompt:\\
1439 This is similar to running at a system prompt:\\
1440 $ python file args\\
1440 $ python file args\\
1441 but with the advantage of giving you IPython's tracebacks, and of
1441 but with the advantage of giving you IPython's tracebacks, and of
1442 loading all variables into your interactive namespace for further use
1442 loading all variables into your interactive namespace for further use
1443 (unless -p is used, see below).
1443 (unless -p is used, see below).
1444
1444
1445 The file is executed in a namespace initially consisting only of
1445 The file is executed in a namespace initially consisting only of
1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1447 sees its environment as if it were being run as a stand-alone program
1447 sees its environment as if it were being run as a stand-alone program
1448 (except for sharing global objects such as previously imported
1448 (except for sharing global objects such as previously imported
1449 modules). But after execution, the IPython interactive namespace gets
1449 modules). But after execution, the IPython interactive namespace gets
1450 updated with all variables defined in the program (except for __name__
1450 updated with all variables defined in the program (except for __name__
1451 and sys.argv). This allows for very convenient loading of code for
1451 and sys.argv). This allows for very convenient loading of code for
1452 interactive work, while giving each program a 'clean sheet' to run in.
1452 interactive work, while giving each program a 'clean sheet' to run in.
1453
1453
1454 Options:
1454 Options:
1455
1455
1456 -n: __name__ is NOT set to '__main__', but to the running file's name
1456 -n: __name__ is NOT set to '__main__', but to the running file's name
1457 without extension (as python does under import). This allows running
1457 without extension (as python does under import). This allows running
1458 scripts and reloading the definitions in them without calling code
1458 scripts and reloading the definitions in them without calling code
1459 protected by an ' if __name__ == "__main__" ' clause.
1459 protected by an ' if __name__ == "__main__" ' clause.
1460
1460
1461 -i: run the file in IPython's namespace instead of an empty one. This
1461 -i: run the file in IPython's namespace instead of an empty one. This
1462 is useful if you are experimenting with code written in a text editor
1462 is useful if you are experimenting with code written in a text editor
1463 which depends on variables defined interactively.
1463 which depends on variables defined interactively.
1464
1464
1465 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1465 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1466 being run. This is particularly useful if IPython is being used to
1466 being run. This is particularly useful if IPython is being used to
1467 run unittests, which always exit with a sys.exit() call. In such
1467 run unittests, which always exit with a sys.exit() call. In such
1468 cases you are interested in the output of the test results, not in
1468 cases you are interested in the output of the test results, not in
1469 seeing a traceback of the unittest module.
1469 seeing a traceback of the unittest module.
1470
1470
1471 -t: print timing information at the end of the run. IPython will give
1471 -t: print timing information at the end of the run. IPython will give
1472 you an estimated CPU time consumption for your script, which under
1472 you an estimated CPU time consumption for your script, which under
1473 Unix uses the resource module to avoid the wraparound problems of
1473 Unix uses the resource module to avoid the wraparound problems of
1474 time.clock(). Under Unix, an estimate of time spent on system tasks
1474 time.clock(). Under Unix, an estimate of time spent on system tasks
1475 is also given (for Windows platforms this is reported as 0.0).
1475 is also given (for Windows platforms this is reported as 0.0).
1476
1476
1477 If -t is given, an additional -N<N> option can be given, where <N>
1477 If -t is given, an additional -N<N> option can be given, where <N>
1478 must be an integer indicating how many times you want the script to
1478 must be an integer indicating how many times you want the script to
1479 run. The final timing report will include total and per run results.
1479 run. The final timing report will include total and per run results.
1480
1480
1481 For example (testing the script uniq_stable.py):
1481 For example (testing the script uniq_stable.py):
1482
1482
1483 In [1]: run -t uniq_stable
1483 In [1]: run -t uniq_stable
1484
1484
1485 IPython CPU timings (estimated):\\
1485 IPython CPU timings (estimated):\\
1486 User : 0.19597 s.\\
1486 User : 0.19597 s.\\
1487 System: 0.0 s.\\
1487 System: 0.0 s.\\
1488
1488
1489 In [2]: run -t -N5 uniq_stable
1489 In [2]: run -t -N5 uniq_stable
1490
1490
1491 IPython CPU timings (estimated):\\
1491 IPython CPU timings (estimated):\\
1492 Total runs performed: 5\\
1492 Total runs performed: 5\\
1493 Times : Total Per run\\
1493 Times : Total Per run\\
1494 User : 0.910862 s, 0.1821724 s.\\
1494 User : 0.910862 s, 0.1821724 s.\\
1495 System: 0.0 s, 0.0 s.
1495 System: 0.0 s, 0.0 s.
1496
1496
1497 -d: run your program under the control of pdb, the Python debugger.
1497 -d: run your program under the control of pdb, the Python debugger.
1498 This allows you to execute your program step by step, watch variables,
1498 This allows you to execute your program step by step, watch variables,
1499 etc. Internally, what IPython does is similar to calling:
1499 etc. Internally, what IPython does is similar to calling:
1500
1500
1501 pdb.run('execfile("YOURFILENAME")')
1501 pdb.run('execfile("YOURFILENAME")')
1502
1502
1503 with a breakpoint set on line 1 of your file. You can change the line
1503 with a breakpoint set on line 1 of your file. You can change the line
1504 number for this automatic breakpoint to be <N> by using the -bN option
1504 number for this automatic breakpoint to be <N> by using the -bN option
1505 (where N must be an integer). For example:
1505 (where N must be an integer). For example:
1506
1506
1507 %run -d -b40 myscript
1507 %run -d -b40 myscript
1508
1508
1509 will set the first breakpoint at line 40 in myscript.py. Note that
1509 will set the first breakpoint at line 40 in myscript.py. Note that
1510 the first breakpoint must be set on a line which actually does
1510 the first breakpoint must be set on a line which actually does
1511 something (not a comment or docstring) for it to stop execution.
1511 something (not a comment or docstring) for it to stop execution.
1512
1512
1513 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1513 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1514 first enter 'c' (without qoutes) to start execution up to the first
1514 first enter 'c' (without qoutes) to start execution up to the first
1515 breakpoint.
1515 breakpoint.
1516
1516
1517 Entering 'help' gives information about the use of the debugger. You
1517 Entering 'help' gives information about the use of the debugger. You
1518 can easily see pdb's full documentation with "import pdb;pdb.help()"
1518 can easily see pdb's full documentation with "import pdb;pdb.help()"
1519 at a prompt.
1519 at a prompt.
1520
1520
1521 -p: run program under the control of the Python profiler module (which
1521 -p: run program under the control of the Python profiler module (which
1522 prints a detailed report of execution times, function calls, etc).
1522 prints a detailed report of execution times, function calls, etc).
1523
1523
1524 You can pass other options after -p which affect the behavior of the
1524 You can pass other options after -p which affect the behavior of the
1525 profiler itself. See the docs for %prun for details.
1525 profiler itself. See the docs for %prun for details.
1526
1526
1527 In this mode, the program's variables do NOT propagate back to the
1527 In this mode, the program's variables do NOT propagate back to the
1528 IPython interactive namespace (because they remain in the namespace
1528 IPython interactive namespace (because they remain in the namespace
1529 where the profiler executes them).
1529 where the profiler executes them).
1530
1530
1531 Internally this triggers a call to %prun, see its documentation for
1531 Internally this triggers a call to %prun, see its documentation for
1532 details on the options available specifically for profiling.
1532 details on the options available specifically for profiling.
1533
1533
1534 There is one special usage for which the text above doesn't apply:
1534 There is one special usage for which the text above doesn't apply:
1535 if the filename ends with .ipy, the file is run as ipython script,
1535 if the filename ends with .ipy, the file is run as ipython script,
1536 just as if the commands were written on IPython prompt.
1536 just as if the commands were written on IPython prompt.
1537 """
1537 """
1538
1538
1539 # get arguments and set sys.argv for program to be run.
1539 # get arguments and set sys.argv for program to be run.
1540 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1540 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1541 mode='list',list_all=1)
1541 mode='list',list_all=1)
1542
1542
1543 try:
1543 try:
1544 filename = get_py_filename(arg_lst[0])
1544 filename = get_py_filename(arg_lst[0])
1545 except IndexError:
1545 except IndexError:
1546 warn('you must provide at least a filename.')
1546 warn('you must provide at least a filename.')
1547 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1547 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1548 return
1548 return
1549 except IOError,msg:
1549 except IOError,msg:
1550 error(msg)
1550 error(msg)
1551 return
1551 return
1552
1552
1553 if filename.lower().endswith('.ipy'):
1553 if filename.lower().endswith('.ipy'):
1554 self.api.runlines(open(filename).read())
1554 self.api.runlines(open(filename).read())
1555 return
1555 return
1556
1556
1557 # Control the response to exit() calls made by the script being run
1557 # Control the response to exit() calls made by the script being run
1558 exit_ignore = opts.has_key('e')
1558 exit_ignore = opts.has_key('e')
1559
1559
1560 # Make sure that the running script gets a proper sys.argv as if it
1560 # Make sure that the running script gets a proper sys.argv as if it
1561 # were run from a system shell.
1561 # were run from a system shell.
1562 save_argv = sys.argv # save it for later restoring
1562 save_argv = sys.argv # save it for later restoring
1563 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1563 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1564
1564
1565 if opts.has_key('i'):
1565 if opts.has_key('i'):
1566 # Run in user's interactive namespace
1566 # Run in user's interactive namespace
1567 prog_ns = self.shell.user_ns
1567 prog_ns = self.shell.user_ns
1568 __name__save = self.shell.user_ns['__name__']
1568 __name__save = self.shell.user_ns['__name__']
1569 prog_ns['__name__'] = '__main__'
1569 prog_ns['__name__'] = '__main__'
1570 main_mod = FakeModule(prog_ns)
1570 main_mod = FakeModule(prog_ns)
1571 else:
1571 else:
1572 # Run in a fresh, empty namespace
1572 # Run in a fresh, empty namespace
1573 if opts.has_key('n'):
1573 if opts.has_key('n'):
1574 name = os.path.splitext(os.path.basename(filename))[0]
1574 name = os.path.splitext(os.path.basename(filename))[0]
1575 else:
1575 else:
1576 name = '__main__'
1576 name = '__main__'
1577 main_mod = FakeModule()
1577 main_mod = FakeModule()
1578 prog_ns = main_mod.__dict__
1578 prog_ns = main_mod.__dict__
1579 prog_ns['__name__'] = name
1579 prog_ns['__name__'] = name
1580 # The shell MUST hold a reference to main_mod so after %run exits,
1580 # The shell MUST hold a reference to main_mod so after %run exits,
1581 # the python deletion mechanism doesn't zero it out (leaving
1581 # the python deletion mechanism doesn't zero it out (leaving
1582 # dangling references)
1582 # dangling references)
1583 self.shell._user_main_modules.append(main_mod)
1583 self.shell._user_main_modules.append(main_mod)
1584
1584
1585 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1585 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1586 # set the __file__ global in the script's namespace
1586 # set the __file__ global in the script's namespace
1587 prog_ns['__file__'] = filename
1587 prog_ns['__file__'] = filename
1588
1588
1589 # pickle fix. See iplib for an explanation. But we need to make sure
1589 # pickle fix. See iplib for an explanation. But we need to make sure
1590 # that, if we overwrite __main__, we replace it at the end
1590 # that, if we overwrite __main__, we replace it at the end
1591 main_mod_name = prog_ns['__name__']
1591 main_mod_name = prog_ns['__name__']
1592
1592
1593 if main_mod_name == '__main__':
1593 if main_mod_name == '__main__':
1594 restore_main = sys.modules['__main__']
1594 restore_main = sys.modules['__main__']
1595 else:
1595 else:
1596 restore_main = False
1596 restore_main = False
1597
1597
1598 # This needs to be undone at the end to prevent holding references to
1598 # This needs to be undone at the end to prevent holding references to
1599 # every single object ever created.
1599 # every single object ever created.
1600 sys.modules[main_mod_name] = main_mod
1600 sys.modules[main_mod_name] = main_mod
1601
1601
1602 stats = None
1602 stats = None
1603 try:
1603 try:
1604 self.shell.savehist()
1604 self.shell.savehist()
1605
1605
1606 if opts.has_key('p'):
1606 if opts.has_key('p'):
1607 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1607 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1608 else:
1608 else:
1609 if opts.has_key('d'):
1609 if opts.has_key('d'):
1610 deb = Debugger.Pdb(self.shell.rc.colors)
1610 deb = Debugger.Pdb(self.shell.rc.colors)
1611 # reset Breakpoint state, which is moronically kept
1611 # reset Breakpoint state, which is moronically kept
1612 # in a class
1612 # in a class
1613 bdb.Breakpoint.next = 1
1613 bdb.Breakpoint.next = 1
1614 bdb.Breakpoint.bplist = {}
1614 bdb.Breakpoint.bplist = {}
1615 bdb.Breakpoint.bpbynumber = [None]
1615 bdb.Breakpoint.bpbynumber = [None]
1616 # Set an initial breakpoint to stop execution
1616 # Set an initial breakpoint to stop execution
1617 maxtries = 10
1617 maxtries = 10
1618 bp = int(opts.get('b',[1])[0])
1618 bp = int(opts.get('b',[1])[0])
1619 checkline = deb.checkline(filename,bp)
1619 checkline = deb.checkline(filename,bp)
1620 if not checkline:
1620 if not checkline:
1621 for bp in range(bp+1,bp+maxtries+1):
1621 for bp in range(bp+1,bp+maxtries+1):
1622 if deb.checkline(filename,bp):
1622 if deb.checkline(filename,bp):
1623 break
1623 break
1624 else:
1624 else:
1625 msg = ("\nI failed to find a valid line to set "
1625 msg = ("\nI failed to find a valid line to set "
1626 "a breakpoint\n"
1626 "a breakpoint\n"
1627 "after trying up to line: %s.\n"
1627 "after trying up to line: %s.\n"
1628 "Please set a valid breakpoint manually "
1628 "Please set a valid breakpoint manually "
1629 "with the -b option." % bp)
1629 "with the -b option." % bp)
1630 error(msg)
1630 error(msg)
1631 return
1631 return
1632 # if we find a good linenumber, set the breakpoint
1632 # if we find a good linenumber, set the breakpoint
1633 deb.do_break('%s:%s' % (filename,bp))
1633 deb.do_break('%s:%s' % (filename,bp))
1634 # Start file run
1634 # Start file run
1635 print "NOTE: Enter 'c' at the",
1635 print "NOTE: Enter 'c' at the",
1636 print "%s prompt to start your script." % deb.prompt
1636 print "%s prompt to start your script." % deb.prompt
1637 try:
1637 try:
1638 deb.run('execfile("%s")' % filename,prog_ns)
1638 deb.run('execfile("%s")' % filename,prog_ns)
1639
1639
1640 except:
1640 except:
1641 etype, value, tb = sys.exc_info()
1641 etype, value, tb = sys.exc_info()
1642 # Skip three frames in the traceback: the %run one,
1642 # Skip three frames in the traceback: the %run one,
1643 # one inside bdb.py, and the command-line typed by the
1643 # one inside bdb.py, and the command-line typed by the
1644 # user (run by exec in pdb itself).
1644 # user (run by exec in pdb itself).
1645 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1645 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1646 else:
1646 else:
1647 if runner is None:
1647 if runner is None:
1648 runner = self.shell.safe_execfile
1648 runner = self.shell.safe_execfile
1649 if opts.has_key('t'):
1649 if opts.has_key('t'):
1650 # timed execution
1650 # timed execution
1651 try:
1651 try:
1652 nruns = int(opts['N'][0])
1652 nruns = int(opts['N'][0])
1653 if nruns < 1:
1653 if nruns < 1:
1654 error('Number of runs must be >=1')
1654 error('Number of runs must be >=1')
1655 return
1655 return
1656 except (KeyError):
1656 except (KeyError):
1657 nruns = 1
1657 nruns = 1
1658 if nruns == 1:
1658 if nruns == 1:
1659 t0 = clock2()
1659 t0 = clock2()
1660 runner(filename,prog_ns,prog_ns,
1660 runner(filename,prog_ns,prog_ns,
1661 exit_ignore=exit_ignore)
1661 exit_ignore=exit_ignore)
1662 t1 = clock2()
1662 t1 = clock2()
1663 t_usr = t1[0]-t0[0]
1663 t_usr = t1[0]-t0[0]
1664 t_sys = t1[1]-t1[1]
1664 t_sys = t1[1]-t1[1]
1665 print "\nIPython CPU timings (estimated):"
1665 print "\nIPython CPU timings (estimated):"
1666 print " User : %10s s." % t_usr
1666 print " User : %10s s." % t_usr
1667 print " System: %10s s." % t_sys
1667 print " System: %10s s." % t_sys
1668 else:
1668 else:
1669 runs = range(nruns)
1669 runs = range(nruns)
1670 t0 = clock2()
1670 t0 = clock2()
1671 for nr in runs:
1671 for nr in runs:
1672 runner(filename,prog_ns,prog_ns,
1672 runner(filename,prog_ns,prog_ns,
1673 exit_ignore=exit_ignore)
1673 exit_ignore=exit_ignore)
1674 t1 = clock2()
1674 t1 = clock2()
1675 t_usr = t1[0]-t0[0]
1675 t_usr = t1[0]-t0[0]
1676 t_sys = t1[1]-t1[1]
1676 t_sys = t1[1]-t1[1]
1677 print "\nIPython CPU timings (estimated):"
1677 print "\nIPython CPU timings (estimated):"
1678 print "Total runs performed:",nruns
1678 print "Total runs performed:",nruns
1679 print " Times : %10s %10s" % ('Total','Per run')
1679 print " Times : %10s %10s" % ('Total','Per run')
1680 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1680 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1681 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1681 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1682
1682
1683 else:
1683 else:
1684 # regular execution
1684 # regular execution
1685 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1685 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1686 if opts.has_key('i'):
1686 if opts.has_key('i'):
1687 self.shell.user_ns['__name__'] = __name__save
1687 self.shell.user_ns['__name__'] = __name__save
1688 else:
1688 else:
1689 # update IPython interactive namespace
1689 # update IPython interactive namespace
1690 del prog_ns['__name__']
1690 del prog_ns['__name__']
1691 self.shell.user_ns.update(prog_ns)
1691 self.shell.user_ns.update(prog_ns)
1692 finally:
1692 finally:
1693 # Ensure key global structures are restored
1693 # Ensure key global structures are restored
1694 sys.argv = save_argv
1694 sys.argv = save_argv
1695 if restore_main:
1695 if restore_main:
1696 sys.modules['__main__'] = restore_main
1696 sys.modules['__main__'] = restore_main
1697 else:
1697 else:
1698 # Remove from sys.modules the reference to main_mod we'd
1698 # Remove from sys.modules the reference to main_mod we'd
1699 # added. Otherwise it will trap references to objects
1699 # added. Otherwise it will trap references to objects
1700 # contained therein.
1700 # contained therein.
1701 del sys.modules[main_mod_name]
1701 del sys.modules[main_mod_name]
1702 self.shell.reloadhist()
1702 self.shell.reloadhist()
1703
1703
1704 return stats
1704 return stats
1705
1705
1706 def magic_runlog(self, parameter_s =''):
1706 def magic_runlog(self, parameter_s =''):
1707 """Run files as logs.
1707 """Run files as logs.
1708
1708
1709 Usage:\\
1709 Usage:\\
1710 %runlog file1 file2 ...
1710 %runlog file1 file2 ...
1711
1711
1712 Run the named files (treating them as log files) in sequence inside
1712 Run the named files (treating them as log files) in sequence inside
1713 the interpreter, and return to the prompt. This is much slower than
1713 the interpreter, and return to the prompt. This is much slower than
1714 %run because each line is executed in a try/except block, but it
1714 %run because each line is executed in a try/except block, but it
1715 allows running files with syntax errors in them.
1715 allows running files with syntax errors in them.
1716
1716
1717 Normally IPython will guess when a file is one of its own logfiles, so
1717 Normally IPython will guess when a file is one of its own logfiles, so
1718 you can typically use %run even for logs. This shorthand allows you to
1718 you can typically use %run even for logs. This shorthand allows you to
1719 force any file to be treated as a log file."""
1719 force any file to be treated as a log file."""
1720
1720
1721 for f in parameter_s.split():
1721 for f in parameter_s.split():
1722 self.shell.safe_execfile(f,self.shell.user_ns,
1722 self.shell.safe_execfile(f,self.shell.user_ns,
1723 self.shell.user_ns,islog=1)
1723 self.shell.user_ns,islog=1)
1724
1724
1725 @testdec.skip_doctest
1725 @testdec.skip_doctest
1726 def magic_timeit(self, parameter_s =''):
1726 def magic_timeit(self, parameter_s =''):
1727 """Time execution of a Python statement or expression
1727 """Time execution of a Python statement or expression
1728
1728
1729 Usage:\\
1729 Usage:\\
1730 %timeit [-n<N> -r<R> [-t|-c]] statement
1730 %timeit [-n<N> -r<R> [-t|-c]] statement
1731
1731
1732 Time execution of a Python statement or expression using the timeit
1732 Time execution of a Python statement or expression using the timeit
1733 module.
1733 module.
1734
1734
1735 Options:
1735 Options:
1736 -n<N>: execute the given statement <N> times in a loop. If this value
1736 -n<N>: execute the given statement <N> times in a loop. If this value
1737 is not given, a fitting value is chosen.
1737 is not given, a fitting value is chosen.
1738
1738
1739 -r<R>: repeat the loop iteration <R> times and take the best result.
1739 -r<R>: repeat the loop iteration <R> times and take the best result.
1740 Default: 3
1740 Default: 3
1741
1741
1742 -t: use time.time to measure the time, which is the default on Unix.
1742 -t: use time.time to measure the time, which is the default on Unix.
1743 This function measures wall time.
1743 This function measures wall time.
1744
1744
1745 -c: use time.clock to measure the time, which is the default on
1745 -c: use time.clock to measure the time, which is the default on
1746 Windows and measures wall time. On Unix, resource.getrusage is used
1746 Windows and measures wall time. On Unix, resource.getrusage is used
1747 instead and returns the CPU user time.
1747 instead and returns the CPU user time.
1748
1748
1749 -p<P>: use a precision of <P> digits to display the timing result.
1749 -p<P>: use a precision of <P> digits to display the timing result.
1750 Default: 3
1750 Default: 3
1751
1751
1752
1752
1753 Examples:
1753 Examples:
1754
1754
1755 In [1]: %timeit pass
1755 In [1]: %timeit pass
1756 10000000 loops, best of 3: 53.3 ns per loop
1756 10000000 loops, best of 3: 53.3 ns per loop
1757
1757
1758 In [2]: u = None
1758 In [2]: u = None
1759
1759
1760 In [3]: %timeit u is None
1760 In [3]: %timeit u is None
1761 10000000 loops, best of 3: 184 ns per loop
1761 10000000 loops, best of 3: 184 ns per loop
1762
1762
1763 In [4]: %timeit -r 4 u == None
1763 In [4]: %timeit -r 4 u == None
1764 1000000 loops, best of 4: 242 ns per loop
1764 1000000 loops, best of 4: 242 ns per loop
1765
1765
1766 In [5]: import time
1766 In [5]: import time
1767
1767
1768 In [6]: %timeit -n1 time.sleep(2)
1768 In [6]: %timeit -n1 time.sleep(2)
1769 1 loops, best of 3: 2 s per loop
1769 1 loops, best of 3: 2 s per loop
1770
1770
1771
1771
1772 The times reported by %timeit will be slightly higher than those
1772 The times reported by %timeit will be slightly higher than those
1773 reported by the timeit.py script when variables are accessed. This is
1773 reported by the timeit.py script when variables are accessed. This is
1774 due to the fact that %timeit executes the statement in the namespace
1774 due to the fact that %timeit executes the statement in the namespace
1775 of the shell, compared with timeit.py, which uses a single setup
1775 of the shell, compared with timeit.py, which uses a single setup
1776 statement to import function or create variables. Generally, the bias
1776 statement to import function or create variables. Generally, the bias
1777 does not matter as long as results from timeit.py are not mixed with
1777 does not matter as long as results from timeit.py are not mixed with
1778 those from %timeit."""
1778 those from %timeit."""
1779
1779
1780 import timeit
1780 import timeit
1781 import math
1781 import math
1782
1782
1783 units = [u"s", u"ms", u"\xb5s", u"ns"]
1783 units = [u"s", u"ms", u"\xb5s", u"ns"]
1784 scaling = [1, 1e3, 1e6, 1e9]
1784 scaling = [1, 1e3, 1e6, 1e9]
1785
1785
1786 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1786 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1787 posix=False)
1787 posix=False)
1788 if stmt == "":
1788 if stmt == "":
1789 return
1789 return
1790 timefunc = timeit.default_timer
1790 timefunc = timeit.default_timer
1791 number = int(getattr(opts, "n", 0))
1791 number = int(getattr(opts, "n", 0))
1792 repeat = int(getattr(opts, "r", timeit.default_repeat))
1792 repeat = int(getattr(opts, "r", timeit.default_repeat))
1793 precision = int(getattr(opts, "p", 3))
1793 precision = int(getattr(opts, "p", 3))
1794 if hasattr(opts, "t"):
1794 if hasattr(opts, "t"):
1795 timefunc = time.time
1795 timefunc = time.time
1796 if hasattr(opts, "c"):
1796 if hasattr(opts, "c"):
1797 timefunc = clock
1797 timefunc = clock
1798
1798
1799 timer = timeit.Timer(timer=timefunc)
1799 timer = timeit.Timer(timer=timefunc)
1800 # this code has tight coupling to the inner workings of timeit.Timer,
1800 # this code has tight coupling to the inner workings of timeit.Timer,
1801 # but is there a better way to achieve that the code stmt has access
1801 # but is there a better way to achieve that the code stmt has access
1802 # to the shell namespace?
1802 # to the shell namespace?
1803
1803
1804 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1804 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1805 'setup': "pass"}
1805 'setup': "pass"}
1806 # Track compilation time so it can be reported if too long
1806 # Track compilation time so it can be reported if too long
1807 # Minimum time above which compilation time will be reported
1807 # Minimum time above which compilation time will be reported
1808 tc_min = 0.1
1808 tc_min = 0.1
1809
1809
1810 t0 = clock()
1810 t0 = clock()
1811 code = compile(src, "<magic-timeit>", "exec")
1811 code = compile(src, "<magic-timeit>", "exec")
1812 tc = clock()-t0
1812 tc = clock()-t0
1813
1813
1814 ns = {}
1814 ns = {}
1815 exec code in self.shell.user_ns, ns
1815 exec code in self.shell.user_ns, ns
1816 timer.inner = ns["inner"]
1816 timer.inner = ns["inner"]
1817
1817
1818 if number == 0:
1818 if number == 0:
1819 # determine number so that 0.2 <= total time < 2.0
1819 # determine number so that 0.2 <= total time < 2.0
1820 number = 1
1820 number = 1
1821 for i in range(1, 10):
1821 for i in range(1, 10):
1822 number *= 10
1822 number *= 10
1823 if timer.timeit(number) >= 0.2:
1823 if timer.timeit(number) >= 0.2:
1824 break
1824 break
1825
1825
1826 best = min(timer.repeat(repeat, number)) / number
1826 best = min(timer.repeat(repeat, number)) / number
1827
1827
1828 if best > 0.0:
1828 if best > 0.0:
1829 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1829 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1830 else:
1830 else:
1831 order = 3
1831 order = 3
1832 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1832 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1833 precision,
1833 precision,
1834 best * scaling[order],
1834 best * scaling[order],
1835 units[order])
1835 units[order])
1836 if tc > tc_min:
1836 if tc > tc_min:
1837 print "Compiler time: %.2f s" % tc
1837 print "Compiler time: %.2f s" % tc
1838
1838
1839 @testdec.skip_doctest
1839 @testdec.skip_doctest
1840 def magic_time(self,parameter_s = ''):
1840 def magic_time(self,parameter_s = ''):
1841 """Time execution of a Python statement or expression.
1841 """Time execution of a Python statement or expression.
1842
1842
1843 The CPU and wall clock times are printed, and the value of the
1843 The CPU and wall clock times are printed, and the value of the
1844 expression (if any) is returned. Note that under Win32, system time
1844 expression (if any) is returned. Note that under Win32, system time
1845 is always reported as 0, since it can not be measured.
1845 is always reported as 0, since it can not be measured.
1846
1846
1847 This function provides very basic timing functionality. In Python
1847 This function provides very basic timing functionality. In Python
1848 2.3, the timeit module offers more control and sophistication, so this
1848 2.3, the timeit module offers more control and sophistication, so this
1849 could be rewritten to use it (patches welcome).
1849 could be rewritten to use it (patches welcome).
1850
1850
1851 Some examples:
1851 Some examples:
1852
1852
1853 In [1]: time 2**128
1853 In [1]: time 2**128
1854 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1854 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1855 Wall time: 0.00
1855 Wall time: 0.00
1856 Out[1]: 340282366920938463463374607431768211456L
1856 Out[1]: 340282366920938463463374607431768211456L
1857
1857
1858 In [2]: n = 1000000
1858 In [2]: n = 1000000
1859
1859
1860 In [3]: time sum(range(n))
1860 In [3]: time sum(range(n))
1861 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1861 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1862 Wall time: 1.37
1862 Wall time: 1.37
1863 Out[3]: 499999500000L
1863 Out[3]: 499999500000L
1864
1864
1865 In [4]: time print 'hello world'
1865 In [4]: time print 'hello world'
1866 hello world
1866 hello world
1867 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1867 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1868 Wall time: 0.00
1868 Wall time: 0.00
1869
1869
1870 Note that the time needed by Python to compile the given expression
1870 Note that the time needed by Python to compile the given expression
1871 will be reported if it is more than 0.1s. In this example, the
1871 will be reported if it is more than 0.1s. In this example, the
1872 actual exponentiation is done by Python at compilation time, so while
1872 actual exponentiation is done by Python at compilation time, so while
1873 the expression can take a noticeable amount of time to compute, that
1873 the expression can take a noticeable amount of time to compute, that
1874 time is purely due to the compilation:
1874 time is purely due to the compilation:
1875
1875
1876 In [5]: time 3**9999;
1876 In [5]: time 3**9999;
1877 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1877 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1878 Wall time: 0.00 s
1878 Wall time: 0.00 s
1879
1879
1880 In [6]: time 3**999999;
1880 In [6]: time 3**999999;
1881 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1881 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1882 Wall time: 0.00 s
1882 Wall time: 0.00 s
1883 Compiler : 0.78 s
1883 Compiler : 0.78 s
1884 """
1884 """
1885
1885
1886 # fail immediately if the given expression can't be compiled
1886 # fail immediately if the given expression can't be compiled
1887
1887
1888 expr = self.shell.prefilter(parameter_s,False)
1888 expr = self.shell.prefilter(parameter_s,False)
1889
1889
1890 # Minimum time above which compilation time will be reported
1890 # Minimum time above which compilation time will be reported
1891 tc_min = 0.1
1891 tc_min = 0.1
1892
1892
1893 try:
1893 try:
1894 mode = 'eval'
1894 mode = 'eval'
1895 t0 = clock()
1895 t0 = clock()
1896 code = compile(expr,'<timed eval>',mode)
1896 code = compile(expr,'<timed eval>',mode)
1897 tc = clock()-t0
1897 tc = clock()-t0
1898 except SyntaxError:
1898 except SyntaxError:
1899 mode = 'exec'
1899 mode = 'exec'
1900 t0 = clock()
1900 t0 = clock()
1901 code = compile(expr,'<timed exec>',mode)
1901 code = compile(expr,'<timed exec>',mode)
1902 tc = clock()-t0
1902 tc = clock()-t0
1903 # skew measurement as little as possible
1903 # skew measurement as little as possible
1904 glob = self.shell.user_ns
1904 glob = self.shell.user_ns
1905 clk = clock2
1905 clk = clock2
1906 wtime = time.time
1906 wtime = time.time
1907 # time execution
1907 # time execution
1908 wall_st = wtime()
1908 wall_st = wtime()
1909 if mode=='eval':
1909 if mode=='eval':
1910 st = clk()
1910 st = clk()
1911 out = eval(code,glob)
1911 out = eval(code,glob)
1912 end = clk()
1912 end = clk()
1913 else:
1913 else:
1914 st = clk()
1914 st = clk()
1915 exec code in glob
1915 exec code in glob
1916 end = clk()
1916 end = clk()
1917 out = None
1917 out = None
1918 wall_end = wtime()
1918 wall_end = wtime()
1919 # Compute actual times and report
1919 # Compute actual times and report
1920 wall_time = wall_end-wall_st
1920 wall_time = wall_end-wall_st
1921 cpu_user = end[0]-st[0]
1921 cpu_user = end[0]-st[0]
1922 cpu_sys = end[1]-st[1]
1922 cpu_sys = end[1]-st[1]
1923 cpu_tot = cpu_user+cpu_sys
1923 cpu_tot = cpu_user+cpu_sys
1924 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1924 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1925 (cpu_user,cpu_sys,cpu_tot)
1925 (cpu_user,cpu_sys,cpu_tot)
1926 print "Wall time: %.2f s" % wall_time
1926 print "Wall time: %.2f s" % wall_time
1927 if tc > tc_min:
1927 if tc > tc_min:
1928 print "Compiler : %.2f s" % tc
1928 print "Compiler : %.2f s" % tc
1929 return out
1929 return out
1930
1930
1931 @testdec.skip_doctest
1931 @testdec.skip_doctest
1932 def magic_macro(self,parameter_s = ''):
1932 def magic_macro(self,parameter_s = ''):
1933 """Define a set of input lines as a macro for future re-execution.
1933 """Define a set of input lines as a macro for future re-execution.
1934
1934
1935 Usage:\\
1935 Usage:\\
1936 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1936 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1937
1937
1938 Options:
1938 Options:
1939
1939
1940 -r: use 'raw' input. By default, the 'processed' history is used,
1940 -r: use 'raw' input. By default, the 'processed' history is used,
1941 so that magics are loaded in their transformed version to valid
1941 so that magics are loaded in their transformed version to valid
1942 Python. If this option is given, the raw input as typed as the
1942 Python. If this option is given, the raw input as typed as the
1943 command line is used instead.
1943 command line is used instead.
1944
1944
1945 This will define a global variable called `name` which is a string
1945 This will define a global variable called `name` which is a string
1946 made of joining the slices and lines you specify (n1,n2,... numbers
1946 made of joining the slices and lines you specify (n1,n2,... numbers
1947 above) from your input history into a single string. This variable
1947 above) from your input history into a single string. This variable
1948 acts like an automatic function which re-executes those lines as if
1948 acts like an automatic function which re-executes those lines as if
1949 you had typed them. You just type 'name' at the prompt and the code
1949 you had typed them. You just type 'name' at the prompt and the code
1950 executes.
1950 executes.
1951
1951
1952 The notation for indicating number ranges is: n1-n2 means 'use line
1952 The notation for indicating number ranges is: n1-n2 means 'use line
1953 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1953 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1954 using the lines numbered 5,6 and 7.
1954 using the lines numbered 5,6 and 7.
1955
1955
1956 Note: as a 'hidden' feature, you can also use traditional python slice
1956 Note: as a 'hidden' feature, you can also use traditional python slice
1957 notation, where N:M means numbers N through M-1.
1957 notation, where N:M means numbers N through M-1.
1958
1958
1959 For example, if your history contains (%hist prints it):
1959 For example, if your history contains (%hist prints it):
1960
1960
1961 44: x=1
1961 44: x=1
1962 45: y=3
1962 45: y=3
1963 46: z=x+y
1963 46: z=x+y
1964 47: print x
1964 47: print x
1965 48: a=5
1965 48: a=5
1966 49: print 'x',x,'y',y
1966 49: print 'x',x,'y',y
1967
1967
1968 you can create a macro with lines 44 through 47 (included) and line 49
1968 you can create a macro with lines 44 through 47 (included) and line 49
1969 called my_macro with:
1969 called my_macro with:
1970
1970
1971 In [55]: %macro my_macro 44-47 49
1971 In [55]: %macro my_macro 44-47 49
1972
1972
1973 Now, typing `my_macro` (without quotes) will re-execute all this code
1973 Now, typing `my_macro` (without quotes) will re-execute all this code
1974 in one pass.
1974 in one pass.
1975
1975
1976 You don't need to give the line-numbers in order, and any given line
1976 You don't need to give the line-numbers in order, and any given line
1977 number can appear multiple times. You can assemble macros with any
1977 number can appear multiple times. You can assemble macros with any
1978 lines from your input history in any order.
1978 lines from your input history in any order.
1979
1979
1980 The macro is a simple object which holds its value in an attribute,
1980 The macro is a simple object which holds its value in an attribute,
1981 but IPython's display system checks for macros and executes them as
1981 but IPython's display system checks for macros and executes them as
1982 code instead of printing them when you type their name.
1982 code instead of printing them when you type their name.
1983
1983
1984 You can view a macro's contents by explicitly printing it with:
1984 You can view a macro's contents by explicitly printing it with:
1985
1985
1986 'print macro_name'.
1986 'print macro_name'.
1987
1987
1988 For one-off cases which DON'T contain magic function calls in them you
1988 For one-off cases which DON'T contain magic function calls in them you
1989 can obtain similar results by explicitly executing slices from your
1989 can obtain similar results by explicitly executing slices from your
1990 input history with:
1990 input history with:
1991
1991
1992 In [60]: exec In[44:48]+In[49]"""
1992 In [60]: exec In[44:48]+In[49]"""
1993
1993
1994 opts,args = self.parse_options(parameter_s,'r',mode='list')
1994 opts,args = self.parse_options(parameter_s,'r',mode='list')
1995 if not args:
1995 if not args:
1996 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
1996 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
1997 macs.sort()
1997 macs.sort()
1998 return macs
1998 return macs
1999 if len(args) == 1:
1999 if len(args) == 1:
2000 raise UsageError(
2000 raise UsageError(
2001 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2001 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2002 name,ranges = args[0], args[1:]
2002 name,ranges = args[0], args[1:]
2003
2003
2004 #print 'rng',ranges # dbg
2004 #print 'rng',ranges # dbg
2005 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2005 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2006 macro = Macro(lines)
2006 macro = Macro(lines)
2007 self.shell.user_ns.update({name:macro})
2007 self.shell.user_ns.update({name:macro})
2008 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2008 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2009 print 'Macro contents:'
2009 print 'Macro contents:'
2010 print macro,
2010 print macro,
2011
2011
2012 def magic_save(self,parameter_s = ''):
2012 def magic_save(self,parameter_s = ''):
2013 """Save a set of lines to a given filename.
2013 """Save a set of lines to a given filename.
2014
2014
2015 Usage:\\
2015 Usage:\\
2016 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2016 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2017
2017
2018 Options:
2018 Options:
2019
2019
2020 -r: use 'raw' input. By default, the 'processed' history is used,
2020 -r: use 'raw' input. By default, the 'processed' history is used,
2021 so that magics are loaded in their transformed version to valid
2021 so that magics are loaded in their transformed version to valid
2022 Python. If this option is given, the raw input as typed as the
2022 Python. If this option is given, the raw input as typed as the
2023 command line is used instead.
2023 command line is used instead.
2024
2024
2025 This function uses the same syntax as %macro for line extraction, but
2025 This function uses the same syntax as %macro for line extraction, but
2026 instead of creating a macro it saves the resulting string to the
2026 instead of creating a macro it saves the resulting string to the
2027 filename you specify.
2027 filename you specify.
2028
2028
2029 It adds a '.py' extension to the file if you don't do so yourself, and
2029 It adds a '.py' extension to the file if you don't do so yourself, and
2030 it asks for confirmation before overwriting existing files."""
2030 it asks for confirmation before overwriting existing files."""
2031
2031
2032 opts,args = self.parse_options(parameter_s,'r',mode='list')
2032 opts,args = self.parse_options(parameter_s,'r',mode='list')
2033 fname,ranges = args[0], args[1:]
2033 fname,ranges = args[0], args[1:]
2034 if not fname.endswith('.py'):
2034 if not fname.endswith('.py'):
2035 fname += '.py'
2035 fname += '.py'
2036 if os.path.isfile(fname):
2036 if os.path.isfile(fname):
2037 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2037 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2038 if ans.lower() not in ['y','yes']:
2038 if ans.lower() not in ['y','yes']:
2039 print 'Operation cancelled.'
2039 print 'Operation cancelled.'
2040 return
2040 return
2041 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2041 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2042 f = file(fname,'w')
2042 f = file(fname,'w')
2043 f.write(cmds)
2043 f.write(cmds)
2044 f.close()
2044 f.close()
2045 print 'The following commands were written to file `%s`:' % fname
2045 print 'The following commands were written to file `%s`:' % fname
2046 print cmds
2046 print cmds
2047
2047
2048 def _edit_macro(self,mname,macro):
2048 def _edit_macro(self,mname,macro):
2049 """open an editor with the macro data in a file"""
2049 """open an editor with the macro data in a file"""
2050 filename = self.shell.mktempfile(macro.value)
2050 filename = self.shell.mktempfile(macro.value)
2051 self.shell.hooks.editor(filename)
2051 self.shell.hooks.editor(filename)
2052
2052
2053 # and make a new macro object, to replace the old one
2053 # and make a new macro object, to replace the old one
2054 mfile = open(filename)
2054 mfile = open(filename)
2055 mvalue = mfile.read()
2055 mvalue = mfile.read()
2056 mfile.close()
2056 mfile.close()
2057 self.shell.user_ns[mname] = Macro(mvalue)
2057 self.shell.user_ns[mname] = Macro(mvalue)
2058
2058
2059 def magic_ed(self,parameter_s=''):
2059 def magic_ed(self,parameter_s=''):
2060 """Alias to %edit."""
2060 """Alias to %edit."""
2061 return self.magic_edit(parameter_s)
2061 return self.magic_edit(parameter_s)
2062
2062
2063 @testdec.skip_doctest
2063 @testdec.skip_doctest
2064 def magic_edit(self,parameter_s='',last_call=['','']):
2064 def magic_edit(self,parameter_s='',last_call=['','']):
2065 """Bring up an editor and execute the resulting code.
2065 """Bring up an editor and execute the resulting code.
2066
2066
2067 Usage:
2067 Usage:
2068 %edit [options] [args]
2068 %edit [options] [args]
2069
2069
2070 %edit runs IPython's editor hook. The default version of this hook is
2070 %edit runs IPython's editor hook. The default version of this hook is
2071 set to call the __IPYTHON__.rc.editor command. This is read from your
2071 set to call the __IPYTHON__.rc.editor command. This is read from your
2072 environment variable $EDITOR. If this isn't found, it will default to
2072 environment variable $EDITOR. If this isn't found, it will default to
2073 vi under Linux/Unix and to notepad under Windows. See the end of this
2073 vi under Linux/Unix and to notepad under Windows. See the end of this
2074 docstring for how to change the editor hook.
2074 docstring for how to change the editor hook.
2075
2075
2076 You can also set the value of this editor via the command line option
2076 You can also set the value of this editor via the command line option
2077 '-editor' or in your ipythonrc file. This is useful if you wish to use
2077 '-editor' or in your ipythonrc file. This is useful if you wish to use
2078 specifically for IPython an editor different from your typical default
2078 specifically for IPython an editor different from your typical default
2079 (and for Windows users who typically don't set environment variables).
2079 (and for Windows users who typically don't set environment variables).
2080
2080
2081 This command allows you to conveniently edit multi-line code right in
2081 This command allows you to conveniently edit multi-line code right in
2082 your IPython session.
2082 your IPython session.
2083
2083
2084 If called without arguments, %edit opens up an empty editor with a
2084 If called without arguments, %edit opens up an empty editor with a
2085 temporary file and will execute the contents of this file when you
2085 temporary file and will execute the contents of this file when you
2086 close it (don't forget to save it!).
2086 close it (don't forget to save it!).
2087
2087
2088
2088
2089 Options:
2089 Options:
2090
2090
2091 -n <number>: open the editor at a specified line number. By default,
2091 -n <number>: open the editor at a specified line number. By default,
2092 the IPython editor hook uses the unix syntax 'editor +N filename', but
2092 the IPython editor hook uses the unix syntax 'editor +N filename', but
2093 you can configure this by providing your own modified hook if your
2093 you can configure this by providing your own modified hook if your
2094 favorite editor supports line-number specifications with a different
2094 favorite editor supports line-number specifications with a different
2095 syntax.
2095 syntax.
2096
2096
2097 -p: this will call the editor with the same data as the previous time
2097 -p: this will call the editor with the same data as the previous time
2098 it was used, regardless of how long ago (in your current session) it
2098 it was used, regardless of how long ago (in your current session) it
2099 was.
2099 was.
2100
2100
2101 -r: use 'raw' input. This option only applies to input taken from the
2101 -r: use 'raw' input. This option only applies to input taken from the
2102 user's history. By default, the 'processed' history is used, so that
2102 user's history. By default, the 'processed' history is used, so that
2103 magics are loaded in their transformed version to valid Python. If
2103 magics are loaded in their transformed version to valid Python. If
2104 this option is given, the raw input as typed as the command line is
2104 this option is given, the raw input as typed as the command line is
2105 used instead. When you exit the editor, it will be executed by
2105 used instead. When you exit the editor, it will be executed by
2106 IPython's own processor.
2106 IPython's own processor.
2107
2107
2108 -x: do not execute the edited code immediately upon exit. This is
2108 -x: do not execute the edited code immediately upon exit. This is
2109 mainly useful if you are editing programs which need to be called with
2109 mainly useful if you are editing programs which need to be called with
2110 command line arguments, which you can then do using %run.
2110 command line arguments, which you can then do using %run.
2111
2111
2112
2112
2113 Arguments:
2113 Arguments:
2114
2114
2115 If arguments are given, the following possibilites exist:
2115 If arguments are given, the following possibilites exist:
2116
2116
2117 - The arguments are numbers or pairs of colon-separated numbers (like
2117 - The arguments are numbers or pairs of colon-separated numbers (like
2118 1 4:8 9). These are interpreted as lines of previous input to be
2118 1 4:8 9). These are interpreted as lines of previous input to be
2119 loaded into the editor. The syntax is the same of the %macro command.
2119 loaded into the editor. The syntax is the same of the %macro command.
2120
2120
2121 - If the argument doesn't start with a number, it is evaluated as a
2121 - If the argument doesn't start with a number, it is evaluated as a
2122 variable and its contents loaded into the editor. You can thus edit
2122 variable and its contents loaded into the editor. You can thus edit
2123 any string which contains python code (including the result of
2123 any string which contains python code (including the result of
2124 previous edits).
2124 previous edits).
2125
2125
2126 - If the argument is the name of an object (other than a string),
2126 - If the argument is the name of an object (other than a string),
2127 IPython will try to locate the file where it was defined and open the
2127 IPython will try to locate the file where it was defined and open the
2128 editor at the point where it is defined. You can use `%edit function`
2128 editor at the point where it is defined. You can use `%edit function`
2129 to load an editor exactly at the point where 'function' is defined,
2129 to load an editor exactly at the point where 'function' is defined,
2130 edit it and have the file be executed automatically.
2130 edit it and have the file be executed automatically.
2131
2131
2132 If the object is a macro (see %macro for details), this opens up your
2132 If the object is a macro (see %macro for details), this opens up your
2133 specified editor with a temporary file containing the macro's data.
2133 specified editor with a temporary file containing the macro's data.
2134 Upon exit, the macro is reloaded with the contents of the file.
2134 Upon exit, the macro is reloaded with the contents of the file.
2135
2135
2136 Note: opening at an exact line is only supported under Unix, and some
2136 Note: opening at an exact line is only supported under Unix, and some
2137 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2137 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2138 '+NUMBER' parameter necessary for this feature. Good editors like
2138 '+NUMBER' parameter necessary for this feature. Good editors like
2139 (X)Emacs, vi, jed, pico and joe all do.
2139 (X)Emacs, vi, jed, pico and joe all do.
2140
2140
2141 - If the argument is not found as a variable, IPython will look for a
2141 - If the argument is not found as a variable, IPython will look for a
2142 file with that name (adding .py if necessary) and load it into the
2142 file with that name (adding .py if necessary) and load it into the
2143 editor. It will execute its contents with execfile() when you exit,
2143 editor. It will execute its contents with execfile() when you exit,
2144 loading any code in the file into your interactive namespace.
2144 loading any code in the file into your interactive namespace.
2145
2145
2146 After executing your code, %edit will return as output the code you
2146 After executing your code, %edit will return as output the code you
2147 typed in the editor (except when it was an existing file). This way
2147 typed in the editor (except when it was an existing file). This way
2148 you can reload the code in further invocations of %edit as a variable,
2148 you can reload the code in further invocations of %edit as a variable,
2149 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2149 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2150 the output.
2150 the output.
2151
2151
2152 Note that %edit is also available through the alias %ed.
2152 Note that %edit is also available through the alias %ed.
2153
2153
2154 This is an example of creating a simple function inside the editor and
2154 This is an example of creating a simple function inside the editor and
2155 then modifying it. First, start up the editor:
2155 then modifying it. First, start up the editor:
2156
2156
2157 In [1]: ed
2157 In [1]: ed
2158 Editing... done. Executing edited code...
2158 Editing... done. Executing edited code...
2159 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2159 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2160
2160
2161 We can then call the function foo():
2161 We can then call the function foo():
2162
2162
2163 In [2]: foo()
2163 In [2]: foo()
2164 foo() was defined in an editing session
2164 foo() was defined in an editing session
2165
2165
2166 Now we edit foo. IPython automatically loads the editor with the
2166 Now we edit foo. IPython automatically loads the editor with the
2167 (temporary) file where foo() was previously defined:
2167 (temporary) file where foo() was previously defined:
2168
2168
2169 In [3]: ed foo
2169 In [3]: ed foo
2170 Editing... done. Executing edited code...
2170 Editing... done. Executing edited code...
2171
2171
2172 And if we call foo() again we get the modified version:
2172 And if we call foo() again we get the modified version:
2173
2173
2174 In [4]: foo()
2174 In [4]: foo()
2175 foo() has now been changed!
2175 foo() has now been changed!
2176
2176
2177 Here is an example of how to edit a code snippet successive
2177 Here is an example of how to edit a code snippet successive
2178 times. First we call the editor:
2178 times. First we call the editor:
2179
2179
2180 In [5]: ed
2180 In [5]: ed
2181 Editing... done. Executing edited code...
2181 Editing... done. Executing edited code...
2182 hello
2182 hello
2183 Out[5]: "print 'hello'n"
2183 Out[5]: "print 'hello'n"
2184
2184
2185 Now we call it again with the previous output (stored in _):
2185 Now we call it again with the previous output (stored in _):
2186
2186
2187 In [6]: ed _
2187 In [6]: ed _
2188 Editing... done. Executing edited code...
2188 Editing... done. Executing edited code...
2189 hello world
2189 hello world
2190 Out[6]: "print 'hello world'n"
2190 Out[6]: "print 'hello world'n"
2191
2191
2192 Now we call it with the output #8 (stored in _8, also as Out[8]):
2192 Now we call it with the output #8 (stored in _8, also as Out[8]):
2193
2193
2194 In [7]: ed _8
2194 In [7]: ed _8
2195 Editing... done. Executing edited code...
2195 Editing... done. Executing edited code...
2196 hello again
2196 hello again
2197 Out[7]: "print 'hello again'n"
2197 Out[7]: "print 'hello again'n"
2198
2198
2199
2199
2200 Changing the default editor hook:
2200 Changing the default editor hook:
2201
2201
2202 If you wish to write your own editor hook, you can put it in a
2202 If you wish to write your own editor hook, you can put it in a
2203 configuration file which you load at startup time. The default hook
2203 configuration file which you load at startup time. The default hook
2204 is defined in the IPython.hooks module, and you can use that as a
2204 is defined in the IPython.hooks module, and you can use that as a
2205 starting example for further modifications. That file also has
2205 starting example for further modifications. That file also has
2206 general instructions on how to set a new hook for use once you've
2206 general instructions on how to set a new hook for use once you've
2207 defined it."""
2207 defined it."""
2208
2208
2209 # FIXME: This function has become a convoluted mess. It needs a
2209 # FIXME: This function has become a convoluted mess. It needs a
2210 # ground-up rewrite with clean, simple logic.
2210 # ground-up rewrite with clean, simple logic.
2211
2211
2212 def make_filename(arg):
2212 def make_filename(arg):
2213 "Make a filename from the given args"
2213 "Make a filename from the given args"
2214 try:
2214 try:
2215 filename = get_py_filename(arg)
2215 filename = get_py_filename(arg)
2216 except IOError:
2216 except IOError:
2217 if args.endswith('.py'):
2217 if args.endswith('.py'):
2218 filename = arg
2218 filename = arg
2219 else:
2219 else:
2220 filename = None
2220 filename = None
2221 return filename
2221 return filename
2222
2222
2223 # custom exceptions
2223 # custom exceptions
2224 class DataIsObject(Exception): pass
2224 class DataIsObject(Exception): pass
2225
2225
2226 opts,args = self.parse_options(parameter_s,'prxn:')
2226 opts,args = self.parse_options(parameter_s,'prxn:')
2227 # Set a few locals from the options for convenience:
2227 # Set a few locals from the options for convenience:
2228 opts_p = opts.has_key('p')
2228 opts_p = opts.has_key('p')
2229 opts_r = opts.has_key('r')
2229 opts_r = opts.has_key('r')
2230
2230
2231 # Default line number value
2231 # Default line number value
2232 lineno = opts.get('n',None)
2232 lineno = opts.get('n',None)
2233
2233
2234 if opts_p:
2234 if opts_p:
2235 args = '_%s' % last_call[0]
2235 args = '_%s' % last_call[0]
2236 if not self.shell.user_ns.has_key(args):
2236 if not self.shell.user_ns.has_key(args):
2237 args = last_call[1]
2237 args = last_call[1]
2238
2238
2239 # use last_call to remember the state of the previous call, but don't
2239 # use last_call to remember the state of the previous call, but don't
2240 # let it be clobbered by successive '-p' calls.
2240 # let it be clobbered by successive '-p' calls.
2241 try:
2241 try:
2242 last_call[0] = self.shell.outputcache.prompt_count
2242 last_call[0] = self.shell.outputcache.prompt_count
2243 if not opts_p:
2243 if not opts_p:
2244 last_call[1] = parameter_s
2244 last_call[1] = parameter_s
2245 except:
2245 except:
2246 pass
2246 pass
2247
2247
2248 # by default this is done with temp files, except when the given
2248 # by default this is done with temp files, except when the given
2249 # arg is a filename
2249 # arg is a filename
2250 use_temp = 1
2250 use_temp = 1
2251
2251
2252 if re.match(r'\d',args):
2252 if re.match(r'\d',args):
2253 # Mode where user specifies ranges of lines, like in %macro.
2253 # Mode where user specifies ranges of lines, like in %macro.
2254 # This means that you can't edit files whose names begin with
2254 # This means that you can't edit files whose names begin with
2255 # numbers this way. Tough.
2255 # numbers this way. Tough.
2256 ranges = args.split()
2256 ranges = args.split()
2257 data = ''.join(self.extract_input_slices(ranges,opts_r))
2257 data = ''.join(self.extract_input_slices(ranges,opts_r))
2258 elif args.endswith('.py'):
2258 elif args.endswith('.py'):
2259 filename = make_filename(args)
2259 filename = make_filename(args)
2260 data = ''
2260 data = ''
2261 use_temp = 0
2261 use_temp = 0
2262 elif args:
2262 elif args:
2263 try:
2263 try:
2264 # Load the parameter given as a variable. If not a string,
2264 # Load the parameter given as a variable. If not a string,
2265 # process it as an object instead (below)
2265 # process it as an object instead (below)
2266
2266
2267 #print '*** args',args,'type',type(args) # dbg
2267 #print '*** args',args,'type',type(args) # dbg
2268 data = eval(args,self.shell.user_ns)
2268 data = eval(args,self.shell.user_ns)
2269 if not type(data) in StringTypes:
2269 if not type(data) in StringTypes:
2270 raise DataIsObject
2270 raise DataIsObject
2271
2271
2272 except (NameError,SyntaxError):
2272 except (NameError,SyntaxError):
2273 # given argument is not a variable, try as a filename
2273 # given argument is not a variable, try as a filename
2274 filename = make_filename(args)
2274 filename = make_filename(args)
2275 if filename is None:
2275 if filename is None:
2276 warn("Argument given (%s) can't be found as a variable "
2276 warn("Argument given (%s) can't be found as a variable "
2277 "or as a filename." % args)
2277 "or as a filename." % args)
2278 return
2278 return
2279
2279
2280 data = ''
2280 data = ''
2281 use_temp = 0
2281 use_temp = 0
2282 except DataIsObject:
2282 except DataIsObject:
2283
2283
2284 # macros have a special edit function
2284 # macros have a special edit function
2285 if isinstance(data,Macro):
2285 if isinstance(data,Macro):
2286 self._edit_macro(args,data)
2286 self._edit_macro(args,data)
2287 return
2287 return
2288
2288
2289 # For objects, try to edit the file where they are defined
2289 # For objects, try to edit the file where they are defined
2290 try:
2290 try:
2291 filename = inspect.getabsfile(data)
2291 filename = inspect.getabsfile(data)
2292 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2292 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2293 # class created by %edit? Try to find source
2293 # class created by %edit? Try to find source
2294 # by looking for method definitions instead, the
2294 # by looking for method definitions instead, the
2295 # __module__ in those classes is FakeModule.
2295 # __module__ in those classes is FakeModule.
2296 attrs = [getattr(data, aname) for aname in dir(data)]
2296 attrs = [getattr(data, aname) for aname in dir(data)]
2297 for attr in attrs:
2297 for attr in attrs:
2298 if not inspect.ismethod(attr):
2298 if not inspect.ismethod(attr):
2299 continue
2299 continue
2300 filename = inspect.getabsfile(attr)
2300 filename = inspect.getabsfile(attr)
2301 if filename and 'fakemodule' not in filename.lower():
2301 if filename and 'fakemodule' not in filename.lower():
2302 # change the attribute to be the edit target instead
2302 # change the attribute to be the edit target instead
2303 data = attr
2303 data = attr
2304 break
2304 break
2305
2305
2306 datafile = 1
2306 datafile = 1
2307 except TypeError:
2307 except TypeError:
2308 filename = make_filename(args)
2308 filename = make_filename(args)
2309 datafile = 1
2309 datafile = 1
2310 warn('Could not find file where `%s` is defined.\n'
2310 warn('Could not find file where `%s` is defined.\n'
2311 'Opening a file named `%s`' % (args,filename))
2311 'Opening a file named `%s`' % (args,filename))
2312 # Now, make sure we can actually read the source (if it was in
2312 # Now, make sure we can actually read the source (if it was in
2313 # a temp file it's gone by now).
2313 # a temp file it's gone by now).
2314 if datafile:
2314 if datafile:
2315 try:
2315 try:
2316 if lineno is None:
2316 if lineno is None:
2317 lineno = inspect.getsourcelines(data)[1]
2317 lineno = inspect.getsourcelines(data)[1]
2318 except IOError:
2318 except IOError:
2319 filename = make_filename(args)
2319 filename = make_filename(args)
2320 if filename is None:
2320 if filename is None:
2321 warn('The file `%s` where `%s` was defined cannot '
2321 warn('The file `%s` where `%s` was defined cannot '
2322 'be read.' % (filename,data))
2322 'be read.' % (filename,data))
2323 return
2323 return
2324 use_temp = 0
2324 use_temp = 0
2325 else:
2325 else:
2326 data = ''
2326 data = ''
2327
2327
2328 if use_temp:
2328 if use_temp:
2329 filename = self.shell.mktempfile(data)
2329 filename = self.shell.mktempfile(data)
2330 print 'IPython will make a temporary file named:',filename
2330 print 'IPython will make a temporary file named:',filename
2331
2331
2332 # do actual editing here
2332 # do actual editing here
2333 print 'Editing...',
2333 print 'Editing...',
2334 sys.stdout.flush()
2334 sys.stdout.flush()
2335 self.shell.hooks.editor(filename,lineno)
2335 try:
2336 self.shell.hooks.editor(filename,lineno)
2337 except IPython.ipapi.TryNext:
2338 warn('Could not open editor')
2339 return
2336
2340
2337 # XXX TODO: should this be generalized for all string vars?
2341 # XXX TODO: should this be generalized for all string vars?
2338 # For now, this is special-cased to blocks created by cpaste
2342 # For now, this is special-cased to blocks created by cpaste
2339 if args.strip() == 'pasted_block':
2343 if args.strip() == 'pasted_block':
2340 self.shell.user_ns['pasted_block'] = file_read(filename)
2344 self.shell.user_ns['pasted_block'] = file_read(filename)
2341
2345
2342 if opts.has_key('x'): # -x prevents actual execution
2346 if opts.has_key('x'): # -x prevents actual execution
2343 print
2347 print
2344 else:
2348 else:
2345 print 'done. Executing edited code...'
2349 print 'done. Executing edited code...'
2346 if opts_r:
2350 if opts_r:
2347 self.shell.runlines(file_read(filename))
2351 self.shell.runlines(file_read(filename))
2348 else:
2352 else:
2349 self.shell.safe_execfile(filename,self.shell.user_ns,
2353 self.shell.safe_execfile(filename,self.shell.user_ns,
2350 self.shell.user_ns)
2354 self.shell.user_ns)
2351
2355
2352
2356
2353 if use_temp:
2357 if use_temp:
2354 try:
2358 try:
2355 return open(filename).read()
2359 return open(filename).read()
2356 except IOError,msg:
2360 except IOError,msg:
2357 if msg.filename == filename:
2361 if msg.filename == filename:
2358 warn('File not found. Did you forget to save?')
2362 warn('File not found. Did you forget to save?')
2359 return
2363 return
2360 else:
2364 else:
2361 self.shell.showtraceback()
2365 self.shell.showtraceback()
2362
2366
2363 def magic_xmode(self,parameter_s = ''):
2367 def magic_xmode(self,parameter_s = ''):
2364 """Switch modes for the exception handlers.
2368 """Switch modes for the exception handlers.
2365
2369
2366 Valid modes: Plain, Context and Verbose.
2370 Valid modes: Plain, Context and Verbose.
2367
2371
2368 If called without arguments, acts as a toggle."""
2372 If called without arguments, acts as a toggle."""
2369
2373
2370 def xmode_switch_err(name):
2374 def xmode_switch_err(name):
2371 warn('Error changing %s exception modes.\n%s' %
2375 warn('Error changing %s exception modes.\n%s' %
2372 (name,sys.exc_info()[1]))
2376 (name,sys.exc_info()[1]))
2373
2377
2374 shell = self.shell
2378 shell = self.shell
2375 new_mode = parameter_s.strip().capitalize()
2379 new_mode = parameter_s.strip().capitalize()
2376 try:
2380 try:
2377 shell.InteractiveTB.set_mode(mode=new_mode)
2381 shell.InteractiveTB.set_mode(mode=new_mode)
2378 print 'Exception reporting mode:',shell.InteractiveTB.mode
2382 print 'Exception reporting mode:',shell.InteractiveTB.mode
2379 except:
2383 except:
2380 xmode_switch_err('user')
2384 xmode_switch_err('user')
2381
2385
2382 # threaded shells use a special handler in sys.excepthook
2386 # threaded shells use a special handler in sys.excepthook
2383 if shell.isthreaded:
2387 if shell.isthreaded:
2384 try:
2388 try:
2385 shell.sys_excepthook.set_mode(mode=new_mode)
2389 shell.sys_excepthook.set_mode(mode=new_mode)
2386 except:
2390 except:
2387 xmode_switch_err('threaded')
2391 xmode_switch_err('threaded')
2388
2392
2389 def magic_colors(self,parameter_s = ''):
2393 def magic_colors(self,parameter_s = ''):
2390 """Switch color scheme for prompts, info system and exception handlers.
2394 """Switch color scheme for prompts, info system and exception handlers.
2391
2395
2392 Currently implemented schemes: NoColor, Linux, LightBG.
2396 Currently implemented schemes: NoColor, Linux, LightBG.
2393
2397
2394 Color scheme names are not case-sensitive."""
2398 Color scheme names are not case-sensitive."""
2395
2399
2396 def color_switch_err(name):
2400 def color_switch_err(name):
2397 warn('Error changing %s color schemes.\n%s' %
2401 warn('Error changing %s color schemes.\n%s' %
2398 (name,sys.exc_info()[1]))
2402 (name,sys.exc_info()[1]))
2399
2403
2400
2404
2401 new_scheme = parameter_s.strip()
2405 new_scheme = parameter_s.strip()
2402 if not new_scheme:
2406 if not new_scheme:
2403 raise UsageError(
2407 raise UsageError(
2404 "%colors: you must specify a color scheme. See '%colors?'")
2408 "%colors: you must specify a color scheme. See '%colors?'")
2405 return
2409 return
2406 # local shortcut
2410 # local shortcut
2407 shell = self.shell
2411 shell = self.shell
2408
2412
2409 import IPython.rlineimpl as readline
2413 import IPython.rlineimpl as readline
2410
2414
2411 if not readline.have_readline and sys.platform == "win32":
2415 if not readline.have_readline and sys.platform == "win32":
2412 msg = """\
2416 msg = """\
2413 Proper color support under MS Windows requires the pyreadline library.
2417 Proper color support under MS Windows requires the pyreadline library.
2414 You can find it at:
2418 You can find it at:
2415 http://ipython.scipy.org/moin/PyReadline/Intro
2419 http://ipython.scipy.org/moin/PyReadline/Intro
2416 Gary's readline needs the ctypes module, from:
2420 Gary's readline needs the ctypes module, from:
2417 http://starship.python.net/crew/theller/ctypes
2421 http://starship.python.net/crew/theller/ctypes
2418 (Note that ctypes is already part of Python versions 2.5 and newer).
2422 (Note that ctypes is already part of Python versions 2.5 and newer).
2419
2423
2420 Defaulting color scheme to 'NoColor'"""
2424 Defaulting color scheme to 'NoColor'"""
2421 new_scheme = 'NoColor'
2425 new_scheme = 'NoColor'
2422 warn(msg)
2426 warn(msg)
2423
2427
2424 # readline option is 0
2428 # readline option is 0
2425 if not shell.has_readline:
2429 if not shell.has_readline:
2426 new_scheme = 'NoColor'
2430 new_scheme = 'NoColor'
2427
2431
2428 # Set prompt colors
2432 # Set prompt colors
2429 try:
2433 try:
2430 shell.outputcache.set_colors(new_scheme)
2434 shell.outputcache.set_colors(new_scheme)
2431 except:
2435 except:
2432 color_switch_err('prompt')
2436 color_switch_err('prompt')
2433 else:
2437 else:
2434 shell.rc.colors = \
2438 shell.rc.colors = \
2435 shell.outputcache.color_table.active_scheme_name
2439 shell.outputcache.color_table.active_scheme_name
2436 # Set exception colors
2440 # Set exception colors
2437 try:
2441 try:
2438 shell.InteractiveTB.set_colors(scheme = new_scheme)
2442 shell.InteractiveTB.set_colors(scheme = new_scheme)
2439 shell.SyntaxTB.set_colors(scheme = new_scheme)
2443 shell.SyntaxTB.set_colors(scheme = new_scheme)
2440 except:
2444 except:
2441 color_switch_err('exception')
2445 color_switch_err('exception')
2442
2446
2443 # threaded shells use a verbose traceback in sys.excepthook
2447 # threaded shells use a verbose traceback in sys.excepthook
2444 if shell.isthreaded:
2448 if shell.isthreaded:
2445 try:
2449 try:
2446 shell.sys_excepthook.set_colors(scheme=new_scheme)
2450 shell.sys_excepthook.set_colors(scheme=new_scheme)
2447 except:
2451 except:
2448 color_switch_err('system exception handler')
2452 color_switch_err('system exception handler')
2449
2453
2450 # Set info (for 'object?') colors
2454 # Set info (for 'object?') colors
2451 if shell.rc.color_info:
2455 if shell.rc.color_info:
2452 try:
2456 try:
2453 shell.inspector.set_active_scheme(new_scheme)
2457 shell.inspector.set_active_scheme(new_scheme)
2454 except:
2458 except:
2455 color_switch_err('object inspector')
2459 color_switch_err('object inspector')
2456 else:
2460 else:
2457 shell.inspector.set_active_scheme('NoColor')
2461 shell.inspector.set_active_scheme('NoColor')
2458
2462
2459 def magic_color_info(self,parameter_s = ''):
2463 def magic_color_info(self,parameter_s = ''):
2460 """Toggle color_info.
2464 """Toggle color_info.
2461
2465
2462 The color_info configuration parameter controls whether colors are
2466 The color_info configuration parameter controls whether colors are
2463 used for displaying object details (by things like %psource, %pfile or
2467 used for displaying object details (by things like %psource, %pfile or
2464 the '?' system). This function toggles this value with each call.
2468 the '?' system). This function toggles this value with each call.
2465
2469
2466 Note that unless you have a fairly recent pager (less works better
2470 Note that unless you have a fairly recent pager (less works better
2467 than more) in your system, using colored object information displays
2471 than more) in your system, using colored object information displays
2468 will not work properly. Test it and see."""
2472 will not work properly. Test it and see."""
2469
2473
2470 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2474 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2471 self.magic_colors(self.shell.rc.colors)
2475 self.magic_colors(self.shell.rc.colors)
2472 print 'Object introspection functions have now coloring:',
2476 print 'Object introspection functions have now coloring:',
2473 print ['OFF','ON'][self.shell.rc.color_info]
2477 print ['OFF','ON'][self.shell.rc.color_info]
2474
2478
2475 def magic_Pprint(self, parameter_s=''):
2479 def magic_Pprint(self, parameter_s=''):
2476 """Toggle pretty printing on/off."""
2480 """Toggle pretty printing on/off."""
2477
2481
2478 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2482 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2479 print 'Pretty printing has been turned', \
2483 print 'Pretty printing has been turned', \
2480 ['OFF','ON'][self.shell.rc.pprint]
2484 ['OFF','ON'][self.shell.rc.pprint]
2481
2485
2482 def magic_exit(self, parameter_s=''):
2486 def magic_exit(self, parameter_s=''):
2483 """Exit IPython, confirming if configured to do so.
2487 """Exit IPython, confirming if configured to do so.
2484
2488
2485 You can configure whether IPython asks for confirmation upon exit by
2489 You can configure whether IPython asks for confirmation upon exit by
2486 setting the confirm_exit flag in the ipythonrc file."""
2490 setting the confirm_exit flag in the ipythonrc file."""
2487
2491
2488 self.shell.exit()
2492 self.shell.exit()
2489
2493
2490 def magic_quit(self, parameter_s=''):
2494 def magic_quit(self, parameter_s=''):
2491 """Exit IPython, confirming if configured to do so (like %exit)"""
2495 """Exit IPython, confirming if configured to do so (like %exit)"""
2492
2496
2493 self.shell.exit()
2497 self.shell.exit()
2494
2498
2495 def magic_Exit(self, parameter_s=''):
2499 def magic_Exit(self, parameter_s=''):
2496 """Exit IPython without confirmation."""
2500 """Exit IPython without confirmation."""
2497
2501
2498 self.shell.ask_exit()
2502 self.shell.ask_exit()
2499
2503
2500 #......................................................................
2504 #......................................................................
2501 # Functions to implement unix shell-type things
2505 # Functions to implement unix shell-type things
2502
2506
2503 @testdec.skip_doctest
2507 @testdec.skip_doctest
2504 def magic_alias(self, parameter_s = ''):
2508 def magic_alias(self, parameter_s = ''):
2505 """Define an alias for a system command.
2509 """Define an alias for a system command.
2506
2510
2507 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2511 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2508
2512
2509 Then, typing 'alias_name params' will execute the system command 'cmd
2513 Then, typing 'alias_name params' will execute the system command 'cmd
2510 params' (from your underlying operating system).
2514 params' (from your underlying operating system).
2511
2515
2512 Aliases have lower precedence than magic functions and Python normal
2516 Aliases have lower precedence than magic functions and Python normal
2513 variables, so if 'foo' is both a Python variable and an alias, the
2517 variables, so if 'foo' is both a Python variable and an alias, the
2514 alias can not be executed until 'del foo' removes the Python variable.
2518 alias can not be executed until 'del foo' removes the Python variable.
2515
2519
2516 You can use the %l specifier in an alias definition to represent the
2520 You can use the %l specifier in an alias definition to represent the
2517 whole line when the alias is called. For example:
2521 whole line when the alias is called. For example:
2518
2522
2519 In [2]: alias all echo "Input in brackets: <%l>"
2523 In [2]: alias all echo "Input in brackets: <%l>"
2520 In [3]: all hello world
2524 In [3]: all hello world
2521 Input in brackets: <hello world>
2525 Input in brackets: <hello world>
2522
2526
2523 You can also define aliases with parameters using %s specifiers (one
2527 You can also define aliases with parameters using %s specifiers (one
2524 per parameter):
2528 per parameter):
2525
2529
2526 In [1]: alias parts echo first %s second %s
2530 In [1]: alias parts echo first %s second %s
2527 In [2]: %parts A B
2531 In [2]: %parts A B
2528 first A second B
2532 first A second B
2529 In [3]: %parts A
2533 In [3]: %parts A
2530 Incorrect number of arguments: 2 expected.
2534 Incorrect number of arguments: 2 expected.
2531 parts is an alias to: 'echo first %s second %s'
2535 parts is an alias to: 'echo first %s second %s'
2532
2536
2533 Note that %l and %s are mutually exclusive. You can only use one or
2537 Note that %l and %s are mutually exclusive. You can only use one or
2534 the other in your aliases.
2538 the other in your aliases.
2535
2539
2536 Aliases expand Python variables just like system calls using ! or !!
2540 Aliases expand Python variables just like system calls using ! or !!
2537 do: all expressions prefixed with '$' get expanded. For details of
2541 do: all expressions prefixed with '$' get expanded. For details of
2538 the semantic rules, see PEP-215:
2542 the semantic rules, see PEP-215:
2539 http://www.python.org/peps/pep-0215.html. This is the library used by
2543 http://www.python.org/peps/pep-0215.html. This is the library used by
2540 IPython for variable expansion. If you want to access a true shell
2544 IPython for variable expansion. If you want to access a true shell
2541 variable, an extra $ is necessary to prevent its expansion by IPython:
2545 variable, an extra $ is necessary to prevent its expansion by IPython:
2542
2546
2543 In [6]: alias show echo
2547 In [6]: alias show echo
2544 In [7]: PATH='A Python string'
2548 In [7]: PATH='A Python string'
2545 In [8]: show $PATH
2549 In [8]: show $PATH
2546 A Python string
2550 A Python string
2547 In [9]: show $$PATH
2551 In [9]: show $$PATH
2548 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2552 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2549
2553
2550 You can use the alias facility to acess all of $PATH. See the %rehash
2554 You can use the alias facility to acess all of $PATH. See the %rehash
2551 and %rehashx functions, which automatically create aliases for the
2555 and %rehashx functions, which automatically create aliases for the
2552 contents of your $PATH.
2556 contents of your $PATH.
2553
2557
2554 If called with no parameters, %alias prints the current alias table."""
2558 If called with no parameters, %alias prints the current alias table."""
2555
2559
2556 par = parameter_s.strip()
2560 par = parameter_s.strip()
2557 if not par:
2561 if not par:
2558 stored = self.db.get('stored_aliases', {} )
2562 stored = self.db.get('stored_aliases', {} )
2559 atab = self.shell.alias_table
2563 atab = self.shell.alias_table
2560 aliases = atab.keys()
2564 aliases = atab.keys()
2561 aliases.sort()
2565 aliases.sort()
2562 res = []
2566 res = []
2563 showlast = []
2567 showlast = []
2564 for alias in aliases:
2568 for alias in aliases:
2565 special = False
2569 special = False
2566 try:
2570 try:
2567 tgt = atab[alias][1]
2571 tgt = atab[alias][1]
2568 except (TypeError, AttributeError):
2572 except (TypeError, AttributeError):
2569 # unsubscriptable? probably a callable
2573 # unsubscriptable? probably a callable
2570 tgt = atab[alias]
2574 tgt = atab[alias]
2571 special = True
2575 special = True
2572 # 'interesting' aliases
2576 # 'interesting' aliases
2573 if (alias in stored or
2577 if (alias in stored or
2574 special or
2578 special or
2575 alias.lower() != os.path.splitext(tgt)[0].lower() or
2579 alias.lower() != os.path.splitext(tgt)[0].lower() or
2576 ' ' in tgt):
2580 ' ' in tgt):
2577 showlast.append((alias, tgt))
2581 showlast.append((alias, tgt))
2578 else:
2582 else:
2579 res.append((alias, tgt ))
2583 res.append((alias, tgt ))
2580
2584
2581 # show most interesting aliases last
2585 # show most interesting aliases last
2582 res.extend(showlast)
2586 res.extend(showlast)
2583 print "Total number of aliases:",len(aliases)
2587 print "Total number of aliases:",len(aliases)
2584 return res
2588 return res
2585 try:
2589 try:
2586 alias,cmd = par.split(None,1)
2590 alias,cmd = par.split(None,1)
2587 except:
2591 except:
2588 print OInspect.getdoc(self.magic_alias)
2592 print OInspect.getdoc(self.magic_alias)
2589 else:
2593 else:
2590 nargs = cmd.count('%s')
2594 nargs = cmd.count('%s')
2591 if nargs>0 and cmd.find('%l')>=0:
2595 if nargs>0 and cmd.find('%l')>=0:
2592 error('The %s and %l specifiers are mutually exclusive '
2596 error('The %s and %l specifiers are mutually exclusive '
2593 'in alias definitions.')
2597 'in alias definitions.')
2594 else: # all looks OK
2598 else: # all looks OK
2595 self.shell.alias_table[alias] = (nargs,cmd)
2599 self.shell.alias_table[alias] = (nargs,cmd)
2596 self.shell.alias_table_validate(verbose=0)
2600 self.shell.alias_table_validate(verbose=0)
2597 # end magic_alias
2601 # end magic_alias
2598
2602
2599 def magic_unalias(self, parameter_s = ''):
2603 def magic_unalias(self, parameter_s = ''):
2600 """Remove an alias"""
2604 """Remove an alias"""
2601
2605
2602 aname = parameter_s.strip()
2606 aname = parameter_s.strip()
2603 if aname in self.shell.alias_table:
2607 if aname in self.shell.alias_table:
2604 del self.shell.alias_table[aname]
2608 del self.shell.alias_table[aname]
2605 stored = self.db.get('stored_aliases', {} )
2609 stored = self.db.get('stored_aliases', {} )
2606 if aname in stored:
2610 if aname in stored:
2607 print "Removing %stored alias",aname
2611 print "Removing %stored alias",aname
2608 del stored[aname]
2612 del stored[aname]
2609 self.db['stored_aliases'] = stored
2613 self.db['stored_aliases'] = stored
2610
2614
2611
2615
2612 def magic_rehashx(self, parameter_s = ''):
2616 def magic_rehashx(self, parameter_s = ''):
2613 """Update the alias table with all executable files in $PATH.
2617 """Update the alias table with all executable files in $PATH.
2614
2618
2615 This version explicitly checks that every entry in $PATH is a file
2619 This version explicitly checks that every entry in $PATH is a file
2616 with execute access (os.X_OK), so it is much slower than %rehash.
2620 with execute access (os.X_OK), so it is much slower than %rehash.
2617
2621
2618 Under Windows, it checks executability as a match agains a
2622 Under Windows, it checks executability as a match agains a
2619 '|'-separated string of extensions, stored in the IPython config
2623 '|'-separated string of extensions, stored in the IPython config
2620 variable win_exec_ext. This defaults to 'exe|com|bat'.
2624 variable win_exec_ext. This defaults to 'exe|com|bat'.
2621
2625
2622 This function also resets the root module cache of module completer,
2626 This function also resets the root module cache of module completer,
2623 used on slow filesystems.
2627 used on slow filesystems.
2624 """
2628 """
2625
2629
2626
2630
2627 ip = self.api
2631 ip = self.api
2628
2632
2629 # for the benefit of module completer in ipy_completers.py
2633 # for the benefit of module completer in ipy_completers.py
2630 del ip.db['rootmodules']
2634 del ip.db['rootmodules']
2631
2635
2632 path = [os.path.abspath(os.path.expanduser(p)) for p in
2636 path = [os.path.abspath(os.path.expanduser(p)) for p in
2633 os.environ.get('PATH','').split(os.pathsep)]
2637 os.environ.get('PATH','').split(os.pathsep)]
2634 path = filter(os.path.isdir,path)
2638 path = filter(os.path.isdir,path)
2635
2639
2636 alias_table = self.shell.alias_table
2640 alias_table = self.shell.alias_table
2637 syscmdlist = []
2641 syscmdlist = []
2638 if os.name == 'posix':
2642 if os.name == 'posix':
2639 isexec = lambda fname:os.path.isfile(fname) and \
2643 isexec = lambda fname:os.path.isfile(fname) and \
2640 os.access(fname,os.X_OK)
2644 os.access(fname,os.X_OK)
2641 else:
2645 else:
2642
2646
2643 try:
2647 try:
2644 winext = os.environ['pathext'].replace(';','|').replace('.','')
2648 winext = os.environ['pathext'].replace(';','|').replace('.','')
2645 except KeyError:
2649 except KeyError:
2646 winext = 'exe|com|bat|py'
2650 winext = 'exe|com|bat|py'
2647 if 'py' not in winext:
2651 if 'py' not in winext:
2648 winext += '|py'
2652 winext += '|py'
2649 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2653 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2650 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2654 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2651 savedir = os.getcwd()
2655 savedir = os.getcwd()
2652 try:
2656 try:
2653 # write the whole loop for posix/Windows so we don't have an if in
2657 # write the whole loop for posix/Windows so we don't have an if in
2654 # the innermost part
2658 # the innermost part
2655 if os.name == 'posix':
2659 if os.name == 'posix':
2656 for pdir in path:
2660 for pdir in path:
2657 os.chdir(pdir)
2661 os.chdir(pdir)
2658 for ff in os.listdir(pdir):
2662 for ff in os.listdir(pdir):
2659 if isexec(ff) and ff not in self.shell.no_alias:
2663 if isexec(ff) and ff not in self.shell.no_alias:
2660 # each entry in the alias table must be (N,name),
2664 # each entry in the alias table must be (N,name),
2661 # where N is the number of positional arguments of the
2665 # where N is the number of positional arguments of the
2662 # alias.
2666 # alias.
2663 # Dots will be removed from alias names, since ipython
2667 # Dots will be removed from alias names, since ipython
2664 # assumes names with dots to be python code
2668 # assumes names with dots to be python code
2665 alias_table[ff.replace('.','')] = (0,ff)
2669 alias_table[ff.replace('.','')] = (0,ff)
2666 syscmdlist.append(ff)
2670 syscmdlist.append(ff)
2667 else:
2671 else:
2668 for pdir in path:
2672 for pdir in path:
2669 os.chdir(pdir)
2673 os.chdir(pdir)
2670 for ff in os.listdir(pdir):
2674 for ff in os.listdir(pdir):
2671 base, ext = os.path.splitext(ff)
2675 base, ext = os.path.splitext(ff)
2672 if isexec(ff) and base.lower() not in self.shell.no_alias:
2676 if isexec(ff) and base.lower() not in self.shell.no_alias:
2673 if ext.lower() == '.exe':
2677 if ext.lower() == '.exe':
2674 ff = base
2678 ff = base
2675 alias_table[base.lower().replace('.','')] = (0,ff)
2679 alias_table[base.lower().replace('.','')] = (0,ff)
2676 syscmdlist.append(ff)
2680 syscmdlist.append(ff)
2677 # Make sure the alias table doesn't contain keywords or builtins
2681 # Make sure the alias table doesn't contain keywords or builtins
2678 self.shell.alias_table_validate()
2682 self.shell.alias_table_validate()
2679 # Call again init_auto_alias() so we get 'rm -i' and other
2683 # Call again init_auto_alias() so we get 'rm -i' and other
2680 # modified aliases since %rehashx will probably clobber them
2684 # modified aliases since %rehashx will probably clobber them
2681
2685
2682 # no, we don't want them. if %rehashx clobbers them, good,
2686 # no, we don't want them. if %rehashx clobbers them, good,
2683 # we'll probably get better versions
2687 # we'll probably get better versions
2684 # self.shell.init_auto_alias()
2688 # self.shell.init_auto_alias()
2685 db = ip.db
2689 db = ip.db
2686 db['syscmdlist'] = syscmdlist
2690 db['syscmdlist'] = syscmdlist
2687 finally:
2691 finally:
2688 os.chdir(savedir)
2692 os.chdir(savedir)
2689
2693
2690 def magic_pwd(self, parameter_s = ''):
2694 def magic_pwd(self, parameter_s = ''):
2691 """Return the current working directory path."""
2695 """Return the current working directory path."""
2692 return os.getcwd()
2696 return os.getcwd()
2693
2697
2694 def magic_cd(self, parameter_s=''):
2698 def magic_cd(self, parameter_s=''):
2695 """Change the current working directory.
2699 """Change the current working directory.
2696
2700
2697 This command automatically maintains an internal list of directories
2701 This command automatically maintains an internal list of directories
2698 you visit during your IPython session, in the variable _dh. The
2702 you visit during your IPython session, in the variable _dh. The
2699 command %dhist shows this history nicely formatted. You can also
2703 command %dhist shows this history nicely formatted. You can also
2700 do 'cd -<tab>' to see directory history conveniently.
2704 do 'cd -<tab>' to see directory history conveniently.
2701
2705
2702 Usage:
2706 Usage:
2703
2707
2704 cd 'dir': changes to directory 'dir'.
2708 cd 'dir': changes to directory 'dir'.
2705
2709
2706 cd -: changes to the last visited directory.
2710 cd -: changes to the last visited directory.
2707
2711
2708 cd -<n>: changes to the n-th directory in the directory history.
2712 cd -<n>: changes to the n-th directory in the directory history.
2709
2713
2710 cd --foo: change to directory that matches 'foo' in history
2714 cd --foo: change to directory that matches 'foo' in history
2711
2715
2712 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2716 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2713 (note: cd <bookmark_name> is enough if there is no
2717 (note: cd <bookmark_name> is enough if there is no
2714 directory <bookmark_name>, but a bookmark with the name exists.)
2718 directory <bookmark_name>, but a bookmark with the name exists.)
2715 'cd -b <tab>' allows you to tab-complete bookmark names.
2719 'cd -b <tab>' allows you to tab-complete bookmark names.
2716
2720
2717 Options:
2721 Options:
2718
2722
2719 -q: quiet. Do not print the working directory after the cd command is
2723 -q: quiet. Do not print the working directory after the cd command is
2720 executed. By default IPython's cd command does print this directory,
2724 executed. By default IPython's cd command does print this directory,
2721 since the default prompts do not display path information.
2725 since the default prompts do not display path information.
2722
2726
2723 Note that !cd doesn't work for this purpose because the shell where
2727 Note that !cd doesn't work for this purpose because the shell where
2724 !command runs is immediately discarded after executing 'command'."""
2728 !command runs is immediately discarded after executing 'command'."""
2725
2729
2726 parameter_s = parameter_s.strip()
2730 parameter_s = parameter_s.strip()
2727 #bkms = self.shell.persist.get("bookmarks",{})
2731 #bkms = self.shell.persist.get("bookmarks",{})
2728
2732
2729 oldcwd = os.getcwd()
2733 oldcwd = os.getcwd()
2730 numcd = re.match(r'(-)(\d+)$',parameter_s)
2734 numcd = re.match(r'(-)(\d+)$',parameter_s)
2731 # jump in directory history by number
2735 # jump in directory history by number
2732 if numcd:
2736 if numcd:
2733 nn = int(numcd.group(2))
2737 nn = int(numcd.group(2))
2734 try:
2738 try:
2735 ps = self.shell.user_ns['_dh'][nn]
2739 ps = self.shell.user_ns['_dh'][nn]
2736 except IndexError:
2740 except IndexError:
2737 print 'The requested directory does not exist in history.'
2741 print 'The requested directory does not exist in history.'
2738 return
2742 return
2739 else:
2743 else:
2740 opts = {}
2744 opts = {}
2741 elif parameter_s.startswith('--'):
2745 elif parameter_s.startswith('--'):
2742 ps = None
2746 ps = None
2743 fallback = None
2747 fallback = None
2744 pat = parameter_s[2:]
2748 pat = parameter_s[2:]
2745 dh = self.shell.user_ns['_dh']
2749 dh = self.shell.user_ns['_dh']
2746 # first search only by basename (last component)
2750 # first search only by basename (last component)
2747 for ent in reversed(dh):
2751 for ent in reversed(dh):
2748 if pat in os.path.basename(ent) and os.path.isdir(ent):
2752 if pat in os.path.basename(ent) and os.path.isdir(ent):
2749 ps = ent
2753 ps = ent
2750 break
2754 break
2751
2755
2752 if fallback is None and pat in ent and os.path.isdir(ent):
2756 if fallback is None and pat in ent and os.path.isdir(ent):
2753 fallback = ent
2757 fallback = ent
2754
2758
2755 # if we have no last part match, pick the first full path match
2759 # if we have no last part match, pick the first full path match
2756 if ps is None:
2760 if ps is None:
2757 ps = fallback
2761 ps = fallback
2758
2762
2759 if ps is None:
2763 if ps is None:
2760 print "No matching entry in directory history"
2764 print "No matching entry in directory history"
2761 return
2765 return
2762 else:
2766 else:
2763 opts = {}
2767 opts = {}
2764
2768
2765
2769
2766 else:
2770 else:
2767 #turn all non-space-escaping backslashes to slashes,
2771 #turn all non-space-escaping backslashes to slashes,
2768 # for c:\windows\directory\names\
2772 # for c:\windows\directory\names\
2769 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2773 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2770 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2774 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2771 # jump to previous
2775 # jump to previous
2772 if ps == '-':
2776 if ps == '-':
2773 try:
2777 try:
2774 ps = self.shell.user_ns['_dh'][-2]
2778 ps = self.shell.user_ns['_dh'][-2]
2775 except IndexError:
2779 except IndexError:
2776 raise UsageError('%cd -: No previous directory to change to.')
2780 raise UsageError('%cd -: No previous directory to change to.')
2777 # jump to bookmark if needed
2781 # jump to bookmark if needed
2778 else:
2782 else:
2779 if not os.path.isdir(ps) or opts.has_key('b'):
2783 if not os.path.isdir(ps) or opts.has_key('b'):
2780 bkms = self.db.get('bookmarks', {})
2784 bkms = self.db.get('bookmarks', {})
2781
2785
2782 if bkms.has_key(ps):
2786 if bkms.has_key(ps):
2783 target = bkms[ps]
2787 target = bkms[ps]
2784 print '(bookmark:%s) -> %s' % (ps,target)
2788 print '(bookmark:%s) -> %s' % (ps,target)
2785 ps = target
2789 ps = target
2786 else:
2790 else:
2787 if opts.has_key('b'):
2791 if opts.has_key('b'):
2788 raise UsageError("Bookmark '%s' not found. "
2792 raise UsageError("Bookmark '%s' not found. "
2789 "Use '%%bookmark -l' to see your bookmarks." % ps)
2793 "Use '%%bookmark -l' to see your bookmarks." % ps)
2790
2794
2791 # at this point ps should point to the target dir
2795 # at this point ps should point to the target dir
2792 if ps:
2796 if ps:
2793 try:
2797 try:
2794 os.chdir(os.path.expanduser(ps))
2798 os.chdir(os.path.expanduser(ps))
2795 if self.shell.rc.term_title:
2799 if self.shell.rc.term_title:
2796 #print 'set term title:',self.shell.rc.term_title # dbg
2800 #print 'set term title:',self.shell.rc.term_title # dbg
2797 platutils.set_term_title('IPy ' + abbrev_cwd())
2801 platutils.set_term_title('IPy ' + abbrev_cwd())
2798 except OSError:
2802 except OSError:
2799 print sys.exc_info()[1]
2803 print sys.exc_info()[1]
2800 else:
2804 else:
2801 cwd = os.getcwd()
2805 cwd = os.getcwd()
2802 dhist = self.shell.user_ns['_dh']
2806 dhist = self.shell.user_ns['_dh']
2803 if oldcwd != cwd:
2807 if oldcwd != cwd:
2804 dhist.append(cwd)
2808 dhist.append(cwd)
2805 self.db['dhist'] = compress_dhist(dhist)[-100:]
2809 self.db['dhist'] = compress_dhist(dhist)[-100:]
2806
2810
2807 else:
2811 else:
2808 os.chdir(self.shell.home_dir)
2812 os.chdir(self.shell.home_dir)
2809 if self.shell.rc.term_title:
2813 if self.shell.rc.term_title:
2810 platutils.set_term_title("IPy ~")
2814 platutils.set_term_title("IPy ~")
2811 cwd = os.getcwd()
2815 cwd = os.getcwd()
2812 dhist = self.shell.user_ns['_dh']
2816 dhist = self.shell.user_ns['_dh']
2813
2817
2814 if oldcwd != cwd:
2818 if oldcwd != cwd:
2815 dhist.append(cwd)
2819 dhist.append(cwd)
2816 self.db['dhist'] = compress_dhist(dhist)[-100:]
2820 self.db['dhist'] = compress_dhist(dhist)[-100:]
2817 if not 'q' in opts and self.shell.user_ns['_dh']:
2821 if not 'q' in opts and self.shell.user_ns['_dh']:
2818 print self.shell.user_ns['_dh'][-1]
2822 print self.shell.user_ns['_dh'][-1]
2819
2823
2820
2824
2821 def magic_env(self, parameter_s=''):
2825 def magic_env(self, parameter_s=''):
2822 """List environment variables."""
2826 """List environment variables."""
2823
2827
2824 return os.environ.data
2828 return os.environ.data
2825
2829
2826 def magic_pushd(self, parameter_s=''):
2830 def magic_pushd(self, parameter_s=''):
2827 """Place the current dir on stack and change directory.
2831 """Place the current dir on stack and change directory.
2828
2832
2829 Usage:\\
2833 Usage:\\
2830 %pushd ['dirname']
2834 %pushd ['dirname']
2831 """
2835 """
2832
2836
2833 dir_s = self.shell.dir_stack
2837 dir_s = self.shell.dir_stack
2834 tgt = os.path.expanduser(parameter_s)
2838 tgt = os.path.expanduser(parameter_s)
2835 cwd = os.getcwd().replace(self.home_dir,'~')
2839 cwd = os.getcwd().replace(self.home_dir,'~')
2836 if tgt:
2840 if tgt:
2837 self.magic_cd(parameter_s)
2841 self.magic_cd(parameter_s)
2838 dir_s.insert(0,cwd)
2842 dir_s.insert(0,cwd)
2839 return self.magic_dirs()
2843 return self.magic_dirs()
2840
2844
2841 def magic_popd(self, parameter_s=''):
2845 def magic_popd(self, parameter_s=''):
2842 """Change to directory popped off the top of the stack.
2846 """Change to directory popped off the top of the stack.
2843 """
2847 """
2844 if not self.shell.dir_stack:
2848 if not self.shell.dir_stack:
2845 raise UsageError("%popd on empty stack")
2849 raise UsageError("%popd on empty stack")
2846 top = self.shell.dir_stack.pop(0)
2850 top = self.shell.dir_stack.pop(0)
2847 self.magic_cd(top)
2851 self.magic_cd(top)
2848 print "popd ->",top
2852 print "popd ->",top
2849
2853
2850 def magic_dirs(self, parameter_s=''):
2854 def magic_dirs(self, parameter_s=''):
2851 """Return the current directory stack."""
2855 """Return the current directory stack."""
2852
2856
2853 return self.shell.dir_stack
2857 return self.shell.dir_stack
2854
2858
2855 def magic_dhist(self, parameter_s=''):
2859 def magic_dhist(self, parameter_s=''):
2856 """Print your history of visited directories.
2860 """Print your history of visited directories.
2857
2861
2858 %dhist -> print full history\\
2862 %dhist -> print full history\\
2859 %dhist n -> print last n entries only\\
2863 %dhist n -> print last n entries only\\
2860 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2864 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2861
2865
2862 This history is automatically maintained by the %cd command, and
2866 This history is automatically maintained by the %cd command, and
2863 always available as the global list variable _dh. You can use %cd -<n>
2867 always available as the global list variable _dh. You can use %cd -<n>
2864 to go to directory number <n>.
2868 to go to directory number <n>.
2865
2869
2866 Note that most of time, you should view directory history by entering
2870 Note that most of time, you should view directory history by entering
2867 cd -<TAB>.
2871 cd -<TAB>.
2868
2872
2869 """
2873 """
2870
2874
2871 dh = self.shell.user_ns['_dh']
2875 dh = self.shell.user_ns['_dh']
2872 if parameter_s:
2876 if parameter_s:
2873 try:
2877 try:
2874 args = map(int,parameter_s.split())
2878 args = map(int,parameter_s.split())
2875 except:
2879 except:
2876 self.arg_err(Magic.magic_dhist)
2880 self.arg_err(Magic.magic_dhist)
2877 return
2881 return
2878 if len(args) == 1:
2882 if len(args) == 1:
2879 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2883 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2880 elif len(args) == 2:
2884 elif len(args) == 2:
2881 ini,fin = args
2885 ini,fin = args
2882 else:
2886 else:
2883 self.arg_err(Magic.magic_dhist)
2887 self.arg_err(Magic.magic_dhist)
2884 return
2888 return
2885 else:
2889 else:
2886 ini,fin = 0,len(dh)
2890 ini,fin = 0,len(dh)
2887 nlprint(dh,
2891 nlprint(dh,
2888 header = 'Directory history (kept in _dh)',
2892 header = 'Directory history (kept in _dh)',
2889 start=ini,stop=fin)
2893 start=ini,stop=fin)
2890
2894
2891 @testdec.skip_doctest
2895 @testdec.skip_doctest
2892 def magic_sc(self, parameter_s=''):
2896 def magic_sc(self, parameter_s=''):
2893 """Shell capture - execute a shell command and capture its output.
2897 """Shell capture - execute a shell command and capture its output.
2894
2898
2895 DEPRECATED. Suboptimal, retained for backwards compatibility.
2899 DEPRECATED. Suboptimal, retained for backwards compatibility.
2896
2900
2897 You should use the form 'var = !command' instead. Example:
2901 You should use the form 'var = !command' instead. Example:
2898
2902
2899 "%sc -l myfiles = ls ~" should now be written as
2903 "%sc -l myfiles = ls ~" should now be written as
2900
2904
2901 "myfiles = !ls ~"
2905 "myfiles = !ls ~"
2902
2906
2903 myfiles.s, myfiles.l and myfiles.n still apply as documented
2907 myfiles.s, myfiles.l and myfiles.n still apply as documented
2904 below.
2908 below.
2905
2909
2906 --
2910 --
2907 %sc [options] varname=command
2911 %sc [options] varname=command
2908
2912
2909 IPython will run the given command using commands.getoutput(), and
2913 IPython will run the given command using commands.getoutput(), and
2910 will then update the user's interactive namespace with a variable
2914 will then update the user's interactive namespace with a variable
2911 called varname, containing the value of the call. Your command can
2915 called varname, containing the value of the call. Your command can
2912 contain shell wildcards, pipes, etc.
2916 contain shell wildcards, pipes, etc.
2913
2917
2914 The '=' sign in the syntax is mandatory, and the variable name you
2918 The '=' sign in the syntax is mandatory, and the variable name you
2915 supply must follow Python's standard conventions for valid names.
2919 supply must follow Python's standard conventions for valid names.
2916
2920
2917 (A special format without variable name exists for internal use)
2921 (A special format without variable name exists for internal use)
2918
2922
2919 Options:
2923 Options:
2920
2924
2921 -l: list output. Split the output on newlines into a list before
2925 -l: list output. Split the output on newlines into a list before
2922 assigning it to the given variable. By default the output is stored
2926 assigning it to the given variable. By default the output is stored
2923 as a single string.
2927 as a single string.
2924
2928
2925 -v: verbose. Print the contents of the variable.
2929 -v: verbose. Print the contents of the variable.
2926
2930
2927 In most cases you should not need to split as a list, because the
2931 In most cases you should not need to split as a list, because the
2928 returned value is a special type of string which can automatically
2932 returned value is a special type of string which can automatically
2929 provide its contents either as a list (split on newlines) or as a
2933 provide its contents either as a list (split on newlines) or as a
2930 space-separated string. These are convenient, respectively, either
2934 space-separated string. These are convenient, respectively, either
2931 for sequential processing or to be passed to a shell command.
2935 for sequential processing or to be passed to a shell command.
2932
2936
2933 For example:
2937 For example:
2934
2938
2935 # all-random
2939 # all-random
2936
2940
2937 # Capture into variable a
2941 # Capture into variable a
2938 In [1]: sc a=ls *py
2942 In [1]: sc a=ls *py
2939
2943
2940 # a is a string with embedded newlines
2944 # a is a string with embedded newlines
2941 In [2]: a
2945 In [2]: a
2942 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2946 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2943
2947
2944 # which can be seen as a list:
2948 # which can be seen as a list:
2945 In [3]: a.l
2949 In [3]: a.l
2946 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2950 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2947
2951
2948 # or as a whitespace-separated string:
2952 # or as a whitespace-separated string:
2949 In [4]: a.s
2953 In [4]: a.s
2950 Out[4]: 'setup.py win32_manual_post_install.py'
2954 Out[4]: 'setup.py win32_manual_post_install.py'
2951
2955
2952 # a.s is useful to pass as a single command line:
2956 # a.s is useful to pass as a single command line:
2953 In [5]: !wc -l $a.s
2957 In [5]: !wc -l $a.s
2954 146 setup.py
2958 146 setup.py
2955 130 win32_manual_post_install.py
2959 130 win32_manual_post_install.py
2956 276 total
2960 276 total
2957
2961
2958 # while the list form is useful to loop over:
2962 # while the list form is useful to loop over:
2959 In [6]: for f in a.l:
2963 In [6]: for f in a.l:
2960 ...: !wc -l $f
2964 ...: !wc -l $f
2961 ...:
2965 ...:
2962 146 setup.py
2966 146 setup.py
2963 130 win32_manual_post_install.py
2967 130 win32_manual_post_install.py
2964
2968
2965 Similiarly, the lists returned by the -l option are also special, in
2969 Similiarly, the lists returned by the -l option are also special, in
2966 the sense that you can equally invoke the .s attribute on them to
2970 the sense that you can equally invoke the .s attribute on them to
2967 automatically get a whitespace-separated string from their contents:
2971 automatically get a whitespace-separated string from their contents:
2968
2972
2969 In [7]: sc -l b=ls *py
2973 In [7]: sc -l b=ls *py
2970
2974
2971 In [8]: b
2975 In [8]: b
2972 Out[8]: ['setup.py', 'win32_manual_post_install.py']
2976 Out[8]: ['setup.py', 'win32_manual_post_install.py']
2973
2977
2974 In [9]: b.s
2978 In [9]: b.s
2975 Out[9]: 'setup.py win32_manual_post_install.py'
2979 Out[9]: 'setup.py win32_manual_post_install.py'
2976
2980
2977 In summary, both the lists and strings used for ouptut capture have
2981 In summary, both the lists and strings used for ouptut capture have
2978 the following special attributes:
2982 the following special attributes:
2979
2983
2980 .l (or .list) : value as list.
2984 .l (or .list) : value as list.
2981 .n (or .nlstr): value as newline-separated string.
2985 .n (or .nlstr): value as newline-separated string.
2982 .s (or .spstr): value as space-separated string.
2986 .s (or .spstr): value as space-separated string.
2983 """
2987 """
2984
2988
2985 opts,args = self.parse_options(parameter_s,'lv')
2989 opts,args = self.parse_options(parameter_s,'lv')
2986 # Try to get a variable name and command to run
2990 # Try to get a variable name and command to run
2987 try:
2991 try:
2988 # the variable name must be obtained from the parse_options
2992 # the variable name must be obtained from the parse_options
2989 # output, which uses shlex.split to strip options out.
2993 # output, which uses shlex.split to strip options out.
2990 var,_ = args.split('=',1)
2994 var,_ = args.split('=',1)
2991 var = var.strip()
2995 var = var.strip()
2992 # But the the command has to be extracted from the original input
2996 # But the the command has to be extracted from the original input
2993 # parameter_s, not on what parse_options returns, to avoid the
2997 # parameter_s, not on what parse_options returns, to avoid the
2994 # quote stripping which shlex.split performs on it.
2998 # quote stripping which shlex.split performs on it.
2995 _,cmd = parameter_s.split('=',1)
2999 _,cmd = parameter_s.split('=',1)
2996 except ValueError:
3000 except ValueError:
2997 var,cmd = '',''
3001 var,cmd = '',''
2998 # If all looks ok, proceed
3002 # If all looks ok, proceed
2999 out,err = self.shell.getoutputerror(cmd)
3003 out,err = self.shell.getoutputerror(cmd)
3000 if err:
3004 if err:
3001 print >> Term.cerr,err
3005 print >> Term.cerr,err
3002 if opts.has_key('l'):
3006 if opts.has_key('l'):
3003 out = SList(out.split('\n'))
3007 out = SList(out.split('\n'))
3004 else:
3008 else:
3005 out = LSString(out)
3009 out = LSString(out)
3006 if opts.has_key('v'):
3010 if opts.has_key('v'):
3007 print '%s ==\n%s' % (var,pformat(out))
3011 print '%s ==\n%s' % (var,pformat(out))
3008 if var:
3012 if var:
3009 self.shell.user_ns.update({var:out})
3013 self.shell.user_ns.update({var:out})
3010 else:
3014 else:
3011 return out
3015 return out
3012
3016
3013 def magic_sx(self, parameter_s=''):
3017 def magic_sx(self, parameter_s=''):
3014 """Shell execute - run a shell command and capture its output.
3018 """Shell execute - run a shell command and capture its output.
3015
3019
3016 %sx command
3020 %sx command
3017
3021
3018 IPython will run the given command using commands.getoutput(), and
3022 IPython will run the given command using commands.getoutput(), and
3019 return the result formatted as a list (split on '\\n'). Since the
3023 return the result formatted as a list (split on '\\n'). Since the
3020 output is _returned_, it will be stored in ipython's regular output
3024 output is _returned_, it will be stored in ipython's regular output
3021 cache Out[N] and in the '_N' automatic variables.
3025 cache Out[N] and in the '_N' automatic variables.
3022
3026
3023 Notes:
3027 Notes:
3024
3028
3025 1) If an input line begins with '!!', then %sx is automatically
3029 1) If an input line begins with '!!', then %sx is automatically
3026 invoked. That is, while:
3030 invoked. That is, while:
3027 !ls
3031 !ls
3028 causes ipython to simply issue system('ls'), typing
3032 causes ipython to simply issue system('ls'), typing
3029 !!ls
3033 !!ls
3030 is a shorthand equivalent to:
3034 is a shorthand equivalent to:
3031 %sx ls
3035 %sx ls
3032
3036
3033 2) %sx differs from %sc in that %sx automatically splits into a list,
3037 2) %sx differs from %sc in that %sx automatically splits into a list,
3034 like '%sc -l'. The reason for this is to make it as easy as possible
3038 like '%sc -l'. The reason for this is to make it as easy as possible
3035 to process line-oriented shell output via further python commands.
3039 to process line-oriented shell output via further python commands.
3036 %sc is meant to provide much finer control, but requires more
3040 %sc is meant to provide much finer control, but requires more
3037 typing.
3041 typing.
3038
3042
3039 3) Just like %sc -l, this is a list with special attributes:
3043 3) Just like %sc -l, this is a list with special attributes:
3040
3044
3041 .l (or .list) : value as list.
3045 .l (or .list) : value as list.
3042 .n (or .nlstr): value as newline-separated string.
3046 .n (or .nlstr): value as newline-separated string.
3043 .s (or .spstr): value as whitespace-separated string.
3047 .s (or .spstr): value as whitespace-separated string.
3044
3048
3045 This is very useful when trying to use such lists as arguments to
3049 This is very useful when trying to use such lists as arguments to
3046 system commands."""
3050 system commands."""
3047
3051
3048 if parameter_s:
3052 if parameter_s:
3049 out,err = self.shell.getoutputerror(parameter_s)
3053 out,err = self.shell.getoutputerror(parameter_s)
3050 if err:
3054 if err:
3051 print >> Term.cerr,err
3055 print >> Term.cerr,err
3052 return SList(out.split('\n'))
3056 return SList(out.split('\n'))
3053
3057
3054 def magic_bg(self, parameter_s=''):
3058 def magic_bg(self, parameter_s=''):
3055 """Run a job in the background, in a separate thread.
3059 """Run a job in the background, in a separate thread.
3056
3060
3057 For example,
3061 For example,
3058
3062
3059 %bg myfunc(x,y,z=1)
3063 %bg myfunc(x,y,z=1)
3060
3064
3061 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3065 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3062 execution starts, a message will be printed indicating the job
3066 execution starts, a message will be printed indicating the job
3063 number. If your job number is 5, you can use
3067 number. If your job number is 5, you can use
3064
3068
3065 myvar = jobs.result(5) or myvar = jobs[5].result
3069 myvar = jobs.result(5) or myvar = jobs[5].result
3066
3070
3067 to assign this result to variable 'myvar'.
3071 to assign this result to variable 'myvar'.
3068
3072
3069 IPython has a job manager, accessible via the 'jobs' object. You can
3073 IPython has a job manager, accessible via the 'jobs' object. You can
3070 type jobs? to get more information about it, and use jobs.<TAB> to see
3074 type jobs? to get more information about it, and use jobs.<TAB> to see
3071 its attributes. All attributes not starting with an underscore are
3075 its attributes. All attributes not starting with an underscore are
3072 meant for public use.
3076 meant for public use.
3073
3077
3074 In particular, look at the jobs.new() method, which is used to create
3078 In particular, look at the jobs.new() method, which is used to create
3075 new jobs. This magic %bg function is just a convenience wrapper
3079 new jobs. This magic %bg function is just a convenience wrapper
3076 around jobs.new(), for expression-based jobs. If you want to create a
3080 around jobs.new(), for expression-based jobs. If you want to create a
3077 new job with an explicit function object and arguments, you must call
3081 new job with an explicit function object and arguments, you must call
3078 jobs.new() directly.
3082 jobs.new() directly.
3079
3083
3080 The jobs.new docstring also describes in detail several important
3084 The jobs.new docstring also describes in detail several important
3081 caveats associated with a thread-based model for background job
3085 caveats associated with a thread-based model for background job
3082 execution. Type jobs.new? for details.
3086 execution. Type jobs.new? for details.
3083
3087
3084 You can check the status of all jobs with jobs.status().
3088 You can check the status of all jobs with jobs.status().
3085
3089
3086 The jobs variable is set by IPython into the Python builtin namespace.
3090 The jobs variable is set by IPython into the Python builtin namespace.
3087 If you ever declare a variable named 'jobs', you will shadow this
3091 If you ever declare a variable named 'jobs', you will shadow this
3088 name. You can either delete your global jobs variable to regain
3092 name. You can either delete your global jobs variable to regain
3089 access to the job manager, or make a new name and assign it manually
3093 access to the job manager, or make a new name and assign it manually
3090 to the manager (stored in IPython's namespace). For example, to
3094 to the manager (stored in IPython's namespace). For example, to
3091 assign the job manager to the Jobs name, use:
3095 assign the job manager to the Jobs name, use:
3092
3096
3093 Jobs = __builtins__.jobs"""
3097 Jobs = __builtins__.jobs"""
3094
3098
3095 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3099 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3096
3100
3097 def magic_r(self, parameter_s=''):
3101 def magic_r(self, parameter_s=''):
3098 """Repeat previous input.
3102 """Repeat previous input.
3099
3103
3100 Note: Consider using the more powerfull %rep instead!
3104 Note: Consider using the more powerfull %rep instead!
3101
3105
3102 If given an argument, repeats the previous command which starts with
3106 If given an argument, repeats the previous command which starts with
3103 the same string, otherwise it just repeats the previous input.
3107 the same string, otherwise it just repeats the previous input.
3104
3108
3105 Shell escaped commands (with ! as first character) are not recognized
3109 Shell escaped commands (with ! as first character) are not recognized
3106 by this system, only pure python code and magic commands.
3110 by this system, only pure python code and magic commands.
3107 """
3111 """
3108
3112
3109 start = parameter_s.strip()
3113 start = parameter_s.strip()
3110 esc_magic = self.shell.ESC_MAGIC
3114 esc_magic = self.shell.ESC_MAGIC
3111 # Identify magic commands even if automagic is on (which means
3115 # Identify magic commands even if automagic is on (which means
3112 # the in-memory version is different from that typed by the user).
3116 # the in-memory version is different from that typed by the user).
3113 if self.shell.rc.automagic:
3117 if self.shell.rc.automagic:
3114 start_magic = esc_magic+start
3118 start_magic = esc_magic+start
3115 else:
3119 else:
3116 start_magic = start
3120 start_magic = start
3117 # Look through the input history in reverse
3121 # Look through the input history in reverse
3118 for n in range(len(self.shell.input_hist)-2,0,-1):
3122 for n in range(len(self.shell.input_hist)-2,0,-1):
3119 input = self.shell.input_hist[n]
3123 input = self.shell.input_hist[n]
3120 # skip plain 'r' lines so we don't recurse to infinity
3124 # skip plain 'r' lines so we don't recurse to infinity
3121 if input != '_ip.magic("r")\n' and \
3125 if input != '_ip.magic("r")\n' and \
3122 (input.startswith(start) or input.startswith(start_magic)):
3126 (input.startswith(start) or input.startswith(start_magic)):
3123 #print 'match',`input` # dbg
3127 #print 'match',`input` # dbg
3124 print 'Executing:',input,
3128 print 'Executing:',input,
3125 self.shell.runlines(input)
3129 self.shell.runlines(input)
3126 return
3130 return
3127 print 'No previous input matching `%s` found.' % start
3131 print 'No previous input matching `%s` found.' % start
3128
3132
3129
3133
3130 def magic_bookmark(self, parameter_s=''):
3134 def magic_bookmark(self, parameter_s=''):
3131 """Manage IPython's bookmark system.
3135 """Manage IPython's bookmark system.
3132
3136
3133 %bookmark <name> - set bookmark to current dir
3137 %bookmark <name> - set bookmark to current dir
3134 %bookmark <name> <dir> - set bookmark to <dir>
3138 %bookmark <name> <dir> - set bookmark to <dir>
3135 %bookmark -l - list all bookmarks
3139 %bookmark -l - list all bookmarks
3136 %bookmark -d <name> - remove bookmark
3140 %bookmark -d <name> - remove bookmark
3137 %bookmark -r - remove all bookmarks
3141 %bookmark -r - remove all bookmarks
3138
3142
3139 You can later on access a bookmarked folder with:
3143 You can later on access a bookmarked folder with:
3140 %cd -b <name>
3144 %cd -b <name>
3141 or simply '%cd <name>' if there is no directory called <name> AND
3145 or simply '%cd <name>' if there is no directory called <name> AND
3142 there is such a bookmark defined.
3146 there is such a bookmark defined.
3143
3147
3144 Your bookmarks persist through IPython sessions, but they are
3148 Your bookmarks persist through IPython sessions, but they are
3145 associated with each profile."""
3149 associated with each profile."""
3146
3150
3147 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3151 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3148 if len(args) > 2:
3152 if len(args) > 2:
3149 raise UsageError("%bookmark: too many arguments")
3153 raise UsageError("%bookmark: too many arguments")
3150
3154
3151 bkms = self.db.get('bookmarks',{})
3155 bkms = self.db.get('bookmarks',{})
3152
3156
3153 if opts.has_key('d'):
3157 if opts.has_key('d'):
3154 try:
3158 try:
3155 todel = args[0]
3159 todel = args[0]
3156 except IndexError:
3160 except IndexError:
3157 raise UsageError(
3161 raise UsageError(
3158 "%bookmark -d: must provide a bookmark to delete")
3162 "%bookmark -d: must provide a bookmark to delete")
3159 else:
3163 else:
3160 try:
3164 try:
3161 del bkms[todel]
3165 del bkms[todel]
3162 except KeyError:
3166 except KeyError:
3163 raise UsageError(
3167 raise UsageError(
3164 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3168 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3165
3169
3166 elif opts.has_key('r'):
3170 elif opts.has_key('r'):
3167 bkms = {}
3171 bkms = {}
3168 elif opts.has_key('l'):
3172 elif opts.has_key('l'):
3169 bks = bkms.keys()
3173 bks = bkms.keys()
3170 bks.sort()
3174 bks.sort()
3171 if bks:
3175 if bks:
3172 size = max(map(len,bks))
3176 size = max(map(len,bks))
3173 else:
3177 else:
3174 size = 0
3178 size = 0
3175 fmt = '%-'+str(size)+'s -> %s'
3179 fmt = '%-'+str(size)+'s -> %s'
3176 print 'Current bookmarks:'
3180 print 'Current bookmarks:'
3177 for bk in bks:
3181 for bk in bks:
3178 print fmt % (bk,bkms[bk])
3182 print fmt % (bk,bkms[bk])
3179 else:
3183 else:
3180 if not args:
3184 if not args:
3181 raise UsageError("%bookmark: You must specify the bookmark name")
3185 raise UsageError("%bookmark: You must specify the bookmark name")
3182 elif len(args)==1:
3186 elif len(args)==1:
3183 bkms[args[0]] = os.getcwd()
3187 bkms[args[0]] = os.getcwd()
3184 elif len(args)==2:
3188 elif len(args)==2:
3185 bkms[args[0]] = args[1]
3189 bkms[args[0]] = args[1]
3186 self.db['bookmarks'] = bkms
3190 self.db['bookmarks'] = bkms
3187
3191
3188 def magic_pycat(self, parameter_s=''):
3192 def magic_pycat(self, parameter_s=''):
3189 """Show a syntax-highlighted file through a pager.
3193 """Show a syntax-highlighted file through a pager.
3190
3194
3191 This magic is similar to the cat utility, but it will assume the file
3195 This magic is similar to the cat utility, but it will assume the file
3192 to be Python source and will show it with syntax highlighting. """
3196 to be Python source and will show it with syntax highlighting. """
3193
3197
3194 try:
3198 try:
3195 filename = get_py_filename(parameter_s)
3199 filename = get_py_filename(parameter_s)
3196 cont = file_read(filename)
3200 cont = file_read(filename)
3197 except IOError:
3201 except IOError:
3198 try:
3202 try:
3199 cont = eval(parameter_s,self.user_ns)
3203 cont = eval(parameter_s,self.user_ns)
3200 except NameError:
3204 except NameError:
3201 cont = None
3205 cont = None
3202 if cont is None:
3206 if cont is None:
3203 print "Error: no such file or variable"
3207 print "Error: no such file or variable"
3204 return
3208 return
3205
3209
3206 page(self.shell.pycolorize(cont),
3210 page(self.shell.pycolorize(cont),
3207 screen_lines=self.shell.rc.screen_length)
3211 screen_lines=self.shell.rc.screen_length)
3208
3212
3209 def magic_cpaste(self, parameter_s=''):
3213 def magic_cpaste(self, parameter_s=''):
3210 """Allows you to paste & execute a pre-formatted code block from clipboard.
3214 """Allows you to paste & execute a pre-formatted code block from clipboard.
3211
3215
3212 You must terminate the block with '--' (two minus-signs) alone on the
3216 You must terminate the block with '--' (two minus-signs) alone on the
3213 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3217 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3214 is the new sentinel for this operation)
3218 is the new sentinel for this operation)
3215
3219
3216 The block is dedented prior to execution to enable execution of method
3220 The block is dedented prior to execution to enable execution of method
3217 definitions. '>' and '+' characters at the beginning of a line are
3221 definitions. '>' and '+' characters at the beginning of a line are
3218 ignored, to allow pasting directly from e-mails, diff files and
3222 ignored, to allow pasting directly from e-mails, diff files and
3219 doctests (the '...' continuation prompt is also stripped). The
3223 doctests (the '...' continuation prompt is also stripped). The
3220 executed block is also assigned to variable named 'pasted_block' for
3224 executed block is also assigned to variable named 'pasted_block' for
3221 later editing with '%edit pasted_block'.
3225 later editing with '%edit pasted_block'.
3222
3226
3223 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3227 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3224 This assigns the pasted block to variable 'foo' as string, without
3228 This assigns the pasted block to variable 'foo' as string, without
3225 dedenting or executing it (preceding >>> and + is still stripped)
3229 dedenting or executing it (preceding >>> and + is still stripped)
3226
3230
3227 '%cpaste -r' re-executes the block previously entered by cpaste.
3231 '%cpaste -r' re-executes the block previously entered by cpaste.
3228
3232
3229 Do not be alarmed by garbled output on Windows (it's a readline bug).
3233 Do not be alarmed by garbled output on Windows (it's a readline bug).
3230 Just press enter and type -- (and press enter again) and the block
3234 Just press enter and type -- (and press enter again) and the block
3231 will be what was just pasted.
3235 will be what was just pasted.
3232
3236
3233 IPython statements (magics, shell escapes) are not supported (yet).
3237 IPython statements (magics, shell escapes) are not supported (yet).
3234 """
3238 """
3235 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3239 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3236 par = args.strip()
3240 par = args.strip()
3237 if opts.has_key('r'):
3241 if opts.has_key('r'):
3238 b = self.user_ns.get('pasted_block', None)
3242 b = self.user_ns.get('pasted_block', None)
3239 if b is None:
3243 if b is None:
3240 raise UsageError('No previous pasted block available')
3244 raise UsageError('No previous pasted block available')
3241 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3245 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3242 exec b in self.user_ns
3246 exec b in self.user_ns
3243 return
3247 return
3244
3248
3245 sentinel = opts.get('s','--')
3249 sentinel = opts.get('s','--')
3246
3250
3247 # Regular expressions that declare text we strip from the input:
3251 # Regular expressions that declare text we strip from the input:
3248 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3252 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3249 r'^\s*(\s?>)+', # Python input prompt
3253 r'^\s*(\s?>)+', # Python input prompt
3250 r'^\s*\.{3,}', # Continuation prompts
3254 r'^\s*\.{3,}', # Continuation prompts
3251 r'^\++',
3255 r'^\++',
3252 ]
3256 ]
3253
3257
3254 strip_from_start = map(re.compile,strip_re)
3258 strip_from_start = map(re.compile,strip_re)
3255
3259
3256 from IPython import iplib
3260 from IPython import iplib
3257 lines = []
3261 lines = []
3258 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3262 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3259 while 1:
3263 while 1:
3260 l = iplib.raw_input_original(':')
3264 l = iplib.raw_input_original(':')
3261 if l ==sentinel:
3265 if l ==sentinel:
3262 break
3266 break
3263
3267
3264 for pat in strip_from_start:
3268 for pat in strip_from_start:
3265 l = pat.sub('',l)
3269 l = pat.sub('',l)
3266 lines.append(l)
3270 lines.append(l)
3267
3271
3268 block = "\n".join(lines) + '\n'
3272 block = "\n".join(lines) + '\n'
3269 #print "block:\n",block
3273 #print "block:\n",block
3270 if not par:
3274 if not par:
3271 b = textwrap.dedent(block)
3275 b = textwrap.dedent(block)
3272 self.user_ns['pasted_block'] = b
3276 self.user_ns['pasted_block'] = b
3273 exec b in self.user_ns
3277 exec b in self.user_ns
3274 else:
3278 else:
3275 self.user_ns[par] = SList(block.splitlines())
3279 self.user_ns[par] = SList(block.splitlines())
3276 print "Block assigned to '%s'" % par
3280 print "Block assigned to '%s'" % par
3277
3281
3278 def magic_quickref(self,arg):
3282 def magic_quickref(self,arg):
3279 """ Show a quick reference sheet """
3283 """ Show a quick reference sheet """
3280 import IPython.usage
3284 import IPython.usage
3281 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3285 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3282
3286
3283 page(qr)
3287 page(qr)
3284
3288
3285 def magic_upgrade(self,arg):
3289 def magic_upgrade(self,arg):
3286 """ Upgrade your IPython installation
3290 """ Upgrade your IPython installation
3287
3291
3288 This will copy the config files that don't yet exist in your
3292 This will copy the config files that don't yet exist in your
3289 ipython dir from the system config dir. Use this after upgrading
3293 ipython dir from the system config dir. Use this after upgrading
3290 IPython if you don't wish to delete your .ipython dir.
3294 IPython if you don't wish to delete your .ipython dir.
3291
3295
3292 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3296 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3293 new users)
3297 new users)
3294
3298
3295 """
3299 """
3296 ip = self.getapi()
3300 ip = self.getapi()
3297 ipinstallation = path(IPython.__file__).dirname()
3301 ipinstallation = path(IPython.__file__).dirname()
3298 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3302 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3299 src_config = ipinstallation / 'UserConfig'
3303 src_config = ipinstallation / 'UserConfig'
3300 userdir = path(ip.options.ipythondir)
3304 userdir = path(ip.options.ipythondir)
3301 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3305 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3302 print ">",cmd
3306 print ">",cmd
3303 shell(cmd)
3307 shell(cmd)
3304 if arg == '-nolegacy':
3308 if arg == '-nolegacy':
3305 legacy = userdir.files('ipythonrc*')
3309 legacy = userdir.files('ipythonrc*')
3306 print "Nuking legacy files:",legacy
3310 print "Nuking legacy files:",legacy
3307
3311
3308 [p.remove() for p in legacy]
3312 [p.remove() for p in legacy]
3309 suffix = (sys.platform == 'win32' and '.ini' or '')
3313 suffix = (sys.platform == 'win32' and '.ini' or '')
3310 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3314 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3311
3315
3312
3316
3313 def magic_doctest_mode(self,parameter_s=''):
3317 def magic_doctest_mode(self,parameter_s=''):
3314 """Toggle doctest mode on and off.
3318 """Toggle doctest mode on and off.
3315
3319
3316 This mode allows you to toggle the prompt behavior between normal
3320 This mode allows you to toggle the prompt behavior between normal
3317 IPython prompts and ones that are as similar to the default IPython
3321 IPython prompts and ones that are as similar to the default IPython
3318 interpreter as possible.
3322 interpreter as possible.
3319
3323
3320 It also supports the pasting of code snippets that have leading '>>>'
3324 It also supports the pasting of code snippets that have leading '>>>'
3321 and '...' prompts in them. This means that you can paste doctests from
3325 and '...' prompts in them. This means that you can paste doctests from
3322 files or docstrings (even if they have leading whitespace), and the
3326 files or docstrings (even if they have leading whitespace), and the
3323 code will execute correctly. You can then use '%history -tn' to see
3327 code will execute correctly. You can then use '%history -tn' to see
3324 the translated history without line numbers; this will give you the
3328 the translated history without line numbers; this will give you the
3325 input after removal of all the leading prompts and whitespace, which
3329 input after removal of all the leading prompts and whitespace, which
3326 can be pasted back into an editor.
3330 can be pasted back into an editor.
3327
3331
3328 With these features, you can switch into this mode easily whenever you
3332 With these features, you can switch into this mode easily whenever you
3329 need to do testing and changes to doctests, without having to leave
3333 need to do testing and changes to doctests, without having to leave
3330 your existing IPython session.
3334 your existing IPython session.
3331 """
3335 """
3332
3336
3333 # XXX - Fix this to have cleaner activate/deactivate calls.
3337 # XXX - Fix this to have cleaner activate/deactivate calls.
3334 from IPython.Extensions import InterpreterPasteInput as ipaste
3338 from IPython.Extensions import InterpreterPasteInput as ipaste
3335 from IPython.ipstruct import Struct
3339 from IPython.ipstruct import Struct
3336
3340
3337 # Shorthands
3341 # Shorthands
3338 shell = self.shell
3342 shell = self.shell
3339 oc = shell.outputcache
3343 oc = shell.outputcache
3340 rc = shell.rc
3344 rc = shell.rc
3341 meta = shell.meta
3345 meta = shell.meta
3342 # dstore is a data store kept in the instance metadata bag to track any
3346 # dstore is a data store kept in the instance metadata bag to track any
3343 # changes we make, so we can undo them later.
3347 # changes we make, so we can undo them later.
3344 dstore = meta.setdefault('doctest_mode',Struct())
3348 dstore = meta.setdefault('doctest_mode',Struct())
3345 save_dstore = dstore.setdefault
3349 save_dstore = dstore.setdefault
3346
3350
3347 # save a few values we'll need to recover later
3351 # save a few values we'll need to recover later
3348 mode = save_dstore('mode',False)
3352 mode = save_dstore('mode',False)
3349 save_dstore('rc_pprint',rc.pprint)
3353 save_dstore('rc_pprint',rc.pprint)
3350 save_dstore('xmode',shell.InteractiveTB.mode)
3354 save_dstore('xmode',shell.InteractiveTB.mode)
3351 save_dstore('rc_separate_out',rc.separate_out)
3355 save_dstore('rc_separate_out',rc.separate_out)
3352 save_dstore('rc_separate_out2',rc.separate_out2)
3356 save_dstore('rc_separate_out2',rc.separate_out2)
3353 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3357 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3354 save_dstore('rc_separate_in',rc.separate_in)
3358 save_dstore('rc_separate_in',rc.separate_in)
3355
3359
3356 if mode == False:
3360 if mode == False:
3357 # turn on
3361 # turn on
3358 ipaste.activate_prefilter()
3362 ipaste.activate_prefilter()
3359
3363
3360 oc.prompt1.p_template = '>>> '
3364 oc.prompt1.p_template = '>>> '
3361 oc.prompt2.p_template = '... '
3365 oc.prompt2.p_template = '... '
3362 oc.prompt_out.p_template = ''
3366 oc.prompt_out.p_template = ''
3363
3367
3364 # Prompt separators like plain python
3368 # Prompt separators like plain python
3365 oc.input_sep = oc.prompt1.sep = ''
3369 oc.input_sep = oc.prompt1.sep = ''
3366 oc.output_sep = ''
3370 oc.output_sep = ''
3367 oc.output_sep2 = ''
3371 oc.output_sep2 = ''
3368
3372
3369 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3373 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3370 oc.prompt_out.pad_left = False
3374 oc.prompt_out.pad_left = False
3371
3375
3372 rc.pprint = False
3376 rc.pprint = False
3373
3377
3374 shell.magic_xmode('Plain')
3378 shell.magic_xmode('Plain')
3375
3379
3376 else:
3380 else:
3377 # turn off
3381 # turn off
3378 ipaste.deactivate_prefilter()
3382 ipaste.deactivate_prefilter()
3379
3383
3380 oc.prompt1.p_template = rc.prompt_in1
3384 oc.prompt1.p_template = rc.prompt_in1
3381 oc.prompt2.p_template = rc.prompt_in2
3385 oc.prompt2.p_template = rc.prompt_in2
3382 oc.prompt_out.p_template = rc.prompt_out
3386 oc.prompt_out.p_template = rc.prompt_out
3383
3387
3384 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3388 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3385
3389
3386 oc.output_sep = dstore.rc_separate_out
3390 oc.output_sep = dstore.rc_separate_out
3387 oc.output_sep2 = dstore.rc_separate_out2
3391 oc.output_sep2 = dstore.rc_separate_out2
3388
3392
3389 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3393 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3390 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3394 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3391
3395
3392 rc.pprint = dstore.rc_pprint
3396 rc.pprint = dstore.rc_pprint
3393
3397
3394 shell.magic_xmode(dstore.xmode)
3398 shell.magic_xmode(dstore.xmode)
3395
3399
3396 # Store new mode and inform
3400 # Store new mode and inform
3397 dstore.mode = bool(1-int(mode))
3401 dstore.mode = bool(1-int(mode))
3398 print 'Doctest mode is:',
3402 print 'Doctest mode is:',
3399 print ['OFF','ON'][dstore.mode]
3403 print ['OFF','ON'][dstore.mode]
3400
3404
3401 # end Magic
3405 # end Magic
@@ -1,249 +1,252 b''
1 """hooks for IPython.
1 """hooks for IPython.
2
2
3 In Python, it is possible to overwrite any method of any object if you really
3 In Python, it is possible to overwrite any method of any object if you really
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
5 be overwritten by users for customization purposes. This module defines the
5 be overwritten by users for customization purposes. This module defines the
6 default versions of all such hooks, which get used by IPython if not
6 default versions of all such hooks, which get used by IPython if not
7 overridden by the user.
7 overridden by the user.
8
8
9 hooks are simple functions, but they should be declared with 'self' as their
9 hooks are simple functions, but they should be declared with 'self' as their
10 first argument, because when activated they are registered into IPython as
10 first argument, because when activated they are registered into IPython as
11 instance methods. The self argument will be the IPython running instance
11 instance methods. The self argument will be the IPython running instance
12 itself, so hooks have full access to the entire IPython object.
12 itself, so hooks have full access to the entire IPython object.
13
13
14 If you wish to define a new hook and activate it, you need to put the
14 If you wish to define a new hook and activate it, you need to put the
15 necessary code into a python file which can be either imported or execfile()'d
15 necessary code into a python file which can be either imported or execfile()'d
16 from within your ipythonrc configuration.
16 from within your ipythonrc configuration.
17
17
18 For example, suppose that you have a module called 'myiphooks' in your
18 For example, suppose that you have a module called 'myiphooks' in your
19 PYTHONPATH, which contains the following definition:
19 PYTHONPATH, which contains the following definition:
20
20
21 import os
21 import os
22 import IPython.ipapi
22 import IPython.ipapi
23 ip = IPython.ipapi.get()
23 ip = IPython.ipapi.get()
24
24
25 def calljed(self,filename, linenum):
25 def calljed(self,filename, linenum):
26 "My editor hook calls the jed editor directly."
26 "My editor hook calls the jed editor directly."
27 print "Calling my own editor, jed ..."
27 print "Calling my own editor, jed ..."
28 os.system('jed +%d %s' % (linenum,filename))
28 if os.system('jed +%d %s' % (linenum,filename)) != 0:
29 raise ipapi.TryNext()
29
30
30 ip.set_hook('editor', calljed)
31 ip.set_hook('editor', calljed)
31
32
32 You can then enable the functionality by doing 'import myiphooks'
33 You can then enable the functionality by doing 'import myiphooks'
33 somewhere in your configuration files or ipython command line.
34 somewhere in your configuration files or ipython command line.
34
35
35 $Id: hooks.py 2998 2008-01-31 10:06:04Z vivainio $"""
36 $Id: hooks.py 2998 2008-01-31 10:06:04Z vivainio $"""
36
37
37 #*****************************************************************************
38 #*****************************************************************************
38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 #
40 #
40 # Distributed under the terms of the BSD License. The full license is in
41 # Distributed under the terms of the BSD License. The full license is in
41 # the file COPYING, distributed as part of this software.
42 # the file COPYING, distributed as part of this software.
42 #*****************************************************************************
43 #*****************************************************************************
43
44
44 from IPython import Release
45 from IPython import Release
45 from IPython import ipapi
46 from IPython import ipapi
46 __author__ = '%s <%s>' % Release.authors['Fernando']
47 __author__ = '%s <%s>' % Release.authors['Fernando']
47 __license__ = Release.license
48 __license__ = Release.license
48 __version__ = Release.version
49 __version__ = Release.version
49
50
50 import os,bisect
51 import os,bisect
51 from genutils import Term,shell
52 from genutils import Term,shell
52 from pprint import PrettyPrinter
53 from pprint import PrettyPrinter
53
54
54 # List here all the default hooks. For now it's just the editor functions
55 # List here all the default hooks. For now it's just the editor functions
55 # but over time we'll move here all the public API for user-accessible things.
56 # but over time we'll move here all the public API for user-accessible things.
56 # vds: >>
57 # vds: >>
57 __all__ = ['editor', 'fix_error_editor', 'synchronize_with_editor', 'result_display',
58 __all__ = ['editor', 'fix_error_editor', 'synchronize_with_editor', 'result_display',
58 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
59 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
59 'generate_prompt', 'generate_output_prompt','shell_hook',
60 'generate_prompt', 'generate_output_prompt','shell_hook',
60 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook']
61 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook']
61 # vds: <<
62 # vds: <<
62
63
63 pformat = PrettyPrinter().pformat
64 pformat = PrettyPrinter().pformat
64
65
65 def editor(self,filename, linenum=None):
66 def editor(self,filename, linenum=None):
66 """Open the default editor at the given filename and linenumber.
67 """Open the default editor at the given filename and linenumber.
67
68
68 This is IPython's default editor hook, you can use it as an example to
69 This is IPython's default editor hook, you can use it as an example to
69 write your own modified one. To set your own editor function as the
70 write your own modified one. To set your own editor function as the
70 new editor hook, call ip.set_hook('editor',yourfunc)."""
71 new editor hook, call ip.set_hook('editor',yourfunc)."""
71
72
72 # IPython configures a default editor at startup by reading $EDITOR from
73 # IPython configures a default editor at startup by reading $EDITOR from
73 # the environment, and falling back on vi (unix) or notepad (win32).
74 # the environment, and falling back on vi (unix) or notepad (win32).
74 editor = self.rc.editor
75 editor = self.rc.editor
75
76
76 # marker for at which line to open the file (for existing objects)
77 # marker for at which line to open the file (for existing objects)
77 if linenum is None or editor=='notepad':
78 if linenum is None or editor=='notepad':
78 linemark = ''
79 linemark = ''
79 else:
80 else:
80 linemark = '+%d' % int(linenum)
81 linemark = '+%d' % int(linenum)
81
82
82 # Enclose in quotes if necessary and legal
83 # Enclose in quotes if necessary and legal
83 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
84 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
84 editor = '"%s"' % editor
85 editor = '"%s"' % editor
85
86
86 # Call the actual editor
87 # Call the actual editor
87 os.system('%s %s %s' % (editor,linemark,filename))
88 if os.system('%s %s %s' % (editor,linemark,filename)) != 0:
89 raise ipapi.TryNext()
88
90
89 import tempfile
91 import tempfile
90 def fix_error_editor(self,filename,linenum,column,msg):
92 def fix_error_editor(self,filename,linenum,column,msg):
91 """Open the editor at the given filename, linenumber, column and
93 """Open the editor at the given filename, linenumber, column and
92 show an error message. This is used for correcting syntax errors.
94 show an error message. This is used for correcting syntax errors.
93 The current implementation only has special support for the VIM editor,
95 The current implementation only has special support for the VIM editor,
94 and falls back on the 'editor' hook if VIM is not used.
96 and falls back on the 'editor' hook if VIM is not used.
95
97
96 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
98 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
97 """
99 """
98 def vim_quickfix_file():
100 def vim_quickfix_file():
99 t = tempfile.NamedTemporaryFile()
101 t = tempfile.NamedTemporaryFile()
100 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
102 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
101 t.flush()
103 t.flush()
102 return t
104 return t
103 if os.path.basename(self.rc.editor) != 'vim':
105 if os.path.basename(self.rc.editor) != 'vim':
104 self.hooks.editor(filename,linenum)
106 self.hooks.editor(filename,linenum)
105 return
107 return
106 t = vim_quickfix_file()
108 t = vim_quickfix_file()
107 try:
109 try:
108 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
110 if os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name):
111 raise ipapi.TryNext()
109 finally:
112 finally:
110 t.close()
113 t.close()
111
114
112 # vds: >>
115 # vds: >>
113 def synchronize_with_editor(self, filename, linenum, column):
116 def synchronize_with_editor(self, filename, linenum, column):
114 pass
117 pass
115 # vds: <<
118 # vds: <<
116
119
117 class CommandChainDispatcher:
120 class CommandChainDispatcher:
118 """ Dispatch calls to a chain of commands until some func can handle it
121 """ Dispatch calls to a chain of commands until some func can handle it
119
122
120 Usage: instantiate, execute "add" to add commands (with optional
123 Usage: instantiate, execute "add" to add commands (with optional
121 priority), execute normally via f() calling mechanism.
124 priority), execute normally via f() calling mechanism.
122
125
123 """
126 """
124 def __init__(self,commands=None):
127 def __init__(self,commands=None):
125 if commands is None:
128 if commands is None:
126 self.chain = []
129 self.chain = []
127 else:
130 else:
128 self.chain = commands
131 self.chain = commands
129
132
130
133
131 def __call__(self,*args, **kw):
134 def __call__(self,*args, **kw):
132 """ Command chain is called just like normal func.
135 """ Command chain is called just like normal func.
133
136
134 This will call all funcs in chain with the same args as were given to this
137 This will call all funcs in chain with the same args as were given to this
135 function, and return the result of first func that didn't raise
138 function, and return the result of first func that didn't raise
136 TryNext """
139 TryNext """
137
140
138 for prio,cmd in self.chain:
141 for prio,cmd in self.chain:
139 #print "prio",prio,"cmd",cmd #dbg
142 #print "prio",prio,"cmd",cmd #dbg
140 try:
143 try:
141 ret = cmd(*args, **kw)
144 ret = cmd(*args, **kw)
142 return ret
145 return ret
143 except ipapi.TryNext, exc:
146 except ipapi.TryNext, exc:
144 if exc.args or exc.kwargs:
147 if exc.args or exc.kwargs:
145 args = exc.args
148 args = exc.args
146 kw = exc.kwargs
149 kw = exc.kwargs
147 # if no function will accept it, raise TryNext up to the caller
150 # if no function will accept it, raise TryNext up to the caller
148 raise ipapi.TryNext
151 raise ipapi.TryNext
149
152
150 def __str__(self):
153 def __str__(self):
151 return str(self.chain)
154 return str(self.chain)
152
155
153 def add(self, func, priority=0):
156 def add(self, func, priority=0):
154 """ Add a func to the cmd chain with given priority """
157 """ Add a func to the cmd chain with given priority """
155 bisect.insort(self.chain,(priority,func))
158 bisect.insort(self.chain,(priority,func))
156
159
157 def __iter__(self):
160 def __iter__(self):
158 """ Return all objects in chain.
161 """ Return all objects in chain.
159
162
160 Handy if the objects are not callable.
163 Handy if the objects are not callable.
161 """
164 """
162 return iter(self.chain)
165 return iter(self.chain)
163
166
164 def result_display(self,arg):
167 def result_display(self,arg):
165 """ Default display hook.
168 """ Default display hook.
166
169
167 Called for displaying the result to the user.
170 Called for displaying the result to the user.
168 """
171 """
169
172
170 if self.rc.pprint:
173 if self.rc.pprint:
171 out = pformat(arg)
174 out = pformat(arg)
172 if '\n' in out:
175 if '\n' in out:
173 # So that multi-line strings line up with the left column of
176 # So that multi-line strings line up with the left column of
174 # the screen, instead of having the output prompt mess up
177 # the screen, instead of having the output prompt mess up
175 # their first line.
178 # their first line.
176 Term.cout.write('\n')
179 Term.cout.write('\n')
177 print >>Term.cout, out
180 print >>Term.cout, out
178 else:
181 else:
179 # By default, the interactive prompt uses repr() to display results,
182 # By default, the interactive prompt uses repr() to display results,
180 # so we should honor this. Users who'd rather use a different
183 # so we should honor this. Users who'd rather use a different
181 # mechanism can easily override this hook.
184 # mechanism can easily override this hook.
182 print >>Term.cout, repr(arg)
185 print >>Term.cout, repr(arg)
183 # the default display hook doesn't manipulate the value to put in history
186 # the default display hook doesn't manipulate the value to put in history
184 return None
187 return None
185
188
186 def input_prefilter(self,line):
189 def input_prefilter(self,line):
187 """ Default input prefilter
190 """ Default input prefilter
188
191
189 This returns the line as unchanged, so that the interpreter
192 This returns the line as unchanged, so that the interpreter
190 knows that nothing was done and proceeds with "classic" prefiltering
193 knows that nothing was done and proceeds with "classic" prefiltering
191 (%magics, !shell commands etc.).
194 (%magics, !shell commands etc.).
192
195
193 Note that leading whitespace is not passed to this hook. Prefilter
196 Note that leading whitespace is not passed to this hook. Prefilter
194 can't alter indentation.
197 can't alter indentation.
195
198
196 """
199 """
197 #print "attempt to rewrite",line #dbg
200 #print "attempt to rewrite",line #dbg
198 return line
201 return line
199
202
200 def shutdown_hook(self):
203 def shutdown_hook(self):
201 """ default shutdown hook
204 """ default shutdown hook
202
205
203 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
206 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
204 """
207 """
205
208
206 #print "default shutdown hook ok" # dbg
209 #print "default shutdown hook ok" # dbg
207 return
210 return
208
211
209 def late_startup_hook(self):
212 def late_startup_hook(self):
210 """ Executed after ipython has been constructed and configured
213 """ Executed after ipython has been constructed and configured
211
214
212 """
215 """
213 #print "default startup hook ok" # dbg
216 #print "default startup hook ok" # dbg
214
217
215 def generate_prompt(self, is_continuation):
218 def generate_prompt(self, is_continuation):
216 """ calculate and return a string with the prompt to display """
219 """ calculate and return a string with the prompt to display """
217 ip = self.api
220 ip = self.api
218 if is_continuation:
221 if is_continuation:
219 return str(ip.IP.outputcache.prompt2)
222 return str(ip.IP.outputcache.prompt2)
220 return str(ip.IP.outputcache.prompt1)
223 return str(ip.IP.outputcache.prompt1)
221
224
222 def generate_output_prompt(self):
225 def generate_output_prompt(self):
223 ip = self.api
226 ip = self.api
224 return str(ip.IP.outputcache.prompt_out)
227 return str(ip.IP.outputcache.prompt_out)
225
228
226 def shell_hook(self,cmd):
229 def shell_hook(self,cmd):
227 """ Run system/shell command a'la os.system() """
230 """ Run system/shell command a'la os.system() """
228
231
229 shell(cmd, header=self.rc.system_header, verbose=self.rc.system_verbose)
232 shell(cmd, header=self.rc.system_header, verbose=self.rc.system_verbose)
230
233
231 def show_in_pager(self,s):
234 def show_in_pager(self,s):
232 """ Run a string through pager """
235 """ Run a string through pager """
233 # raising TryNext here will use the default paging functionality
236 # raising TryNext here will use the default paging functionality
234 raise ipapi.TryNext
237 raise ipapi.TryNext
235
238
236 def pre_prompt_hook(self):
239 def pre_prompt_hook(self):
237 """ Run before displaying the next prompt
240 """ Run before displaying the next prompt
238
241
239 Use this e.g. to display output from asynchronous operations (in order
242 Use this e.g. to display output from asynchronous operations (in order
240 to not mess up text entry)
243 to not mess up text entry)
241 """
244 """
242
245
243 return None
246 return None
244
247
245 def pre_runcode_hook(self):
248 def pre_runcode_hook(self):
246 """ Executed before running the (prefiltered) code in IPython """
249 """ Executed before running the (prefiltered) code in IPython """
247 return None
250 return None
248
251
249
252
@@ -1,2691 +1,2695 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 """
9 """
10
10
11 #*****************************************************************************
11 #*****************************************************************************
12 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
12 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 #
14 #
15 # Distributed under the terms of the BSD License. The full license is in
15 # Distributed under the terms of the BSD License. The full license is in
16 # the file COPYING, distributed as part of this software.
16 # the file COPYING, distributed as part of this software.
17 #
17 #
18 # Note: this code originally subclassed code.InteractiveConsole from the
18 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Python standard library. Over time, all of that class has been copied
19 # Python standard library. Over time, all of that class has been copied
20 # verbatim here for modifications which could not be accomplished by
20 # verbatim here for modifications which could not be accomplished by
21 # subclassing. At this point, there are no dependencies at all on the code
21 # subclassing. At this point, there are no dependencies at all on the code
22 # module anymore (it is not even imported). The Python License (sec. 2)
22 # module anymore (it is not even imported). The Python License (sec. 2)
23 # allows for this, but it's always nice to acknowledge credit where credit is
23 # allows for this, but it's always nice to acknowledge credit where credit is
24 # due.
24 # due.
25 #*****************************************************************************
25 #*****************************************************************************
26
26
27 #****************************************************************************
27 #****************************************************************************
28 # Modules and globals
28 # Modules and globals
29
29
30 from IPython import Release
30 from IPython import Release
31 __author__ = '%s <%s>\n%s <%s>' % \
31 __author__ = '%s <%s>\n%s <%s>' % \
32 ( Release.authors['Janko'] + Release.authors['Fernando'] )
32 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 __license__ = Release.license
33 __license__ = Release.license
34 __version__ = Release.version
34 __version__ = Release.version
35
35
36 # Python standard modules
36 # Python standard modules
37 import __main__
37 import __main__
38 import __builtin__
38 import __builtin__
39 import StringIO
39 import StringIO
40 import bdb
40 import bdb
41 import cPickle as pickle
41 import cPickle as pickle
42 import codeop
42 import codeop
43 import exceptions
43 import exceptions
44 import glob
44 import glob
45 import inspect
45 import inspect
46 import keyword
46 import keyword
47 import new
47 import new
48 import os
48 import os
49 import pydoc
49 import pydoc
50 import re
50 import re
51 import shutil
51 import shutil
52 import string
52 import string
53 import sys
53 import sys
54 import tempfile
54 import tempfile
55 import traceback
55 import traceback
56 import types
56 import types
57 import warnings
57 import warnings
58 warnings.filterwarnings('ignore', r'.*sets module*')
58 warnings.filterwarnings('ignore', r'.*sets module*')
59 from sets import Set
59 from sets import Set
60 from pprint import pprint, pformat
60 from pprint import pprint, pformat
61
61
62 # IPython's own modules
62 # IPython's own modules
63 #import IPython
63 #import IPython
64 from IPython import Debugger,OInspect,PyColorize,ultraTB
64 from IPython import Debugger,OInspect,PyColorize,ultraTB
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.Extensions import pickleshare
66 from IPython.Extensions import pickleshare
67 from IPython.FakeModule import FakeModule
67 from IPython.FakeModule import FakeModule
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Logger import Logger
69 from IPython.Logger import Logger
70 from IPython.Magic import Magic
70 from IPython.Magic import Magic
71 from IPython.Prompts import CachedOutput
71 from IPython.Prompts import CachedOutput
72 from IPython.ipstruct import Struct
72 from IPython.ipstruct import Struct
73 from IPython.background_jobs import BackgroundJobManager
73 from IPython.background_jobs import BackgroundJobManager
74 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.genutils import *
75 from IPython.genutils import *
76 from IPython.strdispatch import StrDispatch
76 from IPython.strdispatch import StrDispatch
77 import IPython.ipapi
77 import IPython.ipapi
78 import IPython.history
78 import IPython.history
79 import IPython.prefilter as prefilter
79 import IPython.prefilter as prefilter
80 import IPython.shadowns
80 import IPython.shadowns
81 # Globals
81 # Globals
82
82
83 # store the builtin raw_input globally, and use this always, in case user code
83 # store the builtin raw_input globally, and use this always, in case user code
84 # overwrites it (like wx.py.PyShell does)
84 # overwrites it (like wx.py.PyShell does)
85 raw_input_original = raw_input
85 raw_input_original = raw_input
86
86
87 # compiled regexps for autoindent management
87 # compiled regexps for autoindent management
88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
89
89
90
90
91 #****************************************************************************
91 #****************************************************************************
92 # Some utility function definitions
92 # Some utility function definitions
93
93
94 ini_spaces_re = re.compile(r'^(\s+)')
94 ini_spaces_re = re.compile(r'^(\s+)')
95
95
96 def num_ini_spaces(strng):
96 def num_ini_spaces(strng):
97 """Return the number of initial spaces in a string"""
97 """Return the number of initial spaces in a string"""
98
98
99 ini_spaces = ini_spaces_re.match(strng)
99 ini_spaces = ini_spaces_re.match(strng)
100 if ini_spaces:
100 if ini_spaces:
101 return ini_spaces.end()
101 return ini_spaces.end()
102 else:
102 else:
103 return 0
103 return 0
104
104
105 def softspace(file, newvalue):
105 def softspace(file, newvalue):
106 """Copied from code.py, to remove the dependency"""
106 """Copied from code.py, to remove the dependency"""
107
107
108 oldvalue = 0
108 oldvalue = 0
109 try:
109 try:
110 oldvalue = file.softspace
110 oldvalue = file.softspace
111 except AttributeError:
111 except AttributeError:
112 pass
112 pass
113 try:
113 try:
114 file.softspace = newvalue
114 file.softspace = newvalue
115 except (AttributeError, TypeError):
115 except (AttributeError, TypeError):
116 # "attribute-less object" or "read-only attributes"
116 # "attribute-less object" or "read-only attributes"
117 pass
117 pass
118 return oldvalue
118 return oldvalue
119
119
120
120
121 #****************************************************************************
121 #****************************************************************************
122 # Local use exceptions
122 # Local use exceptions
123 class SpaceInInput(exceptions.Exception): pass
123 class SpaceInInput(exceptions.Exception): pass
124
124
125
125
126 #****************************************************************************
126 #****************************************************************************
127 # Local use classes
127 # Local use classes
128 class Bunch: pass
128 class Bunch: pass
129
129
130 class Undefined: pass
130 class Undefined: pass
131
131
132 class Quitter(object):
132 class Quitter(object):
133 """Simple class to handle exit, similar to Python 2.5's.
133 """Simple class to handle exit, similar to Python 2.5's.
134
134
135 It handles exiting in an ipython-safe manner, which the one in Python 2.5
135 It handles exiting in an ipython-safe manner, which the one in Python 2.5
136 doesn't do (obviously, since it doesn't know about ipython)."""
136 doesn't do (obviously, since it doesn't know about ipython)."""
137
137
138 def __init__(self,shell,name):
138 def __init__(self,shell,name):
139 self.shell = shell
139 self.shell = shell
140 self.name = name
140 self.name = name
141
141
142 def __repr__(self):
142 def __repr__(self):
143 return 'Type %s() to exit.' % self.name
143 return 'Type %s() to exit.' % self.name
144 __str__ = __repr__
144 __str__ = __repr__
145
145
146 def __call__(self):
146 def __call__(self):
147 self.shell.exit()
147 self.shell.exit()
148
148
149 class InputList(list):
149 class InputList(list):
150 """Class to store user input.
150 """Class to store user input.
151
151
152 It's basically a list, but slices return a string instead of a list, thus
152 It's basically a list, but slices return a string instead of a list, thus
153 allowing things like (assuming 'In' is an instance):
153 allowing things like (assuming 'In' is an instance):
154
154
155 exec In[4:7]
155 exec In[4:7]
156
156
157 or
157 or
158
158
159 exec In[5:9] + In[14] + In[21:25]"""
159 exec In[5:9] + In[14] + In[21:25]"""
160
160
161 def __getslice__(self,i,j):
161 def __getslice__(self,i,j):
162 return ''.join(list.__getslice__(self,i,j))
162 return ''.join(list.__getslice__(self,i,j))
163
163
164 class SyntaxTB(ultraTB.ListTB):
164 class SyntaxTB(ultraTB.ListTB):
165 """Extension which holds some state: the last exception value"""
165 """Extension which holds some state: the last exception value"""
166
166
167 def __init__(self,color_scheme = 'NoColor'):
167 def __init__(self,color_scheme = 'NoColor'):
168 ultraTB.ListTB.__init__(self,color_scheme)
168 ultraTB.ListTB.__init__(self,color_scheme)
169 self.last_syntax_error = None
169 self.last_syntax_error = None
170
170
171 def __call__(self, etype, value, elist):
171 def __call__(self, etype, value, elist):
172 self.last_syntax_error = value
172 self.last_syntax_error = value
173 ultraTB.ListTB.__call__(self,etype,value,elist)
173 ultraTB.ListTB.__call__(self,etype,value,elist)
174
174
175 def clear_err_state(self):
175 def clear_err_state(self):
176 """Return the current error state and clear it"""
176 """Return the current error state and clear it"""
177 e = self.last_syntax_error
177 e = self.last_syntax_error
178 self.last_syntax_error = None
178 self.last_syntax_error = None
179 return e
179 return e
180
180
181 #****************************************************************************
181 #****************************************************************************
182 # Main IPython class
182 # Main IPython class
183
183
184 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
184 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
185 # until a full rewrite is made. I've cleaned all cross-class uses of
185 # until a full rewrite is made. I've cleaned all cross-class uses of
186 # attributes and methods, but too much user code out there relies on the
186 # attributes and methods, but too much user code out there relies on the
187 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
187 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
188 #
188 #
189 # But at least now, all the pieces have been separated and we could, in
189 # But at least now, all the pieces have been separated and we could, in
190 # principle, stop using the mixin. This will ease the transition to the
190 # principle, stop using the mixin. This will ease the transition to the
191 # chainsaw branch.
191 # chainsaw branch.
192
192
193 # For reference, the following is the list of 'self.foo' uses in the Magic
193 # For reference, the following is the list of 'self.foo' uses in the Magic
194 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
194 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
195 # class, to prevent clashes.
195 # class, to prevent clashes.
196
196
197 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
197 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
198 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
198 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
199 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
199 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
200 # 'self.value']
200 # 'self.value']
201
201
202 class InteractiveShell(object,Magic):
202 class InteractiveShell(object,Magic):
203 """An enhanced console for Python."""
203 """An enhanced console for Python."""
204
204
205 # class attribute to indicate whether the class supports threads or not.
205 # class attribute to indicate whether the class supports threads or not.
206 # Subclasses with thread support should override this as needed.
206 # Subclasses with thread support should override this as needed.
207 isthreaded = False
207 isthreaded = False
208
208
209 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
209 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
210 user_ns=None,user_global_ns=None,banner2='',
210 user_ns=None,user_global_ns=None,banner2='',
211 custom_exceptions=((),None),embedded=False):
211 custom_exceptions=((),None),embedded=False):
212
212
213 # log system
213 # log system
214 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
214 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
215
215
216 # Job manager (for jobs run as background threads)
216 # Job manager (for jobs run as background threads)
217 self.jobs = BackgroundJobManager()
217 self.jobs = BackgroundJobManager()
218
218
219 # Store the actual shell's name
219 # Store the actual shell's name
220 self.name = name
220 self.name = name
221 self.more = False
221 self.more = False
222
222
223 # We need to know whether the instance is meant for embedding, since
223 # We need to know whether the instance is meant for embedding, since
224 # global/local namespaces need to be handled differently in that case
224 # global/local namespaces need to be handled differently in that case
225 self.embedded = embedded
225 self.embedded = embedded
226 if embedded:
226 if embedded:
227 # Control variable so users can, from within the embedded instance,
227 # Control variable so users can, from within the embedded instance,
228 # permanently deactivate it.
228 # permanently deactivate it.
229 self.embedded_active = True
229 self.embedded_active = True
230
230
231 # command compiler
231 # command compiler
232 self.compile = codeop.CommandCompiler()
232 self.compile = codeop.CommandCompiler()
233
233
234 # User input buffer
234 # User input buffer
235 self.buffer = []
235 self.buffer = []
236
236
237 # Default name given in compilation of code
237 # Default name given in compilation of code
238 self.filename = '<ipython console>'
238 self.filename = '<ipython console>'
239
239
240 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 # Install our own quitter instead of the builtins. For python2.3-2.4,
241 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 # this brings in behavior like 2.5, and for 2.5 it's identical.
242 __builtin__.exit = Quitter(self,'exit')
242 __builtin__.exit = Quitter(self,'exit')
243 __builtin__.quit = Quitter(self,'quit')
243 __builtin__.quit = Quitter(self,'quit')
244
244
245 # Make an empty namespace, which extension writers can rely on both
245 # Make an empty namespace, which extension writers can rely on both
246 # existing and NEVER being used by ipython itself. This gives them a
246 # existing and NEVER being used by ipython itself. This gives them a
247 # convenient location for storing additional information and state
247 # convenient location for storing additional information and state
248 # their extensions may require, without fear of collisions with other
248 # their extensions may require, without fear of collisions with other
249 # ipython names that may develop later.
249 # ipython names that may develop later.
250 self.meta = Struct()
250 self.meta = Struct()
251
251
252 # Create the namespace where the user will operate. user_ns is
252 # Create the namespace where the user will operate. user_ns is
253 # normally the only one used, and it is passed to the exec calls as
253 # normally the only one used, and it is passed to the exec calls as
254 # the locals argument. But we do carry a user_global_ns namespace
254 # the locals argument. But we do carry a user_global_ns namespace
255 # given as the exec 'globals' argument, This is useful in embedding
255 # given as the exec 'globals' argument, This is useful in embedding
256 # situations where the ipython shell opens in a context where the
256 # situations where the ipython shell opens in a context where the
257 # distinction between locals and globals is meaningful. For
257 # distinction between locals and globals is meaningful. For
258 # non-embedded contexts, it is just the same object as the user_ns dict.
258 # non-embedded contexts, it is just the same object as the user_ns dict.
259
259
260 # FIXME. For some strange reason, __builtins__ is showing up at user
260 # FIXME. For some strange reason, __builtins__ is showing up at user
261 # level as a dict instead of a module. This is a manual fix, but I
261 # level as a dict instead of a module. This is a manual fix, but I
262 # should really track down where the problem is coming from. Alex
262 # should really track down where the problem is coming from. Alex
263 # Schmolck reported this problem first.
263 # Schmolck reported this problem first.
264
264
265 # A useful post by Alex Martelli on this topic:
265 # A useful post by Alex Martelli on this topic:
266 # Re: inconsistent value from __builtins__
266 # Re: inconsistent value from __builtins__
267 # Von: Alex Martelli <aleaxit@yahoo.com>
267 # Von: Alex Martelli <aleaxit@yahoo.com>
268 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
268 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
269 # Gruppen: comp.lang.python
269 # Gruppen: comp.lang.python
270
270
271 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
271 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
272 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
272 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
273 # > <type 'dict'>
273 # > <type 'dict'>
274 # > >>> print type(__builtins__)
274 # > >>> print type(__builtins__)
275 # > <type 'module'>
275 # > <type 'module'>
276 # > Is this difference in return value intentional?
276 # > Is this difference in return value intentional?
277
277
278 # Well, it's documented that '__builtins__' can be either a dictionary
278 # Well, it's documented that '__builtins__' can be either a dictionary
279 # or a module, and it's been that way for a long time. Whether it's
279 # or a module, and it's been that way for a long time. Whether it's
280 # intentional (or sensible), I don't know. In any case, the idea is
280 # intentional (or sensible), I don't know. In any case, the idea is
281 # that if you need to access the built-in namespace directly, you
281 # that if you need to access the built-in namespace directly, you
282 # should start with "import __builtin__" (note, no 's') which will
282 # should start with "import __builtin__" (note, no 's') which will
283 # definitely give you a module. Yeah, it's somewhat confusing:-(.
283 # definitely give you a module. Yeah, it's somewhat confusing:-(.
284
284
285 # These routines return properly built dicts as needed by the rest of
285 # These routines return properly built dicts as needed by the rest of
286 # the code, and can also be used by extension writers to generate
286 # the code, and can also be used by extension writers to generate
287 # properly initialized namespaces.
287 # properly initialized namespaces.
288 user_ns, user_global_ns = IPython.ipapi.make_user_namespaces(user_ns,
288 user_ns, user_global_ns = IPython.ipapi.make_user_namespaces(user_ns,
289 user_global_ns)
289 user_global_ns)
290
290
291 # Assign namespaces
291 # Assign namespaces
292 # This is the namespace where all normal user variables live
292 # This is the namespace where all normal user variables live
293 self.user_ns = user_ns
293 self.user_ns = user_ns
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312 # The user namespace MUST have a pointer to the shell itself.
312 # The user namespace MUST have a pointer to the shell itself.
313 self.user_ns[name] = self
313 self.user_ns[name] = self
314
314
315 # We need to insert into sys.modules something that looks like a
315 # We need to insert into sys.modules something that looks like a
316 # module but which accesses the IPython namespace, for shelve and
316 # module but which accesses the IPython namespace, for shelve and
317 # pickle to work interactively. Normally they rely on getting
317 # pickle to work interactively. Normally they rely on getting
318 # everything out of __main__, but for embedding purposes each IPython
318 # everything out of __main__, but for embedding purposes each IPython
319 # instance has its own private namespace, so we can't go shoving
319 # instance has its own private namespace, so we can't go shoving
320 # everything into __main__.
320 # everything into __main__.
321
321
322 # note, however, that we should only do this for non-embedded
322 # note, however, that we should only do this for non-embedded
323 # ipythons, which really mimic the __main__.__dict__ with their own
323 # ipythons, which really mimic the __main__.__dict__ with their own
324 # namespace. Embedded instances, on the other hand, should not do
324 # namespace. Embedded instances, on the other hand, should not do
325 # this because they need to manage the user local/global namespaces
325 # this because they need to manage the user local/global namespaces
326 # only, but they live within a 'normal' __main__ (meaning, they
326 # only, but they live within a 'normal' __main__ (meaning, they
327 # shouldn't overtake the execution environment of the script they're
327 # shouldn't overtake the execution environment of the script they're
328 # embedded in).
328 # embedded in).
329
329
330 if not embedded:
330 if not embedded:
331 try:
331 try:
332 main_name = self.user_ns['__name__']
332 main_name = self.user_ns['__name__']
333 except KeyError:
333 except KeyError:
334 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
334 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 else:
335 else:
336 #print "pickle hack in place" # dbg
336 #print "pickle hack in place" # dbg
337 #print 'main_name:',main_name # dbg
337 #print 'main_name:',main_name # dbg
338 sys.modules[main_name] = FakeModule(self.user_ns)
338 sys.modules[main_name] = FakeModule(self.user_ns)
339
339
340 # Now that FakeModule produces a real module, we've run into a nasty
340 # Now that FakeModule produces a real module, we've run into a nasty
341 # problem: after script execution (via %run), the module where the user
341 # problem: after script execution (via %run), the module where the user
342 # code ran is deleted. Now that this object is a true module (needed
342 # code ran is deleted. Now that this object is a true module (needed
343 # so docetst and other tools work correctly), the Python module
343 # so docetst and other tools work correctly), the Python module
344 # teardown mechanism runs over it, and sets to None every variable
344 # teardown mechanism runs over it, and sets to None every variable
345 # present in that module. This means that later calls to functions
345 # present in that module. This means that later calls to functions
346 # defined in the script (which have become interactively visible after
346 # defined in the script (which have become interactively visible after
347 # script exit) fail, because they hold references to objects that have
347 # script exit) fail, because they hold references to objects that have
348 # become overwritten into None. The only solution I see right now is
348 # become overwritten into None. The only solution I see right now is
349 # to protect every FakeModule used by %run by holding an internal
349 # to protect every FakeModule used by %run by holding an internal
350 # reference to it. This private list will be used for that. The
350 # reference to it. This private list will be used for that. The
351 # %reset command will flush it as well.
351 # %reset command will flush it as well.
352 self._user_main_modules = []
352 self._user_main_modules = []
353
353
354 # List of input with multi-line handling.
354 # List of input with multi-line handling.
355 # Fill its zero entry, user counter starts at 1
355 # Fill its zero entry, user counter starts at 1
356 self.input_hist = InputList(['\n'])
356 self.input_hist = InputList(['\n'])
357 # This one will hold the 'raw' input history, without any
357 # This one will hold the 'raw' input history, without any
358 # pre-processing. This will allow users to retrieve the input just as
358 # pre-processing. This will allow users to retrieve the input just as
359 # it was exactly typed in by the user, with %hist -r.
359 # it was exactly typed in by the user, with %hist -r.
360 self.input_hist_raw = InputList(['\n'])
360 self.input_hist_raw = InputList(['\n'])
361
361
362 # list of visited directories
362 # list of visited directories
363 try:
363 try:
364 self.dir_hist = [os.getcwd()]
364 self.dir_hist = [os.getcwd()]
365 except OSError:
365 except OSError:
366 self.dir_hist = []
366 self.dir_hist = []
367
367
368 # dict of output history
368 # dict of output history
369 self.output_hist = {}
369 self.output_hist = {}
370
370
371 # Get system encoding at startup time. Certain terminals (like Emacs
371 # Get system encoding at startup time. Certain terminals (like Emacs
372 # under Win32 have it set to None, and we need to have a known valid
372 # under Win32 have it set to None, and we need to have a known valid
373 # encoding to use in the raw_input() method
373 # encoding to use in the raw_input() method
374 try:
374 try:
375 self.stdin_encoding = sys.stdin.encoding or 'ascii'
375 self.stdin_encoding = sys.stdin.encoding or 'ascii'
376 except AttributeError:
376 except AttributeError:
377 self.stdin_encoding = 'ascii'
377 self.stdin_encoding = 'ascii'
378
378
379 # dict of things NOT to alias (keywords, builtins and some magics)
379 # dict of things NOT to alias (keywords, builtins and some magics)
380 no_alias = {}
380 no_alias = {}
381 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
381 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
382 for key in keyword.kwlist + no_alias_magics:
382 for key in keyword.kwlist + no_alias_magics:
383 no_alias[key] = 1
383 no_alias[key] = 1
384 no_alias.update(__builtin__.__dict__)
384 no_alias.update(__builtin__.__dict__)
385 self.no_alias = no_alias
385 self.no_alias = no_alias
386
386
387 # make global variables for user access to these
387 # make global variables for user access to these
388 self.user_ns['_ih'] = self.input_hist
388 self.user_ns['_ih'] = self.input_hist
389 self.user_ns['_oh'] = self.output_hist
389 self.user_ns['_oh'] = self.output_hist
390 self.user_ns['_dh'] = self.dir_hist
390 self.user_ns['_dh'] = self.dir_hist
391
391
392 # user aliases to input and output histories
392 # user aliases to input and output histories
393 self.user_ns['In'] = self.input_hist
393 self.user_ns['In'] = self.input_hist
394 self.user_ns['Out'] = self.output_hist
394 self.user_ns['Out'] = self.output_hist
395
395
396 self.user_ns['_sh'] = IPython.shadowns
396 self.user_ns['_sh'] = IPython.shadowns
397 # Object variable to store code object waiting execution. This is
397 # Object variable to store code object waiting execution. This is
398 # used mainly by the multithreaded shells, but it can come in handy in
398 # used mainly by the multithreaded shells, but it can come in handy in
399 # other situations. No need to use a Queue here, since it's a single
399 # other situations. No need to use a Queue here, since it's a single
400 # item which gets cleared once run.
400 # item which gets cleared once run.
401 self.code_to_run = None
401 self.code_to_run = None
402
402
403 # escapes for automatic behavior on the command line
403 # escapes for automatic behavior on the command line
404 self.ESC_SHELL = '!'
404 self.ESC_SHELL = '!'
405 self.ESC_SH_CAP = '!!'
405 self.ESC_SH_CAP = '!!'
406 self.ESC_HELP = '?'
406 self.ESC_HELP = '?'
407 self.ESC_MAGIC = '%'
407 self.ESC_MAGIC = '%'
408 self.ESC_QUOTE = ','
408 self.ESC_QUOTE = ','
409 self.ESC_QUOTE2 = ';'
409 self.ESC_QUOTE2 = ';'
410 self.ESC_PAREN = '/'
410 self.ESC_PAREN = '/'
411
411
412 # And their associated handlers
412 # And their associated handlers
413 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
413 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
414 self.ESC_QUOTE : self.handle_auto,
414 self.ESC_QUOTE : self.handle_auto,
415 self.ESC_QUOTE2 : self.handle_auto,
415 self.ESC_QUOTE2 : self.handle_auto,
416 self.ESC_MAGIC : self.handle_magic,
416 self.ESC_MAGIC : self.handle_magic,
417 self.ESC_HELP : self.handle_help,
417 self.ESC_HELP : self.handle_help,
418 self.ESC_SHELL : self.handle_shell_escape,
418 self.ESC_SHELL : self.handle_shell_escape,
419 self.ESC_SH_CAP : self.handle_shell_escape,
419 self.ESC_SH_CAP : self.handle_shell_escape,
420 }
420 }
421
421
422 # class initializations
422 # class initializations
423 Magic.__init__(self,self)
423 Magic.__init__(self,self)
424
424
425 # Python source parser/formatter for syntax highlighting
425 # Python source parser/formatter for syntax highlighting
426 pyformat = PyColorize.Parser().format
426 pyformat = PyColorize.Parser().format
427 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
427 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
428
428
429 # hooks holds pointers used for user-side customizations
429 # hooks holds pointers used for user-side customizations
430 self.hooks = Struct()
430 self.hooks = Struct()
431
431
432 self.strdispatchers = {}
432 self.strdispatchers = {}
433
433
434 # Set all default hooks, defined in the IPython.hooks module.
434 # Set all default hooks, defined in the IPython.hooks module.
435 hooks = IPython.hooks
435 hooks = IPython.hooks
436 for hook_name in hooks.__all__:
436 for hook_name in hooks.__all__:
437 # default hooks have priority 100, i.e. low; user hooks should have
437 # default hooks have priority 100, i.e. low; user hooks should have
438 # 0-100 priority
438 # 0-100 priority
439 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
439 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
440 #print "bound hook",hook_name
440 #print "bound hook",hook_name
441
441
442 # Flag to mark unconditional exit
442 # Flag to mark unconditional exit
443 self.exit_now = False
443 self.exit_now = False
444
444
445 self.usage_min = """\
445 self.usage_min = """\
446 An enhanced console for Python.
446 An enhanced console for Python.
447 Some of its features are:
447 Some of its features are:
448 - Readline support if the readline library is present.
448 - Readline support if the readline library is present.
449 - Tab completion in the local namespace.
449 - Tab completion in the local namespace.
450 - Logging of input, see command-line options.
450 - Logging of input, see command-line options.
451 - System shell escape via ! , eg !ls.
451 - System shell escape via ! , eg !ls.
452 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
452 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
453 - Keeps track of locally defined variables via %who, %whos.
453 - Keeps track of locally defined variables via %who, %whos.
454 - Show object information with a ? eg ?x or x? (use ?? for more info).
454 - Show object information with a ? eg ?x or x? (use ?? for more info).
455 """
455 """
456 if usage: self.usage = usage
456 if usage: self.usage = usage
457 else: self.usage = self.usage_min
457 else: self.usage = self.usage_min
458
458
459 # Storage
459 # Storage
460 self.rc = rc # This will hold all configuration information
460 self.rc = rc # This will hold all configuration information
461 self.pager = 'less'
461 self.pager = 'less'
462 # temporary files used for various purposes. Deleted at exit.
462 # temporary files used for various purposes. Deleted at exit.
463 self.tempfiles = []
463 self.tempfiles = []
464
464
465 # Keep track of readline usage (later set by init_readline)
465 # Keep track of readline usage (later set by init_readline)
466 self.has_readline = False
466 self.has_readline = False
467
467
468 # template for logfile headers. It gets resolved at runtime by the
468 # template for logfile headers. It gets resolved at runtime by the
469 # logstart method.
469 # logstart method.
470 self.loghead_tpl = \
470 self.loghead_tpl = \
471 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
471 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
472 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
472 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
473 #log# opts = %s
473 #log# opts = %s
474 #log# args = %s
474 #log# args = %s
475 #log# It is safe to make manual edits below here.
475 #log# It is safe to make manual edits below here.
476 #log#-----------------------------------------------------------------------
476 #log#-----------------------------------------------------------------------
477 """
477 """
478 # for pushd/popd management
478 # for pushd/popd management
479 try:
479 try:
480 self.home_dir = get_home_dir()
480 self.home_dir = get_home_dir()
481 except HomeDirError,msg:
481 except HomeDirError,msg:
482 fatal(msg)
482 fatal(msg)
483
483
484 self.dir_stack = []
484 self.dir_stack = []
485
485
486 # Functions to call the underlying shell.
486 # Functions to call the underlying shell.
487
487
488 # The first is similar to os.system, but it doesn't return a value,
488 # The first is similar to os.system, but it doesn't return a value,
489 # and it allows interpolation of variables in the user's namespace.
489 # and it allows interpolation of variables in the user's namespace.
490 self.system = lambda cmd: \
490 self.system = lambda cmd: \
491 self.hooks.shell_hook(self.var_expand(cmd,depth=2))
491 self.hooks.shell_hook(self.var_expand(cmd,depth=2))
492
492
493 # These are for getoutput and getoutputerror:
493 # These are for getoutput and getoutputerror:
494 self.getoutput = lambda cmd: \
494 self.getoutput = lambda cmd: \
495 getoutput(self.var_expand(cmd,depth=2),
495 getoutput(self.var_expand(cmd,depth=2),
496 header=self.rc.system_header,
496 header=self.rc.system_header,
497 verbose=self.rc.system_verbose)
497 verbose=self.rc.system_verbose)
498
498
499 self.getoutputerror = lambda cmd: \
499 self.getoutputerror = lambda cmd: \
500 getoutputerror(self.var_expand(cmd,depth=2),
500 getoutputerror(self.var_expand(cmd,depth=2),
501 header=self.rc.system_header,
501 header=self.rc.system_header,
502 verbose=self.rc.system_verbose)
502 verbose=self.rc.system_verbose)
503
503
504
504
505 # keep track of where we started running (mainly for crash post-mortem)
505 # keep track of where we started running (mainly for crash post-mortem)
506 self.starting_dir = os.getcwd()
506 self.starting_dir = os.getcwd()
507
507
508 # Various switches which can be set
508 # Various switches which can be set
509 self.CACHELENGTH = 5000 # this is cheap, it's just text
509 self.CACHELENGTH = 5000 # this is cheap, it's just text
510 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
510 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
511 self.banner2 = banner2
511 self.banner2 = banner2
512
512
513 # TraceBack handlers:
513 # TraceBack handlers:
514
514
515 # Syntax error handler.
515 # Syntax error handler.
516 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
516 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
517
517
518 # The interactive one is initialized with an offset, meaning we always
518 # The interactive one is initialized with an offset, meaning we always
519 # want to remove the topmost item in the traceback, which is our own
519 # want to remove the topmost item in the traceback, which is our own
520 # internal code. Valid modes: ['Plain','Context','Verbose']
520 # internal code. Valid modes: ['Plain','Context','Verbose']
521 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
521 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
522 color_scheme='NoColor',
522 color_scheme='NoColor',
523 tb_offset = 1)
523 tb_offset = 1)
524
524
525 # IPython itself shouldn't crash. This will produce a detailed
525 # IPython itself shouldn't crash. This will produce a detailed
526 # post-mortem if it does. But we only install the crash handler for
526 # post-mortem if it does. But we only install the crash handler for
527 # non-threaded shells, the threaded ones use a normal verbose reporter
527 # non-threaded shells, the threaded ones use a normal verbose reporter
528 # and lose the crash handler. This is because exceptions in the main
528 # and lose the crash handler. This is because exceptions in the main
529 # thread (such as in GUI code) propagate directly to sys.excepthook,
529 # thread (such as in GUI code) propagate directly to sys.excepthook,
530 # and there's no point in printing crash dumps for every user exception.
530 # and there's no point in printing crash dumps for every user exception.
531 if self.isthreaded:
531 if self.isthreaded:
532 ipCrashHandler = ultraTB.FormattedTB()
532 ipCrashHandler = ultraTB.FormattedTB()
533 else:
533 else:
534 from IPython import CrashHandler
534 from IPython import CrashHandler
535 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
535 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
536 self.set_crash_handler(ipCrashHandler)
536 self.set_crash_handler(ipCrashHandler)
537
537
538 # and add any custom exception handlers the user may have specified
538 # and add any custom exception handlers the user may have specified
539 self.set_custom_exc(*custom_exceptions)
539 self.set_custom_exc(*custom_exceptions)
540
540
541 # indentation management
541 # indentation management
542 self.autoindent = False
542 self.autoindent = False
543 self.indent_current_nsp = 0
543 self.indent_current_nsp = 0
544
544
545 # Make some aliases automatically
545 # Make some aliases automatically
546 # Prepare list of shell aliases to auto-define
546 # Prepare list of shell aliases to auto-define
547 if os.name == 'posix':
547 if os.name == 'posix':
548 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
548 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
549 'mv mv -i','rm rm -i','cp cp -i',
549 'mv mv -i','rm rm -i','cp cp -i',
550 'cat cat','less less','clear clear',
550 'cat cat','less less','clear clear',
551 # a better ls
551 # a better ls
552 'ls ls -F',
552 'ls ls -F',
553 # long ls
553 # long ls
554 'll ls -lF')
554 'll ls -lF')
555 # Extra ls aliases with color, which need special treatment on BSD
555 # Extra ls aliases with color, which need special treatment on BSD
556 # variants
556 # variants
557 ls_extra = ( # color ls
557 ls_extra = ( # color ls
558 'lc ls -F -o --color',
558 'lc ls -F -o --color',
559 # ls normal files only
559 # ls normal files only
560 'lf ls -F -o --color %l | grep ^-',
560 'lf ls -F -o --color %l | grep ^-',
561 # ls symbolic links
561 # ls symbolic links
562 'lk ls -F -o --color %l | grep ^l',
562 'lk ls -F -o --color %l | grep ^l',
563 # directories or links to directories,
563 # directories or links to directories,
564 'ldir ls -F -o --color %l | grep /$',
564 'ldir ls -F -o --color %l | grep /$',
565 # things which are executable
565 # things which are executable
566 'lx ls -F -o --color %l | grep ^-..x',
566 'lx ls -F -o --color %l | grep ^-..x',
567 )
567 )
568 # The BSDs don't ship GNU ls, so they don't understand the
568 # The BSDs don't ship GNU ls, so they don't understand the
569 # --color switch out of the box
569 # --color switch out of the box
570 if 'bsd' in sys.platform:
570 if 'bsd' in sys.platform:
571 ls_extra = ( # ls normal files only
571 ls_extra = ( # ls normal files only
572 'lf ls -lF | grep ^-',
572 'lf ls -lF | grep ^-',
573 # ls symbolic links
573 # ls symbolic links
574 'lk ls -lF | grep ^l',
574 'lk ls -lF | grep ^l',
575 # directories or links to directories,
575 # directories or links to directories,
576 'ldir ls -lF | grep /$',
576 'ldir ls -lF | grep /$',
577 # things which are executable
577 # things which are executable
578 'lx ls -lF | grep ^-..x',
578 'lx ls -lF | grep ^-..x',
579 )
579 )
580 auto_alias = auto_alias + ls_extra
580 auto_alias = auto_alias + ls_extra
581 elif os.name in ['nt','dos']:
581 elif os.name in ['nt','dos']:
582 auto_alias = ('ls dir /on',
582 auto_alias = ('ls dir /on',
583 'ddir dir /ad /on', 'ldir dir /ad /on',
583 'ddir dir /ad /on', 'ldir dir /ad /on',
584 'mkdir mkdir','rmdir rmdir','echo echo',
584 'mkdir mkdir','rmdir rmdir','echo echo',
585 'ren ren','cls cls','copy copy')
585 'ren ren','cls cls','copy copy')
586 else:
586 else:
587 auto_alias = ()
587 auto_alias = ()
588 self.auto_alias = [s.split(None,1) for s in auto_alias]
588 self.auto_alias = [s.split(None,1) for s in auto_alias]
589
589
590
590
591 # Produce a public API instance
591 # Produce a public API instance
592 self.api = IPython.ipapi.IPApi(self)
592 self.api = IPython.ipapi.IPApi(self)
593
593
594 # Call the actual (public) initializer
594 # Call the actual (public) initializer
595 self.init_auto_alias()
595 self.init_auto_alias()
596
596
597 # track which builtins we add, so we can clean up later
597 # track which builtins we add, so we can clean up later
598 self.builtins_added = {}
598 self.builtins_added = {}
599 # This method will add the necessary builtins for operation, but
599 # This method will add the necessary builtins for operation, but
600 # tracking what it did via the builtins_added dict.
600 # tracking what it did via the builtins_added dict.
601
601
602 #TODO: remove this, redundant
602 #TODO: remove this, redundant
603 self.add_builtins()
603 self.add_builtins()
604
604
605
605
606
606
607
607
608 # end __init__
608 # end __init__
609
609
610 def var_expand(self,cmd,depth=0):
610 def var_expand(self,cmd,depth=0):
611 """Expand python variables in a string.
611 """Expand python variables in a string.
612
612
613 The depth argument indicates how many frames above the caller should
613 The depth argument indicates how many frames above the caller should
614 be walked to look for the local namespace where to expand variables.
614 be walked to look for the local namespace where to expand variables.
615
615
616 The global namespace for expansion is always the user's interactive
616 The global namespace for expansion is always the user's interactive
617 namespace.
617 namespace.
618 """
618 """
619
619
620 return str(ItplNS(cmd,
620 return str(ItplNS(cmd,
621 self.user_ns, # globals
621 self.user_ns, # globals
622 # Skip our own frame in searching for locals:
622 # Skip our own frame in searching for locals:
623 sys._getframe(depth+1).f_locals # locals
623 sys._getframe(depth+1).f_locals # locals
624 ))
624 ))
625
625
626 def pre_config_initialization(self):
626 def pre_config_initialization(self):
627 """Pre-configuration init method
627 """Pre-configuration init method
628
628
629 This is called before the configuration files are processed to
629 This is called before the configuration files are processed to
630 prepare the services the config files might need.
630 prepare the services the config files might need.
631
631
632 self.rc already has reasonable default values at this point.
632 self.rc already has reasonable default values at this point.
633 """
633 """
634 rc = self.rc
634 rc = self.rc
635 try:
635 try:
636 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
636 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
637 except exceptions.UnicodeDecodeError:
637 except exceptions.UnicodeDecodeError:
638 print "Your ipythondir can't be decoded to unicode!"
638 print "Your ipythondir can't be decoded to unicode!"
639 print "Please set HOME environment variable to something that"
639 print "Please set HOME environment variable to something that"
640 print r"only has ASCII characters, e.g. c:\home"
640 print r"only has ASCII characters, e.g. c:\home"
641 print "Now it is",rc.ipythondir
641 print "Now it is",rc.ipythondir
642 sys.exit()
642 sys.exit()
643 self.shadowhist = IPython.history.ShadowHist(self.db)
643 self.shadowhist = IPython.history.ShadowHist(self.db)
644
644
645
645
646 def post_config_initialization(self):
646 def post_config_initialization(self):
647 """Post configuration init method
647 """Post configuration init method
648
648
649 This is called after the configuration files have been processed to
649 This is called after the configuration files have been processed to
650 'finalize' the initialization."""
650 'finalize' the initialization."""
651
651
652 rc = self.rc
652 rc = self.rc
653
653
654 # Object inspector
654 # Object inspector
655 self.inspector = OInspect.Inspector(OInspect.InspectColors,
655 self.inspector = OInspect.Inspector(OInspect.InspectColors,
656 PyColorize.ANSICodeColors,
656 PyColorize.ANSICodeColors,
657 'NoColor',
657 'NoColor',
658 rc.object_info_string_level)
658 rc.object_info_string_level)
659
659
660 self.rl_next_input = None
660 self.rl_next_input = None
661 self.rl_do_indent = False
661 self.rl_do_indent = False
662 # Load readline proper
662 # Load readline proper
663 if rc.readline:
663 if rc.readline:
664 self.init_readline()
664 self.init_readline()
665
665
666
666
667 # local shortcut, this is used a LOT
667 # local shortcut, this is used a LOT
668 self.log = self.logger.log
668 self.log = self.logger.log
669
669
670 # Initialize cache, set in/out prompts and printing system
670 # Initialize cache, set in/out prompts and printing system
671 self.outputcache = CachedOutput(self,
671 self.outputcache = CachedOutput(self,
672 rc.cache_size,
672 rc.cache_size,
673 rc.pprint,
673 rc.pprint,
674 input_sep = rc.separate_in,
674 input_sep = rc.separate_in,
675 output_sep = rc.separate_out,
675 output_sep = rc.separate_out,
676 output_sep2 = rc.separate_out2,
676 output_sep2 = rc.separate_out2,
677 ps1 = rc.prompt_in1,
677 ps1 = rc.prompt_in1,
678 ps2 = rc.prompt_in2,
678 ps2 = rc.prompt_in2,
679 ps_out = rc.prompt_out,
679 ps_out = rc.prompt_out,
680 pad_left = rc.prompts_pad_left)
680 pad_left = rc.prompts_pad_left)
681
681
682 # user may have over-ridden the default print hook:
682 # user may have over-ridden the default print hook:
683 try:
683 try:
684 self.outputcache.__class__.display = self.hooks.display
684 self.outputcache.__class__.display = self.hooks.display
685 except AttributeError:
685 except AttributeError:
686 pass
686 pass
687
687
688 # I don't like assigning globally to sys, because it means when
688 # I don't like assigning globally to sys, because it means when
689 # embedding instances, each embedded instance overrides the previous
689 # embedding instances, each embedded instance overrides the previous
690 # choice. But sys.displayhook seems to be called internally by exec,
690 # choice. But sys.displayhook seems to be called internally by exec,
691 # so I don't see a way around it. We first save the original and then
691 # so I don't see a way around it. We first save the original and then
692 # overwrite it.
692 # overwrite it.
693 self.sys_displayhook = sys.displayhook
693 self.sys_displayhook = sys.displayhook
694 sys.displayhook = self.outputcache
694 sys.displayhook = self.outputcache
695
695
696 # Do a proper resetting of doctest, including the necessary displayhook
696 # Do a proper resetting of doctest, including the necessary displayhook
697 # monkeypatching
697 # monkeypatching
698 try:
698 try:
699 doctest_reload()
699 doctest_reload()
700 except ImportError:
700 except ImportError:
701 warn("doctest module does not exist.")
701 warn("doctest module does not exist.")
702
702
703 # Set user colors (don't do it in the constructor above so that it
703 # Set user colors (don't do it in the constructor above so that it
704 # doesn't crash if colors option is invalid)
704 # doesn't crash if colors option is invalid)
705 self.magic_colors(rc.colors)
705 self.magic_colors(rc.colors)
706
706
707 # Set calling of pdb on exceptions
707 # Set calling of pdb on exceptions
708 self.call_pdb = rc.pdb
708 self.call_pdb = rc.pdb
709
709
710 # Load user aliases
710 # Load user aliases
711 for alias in rc.alias:
711 for alias in rc.alias:
712 self.magic_alias(alias)
712 self.magic_alias(alias)
713
713
714 self.hooks.late_startup_hook()
714 self.hooks.late_startup_hook()
715
715
716 for cmd in self.rc.autoexec:
716 for cmd in self.rc.autoexec:
717 #print "autoexec>",cmd #dbg
717 #print "autoexec>",cmd #dbg
718 self.api.runlines(cmd)
718 self.api.runlines(cmd)
719
719
720 batchrun = False
720 batchrun = False
721 for batchfile in [path(arg) for arg in self.rc.args
721 for batchfile in [path(arg) for arg in self.rc.args
722 if arg.lower().endswith('.ipy')]:
722 if arg.lower().endswith('.ipy')]:
723 if not batchfile.isfile():
723 if not batchfile.isfile():
724 print "No such batch file:", batchfile
724 print "No such batch file:", batchfile
725 continue
725 continue
726 self.api.runlines(batchfile.text())
726 self.api.runlines(batchfile.text())
727 batchrun = True
727 batchrun = True
728 # without -i option, exit after running the batch file
728 # without -i option, exit after running the batch file
729 if batchrun and not self.rc.interact:
729 if batchrun and not self.rc.interact:
730 self.ask_exit()
730 self.ask_exit()
731
731
732 def add_builtins(self):
732 def add_builtins(self):
733 """Store ipython references into the builtin namespace.
733 """Store ipython references into the builtin namespace.
734
734
735 Some parts of ipython operate via builtins injected here, which hold a
735 Some parts of ipython operate via builtins injected here, which hold a
736 reference to IPython itself."""
736 reference to IPython itself."""
737
737
738 # TODO: deprecate all of these, they are unsafe
738 # TODO: deprecate all of these, they are unsafe
739 builtins_new = dict(__IPYTHON__ = self,
739 builtins_new = dict(__IPYTHON__ = self,
740 ip_set_hook = self.set_hook,
740 ip_set_hook = self.set_hook,
741 jobs = self.jobs,
741 jobs = self.jobs,
742 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
742 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
743 ipalias = wrap_deprecated(self.ipalias),
743 ipalias = wrap_deprecated(self.ipalias),
744 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
744 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
745 #_ip = self.api
745 #_ip = self.api
746 )
746 )
747 for biname,bival in builtins_new.items():
747 for biname,bival in builtins_new.items():
748 try:
748 try:
749 # store the orignal value so we can restore it
749 # store the orignal value so we can restore it
750 self.builtins_added[biname] = __builtin__.__dict__[biname]
750 self.builtins_added[biname] = __builtin__.__dict__[biname]
751 except KeyError:
751 except KeyError:
752 # or mark that it wasn't defined, and we'll just delete it at
752 # or mark that it wasn't defined, and we'll just delete it at
753 # cleanup
753 # cleanup
754 self.builtins_added[biname] = Undefined
754 self.builtins_added[biname] = Undefined
755 __builtin__.__dict__[biname] = bival
755 __builtin__.__dict__[biname] = bival
756
756
757 # Keep in the builtins a flag for when IPython is active. We set it
757 # Keep in the builtins a flag for when IPython is active. We set it
758 # with setdefault so that multiple nested IPythons don't clobber one
758 # with setdefault so that multiple nested IPythons don't clobber one
759 # another. Each will increase its value by one upon being activated,
759 # another. Each will increase its value by one upon being activated,
760 # which also gives us a way to determine the nesting level.
760 # which also gives us a way to determine the nesting level.
761 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
761 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
762
762
763 def clean_builtins(self):
763 def clean_builtins(self):
764 """Remove any builtins which might have been added by add_builtins, or
764 """Remove any builtins which might have been added by add_builtins, or
765 restore overwritten ones to their previous values."""
765 restore overwritten ones to their previous values."""
766 for biname,bival in self.builtins_added.items():
766 for biname,bival in self.builtins_added.items():
767 if bival is Undefined:
767 if bival is Undefined:
768 del __builtin__.__dict__[biname]
768 del __builtin__.__dict__[biname]
769 else:
769 else:
770 __builtin__.__dict__[biname] = bival
770 __builtin__.__dict__[biname] = bival
771 self.builtins_added.clear()
771 self.builtins_added.clear()
772
772
773 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
773 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
774 """set_hook(name,hook) -> sets an internal IPython hook.
774 """set_hook(name,hook) -> sets an internal IPython hook.
775
775
776 IPython exposes some of its internal API as user-modifiable hooks. By
776 IPython exposes some of its internal API as user-modifiable hooks. By
777 adding your function to one of these hooks, you can modify IPython's
777 adding your function to one of these hooks, you can modify IPython's
778 behavior to call at runtime your own routines."""
778 behavior to call at runtime your own routines."""
779
779
780 # At some point in the future, this should validate the hook before it
780 # At some point in the future, this should validate the hook before it
781 # accepts it. Probably at least check that the hook takes the number
781 # accepts it. Probably at least check that the hook takes the number
782 # of args it's supposed to.
782 # of args it's supposed to.
783
783
784 f = new.instancemethod(hook,self,self.__class__)
784 f = new.instancemethod(hook,self,self.__class__)
785
785
786 # check if the hook is for strdispatcher first
786 # check if the hook is for strdispatcher first
787 if str_key is not None:
787 if str_key is not None:
788 sdp = self.strdispatchers.get(name, StrDispatch())
788 sdp = self.strdispatchers.get(name, StrDispatch())
789 sdp.add_s(str_key, f, priority )
789 sdp.add_s(str_key, f, priority )
790 self.strdispatchers[name] = sdp
790 self.strdispatchers[name] = sdp
791 return
791 return
792 if re_key is not None:
792 if re_key is not None:
793 sdp = self.strdispatchers.get(name, StrDispatch())
793 sdp = self.strdispatchers.get(name, StrDispatch())
794 sdp.add_re(re.compile(re_key), f, priority )
794 sdp.add_re(re.compile(re_key), f, priority )
795 self.strdispatchers[name] = sdp
795 self.strdispatchers[name] = sdp
796 return
796 return
797
797
798 dp = getattr(self.hooks, name, None)
798 dp = getattr(self.hooks, name, None)
799 if name not in IPython.hooks.__all__:
799 if name not in IPython.hooks.__all__:
800 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
800 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
801 if not dp:
801 if not dp:
802 dp = IPython.hooks.CommandChainDispatcher()
802 dp = IPython.hooks.CommandChainDispatcher()
803
803
804 try:
804 try:
805 dp.add(f,priority)
805 dp.add(f,priority)
806 except AttributeError:
806 except AttributeError:
807 # it was not commandchain, plain old func - replace
807 # it was not commandchain, plain old func - replace
808 dp = f
808 dp = f
809
809
810 setattr(self.hooks,name, dp)
810 setattr(self.hooks,name, dp)
811
811
812
812
813 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
813 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
814
814
815 def set_crash_handler(self,crashHandler):
815 def set_crash_handler(self,crashHandler):
816 """Set the IPython crash handler.
816 """Set the IPython crash handler.
817
817
818 This must be a callable with a signature suitable for use as
818 This must be a callable with a signature suitable for use as
819 sys.excepthook."""
819 sys.excepthook."""
820
820
821 # Install the given crash handler as the Python exception hook
821 # Install the given crash handler as the Python exception hook
822 sys.excepthook = crashHandler
822 sys.excepthook = crashHandler
823
823
824 # The instance will store a pointer to this, so that runtime code
824 # The instance will store a pointer to this, so that runtime code
825 # (such as magics) can access it. This is because during the
825 # (such as magics) can access it. This is because during the
826 # read-eval loop, it gets temporarily overwritten (to deal with GUI
826 # read-eval loop, it gets temporarily overwritten (to deal with GUI
827 # frameworks).
827 # frameworks).
828 self.sys_excepthook = sys.excepthook
828 self.sys_excepthook = sys.excepthook
829
829
830
830
831 def set_custom_exc(self,exc_tuple,handler):
831 def set_custom_exc(self,exc_tuple,handler):
832 """set_custom_exc(exc_tuple,handler)
832 """set_custom_exc(exc_tuple,handler)
833
833
834 Set a custom exception handler, which will be called if any of the
834 Set a custom exception handler, which will be called if any of the
835 exceptions in exc_tuple occur in the mainloop (specifically, in the
835 exceptions in exc_tuple occur in the mainloop (specifically, in the
836 runcode() method.
836 runcode() method.
837
837
838 Inputs:
838 Inputs:
839
839
840 - exc_tuple: a *tuple* of valid exceptions to call the defined
840 - exc_tuple: a *tuple* of valid exceptions to call the defined
841 handler for. It is very important that you use a tuple, and NOT A
841 handler for. It is very important that you use a tuple, and NOT A
842 LIST here, because of the way Python's except statement works. If
842 LIST here, because of the way Python's except statement works. If
843 you only want to trap a single exception, use a singleton tuple:
843 you only want to trap a single exception, use a singleton tuple:
844
844
845 exc_tuple == (MyCustomException,)
845 exc_tuple == (MyCustomException,)
846
846
847 - handler: this must be defined as a function with the following
847 - handler: this must be defined as a function with the following
848 basic interface: def my_handler(self,etype,value,tb).
848 basic interface: def my_handler(self,etype,value,tb).
849
849
850 This will be made into an instance method (via new.instancemethod)
850 This will be made into an instance method (via new.instancemethod)
851 of IPython itself, and it will be called if any of the exceptions
851 of IPython itself, and it will be called if any of the exceptions
852 listed in the exc_tuple are caught. If the handler is None, an
852 listed in the exc_tuple are caught. If the handler is None, an
853 internal basic one is used, which just prints basic info.
853 internal basic one is used, which just prints basic info.
854
854
855 WARNING: by putting in your own exception handler into IPython's main
855 WARNING: by putting in your own exception handler into IPython's main
856 execution loop, you run a very good chance of nasty crashes. This
856 execution loop, you run a very good chance of nasty crashes. This
857 facility should only be used if you really know what you are doing."""
857 facility should only be used if you really know what you are doing."""
858
858
859 assert type(exc_tuple)==type(()) , \
859 assert type(exc_tuple)==type(()) , \
860 "The custom exceptions must be given AS A TUPLE."
860 "The custom exceptions must be given AS A TUPLE."
861
861
862 def dummy_handler(self,etype,value,tb):
862 def dummy_handler(self,etype,value,tb):
863 print '*** Simple custom exception handler ***'
863 print '*** Simple custom exception handler ***'
864 print 'Exception type :',etype
864 print 'Exception type :',etype
865 print 'Exception value:',value
865 print 'Exception value:',value
866 print 'Traceback :',tb
866 print 'Traceback :',tb
867 print 'Source code :','\n'.join(self.buffer)
867 print 'Source code :','\n'.join(self.buffer)
868
868
869 if handler is None: handler = dummy_handler
869 if handler is None: handler = dummy_handler
870
870
871 self.CustomTB = new.instancemethod(handler,self,self.__class__)
871 self.CustomTB = new.instancemethod(handler,self,self.__class__)
872 self.custom_exceptions = exc_tuple
872 self.custom_exceptions = exc_tuple
873
873
874 def set_custom_completer(self,completer,pos=0):
874 def set_custom_completer(self,completer,pos=0):
875 """set_custom_completer(completer,pos=0)
875 """set_custom_completer(completer,pos=0)
876
876
877 Adds a new custom completer function.
877 Adds a new custom completer function.
878
878
879 The position argument (defaults to 0) is the index in the completers
879 The position argument (defaults to 0) is the index in the completers
880 list where you want the completer to be inserted."""
880 list where you want the completer to be inserted."""
881
881
882 newcomp = new.instancemethod(completer,self.Completer,
882 newcomp = new.instancemethod(completer,self.Completer,
883 self.Completer.__class__)
883 self.Completer.__class__)
884 self.Completer.matchers.insert(pos,newcomp)
884 self.Completer.matchers.insert(pos,newcomp)
885
885
886 def set_completer(self):
886 def set_completer(self):
887 """reset readline's completer to be our own."""
887 """reset readline's completer to be our own."""
888 self.readline.set_completer(self.Completer.complete)
888 self.readline.set_completer(self.Completer.complete)
889
889
890 def _get_call_pdb(self):
890 def _get_call_pdb(self):
891 return self._call_pdb
891 return self._call_pdb
892
892
893 def _set_call_pdb(self,val):
893 def _set_call_pdb(self,val):
894
894
895 if val not in (0,1,False,True):
895 if val not in (0,1,False,True):
896 raise ValueError,'new call_pdb value must be boolean'
896 raise ValueError,'new call_pdb value must be boolean'
897
897
898 # store value in instance
898 # store value in instance
899 self._call_pdb = val
899 self._call_pdb = val
900
900
901 # notify the actual exception handlers
901 # notify the actual exception handlers
902 self.InteractiveTB.call_pdb = val
902 self.InteractiveTB.call_pdb = val
903 if self.isthreaded:
903 if self.isthreaded:
904 try:
904 try:
905 self.sys_excepthook.call_pdb = val
905 self.sys_excepthook.call_pdb = val
906 except:
906 except:
907 warn('Failed to activate pdb for threaded exception handler')
907 warn('Failed to activate pdb for threaded exception handler')
908
908
909 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
909 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
910 'Control auto-activation of pdb at exceptions')
910 'Control auto-activation of pdb at exceptions')
911
911
912
912
913 # These special functions get installed in the builtin namespace, to
913 # These special functions get installed in the builtin namespace, to
914 # provide programmatic (pure python) access to magics, aliases and system
914 # provide programmatic (pure python) access to magics, aliases and system
915 # calls. This is important for logging, user scripting, and more.
915 # calls. This is important for logging, user scripting, and more.
916
916
917 # We are basically exposing, via normal python functions, the three
917 # We are basically exposing, via normal python functions, the three
918 # mechanisms in which ipython offers special call modes (magics for
918 # mechanisms in which ipython offers special call modes (magics for
919 # internal control, aliases for direct system access via pre-selected
919 # internal control, aliases for direct system access via pre-selected
920 # names, and !cmd for calling arbitrary system commands).
920 # names, and !cmd for calling arbitrary system commands).
921
921
922 def ipmagic(self,arg_s):
922 def ipmagic(self,arg_s):
923 """Call a magic function by name.
923 """Call a magic function by name.
924
924
925 Input: a string containing the name of the magic function to call and any
925 Input: a string containing the name of the magic function to call and any
926 additional arguments to be passed to the magic.
926 additional arguments to be passed to the magic.
927
927
928 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
928 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
929 prompt:
929 prompt:
930
930
931 In[1]: %name -opt foo bar
931 In[1]: %name -opt foo bar
932
932
933 To call a magic without arguments, simply use ipmagic('name').
933 To call a magic without arguments, simply use ipmagic('name').
934
934
935 This provides a proper Python function to call IPython's magics in any
935 This provides a proper Python function to call IPython's magics in any
936 valid Python code you can type at the interpreter, including loops and
936 valid Python code you can type at the interpreter, including loops and
937 compound statements. It is added by IPython to the Python builtin
937 compound statements. It is added by IPython to the Python builtin
938 namespace upon initialization."""
938 namespace upon initialization."""
939
939
940 args = arg_s.split(' ',1)
940 args = arg_s.split(' ',1)
941 magic_name = args[0]
941 magic_name = args[0]
942 magic_name = magic_name.lstrip(self.ESC_MAGIC)
942 magic_name = magic_name.lstrip(self.ESC_MAGIC)
943
943
944 try:
944 try:
945 magic_args = args[1]
945 magic_args = args[1]
946 except IndexError:
946 except IndexError:
947 magic_args = ''
947 magic_args = ''
948 fn = getattr(self,'magic_'+magic_name,None)
948 fn = getattr(self,'magic_'+magic_name,None)
949 if fn is None:
949 if fn is None:
950 error("Magic function `%s` not found." % magic_name)
950 error("Magic function `%s` not found." % magic_name)
951 else:
951 else:
952 magic_args = self.var_expand(magic_args,1)
952 magic_args = self.var_expand(magic_args,1)
953 return fn(magic_args)
953 return fn(magic_args)
954
954
955 def ipalias(self,arg_s):
955 def ipalias(self,arg_s):
956 """Call an alias by name.
956 """Call an alias by name.
957
957
958 Input: a string containing the name of the alias to call and any
958 Input: a string containing the name of the alias to call and any
959 additional arguments to be passed to the magic.
959 additional arguments to be passed to the magic.
960
960
961 ipalias('name -opt foo bar') is equivalent to typing at the ipython
961 ipalias('name -opt foo bar') is equivalent to typing at the ipython
962 prompt:
962 prompt:
963
963
964 In[1]: name -opt foo bar
964 In[1]: name -opt foo bar
965
965
966 To call an alias without arguments, simply use ipalias('name').
966 To call an alias without arguments, simply use ipalias('name').
967
967
968 This provides a proper Python function to call IPython's aliases in any
968 This provides a proper Python function to call IPython's aliases in any
969 valid Python code you can type at the interpreter, including loops and
969 valid Python code you can type at the interpreter, including loops and
970 compound statements. It is added by IPython to the Python builtin
970 compound statements. It is added by IPython to the Python builtin
971 namespace upon initialization."""
971 namespace upon initialization."""
972
972
973 args = arg_s.split(' ',1)
973 args = arg_s.split(' ',1)
974 alias_name = args[0]
974 alias_name = args[0]
975 try:
975 try:
976 alias_args = args[1]
976 alias_args = args[1]
977 except IndexError:
977 except IndexError:
978 alias_args = ''
978 alias_args = ''
979 if alias_name in self.alias_table:
979 if alias_name in self.alias_table:
980 self.call_alias(alias_name,alias_args)
980 self.call_alias(alias_name,alias_args)
981 else:
981 else:
982 error("Alias `%s` not found." % alias_name)
982 error("Alias `%s` not found." % alias_name)
983
983
984 def ipsystem(self,arg_s):
984 def ipsystem(self,arg_s):
985 """Make a system call, using IPython."""
985 """Make a system call, using IPython."""
986
986
987 self.system(arg_s)
987 self.system(arg_s)
988
988
989 def complete(self,text):
989 def complete(self,text):
990 """Return a sorted list of all possible completions on text.
990 """Return a sorted list of all possible completions on text.
991
991
992 Inputs:
992 Inputs:
993
993
994 - text: a string of text to be completed on.
994 - text: a string of text to be completed on.
995
995
996 This is a wrapper around the completion mechanism, similar to what
996 This is a wrapper around the completion mechanism, similar to what
997 readline does at the command line when the TAB key is hit. By
997 readline does at the command line when the TAB key is hit. By
998 exposing it as a method, it can be used by other non-readline
998 exposing it as a method, it can be used by other non-readline
999 environments (such as GUIs) for text completion.
999 environments (such as GUIs) for text completion.
1000
1000
1001 Simple usage example:
1001 Simple usage example:
1002
1002
1003 In [7]: x = 'hello'
1003 In [7]: x = 'hello'
1004
1004
1005 In [8]: x
1005 In [8]: x
1006 Out[8]: 'hello'
1006 Out[8]: 'hello'
1007
1007
1008 In [9]: print x
1008 In [9]: print x
1009 hello
1009 hello
1010
1010
1011 In [10]: _ip.IP.complete('x.l')
1011 In [10]: _ip.IP.complete('x.l')
1012 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1012 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1013 """
1013 """
1014
1014
1015 complete = self.Completer.complete
1015 complete = self.Completer.complete
1016 state = 0
1016 state = 0
1017 # use a dict so we get unique keys, since ipyhton's multiple
1017 # use a dict so we get unique keys, since ipyhton's multiple
1018 # completers can return duplicates. When we make 2.4 a requirement,
1018 # completers can return duplicates. When we make 2.4 a requirement,
1019 # start using sets instead, which are faster.
1019 # start using sets instead, which are faster.
1020 comps = {}
1020 comps = {}
1021 while True:
1021 while True:
1022 newcomp = complete(text,state,line_buffer=text)
1022 newcomp = complete(text,state,line_buffer=text)
1023 if newcomp is None:
1023 if newcomp is None:
1024 break
1024 break
1025 comps[newcomp] = 1
1025 comps[newcomp] = 1
1026 state += 1
1026 state += 1
1027 outcomps = comps.keys()
1027 outcomps = comps.keys()
1028 outcomps.sort()
1028 outcomps.sort()
1029 #print "T:",text,"OC:",outcomps # dbg
1029 #print "T:",text,"OC:",outcomps # dbg
1030 #print "vars:",self.user_ns.keys()
1030 #print "vars:",self.user_ns.keys()
1031 return outcomps
1031 return outcomps
1032
1032
1033 def set_completer_frame(self, frame=None):
1033 def set_completer_frame(self, frame=None):
1034 if frame:
1034 if frame:
1035 self.Completer.namespace = frame.f_locals
1035 self.Completer.namespace = frame.f_locals
1036 self.Completer.global_namespace = frame.f_globals
1036 self.Completer.global_namespace = frame.f_globals
1037 else:
1037 else:
1038 self.Completer.namespace = self.user_ns
1038 self.Completer.namespace = self.user_ns
1039 self.Completer.global_namespace = self.user_global_ns
1039 self.Completer.global_namespace = self.user_global_ns
1040
1040
1041 def init_auto_alias(self):
1041 def init_auto_alias(self):
1042 """Define some aliases automatically.
1042 """Define some aliases automatically.
1043
1043
1044 These are ALL parameter-less aliases"""
1044 These are ALL parameter-less aliases"""
1045
1045
1046 for alias,cmd in self.auto_alias:
1046 for alias,cmd in self.auto_alias:
1047 self.getapi().defalias(alias,cmd)
1047 self.getapi().defalias(alias,cmd)
1048
1048
1049
1049
1050 def alias_table_validate(self,verbose=0):
1050 def alias_table_validate(self,verbose=0):
1051 """Update information about the alias table.
1051 """Update information about the alias table.
1052
1052
1053 In particular, make sure no Python keywords/builtins are in it."""
1053 In particular, make sure no Python keywords/builtins are in it."""
1054
1054
1055 no_alias = self.no_alias
1055 no_alias = self.no_alias
1056 for k in self.alias_table.keys():
1056 for k in self.alias_table.keys():
1057 if k in no_alias:
1057 if k in no_alias:
1058 del self.alias_table[k]
1058 del self.alias_table[k]
1059 if verbose:
1059 if verbose:
1060 print ("Deleting alias <%s>, it's a Python "
1060 print ("Deleting alias <%s>, it's a Python "
1061 "keyword or builtin." % k)
1061 "keyword or builtin." % k)
1062
1062
1063 def set_autoindent(self,value=None):
1063 def set_autoindent(self,value=None):
1064 """Set the autoindent flag, checking for readline support.
1064 """Set the autoindent flag, checking for readline support.
1065
1065
1066 If called with no arguments, it acts as a toggle."""
1066 If called with no arguments, it acts as a toggle."""
1067
1067
1068 if not self.has_readline:
1068 if not self.has_readline:
1069 if os.name == 'posix':
1069 if os.name == 'posix':
1070 warn("The auto-indent feature requires the readline library")
1070 warn("The auto-indent feature requires the readline library")
1071 self.autoindent = 0
1071 self.autoindent = 0
1072 return
1072 return
1073 if value is None:
1073 if value is None:
1074 self.autoindent = not self.autoindent
1074 self.autoindent = not self.autoindent
1075 else:
1075 else:
1076 self.autoindent = value
1076 self.autoindent = value
1077
1077
1078 def rc_set_toggle(self,rc_field,value=None):
1078 def rc_set_toggle(self,rc_field,value=None):
1079 """Set or toggle a field in IPython's rc config. structure.
1079 """Set or toggle a field in IPython's rc config. structure.
1080
1080
1081 If called with no arguments, it acts as a toggle.
1081 If called with no arguments, it acts as a toggle.
1082
1082
1083 If called with a non-existent field, the resulting AttributeError
1083 If called with a non-existent field, the resulting AttributeError
1084 exception will propagate out."""
1084 exception will propagate out."""
1085
1085
1086 rc_val = getattr(self.rc,rc_field)
1086 rc_val = getattr(self.rc,rc_field)
1087 if value is None:
1087 if value is None:
1088 value = not rc_val
1088 value = not rc_val
1089 setattr(self.rc,rc_field,value)
1089 setattr(self.rc,rc_field,value)
1090
1090
1091 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1091 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1092 """Install the user configuration directory.
1092 """Install the user configuration directory.
1093
1093
1094 Can be called when running for the first time or to upgrade the user's
1094 Can be called when running for the first time or to upgrade the user's
1095 .ipython/ directory with the mode parameter. Valid modes are 'install'
1095 .ipython/ directory with the mode parameter. Valid modes are 'install'
1096 and 'upgrade'."""
1096 and 'upgrade'."""
1097
1097
1098 def wait():
1098 def wait():
1099 try:
1099 try:
1100 raw_input("Please press <RETURN> to start IPython.")
1100 raw_input("Please press <RETURN> to start IPython.")
1101 except EOFError:
1101 except EOFError:
1102 print >> Term.cout
1102 print >> Term.cout
1103 print '*'*70
1103 print '*'*70
1104
1104
1105 cwd = os.getcwd() # remember where we started
1105 cwd = os.getcwd() # remember where we started
1106 glb = glob.glob
1106 glb = glob.glob
1107 print '*'*70
1107 print '*'*70
1108 if mode == 'install':
1108 if mode == 'install':
1109 print \
1109 print \
1110 """Welcome to IPython. I will try to create a personal configuration directory
1110 """Welcome to IPython. I will try to create a personal configuration directory
1111 where you can customize many aspects of IPython's functionality in:\n"""
1111 where you can customize many aspects of IPython's functionality in:\n"""
1112 else:
1112 else:
1113 print 'I am going to upgrade your configuration in:'
1113 print 'I am going to upgrade your configuration in:'
1114
1114
1115 print ipythondir
1115 print ipythondir
1116
1116
1117 rcdirend = os.path.join('IPython','UserConfig')
1117 rcdirend = os.path.join('IPython','UserConfig')
1118 cfg = lambda d: os.path.join(d,rcdirend)
1118 cfg = lambda d: os.path.join(d,rcdirend)
1119 try:
1119 try:
1120 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1120 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1121 print "Initializing from configuration",rcdir
1121 print "Initializing from configuration",rcdir
1122 except IndexError:
1122 except IndexError:
1123 warning = """
1123 warning = """
1124 Installation error. IPython's directory was not found.
1124 Installation error. IPython's directory was not found.
1125
1125
1126 Check the following:
1126 Check the following:
1127
1127
1128 The ipython/IPython directory should be in a directory belonging to your
1128 The ipython/IPython directory should be in a directory belonging to your
1129 PYTHONPATH environment variable (that is, it should be in a directory
1129 PYTHONPATH environment variable (that is, it should be in a directory
1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1131
1131
1132 IPython will create a minimal default configuration for you.
1132 IPython will create a minimal default configuration for you.
1133
1133
1134 """
1134 """
1135 warn(warning)
1135 warn(warning)
1136 wait()
1136 wait()
1137
1137
1138 if sys.platform =='win32':
1138 if sys.platform =='win32':
1139 inif = 'ipythonrc.ini'
1139 inif = 'ipythonrc.ini'
1140 else:
1140 else:
1141 inif = 'ipythonrc'
1141 inif = 'ipythonrc'
1142 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults', inif : '# intentionally left blank' }
1142 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults', inif : '# intentionally left blank' }
1143 os.makedirs(ipythondir, mode = 0777)
1143 os.makedirs(ipythondir, mode = 0777)
1144 for f, cont in minimal_setup.items():
1144 for f, cont in minimal_setup.items():
1145 open(ipythondir + '/' + f,'w').write(cont)
1145 open(ipythondir + '/' + f,'w').write(cont)
1146
1146
1147 return
1147 return
1148
1148
1149 if mode == 'install':
1149 if mode == 'install':
1150 try:
1150 try:
1151 shutil.copytree(rcdir,ipythondir)
1151 shutil.copytree(rcdir,ipythondir)
1152 os.chdir(ipythondir)
1152 os.chdir(ipythondir)
1153 rc_files = glb("ipythonrc*")
1153 rc_files = glb("ipythonrc*")
1154 for rc_file in rc_files:
1154 for rc_file in rc_files:
1155 os.rename(rc_file,rc_file+rc_suffix)
1155 os.rename(rc_file,rc_file+rc_suffix)
1156 except:
1156 except:
1157 warning = """
1157 warning = """
1158
1158
1159 There was a problem with the installation:
1159 There was a problem with the installation:
1160 %s
1160 %s
1161 Try to correct it or contact the developers if you think it's a bug.
1161 Try to correct it or contact the developers if you think it's a bug.
1162 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1162 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1163 warn(warning)
1163 warn(warning)
1164 wait()
1164 wait()
1165 return
1165 return
1166
1166
1167 elif mode == 'upgrade':
1167 elif mode == 'upgrade':
1168 try:
1168 try:
1169 os.chdir(ipythondir)
1169 os.chdir(ipythondir)
1170 except:
1170 except:
1171 print """
1171 print """
1172 Can not upgrade: changing to directory %s failed. Details:
1172 Can not upgrade: changing to directory %s failed. Details:
1173 %s
1173 %s
1174 """ % (ipythondir,sys.exc_info()[1])
1174 """ % (ipythondir,sys.exc_info()[1])
1175 wait()
1175 wait()
1176 return
1176 return
1177 else:
1177 else:
1178 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1178 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1179 for new_full_path in sources:
1179 for new_full_path in sources:
1180 new_filename = os.path.basename(new_full_path)
1180 new_filename = os.path.basename(new_full_path)
1181 if new_filename.startswith('ipythonrc'):
1181 if new_filename.startswith('ipythonrc'):
1182 new_filename = new_filename + rc_suffix
1182 new_filename = new_filename + rc_suffix
1183 # The config directory should only contain files, skip any
1183 # The config directory should only contain files, skip any
1184 # directories which may be there (like CVS)
1184 # directories which may be there (like CVS)
1185 if os.path.isdir(new_full_path):
1185 if os.path.isdir(new_full_path):
1186 continue
1186 continue
1187 if os.path.exists(new_filename):
1187 if os.path.exists(new_filename):
1188 old_file = new_filename+'.old'
1188 old_file = new_filename+'.old'
1189 if os.path.exists(old_file):
1189 if os.path.exists(old_file):
1190 os.remove(old_file)
1190 os.remove(old_file)
1191 os.rename(new_filename,old_file)
1191 os.rename(new_filename,old_file)
1192 shutil.copy(new_full_path,new_filename)
1192 shutil.copy(new_full_path,new_filename)
1193 else:
1193 else:
1194 raise ValueError,'unrecognized mode for install:',`mode`
1194 raise ValueError,'unrecognized mode for install:',`mode`
1195
1195
1196 # Fix line-endings to those native to each platform in the config
1196 # Fix line-endings to those native to each platform in the config
1197 # directory.
1197 # directory.
1198 try:
1198 try:
1199 os.chdir(ipythondir)
1199 os.chdir(ipythondir)
1200 except:
1200 except:
1201 print """
1201 print """
1202 Problem: changing to directory %s failed.
1202 Problem: changing to directory %s failed.
1203 Details:
1203 Details:
1204 %s
1204 %s
1205
1205
1206 Some configuration files may have incorrect line endings. This should not
1206 Some configuration files may have incorrect line endings. This should not
1207 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1207 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1208 wait()
1208 wait()
1209 else:
1209 else:
1210 for fname in glb('ipythonrc*'):
1210 for fname in glb('ipythonrc*'):
1211 try:
1211 try:
1212 native_line_ends(fname,backup=0)
1212 native_line_ends(fname,backup=0)
1213 except IOError:
1213 except IOError:
1214 pass
1214 pass
1215
1215
1216 if mode == 'install':
1216 if mode == 'install':
1217 print """
1217 print """
1218 Successful installation!
1218 Successful installation!
1219
1219
1220 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1220 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1221 IPython manual (there are both HTML and PDF versions supplied with the
1221 IPython manual (there are both HTML and PDF versions supplied with the
1222 distribution) to make sure that your system environment is properly configured
1222 distribution) to make sure that your system environment is properly configured
1223 to take advantage of IPython's features.
1223 to take advantage of IPython's features.
1224
1224
1225 Important note: the configuration system has changed! The old system is
1225 Important note: the configuration system has changed! The old system is
1226 still in place, but its setting may be partly overridden by the settings in
1226 still in place, but its setting may be partly overridden by the settings in
1227 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1227 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1228 if some of the new settings bother you.
1228 if some of the new settings bother you.
1229
1229
1230 """
1230 """
1231 else:
1231 else:
1232 print """
1232 print """
1233 Successful upgrade!
1233 Successful upgrade!
1234
1234
1235 All files in your directory:
1235 All files in your directory:
1236 %(ipythondir)s
1236 %(ipythondir)s
1237 which would have been overwritten by the upgrade were backed up with a .old
1237 which would have been overwritten by the upgrade were backed up with a .old
1238 extension. If you had made particular customizations in those files you may
1238 extension. If you had made particular customizations in those files you may
1239 want to merge them back into the new files.""" % locals()
1239 want to merge them back into the new files.""" % locals()
1240 wait()
1240 wait()
1241 os.chdir(cwd)
1241 os.chdir(cwd)
1242 # end user_setup()
1242 # end user_setup()
1243
1243
1244 def atexit_operations(self):
1244 def atexit_operations(self):
1245 """This will be executed at the time of exit.
1245 """This will be executed at the time of exit.
1246
1246
1247 Saving of persistent data should be performed here. """
1247 Saving of persistent data should be performed here. """
1248
1248
1249 #print '*** IPython exit cleanup ***' # dbg
1249 #print '*** IPython exit cleanup ***' # dbg
1250 # input history
1250 # input history
1251 self.savehist()
1251 self.savehist()
1252
1252
1253 # Cleanup all tempfiles left around
1253 # Cleanup all tempfiles left around
1254 for tfile in self.tempfiles:
1254 for tfile in self.tempfiles:
1255 try:
1255 try:
1256 os.unlink(tfile)
1256 os.unlink(tfile)
1257 except OSError:
1257 except OSError:
1258 pass
1258 pass
1259
1259
1260 self.hooks.shutdown_hook()
1260 self.hooks.shutdown_hook()
1261
1261
1262 def savehist(self):
1262 def savehist(self):
1263 """Save input history to a file (via readline library)."""
1263 """Save input history to a file (via readline library)."""
1264
1264
1265 if not self.has_readline:
1265 if not self.has_readline:
1266 return
1266 return
1267
1267
1268 try:
1268 try:
1269 self.readline.write_history_file(self.histfile)
1269 self.readline.write_history_file(self.histfile)
1270 except:
1270 except:
1271 print 'Unable to save IPython command history to file: ' + \
1271 print 'Unable to save IPython command history to file: ' + \
1272 `self.histfile`
1272 `self.histfile`
1273
1273
1274 def reloadhist(self):
1274 def reloadhist(self):
1275 """Reload the input history from disk file."""
1275 """Reload the input history from disk file."""
1276
1276
1277 if self.has_readline:
1277 if self.has_readline:
1278 try:
1278 try:
1279 self.readline.clear_history()
1279 self.readline.clear_history()
1280 self.readline.read_history_file(self.shell.histfile)
1280 self.readline.read_history_file(self.shell.histfile)
1281 except AttributeError:
1281 except AttributeError:
1282 pass
1282 pass
1283
1283
1284
1284
1285 def history_saving_wrapper(self, func):
1285 def history_saving_wrapper(self, func):
1286 """ Wrap func for readline history saving
1286 """ Wrap func for readline history saving
1287
1287
1288 Convert func into callable that saves & restores
1288 Convert func into callable that saves & restores
1289 history around the call """
1289 history around the call """
1290
1290
1291 if not self.has_readline:
1291 if not self.has_readline:
1292 return func
1292 return func
1293
1293
1294 def wrapper():
1294 def wrapper():
1295 self.savehist()
1295 self.savehist()
1296 try:
1296 try:
1297 func()
1297 func()
1298 finally:
1298 finally:
1299 readline.read_history_file(self.histfile)
1299 readline.read_history_file(self.histfile)
1300 return wrapper
1300 return wrapper
1301
1301
1302
1302
1303 def pre_readline(self):
1303 def pre_readline(self):
1304 """readline hook to be used at the start of each line.
1304 """readline hook to be used at the start of each line.
1305
1305
1306 Currently it handles auto-indent only."""
1306 Currently it handles auto-indent only."""
1307
1307
1308 #debugx('self.indent_current_nsp','pre_readline:')
1308 #debugx('self.indent_current_nsp','pre_readline:')
1309
1309
1310 if self.rl_do_indent:
1310 if self.rl_do_indent:
1311 self.readline.insert_text(self.indent_current_str())
1311 self.readline.insert_text(self.indent_current_str())
1312 if self.rl_next_input is not None:
1312 if self.rl_next_input is not None:
1313 self.readline.insert_text(self.rl_next_input)
1313 self.readline.insert_text(self.rl_next_input)
1314 self.rl_next_input = None
1314 self.rl_next_input = None
1315
1315
1316 def init_readline(self):
1316 def init_readline(self):
1317 """Command history completion/saving/reloading."""
1317 """Command history completion/saving/reloading."""
1318
1318
1319
1319
1320 import IPython.rlineimpl as readline
1320 import IPython.rlineimpl as readline
1321
1321
1322 if not readline.have_readline:
1322 if not readline.have_readline:
1323 self.has_readline = 0
1323 self.has_readline = 0
1324 self.readline = None
1324 self.readline = None
1325 # no point in bugging windows users with this every time:
1325 # no point in bugging windows users with this every time:
1326 warn('Readline services not available on this platform.')
1326 warn('Readline services not available on this platform.')
1327 else:
1327 else:
1328 sys.modules['readline'] = readline
1328 sys.modules['readline'] = readline
1329 import atexit
1329 import atexit
1330 from IPython.completer import IPCompleter
1330 from IPython.completer import IPCompleter
1331 self.Completer = IPCompleter(self,
1331 self.Completer = IPCompleter(self,
1332 self.user_ns,
1332 self.user_ns,
1333 self.user_global_ns,
1333 self.user_global_ns,
1334 self.rc.readline_omit__names,
1334 self.rc.readline_omit__names,
1335 self.alias_table)
1335 self.alias_table)
1336 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1336 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1337 self.strdispatchers['complete_command'] = sdisp
1337 self.strdispatchers['complete_command'] = sdisp
1338 self.Completer.custom_completers = sdisp
1338 self.Completer.custom_completers = sdisp
1339 # Platform-specific configuration
1339 # Platform-specific configuration
1340 if os.name == 'nt':
1340 if os.name == 'nt':
1341 self.readline_startup_hook = readline.set_pre_input_hook
1341 self.readline_startup_hook = readline.set_pre_input_hook
1342 else:
1342 else:
1343 self.readline_startup_hook = readline.set_startup_hook
1343 self.readline_startup_hook = readline.set_startup_hook
1344
1344
1345 # Load user's initrc file (readline config)
1345 # Load user's initrc file (readline config)
1346 # Or if libedit is used, load editrc.
1346 # Or if libedit is used, load editrc.
1347 inputrc_name = os.environ.get('INPUTRC')
1347 inputrc_name = os.environ.get('INPUTRC')
1348 if inputrc_name is None:
1348 if inputrc_name is None:
1349 home_dir = get_home_dir()
1349 home_dir = get_home_dir()
1350 if home_dir is not None:
1350 if home_dir is not None:
1351 inputrc_name = '.inputrc'
1351 inputrc_name = '.inputrc'
1352 if readline.uses_libedit:
1352 if readline.uses_libedit:
1353 inputrc_name = '.editrc'
1353 inputrc_name = '.editrc'
1354 inputrc_name = os.path.join(home_dir, inputrc_name)
1354 inputrc_name = os.path.join(home_dir, inputrc_name)
1355 if os.path.isfile(inputrc_name):
1355 if os.path.isfile(inputrc_name):
1356 try:
1356 try:
1357 readline.read_init_file(inputrc_name)
1357 readline.read_init_file(inputrc_name)
1358 except:
1358 except:
1359 warn('Problems reading readline initialization file <%s>'
1359 warn('Problems reading readline initialization file <%s>'
1360 % inputrc_name)
1360 % inputrc_name)
1361
1361
1362 self.has_readline = 1
1362 self.has_readline = 1
1363 self.readline = readline
1363 self.readline = readline
1364 # save this in sys so embedded copies can restore it properly
1364 # save this in sys so embedded copies can restore it properly
1365 sys.ipcompleter = self.Completer.complete
1365 sys.ipcompleter = self.Completer.complete
1366 self.set_completer()
1366 self.set_completer()
1367
1367
1368 # Configure readline according to user's prefs
1368 # Configure readline according to user's prefs
1369 # This is only done if GNU readline is being used. If libedit
1369 # This is only done if GNU readline is being used. If libedit
1370 # is being used (as on Leopard) the readline config is
1370 # is being used (as on Leopard) the readline config is
1371 # not run as the syntax for libedit is different.
1371 # not run as the syntax for libedit is different.
1372 if not readline.uses_libedit:
1372 if not readline.uses_libedit:
1373 for rlcommand in self.rc.readline_parse_and_bind:
1373 for rlcommand in self.rc.readline_parse_and_bind:
1374 readline.parse_and_bind(rlcommand)
1374 readline.parse_and_bind(rlcommand)
1375
1375
1376 # remove some chars from the delimiters list
1376 # remove some chars from the delimiters list
1377 delims = readline.get_completer_delims()
1377 delims = readline.get_completer_delims()
1378 delims = delims.translate(string._idmap,
1378 delims = delims.translate(string._idmap,
1379 self.rc.readline_remove_delims)
1379 self.rc.readline_remove_delims)
1380 readline.set_completer_delims(delims)
1380 readline.set_completer_delims(delims)
1381 # otherwise we end up with a monster history after a while:
1381 # otherwise we end up with a monster history after a while:
1382 readline.set_history_length(1000)
1382 readline.set_history_length(1000)
1383 try:
1383 try:
1384 #print '*** Reading readline history' # dbg
1384 #print '*** Reading readline history' # dbg
1385 readline.read_history_file(self.histfile)
1385 readline.read_history_file(self.histfile)
1386 except IOError:
1386 except IOError:
1387 pass # It doesn't exist yet.
1387 pass # It doesn't exist yet.
1388
1388
1389 atexit.register(self.atexit_operations)
1389 atexit.register(self.atexit_operations)
1390 del atexit
1390 del atexit
1391
1391
1392 # Configure auto-indent for all platforms
1392 # Configure auto-indent for all platforms
1393 self.set_autoindent(self.rc.autoindent)
1393 self.set_autoindent(self.rc.autoindent)
1394
1394
1395 def ask_yes_no(self,prompt,default=True):
1395 def ask_yes_no(self,prompt,default=True):
1396 if self.rc.quiet:
1396 if self.rc.quiet:
1397 return True
1397 return True
1398 return ask_yes_no(prompt,default)
1398 return ask_yes_no(prompt,default)
1399
1399
1400 def _should_recompile(self,e):
1400 def _should_recompile(self,e):
1401 """Utility routine for edit_syntax_error"""
1401 """Utility routine for edit_syntax_error"""
1402
1402
1403 if e.filename in ('<ipython console>','<input>','<string>',
1403 if e.filename in ('<ipython console>','<input>','<string>',
1404 '<console>','<BackgroundJob compilation>',
1404 '<console>','<BackgroundJob compilation>',
1405 None):
1405 None):
1406
1406
1407 return False
1407 return False
1408 try:
1408 try:
1409 if (self.rc.autoedit_syntax and
1409 if (self.rc.autoedit_syntax and
1410 not self.ask_yes_no('Return to editor to correct syntax error? '
1410 not self.ask_yes_no('Return to editor to correct syntax error? '
1411 '[Y/n] ','y')):
1411 '[Y/n] ','y')):
1412 return False
1412 return False
1413 except EOFError:
1413 except EOFError:
1414 return False
1414 return False
1415
1415
1416 def int0(x):
1416 def int0(x):
1417 try:
1417 try:
1418 return int(x)
1418 return int(x)
1419 except TypeError:
1419 except TypeError:
1420 return 0
1420 return 0
1421 # always pass integer line and offset values to editor hook
1421 # always pass integer line and offset values to editor hook
1422 self.hooks.fix_error_editor(e.filename,
1422 try:
1423 int0(e.lineno),int0(e.offset),e.msg)
1423 self.hooks.fix_error_editor(e.filename,
1424 int0(e.lineno),int0(e.offset),e.msg)
1425 except IPython.ipapi.TryNext:
1426 warn('Could not open editor')
1427 return False
1424 return True
1428 return True
1425
1429
1426 def edit_syntax_error(self):
1430 def edit_syntax_error(self):
1427 """The bottom half of the syntax error handler called in the main loop.
1431 """The bottom half of the syntax error handler called in the main loop.
1428
1432
1429 Loop until syntax error is fixed or user cancels.
1433 Loop until syntax error is fixed or user cancels.
1430 """
1434 """
1431
1435
1432 while self.SyntaxTB.last_syntax_error:
1436 while self.SyntaxTB.last_syntax_error:
1433 # copy and clear last_syntax_error
1437 # copy and clear last_syntax_error
1434 err = self.SyntaxTB.clear_err_state()
1438 err = self.SyntaxTB.clear_err_state()
1435 if not self._should_recompile(err):
1439 if not self._should_recompile(err):
1436 return
1440 return
1437 try:
1441 try:
1438 # may set last_syntax_error again if a SyntaxError is raised
1442 # may set last_syntax_error again if a SyntaxError is raised
1439 self.safe_execfile(err.filename,self.user_ns)
1443 self.safe_execfile(err.filename,self.user_ns)
1440 except:
1444 except:
1441 self.showtraceback()
1445 self.showtraceback()
1442 else:
1446 else:
1443 try:
1447 try:
1444 f = file(err.filename)
1448 f = file(err.filename)
1445 try:
1449 try:
1446 sys.displayhook(f.read())
1450 sys.displayhook(f.read())
1447 finally:
1451 finally:
1448 f.close()
1452 f.close()
1449 except:
1453 except:
1450 self.showtraceback()
1454 self.showtraceback()
1451
1455
1452 def showsyntaxerror(self, filename=None):
1456 def showsyntaxerror(self, filename=None):
1453 """Display the syntax error that just occurred.
1457 """Display the syntax error that just occurred.
1454
1458
1455 This doesn't display a stack trace because there isn't one.
1459 This doesn't display a stack trace because there isn't one.
1456
1460
1457 If a filename is given, it is stuffed in the exception instead
1461 If a filename is given, it is stuffed in the exception instead
1458 of what was there before (because Python's parser always uses
1462 of what was there before (because Python's parser always uses
1459 "<string>" when reading from a string).
1463 "<string>" when reading from a string).
1460 """
1464 """
1461 etype, value, last_traceback = sys.exc_info()
1465 etype, value, last_traceback = sys.exc_info()
1462
1466
1463 # See note about these variables in showtraceback() below
1467 # See note about these variables in showtraceback() below
1464 sys.last_type = etype
1468 sys.last_type = etype
1465 sys.last_value = value
1469 sys.last_value = value
1466 sys.last_traceback = last_traceback
1470 sys.last_traceback = last_traceback
1467
1471
1468 if filename and etype is SyntaxError:
1472 if filename and etype is SyntaxError:
1469 # Work hard to stuff the correct filename in the exception
1473 # Work hard to stuff the correct filename in the exception
1470 try:
1474 try:
1471 msg, (dummy_filename, lineno, offset, line) = value
1475 msg, (dummy_filename, lineno, offset, line) = value
1472 except:
1476 except:
1473 # Not the format we expect; leave it alone
1477 # Not the format we expect; leave it alone
1474 pass
1478 pass
1475 else:
1479 else:
1476 # Stuff in the right filename
1480 # Stuff in the right filename
1477 try:
1481 try:
1478 # Assume SyntaxError is a class exception
1482 # Assume SyntaxError is a class exception
1479 value = SyntaxError(msg, (filename, lineno, offset, line))
1483 value = SyntaxError(msg, (filename, lineno, offset, line))
1480 except:
1484 except:
1481 # If that failed, assume SyntaxError is a string
1485 # If that failed, assume SyntaxError is a string
1482 value = msg, (filename, lineno, offset, line)
1486 value = msg, (filename, lineno, offset, line)
1483 self.SyntaxTB(etype,value,[])
1487 self.SyntaxTB(etype,value,[])
1484
1488
1485 def debugger(self,force=False):
1489 def debugger(self,force=False):
1486 """Call the pydb/pdb debugger.
1490 """Call the pydb/pdb debugger.
1487
1491
1488 Keywords:
1492 Keywords:
1489
1493
1490 - force(False): by default, this routine checks the instance call_pdb
1494 - force(False): by default, this routine checks the instance call_pdb
1491 flag and does not actually invoke the debugger if the flag is false.
1495 flag and does not actually invoke the debugger if the flag is false.
1492 The 'force' option forces the debugger to activate even if the flag
1496 The 'force' option forces the debugger to activate even if the flag
1493 is false.
1497 is false.
1494 """
1498 """
1495
1499
1496 if not (force or self.call_pdb):
1500 if not (force or self.call_pdb):
1497 return
1501 return
1498
1502
1499 if not hasattr(sys,'last_traceback'):
1503 if not hasattr(sys,'last_traceback'):
1500 error('No traceback has been produced, nothing to debug.')
1504 error('No traceback has been produced, nothing to debug.')
1501 return
1505 return
1502
1506
1503 # use pydb if available
1507 # use pydb if available
1504 if Debugger.has_pydb:
1508 if Debugger.has_pydb:
1505 from pydb import pm
1509 from pydb import pm
1506 else:
1510 else:
1507 # fallback to our internal debugger
1511 # fallback to our internal debugger
1508 pm = lambda : self.InteractiveTB.debugger(force=True)
1512 pm = lambda : self.InteractiveTB.debugger(force=True)
1509 self.history_saving_wrapper(pm)()
1513 self.history_saving_wrapper(pm)()
1510
1514
1511 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1515 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1512 """Display the exception that just occurred.
1516 """Display the exception that just occurred.
1513
1517
1514 If nothing is known about the exception, this is the method which
1518 If nothing is known about the exception, this is the method which
1515 should be used throughout the code for presenting user tracebacks,
1519 should be used throughout the code for presenting user tracebacks,
1516 rather than directly invoking the InteractiveTB object.
1520 rather than directly invoking the InteractiveTB object.
1517
1521
1518 A specific showsyntaxerror() also exists, but this method can take
1522 A specific showsyntaxerror() also exists, but this method can take
1519 care of calling it if needed, so unless you are explicitly catching a
1523 care of calling it if needed, so unless you are explicitly catching a
1520 SyntaxError exception, don't try to analyze the stack manually and
1524 SyntaxError exception, don't try to analyze the stack manually and
1521 simply call this method."""
1525 simply call this method."""
1522
1526
1523
1527
1524 # Though this won't be called by syntax errors in the input line,
1528 # Though this won't be called by syntax errors in the input line,
1525 # there may be SyntaxError cases whith imported code.
1529 # there may be SyntaxError cases whith imported code.
1526
1530
1527 try:
1531 try:
1528 if exc_tuple is None:
1532 if exc_tuple is None:
1529 etype, value, tb = sys.exc_info()
1533 etype, value, tb = sys.exc_info()
1530 else:
1534 else:
1531 etype, value, tb = exc_tuple
1535 etype, value, tb = exc_tuple
1532
1536
1533 if etype is SyntaxError:
1537 if etype is SyntaxError:
1534 self.showsyntaxerror(filename)
1538 self.showsyntaxerror(filename)
1535 elif etype is IPython.ipapi.UsageError:
1539 elif etype is IPython.ipapi.UsageError:
1536 print "UsageError:", value
1540 print "UsageError:", value
1537 else:
1541 else:
1538 # WARNING: these variables are somewhat deprecated and not
1542 # WARNING: these variables are somewhat deprecated and not
1539 # necessarily safe to use in a threaded environment, but tools
1543 # necessarily safe to use in a threaded environment, but tools
1540 # like pdb depend on their existence, so let's set them. If we
1544 # like pdb depend on their existence, so let's set them. If we
1541 # find problems in the field, we'll need to revisit their use.
1545 # find problems in the field, we'll need to revisit their use.
1542 sys.last_type = etype
1546 sys.last_type = etype
1543 sys.last_value = value
1547 sys.last_value = value
1544 sys.last_traceback = tb
1548 sys.last_traceback = tb
1545
1549
1546 if etype in self.custom_exceptions:
1550 if etype in self.custom_exceptions:
1547 self.CustomTB(etype,value,tb)
1551 self.CustomTB(etype,value,tb)
1548 else:
1552 else:
1549 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1553 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1550 if self.InteractiveTB.call_pdb and self.has_readline:
1554 if self.InteractiveTB.call_pdb and self.has_readline:
1551 # pdb mucks up readline, fix it back
1555 # pdb mucks up readline, fix it back
1552 self.set_completer()
1556 self.set_completer()
1553 except KeyboardInterrupt:
1557 except KeyboardInterrupt:
1554 self.write("\nKeyboardInterrupt\n")
1558 self.write("\nKeyboardInterrupt\n")
1555
1559
1556
1560
1557
1561
1558 def mainloop(self,banner=None):
1562 def mainloop(self,banner=None):
1559 """Creates the local namespace and starts the mainloop.
1563 """Creates the local namespace and starts the mainloop.
1560
1564
1561 If an optional banner argument is given, it will override the
1565 If an optional banner argument is given, it will override the
1562 internally created default banner."""
1566 internally created default banner."""
1563
1567
1564 if self.rc.c: # Emulate Python's -c option
1568 if self.rc.c: # Emulate Python's -c option
1565 self.exec_init_cmd()
1569 self.exec_init_cmd()
1566 if banner is None:
1570 if banner is None:
1567 if not self.rc.banner:
1571 if not self.rc.banner:
1568 banner = ''
1572 banner = ''
1569 # banner is string? Use it directly!
1573 # banner is string? Use it directly!
1570 elif isinstance(self.rc.banner,basestring):
1574 elif isinstance(self.rc.banner,basestring):
1571 banner = self.rc.banner
1575 banner = self.rc.banner
1572 else:
1576 else:
1573 banner = self.BANNER+self.banner2
1577 banner = self.BANNER+self.banner2
1574
1578
1575 # if you run stuff with -c <cmd>, raw hist is not updated
1579 # if you run stuff with -c <cmd>, raw hist is not updated
1576 # ensure that it's in sync
1580 # ensure that it's in sync
1577 if len(self.input_hist) != len (self.input_hist_raw):
1581 if len(self.input_hist) != len (self.input_hist_raw):
1578 self.input_hist_raw = InputList(self.input_hist)
1582 self.input_hist_raw = InputList(self.input_hist)
1579
1583
1580 while 1:
1584 while 1:
1581 try:
1585 try:
1582 self.interact(banner)
1586 self.interact(banner)
1583 #self.interact_with_readline()
1587 #self.interact_with_readline()
1584 # XXX for testing of a readline-decoupled repl loop, call interact_with_readline above
1588 # XXX for testing of a readline-decoupled repl loop, call interact_with_readline above
1585
1589
1586 break
1590 break
1587 except KeyboardInterrupt:
1591 except KeyboardInterrupt:
1588 # this should not be necessary, but KeyboardInterrupt
1592 # this should not be necessary, but KeyboardInterrupt
1589 # handling seems rather unpredictable...
1593 # handling seems rather unpredictable...
1590 self.write("\nKeyboardInterrupt in interact()\n")
1594 self.write("\nKeyboardInterrupt in interact()\n")
1591
1595
1592 def exec_init_cmd(self):
1596 def exec_init_cmd(self):
1593 """Execute a command given at the command line.
1597 """Execute a command given at the command line.
1594
1598
1595 This emulates Python's -c option."""
1599 This emulates Python's -c option."""
1596
1600
1597 #sys.argv = ['-c']
1601 #sys.argv = ['-c']
1598 self.push(self.prefilter(self.rc.c, False))
1602 self.push(self.prefilter(self.rc.c, False))
1599 if not self.rc.interact:
1603 if not self.rc.interact:
1600 self.ask_exit()
1604 self.ask_exit()
1601
1605
1602 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1606 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1603 """Embeds IPython into a running python program.
1607 """Embeds IPython into a running python program.
1604
1608
1605 Input:
1609 Input:
1606
1610
1607 - header: An optional header message can be specified.
1611 - header: An optional header message can be specified.
1608
1612
1609 - local_ns, global_ns: working namespaces. If given as None, the
1613 - local_ns, global_ns: working namespaces. If given as None, the
1610 IPython-initialized one is updated with __main__.__dict__, so that
1614 IPython-initialized one is updated with __main__.__dict__, so that
1611 program variables become visible but user-specific configuration
1615 program variables become visible but user-specific configuration
1612 remains possible.
1616 remains possible.
1613
1617
1614 - stack_depth: specifies how many levels in the stack to go to
1618 - stack_depth: specifies how many levels in the stack to go to
1615 looking for namespaces (when local_ns and global_ns are None). This
1619 looking for namespaces (when local_ns and global_ns are None). This
1616 allows an intermediate caller to make sure that this function gets
1620 allows an intermediate caller to make sure that this function gets
1617 the namespace from the intended level in the stack. By default (0)
1621 the namespace from the intended level in the stack. By default (0)
1618 it will get its locals and globals from the immediate caller.
1622 it will get its locals and globals from the immediate caller.
1619
1623
1620 Warning: it's possible to use this in a program which is being run by
1624 Warning: it's possible to use this in a program which is being run by
1621 IPython itself (via %run), but some funny things will happen (a few
1625 IPython itself (via %run), but some funny things will happen (a few
1622 globals get overwritten). In the future this will be cleaned up, as
1626 globals get overwritten). In the future this will be cleaned up, as
1623 there is no fundamental reason why it can't work perfectly."""
1627 there is no fundamental reason why it can't work perfectly."""
1624
1628
1625 # Get locals and globals from caller
1629 # Get locals and globals from caller
1626 if local_ns is None or global_ns is None:
1630 if local_ns is None or global_ns is None:
1627 call_frame = sys._getframe(stack_depth).f_back
1631 call_frame = sys._getframe(stack_depth).f_back
1628
1632
1629 if local_ns is None:
1633 if local_ns is None:
1630 local_ns = call_frame.f_locals
1634 local_ns = call_frame.f_locals
1631 if global_ns is None:
1635 if global_ns is None:
1632 global_ns = call_frame.f_globals
1636 global_ns = call_frame.f_globals
1633
1637
1634 # Update namespaces and fire up interpreter
1638 # Update namespaces and fire up interpreter
1635
1639
1636 # The global one is easy, we can just throw it in
1640 # The global one is easy, we can just throw it in
1637 self.user_global_ns = global_ns
1641 self.user_global_ns = global_ns
1638
1642
1639 # but the user/local one is tricky: ipython needs it to store internal
1643 # but the user/local one is tricky: ipython needs it to store internal
1640 # data, but we also need the locals. We'll copy locals in the user
1644 # data, but we also need the locals. We'll copy locals in the user
1641 # one, but will track what got copied so we can delete them at exit.
1645 # one, but will track what got copied so we can delete them at exit.
1642 # This is so that a later embedded call doesn't see locals from a
1646 # This is so that a later embedded call doesn't see locals from a
1643 # previous call (which most likely existed in a separate scope).
1647 # previous call (which most likely existed in a separate scope).
1644 local_varnames = local_ns.keys()
1648 local_varnames = local_ns.keys()
1645 self.user_ns.update(local_ns)
1649 self.user_ns.update(local_ns)
1646 #self.user_ns['local_ns'] = local_ns # dbg
1650 #self.user_ns['local_ns'] = local_ns # dbg
1647
1651
1648 # Patch for global embedding to make sure that things don't overwrite
1652 # Patch for global embedding to make sure that things don't overwrite
1649 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1653 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1650 # FIXME. Test this a bit more carefully (the if.. is new)
1654 # FIXME. Test this a bit more carefully (the if.. is new)
1651 if local_ns is None and global_ns is None:
1655 if local_ns is None and global_ns is None:
1652 self.user_global_ns.update(__main__.__dict__)
1656 self.user_global_ns.update(__main__.__dict__)
1653
1657
1654 # make sure the tab-completer has the correct frame information, so it
1658 # make sure the tab-completer has the correct frame information, so it
1655 # actually completes using the frame's locals/globals
1659 # actually completes using the frame's locals/globals
1656 self.set_completer_frame()
1660 self.set_completer_frame()
1657
1661
1658 # before activating the interactive mode, we need to make sure that
1662 # before activating the interactive mode, we need to make sure that
1659 # all names in the builtin namespace needed by ipython point to
1663 # all names in the builtin namespace needed by ipython point to
1660 # ourselves, and not to other instances.
1664 # ourselves, and not to other instances.
1661 self.add_builtins()
1665 self.add_builtins()
1662
1666
1663 self.interact(header)
1667 self.interact(header)
1664
1668
1665 # now, purge out the user namespace from anything we might have added
1669 # now, purge out the user namespace from anything we might have added
1666 # from the caller's local namespace
1670 # from the caller's local namespace
1667 delvar = self.user_ns.pop
1671 delvar = self.user_ns.pop
1668 for var in local_varnames:
1672 for var in local_varnames:
1669 delvar(var,None)
1673 delvar(var,None)
1670 # and clean builtins we may have overridden
1674 # and clean builtins we may have overridden
1671 self.clean_builtins()
1675 self.clean_builtins()
1672
1676
1673 def interact_prompt(self):
1677 def interact_prompt(self):
1674 """ Print the prompt (in read-eval-print loop)
1678 """ Print the prompt (in read-eval-print loop)
1675
1679
1676 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1680 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1677 used in standard IPython flow.
1681 used in standard IPython flow.
1678 """
1682 """
1679 if self.more:
1683 if self.more:
1680 try:
1684 try:
1681 prompt = self.hooks.generate_prompt(True)
1685 prompt = self.hooks.generate_prompt(True)
1682 except:
1686 except:
1683 self.showtraceback()
1687 self.showtraceback()
1684 if self.autoindent:
1688 if self.autoindent:
1685 self.rl_do_indent = True
1689 self.rl_do_indent = True
1686
1690
1687 else:
1691 else:
1688 try:
1692 try:
1689 prompt = self.hooks.generate_prompt(False)
1693 prompt = self.hooks.generate_prompt(False)
1690 except:
1694 except:
1691 self.showtraceback()
1695 self.showtraceback()
1692 self.write(prompt)
1696 self.write(prompt)
1693
1697
1694 def interact_handle_input(self,line):
1698 def interact_handle_input(self,line):
1695 """ Handle the input line (in read-eval-print loop)
1699 """ Handle the input line (in read-eval-print loop)
1696
1700
1697 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1701 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1698 used in standard IPython flow.
1702 used in standard IPython flow.
1699 """
1703 """
1700 if line.lstrip() == line:
1704 if line.lstrip() == line:
1701 self.shadowhist.add(line.strip())
1705 self.shadowhist.add(line.strip())
1702 lineout = self.prefilter(line,self.more)
1706 lineout = self.prefilter(line,self.more)
1703
1707
1704 if line.strip():
1708 if line.strip():
1705 if self.more:
1709 if self.more:
1706 self.input_hist_raw[-1] += '%s\n' % line
1710 self.input_hist_raw[-1] += '%s\n' % line
1707 else:
1711 else:
1708 self.input_hist_raw.append('%s\n' % line)
1712 self.input_hist_raw.append('%s\n' % line)
1709
1713
1710
1714
1711 self.more = self.push(lineout)
1715 self.more = self.push(lineout)
1712 if (self.SyntaxTB.last_syntax_error and
1716 if (self.SyntaxTB.last_syntax_error and
1713 self.rc.autoedit_syntax):
1717 self.rc.autoedit_syntax):
1714 self.edit_syntax_error()
1718 self.edit_syntax_error()
1715
1719
1716 def interact_with_readline(self):
1720 def interact_with_readline(self):
1717 """ Demo of using interact_handle_input, interact_prompt
1721 """ Demo of using interact_handle_input, interact_prompt
1718
1722
1719 This is the main read-eval-print loop. If you need to implement your own (e.g. for GUI),
1723 This is the main read-eval-print loop. If you need to implement your own (e.g. for GUI),
1720 it should work like this.
1724 it should work like this.
1721 """
1725 """
1722 self.readline_startup_hook(self.pre_readline)
1726 self.readline_startup_hook(self.pre_readline)
1723 while not self.exit_now:
1727 while not self.exit_now:
1724 self.interact_prompt()
1728 self.interact_prompt()
1725 if self.more:
1729 if self.more:
1726 self.rl_do_indent = True
1730 self.rl_do_indent = True
1727 else:
1731 else:
1728 self.rl_do_indent = False
1732 self.rl_do_indent = False
1729 line = raw_input_original().decode(self.stdin_encoding)
1733 line = raw_input_original().decode(self.stdin_encoding)
1730 self.interact_handle_input(line)
1734 self.interact_handle_input(line)
1731
1735
1732
1736
1733 def interact(self, banner=None):
1737 def interact(self, banner=None):
1734 """Closely emulate the interactive Python console.
1738 """Closely emulate the interactive Python console.
1735
1739
1736 The optional banner argument specify the banner to print
1740 The optional banner argument specify the banner to print
1737 before the first interaction; by default it prints a banner
1741 before the first interaction; by default it prints a banner
1738 similar to the one printed by the real Python interpreter,
1742 similar to the one printed by the real Python interpreter,
1739 followed by the current class name in parentheses (so as not
1743 followed by the current class name in parentheses (so as not
1740 to confuse this with the real interpreter -- since it's so
1744 to confuse this with the real interpreter -- since it's so
1741 close!).
1745 close!).
1742
1746
1743 """
1747 """
1744
1748
1745 if self.exit_now:
1749 if self.exit_now:
1746 # batch run -> do not interact
1750 # batch run -> do not interact
1747 return
1751 return
1748 cprt = 'Type "copyright", "credits" or "license" for more information.'
1752 cprt = 'Type "copyright", "credits" or "license" for more information.'
1749 if banner is None:
1753 if banner is None:
1750 self.write("Python %s on %s\n%s\n(%s)\n" %
1754 self.write("Python %s on %s\n%s\n(%s)\n" %
1751 (sys.version, sys.platform, cprt,
1755 (sys.version, sys.platform, cprt,
1752 self.__class__.__name__))
1756 self.__class__.__name__))
1753 else:
1757 else:
1754 self.write(banner)
1758 self.write(banner)
1755
1759
1756 more = 0
1760 more = 0
1757
1761
1758 # Mark activity in the builtins
1762 # Mark activity in the builtins
1759 __builtin__.__dict__['__IPYTHON__active'] += 1
1763 __builtin__.__dict__['__IPYTHON__active'] += 1
1760
1764
1761 if self.has_readline:
1765 if self.has_readline:
1762 self.readline_startup_hook(self.pre_readline)
1766 self.readline_startup_hook(self.pre_readline)
1763 # exit_now is set by a call to %Exit or %Quit, through the
1767 # exit_now is set by a call to %Exit or %Quit, through the
1764 # ask_exit callback.
1768 # ask_exit callback.
1765
1769
1766 while not self.exit_now:
1770 while not self.exit_now:
1767 self.hooks.pre_prompt_hook()
1771 self.hooks.pre_prompt_hook()
1768 if more:
1772 if more:
1769 try:
1773 try:
1770 prompt = self.hooks.generate_prompt(True)
1774 prompt = self.hooks.generate_prompt(True)
1771 except:
1775 except:
1772 self.showtraceback()
1776 self.showtraceback()
1773 if self.autoindent:
1777 if self.autoindent:
1774 self.rl_do_indent = True
1778 self.rl_do_indent = True
1775
1779
1776 else:
1780 else:
1777 try:
1781 try:
1778 prompt = self.hooks.generate_prompt(False)
1782 prompt = self.hooks.generate_prompt(False)
1779 except:
1783 except:
1780 self.showtraceback()
1784 self.showtraceback()
1781 try:
1785 try:
1782 line = self.raw_input(prompt,more)
1786 line = self.raw_input(prompt,more)
1783 if self.exit_now:
1787 if self.exit_now:
1784 # quick exit on sys.std[in|out] close
1788 # quick exit on sys.std[in|out] close
1785 break
1789 break
1786 if self.autoindent:
1790 if self.autoindent:
1787 self.rl_do_indent = False
1791 self.rl_do_indent = False
1788
1792
1789 except KeyboardInterrupt:
1793 except KeyboardInterrupt:
1790 #double-guard against keyboardinterrupts during kbdint handling
1794 #double-guard against keyboardinterrupts during kbdint handling
1791 try:
1795 try:
1792 self.write('\nKeyboardInterrupt\n')
1796 self.write('\nKeyboardInterrupt\n')
1793 self.resetbuffer()
1797 self.resetbuffer()
1794 # keep cache in sync with the prompt counter:
1798 # keep cache in sync with the prompt counter:
1795 self.outputcache.prompt_count -= 1
1799 self.outputcache.prompt_count -= 1
1796
1800
1797 if self.autoindent:
1801 if self.autoindent:
1798 self.indent_current_nsp = 0
1802 self.indent_current_nsp = 0
1799 more = 0
1803 more = 0
1800 except KeyboardInterrupt:
1804 except KeyboardInterrupt:
1801 pass
1805 pass
1802 except EOFError:
1806 except EOFError:
1803 if self.autoindent:
1807 if self.autoindent:
1804 self.rl_do_indent = False
1808 self.rl_do_indent = False
1805 self.readline_startup_hook(None)
1809 self.readline_startup_hook(None)
1806 self.write('\n')
1810 self.write('\n')
1807 self.exit()
1811 self.exit()
1808 except bdb.BdbQuit:
1812 except bdb.BdbQuit:
1809 warn('The Python debugger has exited with a BdbQuit exception.\n'
1813 warn('The Python debugger has exited with a BdbQuit exception.\n'
1810 'Because of how pdb handles the stack, it is impossible\n'
1814 'Because of how pdb handles the stack, it is impossible\n'
1811 'for IPython to properly format this particular exception.\n'
1815 'for IPython to properly format this particular exception.\n'
1812 'IPython will resume normal operation.')
1816 'IPython will resume normal operation.')
1813 except:
1817 except:
1814 # exceptions here are VERY RARE, but they can be triggered
1818 # exceptions here are VERY RARE, but they can be triggered
1815 # asynchronously by signal handlers, for example.
1819 # asynchronously by signal handlers, for example.
1816 self.showtraceback()
1820 self.showtraceback()
1817 else:
1821 else:
1818 more = self.push(line)
1822 more = self.push(line)
1819 if (self.SyntaxTB.last_syntax_error and
1823 if (self.SyntaxTB.last_syntax_error and
1820 self.rc.autoedit_syntax):
1824 self.rc.autoedit_syntax):
1821 self.edit_syntax_error()
1825 self.edit_syntax_error()
1822
1826
1823 # We are off again...
1827 # We are off again...
1824 __builtin__.__dict__['__IPYTHON__active'] -= 1
1828 __builtin__.__dict__['__IPYTHON__active'] -= 1
1825
1829
1826 def excepthook(self, etype, value, tb):
1830 def excepthook(self, etype, value, tb):
1827 """One more defense for GUI apps that call sys.excepthook.
1831 """One more defense for GUI apps that call sys.excepthook.
1828
1832
1829 GUI frameworks like wxPython trap exceptions and call
1833 GUI frameworks like wxPython trap exceptions and call
1830 sys.excepthook themselves. I guess this is a feature that
1834 sys.excepthook themselves. I guess this is a feature that
1831 enables them to keep running after exceptions that would
1835 enables them to keep running after exceptions that would
1832 otherwise kill their mainloop. This is a bother for IPython
1836 otherwise kill their mainloop. This is a bother for IPython
1833 which excepts to catch all of the program exceptions with a try:
1837 which excepts to catch all of the program exceptions with a try:
1834 except: statement.
1838 except: statement.
1835
1839
1836 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1840 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1837 any app directly invokes sys.excepthook, it will look to the user like
1841 any app directly invokes sys.excepthook, it will look to the user like
1838 IPython crashed. In order to work around this, we can disable the
1842 IPython crashed. In order to work around this, we can disable the
1839 CrashHandler and replace it with this excepthook instead, which prints a
1843 CrashHandler and replace it with this excepthook instead, which prints a
1840 regular traceback using our InteractiveTB. In this fashion, apps which
1844 regular traceback using our InteractiveTB. In this fashion, apps which
1841 call sys.excepthook will generate a regular-looking exception from
1845 call sys.excepthook will generate a regular-looking exception from
1842 IPython, and the CrashHandler will only be triggered by real IPython
1846 IPython, and the CrashHandler will only be triggered by real IPython
1843 crashes.
1847 crashes.
1844
1848
1845 This hook should be used sparingly, only in places which are not likely
1849 This hook should be used sparingly, only in places which are not likely
1846 to be true IPython errors.
1850 to be true IPython errors.
1847 """
1851 """
1848 self.showtraceback((etype,value,tb),tb_offset=0)
1852 self.showtraceback((etype,value,tb),tb_offset=0)
1849
1853
1850 def expand_aliases(self,fn,rest):
1854 def expand_aliases(self,fn,rest):
1851 """ Expand multiple levels of aliases:
1855 """ Expand multiple levels of aliases:
1852
1856
1853 if:
1857 if:
1854
1858
1855 alias foo bar /tmp
1859 alias foo bar /tmp
1856 alias baz foo
1860 alias baz foo
1857
1861
1858 then:
1862 then:
1859
1863
1860 baz huhhahhei -> bar /tmp huhhahhei
1864 baz huhhahhei -> bar /tmp huhhahhei
1861
1865
1862 """
1866 """
1863 line = fn + " " + rest
1867 line = fn + " " + rest
1864
1868
1865 done = Set()
1869 done = Set()
1866 while 1:
1870 while 1:
1867 pre,fn,rest = prefilter.splitUserInput(line,
1871 pre,fn,rest = prefilter.splitUserInput(line,
1868 prefilter.shell_line_split)
1872 prefilter.shell_line_split)
1869 if fn in self.alias_table:
1873 if fn in self.alias_table:
1870 if fn in done:
1874 if fn in done:
1871 warn("Cyclic alias definition, repeated '%s'" % fn)
1875 warn("Cyclic alias definition, repeated '%s'" % fn)
1872 return ""
1876 return ""
1873 done.add(fn)
1877 done.add(fn)
1874
1878
1875 l2 = self.transform_alias(fn,rest)
1879 l2 = self.transform_alias(fn,rest)
1876 # dir -> dir
1880 # dir -> dir
1877 # print "alias",line, "->",l2 #dbg
1881 # print "alias",line, "->",l2 #dbg
1878 if l2 == line:
1882 if l2 == line:
1879 break
1883 break
1880 # ls -> ls -F should not recurse forever
1884 # ls -> ls -F should not recurse forever
1881 if l2.split(None,1)[0] == line.split(None,1)[0]:
1885 if l2.split(None,1)[0] == line.split(None,1)[0]:
1882 line = l2
1886 line = l2
1883 break
1887 break
1884
1888
1885 line=l2
1889 line=l2
1886
1890
1887
1891
1888 # print "al expand to",line #dbg
1892 # print "al expand to",line #dbg
1889 else:
1893 else:
1890 break
1894 break
1891
1895
1892 return line
1896 return line
1893
1897
1894 def transform_alias(self, alias,rest=''):
1898 def transform_alias(self, alias,rest=''):
1895 """ Transform alias to system command string.
1899 """ Transform alias to system command string.
1896 """
1900 """
1897 trg = self.alias_table[alias]
1901 trg = self.alias_table[alias]
1898
1902
1899 nargs,cmd = trg
1903 nargs,cmd = trg
1900 # print trg #dbg
1904 # print trg #dbg
1901 if ' ' in cmd and os.path.isfile(cmd):
1905 if ' ' in cmd and os.path.isfile(cmd):
1902 cmd = '"%s"' % cmd
1906 cmd = '"%s"' % cmd
1903
1907
1904 # Expand the %l special to be the user's input line
1908 # Expand the %l special to be the user's input line
1905 if cmd.find('%l') >= 0:
1909 if cmd.find('%l') >= 0:
1906 cmd = cmd.replace('%l',rest)
1910 cmd = cmd.replace('%l',rest)
1907 rest = ''
1911 rest = ''
1908 if nargs==0:
1912 if nargs==0:
1909 # Simple, argument-less aliases
1913 # Simple, argument-less aliases
1910 cmd = '%s %s' % (cmd,rest)
1914 cmd = '%s %s' % (cmd,rest)
1911 else:
1915 else:
1912 # Handle aliases with positional arguments
1916 # Handle aliases with positional arguments
1913 args = rest.split(None,nargs)
1917 args = rest.split(None,nargs)
1914 if len(args)< nargs:
1918 if len(args)< nargs:
1915 error('Alias <%s> requires %s arguments, %s given.' %
1919 error('Alias <%s> requires %s arguments, %s given.' %
1916 (alias,nargs,len(args)))
1920 (alias,nargs,len(args)))
1917 return None
1921 return None
1918 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1922 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1919 # Now call the macro, evaluating in the user's namespace
1923 # Now call the macro, evaluating in the user's namespace
1920 #print 'new command: <%r>' % cmd # dbg
1924 #print 'new command: <%r>' % cmd # dbg
1921 return cmd
1925 return cmd
1922
1926
1923 def call_alias(self,alias,rest=''):
1927 def call_alias(self,alias,rest=''):
1924 """Call an alias given its name and the rest of the line.
1928 """Call an alias given its name and the rest of the line.
1925
1929
1926 This is only used to provide backwards compatibility for users of
1930 This is only used to provide backwards compatibility for users of
1927 ipalias(), use of which is not recommended for anymore."""
1931 ipalias(), use of which is not recommended for anymore."""
1928
1932
1929 # Now call the macro, evaluating in the user's namespace
1933 # Now call the macro, evaluating in the user's namespace
1930 cmd = self.transform_alias(alias, rest)
1934 cmd = self.transform_alias(alias, rest)
1931 try:
1935 try:
1932 self.system(cmd)
1936 self.system(cmd)
1933 except:
1937 except:
1934 self.showtraceback()
1938 self.showtraceback()
1935
1939
1936 def indent_current_str(self):
1940 def indent_current_str(self):
1937 """return the current level of indentation as a string"""
1941 """return the current level of indentation as a string"""
1938 return self.indent_current_nsp * ' '
1942 return self.indent_current_nsp * ' '
1939
1943
1940 def autoindent_update(self,line):
1944 def autoindent_update(self,line):
1941 """Keep track of the indent level."""
1945 """Keep track of the indent level."""
1942
1946
1943 #debugx('line')
1947 #debugx('line')
1944 #debugx('self.indent_current_nsp')
1948 #debugx('self.indent_current_nsp')
1945 if self.autoindent:
1949 if self.autoindent:
1946 if line:
1950 if line:
1947 inisp = num_ini_spaces(line)
1951 inisp = num_ini_spaces(line)
1948 if inisp < self.indent_current_nsp:
1952 if inisp < self.indent_current_nsp:
1949 self.indent_current_nsp = inisp
1953 self.indent_current_nsp = inisp
1950
1954
1951 if line[-1] == ':':
1955 if line[-1] == ':':
1952 self.indent_current_nsp += 4
1956 self.indent_current_nsp += 4
1953 elif dedent_re.match(line):
1957 elif dedent_re.match(line):
1954 self.indent_current_nsp -= 4
1958 self.indent_current_nsp -= 4
1955 else:
1959 else:
1956 self.indent_current_nsp = 0
1960 self.indent_current_nsp = 0
1957
1961
1958 def runlines(self,lines):
1962 def runlines(self,lines):
1959 """Run a string of one or more lines of source.
1963 """Run a string of one or more lines of source.
1960
1964
1961 This method is capable of running a string containing multiple source
1965 This method is capable of running a string containing multiple source
1962 lines, as if they had been entered at the IPython prompt. Since it
1966 lines, as if they had been entered at the IPython prompt. Since it
1963 exposes IPython's processing machinery, the given strings can contain
1967 exposes IPython's processing machinery, the given strings can contain
1964 magic calls (%magic), special shell access (!cmd), etc."""
1968 magic calls (%magic), special shell access (!cmd), etc."""
1965
1969
1966 # We must start with a clean buffer, in case this is run from an
1970 # We must start with a clean buffer, in case this is run from an
1967 # interactive IPython session (via a magic, for example).
1971 # interactive IPython session (via a magic, for example).
1968 self.resetbuffer()
1972 self.resetbuffer()
1969 lines = lines.split('\n')
1973 lines = lines.split('\n')
1970 more = 0
1974 more = 0
1971
1975
1972 for line in lines:
1976 for line in lines:
1973 # skip blank lines so we don't mess up the prompt counter, but do
1977 # skip blank lines so we don't mess up the prompt counter, but do
1974 # NOT skip even a blank line if we are in a code block (more is
1978 # NOT skip even a blank line if we are in a code block (more is
1975 # true)
1979 # true)
1976
1980
1977
1981
1978 if line or more:
1982 if line or more:
1979 # push to raw history, so hist line numbers stay in sync
1983 # push to raw history, so hist line numbers stay in sync
1980 self.input_hist_raw.append("# " + line + "\n")
1984 self.input_hist_raw.append("# " + line + "\n")
1981 more = self.push(self.prefilter(line,more))
1985 more = self.push(self.prefilter(line,more))
1982 # IPython's runsource returns None if there was an error
1986 # IPython's runsource returns None if there was an error
1983 # compiling the code. This allows us to stop processing right
1987 # compiling the code. This allows us to stop processing right
1984 # away, so the user gets the error message at the right place.
1988 # away, so the user gets the error message at the right place.
1985 if more is None:
1989 if more is None:
1986 break
1990 break
1987 else:
1991 else:
1988 self.input_hist_raw.append("\n")
1992 self.input_hist_raw.append("\n")
1989 # final newline in case the input didn't have it, so that the code
1993 # final newline in case the input didn't have it, so that the code
1990 # actually does get executed
1994 # actually does get executed
1991 if more:
1995 if more:
1992 self.push('\n')
1996 self.push('\n')
1993
1997
1994 def runsource(self, source, filename='<input>', symbol='single'):
1998 def runsource(self, source, filename='<input>', symbol='single'):
1995 """Compile and run some source in the interpreter.
1999 """Compile and run some source in the interpreter.
1996
2000
1997 Arguments are as for compile_command().
2001 Arguments are as for compile_command().
1998
2002
1999 One several things can happen:
2003 One several things can happen:
2000
2004
2001 1) The input is incorrect; compile_command() raised an
2005 1) The input is incorrect; compile_command() raised an
2002 exception (SyntaxError or OverflowError). A syntax traceback
2006 exception (SyntaxError or OverflowError). A syntax traceback
2003 will be printed by calling the showsyntaxerror() method.
2007 will be printed by calling the showsyntaxerror() method.
2004
2008
2005 2) The input is incomplete, and more input is required;
2009 2) The input is incomplete, and more input is required;
2006 compile_command() returned None. Nothing happens.
2010 compile_command() returned None. Nothing happens.
2007
2011
2008 3) The input is complete; compile_command() returned a code
2012 3) The input is complete; compile_command() returned a code
2009 object. The code is executed by calling self.runcode() (which
2013 object. The code is executed by calling self.runcode() (which
2010 also handles run-time exceptions, except for SystemExit).
2014 also handles run-time exceptions, except for SystemExit).
2011
2015
2012 The return value is:
2016 The return value is:
2013
2017
2014 - True in case 2
2018 - True in case 2
2015
2019
2016 - False in the other cases, unless an exception is raised, where
2020 - False in the other cases, unless an exception is raised, where
2017 None is returned instead. This can be used by external callers to
2021 None is returned instead. This can be used by external callers to
2018 know whether to continue feeding input or not.
2022 know whether to continue feeding input or not.
2019
2023
2020 The return value can be used to decide whether to use sys.ps1 or
2024 The return value can be used to decide whether to use sys.ps1 or
2021 sys.ps2 to prompt the next line."""
2025 sys.ps2 to prompt the next line."""
2022
2026
2023 # if the source code has leading blanks, add 'if 1:\n' to it
2027 # if the source code has leading blanks, add 'if 1:\n' to it
2024 # this allows execution of indented pasted code. It is tempting
2028 # this allows execution of indented pasted code. It is tempting
2025 # to add '\n' at the end of source to run commands like ' a=1'
2029 # to add '\n' at the end of source to run commands like ' a=1'
2026 # directly, but this fails for more complicated scenarios
2030 # directly, but this fails for more complicated scenarios
2027 source=source.encode(self.stdin_encoding)
2031 source=source.encode(self.stdin_encoding)
2028 if source[:1] in [' ', '\t']:
2032 if source[:1] in [' ', '\t']:
2029 source = 'if 1:\n%s' % source
2033 source = 'if 1:\n%s' % source
2030
2034
2031 try:
2035 try:
2032 code = self.compile(source,filename,symbol)
2036 code = self.compile(source,filename,symbol)
2033 except (OverflowError, SyntaxError, ValueError, TypeError):
2037 except (OverflowError, SyntaxError, ValueError, TypeError):
2034 # Case 1
2038 # Case 1
2035 self.showsyntaxerror(filename)
2039 self.showsyntaxerror(filename)
2036 return None
2040 return None
2037
2041
2038 if code is None:
2042 if code is None:
2039 # Case 2
2043 # Case 2
2040 return True
2044 return True
2041
2045
2042 # Case 3
2046 # Case 3
2043 # We store the code object so that threaded shells and
2047 # We store the code object so that threaded shells and
2044 # custom exception handlers can access all this info if needed.
2048 # custom exception handlers can access all this info if needed.
2045 # The source corresponding to this can be obtained from the
2049 # The source corresponding to this can be obtained from the
2046 # buffer attribute as '\n'.join(self.buffer).
2050 # buffer attribute as '\n'.join(self.buffer).
2047 self.code_to_run = code
2051 self.code_to_run = code
2048 # now actually execute the code object
2052 # now actually execute the code object
2049 if self.runcode(code) == 0:
2053 if self.runcode(code) == 0:
2050 return False
2054 return False
2051 else:
2055 else:
2052 return None
2056 return None
2053
2057
2054 def runcode(self,code_obj):
2058 def runcode(self,code_obj):
2055 """Execute a code object.
2059 """Execute a code object.
2056
2060
2057 When an exception occurs, self.showtraceback() is called to display a
2061 When an exception occurs, self.showtraceback() is called to display a
2058 traceback.
2062 traceback.
2059
2063
2060 Return value: a flag indicating whether the code to be run completed
2064 Return value: a flag indicating whether the code to be run completed
2061 successfully:
2065 successfully:
2062
2066
2063 - 0: successful execution.
2067 - 0: successful execution.
2064 - 1: an error occurred.
2068 - 1: an error occurred.
2065 """
2069 """
2066
2070
2067 # Set our own excepthook in case the user code tries to call it
2071 # Set our own excepthook in case the user code tries to call it
2068 # directly, so that the IPython crash handler doesn't get triggered
2072 # directly, so that the IPython crash handler doesn't get triggered
2069 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2073 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2070
2074
2071 # we save the original sys.excepthook in the instance, in case config
2075 # we save the original sys.excepthook in the instance, in case config
2072 # code (such as magics) needs access to it.
2076 # code (such as magics) needs access to it.
2073 self.sys_excepthook = old_excepthook
2077 self.sys_excepthook = old_excepthook
2074 outflag = 1 # happens in more places, so it's easier as default
2078 outflag = 1 # happens in more places, so it's easier as default
2075 try:
2079 try:
2076 try:
2080 try:
2077 self.hooks.pre_runcode_hook()
2081 self.hooks.pre_runcode_hook()
2078 exec code_obj in self.user_global_ns, self.user_ns
2082 exec code_obj in self.user_global_ns, self.user_ns
2079 finally:
2083 finally:
2080 # Reset our crash handler in place
2084 # Reset our crash handler in place
2081 sys.excepthook = old_excepthook
2085 sys.excepthook = old_excepthook
2082 except SystemExit:
2086 except SystemExit:
2083 self.resetbuffer()
2087 self.resetbuffer()
2084 self.showtraceback()
2088 self.showtraceback()
2085 warn("Type %exit or %quit to exit IPython "
2089 warn("Type %exit or %quit to exit IPython "
2086 "(%Exit or %Quit do so unconditionally).",level=1)
2090 "(%Exit or %Quit do so unconditionally).",level=1)
2087 except self.custom_exceptions:
2091 except self.custom_exceptions:
2088 etype,value,tb = sys.exc_info()
2092 etype,value,tb = sys.exc_info()
2089 self.CustomTB(etype,value,tb)
2093 self.CustomTB(etype,value,tb)
2090 except:
2094 except:
2091 self.showtraceback()
2095 self.showtraceback()
2092 else:
2096 else:
2093 outflag = 0
2097 outflag = 0
2094 if softspace(sys.stdout, 0):
2098 if softspace(sys.stdout, 0):
2095 print
2099 print
2096 # Flush out code object which has been run (and source)
2100 # Flush out code object which has been run (and source)
2097 self.code_to_run = None
2101 self.code_to_run = None
2098 return outflag
2102 return outflag
2099
2103
2100 def push(self, line):
2104 def push(self, line):
2101 """Push a line to the interpreter.
2105 """Push a line to the interpreter.
2102
2106
2103 The line should not have a trailing newline; it may have
2107 The line should not have a trailing newline; it may have
2104 internal newlines. The line is appended to a buffer and the
2108 internal newlines. The line is appended to a buffer and the
2105 interpreter's runsource() method is called with the
2109 interpreter's runsource() method is called with the
2106 concatenated contents of the buffer as source. If this
2110 concatenated contents of the buffer as source. If this
2107 indicates that the command was executed or invalid, the buffer
2111 indicates that the command was executed or invalid, the buffer
2108 is reset; otherwise, the command is incomplete, and the buffer
2112 is reset; otherwise, the command is incomplete, and the buffer
2109 is left as it was after the line was appended. The return
2113 is left as it was after the line was appended. The return
2110 value is 1 if more input is required, 0 if the line was dealt
2114 value is 1 if more input is required, 0 if the line was dealt
2111 with in some way (this is the same as runsource()).
2115 with in some way (this is the same as runsource()).
2112 """
2116 """
2113
2117
2114 # autoindent management should be done here, and not in the
2118 # autoindent management should be done here, and not in the
2115 # interactive loop, since that one is only seen by keyboard input. We
2119 # interactive loop, since that one is only seen by keyboard input. We
2116 # need this done correctly even for code run via runlines (which uses
2120 # need this done correctly even for code run via runlines (which uses
2117 # push).
2121 # push).
2118
2122
2119 #print 'push line: <%s>' % line # dbg
2123 #print 'push line: <%s>' % line # dbg
2120 for subline in line.splitlines():
2124 for subline in line.splitlines():
2121 self.autoindent_update(subline)
2125 self.autoindent_update(subline)
2122 self.buffer.append(line)
2126 self.buffer.append(line)
2123 more = self.runsource('\n'.join(self.buffer), self.filename)
2127 more = self.runsource('\n'.join(self.buffer), self.filename)
2124 if not more:
2128 if not more:
2125 self.resetbuffer()
2129 self.resetbuffer()
2126 return more
2130 return more
2127
2131
2128 def split_user_input(self, line):
2132 def split_user_input(self, line):
2129 # This is really a hold-over to support ipapi and some extensions
2133 # This is really a hold-over to support ipapi and some extensions
2130 return prefilter.splitUserInput(line)
2134 return prefilter.splitUserInput(line)
2131
2135
2132 def resetbuffer(self):
2136 def resetbuffer(self):
2133 """Reset the input buffer."""
2137 """Reset the input buffer."""
2134 self.buffer[:] = []
2138 self.buffer[:] = []
2135
2139
2136 def raw_input(self,prompt='',continue_prompt=False):
2140 def raw_input(self,prompt='',continue_prompt=False):
2137 """Write a prompt and read a line.
2141 """Write a prompt and read a line.
2138
2142
2139 The returned line does not include the trailing newline.
2143 The returned line does not include the trailing newline.
2140 When the user enters the EOF key sequence, EOFError is raised.
2144 When the user enters the EOF key sequence, EOFError is raised.
2141
2145
2142 Optional inputs:
2146 Optional inputs:
2143
2147
2144 - prompt(''): a string to be printed to prompt the user.
2148 - prompt(''): a string to be printed to prompt the user.
2145
2149
2146 - continue_prompt(False): whether this line is the first one or a
2150 - continue_prompt(False): whether this line is the first one or a
2147 continuation in a sequence of inputs.
2151 continuation in a sequence of inputs.
2148 """
2152 """
2149
2153
2150 # Code run by the user may have modified the readline completer state.
2154 # Code run by the user may have modified the readline completer state.
2151 # We must ensure that our completer is back in place.
2155 # We must ensure that our completer is back in place.
2152 if self.has_readline:
2156 if self.has_readline:
2153 self.set_completer()
2157 self.set_completer()
2154
2158
2155 try:
2159 try:
2156 line = raw_input_original(prompt).decode(self.stdin_encoding)
2160 line = raw_input_original(prompt).decode(self.stdin_encoding)
2157 except ValueError:
2161 except ValueError:
2158 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2162 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2159 " or sys.stdout.close()!\nExiting IPython!")
2163 " or sys.stdout.close()!\nExiting IPython!")
2160 self.ask_exit()
2164 self.ask_exit()
2161 return ""
2165 return ""
2162
2166
2163 # Try to be reasonably smart about not re-indenting pasted input more
2167 # Try to be reasonably smart about not re-indenting pasted input more
2164 # than necessary. We do this by trimming out the auto-indent initial
2168 # than necessary. We do this by trimming out the auto-indent initial
2165 # spaces, if the user's actual input started itself with whitespace.
2169 # spaces, if the user's actual input started itself with whitespace.
2166 #debugx('self.buffer[-1]')
2170 #debugx('self.buffer[-1]')
2167
2171
2168 if self.autoindent:
2172 if self.autoindent:
2169 if num_ini_spaces(line) > self.indent_current_nsp:
2173 if num_ini_spaces(line) > self.indent_current_nsp:
2170 line = line[self.indent_current_nsp:]
2174 line = line[self.indent_current_nsp:]
2171 self.indent_current_nsp = 0
2175 self.indent_current_nsp = 0
2172
2176
2173 # store the unfiltered input before the user has any chance to modify
2177 # store the unfiltered input before the user has any chance to modify
2174 # it.
2178 # it.
2175 if line.strip():
2179 if line.strip():
2176 if continue_prompt:
2180 if continue_prompt:
2177 self.input_hist_raw[-1] += '%s\n' % line
2181 self.input_hist_raw[-1] += '%s\n' % line
2178 if self.has_readline: # and some config option is set?
2182 if self.has_readline: # and some config option is set?
2179 try:
2183 try:
2180 histlen = self.readline.get_current_history_length()
2184 histlen = self.readline.get_current_history_length()
2181 if histlen > 1:
2185 if histlen > 1:
2182 newhist = self.input_hist_raw[-1].rstrip()
2186 newhist = self.input_hist_raw[-1].rstrip()
2183 self.readline.remove_history_item(histlen-1)
2187 self.readline.remove_history_item(histlen-1)
2184 self.readline.replace_history_item(histlen-2,
2188 self.readline.replace_history_item(histlen-2,
2185 newhist.encode(self.stdin_encoding))
2189 newhist.encode(self.stdin_encoding))
2186 except AttributeError:
2190 except AttributeError:
2187 pass # re{move,place}_history_item are new in 2.4.
2191 pass # re{move,place}_history_item are new in 2.4.
2188 else:
2192 else:
2189 self.input_hist_raw.append('%s\n' % line)
2193 self.input_hist_raw.append('%s\n' % line)
2190 # only entries starting at first column go to shadow history
2194 # only entries starting at first column go to shadow history
2191 if line.lstrip() == line:
2195 if line.lstrip() == line:
2192 self.shadowhist.add(line.strip())
2196 self.shadowhist.add(line.strip())
2193 elif not continue_prompt:
2197 elif not continue_prompt:
2194 self.input_hist_raw.append('\n')
2198 self.input_hist_raw.append('\n')
2195 try:
2199 try:
2196 lineout = self.prefilter(line,continue_prompt)
2200 lineout = self.prefilter(line,continue_prompt)
2197 except:
2201 except:
2198 # blanket except, in case a user-defined prefilter crashes, so it
2202 # blanket except, in case a user-defined prefilter crashes, so it
2199 # can't take all of ipython with it.
2203 # can't take all of ipython with it.
2200 self.showtraceback()
2204 self.showtraceback()
2201 return ''
2205 return ''
2202 else:
2206 else:
2203 return lineout
2207 return lineout
2204
2208
2205 def _prefilter(self, line, continue_prompt):
2209 def _prefilter(self, line, continue_prompt):
2206 """Calls different preprocessors, depending on the form of line."""
2210 """Calls different preprocessors, depending on the form of line."""
2207
2211
2208 # All handlers *must* return a value, even if it's blank ('').
2212 # All handlers *must* return a value, even if it's blank ('').
2209
2213
2210 # Lines are NOT logged here. Handlers should process the line as
2214 # Lines are NOT logged here. Handlers should process the line as
2211 # needed, update the cache AND log it (so that the input cache array
2215 # needed, update the cache AND log it (so that the input cache array
2212 # stays synced).
2216 # stays synced).
2213
2217
2214 #.....................................................................
2218 #.....................................................................
2215 # Code begins
2219 # Code begins
2216
2220
2217 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2221 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2218
2222
2219 # save the line away in case we crash, so the post-mortem handler can
2223 # save the line away in case we crash, so the post-mortem handler can
2220 # record it
2224 # record it
2221 self._last_input_line = line
2225 self._last_input_line = line
2222
2226
2223 #print '***line: <%s>' % line # dbg
2227 #print '***line: <%s>' % line # dbg
2224
2228
2225 if not line:
2229 if not line:
2226 # Return immediately on purely empty lines, so that if the user
2230 # Return immediately on purely empty lines, so that if the user
2227 # previously typed some whitespace that started a continuation
2231 # previously typed some whitespace that started a continuation
2228 # prompt, he can break out of that loop with just an empty line.
2232 # prompt, he can break out of that loop with just an empty line.
2229 # This is how the default python prompt works.
2233 # This is how the default python prompt works.
2230
2234
2231 # Only return if the accumulated input buffer was just whitespace!
2235 # Only return if the accumulated input buffer was just whitespace!
2232 if ''.join(self.buffer).isspace():
2236 if ''.join(self.buffer).isspace():
2233 self.buffer[:] = []
2237 self.buffer[:] = []
2234 return ''
2238 return ''
2235
2239
2236 line_info = prefilter.LineInfo(line, continue_prompt)
2240 line_info = prefilter.LineInfo(line, continue_prompt)
2237
2241
2238 # the input history needs to track even empty lines
2242 # the input history needs to track even empty lines
2239 stripped = line.strip()
2243 stripped = line.strip()
2240
2244
2241 if not stripped:
2245 if not stripped:
2242 if not continue_prompt:
2246 if not continue_prompt:
2243 self.outputcache.prompt_count -= 1
2247 self.outputcache.prompt_count -= 1
2244 return self.handle_normal(line_info)
2248 return self.handle_normal(line_info)
2245
2249
2246 # print '***cont',continue_prompt # dbg
2250 # print '***cont',continue_prompt # dbg
2247 # special handlers are only allowed for single line statements
2251 # special handlers are only allowed for single line statements
2248 if continue_prompt and not self.rc.multi_line_specials:
2252 if continue_prompt and not self.rc.multi_line_specials:
2249 return self.handle_normal(line_info)
2253 return self.handle_normal(line_info)
2250
2254
2251
2255
2252 # See whether any pre-existing handler can take care of it
2256 # See whether any pre-existing handler can take care of it
2253 rewritten = self.hooks.input_prefilter(stripped)
2257 rewritten = self.hooks.input_prefilter(stripped)
2254 if rewritten != stripped: # ok, some prefilter did something
2258 if rewritten != stripped: # ok, some prefilter did something
2255 rewritten = line_info.pre + rewritten # add indentation
2259 rewritten = line_info.pre + rewritten # add indentation
2256 return self.handle_normal(prefilter.LineInfo(rewritten,
2260 return self.handle_normal(prefilter.LineInfo(rewritten,
2257 continue_prompt))
2261 continue_prompt))
2258
2262
2259 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2263 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2260
2264
2261 return prefilter.prefilter(line_info, self)
2265 return prefilter.prefilter(line_info, self)
2262
2266
2263
2267
2264 def _prefilter_dumb(self, line, continue_prompt):
2268 def _prefilter_dumb(self, line, continue_prompt):
2265 """simple prefilter function, for debugging"""
2269 """simple prefilter function, for debugging"""
2266 return self.handle_normal(line,continue_prompt)
2270 return self.handle_normal(line,continue_prompt)
2267
2271
2268
2272
2269 def multiline_prefilter(self, line, continue_prompt):
2273 def multiline_prefilter(self, line, continue_prompt):
2270 """ Run _prefilter for each line of input
2274 """ Run _prefilter for each line of input
2271
2275
2272 Covers cases where there are multiple lines in the user entry,
2276 Covers cases where there are multiple lines in the user entry,
2273 which is the case when the user goes back to a multiline history
2277 which is the case when the user goes back to a multiline history
2274 entry and presses enter.
2278 entry and presses enter.
2275
2279
2276 """
2280 """
2277 out = []
2281 out = []
2278 for l in line.rstrip('\n').split('\n'):
2282 for l in line.rstrip('\n').split('\n'):
2279 out.append(self._prefilter(l, continue_prompt))
2283 out.append(self._prefilter(l, continue_prompt))
2280 return '\n'.join(out)
2284 return '\n'.join(out)
2281
2285
2282 # Set the default prefilter() function (this can be user-overridden)
2286 # Set the default prefilter() function (this can be user-overridden)
2283 prefilter = multiline_prefilter
2287 prefilter = multiline_prefilter
2284
2288
2285 def handle_normal(self,line_info):
2289 def handle_normal(self,line_info):
2286 """Handle normal input lines. Use as a template for handlers."""
2290 """Handle normal input lines. Use as a template for handlers."""
2287
2291
2288 # With autoindent on, we need some way to exit the input loop, and I
2292 # With autoindent on, we need some way to exit the input loop, and I
2289 # don't want to force the user to have to backspace all the way to
2293 # don't want to force the user to have to backspace all the way to
2290 # clear the line. The rule will be in this case, that either two
2294 # clear the line. The rule will be in this case, that either two
2291 # lines of pure whitespace in a row, or a line of pure whitespace but
2295 # lines of pure whitespace in a row, or a line of pure whitespace but
2292 # of a size different to the indent level, will exit the input loop.
2296 # of a size different to the indent level, will exit the input loop.
2293 line = line_info.line
2297 line = line_info.line
2294 continue_prompt = line_info.continue_prompt
2298 continue_prompt = line_info.continue_prompt
2295
2299
2296 if (continue_prompt and self.autoindent and line.isspace() and
2300 if (continue_prompt and self.autoindent and line.isspace() and
2297 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2301 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2298 (self.buffer[-1]).isspace() )):
2302 (self.buffer[-1]).isspace() )):
2299 line = ''
2303 line = ''
2300
2304
2301 self.log(line,line,continue_prompt)
2305 self.log(line,line,continue_prompt)
2302 return line
2306 return line
2303
2307
2304 def handle_alias(self,line_info):
2308 def handle_alias(self,line_info):
2305 """Handle alias input lines. """
2309 """Handle alias input lines. """
2306 tgt = self.alias_table[line_info.iFun]
2310 tgt = self.alias_table[line_info.iFun]
2307 # print "=>",tgt #dbg
2311 # print "=>",tgt #dbg
2308 if callable(tgt):
2312 if callable(tgt):
2309 if '$' in line_info.line:
2313 if '$' in line_info.line:
2310 call_meth = '(_ip, _ip.itpl(%s))'
2314 call_meth = '(_ip, _ip.itpl(%s))'
2311 else:
2315 else:
2312 call_meth = '(_ip,%s)'
2316 call_meth = '(_ip,%s)'
2313 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2317 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2314 line_info.iFun,
2318 line_info.iFun,
2315 make_quoted_expr(line_info.line))
2319 make_quoted_expr(line_info.line))
2316 else:
2320 else:
2317 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2321 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2318
2322
2319 # pre is needed, because it carries the leading whitespace. Otherwise
2323 # pre is needed, because it carries the leading whitespace. Otherwise
2320 # aliases won't work in indented sections.
2324 # aliases won't work in indented sections.
2321 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2325 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2322 make_quoted_expr( transformed ))
2326 make_quoted_expr( transformed ))
2323
2327
2324 self.log(line_info.line,line_out,line_info.continue_prompt)
2328 self.log(line_info.line,line_out,line_info.continue_prompt)
2325 #print 'line out:',line_out # dbg
2329 #print 'line out:',line_out # dbg
2326 return line_out
2330 return line_out
2327
2331
2328 def handle_shell_escape(self, line_info):
2332 def handle_shell_escape(self, line_info):
2329 """Execute the line in a shell, empty return value"""
2333 """Execute the line in a shell, empty return value"""
2330 #print 'line in :', `line` # dbg
2334 #print 'line in :', `line` # dbg
2331 line = line_info.line
2335 line = line_info.line
2332 if line.lstrip().startswith('!!'):
2336 if line.lstrip().startswith('!!'):
2333 # rewrite LineInfo's line, iFun and theRest to properly hold the
2337 # rewrite LineInfo's line, iFun and theRest to properly hold the
2334 # call to %sx and the actual command to be executed, so
2338 # call to %sx and the actual command to be executed, so
2335 # handle_magic can work correctly. Note that this works even if
2339 # handle_magic can work correctly. Note that this works even if
2336 # the line is indented, so it handles multi_line_specials
2340 # the line is indented, so it handles multi_line_specials
2337 # properly.
2341 # properly.
2338 new_rest = line.lstrip()[2:]
2342 new_rest = line.lstrip()[2:]
2339 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2343 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2340 line_info.iFun = 'sx'
2344 line_info.iFun = 'sx'
2341 line_info.theRest = new_rest
2345 line_info.theRest = new_rest
2342 return self.handle_magic(line_info)
2346 return self.handle_magic(line_info)
2343 else:
2347 else:
2344 cmd = line.lstrip().lstrip('!')
2348 cmd = line.lstrip().lstrip('!')
2345 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2349 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2346 make_quoted_expr(cmd))
2350 make_quoted_expr(cmd))
2347 # update cache/log and return
2351 # update cache/log and return
2348 self.log(line,line_out,line_info.continue_prompt)
2352 self.log(line,line_out,line_info.continue_prompt)
2349 return line_out
2353 return line_out
2350
2354
2351 def handle_magic(self, line_info):
2355 def handle_magic(self, line_info):
2352 """Execute magic functions."""
2356 """Execute magic functions."""
2353 iFun = line_info.iFun
2357 iFun = line_info.iFun
2354 theRest = line_info.theRest
2358 theRest = line_info.theRest
2355 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2359 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2356 make_quoted_expr(iFun + " " + theRest))
2360 make_quoted_expr(iFun + " " + theRest))
2357 self.log(line_info.line,cmd,line_info.continue_prompt)
2361 self.log(line_info.line,cmd,line_info.continue_prompt)
2358 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2362 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2359 return cmd
2363 return cmd
2360
2364
2361 def handle_auto(self, line_info):
2365 def handle_auto(self, line_info):
2362 """Hande lines which can be auto-executed, quoting if requested."""
2366 """Hande lines which can be auto-executed, quoting if requested."""
2363
2367
2364 line = line_info.line
2368 line = line_info.line
2365 iFun = line_info.iFun
2369 iFun = line_info.iFun
2366 theRest = line_info.theRest
2370 theRest = line_info.theRest
2367 pre = line_info.pre
2371 pre = line_info.pre
2368 continue_prompt = line_info.continue_prompt
2372 continue_prompt = line_info.continue_prompt
2369 obj = line_info.ofind(self)['obj']
2373 obj = line_info.ofind(self)['obj']
2370
2374
2371 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2375 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2372
2376
2373 # This should only be active for single-line input!
2377 # This should only be active for single-line input!
2374 if continue_prompt:
2378 if continue_prompt:
2375 self.log(line,line,continue_prompt)
2379 self.log(line,line,continue_prompt)
2376 return line
2380 return line
2377
2381
2378 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2382 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2379 auto_rewrite = True
2383 auto_rewrite = True
2380
2384
2381 if pre == self.ESC_QUOTE:
2385 if pre == self.ESC_QUOTE:
2382 # Auto-quote splitting on whitespace
2386 # Auto-quote splitting on whitespace
2383 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2387 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2384 elif pre == self.ESC_QUOTE2:
2388 elif pre == self.ESC_QUOTE2:
2385 # Auto-quote whole string
2389 # Auto-quote whole string
2386 newcmd = '%s("%s")' % (iFun,theRest)
2390 newcmd = '%s("%s")' % (iFun,theRest)
2387 elif pre == self.ESC_PAREN:
2391 elif pre == self.ESC_PAREN:
2388 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2392 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2389 else:
2393 else:
2390 # Auto-paren.
2394 # Auto-paren.
2391 # We only apply it to argument-less calls if the autocall
2395 # We only apply it to argument-less calls if the autocall
2392 # parameter is set to 2. We only need to check that autocall is <
2396 # parameter is set to 2. We only need to check that autocall is <
2393 # 2, since this function isn't called unless it's at least 1.
2397 # 2, since this function isn't called unless it's at least 1.
2394 if not theRest and (self.rc.autocall < 2) and not force_auto:
2398 if not theRest and (self.rc.autocall < 2) and not force_auto:
2395 newcmd = '%s %s' % (iFun,theRest)
2399 newcmd = '%s %s' % (iFun,theRest)
2396 auto_rewrite = False
2400 auto_rewrite = False
2397 else:
2401 else:
2398 if not force_auto and theRest.startswith('['):
2402 if not force_auto and theRest.startswith('['):
2399 if hasattr(obj,'__getitem__'):
2403 if hasattr(obj,'__getitem__'):
2400 # Don't autocall in this case: item access for an object
2404 # Don't autocall in this case: item access for an object
2401 # which is BOTH callable and implements __getitem__.
2405 # which is BOTH callable and implements __getitem__.
2402 newcmd = '%s %s' % (iFun,theRest)
2406 newcmd = '%s %s' % (iFun,theRest)
2403 auto_rewrite = False
2407 auto_rewrite = False
2404 else:
2408 else:
2405 # if the object doesn't support [] access, go ahead and
2409 # if the object doesn't support [] access, go ahead and
2406 # autocall
2410 # autocall
2407 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2411 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2408 elif theRest.endswith(';'):
2412 elif theRest.endswith(';'):
2409 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2413 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2410 else:
2414 else:
2411 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2415 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2412
2416
2413 if auto_rewrite:
2417 if auto_rewrite:
2414 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2418 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2415
2419
2416 try:
2420 try:
2417 # plain ascii works better w/ pyreadline, on some machines, so
2421 # plain ascii works better w/ pyreadline, on some machines, so
2418 # we use it and only print uncolored rewrite if we have unicode
2422 # we use it and only print uncolored rewrite if we have unicode
2419 rw = str(rw)
2423 rw = str(rw)
2420 print >>Term.cout, rw
2424 print >>Term.cout, rw
2421 except UnicodeEncodeError:
2425 except UnicodeEncodeError:
2422 print "-------------->" + newcmd
2426 print "-------------->" + newcmd
2423
2427
2424 # log what is now valid Python, not the actual user input (without the
2428 # log what is now valid Python, not the actual user input (without the
2425 # final newline)
2429 # final newline)
2426 self.log(line,newcmd,continue_prompt)
2430 self.log(line,newcmd,continue_prompt)
2427 return newcmd
2431 return newcmd
2428
2432
2429 def handle_help(self, line_info):
2433 def handle_help(self, line_info):
2430 """Try to get some help for the object.
2434 """Try to get some help for the object.
2431
2435
2432 obj? or ?obj -> basic information.
2436 obj? or ?obj -> basic information.
2433 obj?? or ??obj -> more details.
2437 obj?? or ??obj -> more details.
2434 """
2438 """
2435
2439
2436 line = line_info.line
2440 line = line_info.line
2437 # We need to make sure that we don't process lines which would be
2441 # We need to make sure that we don't process lines which would be
2438 # otherwise valid python, such as "x=1 # what?"
2442 # otherwise valid python, such as "x=1 # what?"
2439 try:
2443 try:
2440 codeop.compile_command(line)
2444 codeop.compile_command(line)
2441 except SyntaxError:
2445 except SyntaxError:
2442 # We should only handle as help stuff which is NOT valid syntax
2446 # We should only handle as help stuff which is NOT valid syntax
2443 if line[0]==self.ESC_HELP:
2447 if line[0]==self.ESC_HELP:
2444 line = line[1:]
2448 line = line[1:]
2445 elif line[-1]==self.ESC_HELP:
2449 elif line[-1]==self.ESC_HELP:
2446 line = line[:-1]
2450 line = line[:-1]
2447 self.log(line,'#?'+line,line_info.continue_prompt)
2451 self.log(line,'#?'+line,line_info.continue_prompt)
2448 if line:
2452 if line:
2449 #print 'line:<%r>' % line # dbg
2453 #print 'line:<%r>' % line # dbg
2450 self.magic_pinfo(line)
2454 self.magic_pinfo(line)
2451 else:
2455 else:
2452 page(self.usage,screen_lines=self.rc.screen_length)
2456 page(self.usage,screen_lines=self.rc.screen_length)
2453 return '' # Empty string is needed here!
2457 return '' # Empty string is needed here!
2454 except:
2458 except:
2455 # Pass any other exceptions through to the normal handler
2459 # Pass any other exceptions through to the normal handler
2456 return self.handle_normal(line_info)
2460 return self.handle_normal(line_info)
2457 else:
2461 else:
2458 # If the code compiles ok, we should handle it normally
2462 # If the code compiles ok, we should handle it normally
2459 return self.handle_normal(line_info)
2463 return self.handle_normal(line_info)
2460
2464
2461 def getapi(self):
2465 def getapi(self):
2462 """ Get an IPApi object for this shell instance
2466 """ Get an IPApi object for this shell instance
2463
2467
2464 Getting an IPApi object is always preferable to accessing the shell
2468 Getting an IPApi object is always preferable to accessing the shell
2465 directly, but this holds true especially for extensions.
2469 directly, but this holds true especially for extensions.
2466
2470
2467 It should always be possible to implement an extension with IPApi
2471 It should always be possible to implement an extension with IPApi
2468 alone. If not, contact maintainer to request an addition.
2472 alone. If not, contact maintainer to request an addition.
2469
2473
2470 """
2474 """
2471 return self.api
2475 return self.api
2472
2476
2473 def handle_emacs(self, line_info):
2477 def handle_emacs(self, line_info):
2474 """Handle input lines marked by python-mode."""
2478 """Handle input lines marked by python-mode."""
2475
2479
2476 # Currently, nothing is done. Later more functionality can be added
2480 # Currently, nothing is done. Later more functionality can be added
2477 # here if needed.
2481 # here if needed.
2478
2482
2479 # The input cache shouldn't be updated
2483 # The input cache shouldn't be updated
2480 return line_info.line
2484 return line_info.line
2481
2485
2482
2486
2483 def mktempfile(self,data=None):
2487 def mktempfile(self,data=None):
2484 """Make a new tempfile and return its filename.
2488 """Make a new tempfile and return its filename.
2485
2489
2486 This makes a call to tempfile.mktemp, but it registers the created
2490 This makes a call to tempfile.mktemp, but it registers the created
2487 filename internally so ipython cleans it up at exit time.
2491 filename internally so ipython cleans it up at exit time.
2488
2492
2489 Optional inputs:
2493 Optional inputs:
2490
2494
2491 - data(None): if data is given, it gets written out to the temp file
2495 - data(None): if data is given, it gets written out to the temp file
2492 immediately, and the file is closed again."""
2496 immediately, and the file is closed again."""
2493
2497
2494 filename = tempfile.mktemp('.py','ipython_edit_')
2498 filename = tempfile.mktemp('.py','ipython_edit_')
2495 self.tempfiles.append(filename)
2499 self.tempfiles.append(filename)
2496
2500
2497 if data:
2501 if data:
2498 tmp_file = open(filename,'w')
2502 tmp_file = open(filename,'w')
2499 tmp_file.write(data)
2503 tmp_file.write(data)
2500 tmp_file.close()
2504 tmp_file.close()
2501 return filename
2505 return filename
2502
2506
2503 def write(self,data):
2507 def write(self,data):
2504 """Write a string to the default output"""
2508 """Write a string to the default output"""
2505 Term.cout.write(data)
2509 Term.cout.write(data)
2506
2510
2507 def write_err(self,data):
2511 def write_err(self,data):
2508 """Write a string to the default error output"""
2512 """Write a string to the default error output"""
2509 Term.cerr.write(data)
2513 Term.cerr.write(data)
2510
2514
2511 def ask_exit(self):
2515 def ask_exit(self):
2512 """ Call for exiting. Can be overiden and used as a callback. """
2516 """ Call for exiting. Can be overiden and used as a callback. """
2513 self.exit_now = True
2517 self.exit_now = True
2514
2518
2515 def exit(self):
2519 def exit(self):
2516 """Handle interactive exit.
2520 """Handle interactive exit.
2517
2521
2518 This method calls the ask_exit callback."""
2522 This method calls the ask_exit callback."""
2519
2523
2520 if self.rc.confirm_exit:
2524 if self.rc.confirm_exit:
2521 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2525 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2522 self.ask_exit()
2526 self.ask_exit()
2523 else:
2527 else:
2524 self.ask_exit()
2528 self.ask_exit()
2525
2529
2526 def safe_execfile(self,fname,*where,**kw):
2530 def safe_execfile(self,fname,*where,**kw):
2527 """A safe version of the builtin execfile().
2531 """A safe version of the builtin execfile().
2528
2532
2529 This version will never throw an exception, and knows how to handle
2533 This version will never throw an exception, and knows how to handle
2530 ipython logs as well.
2534 ipython logs as well.
2531
2535
2532 :Parameters:
2536 :Parameters:
2533 fname : string
2537 fname : string
2534 Name of the file to be executed.
2538 Name of the file to be executed.
2535
2539
2536 where : tuple
2540 where : tuple
2537 One or two namespaces, passed to execfile() as (globals,locals).
2541 One or two namespaces, passed to execfile() as (globals,locals).
2538 If only one is given, it is passed as both.
2542 If only one is given, it is passed as both.
2539
2543
2540 :Keywords:
2544 :Keywords:
2541 islog : boolean (False)
2545 islog : boolean (False)
2542
2546
2543 quiet : boolean (True)
2547 quiet : boolean (True)
2544
2548
2545 exit_ignore : boolean (False)
2549 exit_ignore : boolean (False)
2546 """
2550 """
2547
2551
2548 def syspath_cleanup():
2552 def syspath_cleanup():
2549 """Internal cleanup routine for sys.path."""
2553 """Internal cleanup routine for sys.path."""
2550 if add_dname:
2554 if add_dname:
2551 try:
2555 try:
2552 sys.path.remove(dname)
2556 sys.path.remove(dname)
2553 except ValueError:
2557 except ValueError:
2554 # For some reason the user has already removed it, ignore.
2558 # For some reason the user has already removed it, ignore.
2555 pass
2559 pass
2556
2560
2557 fname = os.path.expanduser(fname)
2561 fname = os.path.expanduser(fname)
2558
2562
2559 # Find things also in current directory. This is needed to mimic the
2563 # Find things also in current directory. This is needed to mimic the
2560 # behavior of running a script from the system command line, where
2564 # behavior of running a script from the system command line, where
2561 # Python inserts the script's directory into sys.path
2565 # Python inserts the script's directory into sys.path
2562 dname = os.path.dirname(os.path.abspath(fname))
2566 dname = os.path.dirname(os.path.abspath(fname))
2563 add_dname = False
2567 add_dname = False
2564 if dname not in sys.path:
2568 if dname not in sys.path:
2565 sys.path.insert(0,dname)
2569 sys.path.insert(0,dname)
2566 add_dname = True
2570 add_dname = True
2567
2571
2568 try:
2572 try:
2569 xfile = open(fname)
2573 xfile = open(fname)
2570 except:
2574 except:
2571 print >> Term.cerr, \
2575 print >> Term.cerr, \
2572 'Could not open file <%s> for safe execution.' % fname
2576 'Could not open file <%s> for safe execution.' % fname
2573 syspath_cleanup()
2577 syspath_cleanup()
2574 return None
2578 return None
2575
2579
2576 kw.setdefault('islog',0)
2580 kw.setdefault('islog',0)
2577 kw.setdefault('quiet',1)
2581 kw.setdefault('quiet',1)
2578 kw.setdefault('exit_ignore',0)
2582 kw.setdefault('exit_ignore',0)
2579
2583
2580 first = xfile.readline()
2584 first = xfile.readline()
2581 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2585 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2582 xfile.close()
2586 xfile.close()
2583 # line by line execution
2587 # line by line execution
2584 if first.startswith(loghead) or kw['islog']:
2588 if first.startswith(loghead) or kw['islog']:
2585 print 'Loading log file <%s> one line at a time...' % fname
2589 print 'Loading log file <%s> one line at a time...' % fname
2586 if kw['quiet']:
2590 if kw['quiet']:
2587 stdout_save = sys.stdout
2591 stdout_save = sys.stdout
2588 sys.stdout = StringIO.StringIO()
2592 sys.stdout = StringIO.StringIO()
2589 try:
2593 try:
2590 globs,locs = where[0:2]
2594 globs,locs = where[0:2]
2591 except:
2595 except:
2592 try:
2596 try:
2593 globs = locs = where[0]
2597 globs = locs = where[0]
2594 except:
2598 except:
2595 globs = locs = globals()
2599 globs = locs = globals()
2596 badblocks = []
2600 badblocks = []
2597
2601
2598 # we also need to identify indented blocks of code when replaying
2602 # we also need to identify indented blocks of code when replaying
2599 # logs and put them together before passing them to an exec
2603 # logs and put them together before passing them to an exec
2600 # statement. This takes a bit of regexp and look-ahead work in the
2604 # statement. This takes a bit of regexp and look-ahead work in the
2601 # file. It's easiest if we swallow the whole thing in memory
2605 # file. It's easiest if we swallow the whole thing in memory
2602 # first, and manually walk through the lines list moving the
2606 # first, and manually walk through the lines list moving the
2603 # counter ourselves.
2607 # counter ourselves.
2604 indent_re = re.compile('\s+\S')
2608 indent_re = re.compile('\s+\S')
2605 xfile = open(fname)
2609 xfile = open(fname)
2606 filelines = xfile.readlines()
2610 filelines = xfile.readlines()
2607 xfile.close()
2611 xfile.close()
2608 nlines = len(filelines)
2612 nlines = len(filelines)
2609 lnum = 0
2613 lnum = 0
2610 while lnum < nlines:
2614 while lnum < nlines:
2611 line = filelines[lnum]
2615 line = filelines[lnum]
2612 lnum += 1
2616 lnum += 1
2613 # don't re-insert logger status info into cache
2617 # don't re-insert logger status info into cache
2614 if line.startswith('#log#'):
2618 if line.startswith('#log#'):
2615 continue
2619 continue
2616 else:
2620 else:
2617 # build a block of code (maybe a single line) for execution
2621 # build a block of code (maybe a single line) for execution
2618 block = line
2622 block = line
2619 try:
2623 try:
2620 next = filelines[lnum] # lnum has already incremented
2624 next = filelines[lnum] # lnum has already incremented
2621 except:
2625 except:
2622 next = None
2626 next = None
2623 while next and indent_re.match(next):
2627 while next and indent_re.match(next):
2624 block += next
2628 block += next
2625 lnum += 1
2629 lnum += 1
2626 try:
2630 try:
2627 next = filelines[lnum]
2631 next = filelines[lnum]
2628 except:
2632 except:
2629 next = None
2633 next = None
2630 # now execute the block of one or more lines
2634 # now execute the block of one or more lines
2631 try:
2635 try:
2632 exec block in globs,locs
2636 exec block in globs,locs
2633 except SystemExit:
2637 except SystemExit:
2634 pass
2638 pass
2635 except:
2639 except:
2636 badblocks.append(block.rstrip())
2640 badblocks.append(block.rstrip())
2637 if kw['quiet']: # restore stdout
2641 if kw['quiet']: # restore stdout
2638 sys.stdout.close()
2642 sys.stdout.close()
2639 sys.stdout = stdout_save
2643 sys.stdout = stdout_save
2640 print 'Finished replaying log file <%s>' % fname
2644 print 'Finished replaying log file <%s>' % fname
2641 if badblocks:
2645 if badblocks:
2642 print >> sys.stderr, ('\nThe following lines/blocks in file '
2646 print >> sys.stderr, ('\nThe following lines/blocks in file '
2643 '<%s> reported errors:' % fname)
2647 '<%s> reported errors:' % fname)
2644
2648
2645 for badline in badblocks:
2649 for badline in badblocks:
2646 print >> sys.stderr, badline
2650 print >> sys.stderr, badline
2647 else: # regular file execution
2651 else: # regular file execution
2648 try:
2652 try:
2649 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2653 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2650 # Work around a bug in Python for Windows. The bug was
2654 # Work around a bug in Python for Windows. The bug was
2651 # fixed in in Python 2.5 r54159 and 54158, but that's still
2655 # fixed in in Python 2.5 r54159 and 54158, but that's still
2652 # SVN Python as of March/07. For details, see:
2656 # SVN Python as of March/07. For details, see:
2653 # http://projects.scipy.org/ipython/ipython/ticket/123
2657 # http://projects.scipy.org/ipython/ipython/ticket/123
2654 try:
2658 try:
2655 globs,locs = where[0:2]
2659 globs,locs = where[0:2]
2656 except:
2660 except:
2657 try:
2661 try:
2658 globs = locs = where[0]
2662 globs = locs = where[0]
2659 except:
2663 except:
2660 globs = locs = globals()
2664 globs = locs = globals()
2661 exec file(fname) in globs,locs
2665 exec file(fname) in globs,locs
2662 else:
2666 else:
2663 execfile(fname,*where)
2667 execfile(fname,*where)
2664 except SyntaxError:
2668 except SyntaxError:
2665 self.showsyntaxerror()
2669 self.showsyntaxerror()
2666 warn('Failure executing file: <%s>' % fname)
2670 warn('Failure executing file: <%s>' % fname)
2667 except SystemExit,status:
2671 except SystemExit,status:
2668 # Code that correctly sets the exit status flag to success (0)
2672 # Code that correctly sets the exit status flag to success (0)
2669 # shouldn't be bothered with a traceback. Note that a plain
2673 # shouldn't be bothered with a traceback. Note that a plain
2670 # sys.exit() does NOT set the message to 0 (it's empty) so that
2674 # sys.exit() does NOT set the message to 0 (it's empty) so that
2671 # will still get a traceback. Note that the structure of the
2675 # will still get a traceback. Note that the structure of the
2672 # SystemExit exception changed between Python 2.4 and 2.5, so
2676 # SystemExit exception changed between Python 2.4 and 2.5, so
2673 # the checks must be done in a version-dependent way.
2677 # the checks must be done in a version-dependent way.
2674 show = False
2678 show = False
2675
2679
2676 if sys.version_info[:2] > (2,5):
2680 if sys.version_info[:2] > (2,5):
2677 if status.message!=0 and not kw['exit_ignore']:
2681 if status.message!=0 and not kw['exit_ignore']:
2678 show = True
2682 show = True
2679 else:
2683 else:
2680 if status.code and not kw['exit_ignore']:
2684 if status.code and not kw['exit_ignore']:
2681 show = True
2685 show = True
2682 if show:
2686 if show:
2683 self.showtraceback()
2687 self.showtraceback()
2684 warn('Failure executing file: <%s>' % fname)
2688 warn('Failure executing file: <%s>' % fname)
2685 except:
2689 except:
2686 self.showtraceback()
2690 self.showtraceback()
2687 warn('Failure executing file: <%s>' % fname)
2691 warn('Failure executing file: <%s>' % fname)
2688
2692
2689 syspath_cleanup()
2693 syspath_cleanup()
2690
2694
2691 #************************* end of file <iplib.py> *****************************
2695 #************************* end of file <iplib.py> *****************************
General Comments 0
You need to be logged in to leave comments. Login now