##// END OF EJS Templates
Add %paste magic for direct pasting from the clipboard.
Robert Kern -
Show More
@@ -0,0 +1,56 b''
1 """ Utilities for accessing the platform's clipboard.
2 """
3
4 import subprocess
5 import sys
6
7 from IPython.ipapi import TryNext
8
9
10 def win32_clipboard_get():
11 """ Get the current clipboard's text on Windows.
12
13 Requires Mark Hammond's pywin32 extensions.
14 """
15 try:
16 import win32clipboard
17 except ImportError:
18 message = ("Getting text from the clipboard requires the pywin32 "
19 "extensions: http://sourceforge.net/projects/pywin32/")
20 raise TryNext(message)
21 win32clipboard.OpenClipboard()
22 text = win32clipboard.GetClipboardData(win32clipboard.CF_TEXT)
23 # FIXME: convert \r\n to \n?
24 win32clipboard.CloseClipboard()
25 return text
26
27 def osx_clipboard_get():
28 """ Get the clipboard's text on OS X.
29 """
30 p = subprocess.Popen(['pbpaste', '-Prefer', 'ascii'],
31 stdout=subprocess.PIPE)
32 text, stderr = p.communicate()
33 # Text comes in with old Mac \r line endings. Change them to \n.
34 text = text.replace('\r', '\n')
35 return text
36
37 def tkinter_clipboard_get():
38 """ Get the clipboard's text using Tkinter.
39
40 This is the default on systems that are not Windows or OS X. It may
41 interfere with other UI toolkits and should be replaced with an
42 implementation that uses that toolkit.
43 """
44 try:
45 import Tkinter
46 except ImportError:
47 message = ("Getting text from the clipboard on this platform "
48 "requires Tkinter.")
49 raise TryNext(message)
50 root = Tkinter.Tk()
51 root.withdraw()
52 text = root.clipboard_get()
53 root.destroy()
54 return text
55
56
@@ -1,3405 +1,3461 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 try:
2335 try:
2336 self.shell.hooks.editor(filename,lineno)
2336 self.shell.hooks.editor(filename,lineno)
2337 except IPython.ipapi.TryNext:
2337 except IPython.ipapi.TryNext:
2338 warn('Could not open editor')
2338 warn('Could not open editor')
2339 return
2339 return
2340
2340
2341 # XXX TODO: should this be generalized for all string vars?
2341 # XXX TODO: should this be generalized for all string vars?
2342 # For now, this is special-cased to blocks created by cpaste
2342 # For now, this is special-cased to blocks created by cpaste
2343 if args.strip() == 'pasted_block':
2343 if args.strip() == 'pasted_block':
2344 self.shell.user_ns['pasted_block'] = file_read(filename)
2344 self.shell.user_ns['pasted_block'] = file_read(filename)
2345
2345
2346 if opts.has_key('x'): # -x prevents actual execution
2346 if opts.has_key('x'): # -x prevents actual execution
2347 print
2347 print
2348 else:
2348 else:
2349 print 'done. Executing edited code...'
2349 print 'done. Executing edited code...'
2350 if opts_r:
2350 if opts_r:
2351 self.shell.runlines(file_read(filename))
2351 self.shell.runlines(file_read(filename))
2352 else:
2352 else:
2353 self.shell.safe_execfile(filename,self.shell.user_ns,
2353 self.shell.safe_execfile(filename,self.shell.user_ns,
2354 self.shell.user_ns)
2354 self.shell.user_ns)
2355
2355
2356
2356
2357 if use_temp:
2357 if use_temp:
2358 try:
2358 try:
2359 return open(filename).read()
2359 return open(filename).read()
2360 except IOError,msg:
2360 except IOError,msg:
2361 if msg.filename == filename:
2361 if msg.filename == filename:
2362 warn('File not found. Did you forget to save?')
2362 warn('File not found. Did you forget to save?')
2363 return
2363 return
2364 else:
2364 else:
2365 self.shell.showtraceback()
2365 self.shell.showtraceback()
2366
2366
2367 def magic_xmode(self,parameter_s = ''):
2367 def magic_xmode(self,parameter_s = ''):
2368 """Switch modes for the exception handlers.
2368 """Switch modes for the exception handlers.
2369
2369
2370 Valid modes: Plain, Context and Verbose.
2370 Valid modes: Plain, Context and Verbose.
2371
2371
2372 If called without arguments, acts as a toggle."""
2372 If called without arguments, acts as a toggle."""
2373
2373
2374 def xmode_switch_err(name):
2374 def xmode_switch_err(name):
2375 warn('Error changing %s exception modes.\n%s' %
2375 warn('Error changing %s exception modes.\n%s' %
2376 (name,sys.exc_info()[1]))
2376 (name,sys.exc_info()[1]))
2377
2377
2378 shell = self.shell
2378 shell = self.shell
2379 new_mode = parameter_s.strip().capitalize()
2379 new_mode = parameter_s.strip().capitalize()
2380 try:
2380 try:
2381 shell.InteractiveTB.set_mode(mode=new_mode)
2381 shell.InteractiveTB.set_mode(mode=new_mode)
2382 print 'Exception reporting mode:',shell.InteractiveTB.mode
2382 print 'Exception reporting mode:',shell.InteractiveTB.mode
2383 except:
2383 except:
2384 xmode_switch_err('user')
2384 xmode_switch_err('user')
2385
2385
2386 # threaded shells use a special handler in sys.excepthook
2386 # threaded shells use a special handler in sys.excepthook
2387 if shell.isthreaded:
2387 if shell.isthreaded:
2388 try:
2388 try:
2389 shell.sys_excepthook.set_mode(mode=new_mode)
2389 shell.sys_excepthook.set_mode(mode=new_mode)
2390 except:
2390 except:
2391 xmode_switch_err('threaded')
2391 xmode_switch_err('threaded')
2392
2392
2393 def magic_colors(self,parameter_s = ''):
2393 def magic_colors(self,parameter_s = ''):
2394 """Switch color scheme for prompts, info system and exception handlers.
2394 """Switch color scheme for prompts, info system and exception handlers.
2395
2395
2396 Currently implemented schemes: NoColor, Linux, LightBG.
2396 Currently implemented schemes: NoColor, Linux, LightBG.
2397
2397
2398 Color scheme names are not case-sensitive."""
2398 Color scheme names are not case-sensitive."""
2399
2399
2400 def color_switch_err(name):
2400 def color_switch_err(name):
2401 warn('Error changing %s color schemes.\n%s' %
2401 warn('Error changing %s color schemes.\n%s' %
2402 (name,sys.exc_info()[1]))
2402 (name,sys.exc_info()[1]))
2403
2403
2404
2404
2405 new_scheme = parameter_s.strip()
2405 new_scheme = parameter_s.strip()
2406 if not new_scheme:
2406 if not new_scheme:
2407 raise UsageError(
2407 raise UsageError(
2408 "%colors: you must specify a color scheme. See '%colors?'")
2408 "%colors: you must specify a color scheme. See '%colors?'")
2409 return
2409 return
2410 # local shortcut
2410 # local shortcut
2411 shell = self.shell
2411 shell = self.shell
2412
2412
2413 import IPython.rlineimpl as readline
2413 import IPython.rlineimpl as readline
2414
2414
2415 if not readline.have_readline and sys.platform == "win32":
2415 if not readline.have_readline and sys.platform == "win32":
2416 msg = """\
2416 msg = """\
2417 Proper color support under MS Windows requires the pyreadline library.
2417 Proper color support under MS Windows requires the pyreadline library.
2418 You can find it at:
2418 You can find it at:
2419 http://ipython.scipy.org/moin/PyReadline/Intro
2419 http://ipython.scipy.org/moin/PyReadline/Intro
2420 Gary's readline needs the ctypes module, from:
2420 Gary's readline needs the ctypes module, from:
2421 http://starship.python.net/crew/theller/ctypes
2421 http://starship.python.net/crew/theller/ctypes
2422 (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).
2423
2423
2424 Defaulting color scheme to 'NoColor'"""
2424 Defaulting color scheme to 'NoColor'"""
2425 new_scheme = 'NoColor'
2425 new_scheme = 'NoColor'
2426 warn(msg)
2426 warn(msg)
2427
2427
2428 # readline option is 0
2428 # readline option is 0
2429 if not shell.has_readline:
2429 if not shell.has_readline:
2430 new_scheme = 'NoColor'
2430 new_scheme = 'NoColor'
2431
2431
2432 # Set prompt colors
2432 # Set prompt colors
2433 try:
2433 try:
2434 shell.outputcache.set_colors(new_scheme)
2434 shell.outputcache.set_colors(new_scheme)
2435 except:
2435 except:
2436 color_switch_err('prompt')
2436 color_switch_err('prompt')
2437 else:
2437 else:
2438 shell.rc.colors = \
2438 shell.rc.colors = \
2439 shell.outputcache.color_table.active_scheme_name
2439 shell.outputcache.color_table.active_scheme_name
2440 # Set exception colors
2440 # Set exception colors
2441 try:
2441 try:
2442 shell.InteractiveTB.set_colors(scheme = new_scheme)
2442 shell.InteractiveTB.set_colors(scheme = new_scheme)
2443 shell.SyntaxTB.set_colors(scheme = new_scheme)
2443 shell.SyntaxTB.set_colors(scheme = new_scheme)
2444 except:
2444 except:
2445 color_switch_err('exception')
2445 color_switch_err('exception')
2446
2446
2447 # threaded shells use a verbose traceback in sys.excepthook
2447 # threaded shells use a verbose traceback in sys.excepthook
2448 if shell.isthreaded:
2448 if shell.isthreaded:
2449 try:
2449 try:
2450 shell.sys_excepthook.set_colors(scheme=new_scheme)
2450 shell.sys_excepthook.set_colors(scheme=new_scheme)
2451 except:
2451 except:
2452 color_switch_err('system exception handler')
2452 color_switch_err('system exception handler')
2453
2453
2454 # Set info (for 'object?') colors
2454 # Set info (for 'object?') colors
2455 if shell.rc.color_info:
2455 if shell.rc.color_info:
2456 try:
2456 try:
2457 shell.inspector.set_active_scheme(new_scheme)
2457 shell.inspector.set_active_scheme(new_scheme)
2458 except:
2458 except:
2459 color_switch_err('object inspector')
2459 color_switch_err('object inspector')
2460 else:
2460 else:
2461 shell.inspector.set_active_scheme('NoColor')
2461 shell.inspector.set_active_scheme('NoColor')
2462
2462
2463 def magic_color_info(self,parameter_s = ''):
2463 def magic_color_info(self,parameter_s = ''):
2464 """Toggle color_info.
2464 """Toggle color_info.
2465
2465
2466 The color_info configuration parameter controls whether colors are
2466 The color_info configuration parameter controls whether colors are
2467 used for displaying object details (by things like %psource, %pfile or
2467 used for displaying object details (by things like %psource, %pfile or
2468 the '?' system). This function toggles this value with each call.
2468 the '?' system). This function toggles this value with each call.
2469
2469
2470 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
2471 than more) in your system, using colored object information displays
2471 than more) in your system, using colored object information displays
2472 will not work properly. Test it and see."""
2472 will not work properly. Test it and see."""
2473
2473
2474 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2474 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2475 self.magic_colors(self.shell.rc.colors)
2475 self.magic_colors(self.shell.rc.colors)
2476 print 'Object introspection functions have now coloring:',
2476 print 'Object introspection functions have now coloring:',
2477 print ['OFF','ON'][self.shell.rc.color_info]
2477 print ['OFF','ON'][self.shell.rc.color_info]
2478
2478
2479 def magic_Pprint(self, parameter_s=''):
2479 def magic_Pprint(self, parameter_s=''):
2480 """Toggle pretty printing on/off."""
2480 """Toggle pretty printing on/off."""
2481
2481
2482 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2482 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2483 print 'Pretty printing has been turned', \
2483 print 'Pretty printing has been turned', \
2484 ['OFF','ON'][self.shell.rc.pprint]
2484 ['OFF','ON'][self.shell.rc.pprint]
2485
2485
2486 def magic_exit(self, parameter_s=''):
2486 def magic_exit(self, parameter_s=''):
2487 """Exit IPython, confirming if configured to do so.
2487 """Exit IPython, confirming if configured to do so.
2488
2488
2489 You can configure whether IPython asks for confirmation upon exit by
2489 You can configure whether IPython asks for confirmation upon exit by
2490 setting the confirm_exit flag in the ipythonrc file."""
2490 setting the confirm_exit flag in the ipythonrc file."""
2491
2491
2492 self.shell.exit()
2492 self.shell.exit()
2493
2493
2494 def magic_quit(self, parameter_s=''):
2494 def magic_quit(self, parameter_s=''):
2495 """Exit IPython, confirming if configured to do so (like %exit)"""
2495 """Exit IPython, confirming if configured to do so (like %exit)"""
2496
2496
2497 self.shell.exit()
2497 self.shell.exit()
2498
2498
2499 def magic_Exit(self, parameter_s=''):
2499 def magic_Exit(self, parameter_s=''):
2500 """Exit IPython without confirmation."""
2500 """Exit IPython without confirmation."""
2501
2501
2502 self.shell.ask_exit()
2502 self.shell.ask_exit()
2503
2503
2504 #......................................................................
2504 #......................................................................
2505 # Functions to implement unix shell-type things
2505 # Functions to implement unix shell-type things
2506
2506
2507 @testdec.skip_doctest
2507 @testdec.skip_doctest
2508 def magic_alias(self, parameter_s = ''):
2508 def magic_alias(self, parameter_s = ''):
2509 """Define an alias for a system command.
2509 """Define an alias for a system command.
2510
2510
2511 '%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'
2512
2512
2513 Then, typing 'alias_name params' will execute the system command 'cmd
2513 Then, typing 'alias_name params' will execute the system command 'cmd
2514 params' (from your underlying operating system).
2514 params' (from your underlying operating system).
2515
2515
2516 Aliases have lower precedence than magic functions and Python normal
2516 Aliases have lower precedence than magic functions and Python normal
2517 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
2518 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.
2519
2519
2520 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
2521 whole line when the alias is called. For example:
2521 whole line when the alias is called. For example:
2522
2522
2523 In [2]: alias all echo "Input in brackets: <%l>"
2523 In [2]: alias all echo "Input in brackets: <%l>"
2524 In [3]: all hello world
2524 In [3]: all hello world
2525 Input in brackets: <hello world>
2525 Input in brackets: <hello world>
2526
2526
2527 You can also define aliases with parameters using %s specifiers (one
2527 You can also define aliases with parameters using %s specifiers (one
2528 per parameter):
2528 per parameter):
2529
2529
2530 In [1]: alias parts echo first %s second %s
2530 In [1]: alias parts echo first %s second %s
2531 In [2]: %parts A B
2531 In [2]: %parts A B
2532 first A second B
2532 first A second B
2533 In [3]: %parts A
2533 In [3]: %parts A
2534 Incorrect number of arguments: 2 expected.
2534 Incorrect number of arguments: 2 expected.
2535 parts is an alias to: 'echo first %s second %s'
2535 parts is an alias to: 'echo first %s second %s'
2536
2536
2537 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
2538 the other in your aliases.
2538 the other in your aliases.
2539
2539
2540 Aliases expand Python variables just like system calls using ! or !!
2540 Aliases expand Python variables just like system calls using ! or !!
2541 do: all expressions prefixed with '$' get expanded. For details of
2541 do: all expressions prefixed with '$' get expanded. For details of
2542 the semantic rules, see PEP-215:
2542 the semantic rules, see PEP-215:
2543 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
2544 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
2545 variable, an extra $ is necessary to prevent its expansion by IPython:
2545 variable, an extra $ is necessary to prevent its expansion by IPython:
2546
2546
2547 In [6]: alias show echo
2547 In [6]: alias show echo
2548 In [7]: PATH='A Python string'
2548 In [7]: PATH='A Python string'
2549 In [8]: show $PATH
2549 In [8]: show $PATH
2550 A Python string
2550 A Python string
2551 In [9]: show $$PATH
2551 In [9]: show $$PATH
2552 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2552 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2553
2553
2554 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
2555 and %rehashx functions, which automatically create aliases for the
2555 and %rehashx functions, which automatically create aliases for the
2556 contents of your $PATH.
2556 contents of your $PATH.
2557
2557
2558 If called with no parameters, %alias prints the current alias table."""
2558 If called with no parameters, %alias prints the current alias table."""
2559
2559
2560 par = parameter_s.strip()
2560 par = parameter_s.strip()
2561 if not par:
2561 if not par:
2562 stored = self.db.get('stored_aliases', {} )
2562 stored = self.db.get('stored_aliases', {} )
2563 atab = self.shell.alias_table
2563 atab = self.shell.alias_table
2564 aliases = atab.keys()
2564 aliases = atab.keys()
2565 aliases.sort()
2565 aliases.sort()
2566 res = []
2566 res = []
2567 showlast = []
2567 showlast = []
2568 for alias in aliases:
2568 for alias in aliases:
2569 special = False
2569 special = False
2570 try:
2570 try:
2571 tgt = atab[alias][1]
2571 tgt = atab[alias][1]
2572 except (TypeError, AttributeError):
2572 except (TypeError, AttributeError):
2573 # unsubscriptable? probably a callable
2573 # unsubscriptable? probably a callable
2574 tgt = atab[alias]
2574 tgt = atab[alias]
2575 special = True
2575 special = True
2576 # 'interesting' aliases
2576 # 'interesting' aliases
2577 if (alias in stored or
2577 if (alias in stored or
2578 special or
2578 special or
2579 alias.lower() != os.path.splitext(tgt)[0].lower() or
2579 alias.lower() != os.path.splitext(tgt)[0].lower() or
2580 ' ' in tgt):
2580 ' ' in tgt):
2581 showlast.append((alias, tgt))
2581 showlast.append((alias, tgt))
2582 else:
2582 else:
2583 res.append((alias, tgt ))
2583 res.append((alias, tgt ))
2584
2584
2585 # show most interesting aliases last
2585 # show most interesting aliases last
2586 res.extend(showlast)
2586 res.extend(showlast)
2587 print "Total number of aliases:",len(aliases)
2587 print "Total number of aliases:",len(aliases)
2588 return res
2588 return res
2589 try:
2589 try:
2590 alias,cmd = par.split(None,1)
2590 alias,cmd = par.split(None,1)
2591 except:
2591 except:
2592 print OInspect.getdoc(self.magic_alias)
2592 print OInspect.getdoc(self.magic_alias)
2593 else:
2593 else:
2594 nargs = cmd.count('%s')
2594 nargs = cmd.count('%s')
2595 if nargs>0 and cmd.find('%l')>=0:
2595 if nargs>0 and cmd.find('%l')>=0:
2596 error('The %s and %l specifiers are mutually exclusive '
2596 error('The %s and %l specifiers are mutually exclusive '
2597 'in alias definitions.')
2597 'in alias definitions.')
2598 else: # all looks OK
2598 else: # all looks OK
2599 self.shell.alias_table[alias] = (nargs,cmd)
2599 self.shell.alias_table[alias] = (nargs,cmd)
2600 self.shell.alias_table_validate(verbose=0)
2600 self.shell.alias_table_validate(verbose=0)
2601 # end magic_alias
2601 # end magic_alias
2602
2602
2603 def magic_unalias(self, parameter_s = ''):
2603 def magic_unalias(self, parameter_s = ''):
2604 """Remove an alias"""
2604 """Remove an alias"""
2605
2605
2606 aname = parameter_s.strip()
2606 aname = parameter_s.strip()
2607 if aname in self.shell.alias_table:
2607 if aname in self.shell.alias_table:
2608 del self.shell.alias_table[aname]
2608 del self.shell.alias_table[aname]
2609 stored = self.db.get('stored_aliases', {} )
2609 stored = self.db.get('stored_aliases', {} )
2610 if aname in stored:
2610 if aname in stored:
2611 print "Removing %stored alias",aname
2611 print "Removing %stored alias",aname
2612 del stored[aname]
2612 del stored[aname]
2613 self.db['stored_aliases'] = stored
2613 self.db['stored_aliases'] = stored
2614
2614
2615
2615
2616 def magic_rehashx(self, parameter_s = ''):
2616 def magic_rehashx(self, parameter_s = ''):
2617 """Update the alias table with all executable files in $PATH.
2617 """Update the alias table with all executable files in $PATH.
2618
2618
2619 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
2620 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.
2621
2621
2622 Under Windows, it checks executability as a match agains a
2622 Under Windows, it checks executability as a match agains a
2623 '|'-separated string of extensions, stored in the IPython config
2623 '|'-separated string of extensions, stored in the IPython config
2624 variable win_exec_ext. This defaults to 'exe|com|bat'.
2624 variable win_exec_ext. This defaults to 'exe|com|bat'.
2625
2625
2626 This function also resets the root module cache of module completer,
2626 This function also resets the root module cache of module completer,
2627 used on slow filesystems.
2627 used on slow filesystems.
2628 """
2628 """
2629
2629
2630
2630
2631 ip = self.api
2631 ip = self.api
2632
2632
2633 # for the benefit of module completer in ipy_completers.py
2633 # for the benefit of module completer in ipy_completers.py
2634 del ip.db['rootmodules']
2634 del ip.db['rootmodules']
2635
2635
2636 path = [os.path.abspath(os.path.expanduser(p)) for p in
2636 path = [os.path.abspath(os.path.expanduser(p)) for p in
2637 os.environ.get('PATH','').split(os.pathsep)]
2637 os.environ.get('PATH','').split(os.pathsep)]
2638 path = filter(os.path.isdir,path)
2638 path = filter(os.path.isdir,path)
2639
2639
2640 alias_table = self.shell.alias_table
2640 alias_table = self.shell.alias_table
2641 syscmdlist = []
2641 syscmdlist = []
2642 if os.name == 'posix':
2642 if os.name == 'posix':
2643 isexec = lambda fname:os.path.isfile(fname) and \
2643 isexec = lambda fname:os.path.isfile(fname) and \
2644 os.access(fname,os.X_OK)
2644 os.access(fname,os.X_OK)
2645 else:
2645 else:
2646
2646
2647 try:
2647 try:
2648 winext = os.environ['pathext'].replace(';','|').replace('.','')
2648 winext = os.environ['pathext'].replace(';','|').replace('.','')
2649 except KeyError:
2649 except KeyError:
2650 winext = 'exe|com|bat|py'
2650 winext = 'exe|com|bat|py'
2651 if 'py' not in winext:
2651 if 'py' not in winext:
2652 winext += '|py'
2652 winext += '|py'
2653 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2653 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2654 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2654 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2655 savedir = os.getcwd()
2655 savedir = os.getcwd()
2656 try:
2656 try:
2657 # 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
2658 # the innermost part
2658 # the innermost part
2659 if os.name == 'posix':
2659 if os.name == 'posix':
2660 for pdir in path:
2660 for pdir in path:
2661 os.chdir(pdir)
2661 os.chdir(pdir)
2662 for ff in os.listdir(pdir):
2662 for ff in os.listdir(pdir):
2663 if isexec(ff) and ff not in self.shell.no_alias:
2663 if isexec(ff) and ff not in self.shell.no_alias:
2664 # each entry in the alias table must be (N,name),
2664 # each entry in the alias table must be (N,name),
2665 # where N is the number of positional arguments of the
2665 # where N is the number of positional arguments of the
2666 # alias.
2666 # alias.
2667 # Dots will be removed from alias names, since ipython
2667 # Dots will be removed from alias names, since ipython
2668 # assumes names with dots to be python code
2668 # assumes names with dots to be python code
2669 alias_table[ff.replace('.','')] = (0,ff)
2669 alias_table[ff.replace('.','')] = (0,ff)
2670 syscmdlist.append(ff)
2670 syscmdlist.append(ff)
2671 else:
2671 else:
2672 for pdir in path:
2672 for pdir in path:
2673 os.chdir(pdir)
2673 os.chdir(pdir)
2674 for ff in os.listdir(pdir):
2674 for ff in os.listdir(pdir):
2675 base, ext = os.path.splitext(ff)
2675 base, ext = os.path.splitext(ff)
2676 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:
2677 if ext.lower() == '.exe':
2677 if ext.lower() == '.exe':
2678 ff = base
2678 ff = base
2679 alias_table[base.lower().replace('.','')] = (0,ff)
2679 alias_table[base.lower().replace('.','')] = (0,ff)
2680 syscmdlist.append(ff)
2680 syscmdlist.append(ff)
2681 # Make sure the alias table doesn't contain keywords or builtins
2681 # Make sure the alias table doesn't contain keywords or builtins
2682 self.shell.alias_table_validate()
2682 self.shell.alias_table_validate()
2683 # 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
2684 # modified aliases since %rehashx will probably clobber them
2684 # modified aliases since %rehashx will probably clobber them
2685
2685
2686 # no, we don't want them. if %rehashx clobbers them, good,
2686 # no, we don't want them. if %rehashx clobbers them, good,
2687 # we'll probably get better versions
2687 # we'll probably get better versions
2688 # self.shell.init_auto_alias()
2688 # self.shell.init_auto_alias()
2689 db = ip.db
2689 db = ip.db
2690 db['syscmdlist'] = syscmdlist
2690 db['syscmdlist'] = syscmdlist
2691 finally:
2691 finally:
2692 os.chdir(savedir)
2692 os.chdir(savedir)
2693
2693
2694 def magic_pwd(self, parameter_s = ''):
2694 def magic_pwd(self, parameter_s = ''):
2695 """Return the current working directory path."""
2695 """Return the current working directory path."""
2696 return os.getcwd()
2696 return os.getcwd()
2697
2697
2698 def magic_cd(self, parameter_s=''):
2698 def magic_cd(self, parameter_s=''):
2699 """Change the current working directory.
2699 """Change the current working directory.
2700
2700
2701 This command automatically maintains an internal list of directories
2701 This command automatically maintains an internal list of directories
2702 you visit during your IPython session, in the variable _dh. The
2702 you visit during your IPython session, in the variable _dh. The
2703 command %dhist shows this history nicely formatted. You can also
2703 command %dhist shows this history nicely formatted. You can also
2704 do 'cd -<tab>' to see directory history conveniently.
2704 do 'cd -<tab>' to see directory history conveniently.
2705
2705
2706 Usage:
2706 Usage:
2707
2707
2708 cd 'dir': changes to directory 'dir'.
2708 cd 'dir': changes to directory 'dir'.
2709
2709
2710 cd -: changes to the last visited directory.
2710 cd -: changes to the last visited directory.
2711
2711
2712 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.
2713
2713
2714 cd --foo: change to directory that matches 'foo' in history
2714 cd --foo: change to directory that matches 'foo' in history
2715
2715
2716 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2716 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2717 (note: cd <bookmark_name> is enough if there is no
2717 (note: cd <bookmark_name> is enough if there is no
2718 directory <bookmark_name>, but a bookmark with the name exists.)
2718 directory <bookmark_name>, but a bookmark with the name exists.)
2719 'cd -b <tab>' allows you to tab-complete bookmark names.
2719 'cd -b <tab>' allows you to tab-complete bookmark names.
2720
2720
2721 Options:
2721 Options:
2722
2722
2723 -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
2724 executed. By default IPython's cd command does print this directory,
2724 executed. By default IPython's cd command does print this directory,
2725 since the default prompts do not display path information.
2725 since the default prompts do not display path information.
2726
2726
2727 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
2728 !command runs is immediately discarded after executing 'command'."""
2728 !command runs is immediately discarded after executing 'command'."""
2729
2729
2730 parameter_s = parameter_s.strip()
2730 parameter_s = parameter_s.strip()
2731 #bkms = self.shell.persist.get("bookmarks",{})
2731 #bkms = self.shell.persist.get("bookmarks",{})
2732
2732
2733 oldcwd = os.getcwd()
2733 oldcwd = os.getcwd()
2734 numcd = re.match(r'(-)(\d+)$',parameter_s)
2734 numcd = re.match(r'(-)(\d+)$',parameter_s)
2735 # jump in directory history by number
2735 # jump in directory history by number
2736 if numcd:
2736 if numcd:
2737 nn = int(numcd.group(2))
2737 nn = int(numcd.group(2))
2738 try:
2738 try:
2739 ps = self.shell.user_ns['_dh'][nn]
2739 ps = self.shell.user_ns['_dh'][nn]
2740 except IndexError:
2740 except IndexError:
2741 print 'The requested directory does not exist in history.'
2741 print 'The requested directory does not exist in history.'
2742 return
2742 return
2743 else:
2743 else:
2744 opts = {}
2744 opts = {}
2745 elif parameter_s.startswith('--'):
2745 elif parameter_s.startswith('--'):
2746 ps = None
2746 ps = None
2747 fallback = None
2747 fallback = None
2748 pat = parameter_s[2:]
2748 pat = parameter_s[2:]
2749 dh = self.shell.user_ns['_dh']
2749 dh = self.shell.user_ns['_dh']
2750 # first search only by basename (last component)
2750 # first search only by basename (last component)
2751 for ent in reversed(dh):
2751 for ent in reversed(dh):
2752 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):
2753 ps = ent
2753 ps = ent
2754 break
2754 break
2755
2755
2756 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):
2757 fallback = ent
2757 fallback = ent
2758
2758
2759 # 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
2760 if ps is None:
2760 if ps is None:
2761 ps = fallback
2761 ps = fallback
2762
2762
2763 if ps is None:
2763 if ps is None:
2764 print "No matching entry in directory history"
2764 print "No matching entry in directory history"
2765 return
2765 return
2766 else:
2766 else:
2767 opts = {}
2767 opts = {}
2768
2768
2769
2769
2770 else:
2770 else:
2771 #turn all non-space-escaping backslashes to slashes,
2771 #turn all non-space-escaping backslashes to slashes,
2772 # for c:\windows\directory\names\
2772 # for c:\windows\directory\names\
2773 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2773 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2774 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2774 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2775 # jump to previous
2775 # jump to previous
2776 if ps == '-':
2776 if ps == '-':
2777 try:
2777 try:
2778 ps = self.shell.user_ns['_dh'][-2]
2778 ps = self.shell.user_ns['_dh'][-2]
2779 except IndexError:
2779 except IndexError:
2780 raise UsageError('%cd -: No previous directory to change to.')
2780 raise UsageError('%cd -: No previous directory to change to.')
2781 # jump to bookmark if needed
2781 # jump to bookmark if needed
2782 else:
2782 else:
2783 if not os.path.isdir(ps) or opts.has_key('b'):
2783 if not os.path.isdir(ps) or opts.has_key('b'):
2784 bkms = self.db.get('bookmarks', {})
2784 bkms = self.db.get('bookmarks', {})
2785
2785
2786 if bkms.has_key(ps):
2786 if bkms.has_key(ps):
2787 target = bkms[ps]
2787 target = bkms[ps]
2788 print '(bookmark:%s) -> %s' % (ps,target)
2788 print '(bookmark:%s) -> %s' % (ps,target)
2789 ps = target
2789 ps = target
2790 else:
2790 else:
2791 if opts.has_key('b'):
2791 if opts.has_key('b'):
2792 raise UsageError("Bookmark '%s' not found. "
2792 raise UsageError("Bookmark '%s' not found. "
2793 "Use '%%bookmark -l' to see your bookmarks." % ps)
2793 "Use '%%bookmark -l' to see your bookmarks." % ps)
2794
2794
2795 # at this point ps should point to the target dir
2795 # at this point ps should point to the target dir
2796 if ps:
2796 if ps:
2797 try:
2797 try:
2798 os.chdir(os.path.expanduser(ps))
2798 os.chdir(os.path.expanduser(ps))
2799 if self.shell.rc.term_title:
2799 if self.shell.rc.term_title:
2800 #print 'set term title:',self.shell.rc.term_title # dbg
2800 #print 'set term title:',self.shell.rc.term_title # dbg
2801 platutils.set_term_title('IPy ' + abbrev_cwd())
2801 platutils.set_term_title('IPy ' + abbrev_cwd())
2802 except OSError:
2802 except OSError:
2803 print sys.exc_info()[1]
2803 print sys.exc_info()[1]
2804 else:
2804 else:
2805 cwd = os.getcwd()
2805 cwd = os.getcwd()
2806 dhist = self.shell.user_ns['_dh']
2806 dhist = self.shell.user_ns['_dh']
2807 if oldcwd != cwd:
2807 if oldcwd != cwd:
2808 dhist.append(cwd)
2808 dhist.append(cwd)
2809 self.db['dhist'] = compress_dhist(dhist)[-100:]
2809 self.db['dhist'] = compress_dhist(dhist)[-100:]
2810
2810
2811 else:
2811 else:
2812 os.chdir(self.shell.home_dir)
2812 os.chdir(self.shell.home_dir)
2813 if self.shell.rc.term_title:
2813 if self.shell.rc.term_title:
2814 platutils.set_term_title("IPy ~")
2814 platutils.set_term_title("IPy ~")
2815 cwd = os.getcwd()
2815 cwd = os.getcwd()
2816 dhist = self.shell.user_ns['_dh']
2816 dhist = self.shell.user_ns['_dh']
2817
2817
2818 if oldcwd != cwd:
2818 if oldcwd != cwd:
2819 dhist.append(cwd)
2819 dhist.append(cwd)
2820 self.db['dhist'] = compress_dhist(dhist)[-100:]
2820 self.db['dhist'] = compress_dhist(dhist)[-100:]
2821 if not 'q' in opts and self.shell.user_ns['_dh']:
2821 if not 'q' in opts and self.shell.user_ns['_dh']:
2822 print self.shell.user_ns['_dh'][-1]
2822 print self.shell.user_ns['_dh'][-1]
2823
2823
2824
2824
2825 def magic_env(self, parameter_s=''):
2825 def magic_env(self, parameter_s=''):
2826 """List environment variables."""
2826 """List environment variables."""
2827
2827
2828 return os.environ.data
2828 return os.environ.data
2829
2829
2830 def magic_pushd(self, parameter_s=''):
2830 def magic_pushd(self, parameter_s=''):
2831 """Place the current dir on stack and change directory.
2831 """Place the current dir on stack and change directory.
2832
2832
2833 Usage:\\
2833 Usage:\\
2834 %pushd ['dirname']
2834 %pushd ['dirname']
2835 """
2835 """
2836
2836
2837 dir_s = self.shell.dir_stack
2837 dir_s = self.shell.dir_stack
2838 tgt = os.path.expanduser(parameter_s)
2838 tgt = os.path.expanduser(parameter_s)
2839 cwd = os.getcwd().replace(self.home_dir,'~')
2839 cwd = os.getcwd().replace(self.home_dir,'~')
2840 if tgt:
2840 if tgt:
2841 self.magic_cd(parameter_s)
2841 self.magic_cd(parameter_s)
2842 dir_s.insert(0,cwd)
2842 dir_s.insert(0,cwd)
2843 return self.magic_dirs()
2843 return self.magic_dirs()
2844
2844
2845 def magic_popd(self, parameter_s=''):
2845 def magic_popd(self, parameter_s=''):
2846 """Change to directory popped off the top of the stack.
2846 """Change to directory popped off the top of the stack.
2847 """
2847 """
2848 if not self.shell.dir_stack:
2848 if not self.shell.dir_stack:
2849 raise UsageError("%popd on empty stack")
2849 raise UsageError("%popd on empty stack")
2850 top = self.shell.dir_stack.pop(0)
2850 top = self.shell.dir_stack.pop(0)
2851 self.magic_cd(top)
2851 self.magic_cd(top)
2852 print "popd ->",top
2852 print "popd ->",top
2853
2853
2854 def magic_dirs(self, parameter_s=''):
2854 def magic_dirs(self, parameter_s=''):
2855 """Return the current directory stack."""
2855 """Return the current directory stack."""
2856
2856
2857 return self.shell.dir_stack
2857 return self.shell.dir_stack
2858
2858
2859 def magic_dhist(self, parameter_s=''):
2859 def magic_dhist(self, parameter_s=''):
2860 """Print your history of visited directories.
2860 """Print your history of visited directories.
2861
2861
2862 %dhist -> print full history\\
2862 %dhist -> print full history\\
2863 %dhist n -> print last n entries only\\
2863 %dhist n -> print last n entries only\\
2864 %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)\\
2865
2865
2866 This history is automatically maintained by the %cd command, and
2866 This history is automatically maintained by the %cd command, and
2867 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>
2868 to go to directory number <n>.
2868 to go to directory number <n>.
2869
2869
2870 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
2871 cd -<TAB>.
2871 cd -<TAB>.
2872
2872
2873 """
2873 """
2874
2874
2875 dh = self.shell.user_ns['_dh']
2875 dh = self.shell.user_ns['_dh']
2876 if parameter_s:
2876 if parameter_s:
2877 try:
2877 try:
2878 args = map(int,parameter_s.split())
2878 args = map(int,parameter_s.split())
2879 except:
2879 except:
2880 self.arg_err(Magic.magic_dhist)
2880 self.arg_err(Magic.magic_dhist)
2881 return
2881 return
2882 if len(args) == 1:
2882 if len(args) == 1:
2883 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2883 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2884 elif len(args) == 2:
2884 elif len(args) == 2:
2885 ini,fin = args
2885 ini,fin = args
2886 else:
2886 else:
2887 self.arg_err(Magic.magic_dhist)
2887 self.arg_err(Magic.magic_dhist)
2888 return
2888 return
2889 else:
2889 else:
2890 ini,fin = 0,len(dh)
2890 ini,fin = 0,len(dh)
2891 nlprint(dh,
2891 nlprint(dh,
2892 header = 'Directory history (kept in _dh)',
2892 header = 'Directory history (kept in _dh)',
2893 start=ini,stop=fin)
2893 start=ini,stop=fin)
2894
2894
2895 @testdec.skip_doctest
2895 @testdec.skip_doctest
2896 def magic_sc(self, parameter_s=''):
2896 def magic_sc(self, parameter_s=''):
2897 """Shell capture - execute a shell command and capture its output.
2897 """Shell capture - execute a shell command and capture its output.
2898
2898
2899 DEPRECATED. Suboptimal, retained for backwards compatibility.
2899 DEPRECATED. Suboptimal, retained for backwards compatibility.
2900
2900
2901 You should use the form 'var = !command' instead. Example:
2901 You should use the form 'var = !command' instead. Example:
2902
2902
2903 "%sc -l myfiles = ls ~" should now be written as
2903 "%sc -l myfiles = ls ~" should now be written as
2904
2904
2905 "myfiles = !ls ~"
2905 "myfiles = !ls ~"
2906
2906
2907 myfiles.s, myfiles.l and myfiles.n still apply as documented
2907 myfiles.s, myfiles.l and myfiles.n still apply as documented
2908 below.
2908 below.
2909
2909
2910 --
2910 --
2911 %sc [options] varname=command
2911 %sc [options] varname=command
2912
2912
2913 IPython will run the given command using commands.getoutput(), and
2913 IPython will run the given command using commands.getoutput(), and
2914 will then update the user's interactive namespace with a variable
2914 will then update the user's interactive namespace with a variable
2915 called varname, containing the value of the call. Your command can
2915 called varname, containing the value of the call. Your command can
2916 contain shell wildcards, pipes, etc.
2916 contain shell wildcards, pipes, etc.
2917
2917
2918 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
2919 supply must follow Python's standard conventions for valid names.
2919 supply must follow Python's standard conventions for valid names.
2920
2920
2921 (A special format without variable name exists for internal use)
2921 (A special format without variable name exists for internal use)
2922
2922
2923 Options:
2923 Options:
2924
2924
2925 -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
2926 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
2927 as a single string.
2927 as a single string.
2928
2928
2929 -v: verbose. Print the contents of the variable.
2929 -v: verbose. Print the contents of the variable.
2930
2930
2931 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
2932 returned value is a special type of string which can automatically
2932 returned value is a special type of string which can automatically
2933 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
2934 space-separated string. These are convenient, respectively, either
2934 space-separated string. These are convenient, respectively, either
2935 for sequential processing or to be passed to a shell command.
2935 for sequential processing or to be passed to a shell command.
2936
2936
2937 For example:
2937 For example:
2938
2938
2939 # all-random
2939 # all-random
2940
2940
2941 # Capture into variable a
2941 # Capture into variable a
2942 In [1]: sc a=ls *py
2942 In [1]: sc a=ls *py
2943
2943
2944 # a is a string with embedded newlines
2944 # a is a string with embedded newlines
2945 In [2]: a
2945 In [2]: a
2946 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2946 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2947
2947
2948 # which can be seen as a list:
2948 # which can be seen as a list:
2949 In [3]: a.l
2949 In [3]: a.l
2950 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2950 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2951
2951
2952 # or as a whitespace-separated string:
2952 # or as a whitespace-separated string:
2953 In [4]: a.s
2953 In [4]: a.s
2954 Out[4]: 'setup.py win32_manual_post_install.py'
2954 Out[4]: 'setup.py win32_manual_post_install.py'
2955
2955
2956 # a.s is useful to pass as a single command line:
2956 # a.s is useful to pass as a single command line:
2957 In [5]: !wc -l $a.s
2957 In [5]: !wc -l $a.s
2958 146 setup.py
2958 146 setup.py
2959 130 win32_manual_post_install.py
2959 130 win32_manual_post_install.py
2960 276 total
2960 276 total
2961
2961
2962 # while the list form is useful to loop over:
2962 # while the list form is useful to loop over:
2963 In [6]: for f in a.l:
2963 In [6]: for f in a.l:
2964 ...: !wc -l $f
2964 ...: !wc -l $f
2965 ...:
2965 ...:
2966 146 setup.py
2966 146 setup.py
2967 130 win32_manual_post_install.py
2967 130 win32_manual_post_install.py
2968
2968
2969 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
2970 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
2971 automatically get a whitespace-separated string from their contents:
2971 automatically get a whitespace-separated string from their contents:
2972
2972
2973 In [7]: sc -l b=ls *py
2973 In [7]: sc -l b=ls *py
2974
2974
2975 In [8]: b
2975 In [8]: b
2976 Out[8]: ['setup.py', 'win32_manual_post_install.py']
2976 Out[8]: ['setup.py', 'win32_manual_post_install.py']
2977
2977
2978 In [9]: b.s
2978 In [9]: b.s
2979 Out[9]: 'setup.py win32_manual_post_install.py'
2979 Out[9]: 'setup.py win32_manual_post_install.py'
2980
2980
2981 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
2982 the following special attributes:
2982 the following special attributes:
2983
2983
2984 .l (or .list) : value as list.
2984 .l (or .list) : value as list.
2985 .n (or .nlstr): value as newline-separated string.
2985 .n (or .nlstr): value as newline-separated string.
2986 .s (or .spstr): value as space-separated string.
2986 .s (or .spstr): value as space-separated string.
2987 """
2987 """
2988
2988
2989 opts,args = self.parse_options(parameter_s,'lv')
2989 opts,args = self.parse_options(parameter_s,'lv')
2990 # Try to get a variable name and command to run
2990 # Try to get a variable name and command to run
2991 try:
2991 try:
2992 # the variable name must be obtained from the parse_options
2992 # the variable name must be obtained from the parse_options
2993 # output, which uses shlex.split to strip options out.
2993 # output, which uses shlex.split to strip options out.
2994 var,_ = args.split('=',1)
2994 var,_ = args.split('=',1)
2995 var = var.strip()
2995 var = var.strip()
2996 # 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
2997 # parameter_s, not on what parse_options returns, to avoid the
2997 # parameter_s, not on what parse_options returns, to avoid the
2998 # quote stripping which shlex.split performs on it.
2998 # quote stripping which shlex.split performs on it.
2999 _,cmd = parameter_s.split('=',1)
2999 _,cmd = parameter_s.split('=',1)
3000 except ValueError:
3000 except ValueError:
3001 var,cmd = '',''
3001 var,cmd = '',''
3002 # If all looks ok, proceed
3002 # If all looks ok, proceed
3003 out,err = self.shell.getoutputerror(cmd)
3003 out,err = self.shell.getoutputerror(cmd)
3004 if err:
3004 if err:
3005 print >> Term.cerr,err
3005 print >> Term.cerr,err
3006 if opts.has_key('l'):
3006 if opts.has_key('l'):
3007 out = SList(out.split('\n'))
3007 out = SList(out.split('\n'))
3008 else:
3008 else:
3009 out = LSString(out)
3009 out = LSString(out)
3010 if opts.has_key('v'):
3010 if opts.has_key('v'):
3011 print '%s ==\n%s' % (var,pformat(out))
3011 print '%s ==\n%s' % (var,pformat(out))
3012 if var:
3012 if var:
3013 self.shell.user_ns.update({var:out})
3013 self.shell.user_ns.update({var:out})
3014 else:
3014 else:
3015 return out
3015 return out
3016
3016
3017 def magic_sx(self, parameter_s=''):
3017 def magic_sx(self, parameter_s=''):
3018 """Shell execute - run a shell command and capture its output.
3018 """Shell execute - run a shell command and capture its output.
3019
3019
3020 %sx command
3020 %sx command
3021
3021
3022 IPython will run the given command using commands.getoutput(), and
3022 IPython will run the given command using commands.getoutput(), and
3023 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
3024 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
3025 cache Out[N] and in the '_N' automatic variables.
3025 cache Out[N] and in the '_N' automatic variables.
3026
3026
3027 Notes:
3027 Notes:
3028
3028
3029 1) If an input line begins with '!!', then %sx is automatically
3029 1) If an input line begins with '!!', then %sx is automatically
3030 invoked. That is, while:
3030 invoked. That is, while:
3031 !ls
3031 !ls
3032 causes ipython to simply issue system('ls'), typing
3032 causes ipython to simply issue system('ls'), typing
3033 !!ls
3033 !!ls
3034 is a shorthand equivalent to:
3034 is a shorthand equivalent to:
3035 %sx ls
3035 %sx ls
3036
3036
3037 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,
3038 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
3039 to process line-oriented shell output via further python commands.
3039 to process line-oriented shell output via further python commands.
3040 %sc is meant to provide much finer control, but requires more
3040 %sc is meant to provide much finer control, but requires more
3041 typing.
3041 typing.
3042
3042
3043 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:
3044
3044
3045 .l (or .list) : value as list.
3045 .l (or .list) : value as list.
3046 .n (or .nlstr): value as newline-separated string.
3046 .n (or .nlstr): value as newline-separated string.
3047 .s (or .spstr): value as whitespace-separated string.
3047 .s (or .spstr): value as whitespace-separated string.
3048
3048
3049 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
3050 system commands."""
3050 system commands."""
3051
3051
3052 if parameter_s:
3052 if parameter_s:
3053 out,err = self.shell.getoutputerror(parameter_s)
3053 out,err = self.shell.getoutputerror(parameter_s)
3054 if err:
3054 if err:
3055 print >> Term.cerr,err
3055 print >> Term.cerr,err
3056 return SList(out.split('\n'))
3056 return SList(out.split('\n'))
3057
3057
3058 def magic_bg(self, parameter_s=''):
3058 def magic_bg(self, parameter_s=''):
3059 """Run a job in the background, in a separate thread.
3059 """Run a job in the background, in a separate thread.
3060
3060
3061 For example,
3061 For example,
3062
3062
3063 %bg myfunc(x,y,z=1)
3063 %bg myfunc(x,y,z=1)
3064
3064
3065 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
3066 execution starts, a message will be printed indicating the job
3066 execution starts, a message will be printed indicating the job
3067 number. If your job number is 5, you can use
3067 number. If your job number is 5, you can use
3068
3068
3069 myvar = jobs.result(5) or myvar = jobs[5].result
3069 myvar = jobs.result(5) or myvar = jobs[5].result
3070
3070
3071 to assign this result to variable 'myvar'.
3071 to assign this result to variable 'myvar'.
3072
3072
3073 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
3074 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
3075 its attributes. All attributes not starting with an underscore are
3075 its attributes. All attributes not starting with an underscore are
3076 meant for public use.
3076 meant for public use.
3077
3077
3078 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
3079 new jobs. This magic %bg function is just a convenience wrapper
3079 new jobs. This magic %bg function is just a convenience wrapper
3080 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
3081 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
3082 jobs.new() directly.
3082 jobs.new() directly.
3083
3083
3084 The jobs.new docstring also describes in detail several important
3084 The jobs.new docstring also describes in detail several important
3085 caveats associated with a thread-based model for background job
3085 caveats associated with a thread-based model for background job
3086 execution. Type jobs.new? for details.
3086 execution. Type jobs.new? for details.
3087
3087
3088 You can check the status of all jobs with jobs.status().
3088 You can check the status of all jobs with jobs.status().
3089
3089
3090 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.
3091 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
3092 name. You can either delete your global jobs variable to regain
3092 name. You can either delete your global jobs variable to regain
3093 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
3094 to the manager (stored in IPython's namespace). For example, to
3094 to the manager (stored in IPython's namespace). For example, to
3095 assign the job manager to the Jobs name, use:
3095 assign the job manager to the Jobs name, use:
3096
3096
3097 Jobs = __builtins__.jobs"""
3097 Jobs = __builtins__.jobs"""
3098
3098
3099 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3099 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3100
3100
3101 def magic_r(self, parameter_s=''):
3101 def magic_r(self, parameter_s=''):
3102 """Repeat previous input.
3102 """Repeat previous input.
3103
3103
3104 Note: Consider using the more powerfull %rep instead!
3104 Note: Consider using the more powerfull %rep instead!
3105
3105
3106 If given an argument, repeats the previous command which starts with
3106 If given an argument, repeats the previous command which starts with
3107 the same string, otherwise it just repeats the previous input.
3107 the same string, otherwise it just repeats the previous input.
3108
3108
3109 Shell escaped commands (with ! as first character) are not recognized
3109 Shell escaped commands (with ! as first character) are not recognized
3110 by this system, only pure python code and magic commands.
3110 by this system, only pure python code and magic commands.
3111 """
3111 """
3112
3112
3113 start = parameter_s.strip()
3113 start = parameter_s.strip()
3114 esc_magic = self.shell.ESC_MAGIC
3114 esc_magic = self.shell.ESC_MAGIC
3115 # Identify magic commands even if automagic is on (which means
3115 # Identify magic commands even if automagic is on (which means
3116 # 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).
3117 if self.shell.rc.automagic:
3117 if self.shell.rc.automagic:
3118 start_magic = esc_magic+start
3118 start_magic = esc_magic+start
3119 else:
3119 else:
3120 start_magic = start
3120 start_magic = start
3121 # Look through the input history in reverse
3121 # Look through the input history in reverse
3122 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):
3123 input = self.shell.input_hist[n]
3123 input = self.shell.input_hist[n]
3124 # skip plain 'r' lines so we don't recurse to infinity
3124 # skip plain 'r' lines so we don't recurse to infinity
3125 if input != '_ip.magic("r")\n' and \
3125 if input != '_ip.magic("r")\n' and \
3126 (input.startswith(start) or input.startswith(start_magic)):
3126 (input.startswith(start) or input.startswith(start_magic)):
3127 #print 'match',`input` # dbg
3127 #print 'match',`input` # dbg
3128 print 'Executing:',input,
3128 print 'Executing:',input,
3129 self.shell.runlines(input)
3129 self.shell.runlines(input)
3130 return
3130 return
3131 print 'No previous input matching `%s` found.' % start
3131 print 'No previous input matching `%s` found.' % start
3132
3132
3133
3133
3134 def magic_bookmark(self, parameter_s=''):
3134 def magic_bookmark(self, parameter_s=''):
3135 """Manage IPython's bookmark system.
3135 """Manage IPython's bookmark system.
3136
3136
3137 %bookmark <name> - set bookmark to current dir
3137 %bookmark <name> - set bookmark to current dir
3138 %bookmark <name> <dir> - set bookmark to <dir>
3138 %bookmark <name> <dir> - set bookmark to <dir>
3139 %bookmark -l - list all bookmarks
3139 %bookmark -l - list all bookmarks
3140 %bookmark -d <name> - remove bookmark
3140 %bookmark -d <name> - remove bookmark
3141 %bookmark -r - remove all bookmarks
3141 %bookmark -r - remove all bookmarks
3142
3142
3143 You can later on access a bookmarked folder with:
3143 You can later on access a bookmarked folder with:
3144 %cd -b <name>
3144 %cd -b <name>
3145 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
3146 there is such a bookmark defined.
3146 there is such a bookmark defined.
3147
3147
3148 Your bookmarks persist through IPython sessions, but they are
3148 Your bookmarks persist through IPython sessions, but they are
3149 associated with each profile."""
3149 associated with each profile."""
3150
3150
3151 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3151 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3152 if len(args) > 2:
3152 if len(args) > 2:
3153 raise UsageError("%bookmark: too many arguments")
3153 raise UsageError("%bookmark: too many arguments")
3154
3154
3155 bkms = self.db.get('bookmarks',{})
3155 bkms = self.db.get('bookmarks',{})
3156
3156
3157 if opts.has_key('d'):
3157 if opts.has_key('d'):
3158 try:
3158 try:
3159 todel = args[0]
3159 todel = args[0]
3160 except IndexError:
3160 except IndexError:
3161 raise UsageError(
3161 raise UsageError(
3162 "%bookmark -d: must provide a bookmark to delete")
3162 "%bookmark -d: must provide a bookmark to delete")
3163 else:
3163 else:
3164 try:
3164 try:
3165 del bkms[todel]
3165 del bkms[todel]
3166 except KeyError:
3166 except KeyError:
3167 raise UsageError(
3167 raise UsageError(
3168 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3168 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3169
3169
3170 elif opts.has_key('r'):
3170 elif opts.has_key('r'):
3171 bkms = {}
3171 bkms = {}
3172 elif opts.has_key('l'):
3172 elif opts.has_key('l'):
3173 bks = bkms.keys()
3173 bks = bkms.keys()
3174 bks.sort()
3174 bks.sort()
3175 if bks:
3175 if bks:
3176 size = max(map(len,bks))
3176 size = max(map(len,bks))
3177 else:
3177 else:
3178 size = 0
3178 size = 0
3179 fmt = '%-'+str(size)+'s -> %s'
3179 fmt = '%-'+str(size)+'s -> %s'
3180 print 'Current bookmarks:'
3180 print 'Current bookmarks:'
3181 for bk in bks:
3181 for bk in bks:
3182 print fmt % (bk,bkms[bk])
3182 print fmt % (bk,bkms[bk])
3183 else:
3183 else:
3184 if not args:
3184 if not args:
3185 raise UsageError("%bookmark: You must specify the bookmark name")
3185 raise UsageError("%bookmark: You must specify the bookmark name")
3186 elif len(args)==1:
3186 elif len(args)==1:
3187 bkms[args[0]] = os.getcwd()
3187 bkms[args[0]] = os.getcwd()
3188 elif len(args)==2:
3188 elif len(args)==2:
3189 bkms[args[0]] = args[1]
3189 bkms[args[0]] = args[1]
3190 self.db['bookmarks'] = bkms
3190 self.db['bookmarks'] = bkms
3191
3191
3192 def magic_pycat(self, parameter_s=''):
3192 def magic_pycat(self, parameter_s=''):
3193 """Show a syntax-highlighted file through a pager.
3193 """Show a syntax-highlighted file through a pager.
3194
3194
3195 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
3196 to be Python source and will show it with syntax highlighting. """
3196 to be Python source and will show it with syntax highlighting. """
3197
3197
3198 try:
3198 try:
3199 filename = get_py_filename(parameter_s)
3199 filename = get_py_filename(parameter_s)
3200 cont = file_read(filename)
3200 cont = file_read(filename)
3201 except IOError:
3201 except IOError:
3202 try:
3202 try:
3203 cont = eval(parameter_s,self.user_ns)
3203 cont = eval(parameter_s,self.user_ns)
3204 except NameError:
3204 except NameError:
3205 cont = None
3205 cont = None
3206 if cont is None:
3206 if cont is None:
3207 print "Error: no such file or variable"
3207 print "Error: no such file or variable"
3208 return
3208 return
3209
3209
3210 page(self.shell.pycolorize(cont),
3210 page(self.shell.pycolorize(cont),
3211 screen_lines=self.shell.rc.screen_length)
3211 screen_lines=self.shell.rc.screen_length)
3212
3212
3213 def _rerun_pasted(self):
3214 """ Rerun a previously pasted command.
3215 """
3216 b = self.user_ns.get('pasted_block', None)
3217 if b is None:
3218 raise UsageError('No previous pasted block available')
3219 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3220 exec b in self.user_ns
3221
3222 def _get_pasted_lines(self, sentinel):
3223 """ Yield pasted lines until the user enters the given sentinel value.
3224 """
3225 from IPython import iplib
3226 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3227 while True:
3228 l = iplib.raw_input_original(':')
3229 if l == sentinel:
3230 return
3231 else:
3232 yield l
3233
3234 def _strip_pasted_lines_for_code(self, raw_lines):
3235 """ Strip non-code parts of a sequence of lines to return a block of
3236 code.
3237 """
3238 # Regular expressions that declare text we strip from the input:
3239 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3240 r'^\s*(\s?>)+', # Python input prompt
3241 r'^\s*\.{3,}', # Continuation prompts
3242 r'^\++',
3243 ]
3244
3245 strip_from_start = map(re.compile,strip_re)
3246
3247 lines = []
3248 for l in raw_lines:
3249 for pat in strip_from_start:
3250 l = pat.sub('',l)
3251 lines.append(l)
3252
3253 block = "\n".join(lines) + '\n'
3254 #print "block:\n",block
3255 return block
3256
3257 def _execute_block(self, block, par):
3258 """ Execute a block, or store it in a variable, per the user's request.
3259 """
3260 if not par:
3261 b = textwrap.dedent(block)
3262 self.user_ns['pasted_block'] = b
3263 exec b in self.user_ns
3264 else:
3265 self.user_ns[par] = SList(block.splitlines())
3266 print "Block assigned to '%s'" % par
3267
3213 def magic_cpaste(self, parameter_s=''):
3268 def magic_cpaste(self, parameter_s=''):
3214 """Allows you to paste & execute a pre-formatted code block from clipboard.
3269 """Allows you to paste & execute a pre-formatted code block from clipboard.
3215
3270
3216 You must terminate the block with '--' (two minus-signs) alone on the
3271 You must terminate the block with '--' (two minus-signs) alone on the
3217 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3272 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3218 is the new sentinel for this operation)
3273 is the new sentinel for this operation)
3219
3274
3220 The block is dedented prior to execution to enable execution of method
3275 The block is dedented prior to execution to enable execution of method
3221 definitions. '>' and '+' characters at the beginning of a line are
3276 definitions. '>' and '+' characters at the beginning of a line are
3222 ignored, to allow pasting directly from e-mails, diff files and
3277 ignored, to allow pasting directly from e-mails, diff files and
3223 doctests (the '...' continuation prompt is also stripped). The
3278 doctests (the '...' continuation prompt is also stripped). The
3224 executed block is also assigned to variable named 'pasted_block' for
3279 executed block is also assigned to variable named 'pasted_block' for
3225 later editing with '%edit pasted_block'.
3280 later editing with '%edit pasted_block'.
3226
3281
3227 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3282 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3228 This assigns the pasted block to variable 'foo' as string, without
3283 This assigns the pasted block to variable 'foo' as string, without
3229 dedenting or executing it (preceding >>> and + is still stripped)
3284 dedenting or executing it (preceding >>> and + is still stripped)
3230
3285
3231 '%cpaste -r' re-executes the block previously entered by cpaste.
3286 '%cpaste -r' re-executes the block previously entered by cpaste.
3232
3287
3233 Do not be alarmed by garbled output on Windows (it's a readline bug).
3288 Do not be alarmed by garbled output on Windows (it's a readline bug).
3234 Just press enter and type -- (and press enter again) and the block
3289 Just press enter and type -- (and press enter again) and the block
3235 will be what was just pasted.
3290 will be what was just pasted.
3236
3291
3237 IPython statements (magics, shell escapes) are not supported (yet).
3292 IPython statements (magics, shell escapes) are not supported (yet).
3238 """
3293 """
3239 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3294 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3240 par = args.strip()
3295 par = args.strip()
3241 if opts.has_key('r'):
3296 if opts.has_key('r'):
3242 b = self.user_ns.get('pasted_block', None)
3297 self._rerun_pasted()
3243 if b is None:
3244 raise UsageError('No previous pasted block available')
3245 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3246 exec b in self.user_ns
3247 return
3298 return
3248
3299
3249 sentinel = opts.get('s','--')
3300 sentinel = opts.get('s','--')
3250
3301
3251 # Regular expressions that declare text we strip from the input:
3302 block = self._strip_pasted_lines_for_code(
3252 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3303 self._get_pasted_lines(sentinel))
3253 r'^\s*(\s?>)+', # Python input prompt
3254 r'^\s*\.{3,}', # Continuation prompts
3255 r'^\++',
3256 ]
3257
3304
3258 strip_from_start = map(re.compile,strip_re)
3305 self._execute_block(block, par)
3306
3307 def magic_paste(self, parameter_s=''):
3308 """Allows you to paste & execute a pre-formatted code block from clipboard.
3259
3309
3260 from IPython import iplib
3310 The text is pulled directly from the clipboard without user
3261 lines = []
3311 intervention.
3262 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3312
3263 while 1:
3313 The block is dedented prior to execution to enable execution of method
3264 l = iplib.raw_input_original(':')
3314 definitions. '>' and '+' characters at the beginning of a line are
3265 if l ==sentinel:
3315 ignored, to allow pasting directly from e-mails, diff files and
3266 break
3316 doctests (the '...' continuation prompt is also stripped). The
3267
3317 executed block is also assigned to variable named 'pasted_block' for
3268 for pat in strip_from_start:
3318 later editing with '%edit pasted_block'.
3269 l = pat.sub('',l)
3319
3270 lines.append(l)
3320 You can also pass a variable name as an argument, e.g. '%paste foo'.
3271
3321 This assigns the pasted block to variable 'foo' as string, without
3272 block = "\n".join(lines) + '\n'
3322 dedenting or executing it (preceding >>> and + is still stripped)
3273 #print "block:\n",block
3323
3274 if not par:
3324 '%paste -r' re-executes the block previously entered by cpaste.
3275 b = textwrap.dedent(block)
3325
3276 self.user_ns['pasted_block'] = b
3326 IPython statements (magics, shell escapes) are not supported (yet).
3277 exec b in self.user_ns
3327 """
3278 else:
3328 opts,args = self.parse_options(parameter_s,'r:',mode='string')
3279 self.user_ns[par] = SList(block.splitlines())
3329 par = args.strip()
3280 print "Block assigned to '%s'" % par
3330 if opts.has_key('r'):
3281
3331 self._rerun_pasted()
3332 return
3333
3334 text = self.shell.hooks.clipboard_get()
3335 block = self._strip_pasted_lines_for_code(text.splitlines())
3336 self._execute_block(block, par)
3337
3282 def magic_quickref(self,arg):
3338 def magic_quickref(self,arg):
3283 """ Show a quick reference sheet """
3339 """ Show a quick reference sheet """
3284 import IPython.usage
3340 import IPython.usage
3285 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3341 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3286
3342
3287 page(qr)
3343 page(qr)
3288
3344
3289 def magic_upgrade(self,arg):
3345 def magic_upgrade(self,arg):
3290 """ Upgrade your IPython installation
3346 """ Upgrade your IPython installation
3291
3347
3292 This will copy the config files that don't yet exist in your
3348 This will copy the config files that don't yet exist in your
3293 ipython dir from the system config dir. Use this after upgrading
3349 ipython dir from the system config dir. Use this after upgrading
3294 IPython if you don't wish to delete your .ipython dir.
3350 IPython if you don't wish to delete your .ipython dir.
3295
3351
3296 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3352 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3297 new users)
3353 new users)
3298
3354
3299 """
3355 """
3300 ip = self.getapi()
3356 ip = self.getapi()
3301 ipinstallation = path(IPython.__file__).dirname()
3357 ipinstallation = path(IPython.__file__).dirname()
3302 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3358 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3303 src_config = ipinstallation / 'UserConfig'
3359 src_config = ipinstallation / 'UserConfig'
3304 userdir = path(ip.options.ipythondir)
3360 userdir = path(ip.options.ipythondir)
3305 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3361 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3306 print ">",cmd
3362 print ">",cmd
3307 shell(cmd)
3363 shell(cmd)
3308 if arg == '-nolegacy':
3364 if arg == '-nolegacy':
3309 legacy = userdir.files('ipythonrc*')
3365 legacy = userdir.files('ipythonrc*')
3310 print "Nuking legacy files:",legacy
3366 print "Nuking legacy files:",legacy
3311
3367
3312 [p.remove() for p in legacy]
3368 [p.remove() for p in legacy]
3313 suffix = (sys.platform == 'win32' and '.ini' or '')
3369 suffix = (sys.platform == 'win32' and '.ini' or '')
3314 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3370 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3315
3371
3316
3372
3317 def magic_doctest_mode(self,parameter_s=''):
3373 def magic_doctest_mode(self,parameter_s=''):
3318 """Toggle doctest mode on and off.
3374 """Toggle doctest mode on and off.
3319
3375
3320 This mode allows you to toggle the prompt behavior between normal
3376 This mode allows you to toggle the prompt behavior between normal
3321 IPython prompts and ones that are as similar to the default IPython
3377 IPython prompts and ones that are as similar to the default IPython
3322 interpreter as possible.
3378 interpreter as possible.
3323
3379
3324 It also supports the pasting of code snippets that have leading '>>>'
3380 It also supports the pasting of code snippets that have leading '>>>'
3325 and '...' prompts in them. This means that you can paste doctests from
3381 and '...' prompts in them. This means that you can paste doctests from
3326 files or docstrings (even if they have leading whitespace), and the
3382 files or docstrings (even if they have leading whitespace), and the
3327 code will execute correctly. You can then use '%history -tn' to see
3383 code will execute correctly. You can then use '%history -tn' to see
3328 the translated history without line numbers; this will give you the
3384 the translated history without line numbers; this will give you the
3329 input after removal of all the leading prompts and whitespace, which
3385 input after removal of all the leading prompts and whitespace, which
3330 can be pasted back into an editor.
3386 can be pasted back into an editor.
3331
3387
3332 With these features, you can switch into this mode easily whenever you
3388 With these features, you can switch into this mode easily whenever you
3333 need to do testing and changes to doctests, without having to leave
3389 need to do testing and changes to doctests, without having to leave
3334 your existing IPython session.
3390 your existing IPython session.
3335 """
3391 """
3336
3392
3337 # XXX - Fix this to have cleaner activate/deactivate calls.
3393 # XXX - Fix this to have cleaner activate/deactivate calls.
3338 from IPython.Extensions import InterpreterPasteInput as ipaste
3394 from IPython.Extensions import InterpreterPasteInput as ipaste
3339 from IPython.ipstruct import Struct
3395 from IPython.ipstruct import Struct
3340
3396
3341 # Shorthands
3397 # Shorthands
3342 shell = self.shell
3398 shell = self.shell
3343 oc = shell.outputcache
3399 oc = shell.outputcache
3344 rc = shell.rc
3400 rc = shell.rc
3345 meta = shell.meta
3401 meta = shell.meta
3346 # dstore is a data store kept in the instance metadata bag to track any
3402 # dstore is a data store kept in the instance metadata bag to track any
3347 # changes we make, so we can undo them later.
3403 # changes we make, so we can undo them later.
3348 dstore = meta.setdefault('doctest_mode',Struct())
3404 dstore = meta.setdefault('doctest_mode',Struct())
3349 save_dstore = dstore.setdefault
3405 save_dstore = dstore.setdefault
3350
3406
3351 # save a few values we'll need to recover later
3407 # save a few values we'll need to recover later
3352 mode = save_dstore('mode',False)
3408 mode = save_dstore('mode',False)
3353 save_dstore('rc_pprint',rc.pprint)
3409 save_dstore('rc_pprint',rc.pprint)
3354 save_dstore('xmode',shell.InteractiveTB.mode)
3410 save_dstore('xmode',shell.InteractiveTB.mode)
3355 save_dstore('rc_separate_out',rc.separate_out)
3411 save_dstore('rc_separate_out',rc.separate_out)
3356 save_dstore('rc_separate_out2',rc.separate_out2)
3412 save_dstore('rc_separate_out2',rc.separate_out2)
3357 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3413 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3358 save_dstore('rc_separate_in',rc.separate_in)
3414 save_dstore('rc_separate_in',rc.separate_in)
3359
3415
3360 if mode == False:
3416 if mode == False:
3361 # turn on
3417 # turn on
3362 ipaste.activate_prefilter()
3418 ipaste.activate_prefilter()
3363
3419
3364 oc.prompt1.p_template = '>>> '
3420 oc.prompt1.p_template = '>>> '
3365 oc.prompt2.p_template = '... '
3421 oc.prompt2.p_template = '... '
3366 oc.prompt_out.p_template = ''
3422 oc.prompt_out.p_template = ''
3367
3423
3368 # Prompt separators like plain python
3424 # Prompt separators like plain python
3369 oc.input_sep = oc.prompt1.sep = ''
3425 oc.input_sep = oc.prompt1.sep = ''
3370 oc.output_sep = ''
3426 oc.output_sep = ''
3371 oc.output_sep2 = ''
3427 oc.output_sep2 = ''
3372
3428
3373 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3429 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3374 oc.prompt_out.pad_left = False
3430 oc.prompt_out.pad_left = False
3375
3431
3376 rc.pprint = False
3432 rc.pprint = False
3377
3433
3378 shell.magic_xmode('Plain')
3434 shell.magic_xmode('Plain')
3379
3435
3380 else:
3436 else:
3381 # turn off
3437 # turn off
3382 ipaste.deactivate_prefilter()
3438 ipaste.deactivate_prefilter()
3383
3439
3384 oc.prompt1.p_template = rc.prompt_in1
3440 oc.prompt1.p_template = rc.prompt_in1
3385 oc.prompt2.p_template = rc.prompt_in2
3441 oc.prompt2.p_template = rc.prompt_in2
3386 oc.prompt_out.p_template = rc.prompt_out
3442 oc.prompt_out.p_template = rc.prompt_out
3387
3443
3388 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3444 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3389
3445
3390 oc.output_sep = dstore.rc_separate_out
3446 oc.output_sep = dstore.rc_separate_out
3391 oc.output_sep2 = dstore.rc_separate_out2
3447 oc.output_sep2 = dstore.rc_separate_out2
3392
3448
3393 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3449 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3394 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3450 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3395
3451
3396 rc.pprint = dstore.rc_pprint
3452 rc.pprint = dstore.rc_pprint
3397
3453
3398 shell.magic_xmode(dstore.xmode)
3454 shell.magic_xmode(dstore.xmode)
3399
3455
3400 # Store new mode and inform
3456 # Store new mode and inform
3401 dstore.mode = bool(1-int(mode))
3457 dstore.mode = bool(1-int(mode))
3402 print 'Doctest mode is:',
3458 print 'Doctest mode is:',
3403 print ['OFF','ON'][dstore.mode]
3459 print ['OFF','ON'][dstore.mode]
3404
3460
3405 # end Magic
3461 # end Magic
@@ -1,252 +1,269 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 if os.system('jed +%d %s' % (linenum,filename)) != 0:
28 if os.system('jed +%d %s' % (linenum,filename)) != 0:
29 raise ipapi.TryNext()
29 raise ipapi.TryNext()
30
30
31 ip.set_hook('editor', calljed)
31 ip.set_hook('editor', calljed)
32
32
33 You can then enable the functionality by doing 'import myiphooks'
33 You can then enable the functionality by doing 'import myiphooks'
34 somewhere in your configuration files or ipython command line.
34 somewhere in your configuration files or ipython command line.
35
35
36 $Id: hooks.py 2998 2008-01-31 10:06:04Z vivainio $"""
36 $Id: hooks.py 2998 2008-01-31 10:06:04Z vivainio $"""
37
37
38 #*****************************************************************************
38 #*****************************************************************************
39 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
40 #
40 #
41 # 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
42 # the file COPYING, distributed as part of this software.
42 # the file COPYING, distributed as part of this software.
43 #*****************************************************************************
43 #*****************************************************************************
44
44
45 from IPython import Release
45 from IPython import Release
46 from IPython import ipapi
46 from IPython import ipapi
47 __author__ = '%s <%s>' % Release.authors['Fernando']
47 __author__ = '%s <%s>' % Release.authors['Fernando']
48 __license__ = Release.license
48 __license__ = Release.license
49 __version__ = Release.version
49 __version__ = Release.version
50
50
51 import os,bisect
51 import os,bisect
52 import sys
52 from genutils import Term,shell
53 from genutils import Term,shell
53 from pprint import PrettyPrinter
54 from pprint import PrettyPrinter
54
55
55 # List here all the default hooks. For now it's just the editor functions
56 # List here all the default hooks. For now it's just the editor functions
56 # but over time we'll move here all the public API for user-accessible things.
57 # but over time we'll move here all the public API for user-accessible things.
57 # vds: >>
58 # vds: >>
58 __all__ = ['editor', 'fix_error_editor', 'synchronize_with_editor', 'result_display',
59 __all__ = ['editor', 'fix_error_editor', 'synchronize_with_editor', 'result_display',
59 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
60 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
60 'generate_prompt', 'generate_output_prompt','shell_hook',
61 'generate_prompt', 'generate_output_prompt','shell_hook',
61 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook']
62 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook',
63 'clipboard_get']
62 # vds: <<
64 # vds: <<
63
65
64 pformat = PrettyPrinter().pformat
66 pformat = PrettyPrinter().pformat
65
67
66 def editor(self,filename, linenum=None):
68 def editor(self,filename, linenum=None):
67 """Open the default editor at the given filename and linenumber.
69 """Open the default editor at the given filename and linenumber.
68
70
69 This is IPython's default editor hook, you can use it as an example to
71 This is IPython's default editor hook, you can use it as an example to
70 write your own modified one. To set your own editor function as the
72 write your own modified one. To set your own editor function as the
71 new editor hook, call ip.set_hook('editor',yourfunc)."""
73 new editor hook, call ip.set_hook('editor',yourfunc)."""
72
74
73 # IPython configures a default editor at startup by reading $EDITOR from
75 # IPython configures a default editor at startup by reading $EDITOR from
74 # the environment, and falling back on vi (unix) or notepad (win32).
76 # the environment, and falling back on vi (unix) or notepad (win32).
75 editor = self.rc.editor
77 editor = self.rc.editor
76
78
77 # marker for at which line to open the file (for existing objects)
79 # marker for at which line to open the file (for existing objects)
78 if linenum is None or editor=='notepad':
80 if linenum is None or editor=='notepad':
79 linemark = ''
81 linemark = ''
80 else:
82 else:
81 linemark = '+%d' % int(linenum)
83 linemark = '+%d' % int(linenum)
82
84
83 # Enclose in quotes if necessary and legal
85 # Enclose in quotes if necessary and legal
84 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
86 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
85 editor = '"%s"' % editor
87 editor = '"%s"' % editor
86
88
87 # Call the actual editor
89 # Call the actual editor
88 if os.system('%s %s %s' % (editor,linemark,filename)) != 0:
90 if os.system('%s %s %s' % (editor,linemark,filename)) != 0:
89 raise ipapi.TryNext()
91 raise ipapi.TryNext()
90
92
91 import tempfile
93 import tempfile
92 def fix_error_editor(self,filename,linenum,column,msg):
94 def fix_error_editor(self,filename,linenum,column,msg):
93 """Open the editor at the given filename, linenumber, column and
95 """Open the editor at the given filename, linenumber, column and
94 show an error message. This is used for correcting syntax errors.
96 show an error message. This is used for correcting syntax errors.
95 The current implementation only has special support for the VIM editor,
97 The current implementation only has special support for the VIM editor,
96 and falls back on the 'editor' hook if VIM is not used.
98 and falls back on the 'editor' hook if VIM is not used.
97
99
98 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
100 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
99 """
101 """
100 def vim_quickfix_file():
102 def vim_quickfix_file():
101 t = tempfile.NamedTemporaryFile()
103 t = tempfile.NamedTemporaryFile()
102 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
104 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
103 t.flush()
105 t.flush()
104 return t
106 return t
105 if os.path.basename(self.rc.editor) != 'vim':
107 if os.path.basename(self.rc.editor) != 'vim':
106 self.hooks.editor(filename,linenum)
108 self.hooks.editor(filename,linenum)
107 return
109 return
108 t = vim_quickfix_file()
110 t = vim_quickfix_file()
109 try:
111 try:
110 if os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name):
112 if os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name):
111 raise ipapi.TryNext()
113 raise ipapi.TryNext()
112 finally:
114 finally:
113 t.close()
115 t.close()
114
116
115 # vds: >>
117 # vds: >>
116 def synchronize_with_editor(self, filename, linenum, column):
118 def synchronize_with_editor(self, filename, linenum, column):
117 pass
119 pass
118 # vds: <<
120 # vds: <<
119
121
120 class CommandChainDispatcher:
122 class CommandChainDispatcher:
121 """ Dispatch calls to a chain of commands until some func can handle it
123 """ Dispatch calls to a chain of commands until some func can handle it
122
124
123 Usage: instantiate, execute "add" to add commands (with optional
125 Usage: instantiate, execute "add" to add commands (with optional
124 priority), execute normally via f() calling mechanism.
126 priority), execute normally via f() calling mechanism.
125
127
126 """
128 """
127 def __init__(self,commands=None):
129 def __init__(self,commands=None):
128 if commands is None:
130 if commands is None:
129 self.chain = []
131 self.chain = []
130 else:
132 else:
131 self.chain = commands
133 self.chain = commands
132
134
133
135
134 def __call__(self,*args, **kw):
136 def __call__(self,*args, **kw):
135 """ Command chain is called just like normal func.
137 """ Command chain is called just like normal func.
136
138
137 This will call all funcs in chain with the same args as were given to this
139 This will call all funcs in chain with the same args as were given to this
138 function, and return the result of first func that didn't raise
140 function, and return the result of first func that didn't raise
139 TryNext """
141 TryNext """
140
142
141 for prio,cmd in self.chain:
143 for prio,cmd in self.chain:
142 #print "prio",prio,"cmd",cmd #dbg
144 #print "prio",prio,"cmd",cmd #dbg
143 try:
145 try:
144 ret = cmd(*args, **kw)
146 ret = cmd(*args, **kw)
145 return ret
147 return ret
146 except ipapi.TryNext, exc:
148 except ipapi.TryNext, exc:
147 if exc.args or exc.kwargs:
149 if exc.args or exc.kwargs:
148 args = exc.args
150 args = exc.args
149 kw = exc.kwargs
151 kw = exc.kwargs
150 # if no function will accept it, raise TryNext up to the caller
152 # if no function will accept it, raise TryNext up to the caller
151 raise ipapi.TryNext
153 raise ipapi.TryNext
152
154
153 def __str__(self):
155 def __str__(self):
154 return str(self.chain)
156 return str(self.chain)
155
157
156 def add(self, func, priority=0):
158 def add(self, func, priority=0):
157 """ Add a func to the cmd chain with given priority """
159 """ Add a func to the cmd chain with given priority """
158 bisect.insort(self.chain,(priority,func))
160 bisect.insort(self.chain,(priority,func))
159
161
160 def __iter__(self):
162 def __iter__(self):
161 """ Return all objects in chain.
163 """ Return all objects in chain.
162
164
163 Handy if the objects are not callable.
165 Handy if the objects are not callable.
164 """
166 """
165 return iter(self.chain)
167 return iter(self.chain)
166
168
167 def result_display(self,arg):
169 def result_display(self,arg):
168 """ Default display hook.
170 """ Default display hook.
169
171
170 Called for displaying the result to the user.
172 Called for displaying the result to the user.
171 """
173 """
172
174
173 if self.rc.pprint:
175 if self.rc.pprint:
174 out = pformat(arg)
176 out = pformat(arg)
175 if '\n' in out:
177 if '\n' in out:
176 # So that multi-line strings line up with the left column of
178 # So that multi-line strings line up with the left column of
177 # the screen, instead of having the output prompt mess up
179 # the screen, instead of having the output prompt mess up
178 # their first line.
180 # their first line.
179 Term.cout.write('\n')
181 Term.cout.write('\n')
180 print >>Term.cout, out
182 print >>Term.cout, out
181 else:
183 else:
182 # By default, the interactive prompt uses repr() to display results,
184 # By default, the interactive prompt uses repr() to display results,
183 # so we should honor this. Users who'd rather use a different
185 # so we should honor this. Users who'd rather use a different
184 # mechanism can easily override this hook.
186 # mechanism can easily override this hook.
185 print >>Term.cout, repr(arg)
187 print >>Term.cout, repr(arg)
186 # the default display hook doesn't manipulate the value to put in history
188 # the default display hook doesn't manipulate the value to put in history
187 return None
189 return None
188
190
189 def input_prefilter(self,line):
191 def input_prefilter(self,line):
190 """ Default input prefilter
192 """ Default input prefilter
191
193
192 This returns the line as unchanged, so that the interpreter
194 This returns the line as unchanged, so that the interpreter
193 knows that nothing was done and proceeds with "classic" prefiltering
195 knows that nothing was done and proceeds with "classic" prefiltering
194 (%magics, !shell commands etc.).
196 (%magics, !shell commands etc.).
195
197
196 Note that leading whitespace is not passed to this hook. Prefilter
198 Note that leading whitespace is not passed to this hook. Prefilter
197 can't alter indentation.
199 can't alter indentation.
198
200
199 """
201 """
200 #print "attempt to rewrite",line #dbg
202 #print "attempt to rewrite",line #dbg
201 return line
203 return line
202
204
203 def shutdown_hook(self):
205 def shutdown_hook(self):
204 """ default shutdown hook
206 """ default shutdown hook
205
207
206 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
208 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
207 """
209 """
208
210
209 #print "default shutdown hook ok" # dbg
211 #print "default shutdown hook ok" # dbg
210 return
212 return
211
213
212 def late_startup_hook(self):
214 def late_startup_hook(self):
213 """ Executed after ipython has been constructed and configured
215 """ Executed after ipython has been constructed and configured
214
216
215 """
217 """
216 #print "default startup hook ok" # dbg
218 #print "default startup hook ok" # dbg
217
219
218 def generate_prompt(self, is_continuation):
220 def generate_prompt(self, is_continuation):
219 """ calculate and return a string with the prompt to display """
221 """ calculate and return a string with the prompt to display """
220 ip = self.api
222 ip = self.api
221 if is_continuation:
223 if is_continuation:
222 return str(ip.IP.outputcache.prompt2)
224 return str(ip.IP.outputcache.prompt2)
223 return str(ip.IP.outputcache.prompt1)
225 return str(ip.IP.outputcache.prompt1)
224
226
225 def generate_output_prompt(self):
227 def generate_output_prompt(self):
226 ip = self.api
228 ip = self.api
227 return str(ip.IP.outputcache.prompt_out)
229 return str(ip.IP.outputcache.prompt_out)
228
230
229 def shell_hook(self,cmd):
231 def shell_hook(self,cmd):
230 """ Run system/shell command a'la os.system() """
232 """ Run system/shell command a'la os.system() """
231
233
232 shell(cmd, header=self.rc.system_header, verbose=self.rc.system_verbose)
234 shell(cmd, header=self.rc.system_header, verbose=self.rc.system_verbose)
233
235
234 def show_in_pager(self,s):
236 def show_in_pager(self,s):
235 """ Run a string through pager """
237 """ Run a string through pager """
236 # raising TryNext here will use the default paging functionality
238 # raising TryNext here will use the default paging functionality
237 raise ipapi.TryNext
239 raise ipapi.TryNext
238
240
239 def pre_prompt_hook(self):
241 def pre_prompt_hook(self):
240 """ Run before displaying the next prompt
242 """ Run before displaying the next prompt
241
243
242 Use this e.g. to display output from asynchronous operations (in order
244 Use this e.g. to display output from asynchronous operations (in order
243 to not mess up text entry)
245 to not mess up text entry)
244 """
246 """
245
247
246 return None
248 return None
247
249
248 def pre_runcode_hook(self):
250 def pre_runcode_hook(self):
249 """ Executed before running the (prefiltered) code in IPython """
251 """ Executed before running the (prefiltered) code in IPython """
250 return None
252 return None
251
252
253
254 def clipboard_get(self):
255 """ Get text from the clipboard.
256 """
257 from IPython.clipboard import (osx_clipboard_get, tkinter_clipboard_get,
258 win32_clipboard_get)
259 if sys.platform == 'win32':
260 chain = [win32_clipboard_get, tkinter_clipboard_get]
261 elif sys.platform == 'darwin':
262 chain = [osx_clipboard_get, tkinter_clipboard_get]
263 else:
264 chain = [tkinter_clipboard_get]
265 dispatcher = CommandChainDispatcher()
266 for func in chain:
267 dispatcher.add(func)
268 text = dispatcher()
269 return text
General Comments 0
You need to be logged in to leave comments. Login now