##// END OF EJS Templates
added 'quiet' option
vivainio -
Show More
@@ -1,2970 +1,2970 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 1351 2006-06-05 13:43:18Z vivainio $"""
4 $Id: Magic.py 1355 2006-06-07 16:56:50Z vivainio $"""
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 shlex
29 import shlex
30 import sys
30 import sys
31 import re
31 import re
32 import tempfile
32 import tempfile
33 import time
33 import time
34 import cPickle as pickle
34 import cPickle as pickle
35 import textwrap
35 import textwrap
36 from cStringIO import StringIO
36 from cStringIO import StringIO
37 from getopt import getopt,GetoptError
37 from getopt import getopt,GetoptError
38 from pprint import pprint, pformat
38 from pprint import pprint, pformat
39
39
40 # profile isn't bundled by default in Debian for license reasons
40 # profile isn't bundled by default in Debian for license reasons
41 try:
41 try:
42 import profile,pstats
42 import profile,pstats
43 except ImportError:
43 except ImportError:
44 profile = pstats = None
44 profile = pstats = None
45
45
46 # Homebrewed
46 # Homebrewed
47 import IPython
47 import IPython
48 from IPython import Debugger, OInspect, wildcard
48 from IPython import Debugger, OInspect, wildcard
49 from IPython.FakeModule import FakeModule
49 from IPython.FakeModule import FakeModule
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
51 from IPython.PyColorize import Parser
51 from IPython.PyColorize import Parser
52 from IPython.ipstruct import Struct
52 from IPython.ipstruct import Struct
53 from IPython.macro import Macro
53 from IPython.macro import Macro
54 from IPython.genutils import *
54 from IPython.genutils import *
55 from IPython import platutils
55 from IPython import platutils
56
56
57 #***************************************************************************
57 #***************************************************************************
58 # Utility functions
58 # Utility functions
59 def on_off(tag):
59 def on_off(tag):
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 return ['OFF','ON'][tag]
61 return ['OFF','ON'][tag]
62
62
63 class Bunch: pass
63 class Bunch: pass
64
64
65 #***************************************************************************
65 #***************************************************************************
66 # Main class implementing Magic functionality
66 # Main class implementing Magic functionality
67 class Magic:
67 class Magic:
68 """Magic functions for InteractiveShell.
68 """Magic functions for InteractiveShell.
69
69
70 Shell functions which can be reached as %function_name. All magic
70 Shell functions which can be reached as %function_name. All magic
71 functions should accept a string, which they can parse for their own
71 functions should accept a string, which they can parse for their own
72 needs. This can make some functions easier to type, eg `%cd ../`
72 needs. This can make some functions easier to type, eg `%cd ../`
73 vs. `%cd("../")`
73 vs. `%cd("../")`
74
74
75 ALL definitions MUST begin with the prefix magic_. The user won't need it
75 ALL definitions MUST begin with the prefix magic_. The user won't need it
76 at the command line, but it is is needed in the definition. """
76 at the command line, but it is is needed in the definition. """
77
77
78 # class globals
78 # class globals
79 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
79 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
80 'Automagic is ON, % prefix NOT needed for magic functions.']
80 'Automagic is ON, % prefix NOT needed for magic functions.']
81
81
82 #......................................................................
82 #......................................................................
83 # some utility functions
83 # some utility functions
84
84
85 def __init__(self,shell):
85 def __init__(self,shell):
86
86
87 self.options_table = {}
87 self.options_table = {}
88 if profile is None:
88 if profile is None:
89 self.magic_prun = self.profile_missing_notice
89 self.magic_prun = self.profile_missing_notice
90 self.shell = shell
90 self.shell = shell
91
91
92 # namespace for holding state we may need
92 # namespace for holding state we may need
93 self._magic_state = Bunch()
93 self._magic_state = Bunch()
94
94
95 def profile_missing_notice(self, *args, **kwargs):
95 def profile_missing_notice(self, *args, **kwargs):
96 error("""\
96 error("""\
97 The profile module could not be found. If you are a Debian user,
97 The profile module could not be found. If you are a Debian user,
98 it has been removed from the standard Debian package because of its non-free
98 it has been removed from the standard Debian package because of its non-free
99 license. To use profiling, please install"python2.3-profiler" from non-free.""")
99 license. To use profiling, please install"python2.3-profiler" from non-free.""")
100
100
101 def default_option(self,fn,optstr):
101 def default_option(self,fn,optstr):
102 """Make an entry in the options_table for fn, with value optstr"""
102 """Make an entry in the options_table for fn, with value optstr"""
103
103
104 if fn not in self.lsmagic():
104 if fn not in self.lsmagic():
105 error("%s is not a magic function" % fn)
105 error("%s is not a magic function" % fn)
106 self.options_table[fn] = optstr
106 self.options_table[fn] = optstr
107
107
108 def lsmagic(self):
108 def lsmagic(self):
109 """Return a list of currently available magic functions.
109 """Return a list of currently available magic functions.
110
110
111 Gives a list of the bare names after mangling (['ls','cd', ...], not
111 Gives a list of the bare names after mangling (['ls','cd', ...], not
112 ['magic_ls','magic_cd',...]"""
112 ['magic_ls','magic_cd',...]"""
113
113
114 # FIXME. This needs a cleanup, in the way the magics list is built.
114 # FIXME. This needs a cleanup, in the way the magics list is built.
115
115
116 # magics in class definition
116 # magics in class definition
117 class_magic = lambda fn: fn.startswith('magic_') and \
117 class_magic = lambda fn: fn.startswith('magic_') and \
118 callable(Magic.__dict__[fn])
118 callable(Magic.__dict__[fn])
119 # in instance namespace (run-time user additions)
119 # in instance namespace (run-time user additions)
120 inst_magic = lambda fn: fn.startswith('magic_') and \
120 inst_magic = lambda fn: fn.startswith('magic_') and \
121 callable(self.__dict__[fn])
121 callable(self.__dict__[fn])
122 # and bound magics by user (so they can access self):
122 # and bound magics by user (so they can access self):
123 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
123 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
124 callable(self.__class__.__dict__[fn])
124 callable(self.__class__.__dict__[fn])
125 magics = filter(class_magic,Magic.__dict__.keys()) + \
125 magics = filter(class_magic,Magic.__dict__.keys()) + \
126 filter(inst_magic,self.__dict__.keys()) + \
126 filter(inst_magic,self.__dict__.keys()) + \
127 filter(inst_bound_magic,self.__class__.__dict__.keys())
127 filter(inst_bound_magic,self.__class__.__dict__.keys())
128 out = []
128 out = []
129 for fn in magics:
129 for fn in magics:
130 out.append(fn.replace('magic_','',1))
130 out.append(fn.replace('magic_','',1))
131 out.sort()
131 out.sort()
132 return out
132 return out
133
133
134 def extract_input_slices(self,slices,raw=False):
134 def extract_input_slices(self,slices,raw=False):
135 """Return as a string a set of input history slices.
135 """Return as a string a set of input history slices.
136
136
137 Inputs:
137 Inputs:
138
138
139 - slices: the set of slices is given as a list of strings (like
139 - slices: the set of slices is given as a list of strings (like
140 ['1','4:8','9'], since this function is for use by magic functions
140 ['1','4:8','9'], since this function is for use by magic functions
141 which get their arguments as strings.
141 which get their arguments as strings.
142
142
143 Optional inputs:
143 Optional inputs:
144
144
145 - raw(False): by default, the processed input is used. If this is
145 - raw(False): by default, the processed input is used. If this is
146 true, the raw input history is used instead.
146 true, the raw input history is used instead.
147
147
148 Note that slices can be called with two notations:
148 Note that slices can be called with two notations:
149
149
150 N:M -> standard python form, means including items N...(M-1).
150 N:M -> standard python form, means including items N...(M-1).
151
151
152 N-M -> include items N..M (closed endpoint)."""
152 N-M -> include items N..M (closed endpoint)."""
153
153
154 if raw:
154 if raw:
155 hist = self.shell.input_hist_raw
155 hist = self.shell.input_hist_raw
156 else:
156 else:
157 hist = self.shell.input_hist
157 hist = self.shell.input_hist
158
158
159 cmds = []
159 cmds = []
160 for chunk in slices:
160 for chunk in slices:
161 if ':' in chunk:
161 if ':' in chunk:
162 ini,fin = map(int,chunk.split(':'))
162 ini,fin = map(int,chunk.split(':'))
163 elif '-' in chunk:
163 elif '-' in chunk:
164 ini,fin = map(int,chunk.split('-'))
164 ini,fin = map(int,chunk.split('-'))
165 fin += 1
165 fin += 1
166 else:
166 else:
167 ini = int(chunk)
167 ini = int(chunk)
168 fin = ini+1
168 fin = ini+1
169 cmds.append(hist[ini:fin])
169 cmds.append(hist[ini:fin])
170 return cmds
170 return cmds
171
171
172 def _ofind(self,oname):
172 def _ofind(self,oname):
173 """Find an object in the available namespaces.
173 """Find an object in the available namespaces.
174
174
175 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
175 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
176
176
177 Has special code to detect magic functions.
177 Has special code to detect magic functions.
178 """
178 """
179
179
180 oname = oname.strip()
180 oname = oname.strip()
181
181
182 # Namespaces to search in:
182 # Namespaces to search in:
183 user_ns = self.shell.user_ns
183 user_ns = self.shell.user_ns
184 internal_ns = self.shell.internal_ns
184 internal_ns = self.shell.internal_ns
185 builtin_ns = __builtin__.__dict__
185 builtin_ns = __builtin__.__dict__
186 alias_ns = self.shell.alias_table
186 alias_ns = self.shell.alias_table
187
187
188 # Put them in a list. The order is important so that we find things in
188 # Put them in a list. The order is important so that we find things in
189 # the same order that Python finds them.
189 # the same order that Python finds them.
190 namespaces = [ ('Interactive',user_ns),
190 namespaces = [ ('Interactive',user_ns),
191 ('IPython internal',internal_ns),
191 ('IPython internal',internal_ns),
192 ('Python builtin',builtin_ns),
192 ('Python builtin',builtin_ns),
193 ('Alias',alias_ns),
193 ('Alias',alias_ns),
194 ]
194 ]
195
195
196 # initialize results to 'null'
196 # initialize results to 'null'
197 found = 0; obj = None; ospace = None; ds = None;
197 found = 0; obj = None; ospace = None; ds = None;
198 ismagic = 0; isalias = 0
198 ismagic = 0; isalias = 0
199
199
200 # Look for the given name by splitting it in parts. If the head is
200 # Look for the given name by splitting it in parts. If the head is
201 # found, then we look for all the remaining parts as members, and only
201 # found, then we look for all the remaining parts as members, and only
202 # declare success if we can find them all.
202 # declare success if we can find them all.
203 oname_parts = oname.split('.')
203 oname_parts = oname.split('.')
204 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
204 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
205 for nsname,ns in namespaces:
205 for nsname,ns in namespaces:
206 try:
206 try:
207 obj = ns[oname_head]
207 obj = ns[oname_head]
208 except KeyError:
208 except KeyError:
209 continue
209 continue
210 else:
210 else:
211 for part in oname_rest:
211 for part in oname_rest:
212 try:
212 try:
213 obj = getattr(obj,part)
213 obj = getattr(obj,part)
214 except:
214 except:
215 # Blanket except b/c some badly implemented objects
215 # Blanket except b/c some badly implemented objects
216 # allow __getattr__ to raise exceptions other than
216 # allow __getattr__ to raise exceptions other than
217 # AttributeError, which then crashes IPython.
217 # AttributeError, which then crashes IPython.
218 break
218 break
219 else:
219 else:
220 # If we finish the for loop (no break), we got all members
220 # If we finish the for loop (no break), we got all members
221 found = 1
221 found = 1
222 ospace = nsname
222 ospace = nsname
223 if ns == alias_ns:
223 if ns == alias_ns:
224 isalias = 1
224 isalias = 1
225 break # namespace loop
225 break # namespace loop
226
226
227 # Try to see if it's magic
227 # Try to see if it's magic
228 if not found:
228 if not found:
229 if oname.startswith(self.shell.ESC_MAGIC):
229 if oname.startswith(self.shell.ESC_MAGIC):
230 oname = oname[1:]
230 oname = oname[1:]
231 obj = getattr(self,'magic_'+oname,None)
231 obj = getattr(self,'magic_'+oname,None)
232 if obj is not None:
232 if obj is not None:
233 found = 1
233 found = 1
234 ospace = 'IPython internal'
234 ospace = 'IPython internal'
235 ismagic = 1
235 ismagic = 1
236
236
237 # Last try: special-case some literals like '', [], {}, etc:
237 # Last try: special-case some literals like '', [], {}, etc:
238 if not found and oname_head in ["''",'""','[]','{}','()']:
238 if not found and oname_head in ["''",'""','[]','{}','()']:
239 obj = eval(oname_head)
239 obj = eval(oname_head)
240 found = 1
240 found = 1
241 ospace = 'Interactive'
241 ospace = 'Interactive'
242
242
243 return {'found':found, 'obj':obj, 'namespace':ospace,
243 return {'found':found, 'obj':obj, 'namespace':ospace,
244 'ismagic':ismagic, 'isalias':isalias}
244 'ismagic':ismagic, 'isalias':isalias}
245
245
246 def arg_err(self,func):
246 def arg_err(self,func):
247 """Print docstring if incorrect arguments were passed"""
247 """Print docstring if incorrect arguments were passed"""
248 print 'Error in arguments:'
248 print 'Error in arguments:'
249 print OInspect.getdoc(func)
249 print OInspect.getdoc(func)
250
250
251 def format_latex(self,strng):
251 def format_latex(self,strng):
252 """Format a string for latex inclusion."""
252 """Format a string for latex inclusion."""
253
253
254 # Characters that need to be escaped for latex:
254 # Characters that need to be escaped for latex:
255 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
255 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
256 # Magic command names as headers:
256 # Magic command names as headers:
257 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
257 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
258 re.MULTILINE)
258 re.MULTILINE)
259 # Magic commands
259 # Magic commands
260 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
260 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
261 re.MULTILINE)
261 re.MULTILINE)
262 # Paragraph continue
262 # Paragraph continue
263 par_re = re.compile(r'\\$',re.MULTILINE)
263 par_re = re.compile(r'\\$',re.MULTILINE)
264
264
265 # The "\n" symbol
265 # The "\n" symbol
266 newline_re = re.compile(r'\\n')
266 newline_re = re.compile(r'\\n')
267
267
268 # Now build the string for output:
268 # Now build the string for output:
269 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
269 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
270 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
270 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
271 strng)
271 strng)
272 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
272 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
273 strng = par_re.sub(r'\\\\',strng)
273 strng = par_re.sub(r'\\\\',strng)
274 strng = escape_re.sub(r'\\\1',strng)
274 strng = escape_re.sub(r'\\\1',strng)
275 strng = newline_re.sub(r'\\textbackslash{}n',strng)
275 strng = newline_re.sub(r'\\textbackslash{}n',strng)
276 return strng
276 return strng
277
277
278 def format_screen(self,strng):
278 def format_screen(self,strng):
279 """Format a string for screen printing.
279 """Format a string for screen printing.
280
280
281 This removes some latex-type format codes."""
281 This removes some latex-type format codes."""
282 # Paragraph continue
282 # Paragraph continue
283 par_re = re.compile(r'\\$',re.MULTILINE)
283 par_re = re.compile(r'\\$',re.MULTILINE)
284 strng = par_re.sub('',strng)
284 strng = par_re.sub('',strng)
285 return strng
285 return strng
286
286
287 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
287 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
288 """Parse options passed to an argument string.
288 """Parse options passed to an argument string.
289
289
290 The interface is similar to that of getopt(), but it returns back a
290 The interface is similar to that of getopt(), but it returns back a
291 Struct with the options as keys and the stripped argument string still
291 Struct with the options as keys and the stripped argument string still
292 as a string.
292 as a string.
293
293
294 arg_str is quoted as a true sys.argv vector by using shlex.split.
294 arg_str is quoted as a true sys.argv vector by using shlex.split.
295 This allows us to easily expand variables, glob files, quote
295 This allows us to easily expand variables, glob files, quote
296 arguments, etc.
296 arguments, etc.
297
297
298 Options:
298 Options:
299 -mode: default 'string'. If given as 'list', the argument string is
299 -mode: default 'string'. If given as 'list', the argument string is
300 returned as a list (split on whitespace) instead of a string.
300 returned as a list (split on whitespace) instead of a string.
301
301
302 -list_all: put all option values in lists. Normally only options
302 -list_all: put all option values in lists. Normally only options
303 appearing more than once are put in a list."""
303 appearing more than once are put in a list."""
304
304
305 # inject default options at the beginning of the input line
305 # inject default options at the beginning of the input line
306 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
306 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
307 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
307 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
308
308
309 mode = kw.get('mode','string')
309 mode = kw.get('mode','string')
310 if mode not in ['string','list']:
310 if mode not in ['string','list']:
311 raise ValueError,'incorrect mode given: %s' % mode
311 raise ValueError,'incorrect mode given: %s' % mode
312 # Get options
312 # Get options
313 list_all = kw.get('list_all',0)
313 list_all = kw.get('list_all',0)
314
314
315 # Check if we have more than one argument to warrant extra processing:
315 # Check if we have more than one argument to warrant extra processing:
316 odict = {} # Dictionary with options
316 odict = {} # Dictionary with options
317 args = arg_str.split()
317 args = arg_str.split()
318 if len(args) >= 1:
318 if len(args) >= 1:
319 # If the list of inputs only has 0 or 1 thing in it, there's no
319 # If the list of inputs only has 0 or 1 thing in it, there's no
320 # need to look for options
320 # need to look for options
321 argv = shlex.split(arg_str)
321 argv = shlex.split(arg_str)
322 # Do regular option processing
322 # Do regular option processing
323 try:
323 try:
324 opts,args = getopt(argv,opt_str,*long_opts)
324 opts,args = getopt(argv,opt_str,*long_opts)
325 except GetoptError,e:
325 except GetoptError,e:
326 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
326 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
327 " ".join(long_opts)))
327 " ".join(long_opts)))
328 for o,a in opts:
328 for o,a in opts:
329 if o.startswith('--'):
329 if o.startswith('--'):
330 o = o[2:]
330 o = o[2:]
331 else:
331 else:
332 o = o[1:]
332 o = o[1:]
333 try:
333 try:
334 odict[o].append(a)
334 odict[o].append(a)
335 except AttributeError:
335 except AttributeError:
336 odict[o] = [odict[o],a]
336 odict[o] = [odict[o],a]
337 except KeyError:
337 except KeyError:
338 if list_all:
338 if list_all:
339 odict[o] = [a]
339 odict[o] = [a]
340 else:
340 else:
341 odict[o] = a
341 odict[o] = a
342
342
343 # Prepare opts,args for return
343 # Prepare opts,args for return
344 opts = Struct(odict)
344 opts = Struct(odict)
345 if mode == 'string':
345 if mode == 'string':
346 args = ' '.join(args)
346 args = ' '.join(args)
347
347
348 return opts,args
348 return opts,args
349
349
350 #......................................................................
350 #......................................................................
351 # And now the actual magic functions
351 # And now the actual magic functions
352
352
353 # Functions for IPython shell work (vars,funcs, config, etc)
353 # Functions for IPython shell work (vars,funcs, config, etc)
354 def magic_lsmagic(self, parameter_s = ''):
354 def magic_lsmagic(self, parameter_s = ''):
355 """List currently available magic functions."""
355 """List currently available magic functions."""
356 mesc = self.shell.ESC_MAGIC
356 mesc = self.shell.ESC_MAGIC
357 print 'Available magic functions:\n'+mesc+\
357 print 'Available magic functions:\n'+mesc+\
358 (' '+mesc).join(self.lsmagic())
358 (' '+mesc).join(self.lsmagic())
359 print '\n' + Magic.auto_status[self.shell.rc.automagic]
359 print '\n' + Magic.auto_status[self.shell.rc.automagic]
360 return None
360 return None
361
361
362 def magic_magic(self, parameter_s = ''):
362 def magic_magic(self, parameter_s = ''):
363 """Print information about the magic function system."""
363 """Print information about the magic function system."""
364
364
365 mode = ''
365 mode = ''
366 try:
366 try:
367 if parameter_s.split()[0] == '-latex':
367 if parameter_s.split()[0] == '-latex':
368 mode = 'latex'
368 mode = 'latex'
369 if parameter_s.split()[0] == '-brief':
369 if parameter_s.split()[0] == '-brief':
370 mode = 'brief'
370 mode = 'brief'
371 except:
371 except:
372 pass
372 pass
373
373
374 magic_docs = []
374 magic_docs = []
375 for fname in self.lsmagic():
375 for fname in self.lsmagic():
376 mname = 'magic_' + fname
376 mname = 'magic_' + fname
377 for space in (Magic,self,self.__class__):
377 for space in (Magic,self,self.__class__):
378 try:
378 try:
379 fn = space.__dict__[mname]
379 fn = space.__dict__[mname]
380 except KeyError:
380 except KeyError:
381 pass
381 pass
382 else:
382 else:
383 break
383 break
384 if mode == 'brief':
384 if mode == 'brief':
385 # only first line
385 # only first line
386 fndoc = fn.__doc__.split('\n',1)[0]
386 fndoc = fn.__doc__.split('\n',1)[0]
387 else:
387 else:
388 fndoc = fn.__doc__
388 fndoc = fn.__doc__
389
389
390 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
390 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
391 fname,fndoc))
391 fname,fndoc))
392 magic_docs = ''.join(magic_docs)
392 magic_docs = ''.join(magic_docs)
393
393
394 if mode == 'latex':
394 if mode == 'latex':
395 print self.format_latex(magic_docs)
395 print self.format_latex(magic_docs)
396 return
396 return
397 else:
397 else:
398 magic_docs = self.format_screen(magic_docs)
398 magic_docs = self.format_screen(magic_docs)
399 if mode == 'brief':
399 if mode == 'brief':
400 return magic_docs
400 return magic_docs
401
401
402 outmsg = """
402 outmsg = """
403 IPython's 'magic' functions
403 IPython's 'magic' functions
404 ===========================
404 ===========================
405
405
406 The magic function system provides a series of functions which allow you to
406 The magic function system provides a series of functions which allow you to
407 control the behavior of IPython itself, plus a lot of system-type
407 control the behavior of IPython itself, plus a lot of system-type
408 features. All these functions are prefixed with a % character, but parameters
408 features. All these functions are prefixed with a % character, but parameters
409 are given without parentheses or quotes.
409 are given without parentheses or quotes.
410
410
411 NOTE: If you have 'automagic' enabled (via the command line option or with the
411 NOTE: If you have 'automagic' enabled (via the command line option or with the
412 %automagic function), you don't need to type in the % explicitly. By default,
412 %automagic function), you don't need to type in the % explicitly. By default,
413 IPython ships with automagic on, so you should only rarely need the % escape.
413 IPython ships with automagic on, so you should only rarely need the % escape.
414
414
415 Example: typing '%cd mydir' (without the quotes) changes you working directory
415 Example: typing '%cd mydir' (without the quotes) changes you working directory
416 to 'mydir', if it exists.
416 to 'mydir', if it exists.
417
417
418 You can define your own magic functions to extend the system. See the supplied
418 You can define your own magic functions to extend the system. See the supplied
419 ipythonrc and example-magic.py files for details (in your ipython
419 ipythonrc and example-magic.py files for details (in your ipython
420 configuration directory, typically $HOME/.ipython/).
420 configuration directory, typically $HOME/.ipython/).
421
421
422 You can also define your own aliased names for magic functions. In your
422 You can also define your own aliased names for magic functions. In your
423 ipythonrc file, placing a line like:
423 ipythonrc file, placing a line like:
424
424
425 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
425 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
426
426
427 will define %pf as a new name for %profile.
427 will define %pf as a new name for %profile.
428
428
429 You can also call magics in code using the ipmagic() function, which IPython
429 You can also call magics in code using the ipmagic() function, which IPython
430 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
430 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
431
431
432 For a list of the available magic functions, use %lsmagic. For a description
432 For a list of the available magic functions, use %lsmagic. For a description
433 of any of them, type %magic_name?, e.g. '%cd?'.
433 of any of them, type %magic_name?, e.g. '%cd?'.
434
434
435 Currently the magic system has the following functions:\n"""
435 Currently the magic system has the following functions:\n"""
436
436
437 mesc = self.shell.ESC_MAGIC
437 mesc = self.shell.ESC_MAGIC
438 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
438 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
439 "\n\n%s%s\n\n%s" % (outmsg,
439 "\n\n%s%s\n\n%s" % (outmsg,
440 magic_docs,mesc,mesc,
440 magic_docs,mesc,mesc,
441 (' '+mesc).join(self.lsmagic()),
441 (' '+mesc).join(self.lsmagic()),
442 Magic.auto_status[self.shell.rc.automagic] ) )
442 Magic.auto_status[self.shell.rc.automagic] ) )
443
443
444 page(outmsg,screen_lines=self.shell.rc.screen_length)
444 page(outmsg,screen_lines=self.shell.rc.screen_length)
445
445
446 def magic_automagic(self, parameter_s = ''):
446 def magic_automagic(self, parameter_s = ''):
447 """Make magic functions callable without having to type the initial %.
447 """Make magic functions callable without having to type the initial %.
448
448
449 Toggles on/off (when off, you must call it as %automagic, of
449 Toggles on/off (when off, you must call it as %automagic, of
450 course). Note that magic functions have lowest priority, so if there's
450 course). Note that magic functions have lowest priority, so if there's
451 a variable whose name collides with that of a magic fn, automagic
451 a variable whose name collides with that of a magic fn, automagic
452 won't work for that function (you get the variable instead). However,
452 won't work for that function (you get the variable instead). However,
453 if you delete the variable (del var), the previously shadowed magic
453 if you delete the variable (del var), the previously shadowed magic
454 function becomes visible to automagic again."""
454 function becomes visible to automagic again."""
455
455
456 rc = self.shell.rc
456 rc = self.shell.rc
457 rc.automagic = not rc.automagic
457 rc.automagic = not rc.automagic
458 print '\n' + Magic.auto_status[rc.automagic]
458 print '\n' + Magic.auto_status[rc.automagic]
459
459
460 def magic_autocall(self, parameter_s = ''):
460 def magic_autocall(self, parameter_s = ''):
461 """Make functions callable without having to type parentheses.
461 """Make functions callable without having to type parentheses.
462
462
463 Usage:
463 Usage:
464
464
465 %autocall [mode]
465 %autocall [mode]
466
466
467 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
467 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
468 value is toggled on and off (remembering the previous state)."""
468 value is toggled on and off (remembering the previous state)."""
469
469
470 rc = self.shell.rc
470 rc = self.shell.rc
471
471
472 if parameter_s:
472 if parameter_s:
473 arg = int(parameter_s)
473 arg = int(parameter_s)
474 else:
474 else:
475 arg = 'toggle'
475 arg = 'toggle'
476
476
477 if not arg in (0,1,2,'toggle'):
477 if not arg in (0,1,2,'toggle'):
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
479 return
479 return
480
480
481 if arg in (0,1,2):
481 if arg in (0,1,2):
482 rc.autocall = arg
482 rc.autocall = arg
483 else: # toggle
483 else: # toggle
484 if rc.autocall:
484 if rc.autocall:
485 self._magic_state.autocall_save = rc.autocall
485 self._magic_state.autocall_save = rc.autocall
486 rc.autocall = 0
486 rc.autocall = 0
487 else:
487 else:
488 try:
488 try:
489 rc.autocall = self._magic_state.autocall_save
489 rc.autocall = self._magic_state.autocall_save
490 except AttributeError:
490 except AttributeError:
491 rc.autocall = self._magic_state.autocall_save = 1
491 rc.autocall = self._magic_state.autocall_save = 1
492
492
493 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
493 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
494
494
495 def magic_autoindent(self, parameter_s = ''):
495 def magic_autoindent(self, parameter_s = ''):
496 """Toggle autoindent on/off (if available)."""
496 """Toggle autoindent on/off (if available)."""
497
497
498 self.shell.set_autoindent()
498 self.shell.set_autoindent()
499 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
499 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
500
500
501 def magic_system_verbose(self, parameter_s = ''):
501 def magic_system_verbose(self, parameter_s = ''):
502 """Toggle verbose printing of system calls on/off."""
502 """Toggle verbose printing of system calls on/off."""
503
503
504 self.shell.rc_set_toggle('system_verbose')
504 self.shell.rc_set_toggle('system_verbose')
505 print "System verbose printing is:",\
505 print "System verbose printing is:",\
506 ['OFF','ON'][self.shell.rc.system_verbose]
506 ['OFF','ON'][self.shell.rc.system_verbose]
507
507
508 def magic_history(self, parameter_s = ''):
508 def magic_history(self, parameter_s = ''):
509 """Print input history (_i<n> variables), with most recent last.
509 """Print input history (_i<n> variables), with most recent last.
510
510
511 %history -> print at most 40 inputs (some may be multi-line)\\
511 %history -> print at most 40 inputs (some may be multi-line)\\
512 %history n -> print at most n inputs\\
512 %history n -> print at most n inputs\\
513 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
513 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
514
514
515 Each input's number <n> is shown, and is accessible as the
515 Each input's number <n> is shown, and is accessible as the
516 automatically generated variable _i<n>. Multi-line statements are
516 automatically generated variable _i<n>. Multi-line statements are
517 printed starting at a new line for easy copy/paste.
517 printed starting at a new line for easy copy/paste.
518
518
519
519
520 Options:
520 Options:
521
521
522 -n: do NOT print line numbers. This is useful if you want to get a
522 -n: do NOT print line numbers. This is useful if you want to get a
523 printout of many lines which can be directly pasted into a text
523 printout of many lines which can be directly pasted into a text
524 editor.
524 editor.
525
525
526 This feature is only available if numbered prompts are in use.
526 This feature is only available if numbered prompts are in use.
527
527
528 -r: print the 'raw' history. IPython filters your input and
528 -r: print the 'raw' history. IPython filters your input and
529 converts it all into valid Python source before executing it (things
529 converts it all into valid Python source before executing it (things
530 like magics or aliases are turned into function calls, for
530 like magics or aliases are turned into function calls, for
531 example). With this option, you'll see the unfiltered history
531 example). With this option, you'll see the unfiltered history
532 instead of the filtered version: '%cd /' will be seen as '%cd /'
532 instead of the filtered version: '%cd /' will be seen as '%cd /'
533 instead of '_ip.magic("%cd /")'.
533 instead of '_ip.magic("%cd /")'.
534 """
534 """
535
535
536 shell = self.shell
536 shell = self.shell
537 if not shell.outputcache.do_full_cache:
537 if not shell.outputcache.do_full_cache:
538 print 'This feature is only available if numbered prompts are in use.'
538 print 'This feature is only available if numbered prompts are in use.'
539 return
539 return
540 opts,args = self.parse_options(parameter_s,'nr',mode='list')
540 opts,args = self.parse_options(parameter_s,'nr',mode='list')
541
541
542 if opts.has_key('r'):
542 if opts.has_key('r'):
543 input_hist = shell.input_hist_raw
543 input_hist = shell.input_hist_raw
544 else:
544 else:
545 input_hist = shell.input_hist
545 input_hist = shell.input_hist
546
546
547 default_length = 40
547 default_length = 40
548 if len(args) == 0:
548 if len(args) == 0:
549 final = len(input_hist)
549 final = len(input_hist)
550 init = max(1,final-default_length)
550 init = max(1,final-default_length)
551 elif len(args) == 1:
551 elif len(args) == 1:
552 final = len(input_hist)
552 final = len(input_hist)
553 init = max(1,final-int(args[0]))
553 init = max(1,final-int(args[0]))
554 elif len(args) == 2:
554 elif len(args) == 2:
555 init,final = map(int,args)
555 init,final = map(int,args)
556 else:
556 else:
557 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
557 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
558 print self.magic_hist.__doc__
558 print self.magic_hist.__doc__
559 return
559 return
560 width = len(str(final))
560 width = len(str(final))
561 line_sep = ['','\n']
561 line_sep = ['','\n']
562 print_nums = not opts.has_key('n')
562 print_nums = not opts.has_key('n')
563 for in_num in range(init,final):
563 for in_num in range(init,final):
564 inline = input_hist[in_num]
564 inline = input_hist[in_num]
565 multiline = int(inline.count('\n') > 1)
565 multiline = int(inline.count('\n') > 1)
566 if print_nums:
566 if print_nums:
567 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
567 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
568 print inline,
568 print inline,
569
569
570 def magic_hist(self, parameter_s=''):
570 def magic_hist(self, parameter_s=''):
571 """Alternate name for %history."""
571 """Alternate name for %history."""
572 return self.magic_history(parameter_s)
572 return self.magic_history(parameter_s)
573
573
574 def magic_p(self, parameter_s=''):
574 def magic_p(self, parameter_s=''):
575 """Just a short alias for Python's 'print'."""
575 """Just a short alias for Python's 'print'."""
576 exec 'print ' + parameter_s in self.shell.user_ns
576 exec 'print ' + parameter_s in self.shell.user_ns
577
577
578 def magic_r(self, parameter_s=''):
578 def magic_r(self, parameter_s=''):
579 """Repeat previous input.
579 """Repeat previous input.
580
580
581 If given an argument, repeats the previous command which starts with
581 If given an argument, repeats the previous command which starts with
582 the same string, otherwise it just repeats the previous input.
582 the same string, otherwise it just repeats the previous input.
583
583
584 Shell escaped commands (with ! as first character) are not recognized
584 Shell escaped commands (with ! as first character) are not recognized
585 by this system, only pure python code and magic commands.
585 by this system, only pure python code and magic commands.
586 """
586 """
587
587
588 start = parameter_s.strip()
588 start = parameter_s.strip()
589 esc_magic = self.shell.ESC_MAGIC
589 esc_magic = self.shell.ESC_MAGIC
590 # Identify magic commands even if automagic is on (which means
590 # Identify magic commands even if automagic is on (which means
591 # the in-memory version is different from that typed by the user).
591 # the in-memory version is different from that typed by the user).
592 if self.shell.rc.automagic:
592 if self.shell.rc.automagic:
593 start_magic = esc_magic+start
593 start_magic = esc_magic+start
594 else:
594 else:
595 start_magic = start
595 start_magic = start
596 # Look through the input history in reverse
596 # Look through the input history in reverse
597 for n in range(len(self.shell.input_hist)-2,0,-1):
597 for n in range(len(self.shell.input_hist)-2,0,-1):
598 input = self.shell.input_hist[n]
598 input = self.shell.input_hist[n]
599 # skip plain 'r' lines so we don't recurse to infinity
599 # skip plain 'r' lines so we don't recurse to infinity
600 if input != '_ip.magic("r")\n' and \
600 if input != '_ip.magic("r")\n' and \
601 (input.startswith(start) or input.startswith(start_magic)):
601 (input.startswith(start) or input.startswith(start_magic)):
602 #print 'match',`input` # dbg
602 #print 'match',`input` # dbg
603 print 'Executing:',input,
603 print 'Executing:',input,
604 self.shell.runlines(input)
604 self.shell.runlines(input)
605 return
605 return
606 print 'No previous input matching `%s` found.' % start
606 print 'No previous input matching `%s` found.' % start
607
607
608 def magic_page(self, parameter_s=''):
608 def magic_page(self, parameter_s=''):
609 """Pretty print the object and display it through a pager.
609 """Pretty print the object and display it through a pager.
610
610
611 If no parameter is given, use _ (last output)."""
611 If no parameter is given, use _ (last output)."""
612 # After a function contributed by Olivier Aubert, slightly modified.
612 # After a function contributed by Olivier Aubert, slightly modified.
613
613
614 oname = parameter_s and parameter_s or '_'
614 oname = parameter_s and parameter_s or '_'
615 info = self._ofind(oname)
615 info = self._ofind(oname)
616 if info['found']:
616 if info['found']:
617 page(pformat(info['obj']))
617 page(pformat(info['obj']))
618 else:
618 else:
619 print 'Object `%s` not found' % oname
619 print 'Object `%s` not found' % oname
620
620
621 def magic_profile(self, parameter_s=''):
621 def magic_profile(self, parameter_s=''):
622 """Print your currently active IPyhton profile."""
622 """Print your currently active IPyhton profile."""
623 if self.shell.rc.profile:
623 if self.shell.rc.profile:
624 printpl('Current IPython profile: $self.shell.rc.profile.')
624 printpl('Current IPython profile: $self.shell.rc.profile.')
625 else:
625 else:
626 print 'No profile active.'
626 print 'No profile active.'
627
627
628 def _inspect(self,meth,oname,**kw):
628 def _inspect(self,meth,oname,**kw):
629 """Generic interface to the inspector system.
629 """Generic interface to the inspector system.
630
630
631 This function is meant to be called by pdef, pdoc & friends."""
631 This function is meant to be called by pdef, pdoc & friends."""
632
632
633 oname = oname.strip()
633 oname = oname.strip()
634 info = Struct(self._ofind(oname))
634 info = Struct(self._ofind(oname))
635 if info.found:
635 if info.found:
636 pmethod = getattr(self.shell.inspector,meth)
636 pmethod = getattr(self.shell.inspector,meth)
637 formatter = info.ismagic and self.format_screen or None
637 formatter = info.ismagic and self.format_screen or None
638 if meth == 'pdoc':
638 if meth == 'pdoc':
639 pmethod(info.obj,oname,formatter)
639 pmethod(info.obj,oname,formatter)
640 elif meth == 'pinfo':
640 elif meth == 'pinfo':
641 pmethod(info.obj,oname,formatter,info,**kw)
641 pmethod(info.obj,oname,formatter,info,**kw)
642 else:
642 else:
643 pmethod(info.obj,oname)
643 pmethod(info.obj,oname)
644 else:
644 else:
645 print 'Object `%s` not found.' % oname
645 print 'Object `%s` not found.' % oname
646 return 'not found' # so callers can take other action
646 return 'not found' # so callers can take other action
647
647
648 def magic_pdef(self, parameter_s=''):
648 def magic_pdef(self, parameter_s=''):
649 """Print the definition header for any callable object.
649 """Print the definition header for any callable object.
650
650
651 If the object is a class, print the constructor information."""
651 If the object is a class, print the constructor information."""
652 self._inspect('pdef',parameter_s)
652 self._inspect('pdef',parameter_s)
653
653
654 def magic_pdoc(self, parameter_s=''):
654 def magic_pdoc(self, parameter_s=''):
655 """Print the docstring for an object.
655 """Print the docstring for an object.
656
656
657 If the given object is a class, it will print both the class and the
657 If the given object is a class, it will print both the class and the
658 constructor docstrings."""
658 constructor docstrings."""
659 self._inspect('pdoc',parameter_s)
659 self._inspect('pdoc',parameter_s)
660
660
661 def magic_psource(self, parameter_s=''):
661 def magic_psource(self, parameter_s=''):
662 """Print (or run through pager) the source code for an object."""
662 """Print (or run through pager) the source code for an object."""
663 self._inspect('psource',parameter_s)
663 self._inspect('psource',parameter_s)
664
664
665 def magic_pfile(self, parameter_s=''):
665 def magic_pfile(self, parameter_s=''):
666 """Print (or run through pager) the file where an object is defined.
666 """Print (or run through pager) the file where an object is defined.
667
667
668 The file opens at the line where the object definition begins. IPython
668 The file opens at the line where the object definition begins. IPython
669 will honor the environment variable PAGER if set, and otherwise will
669 will honor the environment variable PAGER if set, and otherwise will
670 do its best to print the file in a convenient form.
670 do its best to print the file in a convenient form.
671
671
672 If the given argument is not an object currently defined, IPython will
672 If the given argument is not an object currently defined, IPython will
673 try to interpret it as a filename (automatically adding a .py extension
673 try to interpret it as a filename (automatically adding a .py extension
674 if needed). You can thus use %pfile as a syntax highlighting code
674 if needed). You can thus use %pfile as a syntax highlighting code
675 viewer."""
675 viewer."""
676
676
677 # first interpret argument as an object name
677 # first interpret argument as an object name
678 out = self._inspect('pfile',parameter_s)
678 out = self._inspect('pfile',parameter_s)
679 # if not, try the input as a filename
679 # if not, try the input as a filename
680 if out == 'not found':
680 if out == 'not found':
681 try:
681 try:
682 filename = get_py_filename(parameter_s)
682 filename = get_py_filename(parameter_s)
683 except IOError,msg:
683 except IOError,msg:
684 print msg
684 print msg
685 return
685 return
686 page(self.shell.inspector.format(file(filename).read()))
686 page(self.shell.inspector.format(file(filename).read()))
687
687
688 def magic_pinfo(self, parameter_s=''):
688 def magic_pinfo(self, parameter_s=''):
689 """Provide detailed information about an object.
689 """Provide detailed information about an object.
690
690
691 '%pinfo object' is just a synonym for object? or ?object."""
691 '%pinfo object' is just a synonym for object? or ?object."""
692
692
693 #print 'pinfo par: <%s>' % parameter_s # dbg
693 #print 'pinfo par: <%s>' % parameter_s # dbg
694
694
695 # detail_level: 0 -> obj? , 1 -> obj??
695 # detail_level: 0 -> obj? , 1 -> obj??
696 detail_level = 0
696 detail_level = 0
697 # We need to detect if we got called as 'pinfo pinfo foo', which can
697 # We need to detect if we got called as 'pinfo pinfo foo', which can
698 # happen if the user types 'pinfo foo?' at the cmd line.
698 # happen if the user types 'pinfo foo?' at the cmd line.
699 pinfo,qmark1,oname,qmark2 = \
699 pinfo,qmark1,oname,qmark2 = \
700 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
700 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
701 if pinfo or qmark1 or qmark2:
701 if pinfo or qmark1 or qmark2:
702 detail_level = 1
702 detail_level = 1
703 if "*" in oname:
703 if "*" in oname:
704 self.magic_psearch(oname)
704 self.magic_psearch(oname)
705 else:
705 else:
706 self._inspect('pinfo',oname,detail_level=detail_level)
706 self._inspect('pinfo',oname,detail_level=detail_level)
707
707
708 def magic_psearch(self, parameter_s=''):
708 def magic_psearch(self, parameter_s=''):
709 """Search for object in namespaces by wildcard.
709 """Search for object in namespaces by wildcard.
710
710
711 %psearch [options] PATTERN [OBJECT TYPE]
711 %psearch [options] PATTERN [OBJECT TYPE]
712
712
713 Note: ? can be used as a synonym for %psearch, at the beginning or at
713 Note: ? can be used as a synonym for %psearch, at the beginning or at
714 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
714 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
715 rest of the command line must be unchanged (options come first), so
715 rest of the command line must be unchanged (options come first), so
716 for example the following forms are equivalent
716 for example the following forms are equivalent
717
717
718 %psearch -i a* function
718 %psearch -i a* function
719 -i a* function?
719 -i a* function?
720 ?-i a* function
720 ?-i a* function
721
721
722 Arguments:
722 Arguments:
723
723
724 PATTERN
724 PATTERN
725
725
726 where PATTERN is a string containing * as a wildcard similar to its
726 where PATTERN is a string containing * as a wildcard similar to its
727 use in a shell. The pattern is matched in all namespaces on the
727 use in a shell. The pattern is matched in all namespaces on the
728 search path. By default objects starting with a single _ are not
728 search path. By default objects starting with a single _ are not
729 matched, many IPython generated objects have a single
729 matched, many IPython generated objects have a single
730 underscore. The default is case insensitive matching. Matching is
730 underscore. The default is case insensitive matching. Matching is
731 also done on the attributes of objects and not only on the objects
731 also done on the attributes of objects and not only on the objects
732 in a module.
732 in a module.
733
733
734 [OBJECT TYPE]
734 [OBJECT TYPE]
735
735
736 Is the name of a python type from the types module. The name is
736 Is the name of a python type from the types module. The name is
737 given in lowercase without the ending type, ex. StringType is
737 given in lowercase without the ending type, ex. StringType is
738 written string. By adding a type here only objects matching the
738 written string. By adding a type here only objects matching the
739 given type are matched. Using all here makes the pattern match all
739 given type are matched. Using all here makes the pattern match all
740 types (this is the default).
740 types (this is the default).
741
741
742 Options:
742 Options:
743
743
744 -a: makes the pattern match even objects whose names start with a
744 -a: makes the pattern match even objects whose names start with a
745 single underscore. These names are normally ommitted from the
745 single underscore. These names are normally ommitted from the
746 search.
746 search.
747
747
748 -i/-c: make the pattern case insensitive/sensitive. If neither of
748 -i/-c: make the pattern case insensitive/sensitive. If neither of
749 these options is given, the default is read from your ipythonrc
749 these options is given, the default is read from your ipythonrc
750 file. The option name which sets this value is
750 file. The option name which sets this value is
751 'wildcards_case_sensitive'. If this option is not specified in your
751 'wildcards_case_sensitive'. If this option is not specified in your
752 ipythonrc file, IPython's internal default is to do a case sensitive
752 ipythonrc file, IPython's internal default is to do a case sensitive
753 search.
753 search.
754
754
755 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
755 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
756 specifiy can be searched in any of the following namespaces:
756 specifiy can be searched in any of the following namespaces:
757 'builtin', 'user', 'user_global','internal', 'alias', where
757 'builtin', 'user', 'user_global','internal', 'alias', where
758 'builtin' and 'user' are the search defaults. Note that you should
758 'builtin' and 'user' are the search defaults. Note that you should
759 not use quotes when specifying namespaces.
759 not use quotes when specifying namespaces.
760
760
761 'Builtin' contains the python module builtin, 'user' contains all
761 'Builtin' contains the python module builtin, 'user' contains all
762 user data, 'alias' only contain the shell aliases and no python
762 user data, 'alias' only contain the shell aliases and no python
763 objects, 'internal' contains objects used by IPython. The
763 objects, 'internal' contains objects used by IPython. The
764 'user_global' namespace is only used by embedded IPython instances,
764 'user_global' namespace is only used by embedded IPython instances,
765 and it contains module-level globals. You can add namespaces to the
765 and it contains module-level globals. You can add namespaces to the
766 search with -s or exclude them with -e (these options can be given
766 search with -s or exclude them with -e (these options can be given
767 more than once).
767 more than once).
768
768
769 Examples:
769 Examples:
770
770
771 %psearch a* -> objects beginning with an a
771 %psearch a* -> objects beginning with an a
772 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
772 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
773 %psearch a* function -> all functions beginning with an a
773 %psearch a* function -> all functions beginning with an a
774 %psearch re.e* -> objects beginning with an e in module re
774 %psearch re.e* -> objects beginning with an e in module re
775 %psearch r*.e* -> objects that start with e in modules starting in r
775 %psearch r*.e* -> objects that start with e in modules starting in r
776 %psearch r*.* string -> all strings in modules beginning with r
776 %psearch r*.* string -> all strings in modules beginning with r
777
777
778 Case sensitve search:
778 Case sensitve search:
779
779
780 %psearch -c a* list all object beginning with lower case a
780 %psearch -c a* list all object beginning with lower case a
781
781
782 Show objects beginning with a single _:
782 Show objects beginning with a single _:
783
783
784 %psearch -a _* list objects beginning with a single underscore"""
784 %psearch -a _* list objects beginning with a single underscore"""
785
785
786 # default namespaces to be searched
786 # default namespaces to be searched
787 def_search = ['user','builtin']
787 def_search = ['user','builtin']
788
788
789 # Process options/args
789 # Process options/args
790 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
790 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
791 opt = opts.get
791 opt = opts.get
792 shell = self.shell
792 shell = self.shell
793 psearch = shell.inspector.psearch
793 psearch = shell.inspector.psearch
794
794
795 # select case options
795 # select case options
796 if opts.has_key('i'):
796 if opts.has_key('i'):
797 ignore_case = True
797 ignore_case = True
798 elif opts.has_key('c'):
798 elif opts.has_key('c'):
799 ignore_case = False
799 ignore_case = False
800 else:
800 else:
801 ignore_case = not shell.rc.wildcards_case_sensitive
801 ignore_case = not shell.rc.wildcards_case_sensitive
802
802
803 # Build list of namespaces to search from user options
803 # Build list of namespaces to search from user options
804 def_search.extend(opt('s',[]))
804 def_search.extend(opt('s',[]))
805 ns_exclude = ns_exclude=opt('e',[])
805 ns_exclude = ns_exclude=opt('e',[])
806 ns_search = [nm for nm in def_search if nm not in ns_exclude]
806 ns_search = [nm for nm in def_search if nm not in ns_exclude]
807
807
808 # Call the actual search
808 # Call the actual search
809 try:
809 try:
810 psearch(args,shell.ns_table,ns_search,
810 psearch(args,shell.ns_table,ns_search,
811 show_all=opt('a'),ignore_case=ignore_case)
811 show_all=opt('a'),ignore_case=ignore_case)
812 except:
812 except:
813 shell.showtraceback()
813 shell.showtraceback()
814
814
815 def magic_who_ls(self, parameter_s=''):
815 def magic_who_ls(self, parameter_s=''):
816 """Return a sorted list of all interactive variables.
816 """Return a sorted list of all interactive variables.
817
817
818 If arguments are given, only variables of types matching these
818 If arguments are given, only variables of types matching these
819 arguments are returned."""
819 arguments are returned."""
820
820
821 user_ns = self.shell.user_ns
821 user_ns = self.shell.user_ns
822 internal_ns = self.shell.internal_ns
822 internal_ns = self.shell.internal_ns
823 user_config_ns = self.shell.user_config_ns
823 user_config_ns = self.shell.user_config_ns
824 out = []
824 out = []
825 typelist = parameter_s.split()
825 typelist = parameter_s.split()
826
826
827 for i in user_ns:
827 for i in user_ns:
828 if not (i.startswith('_') or i.startswith('_i')) \
828 if not (i.startswith('_') or i.startswith('_i')) \
829 and not (i in internal_ns or i in user_config_ns):
829 and not (i in internal_ns or i in user_config_ns):
830 if typelist:
830 if typelist:
831 if type(user_ns[i]).__name__ in typelist:
831 if type(user_ns[i]).__name__ in typelist:
832 out.append(i)
832 out.append(i)
833 else:
833 else:
834 out.append(i)
834 out.append(i)
835 out.sort()
835 out.sort()
836 return out
836 return out
837
837
838 def magic_who(self, parameter_s=''):
838 def magic_who(self, parameter_s=''):
839 """Print all interactive variables, with some minimal formatting.
839 """Print all interactive variables, with some minimal formatting.
840
840
841 If any arguments are given, only variables whose type matches one of
841 If any arguments are given, only variables whose type matches one of
842 these are printed. For example:
842 these are printed. For example:
843
843
844 %who function str
844 %who function str
845
845
846 will only list functions and strings, excluding all other types of
846 will only list functions and strings, excluding all other types of
847 variables. To find the proper type names, simply use type(var) at a
847 variables. To find the proper type names, simply use type(var) at a
848 command line to see how python prints type names. For example:
848 command line to see how python prints type names. For example:
849
849
850 In [1]: type('hello')\\
850 In [1]: type('hello')\\
851 Out[1]: <type 'str'>
851 Out[1]: <type 'str'>
852
852
853 indicates that the type name for strings is 'str'.
853 indicates that the type name for strings is 'str'.
854
854
855 %who always excludes executed names loaded through your configuration
855 %who always excludes executed names loaded through your configuration
856 file and things which are internal to IPython.
856 file and things which are internal to IPython.
857
857
858 This is deliberate, as typically you may load many modules and the
858 This is deliberate, as typically you may load many modules and the
859 purpose of %who is to show you only what you've manually defined."""
859 purpose of %who is to show you only what you've manually defined."""
860
860
861 varlist = self.magic_who_ls(parameter_s)
861 varlist = self.magic_who_ls(parameter_s)
862 if not varlist:
862 if not varlist:
863 print 'Interactive namespace is empty.'
863 print 'Interactive namespace is empty.'
864 return
864 return
865
865
866 # if we have variables, move on...
866 # if we have variables, move on...
867
867
868 # stupid flushing problem: when prompts have no separators, stdout is
868 # stupid flushing problem: when prompts have no separators, stdout is
869 # getting lost. I'm starting to think this is a python bug. I'm having
869 # getting lost. I'm starting to think this is a python bug. I'm having
870 # to force a flush with a print because even a sys.stdout.flush
870 # to force a flush with a print because even a sys.stdout.flush
871 # doesn't seem to do anything!
871 # doesn't seem to do anything!
872
872
873 count = 0
873 count = 0
874 for i in varlist:
874 for i in varlist:
875 print i+'\t',
875 print i+'\t',
876 count += 1
876 count += 1
877 if count > 8:
877 if count > 8:
878 count = 0
878 count = 0
879 print
879 print
880 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
880 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
881
881
882 print # well, this does force a flush at the expense of an extra \n
882 print # well, this does force a flush at the expense of an extra \n
883
883
884 def magic_whos(self, parameter_s=''):
884 def magic_whos(self, parameter_s=''):
885 """Like %who, but gives some extra information about each variable.
885 """Like %who, but gives some extra information about each variable.
886
886
887 The same type filtering of %who can be applied here.
887 The same type filtering of %who can be applied here.
888
888
889 For all variables, the type is printed. Additionally it prints:
889 For all variables, the type is printed. Additionally it prints:
890
890
891 - For {},[],(): their length.
891 - For {},[],(): their length.
892
892
893 - For Numeric arrays, a summary with shape, number of elements,
893 - For Numeric arrays, a summary with shape, number of elements,
894 typecode and size in memory.
894 typecode and size in memory.
895
895
896 - Everything else: a string representation, snipping their middle if
896 - Everything else: a string representation, snipping their middle if
897 too long."""
897 too long."""
898
898
899 varnames = self.magic_who_ls(parameter_s)
899 varnames = self.magic_who_ls(parameter_s)
900 if not varnames:
900 if not varnames:
901 print 'Interactive namespace is empty.'
901 print 'Interactive namespace is empty.'
902 return
902 return
903
903
904 # if we have variables, move on...
904 # if we have variables, move on...
905
905
906 # for these types, show len() instead of data:
906 # for these types, show len() instead of data:
907 seq_types = [types.DictType,types.ListType,types.TupleType]
907 seq_types = [types.DictType,types.ListType,types.TupleType]
908
908
909 # for Numeric arrays, display summary info
909 # for Numeric arrays, display summary info
910 try:
910 try:
911 import Numeric
911 import Numeric
912 except ImportError:
912 except ImportError:
913 array_type = None
913 array_type = None
914 else:
914 else:
915 array_type = Numeric.ArrayType.__name__
915 array_type = Numeric.ArrayType.__name__
916
916
917 # Find all variable names and types so we can figure out column sizes
917 # Find all variable names and types so we can figure out column sizes
918 get_vars = lambda i: self.shell.user_ns[i]
918 get_vars = lambda i: self.shell.user_ns[i]
919 type_name = lambda v: type(v).__name__
919 type_name = lambda v: type(v).__name__
920 varlist = map(get_vars,varnames)
920 varlist = map(get_vars,varnames)
921
921
922 typelist = []
922 typelist = []
923 for vv in varlist:
923 for vv in varlist:
924 tt = type_name(vv)
924 tt = type_name(vv)
925 if tt=='instance':
925 if tt=='instance':
926 typelist.append(str(vv.__class__))
926 typelist.append(str(vv.__class__))
927 else:
927 else:
928 typelist.append(tt)
928 typelist.append(tt)
929
929
930 # column labels and # of spaces as separator
930 # column labels and # of spaces as separator
931 varlabel = 'Variable'
931 varlabel = 'Variable'
932 typelabel = 'Type'
932 typelabel = 'Type'
933 datalabel = 'Data/Info'
933 datalabel = 'Data/Info'
934 colsep = 3
934 colsep = 3
935 # variable format strings
935 # variable format strings
936 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
936 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
937 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
937 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
938 aformat = "%s: %s elems, type `%s`, %s bytes"
938 aformat = "%s: %s elems, type `%s`, %s bytes"
939 # find the size of the columns to format the output nicely
939 # find the size of the columns to format the output nicely
940 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
940 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
941 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
941 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
942 # table header
942 # table header
943 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
943 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
944 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
944 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
945 # and the table itself
945 # and the table itself
946 kb = 1024
946 kb = 1024
947 Mb = 1048576 # kb**2
947 Mb = 1048576 # kb**2
948 for vname,var,vtype in zip(varnames,varlist,typelist):
948 for vname,var,vtype in zip(varnames,varlist,typelist):
949 print itpl(vformat),
949 print itpl(vformat),
950 if vtype in seq_types:
950 if vtype in seq_types:
951 print len(var)
951 print len(var)
952 elif vtype==array_type:
952 elif vtype==array_type:
953 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
953 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
954 vsize = Numeric.size(var)
954 vsize = Numeric.size(var)
955 vbytes = vsize*var.itemsize()
955 vbytes = vsize*var.itemsize()
956 if vbytes < 100000:
956 if vbytes < 100000:
957 print aformat % (vshape,vsize,var.typecode(),vbytes)
957 print aformat % (vshape,vsize,var.typecode(),vbytes)
958 else:
958 else:
959 print aformat % (vshape,vsize,var.typecode(),vbytes),
959 print aformat % (vshape,vsize,var.typecode(),vbytes),
960 if vbytes < Mb:
960 if vbytes < Mb:
961 print '(%s kb)' % (vbytes/kb,)
961 print '(%s kb)' % (vbytes/kb,)
962 else:
962 else:
963 print '(%s Mb)' % (vbytes/Mb,)
963 print '(%s Mb)' % (vbytes/Mb,)
964 else:
964 else:
965 vstr = str(var).replace('\n','\\n')
965 vstr = str(var).replace('\n','\\n')
966 if len(vstr) < 50:
966 if len(vstr) < 50:
967 print vstr
967 print vstr
968 else:
968 else:
969 printpl(vfmt_short)
969 printpl(vfmt_short)
970
970
971 def magic_reset(self, parameter_s=''):
971 def magic_reset(self, parameter_s=''):
972 """Resets the namespace by removing all names defined by the user.
972 """Resets the namespace by removing all names defined by the user.
973
973
974 Input/Output history are left around in case you need them."""
974 Input/Output history are left around in case you need them."""
975
975
976 ans = raw_input(
976 ans = self.shell.ask_yes_no(
977 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
977 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
978 if not ans.lower() == 'y':
978 if not ans:
979 print 'Nothing done.'
979 print 'Nothing done.'
980 return
980 return
981 user_ns = self.shell.user_ns
981 user_ns = self.shell.user_ns
982 for i in self.magic_who_ls():
982 for i in self.magic_who_ls():
983 del(user_ns[i])
983 del(user_ns[i])
984
984
985 def magic_config(self,parameter_s=''):
985 def magic_config(self,parameter_s=''):
986 """Show IPython's internal configuration."""
986 """Show IPython's internal configuration."""
987
987
988 page('Current configuration structure:\n'+
988 page('Current configuration structure:\n'+
989 pformat(self.shell.rc.dict()))
989 pformat(self.shell.rc.dict()))
990
990
991 def magic_logstart(self,parameter_s=''):
991 def magic_logstart(self,parameter_s=''):
992 """Start logging anywhere in a session.
992 """Start logging anywhere in a session.
993
993
994 %logstart [-o|-r|-t] [log_name [log_mode]]
994 %logstart [-o|-r|-t] [log_name [log_mode]]
995
995
996 If no name is given, it defaults to a file named 'ipython_log.py' in your
996 If no name is given, it defaults to a file named 'ipython_log.py' in your
997 current directory, in 'rotate' mode (see below).
997 current directory, in 'rotate' mode (see below).
998
998
999 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
999 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1000 history up to that point and then continues logging.
1000 history up to that point and then continues logging.
1001
1001
1002 %logstart takes a second optional parameter: logging mode. This can be one
1002 %logstart takes a second optional parameter: logging mode. This can be one
1003 of (note that the modes are given unquoted):\\
1003 of (note that the modes are given unquoted):\\
1004 append: well, that says it.\\
1004 append: well, that says it.\\
1005 backup: rename (if exists) to name~ and start name.\\
1005 backup: rename (if exists) to name~ and start name.\\
1006 global: single logfile in your home dir, appended to.\\
1006 global: single logfile in your home dir, appended to.\\
1007 over : overwrite existing log.\\
1007 over : overwrite existing log.\\
1008 rotate: create rotating logs name.1~, name.2~, etc.
1008 rotate: create rotating logs name.1~, name.2~, etc.
1009
1009
1010 Options:
1010 Options:
1011
1011
1012 -o: log also IPython's output. In this mode, all commands which
1012 -o: log also IPython's output. In this mode, all commands which
1013 generate an Out[NN] prompt are recorded to the logfile, right after
1013 generate an Out[NN] prompt are recorded to the logfile, right after
1014 their corresponding input line. The output lines are always
1014 their corresponding input line. The output lines are always
1015 prepended with a '#[Out]# ' marker, so that the log remains valid
1015 prepended with a '#[Out]# ' marker, so that the log remains valid
1016 Python code.
1016 Python code.
1017
1017
1018 Since this marker is always the same, filtering only the output from
1018 Since this marker is always the same, filtering only the output from
1019 a log is very easy, using for example a simple awk call:
1019 a log is very easy, using for example a simple awk call:
1020
1020
1021 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1021 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1022
1022
1023 -r: log 'raw' input. Normally, IPython's logs contain the processed
1023 -r: log 'raw' input. Normally, IPython's logs contain the processed
1024 input, so that user lines are logged in their final form, converted
1024 input, so that user lines are logged in their final form, converted
1025 into valid Python. For example, %Exit is logged as
1025 into valid Python. For example, %Exit is logged as
1026 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1026 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1027 exactly as typed, with no transformations applied.
1027 exactly as typed, with no transformations applied.
1028
1028
1029 -t: put timestamps before each input line logged (these are put in
1029 -t: put timestamps before each input line logged (these are put in
1030 comments)."""
1030 comments)."""
1031
1031
1032 opts,par = self.parse_options(parameter_s,'ort')
1032 opts,par = self.parse_options(parameter_s,'ort')
1033 log_output = 'o' in opts
1033 log_output = 'o' in opts
1034 log_raw_input = 'r' in opts
1034 log_raw_input = 'r' in opts
1035 timestamp = 't' in opts
1035 timestamp = 't' in opts
1036
1036
1037 rc = self.shell.rc
1037 rc = self.shell.rc
1038 logger = self.shell.logger
1038 logger = self.shell.logger
1039
1039
1040 # if no args are given, the defaults set in the logger constructor by
1040 # if no args are given, the defaults set in the logger constructor by
1041 # ipytohn remain valid
1041 # ipytohn remain valid
1042 if par:
1042 if par:
1043 try:
1043 try:
1044 logfname,logmode = par.split()
1044 logfname,logmode = par.split()
1045 except:
1045 except:
1046 logfname = par
1046 logfname = par
1047 logmode = 'backup'
1047 logmode = 'backup'
1048 else:
1048 else:
1049 logfname = logger.logfname
1049 logfname = logger.logfname
1050 logmode = logger.logmode
1050 logmode = logger.logmode
1051 # put logfname into rc struct as if it had been called on the command
1051 # put logfname into rc struct as if it had been called on the command
1052 # line, so it ends up saved in the log header Save it in case we need
1052 # line, so it ends up saved in the log header Save it in case we need
1053 # to restore it...
1053 # to restore it...
1054 old_logfile = rc.opts.get('logfile','')
1054 old_logfile = rc.opts.get('logfile','')
1055 if logfname:
1055 if logfname:
1056 logfname = os.path.expanduser(logfname)
1056 logfname = os.path.expanduser(logfname)
1057 rc.opts.logfile = logfname
1057 rc.opts.logfile = logfname
1058 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1058 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1059 try:
1059 try:
1060 started = logger.logstart(logfname,loghead,logmode,
1060 started = logger.logstart(logfname,loghead,logmode,
1061 log_output,timestamp,log_raw_input)
1061 log_output,timestamp,log_raw_input)
1062 except:
1062 except:
1063 rc.opts.logfile = old_logfile
1063 rc.opts.logfile = old_logfile
1064 warn("Couldn't start log: %s" % sys.exc_info()[1])
1064 warn("Couldn't start log: %s" % sys.exc_info()[1])
1065 else:
1065 else:
1066 # log input history up to this point, optionally interleaving
1066 # log input history up to this point, optionally interleaving
1067 # output if requested
1067 # output if requested
1068
1068
1069 if timestamp:
1069 if timestamp:
1070 # disable timestamping for the previous history, since we've
1070 # disable timestamping for the previous history, since we've
1071 # lost those already (no time machine here).
1071 # lost those already (no time machine here).
1072 logger.timestamp = False
1072 logger.timestamp = False
1073
1073
1074 if log_raw_input:
1074 if log_raw_input:
1075 input_hist = self.shell.input_hist_raw
1075 input_hist = self.shell.input_hist_raw
1076 else:
1076 else:
1077 input_hist = self.shell.input_hist
1077 input_hist = self.shell.input_hist
1078
1078
1079 if log_output:
1079 if log_output:
1080 log_write = logger.log_write
1080 log_write = logger.log_write
1081 output_hist = self.shell.output_hist
1081 output_hist = self.shell.output_hist
1082 for n in range(1,len(input_hist)-1):
1082 for n in range(1,len(input_hist)-1):
1083 log_write(input_hist[n].rstrip())
1083 log_write(input_hist[n].rstrip())
1084 if n in output_hist:
1084 if n in output_hist:
1085 log_write(repr(output_hist[n]),'output')
1085 log_write(repr(output_hist[n]),'output')
1086 else:
1086 else:
1087 logger.log_write(input_hist[1:])
1087 logger.log_write(input_hist[1:])
1088 if timestamp:
1088 if timestamp:
1089 # re-enable timestamping
1089 # re-enable timestamping
1090 logger.timestamp = True
1090 logger.timestamp = True
1091
1091
1092 print ('Activating auto-logging. '
1092 print ('Activating auto-logging. '
1093 'Current session state plus future input saved.')
1093 'Current session state plus future input saved.')
1094 logger.logstate()
1094 logger.logstate()
1095
1095
1096 def magic_logoff(self,parameter_s=''):
1096 def magic_logoff(self,parameter_s=''):
1097 """Temporarily stop logging.
1097 """Temporarily stop logging.
1098
1098
1099 You must have previously started logging."""
1099 You must have previously started logging."""
1100 self.shell.logger.switch_log(0)
1100 self.shell.logger.switch_log(0)
1101
1101
1102 def magic_logon(self,parameter_s=''):
1102 def magic_logon(self,parameter_s=''):
1103 """Restart logging.
1103 """Restart logging.
1104
1104
1105 This function is for restarting logging which you've temporarily
1105 This function is for restarting logging which you've temporarily
1106 stopped with %logoff. For starting logging for the first time, you
1106 stopped with %logoff. For starting logging for the first time, you
1107 must use the %logstart function, which allows you to specify an
1107 must use the %logstart function, which allows you to specify an
1108 optional log filename."""
1108 optional log filename."""
1109
1109
1110 self.shell.logger.switch_log(1)
1110 self.shell.logger.switch_log(1)
1111
1111
1112 def magic_logstate(self,parameter_s=''):
1112 def magic_logstate(self,parameter_s=''):
1113 """Print the status of the logging system."""
1113 """Print the status of the logging system."""
1114
1114
1115 self.shell.logger.logstate()
1115 self.shell.logger.logstate()
1116
1116
1117 def magic_pdb(self, parameter_s=''):
1117 def magic_pdb(self, parameter_s=''):
1118 """Control the calling of the pdb interactive debugger.
1118 """Control the calling of the pdb interactive debugger.
1119
1119
1120 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1120 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1121 argument it works as a toggle.
1121 argument it works as a toggle.
1122
1122
1123 When an exception is triggered, IPython can optionally call the
1123 When an exception is triggered, IPython can optionally call the
1124 interactive pdb debugger after the traceback printout. %pdb toggles
1124 interactive pdb debugger after the traceback printout. %pdb toggles
1125 this feature on and off."""
1125 this feature on and off."""
1126
1126
1127 par = parameter_s.strip().lower()
1127 par = parameter_s.strip().lower()
1128
1128
1129 if par:
1129 if par:
1130 try:
1130 try:
1131 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1131 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1132 except KeyError:
1132 except KeyError:
1133 print ('Incorrect argument. Use on/1, off/0, '
1133 print ('Incorrect argument. Use on/1, off/0, '
1134 'or nothing for a toggle.')
1134 'or nothing for a toggle.')
1135 return
1135 return
1136 else:
1136 else:
1137 # toggle
1137 # toggle
1138 new_pdb = not self.shell.InteractiveTB.call_pdb
1138 new_pdb = not self.shell.InteractiveTB.call_pdb
1139
1139
1140 # set on the shell
1140 # set on the shell
1141 self.shell.call_pdb = new_pdb
1141 self.shell.call_pdb = new_pdb
1142 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1142 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1143
1143
1144 def magic_prun(self, parameter_s ='',user_mode=1,
1144 def magic_prun(self, parameter_s ='',user_mode=1,
1145 opts=None,arg_lst=None,prog_ns=None):
1145 opts=None,arg_lst=None,prog_ns=None):
1146
1146
1147 """Run a statement through the python code profiler.
1147 """Run a statement through the python code profiler.
1148
1148
1149 Usage:\\
1149 Usage:\\
1150 %prun [options] statement
1150 %prun [options] statement
1151
1151
1152 The given statement (which doesn't require quote marks) is run via the
1152 The given statement (which doesn't require quote marks) is run via the
1153 python profiler in a manner similar to the profile.run() function.
1153 python profiler in a manner similar to the profile.run() function.
1154 Namespaces are internally managed to work correctly; profile.run
1154 Namespaces are internally managed to work correctly; profile.run
1155 cannot be used in IPython because it makes certain assumptions about
1155 cannot be used in IPython because it makes certain assumptions about
1156 namespaces which do not hold under IPython.
1156 namespaces which do not hold under IPython.
1157
1157
1158 Options:
1158 Options:
1159
1159
1160 -l <limit>: you can place restrictions on what or how much of the
1160 -l <limit>: you can place restrictions on what or how much of the
1161 profile gets printed. The limit value can be:
1161 profile gets printed. The limit value can be:
1162
1162
1163 * A string: only information for function names containing this string
1163 * A string: only information for function names containing this string
1164 is printed.
1164 is printed.
1165
1165
1166 * An integer: only these many lines are printed.
1166 * An integer: only these many lines are printed.
1167
1167
1168 * A float (between 0 and 1): this fraction of the report is printed
1168 * A float (between 0 and 1): this fraction of the report is printed
1169 (for example, use a limit of 0.4 to see the topmost 40% only).
1169 (for example, use a limit of 0.4 to see the topmost 40% only).
1170
1170
1171 You can combine several limits with repeated use of the option. For
1171 You can combine several limits with repeated use of the option. For
1172 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1172 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1173 information about class constructors.
1173 information about class constructors.
1174
1174
1175 -r: return the pstats.Stats object generated by the profiling. This
1175 -r: return the pstats.Stats object generated by the profiling. This
1176 object has all the information about the profile in it, and you can
1176 object has all the information about the profile in it, and you can
1177 later use it for further analysis or in other functions.
1177 later use it for further analysis or in other functions.
1178
1178
1179 Since magic functions have a particular form of calling which prevents
1179 Since magic functions have a particular form of calling which prevents
1180 you from writing something like:\\
1180 you from writing something like:\\
1181 In [1]: p = %prun -r print 4 # invalid!\\
1181 In [1]: p = %prun -r print 4 # invalid!\\
1182 you must instead use IPython's automatic variables to assign this:\\
1182 you must instead use IPython's automatic variables to assign this:\\
1183 In [1]: %prun -r print 4 \\
1183 In [1]: %prun -r print 4 \\
1184 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1184 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1185 In [2]: stats = _
1185 In [2]: stats = _
1186
1186
1187 If you really need to assign this value via an explicit function call,
1187 If you really need to assign this value via an explicit function call,
1188 you can always tap directly into the true name of the magic function
1188 you can always tap directly into the true name of the magic function
1189 by using the _ip.magic function:\\
1189 by using the _ip.magic function:\\
1190 In [3]: stats = _ip.magic('prun','-r print 4')
1190 In [3]: stats = _ip.magic('prun','-r print 4')
1191
1191
1192 You can type _ip.magic? for more details.
1192 You can type _ip.magic? for more details.
1193
1193
1194 -s <key>: sort profile by given key. You can provide more than one key
1194 -s <key>: sort profile by given key. You can provide more than one key
1195 by using the option several times: '-s key1 -s key2 -s key3...'. The
1195 by using the option several times: '-s key1 -s key2 -s key3...'. The
1196 default sorting key is 'time'.
1196 default sorting key is 'time'.
1197
1197
1198 The following is copied verbatim from the profile documentation
1198 The following is copied verbatim from the profile documentation
1199 referenced below:
1199 referenced below:
1200
1200
1201 When more than one key is provided, additional keys are used as
1201 When more than one key is provided, additional keys are used as
1202 secondary criteria when the there is equality in all keys selected
1202 secondary criteria when the there is equality in all keys selected
1203 before them.
1203 before them.
1204
1204
1205 Abbreviations can be used for any key names, as long as the
1205 Abbreviations can be used for any key names, as long as the
1206 abbreviation is unambiguous. The following are the keys currently
1206 abbreviation is unambiguous. The following are the keys currently
1207 defined:
1207 defined:
1208
1208
1209 Valid Arg Meaning\\
1209 Valid Arg Meaning\\
1210 "calls" call count\\
1210 "calls" call count\\
1211 "cumulative" cumulative time\\
1211 "cumulative" cumulative time\\
1212 "file" file name\\
1212 "file" file name\\
1213 "module" file name\\
1213 "module" file name\\
1214 "pcalls" primitive call count\\
1214 "pcalls" primitive call count\\
1215 "line" line number\\
1215 "line" line number\\
1216 "name" function name\\
1216 "name" function name\\
1217 "nfl" name/file/line\\
1217 "nfl" name/file/line\\
1218 "stdname" standard name\\
1218 "stdname" standard name\\
1219 "time" internal time
1219 "time" internal time
1220
1220
1221 Note that all sorts on statistics are in descending order (placing
1221 Note that all sorts on statistics are in descending order (placing
1222 most time consuming items first), where as name, file, and line number
1222 most time consuming items first), where as name, file, and line number
1223 searches are in ascending order (i.e., alphabetical). The subtle
1223 searches are in ascending order (i.e., alphabetical). The subtle
1224 distinction between "nfl" and "stdname" is that the standard name is a
1224 distinction between "nfl" and "stdname" is that the standard name is a
1225 sort of the name as printed, which means that the embedded line
1225 sort of the name as printed, which means that the embedded line
1226 numbers get compared in an odd way. For example, lines 3, 20, and 40
1226 numbers get compared in an odd way. For example, lines 3, 20, and 40
1227 would (if the file names were the same) appear in the string order
1227 would (if the file names were the same) appear in the string order
1228 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1228 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1229 line numbers. In fact, sort_stats("nfl") is the same as
1229 line numbers. In fact, sort_stats("nfl") is the same as
1230 sort_stats("name", "file", "line").
1230 sort_stats("name", "file", "line").
1231
1231
1232 -T <filename>: save profile results as shown on screen to a text
1232 -T <filename>: save profile results as shown on screen to a text
1233 file. The profile is still shown on screen.
1233 file. The profile is still shown on screen.
1234
1234
1235 -D <filename>: save (via dump_stats) profile statistics to given
1235 -D <filename>: save (via dump_stats) profile statistics to given
1236 filename. This data is in a format understod by the pstats module, and
1236 filename. This data is in a format understod by the pstats module, and
1237 is generated by a call to the dump_stats() method of profile
1237 is generated by a call to the dump_stats() method of profile
1238 objects. The profile is still shown on screen.
1238 objects. The profile is still shown on screen.
1239
1239
1240 If you want to run complete programs under the profiler's control, use
1240 If you want to run complete programs under the profiler's control, use
1241 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1241 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1242 contains profiler specific options as described here.
1242 contains profiler specific options as described here.
1243
1243
1244 You can read the complete documentation for the profile module with:\\
1244 You can read the complete documentation for the profile module with:\\
1245 In [1]: import profile; profile.help() """
1245 In [1]: import profile; profile.help() """
1246
1246
1247 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1247 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1248 # protect user quote marks
1248 # protect user quote marks
1249 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1249 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1250
1250
1251 if user_mode: # regular user call
1251 if user_mode: # regular user call
1252 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1252 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1253 list_all=1)
1253 list_all=1)
1254 namespace = self.shell.user_ns
1254 namespace = self.shell.user_ns
1255 else: # called to run a program by %run -p
1255 else: # called to run a program by %run -p
1256 try:
1256 try:
1257 filename = get_py_filename(arg_lst[0])
1257 filename = get_py_filename(arg_lst[0])
1258 except IOError,msg:
1258 except IOError,msg:
1259 error(msg)
1259 error(msg)
1260 return
1260 return
1261
1261
1262 arg_str = 'execfile(filename,prog_ns)'
1262 arg_str = 'execfile(filename,prog_ns)'
1263 namespace = locals()
1263 namespace = locals()
1264
1264
1265 opts.merge(opts_def)
1265 opts.merge(opts_def)
1266
1266
1267 prof = profile.Profile()
1267 prof = profile.Profile()
1268 try:
1268 try:
1269 prof = prof.runctx(arg_str,namespace,namespace)
1269 prof = prof.runctx(arg_str,namespace,namespace)
1270 sys_exit = ''
1270 sys_exit = ''
1271 except SystemExit:
1271 except SystemExit:
1272 sys_exit = """*** SystemExit exception caught in code being profiled."""
1272 sys_exit = """*** SystemExit exception caught in code being profiled."""
1273
1273
1274 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1274 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1275
1275
1276 lims = opts.l
1276 lims = opts.l
1277 if lims:
1277 if lims:
1278 lims = [] # rebuild lims with ints/floats/strings
1278 lims = [] # rebuild lims with ints/floats/strings
1279 for lim in opts.l:
1279 for lim in opts.l:
1280 try:
1280 try:
1281 lims.append(int(lim))
1281 lims.append(int(lim))
1282 except ValueError:
1282 except ValueError:
1283 try:
1283 try:
1284 lims.append(float(lim))
1284 lims.append(float(lim))
1285 except ValueError:
1285 except ValueError:
1286 lims.append(lim)
1286 lims.append(lim)
1287
1287
1288 # trap output
1288 # trap output
1289 sys_stdout = sys.stdout
1289 sys_stdout = sys.stdout
1290 stdout_trap = StringIO()
1290 stdout_trap = StringIO()
1291 try:
1291 try:
1292 sys.stdout = stdout_trap
1292 sys.stdout = stdout_trap
1293 stats.print_stats(*lims)
1293 stats.print_stats(*lims)
1294 finally:
1294 finally:
1295 sys.stdout = sys_stdout
1295 sys.stdout = sys_stdout
1296 output = stdout_trap.getvalue()
1296 output = stdout_trap.getvalue()
1297 output = output.rstrip()
1297 output = output.rstrip()
1298
1298
1299 page(output,screen_lines=self.shell.rc.screen_length)
1299 page(output,screen_lines=self.shell.rc.screen_length)
1300 print sys_exit,
1300 print sys_exit,
1301
1301
1302 dump_file = opts.D[0]
1302 dump_file = opts.D[0]
1303 text_file = opts.T[0]
1303 text_file = opts.T[0]
1304 if dump_file:
1304 if dump_file:
1305 prof.dump_stats(dump_file)
1305 prof.dump_stats(dump_file)
1306 print '\n*** Profile stats marshalled to file',\
1306 print '\n*** Profile stats marshalled to file',\
1307 `dump_file`+'.',sys_exit
1307 `dump_file`+'.',sys_exit
1308 if text_file:
1308 if text_file:
1309 file(text_file,'w').write(output)
1309 file(text_file,'w').write(output)
1310 print '\n*** Profile printout saved to text file',\
1310 print '\n*** Profile printout saved to text file',\
1311 `text_file`+'.',sys_exit
1311 `text_file`+'.',sys_exit
1312
1312
1313 if opts.has_key('r'):
1313 if opts.has_key('r'):
1314 return stats
1314 return stats
1315 else:
1315 else:
1316 return None
1316 return None
1317
1317
1318 def magic_run(self, parameter_s ='',runner=None):
1318 def magic_run(self, parameter_s ='',runner=None):
1319 """Run the named file inside IPython as a program.
1319 """Run the named file inside IPython as a program.
1320
1320
1321 Usage:\\
1321 Usage:\\
1322 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1322 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1323
1323
1324 Parameters after the filename are passed as command-line arguments to
1324 Parameters after the filename are passed as command-line arguments to
1325 the program (put in sys.argv). Then, control returns to IPython's
1325 the program (put in sys.argv). Then, control returns to IPython's
1326 prompt.
1326 prompt.
1327
1327
1328 This is similar to running at a system prompt:\\
1328 This is similar to running at a system prompt:\\
1329 $ python file args\\
1329 $ python file args\\
1330 but with the advantage of giving you IPython's tracebacks, and of
1330 but with the advantage of giving you IPython's tracebacks, and of
1331 loading all variables into your interactive namespace for further use
1331 loading all variables into your interactive namespace for further use
1332 (unless -p is used, see below).
1332 (unless -p is used, see below).
1333
1333
1334 The file is executed in a namespace initially consisting only of
1334 The file is executed in a namespace initially consisting only of
1335 __name__=='__main__' and sys.argv constructed as indicated. It thus
1335 __name__=='__main__' and sys.argv constructed as indicated. It thus
1336 sees its environment as if it were being run as a stand-alone
1336 sees its environment as if it were being run as a stand-alone
1337 program. But after execution, the IPython interactive namespace gets
1337 program. But after execution, the IPython interactive namespace gets
1338 updated with all variables defined in the program (except for __name__
1338 updated with all variables defined in the program (except for __name__
1339 and sys.argv). This allows for very convenient loading of code for
1339 and sys.argv). This allows for very convenient loading of code for
1340 interactive work, while giving each program a 'clean sheet' to run in.
1340 interactive work, while giving each program a 'clean sheet' to run in.
1341
1341
1342 Options:
1342 Options:
1343
1343
1344 -n: __name__ is NOT set to '__main__', but to the running file's name
1344 -n: __name__ is NOT set to '__main__', but to the running file's name
1345 without extension (as python does under import). This allows running
1345 without extension (as python does under import). This allows running
1346 scripts and reloading the definitions in them without calling code
1346 scripts and reloading the definitions in them without calling code
1347 protected by an ' if __name__ == "__main__" ' clause.
1347 protected by an ' if __name__ == "__main__" ' clause.
1348
1348
1349 -i: run the file in IPython's namespace instead of an empty one. This
1349 -i: run the file in IPython's namespace instead of an empty one. This
1350 is useful if you are experimenting with code written in a text editor
1350 is useful if you are experimenting with code written in a text editor
1351 which depends on variables defined interactively.
1351 which depends on variables defined interactively.
1352
1352
1353 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1353 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1354 being run. This is particularly useful if IPython is being used to
1354 being run. This is particularly useful if IPython is being used to
1355 run unittests, which always exit with a sys.exit() call. In such
1355 run unittests, which always exit with a sys.exit() call. In such
1356 cases you are interested in the output of the test results, not in
1356 cases you are interested in the output of the test results, not in
1357 seeing a traceback of the unittest module.
1357 seeing a traceback of the unittest module.
1358
1358
1359 -t: print timing information at the end of the run. IPython will give
1359 -t: print timing information at the end of the run. IPython will give
1360 you an estimated CPU time consumption for your script, which under
1360 you an estimated CPU time consumption for your script, which under
1361 Unix uses the resource module to avoid the wraparound problems of
1361 Unix uses the resource module to avoid the wraparound problems of
1362 time.clock(). Under Unix, an estimate of time spent on system tasks
1362 time.clock(). Under Unix, an estimate of time spent on system tasks
1363 is also given (for Windows platforms this is reported as 0.0).
1363 is also given (for Windows platforms this is reported as 0.0).
1364
1364
1365 If -t is given, an additional -N<N> option can be given, where <N>
1365 If -t is given, an additional -N<N> option can be given, where <N>
1366 must be an integer indicating how many times you want the script to
1366 must be an integer indicating how many times you want the script to
1367 run. The final timing report will include total and per run results.
1367 run. The final timing report will include total and per run results.
1368
1368
1369 For example (testing the script uniq_stable.py):
1369 For example (testing the script uniq_stable.py):
1370
1370
1371 In [1]: run -t uniq_stable
1371 In [1]: run -t uniq_stable
1372
1372
1373 IPython CPU timings (estimated):\\
1373 IPython CPU timings (estimated):\\
1374 User : 0.19597 s.\\
1374 User : 0.19597 s.\\
1375 System: 0.0 s.\\
1375 System: 0.0 s.\\
1376
1376
1377 In [2]: run -t -N5 uniq_stable
1377 In [2]: run -t -N5 uniq_stable
1378
1378
1379 IPython CPU timings (estimated):\\
1379 IPython CPU timings (estimated):\\
1380 Total runs performed: 5\\
1380 Total runs performed: 5\\
1381 Times : Total Per run\\
1381 Times : Total Per run\\
1382 User : 0.910862 s, 0.1821724 s.\\
1382 User : 0.910862 s, 0.1821724 s.\\
1383 System: 0.0 s, 0.0 s.
1383 System: 0.0 s, 0.0 s.
1384
1384
1385 -d: run your program under the control of pdb, the Python debugger.
1385 -d: run your program under the control of pdb, the Python debugger.
1386 This allows you to execute your program step by step, watch variables,
1386 This allows you to execute your program step by step, watch variables,
1387 etc. Internally, what IPython does is similar to calling:
1387 etc. Internally, what IPython does is similar to calling:
1388
1388
1389 pdb.run('execfile("YOURFILENAME")')
1389 pdb.run('execfile("YOURFILENAME")')
1390
1390
1391 with a breakpoint set on line 1 of your file. You can change the line
1391 with a breakpoint set on line 1 of your file. You can change the line
1392 number for this automatic breakpoint to be <N> by using the -bN option
1392 number for this automatic breakpoint to be <N> by using the -bN option
1393 (where N must be an integer). For example:
1393 (where N must be an integer). For example:
1394
1394
1395 %run -d -b40 myscript
1395 %run -d -b40 myscript
1396
1396
1397 will set the first breakpoint at line 40 in myscript.py. Note that
1397 will set the first breakpoint at line 40 in myscript.py. Note that
1398 the first breakpoint must be set on a line which actually does
1398 the first breakpoint must be set on a line which actually does
1399 something (not a comment or docstring) for it to stop execution.
1399 something (not a comment or docstring) for it to stop execution.
1400
1400
1401 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1401 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1402 first enter 'c' (without qoutes) to start execution up to the first
1402 first enter 'c' (without qoutes) to start execution up to the first
1403 breakpoint.
1403 breakpoint.
1404
1404
1405 Entering 'help' gives information about the use of the debugger. You
1405 Entering 'help' gives information about the use of the debugger. You
1406 can easily see pdb's full documentation with "import pdb;pdb.help()"
1406 can easily see pdb's full documentation with "import pdb;pdb.help()"
1407 at a prompt.
1407 at a prompt.
1408
1408
1409 -p: run program under the control of the Python profiler module (which
1409 -p: run program under the control of the Python profiler module (which
1410 prints a detailed report of execution times, function calls, etc).
1410 prints a detailed report of execution times, function calls, etc).
1411
1411
1412 You can pass other options after -p which affect the behavior of the
1412 You can pass other options after -p which affect the behavior of the
1413 profiler itself. See the docs for %prun for details.
1413 profiler itself. See the docs for %prun for details.
1414
1414
1415 In this mode, the program's variables do NOT propagate back to the
1415 In this mode, the program's variables do NOT propagate back to the
1416 IPython interactive namespace (because they remain in the namespace
1416 IPython interactive namespace (because they remain in the namespace
1417 where the profiler executes them).
1417 where the profiler executes them).
1418
1418
1419 Internally this triggers a call to %prun, see its documentation for
1419 Internally this triggers a call to %prun, see its documentation for
1420 details on the options available specifically for profiling."""
1420 details on the options available specifically for profiling."""
1421
1421
1422 # get arguments and set sys.argv for program to be run.
1422 # get arguments and set sys.argv for program to be run.
1423 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1423 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1424 mode='list',list_all=1)
1424 mode='list',list_all=1)
1425
1425
1426 try:
1426 try:
1427 filename = get_py_filename(arg_lst[0])
1427 filename = get_py_filename(arg_lst[0])
1428 except IndexError:
1428 except IndexError:
1429 warn('you must provide at least a filename.')
1429 warn('you must provide at least a filename.')
1430 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1430 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1431 return
1431 return
1432 except IOError,msg:
1432 except IOError,msg:
1433 error(msg)
1433 error(msg)
1434 return
1434 return
1435
1435
1436 # Control the response to exit() calls made by the script being run
1436 # Control the response to exit() calls made by the script being run
1437 exit_ignore = opts.has_key('e')
1437 exit_ignore = opts.has_key('e')
1438
1438
1439 # Make sure that the running script gets a proper sys.argv as if it
1439 # Make sure that the running script gets a proper sys.argv as if it
1440 # were run from a system shell.
1440 # were run from a system shell.
1441 save_argv = sys.argv # save it for later restoring
1441 save_argv = sys.argv # save it for later restoring
1442 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1442 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1443
1443
1444 if opts.has_key('i'):
1444 if opts.has_key('i'):
1445 prog_ns = self.shell.user_ns
1445 prog_ns = self.shell.user_ns
1446 __name__save = self.shell.user_ns['__name__']
1446 __name__save = self.shell.user_ns['__name__']
1447 prog_ns['__name__'] = '__main__'
1447 prog_ns['__name__'] = '__main__'
1448 else:
1448 else:
1449 if opts.has_key('n'):
1449 if opts.has_key('n'):
1450 name = os.path.splitext(os.path.basename(filename))[0]
1450 name = os.path.splitext(os.path.basename(filename))[0]
1451 else:
1451 else:
1452 name = '__main__'
1452 name = '__main__'
1453 prog_ns = {'__name__':name}
1453 prog_ns = {'__name__':name}
1454
1454
1455 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1455 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1456 # set the __file__ global in the script's namespace
1456 # set the __file__ global in the script's namespace
1457 prog_ns['__file__'] = filename
1457 prog_ns['__file__'] = filename
1458
1458
1459 # pickle fix. See iplib for an explanation. But we need to make sure
1459 # pickle fix. See iplib for an explanation. But we need to make sure
1460 # that, if we overwrite __main__, we replace it at the end
1460 # that, if we overwrite __main__, we replace it at the end
1461 if prog_ns['__name__'] == '__main__':
1461 if prog_ns['__name__'] == '__main__':
1462 restore_main = sys.modules['__main__']
1462 restore_main = sys.modules['__main__']
1463 else:
1463 else:
1464 restore_main = False
1464 restore_main = False
1465
1465
1466 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1466 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1467
1467
1468 stats = None
1468 stats = None
1469 try:
1469 try:
1470 if opts.has_key('p'):
1470 if opts.has_key('p'):
1471 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1471 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1472 else:
1472 else:
1473 if opts.has_key('d'):
1473 if opts.has_key('d'):
1474 deb = Debugger.Pdb(self.shell.rc.colors)
1474 deb = Debugger.Pdb(self.shell.rc.colors)
1475 # reset Breakpoint state, which is moronically kept
1475 # reset Breakpoint state, which is moronically kept
1476 # in a class
1476 # in a class
1477 bdb.Breakpoint.next = 1
1477 bdb.Breakpoint.next = 1
1478 bdb.Breakpoint.bplist = {}
1478 bdb.Breakpoint.bplist = {}
1479 bdb.Breakpoint.bpbynumber = [None]
1479 bdb.Breakpoint.bpbynumber = [None]
1480 # Set an initial breakpoint to stop execution
1480 # Set an initial breakpoint to stop execution
1481 maxtries = 10
1481 maxtries = 10
1482 bp = int(opts.get('b',[1])[0])
1482 bp = int(opts.get('b',[1])[0])
1483 checkline = deb.checkline(filename,bp)
1483 checkline = deb.checkline(filename,bp)
1484 if not checkline:
1484 if not checkline:
1485 for bp in range(bp+1,bp+maxtries+1):
1485 for bp in range(bp+1,bp+maxtries+1):
1486 if deb.checkline(filename,bp):
1486 if deb.checkline(filename,bp):
1487 break
1487 break
1488 else:
1488 else:
1489 msg = ("\nI failed to find a valid line to set "
1489 msg = ("\nI failed to find a valid line to set "
1490 "a breakpoint\n"
1490 "a breakpoint\n"
1491 "after trying up to line: %s.\n"
1491 "after trying up to line: %s.\n"
1492 "Please set a valid breakpoint manually "
1492 "Please set a valid breakpoint manually "
1493 "with the -b option." % bp)
1493 "with the -b option." % bp)
1494 error(msg)
1494 error(msg)
1495 return
1495 return
1496 # if we find a good linenumber, set the breakpoint
1496 # if we find a good linenumber, set the breakpoint
1497 deb.do_break('%s:%s' % (filename,bp))
1497 deb.do_break('%s:%s' % (filename,bp))
1498 # Start file run
1498 # Start file run
1499 print "NOTE: Enter 'c' at the",
1499 print "NOTE: Enter 'c' at the",
1500 print "ipdb> prompt to start your script."
1500 print "ipdb> prompt to start your script."
1501 try:
1501 try:
1502 deb.run('execfile("%s")' % filename,prog_ns)
1502 deb.run('execfile("%s")' % filename,prog_ns)
1503 except:
1503 except:
1504 etype, value, tb = sys.exc_info()
1504 etype, value, tb = sys.exc_info()
1505 # Skip three frames in the traceback: the %run one,
1505 # Skip three frames in the traceback: the %run one,
1506 # one inside bdb.py, and the command-line typed by the
1506 # one inside bdb.py, and the command-line typed by the
1507 # user (run by exec in pdb itself).
1507 # user (run by exec in pdb itself).
1508 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1508 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1509 else:
1509 else:
1510 if runner is None:
1510 if runner is None:
1511 runner = self.shell.safe_execfile
1511 runner = self.shell.safe_execfile
1512 if opts.has_key('t'):
1512 if opts.has_key('t'):
1513 try:
1513 try:
1514 nruns = int(opts['N'][0])
1514 nruns = int(opts['N'][0])
1515 if nruns < 1:
1515 if nruns < 1:
1516 error('Number of runs must be >=1')
1516 error('Number of runs must be >=1')
1517 return
1517 return
1518 except (KeyError):
1518 except (KeyError):
1519 nruns = 1
1519 nruns = 1
1520 if nruns == 1:
1520 if nruns == 1:
1521 t0 = clock2()
1521 t0 = clock2()
1522 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1522 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1523 t1 = clock2()
1523 t1 = clock2()
1524 t_usr = t1[0]-t0[0]
1524 t_usr = t1[0]-t0[0]
1525 t_sys = t1[1]-t1[1]
1525 t_sys = t1[1]-t1[1]
1526 print "\nIPython CPU timings (estimated):"
1526 print "\nIPython CPU timings (estimated):"
1527 print " User : %10s s." % t_usr
1527 print " User : %10s s." % t_usr
1528 print " System: %10s s." % t_sys
1528 print " System: %10s s." % t_sys
1529 else:
1529 else:
1530 runs = range(nruns)
1530 runs = range(nruns)
1531 t0 = clock2()
1531 t0 = clock2()
1532 for nr in runs:
1532 for nr in runs:
1533 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1533 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1534 t1 = clock2()
1534 t1 = clock2()
1535 t_usr = t1[0]-t0[0]
1535 t_usr = t1[0]-t0[0]
1536 t_sys = t1[1]-t1[1]
1536 t_sys = t1[1]-t1[1]
1537 print "\nIPython CPU timings (estimated):"
1537 print "\nIPython CPU timings (estimated):"
1538 print "Total runs performed:",nruns
1538 print "Total runs performed:",nruns
1539 print " Times : %10s %10s" % ('Total','Per run')
1539 print " Times : %10s %10s" % ('Total','Per run')
1540 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1540 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1541 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1541 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1542
1542
1543 else:
1543 else:
1544 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1544 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1545 if opts.has_key('i'):
1545 if opts.has_key('i'):
1546 self.shell.user_ns['__name__'] = __name__save
1546 self.shell.user_ns['__name__'] = __name__save
1547 else:
1547 else:
1548 # update IPython interactive namespace
1548 # update IPython interactive namespace
1549 del prog_ns['__name__']
1549 del prog_ns['__name__']
1550 self.shell.user_ns.update(prog_ns)
1550 self.shell.user_ns.update(prog_ns)
1551 finally:
1551 finally:
1552 sys.argv = save_argv
1552 sys.argv = save_argv
1553 if restore_main:
1553 if restore_main:
1554 sys.modules['__main__'] = restore_main
1554 sys.modules['__main__'] = restore_main
1555 return stats
1555 return stats
1556
1556
1557 def magic_runlog(self, parameter_s =''):
1557 def magic_runlog(self, parameter_s =''):
1558 """Run files as logs.
1558 """Run files as logs.
1559
1559
1560 Usage:\\
1560 Usage:\\
1561 %runlog file1 file2 ...
1561 %runlog file1 file2 ...
1562
1562
1563 Run the named files (treating them as log files) in sequence inside
1563 Run the named files (treating them as log files) in sequence inside
1564 the interpreter, and return to the prompt. This is much slower than
1564 the interpreter, and return to the prompt. This is much slower than
1565 %run because each line is executed in a try/except block, but it
1565 %run because each line is executed in a try/except block, but it
1566 allows running files with syntax errors in them.
1566 allows running files with syntax errors in them.
1567
1567
1568 Normally IPython will guess when a file is one of its own logfiles, so
1568 Normally IPython will guess when a file is one of its own logfiles, so
1569 you can typically use %run even for logs. This shorthand allows you to
1569 you can typically use %run even for logs. This shorthand allows you to
1570 force any file to be treated as a log file."""
1570 force any file to be treated as a log file."""
1571
1571
1572 for f in parameter_s.split():
1572 for f in parameter_s.split():
1573 self.shell.safe_execfile(f,self.shell.user_ns,
1573 self.shell.safe_execfile(f,self.shell.user_ns,
1574 self.shell.user_ns,islog=1)
1574 self.shell.user_ns,islog=1)
1575
1575
1576 def magic_timeit(self, parameter_s =''):
1576 def magic_timeit(self, parameter_s =''):
1577 """Time execution of a Python statement or expression
1577 """Time execution of a Python statement or expression
1578
1578
1579 Usage:\\
1579 Usage:\\
1580 %timeit [-n<N> -r<R> [-t|-c]] statement
1580 %timeit [-n<N> -r<R> [-t|-c]] statement
1581
1581
1582 Time execution of a Python statement or expression using the timeit
1582 Time execution of a Python statement or expression using the timeit
1583 module.
1583 module.
1584
1584
1585 Options:
1585 Options:
1586 -n<N>: execute the given statement <N> times in a loop. If this value
1586 -n<N>: execute the given statement <N> times in a loop. If this value
1587 is not given, a fitting value is chosen.
1587 is not given, a fitting value is chosen.
1588
1588
1589 -r<R>: repeat the loop iteration <R> times and take the best result.
1589 -r<R>: repeat the loop iteration <R> times and take the best result.
1590 Default: 3
1590 Default: 3
1591
1591
1592 -t: use time.time to measure the time, which is the default on Unix.
1592 -t: use time.time to measure the time, which is the default on Unix.
1593 This function measures wall time.
1593 This function measures wall time.
1594
1594
1595 -c: use time.clock to measure the time, which is the default on
1595 -c: use time.clock to measure the time, which is the default on
1596 Windows and measures wall time. On Unix, resource.getrusage is used
1596 Windows and measures wall time. On Unix, resource.getrusage is used
1597 instead and returns the CPU user time.
1597 instead and returns the CPU user time.
1598
1598
1599 -p<P>: use a precision of <P> digits to display the timing result.
1599 -p<P>: use a precision of <P> digits to display the timing result.
1600 Default: 3
1600 Default: 3
1601
1601
1602
1602
1603 Examples:\\
1603 Examples:\\
1604 In [1]: %timeit pass
1604 In [1]: %timeit pass
1605 10000000 loops, best of 3: 53.3 ns per loop
1605 10000000 loops, best of 3: 53.3 ns per loop
1606
1606
1607 In [2]: u = None
1607 In [2]: u = None
1608
1608
1609 In [3]: %timeit u is None
1609 In [3]: %timeit u is None
1610 10000000 loops, best of 3: 184 ns per loop
1610 10000000 loops, best of 3: 184 ns per loop
1611
1611
1612 In [4]: %timeit -r 4 u == None
1612 In [4]: %timeit -r 4 u == None
1613 1000000 loops, best of 4: 242 ns per loop
1613 1000000 loops, best of 4: 242 ns per loop
1614
1614
1615 In [5]: import time
1615 In [5]: import time
1616
1616
1617 In [6]: %timeit -n1 time.sleep(2)
1617 In [6]: %timeit -n1 time.sleep(2)
1618 1 loops, best of 3: 2 s per loop
1618 1 loops, best of 3: 2 s per loop
1619
1619
1620
1620
1621 The times reported by %timeit will be slightly higher than those reported
1621 The times reported by %timeit will be slightly higher than those reported
1622 by the timeit.py script when variables are accessed. This is due to the
1622 by the timeit.py script when variables are accessed. This is due to the
1623 fact that %timeit executes the statement in the namespace of the shell,
1623 fact that %timeit executes the statement in the namespace of the shell,
1624 compared with timeit.py, which uses a single setup statement to import
1624 compared with timeit.py, which uses a single setup statement to import
1625 function or create variables. Generally, the bias does not matter as long
1625 function or create variables. Generally, the bias does not matter as long
1626 as results from timeit.py are not mixed with those from %timeit."""
1626 as results from timeit.py are not mixed with those from %timeit."""
1627 import timeit
1627 import timeit
1628 import math
1628 import math
1629
1629
1630 units = ["s", "ms", "\xc2\xb5s", "ns"]
1630 units = ["s", "ms", "\xc2\xb5s", "ns"]
1631 scaling = [1, 1e3, 1e6, 1e9]
1631 scaling = [1, 1e3, 1e6, 1e9]
1632
1632
1633 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:')
1633 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:')
1634 if stmt == "":
1634 if stmt == "":
1635 return
1635 return
1636 timefunc = timeit.default_timer
1636 timefunc = timeit.default_timer
1637 number = int(getattr(opts, "n", 0))
1637 number = int(getattr(opts, "n", 0))
1638 repeat = int(getattr(opts, "r", timeit.default_repeat))
1638 repeat = int(getattr(opts, "r", timeit.default_repeat))
1639 precision = int(getattr(opts, "p", 3))
1639 precision = int(getattr(opts, "p", 3))
1640 if hasattr(opts, "t"):
1640 if hasattr(opts, "t"):
1641 timefunc = time.time
1641 timefunc = time.time
1642 if hasattr(opts, "c"):
1642 if hasattr(opts, "c"):
1643 timefunc = clock
1643 timefunc = clock
1644
1644
1645 timer = timeit.Timer(timer=timefunc)
1645 timer = timeit.Timer(timer=timefunc)
1646 # this code has tight coupling to the inner workings of timeit.Timer,
1646 # this code has tight coupling to the inner workings of timeit.Timer,
1647 # but is there a better way to achieve that the code stmt has access
1647 # but is there a better way to achieve that the code stmt has access
1648 # to the shell namespace?
1648 # to the shell namespace?
1649
1649
1650 src = timeit.template % {'stmt': timeit.reindent(stmt, 8), 'setup': "pass"}
1650 src = timeit.template % {'stmt': timeit.reindent(stmt, 8), 'setup': "pass"}
1651 code = compile(src, "<magic-timeit>", "exec")
1651 code = compile(src, "<magic-timeit>", "exec")
1652 ns = {}
1652 ns = {}
1653 exec code in self.shell.user_ns, ns
1653 exec code in self.shell.user_ns, ns
1654 timer.inner = ns["inner"]
1654 timer.inner = ns["inner"]
1655
1655
1656 if number == 0:
1656 if number == 0:
1657 # determine number so that 0.2 <= total time < 2.0
1657 # determine number so that 0.2 <= total time < 2.0
1658 number = 1
1658 number = 1
1659 for i in range(1, 10):
1659 for i in range(1, 10):
1660 number *= 10
1660 number *= 10
1661 if timer.timeit(number) >= 0.2:
1661 if timer.timeit(number) >= 0.2:
1662 break
1662 break
1663
1663
1664 best = min(timer.repeat(repeat, number)) / number
1664 best = min(timer.repeat(repeat, number)) / number
1665
1665
1666 if best > 0.0:
1666 if best > 0.0:
1667 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1667 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1668 else:
1668 else:
1669 order = 3
1669 order = 3
1670 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1670 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1671 precision,
1671 precision,
1672 best * scaling[order],
1672 best * scaling[order],
1673 units[order])
1673 units[order])
1674
1674
1675 def magic_time(self,parameter_s = ''):
1675 def magic_time(self,parameter_s = ''):
1676 """Time execution of a Python statement or expression.
1676 """Time execution of a Python statement or expression.
1677
1677
1678 The CPU and wall clock times are printed, and the value of the
1678 The CPU and wall clock times are printed, and the value of the
1679 expression (if any) is returned. Note that under Win32, system time
1679 expression (if any) is returned. Note that under Win32, system time
1680 is always reported as 0, since it can not be measured.
1680 is always reported as 0, since it can not be measured.
1681
1681
1682 This function provides very basic timing functionality. In Python
1682 This function provides very basic timing functionality. In Python
1683 2.3, the timeit module offers more control and sophistication, so this
1683 2.3, the timeit module offers more control and sophistication, so this
1684 could be rewritten to use it (patches welcome).
1684 could be rewritten to use it (patches welcome).
1685
1685
1686 Some examples:
1686 Some examples:
1687
1687
1688 In [1]: time 2**128
1688 In [1]: time 2**128
1689 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1689 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1690 Wall time: 0.00
1690 Wall time: 0.00
1691 Out[1]: 340282366920938463463374607431768211456L
1691 Out[1]: 340282366920938463463374607431768211456L
1692
1692
1693 In [2]: n = 1000000
1693 In [2]: n = 1000000
1694
1694
1695 In [3]: time sum(range(n))
1695 In [3]: time sum(range(n))
1696 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1696 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1697 Wall time: 1.37
1697 Wall time: 1.37
1698 Out[3]: 499999500000L
1698 Out[3]: 499999500000L
1699
1699
1700 In [4]: time print 'hello world'
1700 In [4]: time print 'hello world'
1701 hello world
1701 hello world
1702 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1702 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1703 Wall time: 0.00
1703 Wall time: 0.00
1704 """
1704 """
1705
1705
1706 # fail immediately if the given expression can't be compiled
1706 # fail immediately if the given expression can't be compiled
1707 try:
1707 try:
1708 mode = 'eval'
1708 mode = 'eval'
1709 code = compile(parameter_s,'<timed eval>',mode)
1709 code = compile(parameter_s,'<timed eval>',mode)
1710 except SyntaxError:
1710 except SyntaxError:
1711 mode = 'exec'
1711 mode = 'exec'
1712 code = compile(parameter_s,'<timed exec>',mode)
1712 code = compile(parameter_s,'<timed exec>',mode)
1713 # skew measurement as little as possible
1713 # skew measurement as little as possible
1714 glob = self.shell.user_ns
1714 glob = self.shell.user_ns
1715 clk = clock2
1715 clk = clock2
1716 wtime = time.time
1716 wtime = time.time
1717 # time execution
1717 # time execution
1718 wall_st = wtime()
1718 wall_st = wtime()
1719 if mode=='eval':
1719 if mode=='eval':
1720 st = clk()
1720 st = clk()
1721 out = eval(code,glob)
1721 out = eval(code,glob)
1722 end = clk()
1722 end = clk()
1723 else:
1723 else:
1724 st = clk()
1724 st = clk()
1725 exec code in glob
1725 exec code in glob
1726 end = clk()
1726 end = clk()
1727 out = None
1727 out = None
1728 wall_end = wtime()
1728 wall_end = wtime()
1729 # Compute actual times and report
1729 # Compute actual times and report
1730 wall_time = wall_end-wall_st
1730 wall_time = wall_end-wall_st
1731 cpu_user = end[0]-st[0]
1731 cpu_user = end[0]-st[0]
1732 cpu_sys = end[1]-st[1]
1732 cpu_sys = end[1]-st[1]
1733 cpu_tot = cpu_user+cpu_sys
1733 cpu_tot = cpu_user+cpu_sys
1734 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1734 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1735 (cpu_user,cpu_sys,cpu_tot)
1735 (cpu_user,cpu_sys,cpu_tot)
1736 print "Wall time: %.2f" % wall_time
1736 print "Wall time: %.2f" % wall_time
1737 return out
1737 return out
1738
1738
1739 def magic_macro(self,parameter_s = ''):
1739 def magic_macro(self,parameter_s = ''):
1740 """Define a set of input lines as a macro for future re-execution.
1740 """Define a set of input lines as a macro for future re-execution.
1741
1741
1742 Usage:\\
1742 Usage:\\
1743 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1743 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1744
1744
1745 Options:
1745 Options:
1746
1746
1747 -r: use 'raw' input. By default, the 'processed' history is used,
1747 -r: use 'raw' input. By default, the 'processed' history is used,
1748 so that magics are loaded in their transformed version to valid
1748 so that magics are loaded in their transformed version to valid
1749 Python. If this option is given, the raw input as typed as the
1749 Python. If this option is given, the raw input as typed as the
1750 command line is used instead.
1750 command line is used instead.
1751
1751
1752 This will define a global variable called `name` which is a string
1752 This will define a global variable called `name` which is a string
1753 made of joining the slices and lines you specify (n1,n2,... numbers
1753 made of joining the slices and lines you specify (n1,n2,... numbers
1754 above) from your input history into a single string. This variable
1754 above) from your input history into a single string. This variable
1755 acts like an automatic function which re-executes those lines as if
1755 acts like an automatic function which re-executes those lines as if
1756 you had typed them. You just type 'name' at the prompt and the code
1756 you had typed them. You just type 'name' at the prompt and the code
1757 executes.
1757 executes.
1758
1758
1759 The notation for indicating number ranges is: n1-n2 means 'use line
1759 The notation for indicating number ranges is: n1-n2 means 'use line
1760 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1760 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1761 using the lines numbered 5,6 and 7.
1761 using the lines numbered 5,6 and 7.
1762
1762
1763 Note: as a 'hidden' feature, you can also use traditional python slice
1763 Note: as a 'hidden' feature, you can also use traditional python slice
1764 notation, where N:M means numbers N through M-1.
1764 notation, where N:M means numbers N through M-1.
1765
1765
1766 For example, if your history contains (%hist prints it):
1766 For example, if your history contains (%hist prints it):
1767
1767
1768 44: x=1\\
1768 44: x=1\\
1769 45: y=3\\
1769 45: y=3\\
1770 46: z=x+y\\
1770 46: z=x+y\\
1771 47: print x\\
1771 47: print x\\
1772 48: a=5\\
1772 48: a=5\\
1773 49: print 'x',x,'y',y\\
1773 49: print 'x',x,'y',y\\
1774
1774
1775 you can create a macro with lines 44 through 47 (included) and line 49
1775 you can create a macro with lines 44 through 47 (included) and line 49
1776 called my_macro with:
1776 called my_macro with:
1777
1777
1778 In [51]: %macro my_macro 44-47 49
1778 In [51]: %macro my_macro 44-47 49
1779
1779
1780 Now, typing `my_macro` (without quotes) will re-execute all this code
1780 Now, typing `my_macro` (without quotes) will re-execute all this code
1781 in one pass.
1781 in one pass.
1782
1782
1783 You don't need to give the line-numbers in order, and any given line
1783 You don't need to give the line-numbers in order, and any given line
1784 number can appear multiple times. You can assemble macros with any
1784 number can appear multiple times. You can assemble macros with any
1785 lines from your input history in any order.
1785 lines from your input history in any order.
1786
1786
1787 The macro is a simple object which holds its value in an attribute,
1787 The macro is a simple object which holds its value in an attribute,
1788 but IPython's display system checks for macros and executes them as
1788 but IPython's display system checks for macros and executes them as
1789 code instead of printing them when you type their name.
1789 code instead of printing them when you type their name.
1790
1790
1791 You can view a macro's contents by explicitly printing it with:
1791 You can view a macro's contents by explicitly printing it with:
1792
1792
1793 'print macro_name'.
1793 'print macro_name'.
1794
1794
1795 For one-off cases which DON'T contain magic function calls in them you
1795 For one-off cases which DON'T contain magic function calls in them you
1796 can obtain similar results by explicitly executing slices from your
1796 can obtain similar results by explicitly executing slices from your
1797 input history with:
1797 input history with:
1798
1798
1799 In [60]: exec In[44:48]+In[49]"""
1799 In [60]: exec In[44:48]+In[49]"""
1800
1800
1801 opts,args = self.parse_options(parameter_s,'r',mode='list')
1801 opts,args = self.parse_options(parameter_s,'r',mode='list')
1802 name,ranges = args[0], args[1:]
1802 name,ranges = args[0], args[1:]
1803 #print 'rng',ranges # dbg
1803 #print 'rng',ranges # dbg
1804 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1804 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1805 macro = Macro(lines)
1805 macro = Macro(lines)
1806 self.shell.user_ns.update({name:macro})
1806 self.shell.user_ns.update({name:macro})
1807 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1807 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1808 print 'Macro contents:'
1808 print 'Macro contents:'
1809 print macro,
1809 print macro,
1810
1810
1811 def magic_save(self,parameter_s = ''):
1811 def magic_save(self,parameter_s = ''):
1812 """Save a set of lines to a given filename.
1812 """Save a set of lines to a given filename.
1813
1813
1814 Usage:\\
1814 Usage:\\
1815 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1815 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1816
1816
1817 Options:
1817 Options:
1818
1818
1819 -r: use 'raw' input. By default, the 'processed' history is used,
1819 -r: use 'raw' input. By default, the 'processed' history is used,
1820 so that magics are loaded in their transformed version to valid
1820 so that magics are loaded in their transformed version to valid
1821 Python. If this option is given, the raw input as typed as the
1821 Python. If this option is given, the raw input as typed as the
1822 command line is used instead.
1822 command line is used instead.
1823
1823
1824 This function uses the same syntax as %macro for line extraction, but
1824 This function uses the same syntax as %macro for line extraction, but
1825 instead of creating a macro it saves the resulting string to the
1825 instead of creating a macro it saves the resulting string to the
1826 filename you specify.
1826 filename you specify.
1827
1827
1828 It adds a '.py' extension to the file if you don't do so yourself, and
1828 It adds a '.py' extension to the file if you don't do so yourself, and
1829 it asks for confirmation before overwriting existing files."""
1829 it asks for confirmation before overwriting existing files."""
1830
1830
1831 opts,args = self.parse_options(parameter_s,'r',mode='list')
1831 opts,args = self.parse_options(parameter_s,'r',mode='list')
1832 fname,ranges = args[0], args[1:]
1832 fname,ranges = args[0], args[1:]
1833 if not fname.endswith('.py'):
1833 if not fname.endswith('.py'):
1834 fname += '.py'
1834 fname += '.py'
1835 if os.path.isfile(fname):
1835 if os.path.isfile(fname):
1836 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1836 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1837 if ans.lower() not in ['y','yes']:
1837 if ans.lower() not in ['y','yes']:
1838 print 'Operation cancelled.'
1838 print 'Operation cancelled.'
1839 return
1839 return
1840 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1840 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1841 f = file(fname,'w')
1841 f = file(fname,'w')
1842 f.write(cmds)
1842 f.write(cmds)
1843 f.close()
1843 f.close()
1844 print 'The following commands were written to file `%s`:' % fname
1844 print 'The following commands were written to file `%s`:' % fname
1845 print cmds
1845 print cmds
1846
1846
1847 def _edit_macro(self,mname,macro):
1847 def _edit_macro(self,mname,macro):
1848 """open an editor with the macro data in a file"""
1848 """open an editor with the macro data in a file"""
1849 filename = self.shell.mktempfile(macro.value)
1849 filename = self.shell.mktempfile(macro.value)
1850 self.shell.hooks.editor(filename)
1850 self.shell.hooks.editor(filename)
1851
1851
1852 # and make a new macro object, to replace the old one
1852 # and make a new macro object, to replace the old one
1853 mfile = open(filename)
1853 mfile = open(filename)
1854 mvalue = mfile.read()
1854 mvalue = mfile.read()
1855 mfile.close()
1855 mfile.close()
1856 self.shell.user_ns[mname] = Macro(mvalue)
1856 self.shell.user_ns[mname] = Macro(mvalue)
1857
1857
1858 def magic_ed(self,parameter_s=''):
1858 def magic_ed(self,parameter_s=''):
1859 """Alias to %edit."""
1859 """Alias to %edit."""
1860 return self.magic_edit(parameter_s)
1860 return self.magic_edit(parameter_s)
1861
1861
1862 def magic_edit(self,parameter_s='',last_call=['','']):
1862 def magic_edit(self,parameter_s='',last_call=['','']):
1863 """Bring up an editor and execute the resulting code.
1863 """Bring up an editor and execute the resulting code.
1864
1864
1865 Usage:
1865 Usage:
1866 %edit [options] [args]
1866 %edit [options] [args]
1867
1867
1868 %edit runs IPython's editor hook. The default version of this hook is
1868 %edit runs IPython's editor hook. The default version of this hook is
1869 set to call the __IPYTHON__.rc.editor command. This is read from your
1869 set to call the __IPYTHON__.rc.editor command. This is read from your
1870 environment variable $EDITOR. If this isn't found, it will default to
1870 environment variable $EDITOR. If this isn't found, it will default to
1871 vi under Linux/Unix and to notepad under Windows. See the end of this
1871 vi under Linux/Unix and to notepad under Windows. See the end of this
1872 docstring for how to change the editor hook.
1872 docstring for how to change the editor hook.
1873
1873
1874 You can also set the value of this editor via the command line option
1874 You can also set the value of this editor via the command line option
1875 '-editor' or in your ipythonrc file. This is useful if you wish to use
1875 '-editor' or in your ipythonrc file. This is useful if you wish to use
1876 specifically for IPython an editor different from your typical default
1876 specifically for IPython an editor different from your typical default
1877 (and for Windows users who typically don't set environment variables).
1877 (and for Windows users who typically don't set environment variables).
1878
1878
1879 This command allows you to conveniently edit multi-line code right in
1879 This command allows you to conveniently edit multi-line code right in
1880 your IPython session.
1880 your IPython session.
1881
1881
1882 If called without arguments, %edit opens up an empty editor with a
1882 If called without arguments, %edit opens up an empty editor with a
1883 temporary file and will execute the contents of this file when you
1883 temporary file and will execute the contents of this file when you
1884 close it (don't forget to save it!).
1884 close it (don't forget to save it!).
1885
1885
1886
1886
1887 Options:
1887 Options:
1888
1888
1889 -n <number>: open the editor at a specified line number. By default,
1889 -n <number>: open the editor at a specified line number. By default,
1890 the IPython editor hook uses the unix syntax 'editor +N filename', but
1890 the IPython editor hook uses the unix syntax 'editor +N filename', but
1891 you can configure this by providing your own modified hook if your
1891 you can configure this by providing your own modified hook if your
1892 favorite editor supports line-number specifications with a different
1892 favorite editor supports line-number specifications with a different
1893 syntax.
1893 syntax.
1894
1894
1895 -p: this will call the editor with the same data as the previous time
1895 -p: this will call the editor with the same data as the previous time
1896 it was used, regardless of how long ago (in your current session) it
1896 it was used, regardless of how long ago (in your current session) it
1897 was.
1897 was.
1898
1898
1899 -r: use 'raw' input. This option only applies to input taken from the
1899 -r: use 'raw' input. This option only applies to input taken from the
1900 user's history. By default, the 'processed' history is used, so that
1900 user's history. By default, the 'processed' history is used, so that
1901 magics are loaded in their transformed version to valid Python. If
1901 magics are loaded in their transformed version to valid Python. If
1902 this option is given, the raw input as typed as the command line is
1902 this option is given, the raw input as typed as the command line is
1903 used instead. When you exit the editor, it will be executed by
1903 used instead. When you exit the editor, it will be executed by
1904 IPython's own processor.
1904 IPython's own processor.
1905
1905
1906 -x: do not execute the edited code immediately upon exit. This is
1906 -x: do not execute the edited code immediately upon exit. This is
1907 mainly useful if you are editing programs which need to be called with
1907 mainly useful if you are editing programs which need to be called with
1908 command line arguments, which you can then do using %run.
1908 command line arguments, which you can then do using %run.
1909
1909
1910
1910
1911 Arguments:
1911 Arguments:
1912
1912
1913 If arguments are given, the following possibilites exist:
1913 If arguments are given, the following possibilites exist:
1914
1914
1915 - The arguments are numbers or pairs of colon-separated numbers (like
1915 - The arguments are numbers or pairs of colon-separated numbers (like
1916 1 4:8 9). These are interpreted as lines of previous input to be
1916 1 4:8 9). These are interpreted as lines of previous input to be
1917 loaded into the editor. The syntax is the same of the %macro command.
1917 loaded into the editor. The syntax is the same of the %macro command.
1918
1918
1919 - If the argument doesn't start with a number, it is evaluated as a
1919 - If the argument doesn't start with a number, it is evaluated as a
1920 variable and its contents loaded into the editor. You can thus edit
1920 variable and its contents loaded into the editor. You can thus edit
1921 any string which contains python code (including the result of
1921 any string which contains python code (including the result of
1922 previous edits).
1922 previous edits).
1923
1923
1924 - If the argument is the name of an object (other than a string),
1924 - If the argument is the name of an object (other than a string),
1925 IPython will try to locate the file where it was defined and open the
1925 IPython will try to locate the file where it was defined and open the
1926 editor at the point where it is defined. You can use `%edit function`
1926 editor at the point where it is defined. You can use `%edit function`
1927 to load an editor exactly at the point where 'function' is defined,
1927 to load an editor exactly at the point where 'function' is defined,
1928 edit it and have the file be executed automatically.
1928 edit it and have the file be executed automatically.
1929
1929
1930 If the object is a macro (see %macro for details), this opens up your
1930 If the object is a macro (see %macro for details), this opens up your
1931 specified editor with a temporary file containing the macro's data.
1931 specified editor with a temporary file containing the macro's data.
1932 Upon exit, the macro is reloaded with the contents of the file.
1932 Upon exit, the macro is reloaded with the contents of the file.
1933
1933
1934 Note: opening at an exact line is only supported under Unix, and some
1934 Note: opening at an exact line is only supported under Unix, and some
1935 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1935 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1936 '+NUMBER' parameter necessary for this feature. Good editors like
1936 '+NUMBER' parameter necessary for this feature. Good editors like
1937 (X)Emacs, vi, jed, pico and joe all do.
1937 (X)Emacs, vi, jed, pico and joe all do.
1938
1938
1939 - If the argument is not found as a variable, IPython will look for a
1939 - If the argument is not found as a variable, IPython will look for a
1940 file with that name (adding .py if necessary) and load it into the
1940 file with that name (adding .py if necessary) and load it into the
1941 editor. It will execute its contents with execfile() when you exit,
1941 editor. It will execute its contents with execfile() when you exit,
1942 loading any code in the file into your interactive namespace.
1942 loading any code in the file into your interactive namespace.
1943
1943
1944 After executing your code, %edit will return as output the code you
1944 After executing your code, %edit will return as output the code you
1945 typed in the editor (except when it was an existing file). This way
1945 typed in the editor (except when it was an existing file). This way
1946 you can reload the code in further invocations of %edit as a variable,
1946 you can reload the code in further invocations of %edit as a variable,
1947 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1947 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1948 the output.
1948 the output.
1949
1949
1950 Note that %edit is also available through the alias %ed.
1950 Note that %edit is also available through the alias %ed.
1951
1951
1952 This is an example of creating a simple function inside the editor and
1952 This is an example of creating a simple function inside the editor and
1953 then modifying it. First, start up the editor:
1953 then modifying it. First, start up the editor:
1954
1954
1955 In [1]: ed\\
1955 In [1]: ed\\
1956 Editing... done. Executing edited code...\\
1956 Editing... done. Executing edited code...\\
1957 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1957 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1958
1958
1959 We can then call the function foo():
1959 We can then call the function foo():
1960
1960
1961 In [2]: foo()\\
1961 In [2]: foo()\\
1962 foo() was defined in an editing session
1962 foo() was defined in an editing session
1963
1963
1964 Now we edit foo. IPython automatically loads the editor with the
1964 Now we edit foo. IPython automatically loads the editor with the
1965 (temporary) file where foo() was previously defined:
1965 (temporary) file where foo() was previously defined:
1966
1966
1967 In [3]: ed foo\\
1967 In [3]: ed foo\\
1968 Editing... done. Executing edited code...
1968 Editing... done. Executing edited code...
1969
1969
1970 And if we call foo() again we get the modified version:
1970 And if we call foo() again we get the modified version:
1971
1971
1972 In [4]: foo()\\
1972 In [4]: foo()\\
1973 foo() has now been changed!
1973 foo() has now been changed!
1974
1974
1975 Here is an example of how to edit a code snippet successive
1975 Here is an example of how to edit a code snippet successive
1976 times. First we call the editor:
1976 times. First we call the editor:
1977
1977
1978 In [8]: ed\\
1978 In [8]: ed\\
1979 Editing... done. Executing edited code...\\
1979 Editing... done. Executing edited code...\\
1980 hello\\
1980 hello\\
1981 Out[8]: "print 'hello'\\n"
1981 Out[8]: "print 'hello'\\n"
1982
1982
1983 Now we call it again with the previous output (stored in _):
1983 Now we call it again with the previous output (stored in _):
1984
1984
1985 In [9]: ed _\\
1985 In [9]: ed _\\
1986 Editing... done. Executing edited code...\\
1986 Editing... done. Executing edited code...\\
1987 hello world\\
1987 hello world\\
1988 Out[9]: "print 'hello world'\\n"
1988 Out[9]: "print 'hello world'\\n"
1989
1989
1990 Now we call it with the output #8 (stored in _8, also as Out[8]):
1990 Now we call it with the output #8 (stored in _8, also as Out[8]):
1991
1991
1992 In [10]: ed _8\\
1992 In [10]: ed _8\\
1993 Editing... done. Executing edited code...\\
1993 Editing... done. Executing edited code...\\
1994 hello again\\
1994 hello again\\
1995 Out[10]: "print 'hello again'\\n"
1995 Out[10]: "print 'hello again'\\n"
1996
1996
1997
1997
1998 Changing the default editor hook:
1998 Changing the default editor hook:
1999
1999
2000 If you wish to write your own editor hook, you can put it in a
2000 If you wish to write your own editor hook, you can put it in a
2001 configuration file which you load at startup time. The default hook
2001 configuration file which you load at startup time. The default hook
2002 is defined in the IPython.hooks module, and you can use that as a
2002 is defined in the IPython.hooks module, and you can use that as a
2003 starting example for further modifications. That file also has
2003 starting example for further modifications. That file also has
2004 general instructions on how to set a new hook for use once you've
2004 general instructions on how to set a new hook for use once you've
2005 defined it."""
2005 defined it."""
2006
2006
2007 # FIXME: This function has become a convoluted mess. It needs a
2007 # FIXME: This function has become a convoluted mess. It needs a
2008 # ground-up rewrite with clean, simple logic.
2008 # ground-up rewrite with clean, simple logic.
2009
2009
2010 def make_filename(arg):
2010 def make_filename(arg):
2011 "Make a filename from the given args"
2011 "Make a filename from the given args"
2012 try:
2012 try:
2013 filename = get_py_filename(arg)
2013 filename = get_py_filename(arg)
2014 except IOError:
2014 except IOError:
2015 if args.endswith('.py'):
2015 if args.endswith('.py'):
2016 filename = arg
2016 filename = arg
2017 else:
2017 else:
2018 filename = None
2018 filename = None
2019 return filename
2019 return filename
2020
2020
2021 # custom exceptions
2021 # custom exceptions
2022 class DataIsObject(Exception): pass
2022 class DataIsObject(Exception): pass
2023
2023
2024 opts,args = self.parse_options(parameter_s,'prxn:')
2024 opts,args = self.parse_options(parameter_s,'prxn:')
2025 # Set a few locals from the options for convenience:
2025 # Set a few locals from the options for convenience:
2026 opts_p = opts.has_key('p')
2026 opts_p = opts.has_key('p')
2027 opts_r = opts.has_key('r')
2027 opts_r = opts.has_key('r')
2028
2028
2029 # Default line number value
2029 # Default line number value
2030 lineno = opts.get('n',None)
2030 lineno = opts.get('n',None)
2031
2031
2032 if opts_p:
2032 if opts_p:
2033 args = '_%s' % last_call[0]
2033 args = '_%s' % last_call[0]
2034 if not self.shell.user_ns.has_key(args):
2034 if not self.shell.user_ns.has_key(args):
2035 args = last_call[1]
2035 args = last_call[1]
2036
2036
2037 # use last_call to remember the state of the previous call, but don't
2037 # use last_call to remember the state of the previous call, but don't
2038 # let it be clobbered by successive '-p' calls.
2038 # let it be clobbered by successive '-p' calls.
2039 try:
2039 try:
2040 last_call[0] = self.shell.outputcache.prompt_count
2040 last_call[0] = self.shell.outputcache.prompt_count
2041 if not opts_p:
2041 if not opts_p:
2042 last_call[1] = parameter_s
2042 last_call[1] = parameter_s
2043 except:
2043 except:
2044 pass
2044 pass
2045
2045
2046 # by default this is done with temp files, except when the given
2046 # by default this is done with temp files, except when the given
2047 # arg is a filename
2047 # arg is a filename
2048 use_temp = 1
2048 use_temp = 1
2049
2049
2050 if re.match(r'\d',args):
2050 if re.match(r'\d',args):
2051 # Mode where user specifies ranges of lines, like in %macro.
2051 # Mode where user specifies ranges of lines, like in %macro.
2052 # This means that you can't edit files whose names begin with
2052 # This means that you can't edit files whose names begin with
2053 # numbers this way. Tough.
2053 # numbers this way. Tough.
2054 ranges = args.split()
2054 ranges = args.split()
2055 data = ''.join(self.extract_input_slices(ranges,opts_r))
2055 data = ''.join(self.extract_input_slices(ranges,opts_r))
2056 elif args.endswith('.py'):
2056 elif args.endswith('.py'):
2057 filename = make_filename(args)
2057 filename = make_filename(args)
2058 data = ''
2058 data = ''
2059 use_temp = 0
2059 use_temp = 0
2060 elif args:
2060 elif args:
2061 try:
2061 try:
2062 # Load the parameter given as a variable. If not a string,
2062 # Load the parameter given as a variable. If not a string,
2063 # process it as an object instead (below)
2063 # process it as an object instead (below)
2064
2064
2065 #print '*** args',args,'type',type(args) # dbg
2065 #print '*** args',args,'type',type(args) # dbg
2066 data = eval(args,self.shell.user_ns)
2066 data = eval(args,self.shell.user_ns)
2067 if not type(data) in StringTypes:
2067 if not type(data) in StringTypes:
2068 raise DataIsObject
2068 raise DataIsObject
2069
2069
2070 except (NameError,SyntaxError):
2070 except (NameError,SyntaxError):
2071 # given argument is not a variable, try as a filename
2071 # given argument is not a variable, try as a filename
2072 filename = make_filename(args)
2072 filename = make_filename(args)
2073 if filename is None:
2073 if filename is None:
2074 warn("Argument given (%s) can't be found as a variable "
2074 warn("Argument given (%s) can't be found as a variable "
2075 "or as a filename." % args)
2075 "or as a filename." % args)
2076 return
2076 return
2077
2077
2078 data = ''
2078 data = ''
2079 use_temp = 0
2079 use_temp = 0
2080 except DataIsObject:
2080 except DataIsObject:
2081
2081
2082 # macros have a special edit function
2082 # macros have a special edit function
2083 if isinstance(data,Macro):
2083 if isinstance(data,Macro):
2084 self._edit_macro(args,data)
2084 self._edit_macro(args,data)
2085 return
2085 return
2086
2086
2087 # For objects, try to edit the file where they are defined
2087 # For objects, try to edit the file where they are defined
2088 try:
2088 try:
2089 filename = inspect.getabsfile(data)
2089 filename = inspect.getabsfile(data)
2090 datafile = 1
2090 datafile = 1
2091 except TypeError:
2091 except TypeError:
2092 filename = make_filename(args)
2092 filename = make_filename(args)
2093 datafile = 1
2093 datafile = 1
2094 warn('Could not find file where `%s` is defined.\n'
2094 warn('Could not find file where `%s` is defined.\n'
2095 'Opening a file named `%s`' % (args,filename))
2095 'Opening a file named `%s`' % (args,filename))
2096 # Now, make sure we can actually read the source (if it was in
2096 # Now, make sure we can actually read the source (if it was in
2097 # a temp file it's gone by now).
2097 # a temp file it's gone by now).
2098 if datafile:
2098 if datafile:
2099 try:
2099 try:
2100 if lineno is None:
2100 if lineno is None:
2101 lineno = inspect.getsourcelines(data)[1]
2101 lineno = inspect.getsourcelines(data)[1]
2102 except IOError:
2102 except IOError:
2103 filename = make_filename(args)
2103 filename = make_filename(args)
2104 if filename is None:
2104 if filename is None:
2105 warn('The file `%s` where `%s` was defined cannot '
2105 warn('The file `%s` where `%s` was defined cannot '
2106 'be read.' % (filename,data))
2106 'be read.' % (filename,data))
2107 return
2107 return
2108 use_temp = 0
2108 use_temp = 0
2109 else:
2109 else:
2110 data = ''
2110 data = ''
2111
2111
2112 if use_temp:
2112 if use_temp:
2113 filename = self.shell.mktempfile(data)
2113 filename = self.shell.mktempfile(data)
2114 print 'IPython will make a temporary file named:',filename
2114 print 'IPython will make a temporary file named:',filename
2115
2115
2116 # do actual editing here
2116 # do actual editing here
2117 print 'Editing...',
2117 print 'Editing...',
2118 sys.stdout.flush()
2118 sys.stdout.flush()
2119 self.shell.hooks.editor(filename,lineno)
2119 self.shell.hooks.editor(filename,lineno)
2120 if opts.has_key('x'): # -x prevents actual execution
2120 if opts.has_key('x'): # -x prevents actual execution
2121 print
2121 print
2122 else:
2122 else:
2123 print 'done. Executing edited code...'
2123 print 'done. Executing edited code...'
2124 if opts_r:
2124 if opts_r:
2125 self.shell.runlines(file_read(filename))
2125 self.shell.runlines(file_read(filename))
2126 else:
2126 else:
2127 self.shell.safe_execfile(filename,self.shell.user_ns)
2127 self.shell.safe_execfile(filename,self.shell.user_ns)
2128 if use_temp:
2128 if use_temp:
2129 try:
2129 try:
2130 return open(filename).read()
2130 return open(filename).read()
2131 except IOError,msg:
2131 except IOError,msg:
2132 if msg.filename == filename:
2132 if msg.filename == filename:
2133 warn('File not found. Did you forget to save?')
2133 warn('File not found. Did you forget to save?')
2134 return
2134 return
2135 else:
2135 else:
2136 self.shell.showtraceback()
2136 self.shell.showtraceback()
2137
2137
2138 def magic_xmode(self,parameter_s = ''):
2138 def magic_xmode(self,parameter_s = ''):
2139 """Switch modes for the exception handlers.
2139 """Switch modes for the exception handlers.
2140
2140
2141 Valid modes: Plain, Context and Verbose.
2141 Valid modes: Plain, Context and Verbose.
2142
2142
2143 If called without arguments, acts as a toggle."""
2143 If called without arguments, acts as a toggle."""
2144
2144
2145 def xmode_switch_err(name):
2145 def xmode_switch_err(name):
2146 warn('Error changing %s exception modes.\n%s' %
2146 warn('Error changing %s exception modes.\n%s' %
2147 (name,sys.exc_info()[1]))
2147 (name,sys.exc_info()[1]))
2148
2148
2149 shell = self.shell
2149 shell = self.shell
2150 new_mode = parameter_s.strip().capitalize()
2150 new_mode = parameter_s.strip().capitalize()
2151 try:
2151 try:
2152 shell.InteractiveTB.set_mode(mode=new_mode)
2152 shell.InteractiveTB.set_mode(mode=new_mode)
2153 print 'Exception reporting mode:',shell.InteractiveTB.mode
2153 print 'Exception reporting mode:',shell.InteractiveTB.mode
2154 except:
2154 except:
2155 xmode_switch_err('user')
2155 xmode_switch_err('user')
2156
2156
2157 # threaded shells use a special handler in sys.excepthook
2157 # threaded shells use a special handler in sys.excepthook
2158 if shell.isthreaded:
2158 if shell.isthreaded:
2159 try:
2159 try:
2160 shell.sys_excepthook.set_mode(mode=new_mode)
2160 shell.sys_excepthook.set_mode(mode=new_mode)
2161 except:
2161 except:
2162 xmode_switch_err('threaded')
2162 xmode_switch_err('threaded')
2163
2163
2164 def magic_colors(self,parameter_s = ''):
2164 def magic_colors(self,parameter_s = ''):
2165 """Switch color scheme for prompts, info system and exception handlers.
2165 """Switch color scheme for prompts, info system and exception handlers.
2166
2166
2167 Currently implemented schemes: NoColor, Linux, LightBG.
2167 Currently implemented schemes: NoColor, Linux, LightBG.
2168
2168
2169 Color scheme names are not case-sensitive."""
2169 Color scheme names are not case-sensitive."""
2170
2170
2171 def color_switch_err(name):
2171 def color_switch_err(name):
2172 warn('Error changing %s color schemes.\n%s' %
2172 warn('Error changing %s color schemes.\n%s' %
2173 (name,sys.exc_info()[1]))
2173 (name,sys.exc_info()[1]))
2174
2174
2175
2175
2176 new_scheme = parameter_s.strip()
2176 new_scheme = parameter_s.strip()
2177 if not new_scheme:
2177 if not new_scheme:
2178 print 'You must specify a color scheme.'
2178 print 'You must specify a color scheme.'
2179 return
2179 return
2180 import IPython.rlineimpl as readline
2180 import IPython.rlineimpl as readline
2181 if not readline.have_readline:
2181 if not readline.have_readline:
2182 msg = """\
2182 msg = """\
2183 Proper color support under MS Windows requires Gary Bishop's readline library.
2183 Proper color support under MS Windows requires Gary Bishop's readline library.
2184 You can find it at:
2184 You can find it at:
2185 http://sourceforge.net/projects/uncpythontools
2185 http://sourceforge.net/projects/uncpythontools
2186 Gary's readline needs the ctypes module, from:
2186 Gary's readline needs the ctypes module, from:
2187 http://starship.python.net/crew/theller/ctypes
2187 http://starship.python.net/crew/theller/ctypes
2188
2188
2189 Defaulting color scheme to 'NoColor'"""
2189 Defaulting color scheme to 'NoColor'"""
2190 new_scheme = 'NoColor'
2190 new_scheme = 'NoColor'
2191 warn(msg)
2191 warn(msg)
2192 # local shortcut
2192 # local shortcut
2193 shell = self.shell
2193 shell = self.shell
2194
2194
2195 # Set prompt colors
2195 # Set prompt colors
2196 try:
2196 try:
2197 shell.outputcache.set_colors(new_scheme)
2197 shell.outputcache.set_colors(new_scheme)
2198 except:
2198 except:
2199 color_switch_err('prompt')
2199 color_switch_err('prompt')
2200 else:
2200 else:
2201 shell.rc.colors = \
2201 shell.rc.colors = \
2202 shell.outputcache.color_table.active_scheme_name
2202 shell.outputcache.color_table.active_scheme_name
2203 # Set exception colors
2203 # Set exception colors
2204 try:
2204 try:
2205 shell.InteractiveTB.set_colors(scheme = new_scheme)
2205 shell.InteractiveTB.set_colors(scheme = new_scheme)
2206 shell.SyntaxTB.set_colors(scheme = new_scheme)
2206 shell.SyntaxTB.set_colors(scheme = new_scheme)
2207 except:
2207 except:
2208 color_switch_err('exception')
2208 color_switch_err('exception')
2209
2209
2210 # threaded shells use a verbose traceback in sys.excepthook
2210 # threaded shells use a verbose traceback in sys.excepthook
2211 if shell.isthreaded:
2211 if shell.isthreaded:
2212 try:
2212 try:
2213 shell.sys_excepthook.set_colors(scheme=new_scheme)
2213 shell.sys_excepthook.set_colors(scheme=new_scheme)
2214 except:
2214 except:
2215 color_switch_err('system exception handler')
2215 color_switch_err('system exception handler')
2216
2216
2217 # Set info (for 'object?') colors
2217 # Set info (for 'object?') colors
2218 if shell.rc.color_info:
2218 if shell.rc.color_info:
2219 try:
2219 try:
2220 shell.inspector.set_active_scheme(new_scheme)
2220 shell.inspector.set_active_scheme(new_scheme)
2221 except:
2221 except:
2222 color_switch_err('object inspector')
2222 color_switch_err('object inspector')
2223 else:
2223 else:
2224 shell.inspector.set_active_scheme('NoColor')
2224 shell.inspector.set_active_scheme('NoColor')
2225
2225
2226 def magic_color_info(self,parameter_s = ''):
2226 def magic_color_info(self,parameter_s = ''):
2227 """Toggle color_info.
2227 """Toggle color_info.
2228
2228
2229 The color_info configuration parameter controls whether colors are
2229 The color_info configuration parameter controls whether colors are
2230 used for displaying object details (by things like %psource, %pfile or
2230 used for displaying object details (by things like %psource, %pfile or
2231 the '?' system). This function toggles this value with each call.
2231 the '?' system). This function toggles this value with each call.
2232
2232
2233 Note that unless you have a fairly recent pager (less works better
2233 Note that unless you have a fairly recent pager (less works better
2234 than more) in your system, using colored object information displays
2234 than more) in your system, using colored object information displays
2235 will not work properly. Test it and see."""
2235 will not work properly. Test it and see."""
2236
2236
2237 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2237 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2238 self.magic_colors(self.shell.rc.colors)
2238 self.magic_colors(self.shell.rc.colors)
2239 print 'Object introspection functions have now coloring:',
2239 print 'Object introspection functions have now coloring:',
2240 print ['OFF','ON'][self.shell.rc.color_info]
2240 print ['OFF','ON'][self.shell.rc.color_info]
2241
2241
2242 def magic_Pprint(self, parameter_s=''):
2242 def magic_Pprint(self, parameter_s=''):
2243 """Toggle pretty printing on/off."""
2243 """Toggle pretty printing on/off."""
2244
2244
2245 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2245 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2246 print 'Pretty printing has been turned', \
2246 print 'Pretty printing has been turned', \
2247 ['OFF','ON'][self.shell.rc.pprint]
2247 ['OFF','ON'][self.shell.rc.pprint]
2248
2248
2249 def magic_exit(self, parameter_s=''):
2249 def magic_exit(self, parameter_s=''):
2250 """Exit IPython, confirming if configured to do so.
2250 """Exit IPython, confirming if configured to do so.
2251
2251
2252 You can configure whether IPython asks for confirmation upon exit by
2252 You can configure whether IPython asks for confirmation upon exit by
2253 setting the confirm_exit flag in the ipythonrc file."""
2253 setting the confirm_exit flag in the ipythonrc file."""
2254
2254
2255 self.shell.exit()
2255 self.shell.exit()
2256
2256
2257 def magic_quit(self, parameter_s=''):
2257 def magic_quit(self, parameter_s=''):
2258 """Exit IPython, confirming if configured to do so (like %exit)"""
2258 """Exit IPython, confirming if configured to do so (like %exit)"""
2259
2259
2260 self.shell.exit()
2260 self.shell.exit()
2261
2261
2262 def magic_Exit(self, parameter_s=''):
2262 def magic_Exit(self, parameter_s=''):
2263 """Exit IPython without confirmation."""
2263 """Exit IPython without confirmation."""
2264
2264
2265 self.shell.exit_now = True
2265 self.shell.exit_now = True
2266
2266
2267 def magic_Quit(self, parameter_s=''):
2267 def magic_Quit(self, parameter_s=''):
2268 """Exit IPython without confirmation (like %Exit)."""
2268 """Exit IPython without confirmation (like %Exit)."""
2269
2269
2270 self.shell.exit_now = True
2270 self.shell.exit_now = True
2271
2271
2272 #......................................................................
2272 #......................................................................
2273 # Functions to implement unix shell-type things
2273 # Functions to implement unix shell-type things
2274
2274
2275 def magic_alias(self, parameter_s = ''):
2275 def magic_alias(self, parameter_s = ''):
2276 """Define an alias for a system command.
2276 """Define an alias for a system command.
2277
2277
2278 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2278 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2279
2279
2280 Then, typing 'alias_name params' will execute the system command 'cmd
2280 Then, typing 'alias_name params' will execute the system command 'cmd
2281 params' (from your underlying operating system).
2281 params' (from your underlying operating system).
2282
2282
2283 Aliases have lower precedence than magic functions and Python normal
2283 Aliases have lower precedence than magic functions and Python normal
2284 variables, so if 'foo' is both a Python variable and an alias, the
2284 variables, so if 'foo' is both a Python variable and an alias, the
2285 alias can not be executed until 'del foo' removes the Python variable.
2285 alias can not be executed until 'del foo' removes the Python variable.
2286
2286
2287 You can use the %l specifier in an alias definition to represent the
2287 You can use the %l specifier in an alias definition to represent the
2288 whole line when the alias is called. For example:
2288 whole line when the alias is called. For example:
2289
2289
2290 In [2]: alias all echo "Input in brackets: <%l>"\\
2290 In [2]: alias all echo "Input in brackets: <%l>"\\
2291 In [3]: all hello world\\
2291 In [3]: all hello world\\
2292 Input in brackets: <hello world>
2292 Input in brackets: <hello world>
2293
2293
2294 You can also define aliases with parameters using %s specifiers (one
2294 You can also define aliases with parameters using %s specifiers (one
2295 per parameter):
2295 per parameter):
2296
2296
2297 In [1]: alias parts echo first %s second %s\\
2297 In [1]: alias parts echo first %s second %s\\
2298 In [2]: %parts A B\\
2298 In [2]: %parts A B\\
2299 first A second B\\
2299 first A second B\\
2300 In [3]: %parts A\\
2300 In [3]: %parts A\\
2301 Incorrect number of arguments: 2 expected.\\
2301 Incorrect number of arguments: 2 expected.\\
2302 parts is an alias to: 'echo first %s second %s'
2302 parts is an alias to: 'echo first %s second %s'
2303
2303
2304 Note that %l and %s are mutually exclusive. You can only use one or
2304 Note that %l and %s are mutually exclusive. You can only use one or
2305 the other in your aliases.
2305 the other in your aliases.
2306
2306
2307 Aliases expand Python variables just like system calls using ! or !!
2307 Aliases expand Python variables just like system calls using ! or !!
2308 do: all expressions prefixed with '$' get expanded. For details of
2308 do: all expressions prefixed with '$' get expanded. For details of
2309 the semantic rules, see PEP-215:
2309 the semantic rules, see PEP-215:
2310 http://www.python.org/peps/pep-0215.html. This is the library used by
2310 http://www.python.org/peps/pep-0215.html. This is the library used by
2311 IPython for variable expansion. If you want to access a true shell
2311 IPython for variable expansion. If you want to access a true shell
2312 variable, an extra $ is necessary to prevent its expansion by IPython:
2312 variable, an extra $ is necessary to prevent its expansion by IPython:
2313
2313
2314 In [6]: alias show echo\\
2314 In [6]: alias show echo\\
2315 In [7]: PATH='A Python string'\\
2315 In [7]: PATH='A Python string'\\
2316 In [8]: show $PATH\\
2316 In [8]: show $PATH\\
2317 A Python string\\
2317 A Python string\\
2318 In [9]: show $$PATH\\
2318 In [9]: show $$PATH\\
2319 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2319 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2320
2320
2321 You can use the alias facility to acess all of $PATH. See the %rehash
2321 You can use the alias facility to acess all of $PATH. See the %rehash
2322 and %rehashx functions, which automatically create aliases for the
2322 and %rehashx functions, which automatically create aliases for the
2323 contents of your $PATH.
2323 contents of your $PATH.
2324
2324
2325 If called with no parameters, %alias prints the current alias table."""
2325 If called with no parameters, %alias prints the current alias table."""
2326
2326
2327 par = parameter_s.strip()
2327 par = parameter_s.strip()
2328 if not par:
2328 if not par:
2329 if self.shell.rc.automagic:
2329 if self.shell.rc.automagic:
2330 prechar = ''
2330 prechar = ''
2331 else:
2331 else:
2332 prechar = self.shell.ESC_MAGIC
2332 prechar = self.shell.ESC_MAGIC
2333 #print 'Alias\t\tSystem Command\n'+'-'*30
2333 #print 'Alias\t\tSystem Command\n'+'-'*30
2334 atab = self.shell.alias_table
2334 atab = self.shell.alias_table
2335 aliases = atab.keys()
2335 aliases = atab.keys()
2336 aliases.sort()
2336 aliases.sort()
2337 res = []
2337 res = []
2338 for alias in aliases:
2338 for alias in aliases:
2339 res.append((alias, atab[alias][1]))
2339 res.append((alias, atab[alias][1]))
2340 print "Total number of aliases:",len(aliases)
2340 print "Total number of aliases:",len(aliases)
2341 return res
2341 return res
2342 try:
2342 try:
2343 alias,cmd = par.split(None,1)
2343 alias,cmd = par.split(None,1)
2344 except:
2344 except:
2345 print OInspect.getdoc(self.magic_alias)
2345 print OInspect.getdoc(self.magic_alias)
2346 else:
2346 else:
2347 nargs = cmd.count('%s')
2347 nargs = cmd.count('%s')
2348 if nargs>0 and cmd.find('%l')>=0:
2348 if nargs>0 and cmd.find('%l')>=0:
2349 error('The %s and %l specifiers are mutually exclusive '
2349 error('The %s and %l specifiers are mutually exclusive '
2350 'in alias definitions.')
2350 'in alias definitions.')
2351 else: # all looks OK
2351 else: # all looks OK
2352 self.shell.alias_table[alias] = (nargs,cmd)
2352 self.shell.alias_table[alias] = (nargs,cmd)
2353 self.shell.alias_table_validate(verbose=0)
2353 self.shell.alias_table_validate(verbose=0)
2354 # end magic_alias
2354 # end magic_alias
2355
2355
2356 def magic_unalias(self, parameter_s = ''):
2356 def magic_unalias(self, parameter_s = ''):
2357 """Remove an alias"""
2357 """Remove an alias"""
2358
2358
2359 aname = parameter_s.strip()
2359 aname = parameter_s.strip()
2360 if aname in self.shell.alias_table:
2360 if aname in self.shell.alias_table:
2361 del self.shell.alias_table[aname]
2361 del self.shell.alias_table[aname]
2362
2362
2363 def magic_rehash(self, parameter_s = ''):
2363 def magic_rehash(self, parameter_s = ''):
2364 """Update the alias table with all entries in $PATH.
2364 """Update the alias table with all entries in $PATH.
2365
2365
2366 This version does no checks on execute permissions or whether the
2366 This version does no checks on execute permissions or whether the
2367 contents of $PATH are truly files (instead of directories or something
2367 contents of $PATH are truly files (instead of directories or something
2368 else). For such a safer (but slower) version, use %rehashx."""
2368 else). For such a safer (but slower) version, use %rehashx."""
2369
2369
2370 # This function (and rehashx) manipulate the alias_table directly
2370 # This function (and rehashx) manipulate the alias_table directly
2371 # rather than calling magic_alias, for speed reasons. A rehash on a
2371 # rather than calling magic_alias, for speed reasons. A rehash on a
2372 # typical Linux box involves several thousand entries, so efficiency
2372 # typical Linux box involves several thousand entries, so efficiency
2373 # here is a top concern.
2373 # here is a top concern.
2374
2374
2375 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2375 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2376 alias_table = self.shell.alias_table
2376 alias_table = self.shell.alias_table
2377 for pdir in path:
2377 for pdir in path:
2378 for ff in os.listdir(pdir):
2378 for ff in os.listdir(pdir):
2379 # each entry in the alias table must be (N,name), where
2379 # each entry in the alias table must be (N,name), where
2380 # N is the number of positional arguments of the alias.
2380 # N is the number of positional arguments of the alias.
2381 alias_table[ff] = (0,ff)
2381 alias_table[ff] = (0,ff)
2382 # Make sure the alias table doesn't contain keywords or builtins
2382 # Make sure the alias table doesn't contain keywords or builtins
2383 self.shell.alias_table_validate()
2383 self.shell.alias_table_validate()
2384 # Call again init_auto_alias() so we get 'rm -i' and other modified
2384 # Call again init_auto_alias() so we get 'rm -i' and other modified
2385 # aliases since %rehash will probably clobber them
2385 # aliases since %rehash will probably clobber them
2386 self.shell.init_auto_alias()
2386 self.shell.init_auto_alias()
2387
2387
2388 def magic_rehashx(self, parameter_s = ''):
2388 def magic_rehashx(self, parameter_s = ''):
2389 """Update the alias table with all executable files in $PATH.
2389 """Update the alias table with all executable files in $PATH.
2390
2390
2391 This version explicitly checks that every entry in $PATH is a file
2391 This version explicitly checks that every entry in $PATH is a file
2392 with execute access (os.X_OK), so it is much slower than %rehash.
2392 with execute access (os.X_OK), so it is much slower than %rehash.
2393
2393
2394 Under Windows, it checks executability as a match agains a
2394 Under Windows, it checks executability as a match agains a
2395 '|'-separated string of extensions, stored in the IPython config
2395 '|'-separated string of extensions, stored in the IPython config
2396 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2396 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2397
2397
2398 path = [os.path.abspath(os.path.expanduser(p)) for p in
2398 path = [os.path.abspath(os.path.expanduser(p)) for p in
2399 os.environ['PATH'].split(os.pathsep)]
2399 os.environ['PATH'].split(os.pathsep)]
2400 path = filter(os.path.isdir,path)
2400 path = filter(os.path.isdir,path)
2401
2401
2402 alias_table = self.shell.alias_table
2402 alias_table = self.shell.alias_table
2403 syscmdlist = []
2403 syscmdlist = []
2404 if os.name == 'posix':
2404 if os.name == 'posix':
2405 isexec = lambda fname:os.path.isfile(fname) and \
2405 isexec = lambda fname:os.path.isfile(fname) and \
2406 os.access(fname,os.X_OK)
2406 os.access(fname,os.X_OK)
2407 else:
2407 else:
2408
2408
2409 try:
2409 try:
2410 winext = os.environ['pathext'].replace(';','|').replace('.','')
2410 winext = os.environ['pathext'].replace(';','|').replace('.','')
2411 except KeyError:
2411 except KeyError:
2412 winext = 'exe|com|bat'
2412 winext = 'exe|com|bat'
2413
2413
2414 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2414 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2415 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2415 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2416 savedir = os.getcwd()
2416 savedir = os.getcwd()
2417 try:
2417 try:
2418 # write the whole loop for posix/Windows so we don't have an if in
2418 # write the whole loop for posix/Windows so we don't have an if in
2419 # the innermost part
2419 # the innermost part
2420 if os.name == 'posix':
2420 if os.name == 'posix':
2421 for pdir in path:
2421 for pdir in path:
2422 os.chdir(pdir)
2422 os.chdir(pdir)
2423 for ff in os.listdir(pdir):
2423 for ff in os.listdir(pdir):
2424 if isexec(ff) and ff not in self.shell.no_alias:
2424 if isexec(ff) and ff not in self.shell.no_alias:
2425 # each entry in the alias table must be (N,name),
2425 # each entry in the alias table must be (N,name),
2426 # where N is the number of positional arguments of the
2426 # where N is the number of positional arguments of the
2427 # alias.
2427 # alias.
2428 alias_table[ff] = (0,ff)
2428 alias_table[ff] = (0,ff)
2429 syscmdlist.append(ff)
2429 syscmdlist.append(ff)
2430 else:
2430 else:
2431 for pdir in path:
2431 for pdir in path:
2432 os.chdir(pdir)
2432 os.chdir(pdir)
2433 for ff in os.listdir(pdir):
2433 for ff in os.listdir(pdir):
2434 if isexec(ff) and os.path.splitext(ff)[0] not in self.shell.no_alias:
2434 if isexec(ff) and os.path.splitext(ff)[0] not in self.shell.no_alias:
2435 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2435 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2436 syscmdlist.append(ff)
2436 syscmdlist.append(ff)
2437 # Make sure the alias table doesn't contain keywords or builtins
2437 # Make sure the alias table doesn't contain keywords or builtins
2438 self.shell.alias_table_validate()
2438 self.shell.alias_table_validate()
2439 # Call again init_auto_alias() so we get 'rm -i' and other
2439 # Call again init_auto_alias() so we get 'rm -i' and other
2440 # modified aliases since %rehashx will probably clobber them
2440 # modified aliases since %rehashx will probably clobber them
2441 self.shell.init_auto_alias()
2441 self.shell.init_auto_alias()
2442 db = self.getapi().db
2442 db = self.getapi().db
2443 db['syscmdlist'] = syscmdlist
2443 db['syscmdlist'] = syscmdlist
2444 finally:
2444 finally:
2445 os.chdir(savedir)
2445 os.chdir(savedir)
2446
2446
2447 def magic_pwd(self, parameter_s = ''):
2447 def magic_pwd(self, parameter_s = ''):
2448 """Return the current working directory path."""
2448 """Return the current working directory path."""
2449 return os.getcwd()
2449 return os.getcwd()
2450
2450
2451 def magic_cd(self, parameter_s=''):
2451 def magic_cd(self, parameter_s=''):
2452 """Change the current working directory.
2452 """Change the current working directory.
2453
2453
2454 This command automatically maintains an internal list of directories
2454 This command automatically maintains an internal list of directories
2455 you visit during your IPython session, in the variable _dh. The
2455 you visit during your IPython session, in the variable _dh. The
2456 command %dhist shows this history nicely formatted.
2456 command %dhist shows this history nicely formatted.
2457
2457
2458 Usage:
2458 Usage:
2459
2459
2460 cd 'dir': changes to directory 'dir'.
2460 cd 'dir': changes to directory 'dir'.
2461
2461
2462 cd -: changes to the last visited directory.
2462 cd -: changes to the last visited directory.
2463
2463
2464 cd -<n>: changes to the n-th directory in the directory history.
2464 cd -<n>: changes to the n-th directory in the directory history.
2465
2465
2466 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2466 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2467 (note: cd <bookmark_name> is enough if there is no
2467 (note: cd <bookmark_name> is enough if there is no
2468 directory <bookmark_name>, but a bookmark with the name exists.)
2468 directory <bookmark_name>, but a bookmark with the name exists.)
2469
2469
2470 Options:
2470 Options:
2471
2471
2472 -q: quiet. Do not print the working directory after the cd command is
2472 -q: quiet. Do not print the working directory after the cd command is
2473 executed. By default IPython's cd command does print this directory,
2473 executed. By default IPython's cd command does print this directory,
2474 since the default prompts do not display path information.
2474 since the default prompts do not display path information.
2475
2475
2476 Note that !cd doesn't work for this purpose because the shell where
2476 Note that !cd doesn't work for this purpose because the shell where
2477 !command runs is immediately discarded after executing 'command'."""
2477 !command runs is immediately discarded after executing 'command'."""
2478
2478
2479 parameter_s = parameter_s.strip()
2479 parameter_s = parameter_s.strip()
2480 #bkms = self.shell.persist.get("bookmarks",{})
2480 #bkms = self.shell.persist.get("bookmarks",{})
2481
2481
2482 numcd = re.match(r'(-)(\d+)$',parameter_s)
2482 numcd = re.match(r'(-)(\d+)$',parameter_s)
2483 # jump in directory history by number
2483 # jump in directory history by number
2484 if numcd:
2484 if numcd:
2485 nn = int(numcd.group(2))
2485 nn = int(numcd.group(2))
2486 try:
2486 try:
2487 ps = self.shell.user_ns['_dh'][nn]
2487 ps = self.shell.user_ns['_dh'][nn]
2488 except IndexError:
2488 except IndexError:
2489 print 'The requested directory does not exist in history.'
2489 print 'The requested directory does not exist in history.'
2490 return
2490 return
2491 else:
2491 else:
2492 opts = {}
2492 opts = {}
2493 else:
2493 else:
2494 #turn all non-space-escaping backslashes to slashes,
2494 #turn all non-space-escaping backslashes to slashes,
2495 # for c:\windows\directory\names\
2495 # for c:\windows\directory\names\
2496 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2496 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2497 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2497 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2498 # jump to previous
2498 # jump to previous
2499 if ps == '-':
2499 if ps == '-':
2500 try:
2500 try:
2501 ps = self.shell.user_ns['_dh'][-2]
2501 ps = self.shell.user_ns['_dh'][-2]
2502 except IndexError:
2502 except IndexError:
2503 print 'No previous directory to change to.'
2503 print 'No previous directory to change to.'
2504 return
2504 return
2505 # jump to bookmark if needed
2505 # jump to bookmark if needed
2506 else:
2506 else:
2507 if not os.path.isdir(ps) or opts.has_key('b'):
2507 if not os.path.isdir(ps) or opts.has_key('b'):
2508 bkms = self.db.get('bookmarks', {})
2508 bkms = self.db.get('bookmarks', {})
2509
2509
2510 if bkms.has_key(ps):
2510 if bkms.has_key(ps):
2511 target = bkms[ps]
2511 target = bkms[ps]
2512 print '(bookmark:%s) -> %s' % (ps,target)
2512 print '(bookmark:%s) -> %s' % (ps,target)
2513 ps = target
2513 ps = target
2514 else:
2514 else:
2515 if opts.has_key('b'):
2515 if opts.has_key('b'):
2516 error("Bookmark '%s' not found. "
2516 error("Bookmark '%s' not found. "
2517 "Use '%%bookmark -l' to see your bookmarks." % ps)
2517 "Use '%%bookmark -l' to see your bookmarks." % ps)
2518 return
2518 return
2519
2519
2520 # at this point ps should point to the target dir
2520 # at this point ps should point to the target dir
2521 if ps:
2521 if ps:
2522 try:
2522 try:
2523 os.chdir(os.path.expanduser(ps))
2523 os.chdir(os.path.expanduser(ps))
2524 ttitle = ("IPy:" + (
2524 ttitle = ("IPy:" + (
2525 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2525 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2526 platutils.set_term_title(ttitle)
2526 platutils.set_term_title(ttitle)
2527 except OSError:
2527 except OSError:
2528 print sys.exc_info()[1]
2528 print sys.exc_info()[1]
2529 else:
2529 else:
2530 self.shell.user_ns['_dh'].append(os.getcwd())
2530 self.shell.user_ns['_dh'].append(os.getcwd())
2531 else:
2531 else:
2532 os.chdir(self.shell.home_dir)
2532 os.chdir(self.shell.home_dir)
2533 platutils.set_term_title("IPy:~")
2533 platutils.set_term_title("IPy:~")
2534 self.shell.user_ns['_dh'].append(os.getcwd())
2534 self.shell.user_ns['_dh'].append(os.getcwd())
2535 if not 'q' in opts:
2535 if not 'q' in opts:
2536 print self.shell.user_ns['_dh'][-1]
2536 print self.shell.user_ns['_dh'][-1]
2537
2537
2538 def magic_dhist(self, parameter_s=''):
2538 def magic_dhist(self, parameter_s=''):
2539 """Print your history of visited directories.
2539 """Print your history of visited directories.
2540
2540
2541 %dhist -> print full history\\
2541 %dhist -> print full history\\
2542 %dhist n -> print last n entries only\\
2542 %dhist n -> print last n entries only\\
2543 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2543 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2544
2544
2545 This history is automatically maintained by the %cd command, and
2545 This history is automatically maintained by the %cd command, and
2546 always available as the global list variable _dh. You can use %cd -<n>
2546 always available as the global list variable _dh. You can use %cd -<n>
2547 to go to directory number <n>."""
2547 to go to directory number <n>."""
2548
2548
2549 dh = self.shell.user_ns['_dh']
2549 dh = self.shell.user_ns['_dh']
2550 if parameter_s:
2550 if parameter_s:
2551 try:
2551 try:
2552 args = map(int,parameter_s.split())
2552 args = map(int,parameter_s.split())
2553 except:
2553 except:
2554 self.arg_err(Magic.magic_dhist)
2554 self.arg_err(Magic.magic_dhist)
2555 return
2555 return
2556 if len(args) == 1:
2556 if len(args) == 1:
2557 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2557 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2558 elif len(args) == 2:
2558 elif len(args) == 2:
2559 ini,fin = args
2559 ini,fin = args
2560 else:
2560 else:
2561 self.arg_err(Magic.magic_dhist)
2561 self.arg_err(Magic.magic_dhist)
2562 return
2562 return
2563 else:
2563 else:
2564 ini,fin = 0,len(dh)
2564 ini,fin = 0,len(dh)
2565 nlprint(dh,
2565 nlprint(dh,
2566 header = 'Directory history (kept in _dh)',
2566 header = 'Directory history (kept in _dh)',
2567 start=ini,stop=fin)
2567 start=ini,stop=fin)
2568
2568
2569 def magic_env(self, parameter_s=''):
2569 def magic_env(self, parameter_s=''):
2570 """List environment variables."""
2570 """List environment variables."""
2571
2571
2572 return os.environ.data
2572 return os.environ.data
2573
2573
2574 def magic_pushd(self, parameter_s=''):
2574 def magic_pushd(self, parameter_s=''):
2575 """Place the current dir on stack and change directory.
2575 """Place the current dir on stack and change directory.
2576
2576
2577 Usage:\\
2577 Usage:\\
2578 %pushd ['dirname']
2578 %pushd ['dirname']
2579
2579
2580 %pushd with no arguments does a %pushd to your home directory.
2580 %pushd with no arguments does a %pushd to your home directory.
2581 """
2581 """
2582 if parameter_s == '': parameter_s = '~'
2582 if parameter_s == '': parameter_s = '~'
2583 dir_s = self.shell.dir_stack
2583 dir_s = self.shell.dir_stack
2584 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2584 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2585 os.path.expanduser(self.shell.dir_stack[0]):
2585 os.path.expanduser(self.shell.dir_stack[0]):
2586 try:
2586 try:
2587 self.magic_cd(parameter_s)
2587 self.magic_cd(parameter_s)
2588 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2588 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2589 self.magic_dirs()
2589 self.magic_dirs()
2590 except:
2590 except:
2591 print 'Invalid directory'
2591 print 'Invalid directory'
2592 else:
2592 else:
2593 print 'You are already there!'
2593 print 'You are already there!'
2594
2594
2595 def magic_popd(self, parameter_s=''):
2595 def magic_popd(self, parameter_s=''):
2596 """Change to directory popped off the top of the stack.
2596 """Change to directory popped off the top of the stack.
2597 """
2597 """
2598 if len (self.shell.dir_stack) > 1:
2598 if len (self.shell.dir_stack) > 1:
2599 self.shell.dir_stack.pop(0)
2599 self.shell.dir_stack.pop(0)
2600 self.magic_cd(self.shell.dir_stack[0])
2600 self.magic_cd(self.shell.dir_stack[0])
2601 print self.shell.dir_stack[0]
2601 print self.shell.dir_stack[0]
2602 else:
2602 else:
2603 print "You can't remove the starting directory from the stack:",\
2603 print "You can't remove the starting directory from the stack:",\
2604 self.shell.dir_stack
2604 self.shell.dir_stack
2605
2605
2606 def magic_dirs(self, parameter_s=''):
2606 def magic_dirs(self, parameter_s=''):
2607 """Return the current directory stack."""
2607 """Return the current directory stack."""
2608
2608
2609 return self.shell.dir_stack[:]
2609 return self.shell.dir_stack[:]
2610
2610
2611 def magic_sc(self, parameter_s=''):
2611 def magic_sc(self, parameter_s=''):
2612 """Shell capture - execute a shell command and capture its output.
2612 """Shell capture - execute a shell command and capture its output.
2613
2613
2614 DEPRECATED. Suboptimal, retained for backwards compatibility.
2614 DEPRECATED. Suboptimal, retained for backwards compatibility.
2615
2615
2616 You should use the form 'var = !command' instead. Example:
2616 You should use the form 'var = !command' instead. Example:
2617
2617
2618 "%sc -l myfiles = ls ~" should now be written as
2618 "%sc -l myfiles = ls ~" should now be written as
2619
2619
2620 "myfiles = !ls ~"
2620 "myfiles = !ls ~"
2621
2621
2622 myfiles.s, myfiles.l and myfiles.n still apply as documented
2622 myfiles.s, myfiles.l and myfiles.n still apply as documented
2623 below.
2623 below.
2624
2624
2625 --
2625 --
2626 %sc [options] varname=command
2626 %sc [options] varname=command
2627
2627
2628 IPython will run the given command using commands.getoutput(), and
2628 IPython will run the given command using commands.getoutput(), and
2629 will then update the user's interactive namespace with a variable
2629 will then update the user's interactive namespace with a variable
2630 called varname, containing the value of the call. Your command can
2630 called varname, containing the value of the call. Your command can
2631 contain shell wildcards, pipes, etc.
2631 contain shell wildcards, pipes, etc.
2632
2632
2633 The '=' sign in the syntax is mandatory, and the variable name you
2633 The '=' sign in the syntax is mandatory, and the variable name you
2634 supply must follow Python's standard conventions for valid names.
2634 supply must follow Python's standard conventions for valid names.
2635
2635
2636 (A special format without variable name exists for internal use)
2636 (A special format without variable name exists for internal use)
2637
2637
2638 Options:
2638 Options:
2639
2639
2640 -l: list output. Split the output on newlines into a list before
2640 -l: list output. Split the output on newlines into a list before
2641 assigning it to the given variable. By default the output is stored
2641 assigning it to the given variable. By default the output is stored
2642 as a single string.
2642 as a single string.
2643
2643
2644 -v: verbose. Print the contents of the variable.
2644 -v: verbose. Print the contents of the variable.
2645
2645
2646 In most cases you should not need to split as a list, because the
2646 In most cases you should not need to split as a list, because the
2647 returned value is a special type of string which can automatically
2647 returned value is a special type of string which can automatically
2648 provide its contents either as a list (split on newlines) or as a
2648 provide its contents either as a list (split on newlines) or as a
2649 space-separated string. These are convenient, respectively, either
2649 space-separated string. These are convenient, respectively, either
2650 for sequential processing or to be passed to a shell command.
2650 for sequential processing or to be passed to a shell command.
2651
2651
2652 For example:
2652 For example:
2653
2653
2654 # Capture into variable a
2654 # Capture into variable a
2655 In [9]: sc a=ls *py
2655 In [9]: sc a=ls *py
2656
2656
2657 # a is a string with embedded newlines
2657 # a is a string with embedded newlines
2658 In [10]: a
2658 In [10]: a
2659 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2659 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2660
2660
2661 # which can be seen as a list:
2661 # which can be seen as a list:
2662 In [11]: a.l
2662 In [11]: a.l
2663 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2663 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2664
2664
2665 # or as a whitespace-separated string:
2665 # or as a whitespace-separated string:
2666 In [12]: a.s
2666 In [12]: a.s
2667 Out[12]: 'setup.py win32_manual_post_install.py'
2667 Out[12]: 'setup.py win32_manual_post_install.py'
2668
2668
2669 # a.s is useful to pass as a single command line:
2669 # a.s is useful to pass as a single command line:
2670 In [13]: !wc -l $a.s
2670 In [13]: !wc -l $a.s
2671 146 setup.py
2671 146 setup.py
2672 130 win32_manual_post_install.py
2672 130 win32_manual_post_install.py
2673 276 total
2673 276 total
2674
2674
2675 # while the list form is useful to loop over:
2675 # while the list form is useful to loop over:
2676 In [14]: for f in a.l:
2676 In [14]: for f in a.l:
2677 ....: !wc -l $f
2677 ....: !wc -l $f
2678 ....:
2678 ....:
2679 146 setup.py
2679 146 setup.py
2680 130 win32_manual_post_install.py
2680 130 win32_manual_post_install.py
2681
2681
2682 Similiarly, the lists returned by the -l option are also special, in
2682 Similiarly, the lists returned by the -l option are also special, in
2683 the sense that you can equally invoke the .s attribute on them to
2683 the sense that you can equally invoke the .s attribute on them to
2684 automatically get a whitespace-separated string from their contents:
2684 automatically get a whitespace-separated string from their contents:
2685
2685
2686 In [1]: sc -l b=ls *py
2686 In [1]: sc -l b=ls *py
2687
2687
2688 In [2]: b
2688 In [2]: b
2689 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2689 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2690
2690
2691 In [3]: b.s
2691 In [3]: b.s
2692 Out[3]: 'setup.py win32_manual_post_install.py'
2692 Out[3]: 'setup.py win32_manual_post_install.py'
2693
2693
2694 In summary, both the lists and strings used for ouptut capture have
2694 In summary, both the lists and strings used for ouptut capture have
2695 the following special attributes:
2695 the following special attributes:
2696
2696
2697 .l (or .list) : value as list.
2697 .l (or .list) : value as list.
2698 .n (or .nlstr): value as newline-separated string.
2698 .n (or .nlstr): value as newline-separated string.
2699 .s (or .spstr): value as space-separated string.
2699 .s (or .spstr): value as space-separated string.
2700 """
2700 """
2701
2701
2702 opts,args = self.parse_options(parameter_s,'lv')
2702 opts,args = self.parse_options(parameter_s,'lv')
2703 # Try to get a variable name and command to run
2703 # Try to get a variable name and command to run
2704 try:
2704 try:
2705 # the variable name must be obtained from the parse_options
2705 # the variable name must be obtained from the parse_options
2706 # output, which uses shlex.split to strip options out.
2706 # output, which uses shlex.split to strip options out.
2707 var,_ = args.split('=',1)
2707 var,_ = args.split('=',1)
2708 var = var.strip()
2708 var = var.strip()
2709 # But the the command has to be extracted from the original input
2709 # But the the command has to be extracted from the original input
2710 # parameter_s, not on what parse_options returns, to avoid the
2710 # parameter_s, not on what parse_options returns, to avoid the
2711 # quote stripping which shlex.split performs on it.
2711 # quote stripping which shlex.split performs on it.
2712 _,cmd = parameter_s.split('=',1)
2712 _,cmd = parameter_s.split('=',1)
2713 except ValueError:
2713 except ValueError:
2714 var,cmd = '',''
2714 var,cmd = '',''
2715 # If all looks ok, proceed
2715 # If all looks ok, proceed
2716 out,err = self.shell.getoutputerror(cmd)
2716 out,err = self.shell.getoutputerror(cmd)
2717 if err:
2717 if err:
2718 print >> Term.cerr,err
2718 print >> Term.cerr,err
2719 if opts.has_key('l'):
2719 if opts.has_key('l'):
2720 out = SList(out.split('\n'))
2720 out = SList(out.split('\n'))
2721 else:
2721 else:
2722 out = LSString(out)
2722 out = LSString(out)
2723 if opts.has_key('v'):
2723 if opts.has_key('v'):
2724 print '%s ==\n%s' % (var,pformat(out))
2724 print '%s ==\n%s' % (var,pformat(out))
2725 if var:
2725 if var:
2726 self.shell.user_ns.update({var:out})
2726 self.shell.user_ns.update({var:out})
2727 else:
2727 else:
2728 return out
2728 return out
2729
2729
2730 def magic_sx(self, parameter_s=''):
2730 def magic_sx(self, parameter_s=''):
2731 """Shell execute - run a shell command and capture its output.
2731 """Shell execute - run a shell command and capture its output.
2732
2732
2733 %sx command
2733 %sx command
2734
2734
2735 IPython will run the given command using commands.getoutput(), and
2735 IPython will run the given command using commands.getoutput(), and
2736 return the result formatted as a list (split on '\\n'). Since the
2736 return the result formatted as a list (split on '\\n'). Since the
2737 output is _returned_, it will be stored in ipython's regular output
2737 output is _returned_, it will be stored in ipython's regular output
2738 cache Out[N] and in the '_N' automatic variables.
2738 cache Out[N] and in the '_N' automatic variables.
2739
2739
2740 Notes:
2740 Notes:
2741
2741
2742 1) If an input line begins with '!!', then %sx is automatically
2742 1) If an input line begins with '!!', then %sx is automatically
2743 invoked. That is, while:
2743 invoked. That is, while:
2744 !ls
2744 !ls
2745 causes ipython to simply issue system('ls'), typing
2745 causes ipython to simply issue system('ls'), typing
2746 !!ls
2746 !!ls
2747 is a shorthand equivalent to:
2747 is a shorthand equivalent to:
2748 %sx ls
2748 %sx ls
2749
2749
2750 2) %sx differs from %sc in that %sx automatically splits into a list,
2750 2) %sx differs from %sc in that %sx automatically splits into a list,
2751 like '%sc -l'. The reason for this is to make it as easy as possible
2751 like '%sc -l'. The reason for this is to make it as easy as possible
2752 to process line-oriented shell output via further python commands.
2752 to process line-oriented shell output via further python commands.
2753 %sc is meant to provide much finer control, but requires more
2753 %sc is meant to provide much finer control, but requires more
2754 typing.
2754 typing.
2755
2755
2756 3) Just like %sc -l, this is a list with special attributes:
2756 3) Just like %sc -l, this is a list with special attributes:
2757
2757
2758 .l (or .list) : value as list.
2758 .l (or .list) : value as list.
2759 .n (or .nlstr): value as newline-separated string.
2759 .n (or .nlstr): value as newline-separated string.
2760 .s (or .spstr): value as whitespace-separated string.
2760 .s (or .spstr): value as whitespace-separated string.
2761
2761
2762 This is very useful when trying to use such lists as arguments to
2762 This is very useful when trying to use such lists as arguments to
2763 system commands."""
2763 system commands."""
2764
2764
2765 if parameter_s:
2765 if parameter_s:
2766 out,err = self.shell.getoutputerror(parameter_s)
2766 out,err = self.shell.getoutputerror(parameter_s)
2767 if err:
2767 if err:
2768 print >> Term.cerr,err
2768 print >> Term.cerr,err
2769 return SList(out.split('\n'))
2769 return SList(out.split('\n'))
2770
2770
2771 def magic_bg(self, parameter_s=''):
2771 def magic_bg(self, parameter_s=''):
2772 """Run a job in the background, in a separate thread.
2772 """Run a job in the background, in a separate thread.
2773
2773
2774 For example,
2774 For example,
2775
2775
2776 %bg myfunc(x,y,z=1)
2776 %bg myfunc(x,y,z=1)
2777
2777
2778 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2778 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2779 execution starts, a message will be printed indicating the job
2779 execution starts, a message will be printed indicating the job
2780 number. If your job number is 5, you can use
2780 number. If your job number is 5, you can use
2781
2781
2782 myvar = jobs.result(5) or myvar = jobs[5].result
2782 myvar = jobs.result(5) or myvar = jobs[5].result
2783
2783
2784 to assign this result to variable 'myvar'.
2784 to assign this result to variable 'myvar'.
2785
2785
2786 IPython has a job manager, accessible via the 'jobs' object. You can
2786 IPython has a job manager, accessible via the 'jobs' object. You can
2787 type jobs? to get more information about it, and use jobs.<TAB> to see
2787 type jobs? to get more information about it, and use jobs.<TAB> to see
2788 its attributes. All attributes not starting with an underscore are
2788 its attributes. All attributes not starting with an underscore are
2789 meant for public use.
2789 meant for public use.
2790
2790
2791 In particular, look at the jobs.new() method, which is used to create
2791 In particular, look at the jobs.new() method, which is used to create
2792 new jobs. This magic %bg function is just a convenience wrapper
2792 new jobs. This magic %bg function is just a convenience wrapper
2793 around jobs.new(), for expression-based jobs. If you want to create a
2793 around jobs.new(), for expression-based jobs. If you want to create a
2794 new job with an explicit function object and arguments, you must call
2794 new job with an explicit function object and arguments, you must call
2795 jobs.new() directly.
2795 jobs.new() directly.
2796
2796
2797 The jobs.new docstring also describes in detail several important
2797 The jobs.new docstring also describes in detail several important
2798 caveats associated with a thread-based model for background job
2798 caveats associated with a thread-based model for background job
2799 execution. Type jobs.new? for details.
2799 execution. Type jobs.new? for details.
2800
2800
2801 You can check the status of all jobs with jobs.status().
2801 You can check the status of all jobs with jobs.status().
2802
2802
2803 The jobs variable is set by IPython into the Python builtin namespace.
2803 The jobs variable is set by IPython into the Python builtin namespace.
2804 If you ever declare a variable named 'jobs', you will shadow this
2804 If you ever declare a variable named 'jobs', you will shadow this
2805 name. You can either delete your global jobs variable to regain
2805 name. You can either delete your global jobs variable to regain
2806 access to the job manager, or make a new name and assign it manually
2806 access to the job manager, or make a new name and assign it manually
2807 to the manager (stored in IPython's namespace). For example, to
2807 to the manager (stored in IPython's namespace). For example, to
2808 assign the job manager to the Jobs name, use:
2808 assign the job manager to the Jobs name, use:
2809
2809
2810 Jobs = __builtins__.jobs"""
2810 Jobs = __builtins__.jobs"""
2811
2811
2812 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2812 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2813
2813
2814
2814
2815 def magic_bookmark(self, parameter_s=''):
2815 def magic_bookmark(self, parameter_s=''):
2816 """Manage IPython's bookmark system.
2816 """Manage IPython's bookmark system.
2817
2817
2818 %bookmark <name> - set bookmark to current dir
2818 %bookmark <name> - set bookmark to current dir
2819 %bookmark <name> <dir> - set bookmark to <dir>
2819 %bookmark <name> <dir> - set bookmark to <dir>
2820 %bookmark -l - list all bookmarks
2820 %bookmark -l - list all bookmarks
2821 %bookmark -d <name> - remove bookmark
2821 %bookmark -d <name> - remove bookmark
2822 %bookmark -r - remove all bookmarks
2822 %bookmark -r - remove all bookmarks
2823
2823
2824 You can later on access a bookmarked folder with:
2824 You can later on access a bookmarked folder with:
2825 %cd -b <name>
2825 %cd -b <name>
2826 or simply '%cd <name>' if there is no directory called <name> AND
2826 or simply '%cd <name>' if there is no directory called <name> AND
2827 there is such a bookmark defined.
2827 there is such a bookmark defined.
2828
2828
2829 Your bookmarks persist through IPython sessions, but they are
2829 Your bookmarks persist through IPython sessions, but they are
2830 associated with each profile."""
2830 associated with each profile."""
2831
2831
2832 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2832 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2833 if len(args) > 2:
2833 if len(args) > 2:
2834 error('You can only give at most two arguments')
2834 error('You can only give at most two arguments')
2835 return
2835 return
2836
2836
2837 bkms = self.db.get('bookmarks',{})
2837 bkms = self.db.get('bookmarks',{})
2838
2838
2839 if opts.has_key('d'):
2839 if opts.has_key('d'):
2840 try:
2840 try:
2841 todel = args[0]
2841 todel = args[0]
2842 except IndexError:
2842 except IndexError:
2843 error('You must provide a bookmark to delete')
2843 error('You must provide a bookmark to delete')
2844 else:
2844 else:
2845 try:
2845 try:
2846 del bkms[todel]
2846 del bkms[todel]
2847 except:
2847 except:
2848 error("Can't delete bookmark '%s'" % todel)
2848 error("Can't delete bookmark '%s'" % todel)
2849 elif opts.has_key('r'):
2849 elif opts.has_key('r'):
2850 bkms = {}
2850 bkms = {}
2851 elif opts.has_key('l'):
2851 elif opts.has_key('l'):
2852 bks = bkms.keys()
2852 bks = bkms.keys()
2853 bks.sort()
2853 bks.sort()
2854 if bks:
2854 if bks:
2855 size = max(map(len,bks))
2855 size = max(map(len,bks))
2856 else:
2856 else:
2857 size = 0
2857 size = 0
2858 fmt = '%-'+str(size)+'s -> %s'
2858 fmt = '%-'+str(size)+'s -> %s'
2859 print 'Current bookmarks:'
2859 print 'Current bookmarks:'
2860 for bk in bks:
2860 for bk in bks:
2861 print fmt % (bk,bkms[bk])
2861 print fmt % (bk,bkms[bk])
2862 else:
2862 else:
2863 if not args:
2863 if not args:
2864 error("You must specify the bookmark name")
2864 error("You must specify the bookmark name")
2865 elif len(args)==1:
2865 elif len(args)==1:
2866 bkms[args[0]] = os.getcwd()
2866 bkms[args[0]] = os.getcwd()
2867 elif len(args)==2:
2867 elif len(args)==2:
2868 bkms[args[0]] = args[1]
2868 bkms[args[0]] = args[1]
2869 self.db['bookmarks'] = bkms
2869 self.db['bookmarks'] = bkms
2870
2870
2871 def magic_pycat(self, parameter_s=''):
2871 def magic_pycat(self, parameter_s=''):
2872 """Show a syntax-highlighted file through a pager.
2872 """Show a syntax-highlighted file through a pager.
2873
2873
2874 This magic is similar to the cat utility, but it will assume the file
2874 This magic is similar to the cat utility, but it will assume the file
2875 to be Python source and will show it with syntax highlighting. """
2875 to be Python source and will show it with syntax highlighting. """
2876
2876
2877 try:
2877 try:
2878 filename = get_py_filename(parameter_s)
2878 filename = get_py_filename(parameter_s)
2879 cont = file_read(filename)
2879 cont = file_read(filename)
2880 except IOError:
2880 except IOError:
2881 try:
2881 try:
2882 cont = eval(parameter_s,self.user_ns)
2882 cont = eval(parameter_s,self.user_ns)
2883 except NameError:
2883 except NameError:
2884 cont = None
2884 cont = None
2885 if cont is None:
2885 if cont is None:
2886 print "Error: no such file or variable"
2886 print "Error: no such file or variable"
2887 return
2887 return
2888
2888
2889 page(self.shell.pycolorize(cont),
2889 page(self.shell.pycolorize(cont),
2890 screen_lines=self.shell.rc.screen_length)
2890 screen_lines=self.shell.rc.screen_length)
2891
2891
2892 def magic_cpaste(self, parameter_s=''):
2892 def magic_cpaste(self, parameter_s=''):
2893 """Allows you to paste & execute a pre-formatted code block from clipboard
2893 """Allows you to paste & execute a pre-formatted code block from clipboard
2894
2894
2895 You must terminate the block with '--' (two minus-signs) alone on the
2895 You must terminate the block with '--' (two minus-signs) alone on the
2896 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2896 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2897 is the new sentinel for this operation)
2897 is the new sentinel for this operation)
2898
2898
2899 The block is dedented prior to execution to enable execution of
2899 The block is dedented prior to execution to enable execution of
2900 method definitions. The executed block is also assigned to variable
2900 method definitions. The executed block is also assigned to variable
2901 named 'pasted_block' for later editing with '%edit pasted_block'.
2901 named 'pasted_block' for later editing with '%edit pasted_block'.
2902
2902
2903 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2903 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2904 This assigns the pasted block to variable 'foo' as string, without
2904 This assigns the pasted block to variable 'foo' as string, without
2905 dedenting or executing it.
2905 dedenting or executing it.
2906
2906
2907 Do not be alarmed by garbled output on Windows (it's a readline bug).
2907 Do not be alarmed by garbled output on Windows (it's a readline bug).
2908 Just press enter and type -- (and press enter again) and the block
2908 Just press enter and type -- (and press enter again) and the block
2909 will be what was just pasted.
2909 will be what was just pasted.
2910
2910
2911 IPython statements (magics, shell escapes) are not supported (yet).
2911 IPython statements (magics, shell escapes) are not supported (yet).
2912 """
2912 """
2913 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2913 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2914 par = args.strip()
2914 par = args.strip()
2915 sentinel = opts.get('s','--')
2915 sentinel = opts.get('s','--')
2916
2916
2917 from IPython import iplib
2917 from IPython import iplib
2918 lines = []
2918 lines = []
2919 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2919 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2920 while 1:
2920 while 1:
2921 l = iplib.raw_input_original(':')
2921 l = iplib.raw_input_original(':')
2922 if l ==sentinel:
2922 if l ==sentinel:
2923 break
2923 break
2924 lines.append(l)
2924 lines.append(l)
2925 block = "\n".join(lines) + '\n'
2925 block = "\n".join(lines) + '\n'
2926 #print "block:\n",block
2926 #print "block:\n",block
2927 if not par:
2927 if not par:
2928 b = textwrap.dedent(block)
2928 b = textwrap.dedent(block)
2929 exec b in self.user_ns
2929 exec b in self.user_ns
2930 self.user_ns['pasted_block'] = b
2930 self.user_ns['pasted_block'] = b
2931 else:
2931 else:
2932 self.user_ns[par] = block
2932 self.user_ns[par] = block
2933 print "Block assigned to '%s'" % par
2933 print "Block assigned to '%s'" % par
2934
2934
2935 def magic_quickref(self,arg):
2935 def magic_quickref(self,arg):
2936 """ Show a quick reference sheet """
2936 """ Show a quick reference sheet """
2937 import IPython.usage
2937 import IPython.usage
2938 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2938 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2939
2939
2940 page(qr)
2940 page(qr)
2941
2941
2942 def magic_upgrade(self,arg):
2942 def magic_upgrade(self,arg):
2943 """ Upgrade your IPython installation
2943 """ Upgrade your IPython installation
2944
2944
2945 This will copy the config files that don't yet exist in your
2945 This will copy the config files that don't yet exist in your
2946 ipython dir from the system config dir. Use this after upgrading
2946 ipython dir from the system config dir. Use this after upgrading
2947 IPython if you don't wish to delete your .ipython dir.
2947 IPython if you don't wish to delete your .ipython dir.
2948
2948
2949 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2949 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2950 new users)
2950 new users)
2951
2951
2952 """
2952 """
2953 ip = self.getapi()
2953 ip = self.getapi()
2954 ipinstallation = path(IPython.__file__).dirname()
2954 ipinstallation = path(IPython.__file__).dirname()
2955 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2955 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2956 src_config = ipinstallation / 'UserConfig'
2956 src_config = ipinstallation / 'UserConfig'
2957 userdir = path(ip.options.ipythondir)
2957 userdir = path(ip.options.ipythondir)
2958 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
2958 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
2959 print ">",cmd
2959 print ">",cmd
2960 shell(cmd)
2960 shell(cmd)
2961 if arg == '-nolegacy':
2961 if arg == '-nolegacy':
2962 legacy = userdir.files('ipythonrc*')
2962 legacy = userdir.files('ipythonrc*')
2963 print "Nuking legacy files:",legacy
2963 print "Nuking legacy files:",legacy
2964
2964
2965 [p.remove() for p in legacy]
2965 [p.remove() for p in legacy]
2966 suffix = (sys.platform == 'win32' and '.ini' or '')
2966 suffix = (sys.platform == 'win32' and '.ini' or '')
2967 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2967 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2968
2968
2969
2969
2970 # end Magic
2970 # end Magic
@@ -1,2315 +1,2320 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1350 2006-06-04 14:06:06Z fperez $
9 $Id: iplib.py 1355 2006-06-07 16:56:50Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from IPython import Release
31 from IPython import Release
32 __author__ = '%s <%s>\n%s <%s>' % \
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 __license__ = Release.license
34 __license__ = Release.license
35 __version__ = Release.version
35 __version__ = Release.version
36
36
37 # Python standard modules
37 # Python standard modules
38 import __main__
38 import __main__
39 import __builtin__
39 import __builtin__
40 import StringIO
40 import StringIO
41 import bdb
41 import bdb
42 import cPickle as pickle
42 import cPickle as pickle
43 import codeop
43 import codeop
44 import exceptions
44 import exceptions
45 import glob
45 import glob
46 import inspect
46 import inspect
47 import keyword
47 import keyword
48 import new
48 import new
49 import os
49 import os
50 import pdb
50 import pdb
51 import pydoc
51 import pydoc
52 import re
52 import re
53 import shutil
53 import shutil
54 import string
54 import string
55 import sys
55 import sys
56 import tempfile
56 import tempfile
57 import traceback
57 import traceback
58 import types
58 import types
59 import pickleshare
59 import pickleshare
60
60
61 from pprint import pprint, pformat
61 from pprint import pprint, pformat
62
62
63 # IPython's own modules
63 # IPython's own modules
64 import IPython
64 import IPython
65 from IPython import OInspect,PyColorize,ultraTB
65 from IPython import OInspect,PyColorize,ultraTB
66 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.FakeModule import FakeModule
67 from IPython.FakeModule import FakeModule
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Logger import Logger
69 from IPython.Logger import Logger
70 from IPython.Magic import Magic
70 from IPython.Magic import Magic
71 from IPython.Prompts import CachedOutput
71 from IPython.Prompts import CachedOutput
72 from IPython.ipstruct import Struct
72 from IPython.ipstruct import Struct
73 from IPython.background_jobs import BackgroundJobManager
73 from IPython.background_jobs import BackgroundJobManager
74 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.genutils import *
75 from IPython.genutils import *
76 import IPython.ipapi
76 import IPython.ipapi
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
86
87
87
88 #****************************************************************************
88 #****************************************************************************
89 # Some utility function definitions
89 # Some utility function definitions
90
90
91 ini_spaces_re = re.compile(r'^(\s+)')
91 ini_spaces_re = re.compile(r'^(\s+)')
92
92
93 def num_ini_spaces(strng):
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
94 """Return the number of initial spaces in a string"""
95
95
96 ini_spaces = ini_spaces_re.match(strng)
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
97 if ini_spaces:
98 return ini_spaces.end()
98 return ini_spaces.end()
99 else:
99 else:
100 return 0
100 return 0
101
101
102 def softspace(file, newvalue):
102 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
103 """Copied from code.py, to remove the dependency"""
104
104
105 oldvalue = 0
105 oldvalue = 0
106 try:
106 try:
107 oldvalue = file.softspace
107 oldvalue = file.softspace
108 except AttributeError:
108 except AttributeError:
109 pass
109 pass
110 try:
110 try:
111 file.softspace = newvalue
111 file.softspace = newvalue
112 except (AttributeError, TypeError):
112 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
113 # "attribute-less object" or "read-only attributes"
114 pass
114 pass
115 return oldvalue
115 return oldvalue
116
116
117
117
118 #****************************************************************************
118 #****************************************************************************
119 # Local use exceptions
119 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
120 class SpaceInInput(exceptions.Exception): pass
121
121
122
122
123 #****************************************************************************
123 #****************************************************************************
124 # Local use classes
124 # Local use classes
125 class Bunch: pass
125 class Bunch: pass
126
126
127 class Undefined: pass
127 class Undefined: pass
128
128
129 class InputList(list):
129 class InputList(list):
130 """Class to store user input.
130 """Class to store user input.
131
131
132 It's basically a list, but slices return a string instead of a list, thus
132 It's basically a list, but slices return a string instead of a list, thus
133 allowing things like (assuming 'In' is an instance):
133 allowing things like (assuming 'In' is an instance):
134
134
135 exec In[4:7]
135 exec In[4:7]
136
136
137 or
137 or
138
138
139 exec In[5:9] + In[14] + In[21:25]"""
139 exec In[5:9] + In[14] + In[21:25]"""
140
140
141 def __getslice__(self,i,j):
141 def __getslice__(self,i,j):
142 return ''.join(list.__getslice__(self,i,j))
142 return ''.join(list.__getslice__(self,i,j))
143
143
144 class SyntaxTB(ultraTB.ListTB):
144 class SyntaxTB(ultraTB.ListTB):
145 """Extension which holds some state: the last exception value"""
145 """Extension which holds some state: the last exception value"""
146
146
147 def __init__(self,color_scheme = 'NoColor'):
147 def __init__(self,color_scheme = 'NoColor'):
148 ultraTB.ListTB.__init__(self,color_scheme)
148 ultraTB.ListTB.__init__(self,color_scheme)
149 self.last_syntax_error = None
149 self.last_syntax_error = None
150
150
151 def __call__(self, etype, value, elist):
151 def __call__(self, etype, value, elist):
152 self.last_syntax_error = value
152 self.last_syntax_error = value
153 ultraTB.ListTB.__call__(self,etype,value,elist)
153 ultraTB.ListTB.__call__(self,etype,value,elist)
154
154
155 def clear_err_state(self):
155 def clear_err_state(self):
156 """Return the current error state and clear it"""
156 """Return the current error state and clear it"""
157 e = self.last_syntax_error
157 e = self.last_syntax_error
158 self.last_syntax_error = None
158 self.last_syntax_error = None
159 return e
159 return e
160
160
161 #****************************************************************************
161 #****************************************************************************
162 # Main IPython class
162 # Main IPython class
163
163
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # until a full rewrite is made. I've cleaned all cross-class uses of
165 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # attributes and methods, but too much user code out there relies on the
166 # attributes and methods, but too much user code out there relies on the
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 #
168 #
169 # But at least now, all the pieces have been separated and we could, in
169 # But at least now, all the pieces have been separated and we could, in
170 # principle, stop using the mixin. This will ease the transition to the
170 # principle, stop using the mixin. This will ease the transition to the
171 # chainsaw branch.
171 # chainsaw branch.
172
172
173 # For reference, the following is the list of 'self.foo' uses in the Magic
173 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class, to prevent clashes.
175 # class, to prevent clashes.
176
176
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.value']
180 # 'self.value']
181
181
182 class InteractiveShell(object,Magic):
182 class InteractiveShell(object,Magic):
183 """An enhanced console for Python."""
183 """An enhanced console for Python."""
184
184
185 # class attribute to indicate whether the class supports threads or not.
185 # class attribute to indicate whether the class supports threads or not.
186 # Subclasses with thread support should override this as needed.
186 # Subclasses with thread support should override this as needed.
187 isthreaded = False
187 isthreaded = False
188
188
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 user_ns = None,user_global_ns=None,banner2='',
190 user_ns = None,user_global_ns=None,banner2='',
191 custom_exceptions=((),None),embedded=False):
191 custom_exceptions=((),None),embedded=False):
192
192
193 # log system
193 # log system
194 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
194 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
195
195
196 # some minimal strict typechecks. For some core data structures, I
196 # some minimal strict typechecks. For some core data structures, I
197 # want actual basic python types, not just anything that looks like
197 # want actual basic python types, not just anything that looks like
198 # one. This is especially true for namespaces.
198 # one. This is especially true for namespaces.
199 for ns in (user_ns,user_global_ns):
199 for ns in (user_ns,user_global_ns):
200 if ns is not None and type(ns) != types.DictType:
200 if ns is not None and type(ns) != types.DictType:
201 raise TypeError,'namespace must be a dictionary'
201 raise TypeError,'namespace must be a dictionary'
202
202
203 # Job manager (for jobs run as background threads)
203 # Job manager (for jobs run as background threads)
204 self.jobs = BackgroundJobManager()
204 self.jobs = BackgroundJobManager()
205
205
206 # Store the actual shell's name
206 # Store the actual shell's name
207 self.name = name
207 self.name = name
208
208
209 # We need to know whether the instance is meant for embedding, since
209 # We need to know whether the instance is meant for embedding, since
210 # global/local namespaces need to be handled differently in that case
210 # global/local namespaces need to be handled differently in that case
211 self.embedded = embedded
211 self.embedded = embedded
212
212
213 # command compiler
213 # command compiler
214 self.compile = codeop.CommandCompiler()
214 self.compile = codeop.CommandCompiler()
215
215
216 # User input buffer
216 # User input buffer
217 self.buffer = []
217 self.buffer = []
218
218
219 # Default name given in compilation of code
219 # Default name given in compilation of code
220 self.filename = '<ipython console>'
220 self.filename = '<ipython console>'
221
221
222 # Make an empty namespace, which extension writers can rely on both
222 # Make an empty namespace, which extension writers can rely on both
223 # existing and NEVER being used by ipython itself. This gives them a
223 # existing and NEVER being used by ipython itself. This gives them a
224 # convenient location for storing additional information and state
224 # convenient location for storing additional information and state
225 # their extensions may require, without fear of collisions with other
225 # their extensions may require, without fear of collisions with other
226 # ipython names that may develop later.
226 # ipython names that may develop later.
227 self.meta = Struct()
227 self.meta = Struct()
228
228
229 # Create the namespace where the user will operate. user_ns is
229 # Create the namespace where the user will operate. user_ns is
230 # normally the only one used, and it is passed to the exec calls as
230 # normally the only one used, and it is passed to the exec calls as
231 # the locals argument. But we do carry a user_global_ns namespace
231 # the locals argument. But we do carry a user_global_ns namespace
232 # given as the exec 'globals' argument, This is useful in embedding
232 # given as the exec 'globals' argument, This is useful in embedding
233 # situations where the ipython shell opens in a context where the
233 # situations where the ipython shell opens in a context where the
234 # distinction between locals and globals is meaningful.
234 # distinction between locals and globals is meaningful.
235
235
236 # FIXME. For some strange reason, __builtins__ is showing up at user
236 # FIXME. For some strange reason, __builtins__ is showing up at user
237 # level as a dict instead of a module. This is a manual fix, but I
237 # level as a dict instead of a module. This is a manual fix, but I
238 # should really track down where the problem is coming from. Alex
238 # should really track down where the problem is coming from. Alex
239 # Schmolck reported this problem first.
239 # Schmolck reported this problem first.
240
240
241 # A useful post by Alex Martelli on this topic:
241 # A useful post by Alex Martelli on this topic:
242 # Re: inconsistent value from __builtins__
242 # Re: inconsistent value from __builtins__
243 # Von: Alex Martelli <aleaxit@yahoo.com>
243 # Von: Alex Martelli <aleaxit@yahoo.com>
244 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
244 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
245 # Gruppen: comp.lang.python
245 # Gruppen: comp.lang.python
246
246
247 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
247 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
248 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
248 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
249 # > <type 'dict'>
249 # > <type 'dict'>
250 # > >>> print type(__builtins__)
250 # > >>> print type(__builtins__)
251 # > <type 'module'>
251 # > <type 'module'>
252 # > Is this difference in return value intentional?
252 # > Is this difference in return value intentional?
253
253
254 # Well, it's documented that '__builtins__' can be either a dictionary
254 # Well, it's documented that '__builtins__' can be either a dictionary
255 # or a module, and it's been that way for a long time. Whether it's
255 # or a module, and it's been that way for a long time. Whether it's
256 # intentional (or sensible), I don't know. In any case, the idea is
256 # intentional (or sensible), I don't know. In any case, the idea is
257 # that if you need to access the built-in namespace directly, you
257 # that if you need to access the built-in namespace directly, you
258 # should start with "import __builtin__" (note, no 's') which will
258 # should start with "import __builtin__" (note, no 's') which will
259 # definitely give you a module. Yeah, it's somewhat confusing:-(.
259 # definitely give you a module. Yeah, it's somewhat confusing:-(.
260
260
261 # These routines return properly built dicts as needed by the rest of
261 # These routines return properly built dicts as needed by the rest of
262 # the code, and can also be used by extension writers to generate
262 # the code, and can also be used by extension writers to generate
263 # properly initialized namespaces.
263 # properly initialized namespaces.
264 user_ns = IPython.ipapi.make_user_ns(user_ns)
264 user_ns = IPython.ipapi.make_user_ns(user_ns)
265 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
265 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
266
266
267 # Assign namespaces
267 # Assign namespaces
268 # This is the namespace where all normal user variables live
268 # This is the namespace where all normal user variables live
269 self.user_ns = user_ns
269 self.user_ns = user_ns
270 # Embedded instances require a separate namespace for globals.
270 # Embedded instances require a separate namespace for globals.
271 # Normally this one is unused by non-embedded instances.
271 # Normally this one is unused by non-embedded instances.
272 self.user_global_ns = user_global_ns
272 self.user_global_ns = user_global_ns
273 # A namespace to keep track of internal data structures to prevent
273 # A namespace to keep track of internal data structures to prevent
274 # them from cluttering user-visible stuff. Will be updated later
274 # them from cluttering user-visible stuff. Will be updated later
275 self.internal_ns = {}
275 self.internal_ns = {}
276
276
277 # Namespace of system aliases. Each entry in the alias
277 # Namespace of system aliases. Each entry in the alias
278 # table must be a 2-tuple of the form (N,name), where N is the number
278 # table must be a 2-tuple of the form (N,name), where N is the number
279 # of positional arguments of the alias.
279 # of positional arguments of the alias.
280 self.alias_table = {}
280 self.alias_table = {}
281
281
282 # A table holding all the namespaces IPython deals with, so that
282 # A table holding all the namespaces IPython deals with, so that
283 # introspection facilities can search easily.
283 # introspection facilities can search easily.
284 self.ns_table = {'user':user_ns,
284 self.ns_table = {'user':user_ns,
285 'user_global':user_global_ns,
285 'user_global':user_global_ns,
286 'alias':self.alias_table,
286 'alias':self.alias_table,
287 'internal':self.internal_ns,
287 'internal':self.internal_ns,
288 'builtin':__builtin__.__dict__
288 'builtin':__builtin__.__dict__
289 }
289 }
290
290
291 # The user namespace MUST have a pointer to the shell itself.
291 # The user namespace MUST have a pointer to the shell itself.
292 self.user_ns[name] = self
292 self.user_ns[name] = self
293
293
294 # We need to insert into sys.modules something that looks like a
294 # We need to insert into sys.modules something that looks like a
295 # module but which accesses the IPython namespace, for shelve and
295 # module but which accesses the IPython namespace, for shelve and
296 # pickle to work interactively. Normally they rely on getting
296 # pickle to work interactively. Normally they rely on getting
297 # everything out of __main__, but for embedding purposes each IPython
297 # everything out of __main__, but for embedding purposes each IPython
298 # instance has its own private namespace, so we can't go shoving
298 # instance has its own private namespace, so we can't go shoving
299 # everything into __main__.
299 # everything into __main__.
300
300
301 # note, however, that we should only do this for non-embedded
301 # note, however, that we should only do this for non-embedded
302 # ipythons, which really mimic the __main__.__dict__ with their own
302 # ipythons, which really mimic the __main__.__dict__ with their own
303 # namespace. Embedded instances, on the other hand, should not do
303 # namespace. Embedded instances, on the other hand, should not do
304 # this because they need to manage the user local/global namespaces
304 # this because they need to manage the user local/global namespaces
305 # only, but they live within a 'normal' __main__ (meaning, they
305 # only, but they live within a 'normal' __main__ (meaning, they
306 # shouldn't overtake the execution environment of the script they're
306 # shouldn't overtake the execution environment of the script they're
307 # embedded in).
307 # embedded in).
308
308
309 if not embedded:
309 if not embedded:
310 try:
310 try:
311 main_name = self.user_ns['__name__']
311 main_name = self.user_ns['__name__']
312 except KeyError:
312 except KeyError:
313 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
313 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
314 else:
314 else:
315 #print "pickle hack in place" # dbg
315 #print "pickle hack in place" # dbg
316 #print 'main_name:',main_name # dbg
316 #print 'main_name:',main_name # dbg
317 sys.modules[main_name] = FakeModule(self.user_ns)
317 sys.modules[main_name] = FakeModule(self.user_ns)
318
318
319 # List of input with multi-line handling.
319 # List of input with multi-line handling.
320 # Fill its zero entry, user counter starts at 1
320 # Fill its zero entry, user counter starts at 1
321 self.input_hist = InputList(['\n'])
321 self.input_hist = InputList(['\n'])
322 # This one will hold the 'raw' input history, without any
322 # This one will hold the 'raw' input history, without any
323 # pre-processing. This will allow users to retrieve the input just as
323 # pre-processing. This will allow users to retrieve the input just as
324 # it was exactly typed in by the user, with %hist -r.
324 # it was exactly typed in by the user, with %hist -r.
325 self.input_hist_raw = InputList(['\n'])
325 self.input_hist_raw = InputList(['\n'])
326
326
327 # list of visited directories
327 # list of visited directories
328 try:
328 try:
329 self.dir_hist = [os.getcwd()]
329 self.dir_hist = [os.getcwd()]
330 except IOError, e:
330 except IOError, e:
331 self.dir_hist = []
331 self.dir_hist = []
332
332
333 # dict of output history
333 # dict of output history
334 self.output_hist = {}
334 self.output_hist = {}
335
335
336 # dict of things NOT to alias (keywords, builtins and some magics)
336 # dict of things NOT to alias (keywords, builtins and some magics)
337 no_alias = {}
337 no_alias = {}
338 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
338 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
339 for key in keyword.kwlist + no_alias_magics:
339 for key in keyword.kwlist + no_alias_magics:
340 no_alias[key] = 1
340 no_alias[key] = 1
341 no_alias.update(__builtin__.__dict__)
341 no_alias.update(__builtin__.__dict__)
342 self.no_alias = no_alias
342 self.no_alias = no_alias
343
343
344 # make global variables for user access to these
344 # make global variables for user access to these
345 self.user_ns['_ih'] = self.input_hist
345 self.user_ns['_ih'] = self.input_hist
346 self.user_ns['_oh'] = self.output_hist
346 self.user_ns['_oh'] = self.output_hist
347 self.user_ns['_dh'] = self.dir_hist
347 self.user_ns['_dh'] = self.dir_hist
348
348
349 # user aliases to input and output histories
349 # user aliases to input and output histories
350 self.user_ns['In'] = self.input_hist
350 self.user_ns['In'] = self.input_hist
351 self.user_ns['Out'] = self.output_hist
351 self.user_ns['Out'] = self.output_hist
352
352
353 # Object variable to store code object waiting execution. This is
353 # Object variable to store code object waiting execution. This is
354 # used mainly by the multithreaded shells, but it can come in handy in
354 # used mainly by the multithreaded shells, but it can come in handy in
355 # other situations. No need to use a Queue here, since it's a single
355 # other situations. No need to use a Queue here, since it's a single
356 # item which gets cleared once run.
356 # item which gets cleared once run.
357 self.code_to_run = None
357 self.code_to_run = None
358
358
359 # escapes for automatic behavior on the command line
359 # escapes for automatic behavior on the command line
360 self.ESC_SHELL = '!'
360 self.ESC_SHELL = '!'
361 self.ESC_HELP = '?'
361 self.ESC_HELP = '?'
362 self.ESC_MAGIC = '%'
362 self.ESC_MAGIC = '%'
363 self.ESC_QUOTE = ','
363 self.ESC_QUOTE = ','
364 self.ESC_QUOTE2 = ';'
364 self.ESC_QUOTE2 = ';'
365 self.ESC_PAREN = '/'
365 self.ESC_PAREN = '/'
366
366
367 # And their associated handlers
367 # And their associated handlers
368 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
368 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
369 self.ESC_QUOTE : self.handle_auto,
369 self.ESC_QUOTE : self.handle_auto,
370 self.ESC_QUOTE2 : self.handle_auto,
370 self.ESC_QUOTE2 : self.handle_auto,
371 self.ESC_MAGIC : self.handle_magic,
371 self.ESC_MAGIC : self.handle_magic,
372 self.ESC_HELP : self.handle_help,
372 self.ESC_HELP : self.handle_help,
373 self.ESC_SHELL : self.handle_shell_escape,
373 self.ESC_SHELL : self.handle_shell_escape,
374 }
374 }
375
375
376 # class initializations
376 # class initializations
377 Magic.__init__(self,self)
377 Magic.__init__(self,self)
378
378
379 # Python source parser/formatter for syntax highlighting
379 # Python source parser/formatter for syntax highlighting
380 pyformat = PyColorize.Parser().format
380 pyformat = PyColorize.Parser().format
381 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
381 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
382
382
383 # hooks holds pointers used for user-side customizations
383 # hooks holds pointers used for user-side customizations
384 self.hooks = Struct()
384 self.hooks = Struct()
385
385
386 # Set all default hooks, defined in the IPython.hooks module.
386 # Set all default hooks, defined in the IPython.hooks module.
387 hooks = IPython.hooks
387 hooks = IPython.hooks
388 for hook_name in hooks.__all__:
388 for hook_name in hooks.__all__:
389 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
389 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
390 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
390 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
391 #print "bound hook",hook_name
391 #print "bound hook",hook_name
392
392
393 # Flag to mark unconditional exit
393 # Flag to mark unconditional exit
394 self.exit_now = False
394 self.exit_now = False
395
395
396 self.usage_min = """\
396 self.usage_min = """\
397 An enhanced console for Python.
397 An enhanced console for Python.
398 Some of its features are:
398 Some of its features are:
399 - Readline support if the readline library is present.
399 - Readline support if the readline library is present.
400 - Tab completion in the local namespace.
400 - Tab completion in the local namespace.
401 - Logging of input, see command-line options.
401 - Logging of input, see command-line options.
402 - System shell escape via ! , eg !ls.
402 - System shell escape via ! , eg !ls.
403 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
403 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
404 - Keeps track of locally defined variables via %who, %whos.
404 - Keeps track of locally defined variables via %who, %whos.
405 - Show object information with a ? eg ?x or x? (use ?? for more info).
405 - Show object information with a ? eg ?x or x? (use ?? for more info).
406 """
406 """
407 if usage: self.usage = usage
407 if usage: self.usage = usage
408 else: self.usage = self.usage_min
408 else: self.usage = self.usage_min
409
409
410 # Storage
410 # Storage
411 self.rc = rc # This will hold all configuration information
411 self.rc = rc # This will hold all configuration information
412 self.pager = 'less'
412 self.pager = 'less'
413 # temporary files used for various purposes. Deleted at exit.
413 # temporary files used for various purposes. Deleted at exit.
414 self.tempfiles = []
414 self.tempfiles = []
415
415
416 # Keep track of readline usage (later set by init_readline)
416 # Keep track of readline usage (later set by init_readline)
417 self.has_readline = False
417 self.has_readline = False
418
418
419 # template for logfile headers. It gets resolved at runtime by the
419 # template for logfile headers. It gets resolved at runtime by the
420 # logstart method.
420 # logstart method.
421 self.loghead_tpl = \
421 self.loghead_tpl = \
422 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
422 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
423 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
423 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
424 #log# opts = %s
424 #log# opts = %s
425 #log# args = %s
425 #log# args = %s
426 #log# It is safe to make manual edits below here.
426 #log# It is safe to make manual edits below here.
427 #log#-----------------------------------------------------------------------
427 #log#-----------------------------------------------------------------------
428 """
428 """
429 # for pushd/popd management
429 # for pushd/popd management
430 try:
430 try:
431 self.home_dir = get_home_dir()
431 self.home_dir = get_home_dir()
432 except HomeDirError,msg:
432 except HomeDirError,msg:
433 fatal(msg)
433 fatal(msg)
434
434
435 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
435 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
436
436
437 # Functions to call the underlying shell.
437 # Functions to call the underlying shell.
438
438
439 # utility to expand user variables via Itpl
439 # utility to expand user variables via Itpl
440 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
440 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
441 self.user_ns))
441 self.user_ns))
442 # The first is similar to os.system, but it doesn't return a value,
442 # The first is similar to os.system, but it doesn't return a value,
443 # and it allows interpolation of variables in the user's namespace.
443 # and it allows interpolation of variables in the user's namespace.
444 self.system = lambda cmd: shell(self.var_expand(cmd),
444 self.system = lambda cmd: shell(self.var_expand(cmd),
445 header='IPython system call: ',
445 header='IPython system call: ',
446 verbose=self.rc.system_verbose)
446 verbose=self.rc.system_verbose)
447 # These are for getoutput and getoutputerror:
447 # These are for getoutput and getoutputerror:
448 self.getoutput = lambda cmd: \
448 self.getoutput = lambda cmd: \
449 getoutput(self.var_expand(cmd),
449 getoutput(self.var_expand(cmd),
450 header='IPython system call: ',
450 header='IPython system call: ',
451 verbose=self.rc.system_verbose)
451 verbose=self.rc.system_verbose)
452 self.getoutputerror = lambda cmd: \
452 self.getoutputerror = lambda cmd: \
453 getoutputerror(self.var_expand(cmd),
453 getoutputerror(self.var_expand(cmd),
454 header='IPython system call: ',
454 header='IPython system call: ',
455 verbose=self.rc.system_verbose)
455 verbose=self.rc.system_verbose)
456
456
457 # RegExp for splitting line contents into pre-char//first
457 # RegExp for splitting line contents into pre-char//first
458 # word-method//rest. For clarity, each group in on one line.
458 # word-method//rest. For clarity, each group in on one line.
459
459
460 # WARNING: update the regexp if the above escapes are changed, as they
460 # WARNING: update the regexp if the above escapes are changed, as they
461 # are hardwired in.
461 # are hardwired in.
462
462
463 # Don't get carried away with trying to make the autocalling catch too
463 # Don't get carried away with trying to make the autocalling catch too
464 # much: it's better to be conservative rather than to trigger hidden
464 # much: it's better to be conservative rather than to trigger hidden
465 # evals() somewhere and end up causing side effects.
465 # evals() somewhere and end up causing side effects.
466
466
467 self.line_split = re.compile(r'^([\s*,;/])'
467 self.line_split = re.compile(r'^([\s*,;/])'
468 r'([\?\w\.]+\w*\s*)'
468 r'([\?\w\.]+\w*\s*)'
469 r'(\(?.*$)')
469 r'(\(?.*$)')
470
470
471 # Original re, keep around for a while in case changes break something
471 # Original re, keep around for a while in case changes break something
472 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
472 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
473 # r'(\s*[\?\w\.]+\w*\s*)'
473 # r'(\s*[\?\w\.]+\w*\s*)'
474 # r'(\(?.*$)')
474 # r'(\(?.*$)')
475
475
476 # RegExp to identify potential function names
476 # RegExp to identify potential function names
477 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
477 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
478
478
479 # RegExp to exclude strings with this start from autocalling. In
479 # RegExp to exclude strings with this start from autocalling. In
480 # particular, all binary operators should be excluded, so that if foo
480 # particular, all binary operators should be excluded, so that if foo
481 # is callable, foo OP bar doesn't become foo(OP bar), which is
481 # is callable, foo OP bar doesn't become foo(OP bar), which is
482 # invalid. The characters '!=()' don't need to be checked for, as the
482 # invalid. The characters '!=()' don't need to be checked for, as the
483 # _prefilter routine explicitely does so, to catch direct calls and
483 # _prefilter routine explicitely does so, to catch direct calls and
484 # rebindings of existing names.
484 # rebindings of existing names.
485
485
486 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
486 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
487 # it affects the rest of the group in square brackets.
487 # it affects the rest of the group in square brackets.
488 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
488 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
489 '|^is |^not |^in |^and |^or ')
489 '|^is |^not |^in |^and |^or ')
490
490
491 # try to catch also methods for stuff in lists/tuples/dicts: off
491 # try to catch also methods for stuff in lists/tuples/dicts: off
492 # (experimental). For this to work, the line_split regexp would need
492 # (experimental). For this to work, the line_split regexp would need
493 # to be modified so it wouldn't break things at '['. That line is
493 # to be modified so it wouldn't break things at '['. That line is
494 # nasty enough that I shouldn't change it until I can test it _well_.
494 # nasty enough that I shouldn't change it until I can test it _well_.
495 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
495 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
496
496
497 # keep track of where we started running (mainly for crash post-mortem)
497 # keep track of where we started running (mainly for crash post-mortem)
498 self.starting_dir = os.getcwd()
498 self.starting_dir = os.getcwd()
499
499
500 # Various switches which can be set
500 # Various switches which can be set
501 self.CACHELENGTH = 5000 # this is cheap, it's just text
501 self.CACHELENGTH = 5000 # this is cheap, it's just text
502 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
502 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
503 self.banner2 = banner2
503 self.banner2 = banner2
504
504
505 # TraceBack handlers:
505 # TraceBack handlers:
506
506
507 # Syntax error handler.
507 # Syntax error handler.
508 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
508 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
509
509
510 # The interactive one is initialized with an offset, meaning we always
510 # The interactive one is initialized with an offset, meaning we always
511 # want to remove the topmost item in the traceback, which is our own
511 # want to remove the topmost item in the traceback, which is our own
512 # internal code. Valid modes: ['Plain','Context','Verbose']
512 # internal code. Valid modes: ['Plain','Context','Verbose']
513 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
513 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
514 color_scheme='NoColor',
514 color_scheme='NoColor',
515 tb_offset = 1)
515 tb_offset = 1)
516
516
517 # IPython itself shouldn't crash. This will produce a detailed
517 # IPython itself shouldn't crash. This will produce a detailed
518 # post-mortem if it does. But we only install the crash handler for
518 # post-mortem if it does. But we only install the crash handler for
519 # non-threaded shells, the threaded ones use a normal verbose reporter
519 # non-threaded shells, the threaded ones use a normal verbose reporter
520 # and lose the crash handler. This is because exceptions in the main
520 # and lose the crash handler. This is because exceptions in the main
521 # thread (such as in GUI code) propagate directly to sys.excepthook,
521 # thread (such as in GUI code) propagate directly to sys.excepthook,
522 # and there's no point in printing crash dumps for every user exception.
522 # and there's no point in printing crash dumps for every user exception.
523 if self.isthreaded:
523 if self.isthreaded:
524 sys.excepthook = ultraTB.FormattedTB()
524 sys.excepthook = ultraTB.FormattedTB()
525 else:
525 else:
526 from IPython import CrashHandler
526 from IPython import CrashHandler
527 sys.excepthook = CrashHandler.CrashHandler(self)
527 sys.excepthook = CrashHandler.CrashHandler(self)
528
528
529 # The instance will store a pointer to this, so that runtime code
529 # The instance will store a pointer to this, so that runtime code
530 # (such as magics) can access it. This is because during the
530 # (such as magics) can access it. This is because during the
531 # read-eval loop, it gets temporarily overwritten (to deal with GUI
531 # read-eval loop, it gets temporarily overwritten (to deal with GUI
532 # frameworks).
532 # frameworks).
533 self.sys_excepthook = sys.excepthook
533 self.sys_excepthook = sys.excepthook
534
534
535 # and add any custom exception handlers the user may have specified
535 # and add any custom exception handlers the user may have specified
536 self.set_custom_exc(*custom_exceptions)
536 self.set_custom_exc(*custom_exceptions)
537
537
538 # indentation management
538 # indentation management
539 self.autoindent = False
539 self.autoindent = False
540 self.indent_current_nsp = 0
540 self.indent_current_nsp = 0
541
541
542 # Make some aliases automatically
542 # Make some aliases automatically
543 # Prepare list of shell aliases to auto-define
543 # Prepare list of shell aliases to auto-define
544 if os.name == 'posix':
544 if os.name == 'posix':
545 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
545 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
546 'mv mv -i','rm rm -i','cp cp -i',
546 'mv mv -i','rm rm -i','cp cp -i',
547 'cat cat','less less','clear clear',
547 'cat cat','less less','clear clear',
548 # a better ls
548 # a better ls
549 'ls ls -F',
549 'ls ls -F',
550 # long ls
550 # long ls
551 'll ls -lF')
551 'll ls -lF')
552 # Extra ls aliases with color, which need special treatment on BSD
552 # Extra ls aliases with color, which need special treatment on BSD
553 # variants
553 # variants
554 ls_extra = ( # color ls
554 ls_extra = ( # color ls
555 'lc ls -F -o --color',
555 'lc ls -F -o --color',
556 # ls normal files only
556 # ls normal files only
557 'lf ls -F -o --color %l | grep ^-',
557 'lf ls -F -o --color %l | grep ^-',
558 # ls symbolic links
558 # ls symbolic links
559 'lk ls -F -o --color %l | grep ^l',
559 'lk ls -F -o --color %l | grep ^l',
560 # directories or links to directories,
560 # directories or links to directories,
561 'ldir ls -F -o --color %l | grep /$',
561 'ldir ls -F -o --color %l | grep /$',
562 # things which are executable
562 # things which are executable
563 'lx ls -F -o --color %l | grep ^-..x',
563 'lx ls -F -o --color %l | grep ^-..x',
564 )
564 )
565 # The BSDs don't ship GNU ls, so they don't understand the
565 # The BSDs don't ship GNU ls, so they don't understand the
566 # --color switch out of the box
566 # --color switch out of the box
567 if 'bsd' in sys.platform:
567 if 'bsd' in sys.platform:
568 ls_extra = ( # ls normal files only
568 ls_extra = ( # ls normal files only
569 'lf ls -F -o %l | grep ^-',
569 'lf ls -F -o %l | grep ^-',
570 # ls symbolic links
570 # ls symbolic links
571 'lk ls -F -o %l | grep ^l',
571 'lk ls -F -o %l | grep ^l',
572 # directories or links to directories,
572 # directories or links to directories,
573 'ldir ls -F -o %l | grep /$',
573 'ldir ls -F -o %l | grep /$',
574 # things which are executable
574 # things which are executable
575 'lx ls -F -o %l | grep ^-..x',
575 'lx ls -F -o %l | grep ^-..x',
576 )
576 )
577 auto_alias = auto_alias + ls_extra
577 auto_alias = auto_alias + ls_extra
578 elif os.name in ['nt','dos']:
578 elif os.name in ['nt','dos']:
579 auto_alias = ('dir dir /on', 'ls dir /on',
579 auto_alias = ('dir dir /on', 'ls dir /on',
580 'ddir dir /ad /on', 'ldir dir /ad /on',
580 'ddir dir /ad /on', 'ldir dir /ad /on',
581 'mkdir mkdir','rmdir rmdir','echo echo',
581 'mkdir mkdir','rmdir rmdir','echo echo',
582 'ren ren','cls cls','copy copy')
582 'ren ren','cls cls','copy copy')
583 else:
583 else:
584 auto_alias = ()
584 auto_alias = ()
585 self.auto_alias = [s.split(None,1) for s in auto_alias]
585 self.auto_alias = [s.split(None,1) for s in auto_alias]
586 # Call the actual (public) initializer
586 # Call the actual (public) initializer
587 self.init_auto_alias()
587 self.init_auto_alias()
588
588
589 # Produce a public API instance
589 # Produce a public API instance
590 self.api = IPython.ipapi.IPApi(self)
590 self.api = IPython.ipapi.IPApi(self)
591
591
592 # track which builtins we add, so we can clean up later
592 # track which builtins we add, so we can clean up later
593 self.builtins_added = {}
593 self.builtins_added = {}
594 # This method will add the necessary builtins for operation, but
594 # This method will add the necessary builtins for operation, but
595 # tracking what it did via the builtins_added dict.
595 # tracking what it did via the builtins_added dict.
596 self.add_builtins()
596 self.add_builtins()
597
597
598 # end __init__
598 # end __init__
599
599
600 def pre_config_initialization(self):
600 def pre_config_initialization(self):
601 """Pre-configuration init method
601 """Pre-configuration init method
602
602
603 This is called before the configuration files are processed to
603 This is called before the configuration files are processed to
604 prepare the services the config files might need.
604 prepare the services the config files might need.
605
605
606 self.rc already has reasonable default values at this point.
606 self.rc already has reasonable default values at this point.
607 """
607 """
608 rc = self.rc
608 rc = self.rc
609
609
610 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
610 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
611
611
612 def post_config_initialization(self):
612 def post_config_initialization(self):
613 """Post configuration init method
613 """Post configuration init method
614
614
615 This is called after the configuration files have been processed to
615 This is called after the configuration files have been processed to
616 'finalize' the initialization."""
616 'finalize' the initialization."""
617
617
618 rc = self.rc
618 rc = self.rc
619
619
620 # Object inspector
620 # Object inspector
621 self.inspector = OInspect.Inspector(OInspect.InspectColors,
621 self.inspector = OInspect.Inspector(OInspect.InspectColors,
622 PyColorize.ANSICodeColors,
622 PyColorize.ANSICodeColors,
623 'NoColor',
623 'NoColor',
624 rc.object_info_string_level)
624 rc.object_info_string_level)
625
625
626 # Load readline proper
626 # Load readline proper
627 if rc.readline:
627 if rc.readline:
628 self.init_readline()
628 self.init_readline()
629
629
630 # local shortcut, this is used a LOT
630 # local shortcut, this is used a LOT
631 self.log = self.logger.log
631 self.log = self.logger.log
632
632
633 # Initialize cache, set in/out prompts and printing system
633 # Initialize cache, set in/out prompts and printing system
634 self.outputcache = CachedOutput(self,
634 self.outputcache = CachedOutput(self,
635 rc.cache_size,
635 rc.cache_size,
636 rc.pprint,
636 rc.pprint,
637 input_sep = rc.separate_in,
637 input_sep = rc.separate_in,
638 output_sep = rc.separate_out,
638 output_sep = rc.separate_out,
639 output_sep2 = rc.separate_out2,
639 output_sep2 = rc.separate_out2,
640 ps1 = rc.prompt_in1,
640 ps1 = rc.prompt_in1,
641 ps2 = rc.prompt_in2,
641 ps2 = rc.prompt_in2,
642 ps_out = rc.prompt_out,
642 ps_out = rc.prompt_out,
643 pad_left = rc.prompts_pad_left)
643 pad_left = rc.prompts_pad_left)
644
644
645 # user may have over-ridden the default print hook:
645 # user may have over-ridden the default print hook:
646 try:
646 try:
647 self.outputcache.__class__.display = self.hooks.display
647 self.outputcache.__class__.display = self.hooks.display
648 except AttributeError:
648 except AttributeError:
649 pass
649 pass
650
650
651 # I don't like assigning globally to sys, because it means when embedding
651 # I don't like assigning globally to sys, because it means when embedding
652 # instances, each embedded instance overrides the previous choice. But
652 # instances, each embedded instance overrides the previous choice. But
653 # sys.displayhook seems to be called internally by exec, so I don't see a
653 # sys.displayhook seems to be called internally by exec, so I don't see a
654 # way around it.
654 # way around it.
655 sys.displayhook = self.outputcache
655 sys.displayhook = self.outputcache
656
656
657 # Set user colors (don't do it in the constructor above so that it
657 # Set user colors (don't do it in the constructor above so that it
658 # doesn't crash if colors option is invalid)
658 # doesn't crash if colors option is invalid)
659 self.magic_colors(rc.colors)
659 self.magic_colors(rc.colors)
660
660
661 # Set calling of pdb on exceptions
661 # Set calling of pdb on exceptions
662 self.call_pdb = rc.pdb
662 self.call_pdb = rc.pdb
663
663
664 # Load user aliases
664 # Load user aliases
665 for alias in rc.alias:
665 for alias in rc.alias:
666 self.magic_alias(alias)
666 self.magic_alias(alias)
667 self.hooks.late_startup_hook()
667 self.hooks.late_startup_hook()
668
668
669 for batchfile in [path(arg) for arg in self.rc.args
669 for batchfile in [path(arg) for arg in self.rc.args
670 if arg.lower().endswith('.ipy')]:
670 if arg.lower().endswith('.ipy')]:
671 if not batchfile.isfile():
671 if not batchfile.isfile():
672 print "No such batch file:", batchfile
672 print "No such batch file:", batchfile
673 continue
673 continue
674 self.api.runlines(batchfile.text())
674 self.api.runlines(batchfile.text())
675
675
676 def add_builtins(self):
676 def add_builtins(self):
677 """Store ipython references into the builtin namespace.
677 """Store ipython references into the builtin namespace.
678
678
679 Some parts of ipython operate via builtins injected here, which hold a
679 Some parts of ipython operate via builtins injected here, which hold a
680 reference to IPython itself."""
680 reference to IPython itself."""
681
681
682 # TODO: deprecate all except _ip; 'jobs' should be installed
682 # TODO: deprecate all except _ip; 'jobs' should be installed
683 # by an extension and the rest are under _ip, ipalias is redundant
683 # by an extension and the rest are under _ip, ipalias is redundant
684 builtins_new = dict(__IPYTHON__ = self,
684 builtins_new = dict(__IPYTHON__ = self,
685 ip_set_hook = self.set_hook,
685 ip_set_hook = self.set_hook,
686 jobs = self.jobs,
686 jobs = self.jobs,
687 ipmagic = self.ipmagic,
687 ipmagic = self.ipmagic,
688 ipalias = self.ipalias,
688 ipalias = self.ipalias,
689 ipsystem = self.ipsystem,
689 ipsystem = self.ipsystem,
690 _ip = self.api
690 _ip = self.api
691 )
691 )
692 for biname,bival in builtins_new.items():
692 for biname,bival in builtins_new.items():
693 try:
693 try:
694 # store the orignal value so we can restore it
694 # store the orignal value so we can restore it
695 self.builtins_added[biname] = __builtin__.__dict__[biname]
695 self.builtins_added[biname] = __builtin__.__dict__[biname]
696 except KeyError:
696 except KeyError:
697 # or mark that it wasn't defined, and we'll just delete it at
697 # or mark that it wasn't defined, and we'll just delete it at
698 # cleanup
698 # cleanup
699 self.builtins_added[biname] = Undefined
699 self.builtins_added[biname] = Undefined
700 __builtin__.__dict__[biname] = bival
700 __builtin__.__dict__[biname] = bival
701
701
702 # Keep in the builtins a flag for when IPython is active. We set it
702 # Keep in the builtins a flag for when IPython is active. We set it
703 # with setdefault so that multiple nested IPythons don't clobber one
703 # with setdefault so that multiple nested IPythons don't clobber one
704 # another. Each will increase its value by one upon being activated,
704 # another. Each will increase its value by one upon being activated,
705 # which also gives us a way to determine the nesting level.
705 # which also gives us a way to determine the nesting level.
706 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
706 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
707
707
708 def clean_builtins(self):
708 def clean_builtins(self):
709 """Remove any builtins which might have been added by add_builtins, or
709 """Remove any builtins which might have been added by add_builtins, or
710 restore overwritten ones to their previous values."""
710 restore overwritten ones to their previous values."""
711 for biname,bival in self.builtins_added.items():
711 for biname,bival in self.builtins_added.items():
712 if bival is Undefined:
712 if bival is Undefined:
713 del __builtin__.__dict__[biname]
713 del __builtin__.__dict__[biname]
714 else:
714 else:
715 __builtin__.__dict__[biname] = bival
715 __builtin__.__dict__[biname] = bival
716 self.builtins_added.clear()
716 self.builtins_added.clear()
717
717
718 def set_hook(self,name,hook, priority = 50):
718 def set_hook(self,name,hook, priority = 50):
719 """set_hook(name,hook) -> sets an internal IPython hook.
719 """set_hook(name,hook) -> sets an internal IPython hook.
720
720
721 IPython exposes some of its internal API as user-modifiable hooks. By
721 IPython exposes some of its internal API as user-modifiable hooks. By
722 adding your function to one of these hooks, you can modify IPython's
722 adding your function to one of these hooks, you can modify IPython's
723 behavior to call at runtime your own routines."""
723 behavior to call at runtime your own routines."""
724
724
725 # At some point in the future, this should validate the hook before it
725 # At some point in the future, this should validate the hook before it
726 # accepts it. Probably at least check that the hook takes the number
726 # accepts it. Probably at least check that the hook takes the number
727 # of args it's supposed to.
727 # of args it's supposed to.
728 dp = getattr(self.hooks, name, None)
728 dp = getattr(self.hooks, name, None)
729 if name not in IPython.hooks.__all__:
729 if name not in IPython.hooks.__all__:
730 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
730 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
731 if not dp:
731 if not dp:
732 dp = IPython.hooks.CommandChainDispatcher()
732 dp = IPython.hooks.CommandChainDispatcher()
733
733
734 f = new.instancemethod(hook,self,self.__class__)
734 f = new.instancemethod(hook,self,self.__class__)
735 try:
735 try:
736 dp.add(f,priority)
736 dp.add(f,priority)
737 except AttributeError:
737 except AttributeError:
738 # it was not commandchain, plain old func - replace
738 # it was not commandchain, plain old func - replace
739 dp = f
739 dp = f
740
740
741 setattr(self.hooks,name, dp)
741 setattr(self.hooks,name, dp)
742
742
743
743
744 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
744 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
745
745
746 def set_custom_exc(self,exc_tuple,handler):
746 def set_custom_exc(self,exc_tuple,handler):
747 """set_custom_exc(exc_tuple,handler)
747 """set_custom_exc(exc_tuple,handler)
748
748
749 Set a custom exception handler, which will be called if any of the
749 Set a custom exception handler, which will be called if any of the
750 exceptions in exc_tuple occur in the mainloop (specifically, in the
750 exceptions in exc_tuple occur in the mainloop (specifically, in the
751 runcode() method.
751 runcode() method.
752
752
753 Inputs:
753 Inputs:
754
754
755 - exc_tuple: a *tuple* of valid exceptions to call the defined
755 - exc_tuple: a *tuple* of valid exceptions to call the defined
756 handler for. It is very important that you use a tuple, and NOT A
756 handler for. It is very important that you use a tuple, and NOT A
757 LIST here, because of the way Python's except statement works. If
757 LIST here, because of the way Python's except statement works. If
758 you only want to trap a single exception, use a singleton tuple:
758 you only want to trap a single exception, use a singleton tuple:
759
759
760 exc_tuple == (MyCustomException,)
760 exc_tuple == (MyCustomException,)
761
761
762 - handler: this must be defined as a function with the following
762 - handler: this must be defined as a function with the following
763 basic interface: def my_handler(self,etype,value,tb).
763 basic interface: def my_handler(self,etype,value,tb).
764
764
765 This will be made into an instance method (via new.instancemethod)
765 This will be made into an instance method (via new.instancemethod)
766 of IPython itself, and it will be called if any of the exceptions
766 of IPython itself, and it will be called if any of the exceptions
767 listed in the exc_tuple are caught. If the handler is None, an
767 listed in the exc_tuple are caught. If the handler is None, an
768 internal basic one is used, which just prints basic info.
768 internal basic one is used, which just prints basic info.
769
769
770 WARNING: by putting in your own exception handler into IPython's main
770 WARNING: by putting in your own exception handler into IPython's main
771 execution loop, you run a very good chance of nasty crashes. This
771 execution loop, you run a very good chance of nasty crashes. This
772 facility should only be used if you really know what you are doing."""
772 facility should only be used if you really know what you are doing."""
773
773
774 assert type(exc_tuple)==type(()) , \
774 assert type(exc_tuple)==type(()) , \
775 "The custom exceptions must be given AS A TUPLE."
775 "The custom exceptions must be given AS A TUPLE."
776
776
777 def dummy_handler(self,etype,value,tb):
777 def dummy_handler(self,etype,value,tb):
778 print '*** Simple custom exception handler ***'
778 print '*** Simple custom exception handler ***'
779 print 'Exception type :',etype
779 print 'Exception type :',etype
780 print 'Exception value:',value
780 print 'Exception value:',value
781 print 'Traceback :',tb
781 print 'Traceback :',tb
782 print 'Source code :','\n'.join(self.buffer)
782 print 'Source code :','\n'.join(self.buffer)
783
783
784 if handler is None: handler = dummy_handler
784 if handler is None: handler = dummy_handler
785
785
786 self.CustomTB = new.instancemethod(handler,self,self.__class__)
786 self.CustomTB = new.instancemethod(handler,self,self.__class__)
787 self.custom_exceptions = exc_tuple
787 self.custom_exceptions = exc_tuple
788
788
789 def set_custom_completer(self,completer,pos=0):
789 def set_custom_completer(self,completer,pos=0):
790 """set_custom_completer(completer,pos=0)
790 """set_custom_completer(completer,pos=0)
791
791
792 Adds a new custom completer function.
792 Adds a new custom completer function.
793
793
794 The position argument (defaults to 0) is the index in the completers
794 The position argument (defaults to 0) is the index in the completers
795 list where you want the completer to be inserted."""
795 list where you want the completer to be inserted."""
796
796
797 newcomp = new.instancemethod(completer,self.Completer,
797 newcomp = new.instancemethod(completer,self.Completer,
798 self.Completer.__class__)
798 self.Completer.__class__)
799 self.Completer.matchers.insert(pos,newcomp)
799 self.Completer.matchers.insert(pos,newcomp)
800
800
801 def _get_call_pdb(self):
801 def _get_call_pdb(self):
802 return self._call_pdb
802 return self._call_pdb
803
803
804 def _set_call_pdb(self,val):
804 def _set_call_pdb(self,val):
805
805
806 if val not in (0,1,False,True):
806 if val not in (0,1,False,True):
807 raise ValueError,'new call_pdb value must be boolean'
807 raise ValueError,'new call_pdb value must be boolean'
808
808
809 # store value in instance
809 # store value in instance
810 self._call_pdb = val
810 self._call_pdb = val
811
811
812 # notify the actual exception handlers
812 # notify the actual exception handlers
813 self.InteractiveTB.call_pdb = val
813 self.InteractiveTB.call_pdb = val
814 if self.isthreaded:
814 if self.isthreaded:
815 try:
815 try:
816 self.sys_excepthook.call_pdb = val
816 self.sys_excepthook.call_pdb = val
817 except:
817 except:
818 warn('Failed to activate pdb for threaded exception handler')
818 warn('Failed to activate pdb for threaded exception handler')
819
819
820 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
820 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
821 'Control auto-activation of pdb at exceptions')
821 'Control auto-activation of pdb at exceptions')
822
822
823
823
824 # These special functions get installed in the builtin namespace, to
824 # These special functions get installed in the builtin namespace, to
825 # provide programmatic (pure python) access to magics, aliases and system
825 # provide programmatic (pure python) access to magics, aliases and system
826 # calls. This is important for logging, user scripting, and more.
826 # calls. This is important for logging, user scripting, and more.
827
827
828 # We are basically exposing, via normal python functions, the three
828 # We are basically exposing, via normal python functions, the three
829 # mechanisms in which ipython offers special call modes (magics for
829 # mechanisms in which ipython offers special call modes (magics for
830 # internal control, aliases for direct system access via pre-selected
830 # internal control, aliases for direct system access via pre-selected
831 # names, and !cmd for calling arbitrary system commands).
831 # names, and !cmd for calling arbitrary system commands).
832
832
833 def ipmagic(self,arg_s):
833 def ipmagic(self,arg_s):
834 """Call a magic function by name.
834 """Call a magic function by name.
835
835
836 Input: a string containing the name of the magic function to call and any
836 Input: a string containing the name of the magic function to call and any
837 additional arguments to be passed to the magic.
837 additional arguments to be passed to the magic.
838
838
839 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
839 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
840 prompt:
840 prompt:
841
841
842 In[1]: %name -opt foo bar
842 In[1]: %name -opt foo bar
843
843
844 To call a magic without arguments, simply use ipmagic('name').
844 To call a magic without arguments, simply use ipmagic('name').
845
845
846 This provides a proper Python function to call IPython's magics in any
846 This provides a proper Python function to call IPython's magics in any
847 valid Python code you can type at the interpreter, including loops and
847 valid Python code you can type at the interpreter, including loops and
848 compound statements. It is added by IPython to the Python builtin
848 compound statements. It is added by IPython to the Python builtin
849 namespace upon initialization."""
849 namespace upon initialization."""
850
850
851 args = arg_s.split(' ',1)
851 args = arg_s.split(' ',1)
852 magic_name = args[0]
852 magic_name = args[0]
853 magic_name = magic_name.lstrip(self.ESC_MAGIC)
853 magic_name = magic_name.lstrip(self.ESC_MAGIC)
854
854
855 try:
855 try:
856 magic_args = args[1]
856 magic_args = args[1]
857 except IndexError:
857 except IndexError:
858 magic_args = ''
858 magic_args = ''
859 fn = getattr(self,'magic_'+magic_name,None)
859 fn = getattr(self,'magic_'+magic_name,None)
860 if fn is None:
860 if fn is None:
861 error("Magic function `%s` not found." % magic_name)
861 error("Magic function `%s` not found." % magic_name)
862 else:
862 else:
863 magic_args = self.var_expand(magic_args)
863 magic_args = self.var_expand(magic_args)
864 return fn(magic_args)
864 return fn(magic_args)
865
865
866 def ipalias(self,arg_s):
866 def ipalias(self,arg_s):
867 """Call an alias by name.
867 """Call an alias by name.
868
868
869 Input: a string containing the name of the alias to call and any
869 Input: a string containing the name of the alias to call and any
870 additional arguments to be passed to the magic.
870 additional arguments to be passed to the magic.
871
871
872 ipalias('name -opt foo bar') is equivalent to typing at the ipython
872 ipalias('name -opt foo bar') is equivalent to typing at the ipython
873 prompt:
873 prompt:
874
874
875 In[1]: name -opt foo bar
875 In[1]: name -opt foo bar
876
876
877 To call an alias without arguments, simply use ipalias('name').
877 To call an alias without arguments, simply use ipalias('name').
878
878
879 This provides a proper Python function to call IPython's aliases in any
879 This provides a proper Python function to call IPython's aliases in any
880 valid Python code you can type at the interpreter, including loops and
880 valid Python code you can type at the interpreter, including loops and
881 compound statements. It is added by IPython to the Python builtin
881 compound statements. It is added by IPython to the Python builtin
882 namespace upon initialization."""
882 namespace upon initialization."""
883
883
884 args = arg_s.split(' ',1)
884 args = arg_s.split(' ',1)
885 alias_name = args[0]
885 alias_name = args[0]
886 try:
886 try:
887 alias_args = args[1]
887 alias_args = args[1]
888 except IndexError:
888 except IndexError:
889 alias_args = ''
889 alias_args = ''
890 if alias_name in self.alias_table:
890 if alias_name in self.alias_table:
891 self.call_alias(alias_name,alias_args)
891 self.call_alias(alias_name,alias_args)
892 else:
892 else:
893 error("Alias `%s` not found." % alias_name)
893 error("Alias `%s` not found." % alias_name)
894
894
895 def ipsystem(self,arg_s):
895 def ipsystem(self,arg_s):
896 """Make a system call, using IPython."""
896 """Make a system call, using IPython."""
897
897
898 self.system(arg_s)
898 self.system(arg_s)
899
899
900 def complete(self,text):
900 def complete(self,text):
901 """Return a sorted list of all possible completions on text.
901 """Return a sorted list of all possible completions on text.
902
902
903 Inputs:
903 Inputs:
904
904
905 - text: a string of text to be completed on.
905 - text: a string of text to be completed on.
906
906
907 This is a wrapper around the completion mechanism, similar to what
907 This is a wrapper around the completion mechanism, similar to what
908 readline does at the command line when the TAB key is hit. By
908 readline does at the command line when the TAB key is hit. By
909 exposing it as a method, it can be used by other non-readline
909 exposing it as a method, it can be used by other non-readline
910 environments (such as GUIs) for text completion.
910 environments (such as GUIs) for text completion.
911
911
912 Simple usage example:
912 Simple usage example:
913
913
914 In [1]: x = 'hello'
914 In [1]: x = 'hello'
915
915
916 In [2]: __IP.complete('x.l')
916 In [2]: __IP.complete('x.l')
917 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
917 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
918
918
919 complete = self.Completer.complete
919 complete = self.Completer.complete
920 state = 0
920 state = 0
921 # use a dict so we get unique keys, since ipyhton's multiple
921 # use a dict so we get unique keys, since ipyhton's multiple
922 # completers can return duplicates.
922 # completers can return duplicates.
923 comps = {}
923 comps = {}
924 while True:
924 while True:
925 newcomp = complete(text,state)
925 newcomp = complete(text,state)
926 if newcomp is None:
926 if newcomp is None:
927 break
927 break
928 comps[newcomp] = 1
928 comps[newcomp] = 1
929 state += 1
929 state += 1
930 outcomps = comps.keys()
930 outcomps = comps.keys()
931 outcomps.sort()
931 outcomps.sort()
932 return outcomps
932 return outcomps
933
933
934 def set_completer_frame(self, frame=None):
934 def set_completer_frame(self, frame=None):
935 if frame:
935 if frame:
936 self.Completer.namespace = frame.f_locals
936 self.Completer.namespace = frame.f_locals
937 self.Completer.global_namespace = frame.f_globals
937 self.Completer.global_namespace = frame.f_globals
938 else:
938 else:
939 self.Completer.namespace = self.user_ns
939 self.Completer.namespace = self.user_ns
940 self.Completer.global_namespace = self.user_global_ns
940 self.Completer.global_namespace = self.user_global_ns
941
941
942 def init_auto_alias(self):
942 def init_auto_alias(self):
943 """Define some aliases automatically.
943 """Define some aliases automatically.
944
944
945 These are ALL parameter-less aliases"""
945 These are ALL parameter-less aliases"""
946
946
947 for alias,cmd in self.auto_alias:
947 for alias,cmd in self.auto_alias:
948 self.alias_table[alias] = (0,cmd)
948 self.alias_table[alias] = (0,cmd)
949
949
950 def alias_table_validate(self,verbose=0):
950 def alias_table_validate(self,verbose=0):
951 """Update information about the alias table.
951 """Update information about the alias table.
952
952
953 In particular, make sure no Python keywords/builtins are in it."""
953 In particular, make sure no Python keywords/builtins are in it."""
954
954
955 no_alias = self.no_alias
955 no_alias = self.no_alias
956 for k in self.alias_table.keys():
956 for k in self.alias_table.keys():
957 if k in no_alias:
957 if k in no_alias:
958 del self.alias_table[k]
958 del self.alias_table[k]
959 if verbose:
959 if verbose:
960 print ("Deleting alias <%s>, it's a Python "
960 print ("Deleting alias <%s>, it's a Python "
961 "keyword or builtin." % k)
961 "keyword or builtin." % k)
962
962
963 def set_autoindent(self,value=None):
963 def set_autoindent(self,value=None):
964 """Set the autoindent flag, checking for readline support.
964 """Set the autoindent flag, checking for readline support.
965
965
966 If called with no arguments, it acts as a toggle."""
966 If called with no arguments, it acts as a toggle."""
967
967
968 if not self.has_readline:
968 if not self.has_readline:
969 if os.name == 'posix':
969 if os.name == 'posix':
970 warn("The auto-indent feature requires the readline library")
970 warn("The auto-indent feature requires the readline library")
971 self.autoindent = 0
971 self.autoindent = 0
972 return
972 return
973 if value is None:
973 if value is None:
974 self.autoindent = not self.autoindent
974 self.autoindent = not self.autoindent
975 else:
975 else:
976 self.autoindent = value
976 self.autoindent = value
977
977
978 def rc_set_toggle(self,rc_field,value=None):
978 def rc_set_toggle(self,rc_field,value=None):
979 """Set or toggle a field in IPython's rc config. structure.
979 """Set or toggle a field in IPython's rc config. structure.
980
980
981 If called with no arguments, it acts as a toggle.
981 If called with no arguments, it acts as a toggle.
982
982
983 If called with a non-existent field, the resulting AttributeError
983 If called with a non-existent field, the resulting AttributeError
984 exception will propagate out."""
984 exception will propagate out."""
985
985
986 rc_val = getattr(self.rc,rc_field)
986 rc_val = getattr(self.rc,rc_field)
987 if value is None:
987 if value is None:
988 value = not rc_val
988 value = not rc_val
989 setattr(self.rc,rc_field,value)
989 setattr(self.rc,rc_field,value)
990
990
991 def user_setup(self,ipythondir,rc_suffix,mode='install'):
991 def user_setup(self,ipythondir,rc_suffix,mode='install'):
992 """Install the user configuration directory.
992 """Install the user configuration directory.
993
993
994 Can be called when running for the first time or to upgrade the user's
994 Can be called when running for the first time or to upgrade the user's
995 .ipython/ directory with the mode parameter. Valid modes are 'install'
995 .ipython/ directory with the mode parameter. Valid modes are 'install'
996 and 'upgrade'."""
996 and 'upgrade'."""
997
997
998 def wait():
998 def wait():
999 try:
999 try:
1000 raw_input("Please press <RETURN> to start IPython.")
1000 raw_input("Please press <RETURN> to start IPython.")
1001 except EOFError:
1001 except EOFError:
1002 print >> Term.cout
1002 print >> Term.cout
1003 print '*'*70
1003 print '*'*70
1004
1004
1005 cwd = os.getcwd() # remember where we started
1005 cwd = os.getcwd() # remember where we started
1006 glb = glob.glob
1006 glb = glob.glob
1007 print '*'*70
1007 print '*'*70
1008 if mode == 'install':
1008 if mode == 'install':
1009 print \
1009 print \
1010 """Welcome to IPython. I will try to create a personal configuration directory
1010 """Welcome to IPython. I will try to create a personal configuration directory
1011 where you can customize many aspects of IPython's functionality in:\n"""
1011 where you can customize many aspects of IPython's functionality in:\n"""
1012 else:
1012 else:
1013 print 'I am going to upgrade your configuration in:'
1013 print 'I am going to upgrade your configuration in:'
1014
1014
1015 print ipythondir
1015 print ipythondir
1016
1016
1017 rcdirend = os.path.join('IPython','UserConfig')
1017 rcdirend = os.path.join('IPython','UserConfig')
1018 cfg = lambda d: os.path.join(d,rcdirend)
1018 cfg = lambda d: os.path.join(d,rcdirend)
1019 try:
1019 try:
1020 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1020 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1021 except IOError:
1021 except IOError:
1022 warning = """
1022 warning = """
1023 Installation error. IPython's directory was not found.
1023 Installation error. IPython's directory was not found.
1024
1024
1025 Check the following:
1025 Check the following:
1026
1026
1027 The ipython/IPython directory should be in a directory belonging to your
1027 The ipython/IPython directory should be in a directory belonging to your
1028 PYTHONPATH environment variable (that is, it should be in a directory
1028 PYTHONPATH environment variable (that is, it should be in a directory
1029 belonging to sys.path). You can copy it explicitly there or just link to it.
1029 belonging to sys.path). You can copy it explicitly there or just link to it.
1030
1030
1031 IPython will proceed with builtin defaults.
1031 IPython will proceed with builtin defaults.
1032 """
1032 """
1033 warn(warning)
1033 warn(warning)
1034 wait()
1034 wait()
1035 return
1035 return
1036
1036
1037 if mode == 'install':
1037 if mode == 'install':
1038 try:
1038 try:
1039 shutil.copytree(rcdir,ipythondir)
1039 shutil.copytree(rcdir,ipythondir)
1040 os.chdir(ipythondir)
1040 os.chdir(ipythondir)
1041 rc_files = glb("ipythonrc*")
1041 rc_files = glb("ipythonrc*")
1042 for rc_file in rc_files:
1042 for rc_file in rc_files:
1043 os.rename(rc_file,rc_file+rc_suffix)
1043 os.rename(rc_file,rc_file+rc_suffix)
1044 except:
1044 except:
1045 warning = """
1045 warning = """
1046
1046
1047 There was a problem with the installation:
1047 There was a problem with the installation:
1048 %s
1048 %s
1049 Try to correct it or contact the developers if you think it's a bug.
1049 Try to correct it or contact the developers if you think it's a bug.
1050 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1050 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1051 warn(warning)
1051 warn(warning)
1052 wait()
1052 wait()
1053 return
1053 return
1054
1054
1055 elif mode == 'upgrade':
1055 elif mode == 'upgrade':
1056 try:
1056 try:
1057 os.chdir(ipythondir)
1057 os.chdir(ipythondir)
1058 except:
1058 except:
1059 print """
1059 print """
1060 Can not upgrade: changing to directory %s failed. Details:
1060 Can not upgrade: changing to directory %s failed. Details:
1061 %s
1061 %s
1062 """ % (ipythondir,sys.exc_info()[1])
1062 """ % (ipythondir,sys.exc_info()[1])
1063 wait()
1063 wait()
1064 return
1064 return
1065 else:
1065 else:
1066 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1066 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1067 for new_full_path in sources:
1067 for new_full_path in sources:
1068 new_filename = os.path.basename(new_full_path)
1068 new_filename = os.path.basename(new_full_path)
1069 if new_filename.startswith('ipythonrc'):
1069 if new_filename.startswith('ipythonrc'):
1070 new_filename = new_filename + rc_suffix
1070 new_filename = new_filename + rc_suffix
1071 # The config directory should only contain files, skip any
1071 # The config directory should only contain files, skip any
1072 # directories which may be there (like CVS)
1072 # directories which may be there (like CVS)
1073 if os.path.isdir(new_full_path):
1073 if os.path.isdir(new_full_path):
1074 continue
1074 continue
1075 if os.path.exists(new_filename):
1075 if os.path.exists(new_filename):
1076 old_file = new_filename+'.old'
1076 old_file = new_filename+'.old'
1077 if os.path.exists(old_file):
1077 if os.path.exists(old_file):
1078 os.remove(old_file)
1078 os.remove(old_file)
1079 os.rename(new_filename,old_file)
1079 os.rename(new_filename,old_file)
1080 shutil.copy(new_full_path,new_filename)
1080 shutil.copy(new_full_path,new_filename)
1081 else:
1081 else:
1082 raise ValueError,'unrecognized mode for install:',`mode`
1082 raise ValueError,'unrecognized mode for install:',`mode`
1083
1083
1084 # Fix line-endings to those native to each platform in the config
1084 # Fix line-endings to those native to each platform in the config
1085 # directory.
1085 # directory.
1086 try:
1086 try:
1087 os.chdir(ipythondir)
1087 os.chdir(ipythondir)
1088 except:
1088 except:
1089 print """
1089 print """
1090 Problem: changing to directory %s failed.
1090 Problem: changing to directory %s failed.
1091 Details:
1091 Details:
1092 %s
1092 %s
1093
1093
1094 Some configuration files may have incorrect line endings. This should not
1094 Some configuration files may have incorrect line endings. This should not
1095 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1095 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1096 wait()
1096 wait()
1097 else:
1097 else:
1098 for fname in glb('ipythonrc*'):
1098 for fname in glb('ipythonrc*'):
1099 try:
1099 try:
1100 native_line_ends(fname,backup=0)
1100 native_line_ends(fname,backup=0)
1101 except IOError:
1101 except IOError:
1102 pass
1102 pass
1103
1103
1104 if mode == 'install':
1104 if mode == 'install':
1105 print """
1105 print """
1106 Successful installation!
1106 Successful installation!
1107
1107
1108 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1108 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1109 IPython manual (there are both HTML and PDF versions supplied with the
1109 IPython manual (there are both HTML and PDF versions supplied with the
1110 distribution) to make sure that your system environment is properly configured
1110 distribution) to make sure that your system environment is properly configured
1111 to take advantage of IPython's features.
1111 to take advantage of IPython's features.
1112
1112
1113 Important note: the configuration system has changed! The old system is
1113 Important note: the configuration system has changed! The old system is
1114 still in place, but its setting may be partly overridden by the settings in
1114 still in place, but its setting may be partly overridden by the settings in
1115 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1115 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1116 if some of the new settings bother you.
1116 if some of the new settings bother you.
1117
1117
1118 """
1118 """
1119 else:
1119 else:
1120 print """
1120 print """
1121 Successful upgrade!
1121 Successful upgrade!
1122
1122
1123 All files in your directory:
1123 All files in your directory:
1124 %(ipythondir)s
1124 %(ipythondir)s
1125 which would have been overwritten by the upgrade were backed up with a .old
1125 which would have been overwritten by the upgrade were backed up with a .old
1126 extension. If you had made particular customizations in those files you may
1126 extension. If you had made particular customizations in those files you may
1127 want to merge them back into the new files.""" % locals()
1127 want to merge them back into the new files.""" % locals()
1128 wait()
1128 wait()
1129 os.chdir(cwd)
1129 os.chdir(cwd)
1130 # end user_setup()
1130 # end user_setup()
1131
1131
1132 def atexit_operations(self):
1132 def atexit_operations(self):
1133 """This will be executed at the time of exit.
1133 """This will be executed at the time of exit.
1134
1134
1135 Saving of persistent data should be performed here. """
1135 Saving of persistent data should be performed here. """
1136
1136
1137 #print '*** IPython exit cleanup ***' # dbg
1137 #print '*** IPython exit cleanup ***' # dbg
1138 # input history
1138 # input history
1139 self.savehist()
1139 self.savehist()
1140
1140
1141 # Cleanup all tempfiles left around
1141 # Cleanup all tempfiles left around
1142 for tfile in self.tempfiles:
1142 for tfile in self.tempfiles:
1143 try:
1143 try:
1144 os.unlink(tfile)
1144 os.unlink(tfile)
1145 except OSError:
1145 except OSError:
1146 pass
1146 pass
1147
1147
1148 # save the "persistent data" catch-all dictionary
1148 # save the "persistent data" catch-all dictionary
1149 self.hooks.shutdown_hook()
1149 self.hooks.shutdown_hook()
1150
1150
1151 def savehist(self):
1151 def savehist(self):
1152 """Save input history to a file (via readline library)."""
1152 """Save input history to a file (via readline library)."""
1153 try:
1153 try:
1154 self.readline.write_history_file(self.histfile)
1154 self.readline.write_history_file(self.histfile)
1155 except:
1155 except:
1156 print 'Unable to save IPython command history to file: ' + \
1156 print 'Unable to save IPython command history to file: ' + \
1157 `self.histfile`
1157 `self.histfile`
1158
1158
1159 def pre_readline(self):
1159 def pre_readline(self):
1160 """readline hook to be used at the start of each line.
1160 """readline hook to be used at the start of each line.
1161
1161
1162 Currently it handles auto-indent only."""
1162 Currently it handles auto-indent only."""
1163
1163
1164 #debugx('self.indent_current_nsp','pre_readline:')
1164 #debugx('self.indent_current_nsp','pre_readline:')
1165 self.readline.insert_text(self.indent_current_str())
1165 self.readline.insert_text(self.indent_current_str())
1166
1166
1167 def init_readline(self):
1167 def init_readline(self):
1168 """Command history completion/saving/reloading."""
1168 """Command history completion/saving/reloading."""
1169
1169
1170 import IPython.rlineimpl as readline
1170 import IPython.rlineimpl as readline
1171 if not readline.have_readline:
1171 if not readline.have_readline:
1172 self.has_readline = 0
1172 self.has_readline = 0
1173 self.readline = None
1173 self.readline = None
1174 # no point in bugging windows users with this every time:
1174 # no point in bugging windows users with this every time:
1175 warn('Readline services not available on this platform.')
1175 warn('Readline services not available on this platform.')
1176 else:
1176 else:
1177 sys.modules['readline'] = readline
1177 sys.modules['readline'] = readline
1178 import atexit
1178 import atexit
1179 from IPython.completer import IPCompleter
1179 from IPython.completer import IPCompleter
1180 self.Completer = IPCompleter(self,
1180 self.Completer = IPCompleter(self,
1181 self.user_ns,
1181 self.user_ns,
1182 self.user_global_ns,
1182 self.user_global_ns,
1183 self.rc.readline_omit__names,
1183 self.rc.readline_omit__names,
1184 self.alias_table)
1184 self.alias_table)
1185
1185
1186 # Platform-specific configuration
1186 # Platform-specific configuration
1187 if os.name == 'nt':
1187 if os.name == 'nt':
1188 self.readline_startup_hook = readline.set_pre_input_hook
1188 self.readline_startup_hook = readline.set_pre_input_hook
1189 else:
1189 else:
1190 self.readline_startup_hook = readline.set_startup_hook
1190 self.readline_startup_hook = readline.set_startup_hook
1191
1191
1192 # Load user's initrc file (readline config)
1192 # Load user's initrc file (readline config)
1193 inputrc_name = os.environ.get('INPUTRC')
1193 inputrc_name = os.environ.get('INPUTRC')
1194 if inputrc_name is None:
1194 if inputrc_name is None:
1195 home_dir = get_home_dir()
1195 home_dir = get_home_dir()
1196 if home_dir is not None:
1196 if home_dir is not None:
1197 inputrc_name = os.path.join(home_dir,'.inputrc')
1197 inputrc_name = os.path.join(home_dir,'.inputrc')
1198 if os.path.isfile(inputrc_name):
1198 if os.path.isfile(inputrc_name):
1199 try:
1199 try:
1200 readline.read_init_file(inputrc_name)
1200 readline.read_init_file(inputrc_name)
1201 except:
1201 except:
1202 warn('Problems reading readline initialization file <%s>'
1202 warn('Problems reading readline initialization file <%s>'
1203 % inputrc_name)
1203 % inputrc_name)
1204
1204
1205 self.has_readline = 1
1205 self.has_readline = 1
1206 self.readline = readline
1206 self.readline = readline
1207 # save this in sys so embedded copies can restore it properly
1207 # save this in sys so embedded copies can restore it properly
1208 sys.ipcompleter = self.Completer.complete
1208 sys.ipcompleter = self.Completer.complete
1209 readline.set_completer(self.Completer.complete)
1209 readline.set_completer(self.Completer.complete)
1210
1210
1211 # Configure readline according to user's prefs
1211 # Configure readline according to user's prefs
1212 for rlcommand in self.rc.readline_parse_and_bind:
1212 for rlcommand in self.rc.readline_parse_and_bind:
1213 readline.parse_and_bind(rlcommand)
1213 readline.parse_and_bind(rlcommand)
1214
1214
1215 # remove some chars from the delimiters list
1215 # remove some chars from the delimiters list
1216 delims = readline.get_completer_delims()
1216 delims = readline.get_completer_delims()
1217 delims = delims.translate(string._idmap,
1217 delims = delims.translate(string._idmap,
1218 self.rc.readline_remove_delims)
1218 self.rc.readline_remove_delims)
1219 readline.set_completer_delims(delims)
1219 readline.set_completer_delims(delims)
1220 # otherwise we end up with a monster history after a while:
1220 # otherwise we end up with a monster history after a while:
1221 readline.set_history_length(1000)
1221 readline.set_history_length(1000)
1222 try:
1222 try:
1223 #print '*** Reading readline history' # dbg
1223 #print '*** Reading readline history' # dbg
1224 readline.read_history_file(self.histfile)
1224 readline.read_history_file(self.histfile)
1225 except IOError:
1225 except IOError:
1226 pass # It doesn't exist yet.
1226 pass # It doesn't exist yet.
1227
1227
1228 atexit.register(self.atexit_operations)
1228 atexit.register(self.atexit_operations)
1229 del atexit
1229 del atexit
1230
1230
1231 # Configure auto-indent for all platforms
1231 # Configure auto-indent for all platforms
1232 self.set_autoindent(self.rc.autoindent)
1232 self.set_autoindent(self.rc.autoindent)
1233
1233
1234 def ask_yes_no(self,prompt,default=True):
1235 if self.rc.quiet:
1236 return True
1237 return ask_yes_no(prompt,default)
1238
1234 def _should_recompile(self,e):
1239 def _should_recompile(self,e):
1235 """Utility routine for edit_syntax_error"""
1240 """Utility routine for edit_syntax_error"""
1236
1241
1237 if e.filename in ('<ipython console>','<input>','<string>',
1242 if e.filename in ('<ipython console>','<input>','<string>',
1238 '<console>','<BackgroundJob compilation>',
1243 '<console>','<BackgroundJob compilation>',
1239 None):
1244 None):
1240
1245
1241 return False
1246 return False
1242 try:
1247 try:
1243 if (self.rc.autoedit_syntax and
1248 if (self.rc.autoedit_syntax and
1244 not ask_yes_no('Return to editor to correct syntax error? '
1249 not self.ask_yes_no('Return to editor to correct syntax error? '
1245 '[Y/n] ','y')):
1250 '[Y/n] ','y')):
1246 return False
1251 return False
1247 except EOFError:
1252 except EOFError:
1248 return False
1253 return False
1249
1254
1250 def int0(x):
1255 def int0(x):
1251 try:
1256 try:
1252 return int(x)
1257 return int(x)
1253 except TypeError:
1258 except TypeError:
1254 return 0
1259 return 0
1255 # always pass integer line and offset values to editor hook
1260 # always pass integer line and offset values to editor hook
1256 self.hooks.fix_error_editor(e.filename,
1261 self.hooks.fix_error_editor(e.filename,
1257 int0(e.lineno),int0(e.offset),e.msg)
1262 int0(e.lineno),int0(e.offset),e.msg)
1258 return True
1263 return True
1259
1264
1260 def edit_syntax_error(self):
1265 def edit_syntax_error(self):
1261 """The bottom half of the syntax error handler called in the main loop.
1266 """The bottom half of the syntax error handler called in the main loop.
1262
1267
1263 Loop until syntax error is fixed or user cancels.
1268 Loop until syntax error is fixed or user cancels.
1264 """
1269 """
1265
1270
1266 while self.SyntaxTB.last_syntax_error:
1271 while self.SyntaxTB.last_syntax_error:
1267 # copy and clear last_syntax_error
1272 # copy and clear last_syntax_error
1268 err = self.SyntaxTB.clear_err_state()
1273 err = self.SyntaxTB.clear_err_state()
1269 if not self._should_recompile(err):
1274 if not self._should_recompile(err):
1270 return
1275 return
1271 try:
1276 try:
1272 # may set last_syntax_error again if a SyntaxError is raised
1277 # may set last_syntax_error again if a SyntaxError is raised
1273 self.safe_execfile(err.filename,self.user_ns)
1278 self.safe_execfile(err.filename,self.user_ns)
1274 except:
1279 except:
1275 self.showtraceback()
1280 self.showtraceback()
1276 else:
1281 else:
1277 try:
1282 try:
1278 f = file(err.filename)
1283 f = file(err.filename)
1279 try:
1284 try:
1280 sys.displayhook(f.read())
1285 sys.displayhook(f.read())
1281 finally:
1286 finally:
1282 f.close()
1287 f.close()
1283 except:
1288 except:
1284 self.showtraceback()
1289 self.showtraceback()
1285
1290
1286 def showsyntaxerror(self, filename=None):
1291 def showsyntaxerror(self, filename=None):
1287 """Display the syntax error that just occurred.
1292 """Display the syntax error that just occurred.
1288
1293
1289 This doesn't display a stack trace because there isn't one.
1294 This doesn't display a stack trace because there isn't one.
1290
1295
1291 If a filename is given, it is stuffed in the exception instead
1296 If a filename is given, it is stuffed in the exception instead
1292 of what was there before (because Python's parser always uses
1297 of what was there before (because Python's parser always uses
1293 "<string>" when reading from a string).
1298 "<string>" when reading from a string).
1294 """
1299 """
1295 etype, value, last_traceback = sys.exc_info()
1300 etype, value, last_traceback = sys.exc_info()
1296
1301
1297 # See note about these variables in showtraceback() below
1302 # See note about these variables in showtraceback() below
1298 sys.last_type = etype
1303 sys.last_type = etype
1299 sys.last_value = value
1304 sys.last_value = value
1300 sys.last_traceback = last_traceback
1305 sys.last_traceback = last_traceback
1301
1306
1302 if filename and etype is SyntaxError:
1307 if filename and etype is SyntaxError:
1303 # Work hard to stuff the correct filename in the exception
1308 # Work hard to stuff the correct filename in the exception
1304 try:
1309 try:
1305 msg, (dummy_filename, lineno, offset, line) = value
1310 msg, (dummy_filename, lineno, offset, line) = value
1306 except:
1311 except:
1307 # Not the format we expect; leave it alone
1312 # Not the format we expect; leave it alone
1308 pass
1313 pass
1309 else:
1314 else:
1310 # Stuff in the right filename
1315 # Stuff in the right filename
1311 try:
1316 try:
1312 # Assume SyntaxError is a class exception
1317 # Assume SyntaxError is a class exception
1313 value = SyntaxError(msg, (filename, lineno, offset, line))
1318 value = SyntaxError(msg, (filename, lineno, offset, line))
1314 except:
1319 except:
1315 # If that failed, assume SyntaxError is a string
1320 # If that failed, assume SyntaxError is a string
1316 value = msg, (filename, lineno, offset, line)
1321 value = msg, (filename, lineno, offset, line)
1317 self.SyntaxTB(etype,value,[])
1322 self.SyntaxTB(etype,value,[])
1318
1323
1319 def debugger(self):
1324 def debugger(self):
1320 """Call the pdb debugger."""
1325 """Call the pdb debugger."""
1321
1326
1322 if not self.rc.pdb:
1327 if not self.rc.pdb:
1323 return
1328 return
1324 pdb.pm()
1329 pdb.pm()
1325
1330
1326 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1331 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1327 """Display the exception that just occurred.
1332 """Display the exception that just occurred.
1328
1333
1329 If nothing is known about the exception, this is the method which
1334 If nothing is known about the exception, this is the method which
1330 should be used throughout the code for presenting user tracebacks,
1335 should be used throughout the code for presenting user tracebacks,
1331 rather than directly invoking the InteractiveTB object.
1336 rather than directly invoking the InteractiveTB object.
1332
1337
1333 A specific showsyntaxerror() also exists, but this method can take
1338 A specific showsyntaxerror() also exists, but this method can take
1334 care of calling it if needed, so unless you are explicitly catching a
1339 care of calling it if needed, so unless you are explicitly catching a
1335 SyntaxError exception, don't try to analyze the stack manually and
1340 SyntaxError exception, don't try to analyze the stack manually and
1336 simply call this method."""
1341 simply call this method."""
1337
1342
1338 # Though this won't be called by syntax errors in the input line,
1343 # Though this won't be called by syntax errors in the input line,
1339 # there may be SyntaxError cases whith imported code.
1344 # there may be SyntaxError cases whith imported code.
1340 if exc_tuple is None:
1345 if exc_tuple is None:
1341 etype, value, tb = sys.exc_info()
1346 etype, value, tb = sys.exc_info()
1342 else:
1347 else:
1343 etype, value, tb = exc_tuple
1348 etype, value, tb = exc_tuple
1344 if etype is SyntaxError:
1349 if etype is SyntaxError:
1345 self.showsyntaxerror(filename)
1350 self.showsyntaxerror(filename)
1346 else:
1351 else:
1347 # WARNING: these variables are somewhat deprecated and not
1352 # WARNING: these variables are somewhat deprecated and not
1348 # necessarily safe to use in a threaded environment, but tools
1353 # necessarily safe to use in a threaded environment, but tools
1349 # like pdb depend on their existence, so let's set them. If we
1354 # like pdb depend on their existence, so let's set them. If we
1350 # find problems in the field, we'll need to revisit their use.
1355 # find problems in the field, we'll need to revisit their use.
1351 sys.last_type = etype
1356 sys.last_type = etype
1352 sys.last_value = value
1357 sys.last_value = value
1353 sys.last_traceback = tb
1358 sys.last_traceback = tb
1354
1359
1355 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1360 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1356 if self.InteractiveTB.call_pdb and self.has_readline:
1361 if self.InteractiveTB.call_pdb and self.has_readline:
1357 # pdb mucks up readline, fix it back
1362 # pdb mucks up readline, fix it back
1358 self.readline.set_completer(self.Completer.complete)
1363 self.readline.set_completer(self.Completer.complete)
1359
1364
1360 def mainloop(self,banner=None):
1365 def mainloop(self,banner=None):
1361 """Creates the local namespace and starts the mainloop.
1366 """Creates the local namespace and starts the mainloop.
1362
1367
1363 If an optional banner argument is given, it will override the
1368 If an optional banner argument is given, it will override the
1364 internally created default banner."""
1369 internally created default banner."""
1365
1370
1366 if self.rc.c: # Emulate Python's -c option
1371 if self.rc.c: # Emulate Python's -c option
1367 self.exec_init_cmd()
1372 self.exec_init_cmd()
1368 if banner is None:
1373 if banner is None:
1369 if not self.rc.banner:
1374 if not self.rc.banner:
1370 banner = ''
1375 banner = ''
1371 # banner is string? Use it directly!
1376 # banner is string? Use it directly!
1372 elif isinstance(self.rc.banner,basestring):
1377 elif isinstance(self.rc.banner,basestring):
1373 banner = self.rc.banner
1378 banner = self.rc.banner
1374 else:
1379 else:
1375 banner = self.BANNER+self.banner2
1380 banner = self.BANNER+self.banner2
1376
1381
1377 self.interact(banner)
1382 self.interact(banner)
1378
1383
1379 def exec_init_cmd(self):
1384 def exec_init_cmd(self):
1380 """Execute a command given at the command line.
1385 """Execute a command given at the command line.
1381
1386
1382 This emulates Python's -c option."""
1387 This emulates Python's -c option."""
1383
1388
1384 #sys.argv = ['-c']
1389 #sys.argv = ['-c']
1385 self.push(self.rc.c)
1390 self.push(self.rc.c)
1386
1391
1387 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1392 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1388 """Embeds IPython into a running python program.
1393 """Embeds IPython into a running python program.
1389
1394
1390 Input:
1395 Input:
1391
1396
1392 - header: An optional header message can be specified.
1397 - header: An optional header message can be specified.
1393
1398
1394 - local_ns, global_ns: working namespaces. If given as None, the
1399 - local_ns, global_ns: working namespaces. If given as None, the
1395 IPython-initialized one is updated with __main__.__dict__, so that
1400 IPython-initialized one is updated with __main__.__dict__, so that
1396 program variables become visible but user-specific configuration
1401 program variables become visible but user-specific configuration
1397 remains possible.
1402 remains possible.
1398
1403
1399 - stack_depth: specifies how many levels in the stack to go to
1404 - stack_depth: specifies how many levels in the stack to go to
1400 looking for namespaces (when local_ns and global_ns are None). This
1405 looking for namespaces (when local_ns and global_ns are None). This
1401 allows an intermediate caller to make sure that this function gets
1406 allows an intermediate caller to make sure that this function gets
1402 the namespace from the intended level in the stack. By default (0)
1407 the namespace from the intended level in the stack. By default (0)
1403 it will get its locals and globals from the immediate caller.
1408 it will get its locals and globals from the immediate caller.
1404
1409
1405 Warning: it's possible to use this in a program which is being run by
1410 Warning: it's possible to use this in a program which is being run by
1406 IPython itself (via %run), but some funny things will happen (a few
1411 IPython itself (via %run), but some funny things will happen (a few
1407 globals get overwritten). In the future this will be cleaned up, as
1412 globals get overwritten). In the future this will be cleaned up, as
1408 there is no fundamental reason why it can't work perfectly."""
1413 there is no fundamental reason why it can't work perfectly."""
1409
1414
1410 # Get locals and globals from caller
1415 # Get locals and globals from caller
1411 if local_ns is None or global_ns is None:
1416 if local_ns is None or global_ns is None:
1412 call_frame = sys._getframe(stack_depth).f_back
1417 call_frame = sys._getframe(stack_depth).f_back
1413
1418
1414 if local_ns is None:
1419 if local_ns is None:
1415 local_ns = call_frame.f_locals
1420 local_ns = call_frame.f_locals
1416 if global_ns is None:
1421 if global_ns is None:
1417 global_ns = call_frame.f_globals
1422 global_ns = call_frame.f_globals
1418
1423
1419 # Update namespaces and fire up interpreter
1424 # Update namespaces and fire up interpreter
1420
1425
1421 # The global one is easy, we can just throw it in
1426 # The global one is easy, we can just throw it in
1422 self.user_global_ns = global_ns
1427 self.user_global_ns = global_ns
1423
1428
1424 # but the user/local one is tricky: ipython needs it to store internal
1429 # but the user/local one is tricky: ipython needs it to store internal
1425 # data, but we also need the locals. We'll copy locals in the user
1430 # data, but we also need the locals. We'll copy locals in the user
1426 # one, but will track what got copied so we can delete them at exit.
1431 # one, but will track what got copied so we can delete them at exit.
1427 # This is so that a later embedded call doesn't see locals from a
1432 # This is so that a later embedded call doesn't see locals from a
1428 # previous call (which most likely existed in a separate scope).
1433 # previous call (which most likely existed in a separate scope).
1429 local_varnames = local_ns.keys()
1434 local_varnames = local_ns.keys()
1430 self.user_ns.update(local_ns)
1435 self.user_ns.update(local_ns)
1431
1436
1432 # Patch for global embedding to make sure that things don't overwrite
1437 # Patch for global embedding to make sure that things don't overwrite
1433 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1438 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1434 # FIXME. Test this a bit more carefully (the if.. is new)
1439 # FIXME. Test this a bit more carefully (the if.. is new)
1435 if local_ns is None and global_ns is None:
1440 if local_ns is None and global_ns is None:
1436 self.user_global_ns.update(__main__.__dict__)
1441 self.user_global_ns.update(__main__.__dict__)
1437
1442
1438 # make sure the tab-completer has the correct frame information, so it
1443 # make sure the tab-completer has the correct frame information, so it
1439 # actually completes using the frame's locals/globals
1444 # actually completes using the frame's locals/globals
1440 self.set_completer_frame()
1445 self.set_completer_frame()
1441
1446
1442 # before activating the interactive mode, we need to make sure that
1447 # before activating the interactive mode, we need to make sure that
1443 # all names in the builtin namespace needed by ipython point to
1448 # all names in the builtin namespace needed by ipython point to
1444 # ourselves, and not to other instances.
1449 # ourselves, and not to other instances.
1445 self.add_builtins()
1450 self.add_builtins()
1446
1451
1447 self.interact(header)
1452 self.interact(header)
1448
1453
1449 # now, purge out the user namespace from anything we might have added
1454 # now, purge out the user namespace from anything we might have added
1450 # from the caller's local namespace
1455 # from the caller's local namespace
1451 delvar = self.user_ns.pop
1456 delvar = self.user_ns.pop
1452 for var in local_varnames:
1457 for var in local_varnames:
1453 delvar(var,None)
1458 delvar(var,None)
1454 # and clean builtins we may have overridden
1459 # and clean builtins we may have overridden
1455 self.clean_builtins()
1460 self.clean_builtins()
1456
1461
1457 def interact(self, banner=None):
1462 def interact(self, banner=None):
1458 """Closely emulate the interactive Python console.
1463 """Closely emulate the interactive Python console.
1459
1464
1460 The optional banner argument specify the banner to print
1465 The optional banner argument specify the banner to print
1461 before the first interaction; by default it prints a banner
1466 before the first interaction; by default it prints a banner
1462 similar to the one printed by the real Python interpreter,
1467 similar to the one printed by the real Python interpreter,
1463 followed by the current class name in parentheses (so as not
1468 followed by the current class name in parentheses (so as not
1464 to confuse this with the real interpreter -- since it's so
1469 to confuse this with the real interpreter -- since it's so
1465 close!).
1470 close!).
1466
1471
1467 """
1472 """
1468 cprt = 'Type "copyright", "credits" or "license" for more information.'
1473 cprt = 'Type "copyright", "credits" or "license" for more information.'
1469 if banner is None:
1474 if banner is None:
1470 self.write("Python %s on %s\n%s\n(%s)\n" %
1475 self.write("Python %s on %s\n%s\n(%s)\n" %
1471 (sys.version, sys.platform, cprt,
1476 (sys.version, sys.platform, cprt,
1472 self.__class__.__name__))
1477 self.__class__.__name__))
1473 else:
1478 else:
1474 self.write(banner)
1479 self.write(banner)
1475
1480
1476 more = 0
1481 more = 0
1477
1482
1478 # Mark activity in the builtins
1483 # Mark activity in the builtins
1479 __builtin__.__dict__['__IPYTHON__active'] += 1
1484 __builtin__.__dict__['__IPYTHON__active'] += 1
1480
1485
1481 # exit_now is set by a call to %Exit or %Quit
1486 # exit_now is set by a call to %Exit or %Quit
1482 self.exit_now = False
1487 self.exit_now = False
1483 while not self.exit_now:
1488 while not self.exit_now:
1484 if more:
1489 if more:
1485 prompt = self.outputcache.prompt2
1490 prompt = self.outputcache.prompt2
1486 if self.autoindent:
1491 if self.autoindent:
1487 self.readline_startup_hook(self.pre_readline)
1492 self.readline_startup_hook(self.pre_readline)
1488 else:
1493 else:
1489 prompt = self.outputcache.prompt1
1494 prompt = self.outputcache.prompt1
1490 try:
1495 try:
1491 line = self.raw_input(prompt,more)
1496 line = self.raw_input(prompt,more)
1492 if self.autoindent:
1497 if self.autoindent:
1493 self.readline_startup_hook(None)
1498 self.readline_startup_hook(None)
1494 except KeyboardInterrupt:
1499 except KeyboardInterrupt:
1495 self.write('\nKeyboardInterrupt\n')
1500 self.write('\nKeyboardInterrupt\n')
1496 self.resetbuffer()
1501 self.resetbuffer()
1497 # keep cache in sync with the prompt counter:
1502 # keep cache in sync with the prompt counter:
1498 self.outputcache.prompt_count -= 1
1503 self.outputcache.prompt_count -= 1
1499
1504
1500 if self.autoindent:
1505 if self.autoindent:
1501 self.indent_current_nsp = 0
1506 self.indent_current_nsp = 0
1502 more = 0
1507 more = 0
1503 except EOFError:
1508 except EOFError:
1504 if self.autoindent:
1509 if self.autoindent:
1505 self.readline_startup_hook(None)
1510 self.readline_startup_hook(None)
1506 self.write('\n')
1511 self.write('\n')
1507 self.exit()
1512 self.exit()
1508 except bdb.BdbQuit:
1513 except bdb.BdbQuit:
1509 warn('The Python debugger has exited with a BdbQuit exception.\n'
1514 warn('The Python debugger has exited with a BdbQuit exception.\n'
1510 'Because of how pdb handles the stack, it is impossible\n'
1515 'Because of how pdb handles the stack, it is impossible\n'
1511 'for IPython to properly format this particular exception.\n'
1516 'for IPython to properly format this particular exception.\n'
1512 'IPython will resume normal operation.')
1517 'IPython will resume normal operation.')
1513 except:
1518 except:
1514 # exceptions here are VERY RARE, but they can be triggered
1519 # exceptions here are VERY RARE, but they can be triggered
1515 # asynchronously by signal handlers, for example.
1520 # asynchronously by signal handlers, for example.
1516 self.showtraceback()
1521 self.showtraceback()
1517 else:
1522 else:
1518 more = self.push(line)
1523 more = self.push(line)
1519 if (self.SyntaxTB.last_syntax_error and
1524 if (self.SyntaxTB.last_syntax_error and
1520 self.rc.autoedit_syntax):
1525 self.rc.autoedit_syntax):
1521 self.edit_syntax_error()
1526 self.edit_syntax_error()
1522
1527
1523 # We are off again...
1528 # We are off again...
1524 __builtin__.__dict__['__IPYTHON__active'] -= 1
1529 __builtin__.__dict__['__IPYTHON__active'] -= 1
1525
1530
1526 def excepthook(self, etype, value, tb):
1531 def excepthook(self, etype, value, tb):
1527 """One more defense for GUI apps that call sys.excepthook.
1532 """One more defense for GUI apps that call sys.excepthook.
1528
1533
1529 GUI frameworks like wxPython trap exceptions and call
1534 GUI frameworks like wxPython trap exceptions and call
1530 sys.excepthook themselves. I guess this is a feature that
1535 sys.excepthook themselves. I guess this is a feature that
1531 enables them to keep running after exceptions that would
1536 enables them to keep running after exceptions that would
1532 otherwise kill their mainloop. This is a bother for IPython
1537 otherwise kill their mainloop. This is a bother for IPython
1533 which excepts to catch all of the program exceptions with a try:
1538 which excepts to catch all of the program exceptions with a try:
1534 except: statement.
1539 except: statement.
1535
1540
1536 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1541 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1537 any app directly invokes sys.excepthook, it will look to the user like
1542 any app directly invokes sys.excepthook, it will look to the user like
1538 IPython crashed. In order to work around this, we can disable the
1543 IPython crashed. In order to work around this, we can disable the
1539 CrashHandler and replace it with this excepthook instead, which prints a
1544 CrashHandler and replace it with this excepthook instead, which prints a
1540 regular traceback using our InteractiveTB. In this fashion, apps which
1545 regular traceback using our InteractiveTB. In this fashion, apps which
1541 call sys.excepthook will generate a regular-looking exception from
1546 call sys.excepthook will generate a regular-looking exception from
1542 IPython, and the CrashHandler will only be triggered by real IPython
1547 IPython, and the CrashHandler will only be triggered by real IPython
1543 crashes.
1548 crashes.
1544
1549
1545 This hook should be used sparingly, only in places which are not likely
1550 This hook should be used sparingly, only in places which are not likely
1546 to be true IPython errors.
1551 to be true IPython errors.
1547 """
1552 """
1548 self.showtraceback((etype,value,tb),tb_offset=0)
1553 self.showtraceback((etype,value,tb),tb_offset=0)
1549
1554
1550 def transform_alias(self, alias,rest=''):
1555 def transform_alias(self, alias,rest=''):
1551 """ Transform alias to system command string.
1556 """ Transform alias to system command string.
1552 """
1557 """
1553 nargs,cmd = self.alias_table[alias]
1558 nargs,cmd = self.alias_table[alias]
1554 if ' ' in cmd and os.path.isfile(cmd):
1559 if ' ' in cmd and os.path.isfile(cmd):
1555 cmd = '"%s"' % cmd
1560 cmd = '"%s"' % cmd
1556
1561
1557 # Expand the %l special to be the user's input line
1562 # Expand the %l special to be the user's input line
1558 if cmd.find('%l') >= 0:
1563 if cmd.find('%l') >= 0:
1559 cmd = cmd.replace('%l',rest)
1564 cmd = cmd.replace('%l',rest)
1560 rest = ''
1565 rest = ''
1561 if nargs==0:
1566 if nargs==0:
1562 # Simple, argument-less aliases
1567 # Simple, argument-less aliases
1563 cmd = '%s %s' % (cmd,rest)
1568 cmd = '%s %s' % (cmd,rest)
1564 else:
1569 else:
1565 # Handle aliases with positional arguments
1570 # Handle aliases with positional arguments
1566 args = rest.split(None,nargs)
1571 args = rest.split(None,nargs)
1567 if len(args)< nargs:
1572 if len(args)< nargs:
1568 error('Alias <%s> requires %s arguments, %s given.' %
1573 error('Alias <%s> requires %s arguments, %s given.' %
1569 (alias,nargs,len(args)))
1574 (alias,nargs,len(args)))
1570 return None
1575 return None
1571 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1576 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1572 # Now call the macro, evaluating in the user's namespace
1577 # Now call the macro, evaluating in the user's namespace
1573 #print 'new command: <%r>' % cmd # dbg
1578 #print 'new command: <%r>' % cmd # dbg
1574 return cmd
1579 return cmd
1575
1580
1576 def call_alias(self,alias,rest=''):
1581 def call_alias(self,alias,rest=''):
1577 """Call an alias given its name and the rest of the line.
1582 """Call an alias given its name and the rest of the line.
1578
1583
1579 This is only used to provide backwards compatibility for users of
1584 This is only used to provide backwards compatibility for users of
1580 ipalias(), use of which is not recommended for anymore."""
1585 ipalias(), use of which is not recommended for anymore."""
1581
1586
1582 # Now call the macro, evaluating in the user's namespace
1587 # Now call the macro, evaluating in the user's namespace
1583 cmd = self.transform_alias(alias, rest)
1588 cmd = self.transform_alias(alias, rest)
1584 try:
1589 try:
1585 self.system(cmd)
1590 self.system(cmd)
1586 except:
1591 except:
1587 self.showtraceback()
1592 self.showtraceback()
1588
1593
1589 def indent_current_str(self):
1594 def indent_current_str(self):
1590 """return the current level of indentation as a string"""
1595 """return the current level of indentation as a string"""
1591 return self.indent_current_nsp * ' '
1596 return self.indent_current_nsp * ' '
1592
1597
1593 def autoindent_update(self,line):
1598 def autoindent_update(self,line):
1594 """Keep track of the indent level."""
1599 """Keep track of the indent level."""
1595
1600
1596 #debugx('line')
1601 #debugx('line')
1597 #debugx('self.indent_current_nsp')
1602 #debugx('self.indent_current_nsp')
1598 if self.autoindent:
1603 if self.autoindent:
1599 if line:
1604 if line:
1600 inisp = num_ini_spaces(line)
1605 inisp = num_ini_spaces(line)
1601 if inisp < self.indent_current_nsp:
1606 if inisp < self.indent_current_nsp:
1602 self.indent_current_nsp = inisp
1607 self.indent_current_nsp = inisp
1603
1608
1604 if line[-1] == ':':
1609 if line[-1] == ':':
1605 self.indent_current_nsp += 4
1610 self.indent_current_nsp += 4
1606 elif dedent_re.match(line):
1611 elif dedent_re.match(line):
1607 self.indent_current_nsp -= 4
1612 self.indent_current_nsp -= 4
1608 else:
1613 else:
1609 self.indent_current_nsp = 0
1614 self.indent_current_nsp = 0
1610
1615
1611 def runlines(self,lines):
1616 def runlines(self,lines):
1612 """Run a string of one or more lines of source.
1617 """Run a string of one or more lines of source.
1613
1618
1614 This method is capable of running a string containing multiple source
1619 This method is capable of running a string containing multiple source
1615 lines, as if they had been entered at the IPython prompt. Since it
1620 lines, as if they had been entered at the IPython prompt. Since it
1616 exposes IPython's processing machinery, the given strings can contain
1621 exposes IPython's processing machinery, the given strings can contain
1617 magic calls (%magic), special shell access (!cmd), etc."""
1622 magic calls (%magic), special shell access (!cmd), etc."""
1618
1623
1619 # We must start with a clean buffer, in case this is run from an
1624 # We must start with a clean buffer, in case this is run from an
1620 # interactive IPython session (via a magic, for example).
1625 # interactive IPython session (via a magic, for example).
1621 self.resetbuffer()
1626 self.resetbuffer()
1622 lines = lines.split('\n')
1627 lines = lines.split('\n')
1623 more = 0
1628 more = 0
1624 for line in lines:
1629 for line in lines:
1625 # skip blank lines so we don't mess up the prompt counter, but do
1630 # skip blank lines so we don't mess up the prompt counter, but do
1626 # NOT skip even a blank line if we are in a code block (more is
1631 # NOT skip even a blank line if we are in a code block (more is
1627 # true)
1632 # true)
1628 if line or more:
1633 if line or more:
1629 more = self.push(self.prefilter(line,more))
1634 more = self.push(self.prefilter(line,more))
1630 # IPython's runsource returns None if there was an error
1635 # IPython's runsource returns None if there was an error
1631 # compiling the code. This allows us to stop processing right
1636 # compiling the code. This allows us to stop processing right
1632 # away, so the user gets the error message at the right place.
1637 # away, so the user gets the error message at the right place.
1633 if more is None:
1638 if more is None:
1634 break
1639 break
1635 # final newline in case the input didn't have it, so that the code
1640 # final newline in case the input didn't have it, so that the code
1636 # actually does get executed
1641 # actually does get executed
1637 if more:
1642 if more:
1638 self.push('\n')
1643 self.push('\n')
1639
1644
1640 def runsource(self, source, filename='<input>', symbol='single'):
1645 def runsource(self, source, filename='<input>', symbol='single'):
1641 """Compile and run some source in the interpreter.
1646 """Compile and run some source in the interpreter.
1642
1647
1643 Arguments are as for compile_command().
1648 Arguments are as for compile_command().
1644
1649
1645 One several things can happen:
1650 One several things can happen:
1646
1651
1647 1) The input is incorrect; compile_command() raised an
1652 1) The input is incorrect; compile_command() raised an
1648 exception (SyntaxError or OverflowError). A syntax traceback
1653 exception (SyntaxError or OverflowError). A syntax traceback
1649 will be printed by calling the showsyntaxerror() method.
1654 will be printed by calling the showsyntaxerror() method.
1650
1655
1651 2) The input is incomplete, and more input is required;
1656 2) The input is incomplete, and more input is required;
1652 compile_command() returned None. Nothing happens.
1657 compile_command() returned None. Nothing happens.
1653
1658
1654 3) The input is complete; compile_command() returned a code
1659 3) The input is complete; compile_command() returned a code
1655 object. The code is executed by calling self.runcode() (which
1660 object. The code is executed by calling self.runcode() (which
1656 also handles run-time exceptions, except for SystemExit).
1661 also handles run-time exceptions, except for SystemExit).
1657
1662
1658 The return value is:
1663 The return value is:
1659
1664
1660 - True in case 2
1665 - True in case 2
1661
1666
1662 - False in the other cases, unless an exception is raised, where
1667 - False in the other cases, unless an exception is raised, where
1663 None is returned instead. This can be used by external callers to
1668 None is returned instead. This can be used by external callers to
1664 know whether to continue feeding input or not.
1669 know whether to continue feeding input or not.
1665
1670
1666 The return value can be used to decide whether to use sys.ps1 or
1671 The return value can be used to decide whether to use sys.ps1 or
1667 sys.ps2 to prompt the next line."""
1672 sys.ps2 to prompt the next line."""
1668
1673
1669 try:
1674 try:
1670 code = self.compile(source,filename,symbol)
1675 code = self.compile(source,filename,symbol)
1671 except (OverflowError, SyntaxError, ValueError):
1676 except (OverflowError, SyntaxError, ValueError):
1672 # Case 1
1677 # Case 1
1673 self.showsyntaxerror(filename)
1678 self.showsyntaxerror(filename)
1674 return None
1679 return None
1675
1680
1676 if code is None:
1681 if code is None:
1677 # Case 2
1682 # Case 2
1678 return True
1683 return True
1679
1684
1680 # Case 3
1685 # Case 3
1681 # We store the code object so that threaded shells and
1686 # We store the code object so that threaded shells and
1682 # custom exception handlers can access all this info if needed.
1687 # custom exception handlers can access all this info if needed.
1683 # The source corresponding to this can be obtained from the
1688 # The source corresponding to this can be obtained from the
1684 # buffer attribute as '\n'.join(self.buffer).
1689 # buffer attribute as '\n'.join(self.buffer).
1685 self.code_to_run = code
1690 self.code_to_run = code
1686 # now actually execute the code object
1691 # now actually execute the code object
1687 if self.runcode(code) == 0:
1692 if self.runcode(code) == 0:
1688 return False
1693 return False
1689 else:
1694 else:
1690 return None
1695 return None
1691
1696
1692 def runcode(self,code_obj):
1697 def runcode(self,code_obj):
1693 """Execute a code object.
1698 """Execute a code object.
1694
1699
1695 When an exception occurs, self.showtraceback() is called to display a
1700 When an exception occurs, self.showtraceback() is called to display a
1696 traceback.
1701 traceback.
1697
1702
1698 Return value: a flag indicating whether the code to be run completed
1703 Return value: a flag indicating whether the code to be run completed
1699 successfully:
1704 successfully:
1700
1705
1701 - 0: successful execution.
1706 - 0: successful execution.
1702 - 1: an error occurred.
1707 - 1: an error occurred.
1703 """
1708 """
1704
1709
1705 # Set our own excepthook in case the user code tries to call it
1710 # Set our own excepthook in case the user code tries to call it
1706 # directly, so that the IPython crash handler doesn't get triggered
1711 # directly, so that the IPython crash handler doesn't get triggered
1707 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1712 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1708
1713
1709 # we save the original sys.excepthook in the instance, in case config
1714 # we save the original sys.excepthook in the instance, in case config
1710 # code (such as magics) needs access to it.
1715 # code (such as magics) needs access to it.
1711 self.sys_excepthook = old_excepthook
1716 self.sys_excepthook = old_excepthook
1712 outflag = 1 # happens in more places, so it's easier as default
1717 outflag = 1 # happens in more places, so it's easier as default
1713 try:
1718 try:
1714 try:
1719 try:
1715 # Embedded instances require separate global/local namespaces
1720 # Embedded instances require separate global/local namespaces
1716 # so they can see both the surrounding (local) namespace and
1721 # so they can see both the surrounding (local) namespace and
1717 # the module-level globals when called inside another function.
1722 # the module-level globals when called inside another function.
1718 if self.embedded:
1723 if self.embedded:
1719 exec code_obj in self.user_global_ns, self.user_ns
1724 exec code_obj in self.user_global_ns, self.user_ns
1720 # Normal (non-embedded) instances should only have a single
1725 # Normal (non-embedded) instances should only have a single
1721 # namespace for user code execution, otherwise functions won't
1726 # namespace for user code execution, otherwise functions won't
1722 # see interactive top-level globals.
1727 # see interactive top-level globals.
1723 else:
1728 else:
1724 exec code_obj in self.user_ns
1729 exec code_obj in self.user_ns
1725 finally:
1730 finally:
1726 # Reset our crash handler in place
1731 # Reset our crash handler in place
1727 sys.excepthook = old_excepthook
1732 sys.excepthook = old_excepthook
1728 except SystemExit:
1733 except SystemExit:
1729 self.resetbuffer()
1734 self.resetbuffer()
1730 self.showtraceback()
1735 self.showtraceback()
1731 warn("Type exit or quit to exit IPython "
1736 warn("Type exit or quit to exit IPython "
1732 "(%Exit or %Quit do so unconditionally).",level=1)
1737 "(%Exit or %Quit do so unconditionally).",level=1)
1733 except self.custom_exceptions:
1738 except self.custom_exceptions:
1734 etype,value,tb = sys.exc_info()
1739 etype,value,tb = sys.exc_info()
1735 self.CustomTB(etype,value,tb)
1740 self.CustomTB(etype,value,tb)
1736 except:
1741 except:
1737 self.showtraceback()
1742 self.showtraceback()
1738 else:
1743 else:
1739 outflag = 0
1744 outflag = 0
1740 if softspace(sys.stdout, 0):
1745 if softspace(sys.stdout, 0):
1741 print
1746 print
1742 # Flush out code object which has been run (and source)
1747 # Flush out code object which has been run (and source)
1743 self.code_to_run = None
1748 self.code_to_run = None
1744 return outflag
1749 return outflag
1745
1750
1746 def push(self, line):
1751 def push(self, line):
1747 """Push a line to the interpreter.
1752 """Push a line to the interpreter.
1748
1753
1749 The line should not have a trailing newline; it may have
1754 The line should not have a trailing newline; it may have
1750 internal newlines. The line is appended to a buffer and the
1755 internal newlines. The line is appended to a buffer and the
1751 interpreter's runsource() method is called with the
1756 interpreter's runsource() method is called with the
1752 concatenated contents of the buffer as source. If this
1757 concatenated contents of the buffer as source. If this
1753 indicates that the command was executed or invalid, the buffer
1758 indicates that the command was executed or invalid, the buffer
1754 is reset; otherwise, the command is incomplete, and the buffer
1759 is reset; otherwise, the command is incomplete, and the buffer
1755 is left as it was after the line was appended. The return
1760 is left as it was after the line was appended. The return
1756 value is 1 if more input is required, 0 if the line was dealt
1761 value is 1 if more input is required, 0 if the line was dealt
1757 with in some way (this is the same as runsource()).
1762 with in some way (this is the same as runsource()).
1758 """
1763 """
1759
1764
1760 # autoindent management should be done here, and not in the
1765 # autoindent management should be done here, and not in the
1761 # interactive loop, since that one is only seen by keyboard input. We
1766 # interactive loop, since that one is only seen by keyboard input. We
1762 # need this done correctly even for code run via runlines (which uses
1767 # need this done correctly even for code run via runlines (which uses
1763 # push).
1768 # push).
1764
1769
1765 #print 'push line: <%s>' % line # dbg
1770 #print 'push line: <%s>' % line # dbg
1766 self.autoindent_update(line)
1771 self.autoindent_update(line)
1767
1772
1768 self.buffer.append(line)
1773 self.buffer.append(line)
1769 more = self.runsource('\n'.join(self.buffer), self.filename)
1774 more = self.runsource('\n'.join(self.buffer), self.filename)
1770 if not more:
1775 if not more:
1771 self.resetbuffer()
1776 self.resetbuffer()
1772 return more
1777 return more
1773
1778
1774 def resetbuffer(self):
1779 def resetbuffer(self):
1775 """Reset the input buffer."""
1780 """Reset the input buffer."""
1776 self.buffer[:] = []
1781 self.buffer[:] = []
1777
1782
1778 def raw_input(self,prompt='',continue_prompt=False):
1783 def raw_input(self,prompt='',continue_prompt=False):
1779 """Write a prompt and read a line.
1784 """Write a prompt and read a line.
1780
1785
1781 The returned line does not include the trailing newline.
1786 The returned line does not include the trailing newline.
1782 When the user enters the EOF key sequence, EOFError is raised.
1787 When the user enters the EOF key sequence, EOFError is raised.
1783
1788
1784 Optional inputs:
1789 Optional inputs:
1785
1790
1786 - prompt(''): a string to be printed to prompt the user.
1791 - prompt(''): a string to be printed to prompt the user.
1787
1792
1788 - continue_prompt(False): whether this line is the first one or a
1793 - continue_prompt(False): whether this line is the first one or a
1789 continuation in a sequence of inputs.
1794 continuation in a sequence of inputs.
1790 """
1795 """
1791
1796
1792 line = raw_input_original(prompt)
1797 line = raw_input_original(prompt)
1793
1798
1794 # Try to be reasonably smart about not re-indenting pasted input more
1799 # Try to be reasonably smart about not re-indenting pasted input more
1795 # than necessary. We do this by trimming out the auto-indent initial
1800 # than necessary. We do this by trimming out the auto-indent initial
1796 # spaces, if the user's actual input started itself with whitespace.
1801 # spaces, if the user's actual input started itself with whitespace.
1797 #debugx('self.buffer[-1]')
1802 #debugx('self.buffer[-1]')
1798
1803
1799 if self.autoindent:
1804 if self.autoindent:
1800 if num_ini_spaces(line) > self.indent_current_nsp:
1805 if num_ini_spaces(line) > self.indent_current_nsp:
1801 line = line[self.indent_current_nsp:]
1806 line = line[self.indent_current_nsp:]
1802 self.indent_current_nsp = 0
1807 self.indent_current_nsp = 0
1803
1808
1804 # store the unfiltered input before the user has any chance to modify
1809 # store the unfiltered input before the user has any chance to modify
1805 # it.
1810 # it.
1806 if line.strip():
1811 if line.strip():
1807 if continue_prompt:
1812 if continue_prompt:
1808 self.input_hist_raw[-1] += '%s\n' % line
1813 self.input_hist_raw[-1] += '%s\n' % line
1809 else:
1814 else:
1810 self.input_hist_raw.append('%s\n' % line)
1815 self.input_hist_raw.append('%s\n' % line)
1811
1816
1812 try:
1817 try:
1813 lineout = self.prefilter(line,continue_prompt)
1818 lineout = self.prefilter(line,continue_prompt)
1814 except:
1819 except:
1815 # blanket except, in case a user-defined prefilter crashes, so it
1820 # blanket except, in case a user-defined prefilter crashes, so it
1816 # can't take all of ipython with it.
1821 # can't take all of ipython with it.
1817 self.showtraceback()
1822 self.showtraceback()
1818 return ''
1823 return ''
1819 else:
1824 else:
1820 return lineout
1825 return lineout
1821
1826
1822 def split_user_input(self,line):
1827 def split_user_input(self,line):
1823 """Split user input into pre-char, function part and rest."""
1828 """Split user input into pre-char, function part and rest."""
1824
1829
1825 lsplit = self.line_split.match(line)
1830 lsplit = self.line_split.match(line)
1826 if lsplit is None: # no regexp match returns None
1831 if lsplit is None: # no regexp match returns None
1827 try:
1832 try:
1828 iFun,theRest = line.split(None,1)
1833 iFun,theRest = line.split(None,1)
1829 except ValueError:
1834 except ValueError:
1830 iFun,theRest = line,''
1835 iFun,theRest = line,''
1831 pre = re.match('^(\s*)(.*)',line).groups()[0]
1836 pre = re.match('^(\s*)(.*)',line).groups()[0]
1832 else:
1837 else:
1833 pre,iFun,theRest = lsplit.groups()
1838 pre,iFun,theRest = lsplit.groups()
1834
1839
1835 #print 'line:<%s>' % line # dbg
1840 #print 'line:<%s>' % line # dbg
1836 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1841 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1837 return pre,iFun.strip(),theRest
1842 return pre,iFun.strip(),theRest
1838
1843
1839 def _prefilter(self, line, continue_prompt):
1844 def _prefilter(self, line, continue_prompt):
1840 """Calls different preprocessors, depending on the form of line."""
1845 """Calls different preprocessors, depending on the form of line."""
1841
1846
1842 # All handlers *must* return a value, even if it's blank ('').
1847 # All handlers *must* return a value, even if it's blank ('').
1843
1848
1844 # Lines are NOT logged here. Handlers should process the line as
1849 # Lines are NOT logged here. Handlers should process the line as
1845 # needed, update the cache AND log it (so that the input cache array
1850 # needed, update the cache AND log it (so that the input cache array
1846 # stays synced).
1851 # stays synced).
1847
1852
1848 # This function is _very_ delicate, and since it's also the one which
1853 # This function is _very_ delicate, and since it's also the one which
1849 # determines IPython's response to user input, it must be as efficient
1854 # determines IPython's response to user input, it must be as efficient
1850 # as possible. For this reason it has _many_ returns in it, trying
1855 # as possible. For this reason it has _many_ returns in it, trying
1851 # always to exit as quickly as it can figure out what it needs to do.
1856 # always to exit as quickly as it can figure out what it needs to do.
1852
1857
1853 # This function is the main responsible for maintaining IPython's
1858 # This function is the main responsible for maintaining IPython's
1854 # behavior respectful of Python's semantics. So be _very_ careful if
1859 # behavior respectful of Python's semantics. So be _very_ careful if
1855 # making changes to anything here.
1860 # making changes to anything here.
1856
1861
1857 #.....................................................................
1862 #.....................................................................
1858 # Code begins
1863 # Code begins
1859
1864
1860 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1865 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1861
1866
1862 # save the line away in case we crash, so the post-mortem handler can
1867 # save the line away in case we crash, so the post-mortem handler can
1863 # record it
1868 # record it
1864 self._last_input_line = line
1869 self._last_input_line = line
1865
1870
1866 #print '***line: <%s>' % line # dbg
1871 #print '***line: <%s>' % line # dbg
1867
1872
1868 # the input history needs to track even empty lines
1873 # the input history needs to track even empty lines
1869 stripped = line.strip()
1874 stripped = line.strip()
1870
1875
1871 if not stripped:
1876 if not stripped:
1872 if not continue_prompt:
1877 if not continue_prompt:
1873 self.outputcache.prompt_count -= 1
1878 self.outputcache.prompt_count -= 1
1874 return self.handle_normal(line,continue_prompt)
1879 return self.handle_normal(line,continue_prompt)
1875 #return self.handle_normal('',continue_prompt)
1880 #return self.handle_normal('',continue_prompt)
1876
1881
1877 # print '***cont',continue_prompt # dbg
1882 # print '***cont',continue_prompt # dbg
1878 # special handlers are only allowed for single line statements
1883 # special handlers are only allowed for single line statements
1879 if continue_prompt and not self.rc.multi_line_specials:
1884 if continue_prompt and not self.rc.multi_line_specials:
1880 return self.handle_normal(line,continue_prompt)
1885 return self.handle_normal(line,continue_prompt)
1881
1886
1882
1887
1883 # For the rest, we need the structure of the input
1888 # For the rest, we need the structure of the input
1884 pre,iFun,theRest = self.split_user_input(line)
1889 pre,iFun,theRest = self.split_user_input(line)
1885
1890
1886 # See whether any pre-existing handler can take care of it
1891 # See whether any pre-existing handler can take care of it
1887
1892
1888 rewritten = self.hooks.input_prefilter(stripped)
1893 rewritten = self.hooks.input_prefilter(stripped)
1889 if rewritten != stripped: # ok, some prefilter did something
1894 if rewritten != stripped: # ok, some prefilter did something
1890 rewritten = pre + rewritten # add indentation
1895 rewritten = pre + rewritten # add indentation
1891 return self.handle_normal(rewritten)
1896 return self.handle_normal(rewritten)
1892
1897
1893 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1898 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1894
1899
1895 # First check for explicit escapes in the last/first character
1900 # First check for explicit escapes in the last/first character
1896 handler = None
1901 handler = None
1897 if line[-1] == self.ESC_HELP:
1902 if line[-1] == self.ESC_HELP:
1898 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1903 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1899 if handler is None:
1904 if handler is None:
1900 # look at the first character of iFun, NOT of line, so we skip
1905 # look at the first character of iFun, NOT of line, so we skip
1901 # leading whitespace in multiline input
1906 # leading whitespace in multiline input
1902 handler = self.esc_handlers.get(iFun[0:1])
1907 handler = self.esc_handlers.get(iFun[0:1])
1903 if handler is not None:
1908 if handler is not None:
1904 return handler(line,continue_prompt,pre,iFun,theRest)
1909 return handler(line,continue_prompt,pre,iFun,theRest)
1905 # Emacs ipython-mode tags certain input lines
1910 # Emacs ipython-mode tags certain input lines
1906 if line.endswith('# PYTHON-MODE'):
1911 if line.endswith('# PYTHON-MODE'):
1907 return self.handle_emacs(line,continue_prompt)
1912 return self.handle_emacs(line,continue_prompt)
1908
1913
1909 # Next, check if we can automatically execute this thing
1914 # Next, check if we can automatically execute this thing
1910
1915
1911 # Allow ! in multi-line statements if multi_line_specials is on:
1916 # Allow ! in multi-line statements if multi_line_specials is on:
1912 if continue_prompt and self.rc.multi_line_specials and \
1917 if continue_prompt and self.rc.multi_line_specials and \
1913 iFun.startswith(self.ESC_SHELL):
1918 iFun.startswith(self.ESC_SHELL):
1914 return self.handle_shell_escape(line,continue_prompt,
1919 return self.handle_shell_escape(line,continue_prompt,
1915 pre=pre,iFun=iFun,
1920 pre=pre,iFun=iFun,
1916 theRest=theRest)
1921 theRest=theRest)
1917
1922
1918 # Let's try to find if the input line is a magic fn
1923 # Let's try to find if the input line is a magic fn
1919 oinfo = None
1924 oinfo = None
1920 if hasattr(self,'magic_'+iFun):
1925 if hasattr(self,'magic_'+iFun):
1921 # WARNING: _ofind uses getattr(), so it can consume generators and
1926 # WARNING: _ofind uses getattr(), so it can consume generators and
1922 # cause other side effects.
1927 # cause other side effects.
1923 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1928 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1924 if oinfo['ismagic']:
1929 if oinfo['ismagic']:
1925 # Be careful not to call magics when a variable assignment is
1930 # Be careful not to call magics when a variable assignment is
1926 # being made (ls='hi', for example)
1931 # being made (ls='hi', for example)
1927 if self.rc.automagic and \
1932 if self.rc.automagic and \
1928 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1933 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1929 (self.rc.multi_line_specials or not continue_prompt):
1934 (self.rc.multi_line_specials or not continue_prompt):
1930 return self.handle_magic(line,continue_prompt,
1935 return self.handle_magic(line,continue_prompt,
1931 pre,iFun,theRest)
1936 pre,iFun,theRest)
1932 else:
1937 else:
1933 return self.handle_normal(line,continue_prompt)
1938 return self.handle_normal(line,continue_prompt)
1934
1939
1935 # If the rest of the line begins with an (in)equality, assginment or
1940 # If the rest of the line begins with an (in)equality, assginment or
1936 # function call, we should not call _ofind but simply execute it.
1941 # function call, we should not call _ofind but simply execute it.
1937 # This avoids spurious geattr() accesses on objects upon assignment.
1942 # This avoids spurious geattr() accesses on objects upon assignment.
1938 #
1943 #
1939 # It also allows users to assign to either alias or magic names true
1944 # It also allows users to assign to either alias or magic names true
1940 # python variables (the magic/alias systems always take second seat to
1945 # python variables (the magic/alias systems always take second seat to
1941 # true python code).
1946 # true python code).
1942 if theRest and theRest[0] in '!=()':
1947 if theRest and theRest[0] in '!=()':
1943 return self.handle_normal(line,continue_prompt)
1948 return self.handle_normal(line,continue_prompt)
1944
1949
1945 if oinfo is None:
1950 if oinfo is None:
1946 # let's try to ensure that _oinfo is ONLY called when autocall is
1951 # let's try to ensure that _oinfo is ONLY called when autocall is
1947 # on. Since it has inevitable potential side effects, at least
1952 # on. Since it has inevitable potential side effects, at least
1948 # having autocall off should be a guarantee to the user that no
1953 # having autocall off should be a guarantee to the user that no
1949 # weird things will happen.
1954 # weird things will happen.
1950
1955
1951 if self.rc.autocall:
1956 if self.rc.autocall:
1952 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1957 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1953 else:
1958 else:
1954 # in this case, all that's left is either an alias or
1959 # in this case, all that's left is either an alias or
1955 # processing the line normally.
1960 # processing the line normally.
1956 if iFun in self.alias_table:
1961 if iFun in self.alias_table:
1957 # if autocall is off, by not running _ofind we won't know
1962 # if autocall is off, by not running _ofind we won't know
1958 # whether the given name may also exist in one of the
1963 # whether the given name may also exist in one of the
1959 # user's namespace. At this point, it's best to do a
1964 # user's namespace. At this point, it's best to do a
1960 # quick check just to be sure that we don't let aliases
1965 # quick check just to be sure that we don't let aliases
1961 # shadow variables.
1966 # shadow variables.
1962 head = iFun.split('.',1)[0]
1967 head = iFun.split('.',1)[0]
1963 if head in self.user_ns or head in self.internal_ns \
1968 if head in self.user_ns or head in self.internal_ns \
1964 or head in __builtin__.__dict__:
1969 or head in __builtin__.__dict__:
1965 return self.handle_normal(line,continue_prompt)
1970 return self.handle_normal(line,continue_prompt)
1966 else:
1971 else:
1967 return self.handle_alias(line,continue_prompt,
1972 return self.handle_alias(line,continue_prompt,
1968 pre,iFun,theRest)
1973 pre,iFun,theRest)
1969
1974
1970 else:
1975 else:
1971 return self.handle_normal(line,continue_prompt)
1976 return self.handle_normal(line,continue_prompt)
1972
1977
1973 if not oinfo['found']:
1978 if not oinfo['found']:
1974 return self.handle_normal(line,continue_prompt)
1979 return self.handle_normal(line,continue_prompt)
1975 else:
1980 else:
1976 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1981 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1977 if oinfo['isalias']:
1982 if oinfo['isalias']:
1978 return self.handle_alias(line,continue_prompt,
1983 return self.handle_alias(line,continue_prompt,
1979 pre,iFun,theRest)
1984 pre,iFun,theRest)
1980
1985
1981 if (self.rc.autocall
1986 if (self.rc.autocall
1982 and
1987 and
1983 (
1988 (
1984 #only consider exclusion re if not "," or ";" autoquoting
1989 #only consider exclusion re if not "," or ";" autoquoting
1985 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1990 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1986 or pre == self.ESC_PAREN) or
1991 or pre == self.ESC_PAREN) or
1987 (not self.re_exclude_auto.match(theRest)))
1992 (not self.re_exclude_auto.match(theRest)))
1988 and
1993 and
1989 self.re_fun_name.match(iFun) and
1994 self.re_fun_name.match(iFun) and
1990 callable(oinfo['obj'])) :
1995 callable(oinfo['obj'])) :
1991 #print 'going auto' # dbg
1996 #print 'going auto' # dbg
1992 return self.handle_auto(line,continue_prompt,
1997 return self.handle_auto(line,continue_prompt,
1993 pre,iFun,theRest,oinfo['obj'])
1998 pre,iFun,theRest,oinfo['obj'])
1994 else:
1999 else:
1995 #print 'was callable?', callable(oinfo['obj']) # dbg
2000 #print 'was callable?', callable(oinfo['obj']) # dbg
1996 return self.handle_normal(line,continue_prompt)
2001 return self.handle_normal(line,continue_prompt)
1997
2002
1998 # If we get here, we have a normal Python line. Log and return.
2003 # If we get here, we have a normal Python line. Log and return.
1999 return self.handle_normal(line,continue_prompt)
2004 return self.handle_normal(line,continue_prompt)
2000
2005
2001 def _prefilter_dumb(self, line, continue_prompt):
2006 def _prefilter_dumb(self, line, continue_prompt):
2002 """simple prefilter function, for debugging"""
2007 """simple prefilter function, for debugging"""
2003 return self.handle_normal(line,continue_prompt)
2008 return self.handle_normal(line,continue_prompt)
2004
2009
2005 # Set the default prefilter() function (this can be user-overridden)
2010 # Set the default prefilter() function (this can be user-overridden)
2006 prefilter = _prefilter
2011 prefilter = _prefilter
2007
2012
2008 def handle_normal(self,line,continue_prompt=None,
2013 def handle_normal(self,line,continue_prompt=None,
2009 pre=None,iFun=None,theRest=None):
2014 pre=None,iFun=None,theRest=None):
2010 """Handle normal input lines. Use as a template for handlers."""
2015 """Handle normal input lines. Use as a template for handlers."""
2011
2016
2012 # With autoindent on, we need some way to exit the input loop, and I
2017 # With autoindent on, we need some way to exit the input loop, and I
2013 # don't want to force the user to have to backspace all the way to
2018 # don't want to force the user to have to backspace all the way to
2014 # clear the line. The rule will be in this case, that either two
2019 # clear the line. The rule will be in this case, that either two
2015 # lines of pure whitespace in a row, or a line of pure whitespace but
2020 # lines of pure whitespace in a row, or a line of pure whitespace but
2016 # of a size different to the indent level, will exit the input loop.
2021 # of a size different to the indent level, will exit the input loop.
2017
2022
2018 if (continue_prompt and self.autoindent and line.isspace() and
2023 if (continue_prompt and self.autoindent and line.isspace() and
2019 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2024 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2020 (self.buffer[-1]).isspace() )):
2025 (self.buffer[-1]).isspace() )):
2021 line = ''
2026 line = ''
2022
2027
2023 self.log(line,line,continue_prompt)
2028 self.log(line,line,continue_prompt)
2024 return line
2029 return line
2025
2030
2026 def handle_alias(self,line,continue_prompt=None,
2031 def handle_alias(self,line,continue_prompt=None,
2027 pre=None,iFun=None,theRest=None):
2032 pre=None,iFun=None,theRest=None):
2028 """Handle alias input lines. """
2033 """Handle alias input lines. """
2029
2034
2030 # pre is needed, because it carries the leading whitespace. Otherwise
2035 # pre is needed, because it carries the leading whitespace. Otherwise
2031 # aliases won't work in indented sections.
2036 # aliases won't work in indented sections.
2032 transformed = self.transform_alias(iFun, theRest)
2037 transformed = self.transform_alias(iFun, theRest)
2033 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2038 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2034 self.log(line,line_out,continue_prompt)
2039 self.log(line,line_out,continue_prompt)
2035 #print 'line out:',line_out # dbg
2040 #print 'line out:',line_out # dbg
2036 return line_out
2041 return line_out
2037
2042
2038 def handle_shell_escape(self, line, continue_prompt=None,
2043 def handle_shell_escape(self, line, continue_prompt=None,
2039 pre=None,iFun=None,theRest=None):
2044 pre=None,iFun=None,theRest=None):
2040 """Execute the line in a shell, empty return value"""
2045 """Execute the line in a shell, empty return value"""
2041
2046
2042 #print 'line in :', `line` # dbg
2047 #print 'line in :', `line` # dbg
2043 # Example of a special handler. Others follow a similar pattern.
2048 # Example of a special handler. Others follow a similar pattern.
2044 if line.lstrip().startswith('!!'):
2049 if line.lstrip().startswith('!!'):
2045 # rewrite iFun/theRest to properly hold the call to %sx and
2050 # rewrite iFun/theRest to properly hold the call to %sx and
2046 # the actual command to be executed, so handle_magic can work
2051 # the actual command to be executed, so handle_magic can work
2047 # correctly
2052 # correctly
2048 theRest = '%s %s' % (iFun[2:],theRest)
2053 theRest = '%s %s' % (iFun[2:],theRest)
2049 iFun = 'sx'
2054 iFun = 'sx'
2050 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2055 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2051 line.lstrip()[2:]),
2056 line.lstrip()[2:]),
2052 continue_prompt,pre,iFun,theRest)
2057 continue_prompt,pre,iFun,theRest)
2053 else:
2058 else:
2054 cmd=line.lstrip().lstrip('!')
2059 cmd=line.lstrip().lstrip('!')
2055 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2060 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2056 # update cache/log and return
2061 # update cache/log and return
2057 self.log(line,line_out,continue_prompt)
2062 self.log(line,line_out,continue_prompt)
2058 return line_out
2063 return line_out
2059
2064
2060 def handle_magic(self, line, continue_prompt=None,
2065 def handle_magic(self, line, continue_prompt=None,
2061 pre=None,iFun=None,theRest=None):
2066 pre=None,iFun=None,theRest=None):
2062 """Execute magic functions."""
2067 """Execute magic functions."""
2063
2068
2064
2069
2065 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2070 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2066 self.log(line,cmd,continue_prompt)
2071 self.log(line,cmd,continue_prompt)
2067 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2072 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2068 return cmd
2073 return cmd
2069
2074
2070 def handle_auto(self, line, continue_prompt=None,
2075 def handle_auto(self, line, continue_prompt=None,
2071 pre=None,iFun=None,theRest=None,obj=None):
2076 pre=None,iFun=None,theRest=None,obj=None):
2072 """Hande lines which can be auto-executed, quoting if requested."""
2077 """Hande lines which can be auto-executed, quoting if requested."""
2073
2078
2074 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2079 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2075
2080
2076 # This should only be active for single-line input!
2081 # This should only be active for single-line input!
2077 if continue_prompt:
2082 if continue_prompt:
2078 self.log(line,line,continue_prompt)
2083 self.log(line,line,continue_prompt)
2079 return line
2084 return line
2080
2085
2081 auto_rewrite = True
2086 auto_rewrite = True
2082
2087
2083 if pre == self.ESC_QUOTE:
2088 if pre == self.ESC_QUOTE:
2084 # Auto-quote splitting on whitespace
2089 # Auto-quote splitting on whitespace
2085 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2090 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2086 elif pre == self.ESC_QUOTE2:
2091 elif pre == self.ESC_QUOTE2:
2087 # Auto-quote whole string
2092 # Auto-quote whole string
2088 newcmd = '%s("%s")' % (iFun,theRest)
2093 newcmd = '%s("%s")' % (iFun,theRest)
2089 elif pre == self.ESC_PAREN:
2094 elif pre == self.ESC_PAREN:
2090 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2095 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2091 else:
2096 else:
2092 # Auto-paren.
2097 # Auto-paren.
2093 # We only apply it to argument-less calls if the autocall
2098 # We only apply it to argument-less calls if the autocall
2094 # parameter is set to 2. We only need to check that autocall is <
2099 # parameter is set to 2. We only need to check that autocall is <
2095 # 2, since this function isn't called unless it's at least 1.
2100 # 2, since this function isn't called unless it's at least 1.
2096 if not theRest and (self.rc.autocall < 2):
2101 if not theRest and (self.rc.autocall < 2):
2097 newcmd = '%s %s' % (iFun,theRest)
2102 newcmd = '%s %s' % (iFun,theRest)
2098 auto_rewrite = False
2103 auto_rewrite = False
2099 else:
2104 else:
2100 if theRest.startswith('['):
2105 if theRest.startswith('['):
2101 if hasattr(obj,'__getitem__'):
2106 if hasattr(obj,'__getitem__'):
2102 # Don't autocall in this case: item access for an object
2107 # Don't autocall in this case: item access for an object
2103 # which is BOTH callable and implements __getitem__.
2108 # which is BOTH callable and implements __getitem__.
2104 newcmd = '%s %s' % (iFun,theRest)
2109 newcmd = '%s %s' % (iFun,theRest)
2105 auto_rewrite = False
2110 auto_rewrite = False
2106 else:
2111 else:
2107 # if the object doesn't support [] access, go ahead and
2112 # if the object doesn't support [] access, go ahead and
2108 # autocall
2113 # autocall
2109 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2114 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2110 elif theRest.endswith(';'):
2115 elif theRest.endswith(';'):
2111 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2116 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2112 else:
2117 else:
2113 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2118 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2114
2119
2115 if auto_rewrite:
2120 if auto_rewrite:
2116 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2121 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2117 # log what is now valid Python, not the actual user input (without the
2122 # log what is now valid Python, not the actual user input (without the
2118 # final newline)
2123 # final newline)
2119 self.log(line,newcmd,continue_prompt)
2124 self.log(line,newcmd,continue_prompt)
2120 return newcmd
2125 return newcmd
2121
2126
2122 def handle_help(self, line, continue_prompt=None,
2127 def handle_help(self, line, continue_prompt=None,
2123 pre=None,iFun=None,theRest=None):
2128 pre=None,iFun=None,theRest=None):
2124 """Try to get some help for the object.
2129 """Try to get some help for the object.
2125
2130
2126 obj? or ?obj -> basic information.
2131 obj? or ?obj -> basic information.
2127 obj?? or ??obj -> more details.
2132 obj?? or ??obj -> more details.
2128 """
2133 """
2129
2134
2130 # We need to make sure that we don't process lines which would be
2135 # We need to make sure that we don't process lines which would be
2131 # otherwise valid python, such as "x=1 # what?"
2136 # otherwise valid python, such as "x=1 # what?"
2132 try:
2137 try:
2133 codeop.compile_command(line)
2138 codeop.compile_command(line)
2134 except SyntaxError:
2139 except SyntaxError:
2135 # We should only handle as help stuff which is NOT valid syntax
2140 # We should only handle as help stuff which is NOT valid syntax
2136 if line[0]==self.ESC_HELP:
2141 if line[0]==self.ESC_HELP:
2137 line = line[1:]
2142 line = line[1:]
2138 elif line[-1]==self.ESC_HELP:
2143 elif line[-1]==self.ESC_HELP:
2139 line = line[:-1]
2144 line = line[:-1]
2140 self.log(line,'#?'+line,continue_prompt)
2145 self.log(line,'#?'+line,continue_prompt)
2141 if line:
2146 if line:
2142 self.magic_pinfo(line)
2147 self.magic_pinfo(line)
2143 else:
2148 else:
2144 page(self.usage,screen_lines=self.rc.screen_length)
2149 page(self.usage,screen_lines=self.rc.screen_length)
2145 return '' # Empty string is needed here!
2150 return '' # Empty string is needed here!
2146 except:
2151 except:
2147 # Pass any other exceptions through to the normal handler
2152 # Pass any other exceptions through to the normal handler
2148 return self.handle_normal(line,continue_prompt)
2153 return self.handle_normal(line,continue_prompt)
2149 else:
2154 else:
2150 # If the code compiles ok, we should handle it normally
2155 # If the code compiles ok, we should handle it normally
2151 return self.handle_normal(line,continue_prompt)
2156 return self.handle_normal(line,continue_prompt)
2152
2157
2153 def getapi(self):
2158 def getapi(self):
2154 """ Get an IPApi object for this shell instance
2159 """ Get an IPApi object for this shell instance
2155
2160
2156 Getting an IPApi object is always preferable to accessing the shell
2161 Getting an IPApi object is always preferable to accessing the shell
2157 directly, but this holds true especially for extensions.
2162 directly, but this holds true especially for extensions.
2158
2163
2159 It should always be possible to implement an extension with IPApi
2164 It should always be possible to implement an extension with IPApi
2160 alone. If not, contact maintainer to request an addition.
2165 alone. If not, contact maintainer to request an addition.
2161
2166
2162 """
2167 """
2163 return self.api
2168 return self.api
2164
2169
2165 def handle_emacs(self,line,continue_prompt=None,
2170 def handle_emacs(self,line,continue_prompt=None,
2166 pre=None,iFun=None,theRest=None):
2171 pre=None,iFun=None,theRest=None):
2167 """Handle input lines marked by python-mode."""
2172 """Handle input lines marked by python-mode."""
2168
2173
2169 # Currently, nothing is done. Later more functionality can be added
2174 # Currently, nothing is done. Later more functionality can be added
2170 # here if needed.
2175 # here if needed.
2171
2176
2172 # The input cache shouldn't be updated
2177 # The input cache shouldn't be updated
2173
2178
2174 return line
2179 return line
2175
2180
2176 def mktempfile(self,data=None):
2181 def mktempfile(self,data=None):
2177 """Make a new tempfile and return its filename.
2182 """Make a new tempfile and return its filename.
2178
2183
2179 This makes a call to tempfile.mktemp, but it registers the created
2184 This makes a call to tempfile.mktemp, but it registers the created
2180 filename internally so ipython cleans it up at exit time.
2185 filename internally so ipython cleans it up at exit time.
2181
2186
2182 Optional inputs:
2187 Optional inputs:
2183
2188
2184 - data(None): if data is given, it gets written out to the temp file
2189 - data(None): if data is given, it gets written out to the temp file
2185 immediately, and the file is closed again."""
2190 immediately, and the file is closed again."""
2186
2191
2187 filename = tempfile.mktemp('.py','ipython_edit_')
2192 filename = tempfile.mktemp('.py','ipython_edit_')
2188 self.tempfiles.append(filename)
2193 self.tempfiles.append(filename)
2189
2194
2190 if data:
2195 if data:
2191 tmp_file = open(filename,'w')
2196 tmp_file = open(filename,'w')
2192 tmp_file.write(data)
2197 tmp_file.write(data)
2193 tmp_file.close()
2198 tmp_file.close()
2194 return filename
2199 return filename
2195
2200
2196 def write(self,data):
2201 def write(self,data):
2197 """Write a string to the default output"""
2202 """Write a string to the default output"""
2198 Term.cout.write(data)
2203 Term.cout.write(data)
2199
2204
2200 def write_err(self,data):
2205 def write_err(self,data):
2201 """Write a string to the default error output"""
2206 """Write a string to the default error output"""
2202 Term.cerr.write(data)
2207 Term.cerr.write(data)
2203
2208
2204 def exit(self):
2209 def exit(self):
2205 """Handle interactive exit.
2210 """Handle interactive exit.
2206
2211
2207 This method sets the exit_now attribute."""
2212 This method sets the exit_now attribute."""
2208
2213
2209 if self.rc.confirm_exit:
2214 if self.rc.confirm_exit:
2210 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2215 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2211 self.exit_now = True
2216 self.exit_now = True
2212 else:
2217 else:
2213 self.exit_now = True
2218 self.exit_now = True
2214 return self.exit_now
2219 return self.exit_now
2215
2220
2216 def safe_execfile(self,fname,*where,**kw):
2221 def safe_execfile(self,fname,*where,**kw):
2217 fname = os.path.expanduser(fname)
2222 fname = os.path.expanduser(fname)
2218
2223
2219 # find things also in current directory
2224 # find things also in current directory
2220 dname = os.path.dirname(fname)
2225 dname = os.path.dirname(fname)
2221 if not sys.path.count(dname):
2226 if not sys.path.count(dname):
2222 sys.path.append(dname)
2227 sys.path.append(dname)
2223
2228
2224 try:
2229 try:
2225 xfile = open(fname)
2230 xfile = open(fname)
2226 except:
2231 except:
2227 print >> Term.cerr, \
2232 print >> Term.cerr, \
2228 'Could not open file <%s> for safe execution.' % fname
2233 'Could not open file <%s> for safe execution.' % fname
2229 return None
2234 return None
2230
2235
2231 kw.setdefault('islog',0)
2236 kw.setdefault('islog',0)
2232 kw.setdefault('quiet',1)
2237 kw.setdefault('quiet',1)
2233 kw.setdefault('exit_ignore',0)
2238 kw.setdefault('exit_ignore',0)
2234 first = xfile.readline()
2239 first = xfile.readline()
2235 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2240 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2236 xfile.close()
2241 xfile.close()
2237 # line by line execution
2242 # line by line execution
2238 if first.startswith(loghead) or kw['islog']:
2243 if first.startswith(loghead) or kw['islog']:
2239 print 'Loading log file <%s> one line at a time...' % fname
2244 print 'Loading log file <%s> one line at a time...' % fname
2240 if kw['quiet']:
2245 if kw['quiet']:
2241 stdout_save = sys.stdout
2246 stdout_save = sys.stdout
2242 sys.stdout = StringIO.StringIO()
2247 sys.stdout = StringIO.StringIO()
2243 try:
2248 try:
2244 globs,locs = where[0:2]
2249 globs,locs = where[0:2]
2245 except:
2250 except:
2246 try:
2251 try:
2247 globs = locs = where[0]
2252 globs = locs = where[0]
2248 except:
2253 except:
2249 globs = locs = globals()
2254 globs = locs = globals()
2250 badblocks = []
2255 badblocks = []
2251
2256
2252 # we also need to identify indented blocks of code when replaying
2257 # we also need to identify indented blocks of code when replaying
2253 # logs and put them together before passing them to an exec
2258 # logs and put them together before passing them to an exec
2254 # statement. This takes a bit of regexp and look-ahead work in the
2259 # statement. This takes a bit of regexp and look-ahead work in the
2255 # file. It's easiest if we swallow the whole thing in memory
2260 # file. It's easiest if we swallow the whole thing in memory
2256 # first, and manually walk through the lines list moving the
2261 # first, and manually walk through the lines list moving the
2257 # counter ourselves.
2262 # counter ourselves.
2258 indent_re = re.compile('\s+\S')
2263 indent_re = re.compile('\s+\S')
2259 xfile = open(fname)
2264 xfile = open(fname)
2260 filelines = xfile.readlines()
2265 filelines = xfile.readlines()
2261 xfile.close()
2266 xfile.close()
2262 nlines = len(filelines)
2267 nlines = len(filelines)
2263 lnum = 0
2268 lnum = 0
2264 while lnum < nlines:
2269 while lnum < nlines:
2265 line = filelines[lnum]
2270 line = filelines[lnum]
2266 lnum += 1
2271 lnum += 1
2267 # don't re-insert logger status info into cache
2272 # don't re-insert logger status info into cache
2268 if line.startswith('#log#'):
2273 if line.startswith('#log#'):
2269 continue
2274 continue
2270 else:
2275 else:
2271 # build a block of code (maybe a single line) for execution
2276 # build a block of code (maybe a single line) for execution
2272 block = line
2277 block = line
2273 try:
2278 try:
2274 next = filelines[lnum] # lnum has already incremented
2279 next = filelines[lnum] # lnum has already incremented
2275 except:
2280 except:
2276 next = None
2281 next = None
2277 while next and indent_re.match(next):
2282 while next and indent_re.match(next):
2278 block += next
2283 block += next
2279 lnum += 1
2284 lnum += 1
2280 try:
2285 try:
2281 next = filelines[lnum]
2286 next = filelines[lnum]
2282 except:
2287 except:
2283 next = None
2288 next = None
2284 # now execute the block of one or more lines
2289 # now execute the block of one or more lines
2285 try:
2290 try:
2286 exec block in globs,locs
2291 exec block in globs,locs
2287 except SystemExit:
2292 except SystemExit:
2288 pass
2293 pass
2289 except:
2294 except:
2290 badblocks.append(block.rstrip())
2295 badblocks.append(block.rstrip())
2291 if kw['quiet']: # restore stdout
2296 if kw['quiet']: # restore stdout
2292 sys.stdout.close()
2297 sys.stdout.close()
2293 sys.stdout = stdout_save
2298 sys.stdout = stdout_save
2294 print 'Finished replaying log file <%s>' % fname
2299 print 'Finished replaying log file <%s>' % fname
2295 if badblocks:
2300 if badblocks:
2296 print >> sys.stderr, ('\nThe following lines/blocks in file '
2301 print >> sys.stderr, ('\nThe following lines/blocks in file '
2297 '<%s> reported errors:' % fname)
2302 '<%s> reported errors:' % fname)
2298
2303
2299 for badline in badblocks:
2304 for badline in badblocks:
2300 print >> sys.stderr, badline
2305 print >> sys.stderr, badline
2301 else: # regular file execution
2306 else: # regular file execution
2302 try:
2307 try:
2303 execfile(fname,*where)
2308 execfile(fname,*where)
2304 except SyntaxError:
2309 except SyntaxError:
2305 self.showsyntaxerror()
2310 self.showsyntaxerror()
2306 warn('Failure executing file: <%s>' % fname)
2311 warn('Failure executing file: <%s>' % fname)
2307 except SystemExit,status:
2312 except SystemExit,status:
2308 if not kw['exit_ignore']:
2313 if not kw['exit_ignore']:
2309 self.showtraceback()
2314 self.showtraceback()
2310 warn('Failure executing file: <%s>' % fname)
2315 warn('Failure executing file: <%s>' % fname)
2311 except:
2316 except:
2312 self.showtraceback()
2317 self.showtraceback()
2313 warn('Failure executing file: <%s>' % fname)
2318 warn('Failure executing file: <%s>' % fname)
2314
2319
2315 #************************* end of file <iplib.py> *****************************
2320 #************************* end of file <iplib.py> *****************************
@@ -1,752 +1,753 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or better.
5 Requires Python 2.1 or better.
6
6
7 This file contains the main make_IPython() starter function.
7 This file contains the main make_IPython() starter function.
8
8
9 $Id: ipmaker.py 1347 2006-06-04 00:42:44Z fperez $"""
9 $Id: ipmaker.py 1355 2006-06-07 16:56:50Z vivainio $"""
10
10
11 #*****************************************************************************
11 #*****************************************************************************
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 #
13 #
14 # Distributed under the terms of the BSD License. The full license is in
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
15 # the file COPYING, distributed as part of this software.
16 #*****************************************************************************
16 #*****************************************************************************
17
17
18 from IPython import Release
18 from IPython import Release
19 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __license__ = Release.license
20 __license__ = Release.license
21 __version__ = Release.version
21 __version__ = Release.version
22
22
23 credits._Printer__data = """
23 credits._Printer__data = """
24 Python: %s
24 Python: %s
25
25
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
27 See http://ipython.scipy.org for more information.""" \
27 See http://ipython.scipy.org for more information.""" \
28 % credits._Printer__data
28 % credits._Printer__data
29
29
30 copyright._Printer__data += """
30 copyright._Printer__data += """
31
31
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
33 All Rights Reserved."""
33 All Rights Reserved."""
34
34
35 #****************************************************************************
35 #****************************************************************************
36 # Required modules
36 # Required modules
37
37
38 # From the standard library
38 # From the standard library
39 import __main__
39 import __main__
40 import __builtin__
40 import __builtin__
41 import os
41 import os
42 import re
42 import re
43 import sys
43 import sys
44 import types
44 import types
45 from pprint import pprint,pformat
45 from pprint import pprint,pformat
46
46
47 # Our own
47 # Our own
48 from IPython import DPyGetOpt
48 from IPython import DPyGetOpt
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.OutputTrap import OutputTrap
50 from IPython.OutputTrap import OutputTrap
51 from IPython.ConfigLoader import ConfigLoader
51 from IPython.ConfigLoader import ConfigLoader
52 from IPython.iplib import InteractiveShell
52 from IPython.iplib import InteractiveShell
53 from IPython.usage import cmd_line_usage,interactive_usage
53 from IPython.usage import cmd_line_usage,interactive_usage
54 from IPython.genutils import *
54 from IPython.genutils import *
55
55
56 #-----------------------------------------------------------------------------
56 #-----------------------------------------------------------------------------
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
58 rc_override=None,shell_class=InteractiveShell,
58 rc_override=None,shell_class=InteractiveShell,
59 embedded=False,**kw):
59 embedded=False,**kw):
60 """This is a dump of IPython into a single function.
60 """This is a dump of IPython into a single function.
61
61
62 Later it will have to be broken up in a sensible manner.
62 Later it will have to be broken up in a sensible manner.
63
63
64 Arguments:
64 Arguments:
65
65
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
67 script name, b/c DPyGetOpt strips the first argument only for the real
67 script name, b/c DPyGetOpt strips the first argument only for the real
68 sys.argv.
68 sys.argv.
69
69
70 - user_ns: a dict to be used as the user's namespace."""
70 - user_ns: a dict to be used as the user's namespace."""
71
71
72 #----------------------------------------------------------------------
72 #----------------------------------------------------------------------
73 # Defaults and initialization
73 # Defaults and initialization
74
74
75 # For developer debugging, deactivates crash handler and uses pdb.
75 # For developer debugging, deactivates crash handler and uses pdb.
76 DEVDEBUG = False
76 DEVDEBUG = False
77
77
78 if argv is None:
78 if argv is None:
79 argv = sys.argv
79 argv = sys.argv
80
80
81 # __IP is the main global that lives throughout and represents the whole
81 # __IP is the main global that lives throughout and represents the whole
82 # application. If the user redefines it, all bets are off as to what
82 # application. If the user redefines it, all bets are off as to what
83 # happens.
83 # happens.
84
84
85 # __IP is the name of he global which the caller will have accessible as
85 # __IP is the name of he global which the caller will have accessible as
86 # __IP.name. We set its name via the first parameter passed to
86 # __IP.name. We set its name via the first parameter passed to
87 # InteractiveShell:
87 # InteractiveShell:
88
88
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
90 embedded=embedded,**kw)
90 embedded=embedded,**kw)
91
91
92 # Put 'help' in the user namespace
92 # Put 'help' in the user namespace
93 from site import _Helper
93 from site import _Helper
94 IP.user_ns['help'] = _Helper()
94 IP.user_ns['help'] = _Helper()
95
95
96
96
97 if DEVDEBUG:
97 if DEVDEBUG:
98 # For developer debugging only (global flag)
98 # For developer debugging only (global flag)
99 from IPython import ultraTB
99 from IPython import ultraTB
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
101
101
102 IP.BANNER_PARTS = ['Python %s\n'
102 IP.BANNER_PARTS = ['Python %s\n'
103 'Type "copyright", "credits" or "license" '
103 'Type "copyright", "credits" or "license" '
104 'for more information.\n'
104 'for more information.\n'
105 % (sys.version.split('\n')[0],),
105 % (sys.version.split('\n')[0],),
106 "IPython %s -- An enhanced Interactive Python."
106 "IPython %s -- An enhanced Interactive Python."
107 % (__version__,),
107 % (__version__,),
108 """? -> Introduction to IPython's features.
108 """? -> Introduction to IPython's features.
109 %magic -> Information about IPython's 'magic' % functions.
109 %magic -> Information about IPython's 'magic' % functions.
110 help -> Python's own help system.
110 help -> Python's own help system.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
112 """ ]
112 """ ]
113
113
114 IP.usage = interactive_usage
114 IP.usage = interactive_usage
115
115
116 # Platform-dependent suffix and directory names. We use _ipython instead
116 # Platform-dependent suffix and directory names. We use _ipython instead
117 # of .ipython under win32 b/c there's software that breaks with .named
117 # of .ipython under win32 b/c there's software that breaks with .named
118 # directories on that platform.
118 # directories on that platform.
119 if os.name == 'posix':
119 if os.name == 'posix':
120 rc_suffix = ''
120 rc_suffix = ''
121 ipdir_def = '.ipython'
121 ipdir_def = '.ipython'
122 else:
122 else:
123 rc_suffix = '.ini'
123 rc_suffix = '.ini'
124 ipdir_def = '_ipython'
124 ipdir_def = '_ipython'
125
125
126 # default directory for configuration
126 # default directory for configuration
127 ipythondir_def = os.path.abspath(os.environ.get('IPYTHONDIR',
127 ipythondir_def = os.path.abspath(os.environ.get('IPYTHONDIR',
128 os.path.join(IP.home_dir,ipdir_def)))
128 os.path.join(IP.home_dir,ipdir_def)))
129
129
130 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
130 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
131
131
132 # we need the directory where IPython itself is installed
132 # we need the directory where IPython itself is installed
133 import IPython
133 import IPython
134 IPython_dir = os.path.dirname(IPython.__file__)
134 IPython_dir = os.path.dirname(IPython.__file__)
135 del IPython
135 del IPython
136
136
137 #-------------------------------------------------------------------------
137 #-------------------------------------------------------------------------
138 # Command line handling
138 # Command line handling
139
139
140 # Valid command line options (uses DPyGetOpt syntax, like Perl's
140 # Valid command line options (uses DPyGetOpt syntax, like Perl's
141 # GetOpt::Long)
141 # GetOpt::Long)
142
142
143 # Any key not listed here gets deleted even if in the file (like session
143 # Any key not listed here gets deleted even if in the file (like session
144 # or profile). That's deliberate, to maintain the rc namespace clean.
144 # or profile). That's deliberate, to maintain the rc namespace clean.
145
145
146 # Each set of options appears twice: under _conv only the names are
146 # Each set of options appears twice: under _conv only the names are
147 # listed, indicating which type they must be converted to when reading the
147 # listed, indicating which type they must be converted to when reading the
148 # ipythonrc file. And under DPyGetOpt they are listed with the regular
148 # ipythonrc file. And under DPyGetOpt they are listed with the regular
149 # DPyGetOpt syntax (=s,=i,:f,etc).
149 # DPyGetOpt syntax (=s,=i,:f,etc).
150
150
151 # Make sure there's a space before each end of line (they get auto-joined!)
151 # Make sure there's a space before each end of line (they get auto-joined!)
152 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
152 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
153 'c=s classic|cl color_info! colors=s confirm_exit! '
153 'c=s classic|cl color_info! colors=s confirm_exit! '
154 'debug! deep_reload! editor=s log|l messages! nosep '
154 'debug! deep_reload! editor=s log|l messages! nosep '
155 'object_info_string_level=i pdb! '
155 'object_info_string_level=i pdb! '
156 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
156 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
157 'quick screen_length|sl=i prompts_pad_left=i '
157 'quick screen_length|sl=i prompts_pad_left=i '
158 'logfile|lf=s logplay|lp=s profile|p=s '
158 'logfile|lf=s logplay|lp=s profile|p=s '
159 'readline! readline_merge_completions! '
159 'readline! readline_merge_completions! '
160 'readline_omit__names! '
160 'readline_omit__names! '
161 'rcfile=s separate_in|si=s separate_out|so=s '
161 'rcfile=s separate_in|si=s separate_out|so=s '
162 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
162 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
163 'magic_docstrings system_verbose! '
163 'magic_docstrings system_verbose! '
164 'multi_line_specials! '
164 'multi_line_specials! '
165 'wxversion=s '
165 'wxversion=s '
166 'autoedit_syntax!')
166 'autoedit_syntax!')
167
167
168 # Options that can *only* appear at the cmd line (not in rcfiles).
168 # Options that can *only* appear at the cmd line (not in rcfiles).
169
169
170 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
170 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
171 # the 'C-c !' command in emacs automatically appends a -i option at the end.
171 # the 'C-c !' command in emacs automatically appends a -i option at the end.
172 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
172 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
173 'gthread! qthread! wthread! pylab! tk!')
173 'gthread! qthread! wthread! pylab! tk!')
174
174
175 # Build the actual name list to be used by DPyGetOpt
175 # Build the actual name list to be used by DPyGetOpt
176 opts_names = qw(cmdline_opts) + qw(cmdline_only)
176 opts_names = qw(cmdline_opts) + qw(cmdline_only)
177
177
178 # Set sensible command line defaults.
178 # Set sensible command line defaults.
179 # This should have everything from cmdline_opts and cmdline_only
179 # This should have everything from cmdline_opts and cmdline_only
180 opts_def = Struct(autocall = 1,
180 opts_def = Struct(autocall = 1,
181 autoedit_syntax = 0,
181 autoedit_syntax = 0,
182 autoindent = 0,
182 autoindent = 0,
183 automagic = 1,
183 automagic = 1,
184 banner = 1,
184 banner = 1,
185 cache_size = 1000,
185 cache_size = 1000,
186 c = '',
186 c = '',
187 classic = 0,
187 classic = 0,
188 colors = 'NoColor',
188 colors = 'NoColor',
189 color_info = 0,
189 color_info = 0,
190 confirm_exit = 1,
190 confirm_exit = 1,
191 debug = 0,
191 debug = 0,
192 deep_reload = 0,
192 deep_reload = 0,
193 editor = '0',
193 editor = '0',
194 help = 0,
194 help = 0,
195 ignore = 0,
195 ignore = 0,
196 ipythondir = ipythondir_def,
196 ipythondir = ipythondir_def,
197 log = 0,
197 log = 0,
198 logfile = '',
198 logfile = '',
199 logplay = '',
199 logplay = '',
200 multi_line_specials = 1,
200 multi_line_specials = 1,
201 messages = 1,
201 messages = 1,
202 object_info_string_level = 0,
202 object_info_string_level = 0,
203 nosep = 0,
203 nosep = 0,
204 pdb = 0,
204 pdb = 0,
205 pprint = 0,
205 pprint = 0,
206 profile = '',
206 profile = '',
207 prompt_in1 = 'In [\\#]: ',
207 prompt_in1 = 'In [\\#]: ',
208 prompt_in2 = ' .\\D.: ',
208 prompt_in2 = ' .\\D.: ',
209 prompt_out = 'Out[\\#]: ',
209 prompt_out = 'Out[\\#]: ',
210 prompts_pad_left = 1,
210 prompts_pad_left = 1,
211 quiet = 0,
211 quick = 0,
212 quick = 0,
212 readline = 1,
213 readline = 1,
213 readline_merge_completions = 1,
214 readline_merge_completions = 1,
214 readline_omit__names = 0,
215 readline_omit__names = 0,
215 rcfile = 'ipythonrc' + rc_suffix,
216 rcfile = 'ipythonrc' + rc_suffix,
216 screen_length = 0,
217 screen_length = 0,
217 separate_in = '\n',
218 separate_in = '\n',
218 separate_out = '\n',
219 separate_out = '\n',
219 separate_out2 = '',
220 separate_out2 = '',
220 system_verbose = 0,
221 system_verbose = 0,
221 gthread = 0,
222 gthread = 0,
222 qthread = 0,
223 qthread = 0,
223 wthread = 0,
224 wthread = 0,
224 pylab = 0,
225 pylab = 0,
225 tk = 0,
226 tk = 0,
226 upgrade = 0,
227 upgrade = 0,
227 Version = 0,
228 Version = 0,
228 xmode = 'Verbose',
229 xmode = 'Verbose',
229 wildcards_case_sensitive = 1,
230 wildcards_case_sensitive = 1,
230 wxversion = '0',
231 wxversion = '0',
231 magic_docstrings = 0, # undocumented, for doc generation
232 magic_docstrings = 0, # undocumented, for doc generation
232 )
233 )
233
234
234 # Things that will *only* appear in rcfiles (not at the command line).
235 # Things that will *only* appear in rcfiles (not at the command line).
235 # Make sure there's a space before each end of line (they get auto-joined!)
236 # Make sure there's a space before each end of line (they get auto-joined!)
236 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
237 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
237 qw_lol: 'import_some ',
238 qw_lol: 'import_some ',
238 # for things with embedded whitespace:
239 # for things with embedded whitespace:
239 list_strings:'execute alias readline_parse_and_bind ',
240 list_strings:'execute alias readline_parse_and_bind ',
240 # Regular strings need no conversion:
241 # Regular strings need no conversion:
241 None:'readline_remove_delims ',
242 None:'readline_remove_delims ',
242 }
243 }
243 # Default values for these
244 # Default values for these
244 rc_def = Struct(include = [],
245 rc_def = Struct(include = [],
245 import_mod = [],
246 import_mod = [],
246 import_all = [],
247 import_all = [],
247 import_some = [[]],
248 import_some = [[]],
248 execute = [],
249 execute = [],
249 execfile = [],
250 execfile = [],
250 alias = [],
251 alias = [],
251 readline_parse_and_bind = [],
252 readline_parse_and_bind = [],
252 readline_remove_delims = '',
253 readline_remove_delims = '',
253 )
254 )
254
255
255 # Build the type conversion dictionary from the above tables:
256 # Build the type conversion dictionary from the above tables:
256 typeconv = rcfile_opts.copy()
257 typeconv = rcfile_opts.copy()
257 typeconv.update(optstr2types(cmdline_opts))
258 typeconv.update(optstr2types(cmdline_opts))
258
259
259 # FIXME: the None key appears in both, put that back together by hand. Ugly!
260 # FIXME: the None key appears in both, put that back together by hand. Ugly!
260 typeconv[None] += ' ' + rcfile_opts[None]
261 typeconv[None] += ' ' + rcfile_opts[None]
261
262
262 # Remove quotes at ends of all strings (used to protect spaces)
263 # Remove quotes at ends of all strings (used to protect spaces)
263 typeconv[unquote_ends] = typeconv[None]
264 typeconv[unquote_ends] = typeconv[None]
264 del typeconv[None]
265 del typeconv[None]
265
266
266 # Build the list we'll use to make all config decisions with defaults:
267 # Build the list we'll use to make all config decisions with defaults:
267 opts_all = opts_def.copy()
268 opts_all = opts_def.copy()
268 opts_all.update(rc_def)
269 opts_all.update(rc_def)
269
270
270 # Build conflict resolver for recursive loading of config files:
271 # Build conflict resolver for recursive loading of config files:
271 # - preserve means the outermost file maintains the value, it is not
272 # - preserve means the outermost file maintains the value, it is not
272 # overwritten if an included file has the same key.
273 # overwritten if an included file has the same key.
273 # - add_flip applies + to the two values, so it better make sense to add
274 # - add_flip applies + to the two values, so it better make sense to add
274 # those types of keys. But it flips them first so that things loaded
275 # those types of keys. But it flips them first so that things loaded
275 # deeper in the inclusion chain have lower precedence.
276 # deeper in the inclusion chain have lower precedence.
276 conflict = {'preserve': ' '.join([ typeconv[int],
277 conflict = {'preserve': ' '.join([ typeconv[int],
277 typeconv[unquote_ends] ]),
278 typeconv[unquote_ends] ]),
278 'add_flip': ' '.join([ typeconv[qwflat],
279 'add_flip': ' '.join([ typeconv[qwflat],
279 typeconv[qw_lol],
280 typeconv[qw_lol],
280 typeconv[list_strings] ])
281 typeconv[list_strings] ])
281 }
282 }
282
283
283 # Now actually process the command line
284 # Now actually process the command line
284 getopt = DPyGetOpt.DPyGetOpt()
285 getopt = DPyGetOpt.DPyGetOpt()
285 getopt.setIgnoreCase(0)
286 getopt.setIgnoreCase(0)
286
287
287 getopt.parseConfiguration(opts_names)
288 getopt.parseConfiguration(opts_names)
288
289
289 try:
290 try:
290 getopt.processArguments(argv)
291 getopt.processArguments(argv)
291 except:
292 except:
292 print cmd_line_usage
293 print cmd_line_usage
293 warn('\nError in Arguments: ' + `sys.exc_value`)
294 warn('\nError in Arguments: ' + `sys.exc_value`)
294 sys.exit(1)
295 sys.exit(1)
295
296
296 # convert the options dict to a struct for much lighter syntax later
297 # convert the options dict to a struct for much lighter syntax later
297 opts = Struct(getopt.optionValues)
298 opts = Struct(getopt.optionValues)
298 args = getopt.freeValues
299 args = getopt.freeValues
299
300
300 # this is the struct (which has default values at this point) with which
301 # this is the struct (which has default values at this point) with which
301 # we make all decisions:
302 # we make all decisions:
302 opts_all.update(opts)
303 opts_all.update(opts)
303
304
304 # Options that force an immediate exit
305 # Options that force an immediate exit
305 if opts_all.help:
306 if opts_all.help:
306 page(cmd_line_usage)
307 page(cmd_line_usage)
307 sys.exit()
308 sys.exit()
308
309
309 if opts_all.Version:
310 if opts_all.Version:
310 print __version__
311 print __version__
311 sys.exit()
312 sys.exit()
312
313
313 if opts_all.magic_docstrings:
314 if opts_all.magic_docstrings:
314 IP.magic_magic('-latex')
315 IP.magic_magic('-latex')
315 sys.exit()
316 sys.exit()
316
317
317 # add personal ipythondir to sys.path so that users can put things in
318 # add personal ipythondir to sys.path so that users can put things in
318 # there for customization
319 # there for customization
319 sys.path.append(os.path.abspath(opts_all.ipythondir))
320 sys.path.append(os.path.abspath(opts_all.ipythondir))
320
321
321 # Create user config directory if it doesn't exist. This must be done
322 # Create user config directory if it doesn't exist. This must be done
322 # *after* getting the cmd line options.
323 # *after* getting the cmd line options.
323 if not os.path.isdir(opts_all.ipythondir):
324 if not os.path.isdir(opts_all.ipythondir):
324 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
325 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
325
326
326 # upgrade user config files while preserving a copy of the originals
327 # upgrade user config files while preserving a copy of the originals
327 if opts_all.upgrade:
328 if opts_all.upgrade:
328 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
329 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
329
330
330 # check mutually exclusive options in the *original* command line
331 # check mutually exclusive options in the *original* command line
331 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
332 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
332 qw('classic profile'),qw('classic rcfile')])
333 qw('classic profile'),qw('classic rcfile')])
333
334
334 #---------------------------------------------------------------------------
335 #---------------------------------------------------------------------------
335 # Log replay
336 # Log replay
336
337
337 # if -logplay, we need to 'become' the other session. That basically means
338 # if -logplay, we need to 'become' the other session. That basically means
338 # replacing the current command line environment with that of the old
339 # replacing the current command line environment with that of the old
339 # session and moving on.
340 # session and moving on.
340
341
341 # this is needed so that later we know we're in session reload mode, as
342 # this is needed so that later we know we're in session reload mode, as
342 # opts_all will get overwritten:
343 # opts_all will get overwritten:
343 load_logplay = 0
344 load_logplay = 0
344
345
345 if opts_all.logplay:
346 if opts_all.logplay:
346 load_logplay = opts_all.logplay
347 load_logplay = opts_all.logplay
347 opts_debug_save = opts_all.debug
348 opts_debug_save = opts_all.debug
348 try:
349 try:
349 logplay = open(opts_all.logplay)
350 logplay = open(opts_all.logplay)
350 except IOError:
351 except IOError:
351 if opts_all.debug: IP.InteractiveTB()
352 if opts_all.debug: IP.InteractiveTB()
352 warn('Could not open logplay file '+`opts_all.logplay`)
353 warn('Could not open logplay file '+`opts_all.logplay`)
353 # restore state as if nothing had happened and move on, but make
354 # restore state as if nothing had happened and move on, but make
354 # sure that later we don't try to actually load the session file
355 # sure that later we don't try to actually load the session file
355 logplay = None
356 logplay = None
356 load_logplay = 0
357 load_logplay = 0
357 del opts_all.logplay
358 del opts_all.logplay
358 else:
359 else:
359 try:
360 try:
360 logplay.readline()
361 logplay.readline()
361 logplay.readline();
362 logplay.readline();
362 # this reloads that session's command line
363 # this reloads that session's command line
363 cmd = logplay.readline()[6:]
364 cmd = logplay.readline()[6:]
364 exec cmd
365 exec cmd
365 # restore the true debug flag given so that the process of
366 # restore the true debug flag given so that the process of
366 # session loading itself can be monitored.
367 # session loading itself can be monitored.
367 opts.debug = opts_debug_save
368 opts.debug = opts_debug_save
368 # save the logplay flag so later we don't overwrite the log
369 # save the logplay flag so later we don't overwrite the log
369 opts.logplay = load_logplay
370 opts.logplay = load_logplay
370 # now we must update our own structure with defaults
371 # now we must update our own structure with defaults
371 opts_all.update(opts)
372 opts_all.update(opts)
372 # now load args
373 # now load args
373 cmd = logplay.readline()[6:]
374 cmd = logplay.readline()[6:]
374 exec cmd
375 exec cmd
375 logplay.close()
376 logplay.close()
376 except:
377 except:
377 logplay.close()
378 logplay.close()
378 if opts_all.debug: IP.InteractiveTB()
379 if opts_all.debug: IP.InteractiveTB()
379 warn("Logplay file lacking full configuration information.\n"
380 warn("Logplay file lacking full configuration information.\n"
380 "I'll try to read it, but some things may not work.")
381 "I'll try to read it, but some things may not work.")
381
382
382 #-------------------------------------------------------------------------
383 #-------------------------------------------------------------------------
383 # set up output traps: catch all output from files, being run, modules
384 # set up output traps: catch all output from files, being run, modules
384 # loaded, etc. Then give it to the user in a clean form at the end.
385 # loaded, etc. Then give it to the user in a clean form at the end.
385
386
386 msg_out = 'Output messages. '
387 msg_out = 'Output messages. '
387 msg_err = 'Error messages. '
388 msg_err = 'Error messages. '
388 msg_sep = '\n'
389 msg_sep = '\n'
389 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
390 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
390 msg_err,msg_sep,debug,
391 msg_err,msg_sep,debug,
391 quiet_out=1),
392 quiet_out=1),
392 user_exec = OutputTrap('User File Execution',msg_out,
393 user_exec = OutputTrap('User File Execution',msg_out,
393 msg_err,msg_sep,debug),
394 msg_err,msg_sep,debug),
394 logplay = OutputTrap('Log Loader',msg_out,
395 logplay = OutputTrap('Log Loader',msg_out,
395 msg_err,msg_sep,debug),
396 msg_err,msg_sep,debug),
396 summary = ''
397 summary = ''
397 )
398 )
398
399
399 #-------------------------------------------------------------------------
400 #-------------------------------------------------------------------------
400 # Process user ipythonrc-type configuration files
401 # Process user ipythonrc-type configuration files
401
402
402 # turn on output trapping and log to msg.config
403 # turn on output trapping and log to msg.config
403 # remember that with debug on, trapping is actually disabled
404 # remember that with debug on, trapping is actually disabled
404 msg.config.trap_all()
405 msg.config.trap_all()
405
406
406 # look for rcfile in current or default directory
407 # look for rcfile in current or default directory
407 try:
408 try:
408 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
409 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
409 except IOError:
410 except IOError:
410 if opts_all.debug: IP.InteractiveTB()
411 if opts_all.debug: IP.InteractiveTB()
411 warn('Configuration file %s not found. Ignoring request.'
412 warn('Configuration file %s not found. Ignoring request.'
412 % (opts_all.rcfile) )
413 % (opts_all.rcfile) )
413
414
414 # 'profiles' are a shorthand notation for config filenames
415 # 'profiles' are a shorthand notation for config filenames
415 if opts_all.profile:
416 if opts_all.profile:
416
417
417 try:
418 try:
418 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
419 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
419 + rc_suffix,
420 + rc_suffix,
420 opts_all.ipythondir)
421 opts_all.ipythondir)
421 except IOError:
422 except IOError:
422 if opts_all.debug: IP.InteractiveTB()
423 if opts_all.debug: IP.InteractiveTB()
423 opts.profile = '' # remove profile from options if invalid
424 opts.profile = '' # remove profile from options if invalid
424 # We won't warn anymore, primary method is ipy_profile_PROFNAME
425 # We won't warn anymore, primary method is ipy_profile_PROFNAME
425 # which does trigger a warning.
426 # which does trigger a warning.
426
427
427 # load the config file
428 # load the config file
428 rcfiledata = None
429 rcfiledata = None
429 if opts_all.quick:
430 if opts_all.quick:
430 print 'Launching IPython in quick mode. No config file read.'
431 print 'Launching IPython in quick mode. No config file read.'
431 elif opts_all.classic:
432 elif opts_all.classic:
432 print 'Launching IPython in classic mode. No config file read.'
433 print 'Launching IPython in classic mode. No config file read.'
433 elif opts_all.rcfile:
434 elif opts_all.rcfile:
434 try:
435 try:
435 cfg_loader = ConfigLoader(conflict)
436 cfg_loader = ConfigLoader(conflict)
436 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
437 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
437 'include',opts_all.ipythondir,
438 'include',opts_all.ipythondir,
438 purge = 1,
439 purge = 1,
439 unique = conflict['preserve'])
440 unique = conflict['preserve'])
440 except:
441 except:
441 IP.InteractiveTB()
442 IP.InteractiveTB()
442 warn('Problems loading configuration file '+
443 warn('Problems loading configuration file '+
443 `opts_all.rcfile`+
444 `opts_all.rcfile`+
444 '\nStarting with default -bare bones- configuration.')
445 '\nStarting with default -bare bones- configuration.')
445 else:
446 else:
446 warn('No valid configuration file found in either currrent directory\n'+
447 warn('No valid configuration file found in either currrent directory\n'+
447 'or in the IPython config. directory: '+`opts_all.ipythondir`+
448 'or in the IPython config. directory: '+`opts_all.ipythondir`+
448 '\nProceeding with internal defaults.')
449 '\nProceeding with internal defaults.')
449
450
450 #------------------------------------------------------------------------
451 #------------------------------------------------------------------------
451 # Set exception handlers in mode requested by user.
452 # Set exception handlers in mode requested by user.
452 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
453 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
453 IP.magic_xmode(opts_all.xmode)
454 IP.magic_xmode(opts_all.xmode)
454 otrap.release_out()
455 otrap.release_out()
455
456
456 #------------------------------------------------------------------------
457 #------------------------------------------------------------------------
457 # Execute user config
458 # Execute user config
458
459
459 # Create a valid config structure with the right precedence order:
460 # Create a valid config structure with the right precedence order:
460 # defaults < rcfile < command line. This needs to be in the instance, so
461 # defaults < rcfile < command line. This needs to be in the instance, so
461 # that method calls below that rely on it find it.
462 # that method calls below that rely on it find it.
462 IP.rc = rc_def.copy()
463 IP.rc = rc_def.copy()
463
464
464 # Work with a local alias inside this routine to avoid unnecessary
465 # Work with a local alias inside this routine to avoid unnecessary
465 # attribute lookups.
466 # attribute lookups.
466 IP_rc = IP.rc
467 IP_rc = IP.rc
467
468
468 IP_rc.update(opts_def)
469 IP_rc.update(opts_def)
469 if rcfiledata:
470 if rcfiledata:
470 # now we can update
471 # now we can update
471 IP_rc.update(rcfiledata)
472 IP_rc.update(rcfiledata)
472 IP_rc.update(opts)
473 IP_rc.update(opts)
473 IP_rc.update(rc_override)
474 IP_rc.update(rc_override)
474
475
475 # Store the original cmd line for reference:
476 # Store the original cmd line for reference:
476 IP_rc.opts = opts
477 IP_rc.opts = opts
477 IP_rc.args = args
478 IP_rc.args = args
478
479
479 # create a *runtime* Struct like rc for holding parameters which may be
480 # create a *runtime* Struct like rc for holding parameters which may be
480 # created and/or modified by runtime user extensions.
481 # created and/or modified by runtime user extensions.
481 IP.runtime_rc = Struct()
482 IP.runtime_rc = Struct()
482
483
483 # from this point on, all config should be handled through IP_rc,
484 # from this point on, all config should be handled through IP_rc,
484 # opts* shouldn't be used anymore.
485 # opts* shouldn't be used anymore.
485
486
486
487
487 # update IP_rc with some special things that need manual
488 # update IP_rc with some special things that need manual
488 # tweaks. Basically options which affect other options. I guess this
489 # tweaks. Basically options which affect other options. I guess this
489 # should just be written so that options are fully orthogonal and we
490 # should just be written so that options are fully orthogonal and we
490 # wouldn't worry about this stuff!
491 # wouldn't worry about this stuff!
491
492
492 if IP_rc.classic:
493 if IP_rc.classic:
493 IP_rc.quick = 1
494 IP_rc.quick = 1
494 IP_rc.cache_size = 0
495 IP_rc.cache_size = 0
495 IP_rc.pprint = 0
496 IP_rc.pprint = 0
496 IP_rc.prompt_in1 = '>>> '
497 IP_rc.prompt_in1 = '>>> '
497 IP_rc.prompt_in2 = '... '
498 IP_rc.prompt_in2 = '... '
498 IP_rc.prompt_out = ''
499 IP_rc.prompt_out = ''
499 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
500 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
500 IP_rc.colors = 'NoColor'
501 IP_rc.colors = 'NoColor'
501 IP_rc.xmode = 'Plain'
502 IP_rc.xmode = 'Plain'
502
503
503 IP.pre_config_initialization()
504 IP.pre_config_initialization()
504 # configure readline
505 # configure readline
505 # Define the history file for saving commands in between sessions
506 # Define the history file for saving commands in between sessions
506 if IP_rc.profile:
507 if IP_rc.profile:
507 histfname = 'history-%s' % IP_rc.profile
508 histfname = 'history-%s' % IP_rc.profile
508 else:
509 else:
509 histfname = 'history'
510 histfname = 'history'
510 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
511 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
511
512
512 # update exception handlers with rc file status
513 # update exception handlers with rc file status
513 otrap.trap_out() # I don't want these messages ever.
514 otrap.trap_out() # I don't want these messages ever.
514 IP.magic_xmode(IP_rc.xmode)
515 IP.magic_xmode(IP_rc.xmode)
515 otrap.release_out()
516 otrap.release_out()
516
517
517 # activate logging if requested and not reloading a log
518 # activate logging if requested and not reloading a log
518 if IP_rc.logplay:
519 if IP_rc.logplay:
519 IP.magic_logstart(IP_rc.logplay + ' append')
520 IP.magic_logstart(IP_rc.logplay + ' append')
520 elif IP_rc.logfile:
521 elif IP_rc.logfile:
521 IP.magic_logstart(IP_rc.logfile)
522 IP.magic_logstart(IP_rc.logfile)
522 elif IP_rc.log:
523 elif IP_rc.log:
523 IP.magic_logstart()
524 IP.magic_logstart()
524
525
525 # find user editor so that it we don't have to look it up constantly
526 # find user editor so that it we don't have to look it up constantly
526 if IP_rc.editor.strip()=='0':
527 if IP_rc.editor.strip()=='0':
527 try:
528 try:
528 ed = os.environ['EDITOR']
529 ed = os.environ['EDITOR']
529 except KeyError:
530 except KeyError:
530 if os.name == 'posix':
531 if os.name == 'posix':
531 ed = 'vi' # the only one guaranteed to be there!
532 ed = 'vi' # the only one guaranteed to be there!
532 else:
533 else:
533 ed = 'notepad' # same in Windows!
534 ed = 'notepad' # same in Windows!
534 IP_rc.editor = ed
535 IP_rc.editor = ed
535
536
536 # Keep track of whether this is an embedded instance or not (useful for
537 # Keep track of whether this is an embedded instance or not (useful for
537 # post-mortems).
538 # post-mortems).
538 IP_rc.embedded = IP.embedded
539 IP_rc.embedded = IP.embedded
539
540
540 # Recursive reload
541 # Recursive reload
541 try:
542 try:
542 from IPython import deep_reload
543 from IPython import deep_reload
543 if IP_rc.deep_reload:
544 if IP_rc.deep_reload:
544 __builtin__.reload = deep_reload.reload
545 __builtin__.reload = deep_reload.reload
545 else:
546 else:
546 __builtin__.dreload = deep_reload.reload
547 __builtin__.dreload = deep_reload.reload
547 del deep_reload
548 del deep_reload
548 except ImportError:
549 except ImportError:
549 pass
550 pass
550
551
551 # Save the current state of our namespace so that the interactive shell
552 # Save the current state of our namespace so that the interactive shell
552 # can later know which variables have been created by us from config files
553 # can later know which variables have been created by us from config files
553 # and loading. This way, loading a file (in any way) is treated just like
554 # and loading. This way, loading a file (in any way) is treated just like
554 # defining things on the command line, and %who works as expected.
555 # defining things on the command line, and %who works as expected.
555
556
556 # DON'T do anything that affects the namespace beyond this point!
557 # DON'T do anything that affects the namespace beyond this point!
557 IP.internal_ns.update(__main__.__dict__)
558 IP.internal_ns.update(__main__.__dict__)
558
559
559 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
560 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
560
561
561 # Now run through the different sections of the users's config
562 # Now run through the different sections of the users's config
562 if IP_rc.debug:
563 if IP_rc.debug:
563 print 'Trying to execute the following configuration structure:'
564 print 'Trying to execute the following configuration structure:'
564 print '(Things listed first are deeper in the inclusion tree and get'
565 print '(Things listed first are deeper in the inclusion tree and get'
565 print 'loaded first).\n'
566 print 'loaded first).\n'
566 pprint(IP_rc.__dict__)
567 pprint(IP_rc.__dict__)
567
568
568 for mod in IP_rc.import_mod:
569 for mod in IP_rc.import_mod:
569 try:
570 try:
570 exec 'import '+mod in IP.user_ns
571 exec 'import '+mod in IP.user_ns
571 except :
572 except :
572 IP.InteractiveTB()
573 IP.InteractiveTB()
573 import_fail_info(mod)
574 import_fail_info(mod)
574
575
575 for mod_fn in IP_rc.import_some:
576 for mod_fn in IP_rc.import_some:
576 if mod_fn == []: break
577 if mod_fn == []: break
577 mod,fn = mod_fn[0],','.join(mod_fn[1:])
578 mod,fn = mod_fn[0],','.join(mod_fn[1:])
578 try:
579 try:
579 exec 'from '+mod+' import '+fn in IP.user_ns
580 exec 'from '+mod+' import '+fn in IP.user_ns
580 except :
581 except :
581 IP.InteractiveTB()
582 IP.InteractiveTB()
582 import_fail_info(mod,fn)
583 import_fail_info(mod,fn)
583
584
584 for mod in IP_rc.import_all:
585 for mod in IP_rc.import_all:
585 try:
586 try:
586 exec 'from '+mod+' import *' in IP.user_ns
587 exec 'from '+mod+' import *' in IP.user_ns
587 except :
588 except :
588 IP.InteractiveTB()
589 IP.InteractiveTB()
589 import_fail_info(mod)
590 import_fail_info(mod)
590
591
591 for code in IP_rc.execute:
592 for code in IP_rc.execute:
592 try:
593 try:
593 exec code in IP.user_ns
594 exec code in IP.user_ns
594 except:
595 except:
595 IP.InteractiveTB()
596 IP.InteractiveTB()
596 warn('Failure executing code: ' + `code`)
597 warn('Failure executing code: ' + `code`)
597
598
598 # Execute the files the user wants in ipythonrc
599 # Execute the files the user wants in ipythonrc
599 for file in IP_rc.execfile:
600 for file in IP_rc.execfile:
600 try:
601 try:
601 file = filefind(file,sys.path+[IPython_dir])
602 file = filefind(file,sys.path+[IPython_dir])
602 except IOError:
603 except IOError:
603 warn(itpl('File $file not found. Skipping it.'))
604 warn(itpl('File $file not found. Skipping it.'))
604 else:
605 else:
605 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
606 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
606
607
607 # finally, try importing ipy_*_conf for final configuration
608 # finally, try importing ipy_*_conf for final configuration
608 try:
609 try:
609 import ipy_system_conf
610 import ipy_system_conf
610 except ImportError:
611 except ImportError:
611 if opts_all.debug: IP.InteractiveTB()
612 if opts_all.debug: IP.InteractiveTB()
612 warn("Could not import 'ipy_system_conf'")
613 warn("Could not import 'ipy_system_conf'")
613 except:
614 except:
614 IP.InteractiveTB()
615 IP.InteractiveTB()
615 import_fail_info('ipy_system_conf')
616 import_fail_info('ipy_system_conf')
616
617
617 if opts_all.profile:
618 if opts_all.profile:
618 profmodname = 'ipy_profile_' + opts_all.profile
619 profmodname = 'ipy_profile_' + opts_all.profile
619 try:
620 try:
620 __import__(profmodname)
621 __import__(profmodname)
621 except ImportError:
622 except ImportError:
622 # only warn if ipythonrc-PROFNAME didn't exist
623 # only warn if ipythonrc-PROFNAME didn't exist
623 if opts.profile =='':
624 if opts.profile =='':
624 warn("Could not start with profile '%s'!\n"
625 warn("Could not start with profile '%s'!\n"
625 "('%s/%s.py' does not exist? run '%%upgrade')" %
626 "('%s/%s.py' does not exist? run '%%upgrade')" %
626 (opts_all.profile, opts_all.ipythondir, profmodname) )
627 (opts_all.profile, opts_all.ipythondir, profmodname) )
627 except:
628 except:
628 print "Error importing",profmodname
629 print "Error importing",profmodname
629 IP.InteractiveTB()
630 IP.InteractiveTB()
630 import_fail_info(profmodname)
631 import_fail_info(profmodname)
631
632
632 try:
633 try:
633 import ipy_user_conf
634 import ipy_user_conf
634 except ImportError:
635 except ImportError:
635 if opts_all.debug: IP.InteractiveTB()
636 if opts_all.debug: IP.InteractiveTB()
636 warn("Could not import user config!\n "
637 warn("Could not import user config!\n "
637 "('%s/ipy_user_conf.py' does not exist? Please run '%%upgrade')\n"
638 "('%s/ipy_user_conf.py' does not exist? Please run '%%upgrade')\n"
638 % opts_all.ipythondir)
639 % opts_all.ipythondir)
639 except:
640 except:
640 print "Error importing ipy_user_conf"
641 print "Error importing ipy_user_conf"
641 IP.InteractiveTB()
642 IP.InteractiveTB()
642 import_fail_info("ipy_user_conf")
643 import_fail_info("ipy_user_conf")
643
644
644 # release stdout and stderr and save config log into a global summary
645 # release stdout and stderr and save config log into a global summary
645 msg.config.release_all()
646 msg.config.release_all()
646 if IP_rc.messages:
647 if IP_rc.messages:
647 msg.summary += msg.config.summary_all()
648 msg.summary += msg.config.summary_all()
648
649
649 #------------------------------------------------------------------------
650 #------------------------------------------------------------------------
650 # Setup interactive session
651 # Setup interactive session
651
652
652 # Now we should be fully configured. We can then execute files or load
653 # Now we should be fully configured. We can then execute files or load
653 # things only needed for interactive use. Then we'll open the shell.
654 # things only needed for interactive use. Then we'll open the shell.
654
655
655 # Take a snapshot of the user namespace before opening the shell. That way
656 # Take a snapshot of the user namespace before opening the shell. That way
656 # we'll be able to identify which things were interactively defined and
657 # we'll be able to identify which things were interactively defined and
657 # which were defined through config files.
658 # which were defined through config files.
658 IP.user_config_ns = IP.user_ns.copy()
659 IP.user_config_ns = IP.user_ns.copy()
659
660
660 # Force reading a file as if it were a session log. Slower but safer.
661 # Force reading a file as if it were a session log. Slower but safer.
661 if load_logplay:
662 if load_logplay:
662 print 'Replaying log...'
663 print 'Replaying log...'
663 try:
664 try:
664 if IP_rc.debug:
665 if IP_rc.debug:
665 logplay_quiet = 0
666 logplay_quiet = 0
666 else:
667 else:
667 logplay_quiet = 1
668 logplay_quiet = 1
668
669
669 msg.logplay.trap_all()
670 msg.logplay.trap_all()
670 IP.safe_execfile(load_logplay,IP.user_ns,
671 IP.safe_execfile(load_logplay,IP.user_ns,
671 islog = 1, quiet = logplay_quiet)
672 islog = 1, quiet = logplay_quiet)
672 msg.logplay.release_all()
673 msg.logplay.release_all()
673 if IP_rc.messages:
674 if IP_rc.messages:
674 msg.summary += msg.logplay.summary_all()
675 msg.summary += msg.logplay.summary_all()
675 except:
676 except:
676 warn('Problems replaying logfile %s.' % load_logplay)
677 warn('Problems replaying logfile %s.' % load_logplay)
677 IP.InteractiveTB()
678 IP.InteractiveTB()
678
679
679 # Load remaining files in command line
680 # Load remaining files in command line
680 msg.user_exec.trap_all()
681 msg.user_exec.trap_all()
681
682
682 # Do NOT execute files named in the command line as scripts to be loaded
683 # Do NOT execute files named in the command line as scripts to be loaded
683 # by embedded instances. Doing so has the potential for an infinite
684 # by embedded instances. Doing so has the potential for an infinite
684 # recursion if there are exceptions thrown in the process.
685 # recursion if there are exceptions thrown in the process.
685
686
686 # XXX FIXME: the execution of user files should be moved out to after
687 # XXX FIXME: the execution of user files should be moved out to after
687 # ipython is fully initialized, just as if they were run via %run at the
688 # ipython is fully initialized, just as if they were run via %run at the
688 # ipython prompt. This would also give them the benefit of ipython's
689 # ipython prompt. This would also give them the benefit of ipython's
689 # nice tracebacks.
690 # nice tracebacks.
690
691
691 if (not embedded and IP_rc.args and
692 if (not embedded and IP_rc.args and
692 not IP_rc.args[0].lower().endswith('.ipy')):
693 not IP_rc.args[0].lower().endswith('.ipy')):
693 name_save = IP.user_ns['__name__']
694 name_save = IP.user_ns['__name__']
694 IP.user_ns['__name__'] = '__main__'
695 IP.user_ns['__name__'] = '__main__'
695 # Set our own excepthook in case the user code tries to call it
696 # Set our own excepthook in case the user code tries to call it
696 # directly. This prevents triggering the IPython crash handler.
697 # directly. This prevents triggering the IPython crash handler.
697 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
698 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
698
699
699 save_argv = sys.argv[1:] # save it for later restoring
700 save_argv = sys.argv[1:] # save it for later restoring
700
701
701 sys.argv = args
702 sys.argv = args
702
703
703 try:
704 try:
704 IP.safe_execfile(args[0], IP.user_ns)
705 IP.safe_execfile(args[0], IP.user_ns)
705 finally:
706 finally:
706 # Reset our crash handler in place
707 # Reset our crash handler in place
707 sys.excepthook = old_excepthook
708 sys.excepthook = old_excepthook
708 sys.argv[:] = save_argv
709 sys.argv[:] = save_argv
709 IP.user_ns['__name__'] = name_save
710 IP.user_ns['__name__'] = name_save
710
711
711 msg.user_exec.release_all()
712 msg.user_exec.release_all()
712
713
713 if IP_rc.messages:
714 if IP_rc.messages:
714 msg.summary += msg.user_exec.summary_all()
715 msg.summary += msg.user_exec.summary_all()
715
716
716 # since we can't specify a null string on the cmd line, 0 is the equivalent:
717 # since we can't specify a null string on the cmd line, 0 is the equivalent:
717 if IP_rc.nosep:
718 if IP_rc.nosep:
718 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
719 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
719 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
720 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
720 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
721 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
721 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
722 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
722 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
723 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
723 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
724 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
724 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
725 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
725
726
726 # Determine how many lines at the bottom of the screen are needed for
727 # Determine how many lines at the bottom of the screen are needed for
727 # showing prompts, so we can know wheter long strings are to be printed or
728 # showing prompts, so we can know wheter long strings are to be printed or
728 # paged:
729 # paged:
729 num_lines_bot = IP_rc.separate_in.count('\n')+1
730 num_lines_bot = IP_rc.separate_in.count('\n')+1
730 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
731 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
731
732
732 # configure startup banner
733 # configure startup banner
733 if IP_rc.c: # regular python doesn't print the banner with -c
734 if IP_rc.c: # regular python doesn't print the banner with -c
734 IP_rc.banner = 0
735 IP_rc.banner = 0
735 if IP_rc.banner:
736 if IP_rc.banner:
736 BANN_P = IP.BANNER_PARTS
737 BANN_P = IP.BANNER_PARTS
737 else:
738 else:
738 BANN_P = []
739 BANN_P = []
739
740
740 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
741 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
741
742
742 # add message log (possibly empty)
743 # add message log (possibly empty)
743 if msg.summary: BANN_P.append(msg.summary)
744 if msg.summary: BANN_P.append(msg.summary)
744 # Final banner is a string
745 # Final banner is a string
745 IP.BANNER = '\n'.join(BANN_P)
746 IP.BANNER = '\n'.join(BANN_P)
746
747
747 # Finalize the IPython instance. This assumes the rc structure is fully
748 # Finalize the IPython instance. This assumes the rc structure is fully
748 # in place.
749 # in place.
749 IP.post_config_initialization()
750 IP.post_config_initialization()
750
751
751 return IP
752 return IP
752 #************************ end of file <ipmaker.py> **************************
753 #************************ end of file <ipmaker.py> **************************
@@ -1,5525 +1,5531 b''
1 2006-06-07 Ville Vainio <vivainio@gmail.com>
2
3 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
4 Confirmation prompts can be supressed by 'quiet' option.
5 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
6
1 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
7 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
2
8
3 * IPython/Release.py (version): Made 0.7.2 final for release.
9 * IPython/Release.py (version): Made 0.7.2 final for release.
4 Repo tagged and release cut.
10 Repo tagged and release cut.
5
11
6 2006-06-05 Ville Vainio <vivainio@gmail.com>
12 2006-06-05 Ville Vainio <vivainio@gmail.com>
7
13
8 * Magic.py (magic_rehashx): Honor no_alias list earlier in
14 * Magic.py (magic_rehashx): Honor no_alias list earlier in
9 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
15 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
10
16
11 * upgrade_dir.py: try import 'path' module a bit harder
17 * upgrade_dir.py: try import 'path' module a bit harder
12 (for %upgrade)A
18 (for %upgrade)
13
19
14 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
20 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
15
21
16 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
22 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
17 instead of looping 20 times.
23 instead of looping 20 times.
18
24
19 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
25 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
20 correctly at initialization time. Bug reported by Krishna Mohan
26 correctly at initialization time. Bug reported by Krishna Mohan
21 Gundu <gkmohan-AT-gmail.com> on the user list.
27 Gundu <gkmohan-AT-gmail.com> on the user list.
22
28
23 * IPython/Release.py (version): Mark 0.7.2 version to start
29 * IPython/Release.py (version): Mark 0.7.2 version to start
24 testing for release on 06/06.
30 testing for release on 06/06.
25
31
26 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
32 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
27
33
28 * scripts/irunner: thin script interface so users don't have to
34 * scripts/irunner: thin script interface so users don't have to
29 find the module and call it as an executable, since modules rarely
35 find the module and call it as an executable, since modules rarely
30 live in people's PATH.
36 live in people's PATH.
31
37
32 * IPython/irunner.py (InteractiveRunner.__init__): added
38 * IPython/irunner.py (InteractiveRunner.__init__): added
33 delaybeforesend attribute to control delays with newer versions of
39 delaybeforesend attribute to control delays with newer versions of
34 pexpect. Thanks to detailed help from pexpect's author, Noah
40 pexpect. Thanks to detailed help from pexpect's author, Noah
35 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
41 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
36 correctly (it works in NoColor mode).
42 correctly (it works in NoColor mode).
37
43
38 * IPython/iplib.py (handle_normal): fix nasty crash reported on
44 * IPython/iplib.py (handle_normal): fix nasty crash reported on
39 SAGE list, from improper log() calls.
45 SAGE list, from improper log() calls.
40
46
41 2006-05-31 Ville Vainio <vivainio@gmail.com>
47 2006-05-31 Ville Vainio <vivainio@gmail.com>
42
48
43 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
49 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
44 with args in parens to work correctly with dirs that have spaces.
50 with args in parens to work correctly with dirs that have spaces.
45
51
46 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
52 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
47
53
48 * IPython/Logger.py (Logger.logstart): add option to log raw input
54 * IPython/Logger.py (Logger.logstart): add option to log raw input
49 instead of the processed one. A -r flag was added to the
55 instead of the processed one. A -r flag was added to the
50 %logstart magic used for controlling logging.
56 %logstart magic used for controlling logging.
51
57
52 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
58 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
53
59
54 * IPython/iplib.py (InteractiveShell.__init__): add check for the
60 * IPython/iplib.py (InteractiveShell.__init__): add check for the
55 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
61 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
56 recognize the option. After a bug report by Will Maier. This
62 recognize the option. After a bug report by Will Maier. This
57 closes #64 (will do it after confirmation from W. Maier).
63 closes #64 (will do it after confirmation from W. Maier).
58
64
59 * IPython/irunner.py: New module to run scripts as if manually
65 * IPython/irunner.py: New module to run scripts as if manually
60 typed into an interactive environment, based on pexpect. After a
66 typed into an interactive environment, based on pexpect. After a
61 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
67 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
62 ipython-user list. Simple unittests in the tests/ directory.
68 ipython-user list. Simple unittests in the tests/ directory.
63
69
64 * tools/release: add Will Maier, OpenBSD port maintainer, to
70 * tools/release: add Will Maier, OpenBSD port maintainer, to
65 recepients list. We are now officially part of the OpenBSD ports:
71 recepients list. We are now officially part of the OpenBSD ports:
66 http://www.openbsd.org/ports.html ! Many thanks to Will for the
72 http://www.openbsd.org/ports.html ! Many thanks to Will for the
67 work.
73 work.
68
74
69 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
75 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
70
76
71 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
77 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
72 so that it doesn't break tkinter apps.
78 so that it doesn't break tkinter apps.
73
79
74 * IPython/iplib.py (_prefilter): fix bug where aliases would
80 * IPython/iplib.py (_prefilter): fix bug where aliases would
75 shadow variables when autocall was fully off. Reported by SAGE
81 shadow variables when autocall was fully off. Reported by SAGE
76 author William Stein.
82 author William Stein.
77
83
78 * IPython/OInspect.py (Inspector.__init__): add a flag to control
84 * IPython/OInspect.py (Inspector.__init__): add a flag to control
79 at what detail level strings are computed when foo? is requested.
85 at what detail level strings are computed when foo? is requested.
80 This allows users to ask for example that the string form of an
86 This allows users to ask for example that the string form of an
81 object is only computed when foo?? is called, or even never, by
87 object is only computed when foo?? is called, or even never, by
82 setting the object_info_string_level >= 2 in the configuration
88 setting the object_info_string_level >= 2 in the configuration
83 file. This new option has been added and documented. After a
89 file. This new option has been added and documented. After a
84 request by SAGE to be able to control the printing of very large
90 request by SAGE to be able to control the printing of very large
85 objects more easily.
91 objects more easily.
86
92
87 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
93 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
88
94
89 * IPython/ipmaker.py (make_IPython): remove the ipython call path
95 * IPython/ipmaker.py (make_IPython): remove the ipython call path
90 from sys.argv, to be 100% consistent with how Python itself works
96 from sys.argv, to be 100% consistent with how Python itself works
91 (as seen for example with python -i file.py). After a bug report
97 (as seen for example with python -i file.py). After a bug report
92 by Jeffrey Collins.
98 by Jeffrey Collins.
93
99
94 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
100 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
95 nasty bug which was preventing custom namespaces with -pylab,
101 nasty bug which was preventing custom namespaces with -pylab,
96 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
102 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
97 compatibility (long gone from mpl).
103 compatibility (long gone from mpl).
98
104
99 * IPython/ipapi.py (make_session): name change: create->make. We
105 * IPython/ipapi.py (make_session): name change: create->make. We
100 use make in other places (ipmaker,...), it's shorter and easier to
106 use make in other places (ipmaker,...), it's shorter and easier to
101 type and say, etc. I'm trying to clean things before 0.7.2 so
107 type and say, etc. I'm trying to clean things before 0.7.2 so
102 that I can keep things stable wrt to ipapi in the chainsaw branch.
108 that I can keep things stable wrt to ipapi in the chainsaw branch.
103
109
104 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
110 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
105 python-mode recognizes our debugger mode. Add support for
111 python-mode recognizes our debugger mode. Add support for
106 autoindent inside (X)emacs. After a patch sent in by Jin Liu
112 autoindent inside (X)emacs. After a patch sent in by Jin Liu
107 <m.liu.jin-AT-gmail.com> originally written by
113 <m.liu.jin-AT-gmail.com> originally written by
108 doxgen-AT-newsmth.net (with minor modifications for xemacs
114 doxgen-AT-newsmth.net (with minor modifications for xemacs
109 compatibility)
115 compatibility)
110
116
111 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
117 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
112 tracebacks when walking the stack so that the stack tracking system
118 tracebacks when walking the stack so that the stack tracking system
113 in emacs' python-mode can identify the frames correctly.
119 in emacs' python-mode can identify the frames correctly.
114
120
115 * IPython/ipmaker.py (make_IPython): make the internal (and
121 * IPython/ipmaker.py (make_IPython): make the internal (and
116 default config) autoedit_syntax value false by default. Too many
122 default config) autoedit_syntax value false by default. Too many
117 users have complained to me (both on and off-list) about problems
123 users have complained to me (both on and off-list) about problems
118 with this option being on by default, so I'm making it default to
124 with this option being on by default, so I'm making it default to
119 off. It can still be enabled by anyone via the usual mechanisms.
125 off. It can still be enabled by anyone via the usual mechanisms.
120
126
121 * IPython/completer.py (Completer.attr_matches): add support for
127 * IPython/completer.py (Completer.attr_matches): add support for
122 PyCrust-style _getAttributeNames magic method. Patch contributed
128 PyCrust-style _getAttributeNames magic method. Patch contributed
123 by <mscott-AT-goldenspud.com>. Closes #50.
129 by <mscott-AT-goldenspud.com>. Closes #50.
124
130
125 * IPython/iplib.py (InteractiveShell.__init__): remove the
131 * IPython/iplib.py (InteractiveShell.__init__): remove the
126 deletion of exit/quit from __builtin__, which can break
132 deletion of exit/quit from __builtin__, which can break
127 third-party tools like the Zope debugging console. The
133 third-party tools like the Zope debugging console. The
128 %exit/%quit magics remain. In general, it's probably a good idea
134 %exit/%quit magics remain. In general, it's probably a good idea
129 not to delete anything from __builtin__, since we never know what
135 not to delete anything from __builtin__, since we never know what
130 that will break. In any case, python now (for 2.5) will support
136 that will break. In any case, python now (for 2.5) will support
131 'real' exit/quit, so this issue is moot. Closes #55.
137 'real' exit/quit, so this issue is moot. Closes #55.
132
138
133 * IPython/genutils.py (with_obj): rename the 'with' function to
139 * IPython/genutils.py (with_obj): rename the 'with' function to
134 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
140 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
135 becomes a language keyword. Closes #53.
141 becomes a language keyword. Closes #53.
136
142
137 * IPython/FakeModule.py (FakeModule.__init__): add a proper
143 * IPython/FakeModule.py (FakeModule.__init__): add a proper
138 __file__ attribute to this so it fools more things into thinking
144 __file__ attribute to this so it fools more things into thinking
139 it is a real module. Closes #59.
145 it is a real module. Closes #59.
140
146
141 * IPython/Magic.py (magic_edit): add -n option to open the editor
147 * IPython/Magic.py (magic_edit): add -n option to open the editor
142 at a specific line number. After a patch by Stefan van der Walt.
148 at a specific line number. After a patch by Stefan van der Walt.
143
149
144 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
145
151
146 * IPython/iplib.py (edit_syntax_error): fix crash when for some
152 * IPython/iplib.py (edit_syntax_error): fix crash when for some
147 reason the file could not be opened. After automatic crash
153 reason the file could not be opened. After automatic crash
148 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
154 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
149 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
155 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
150 (_should_recompile): Don't fire editor if using %bg, since there
156 (_should_recompile): Don't fire editor if using %bg, since there
151 is no file in the first place. From the same report as above.
157 is no file in the first place. From the same report as above.
152 (raw_input): protect against faulty third-party prefilters. After
158 (raw_input): protect against faulty third-party prefilters. After
153 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
159 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
154 while running under SAGE.
160 while running under SAGE.
155
161
156 2006-05-23 Ville Vainio <vivainio@gmail.com>
162 2006-05-23 Ville Vainio <vivainio@gmail.com>
157
163
158 * ipapi.py: Stripped down ip.to_user_ns() to work only as
164 * ipapi.py: Stripped down ip.to_user_ns() to work only as
159 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
165 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
160 now returns None (again), unless dummy is specifically allowed by
166 now returns None (again), unless dummy is specifically allowed by
161 ipapi.get(allow_dummy=True).
167 ipapi.get(allow_dummy=True).
162
168
163 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
169 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
164
170
165 * IPython: remove all 2.2-compatibility objects and hacks from
171 * IPython: remove all 2.2-compatibility objects and hacks from
166 everywhere, since we only support 2.3 at this point. Docs
172 everywhere, since we only support 2.3 at this point. Docs
167 updated.
173 updated.
168
174
169 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
175 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
170 Anything requiring extra validation can be turned into a Python
176 Anything requiring extra validation can be turned into a Python
171 property in the future. I used a property for the db one b/c
177 property in the future. I used a property for the db one b/c
172 there was a nasty circularity problem with the initialization
178 there was a nasty circularity problem with the initialization
173 order, which right now I don't have time to clean up.
179 order, which right now I don't have time to clean up.
174
180
175 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
181 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
176 another locking bug reported by Jorgen. I'm not 100% sure though,
182 another locking bug reported by Jorgen. I'm not 100% sure though,
177 so more testing is needed...
183 so more testing is needed...
178
184
179 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
185 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
180
186
181 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
187 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
182 local variables from any routine in user code (typically executed
188 local variables from any routine in user code (typically executed
183 with %run) directly into the interactive namespace. Very useful
189 with %run) directly into the interactive namespace. Very useful
184 when doing complex debugging.
190 when doing complex debugging.
185 (IPythonNotRunning): Changed the default None object to a dummy
191 (IPythonNotRunning): Changed the default None object to a dummy
186 whose attributes can be queried as well as called without
192 whose attributes can be queried as well as called without
187 exploding, to ease writing code which works transparently both in
193 exploding, to ease writing code which works transparently both in
188 and out of ipython and uses some of this API.
194 and out of ipython and uses some of this API.
189
195
190 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
196 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
191
197
192 * IPython/hooks.py (result_display): Fix the fact that our display
198 * IPython/hooks.py (result_display): Fix the fact that our display
193 hook was using str() instead of repr(), as the default python
199 hook was using str() instead of repr(), as the default python
194 console does. This had gone unnoticed b/c it only happened if
200 console does. This had gone unnoticed b/c it only happened if
195 %Pprint was off, but the inconsistency was there.
201 %Pprint was off, but the inconsistency was there.
196
202
197 2006-05-15 Ville Vainio <vivainio@gmail.com>
203 2006-05-15 Ville Vainio <vivainio@gmail.com>
198
204
199 * Oinspect.py: Only show docstring for nonexisting/binary files
205 * Oinspect.py: Only show docstring for nonexisting/binary files
200 when doing object??, closing ticket #62
206 when doing object??, closing ticket #62
201
207
202 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
208 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
203
209
204 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
210 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
205 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
211 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
206 was being released in a routine which hadn't checked if it had
212 was being released in a routine which hadn't checked if it had
207 been the one to acquire it.
213 been the one to acquire it.
208
214
209 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
215 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
210
216
211 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
217 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
212
218
213 2006-04-11 Ville Vainio <vivainio@gmail.com>
219 2006-04-11 Ville Vainio <vivainio@gmail.com>
214
220
215 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
221 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
216 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
222 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
217 prefilters, allowing stuff like magics and aliases in the file.
223 prefilters, allowing stuff like magics and aliases in the file.
218
224
219 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
225 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
220 added. Supported now are "%clear in" and "%clear out" (clear input and
226 added. Supported now are "%clear in" and "%clear out" (clear input and
221 output history, respectively). Also fixed CachedOutput.flush to
227 output history, respectively). Also fixed CachedOutput.flush to
222 properly flush the output cache.
228 properly flush the output cache.
223
229
224 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
230 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
225 half-success (and fail explicitly).
231 half-success (and fail explicitly).
226
232
227 2006-03-28 Ville Vainio <vivainio@gmail.com>
233 2006-03-28 Ville Vainio <vivainio@gmail.com>
228
234
229 * iplib.py: Fix quoting of aliases so that only argless ones
235 * iplib.py: Fix quoting of aliases so that only argless ones
230 are quoted
236 are quoted
231
237
232 2006-03-28 Ville Vainio <vivainio@gmail.com>
238 2006-03-28 Ville Vainio <vivainio@gmail.com>
233
239
234 * iplib.py: Quote aliases with spaces in the name.
240 * iplib.py: Quote aliases with spaces in the name.
235 "c:\program files\blah\bin" is now legal alias target.
241 "c:\program files\blah\bin" is now legal alias target.
236
242
237 * ext_rehashdir.py: Space no longer allowed as arg
243 * ext_rehashdir.py: Space no longer allowed as arg
238 separator, since space is legal in path names.
244 separator, since space is legal in path names.
239
245
240 2006-03-16 Ville Vainio <vivainio@gmail.com>
246 2006-03-16 Ville Vainio <vivainio@gmail.com>
241
247
242 * upgrade_dir.py: Take path.py from Extensions, correcting
248 * upgrade_dir.py: Take path.py from Extensions, correcting
243 %upgrade magic
249 %upgrade magic
244
250
245 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
251 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
246
252
247 * hooks.py: Only enclose editor binary in quotes if legal and
253 * hooks.py: Only enclose editor binary in quotes if legal and
248 necessary (space in the name, and is an existing file). Fixes a bug
254 necessary (space in the name, and is an existing file). Fixes a bug
249 reported by Zachary Pincus.
255 reported by Zachary Pincus.
250
256
251 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
257 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
252
258
253 * Manual: thanks to a tip on proper color handling for Emacs, by
259 * Manual: thanks to a tip on proper color handling for Emacs, by
254 Eric J Haywiser <ejh1-AT-MIT.EDU>.
260 Eric J Haywiser <ejh1-AT-MIT.EDU>.
255
261
256 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
262 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
257 by applying the provided patch. Thanks to Liu Jin
263 by applying the provided patch. Thanks to Liu Jin
258 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
264 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
259 XEmacs/Linux, I'm trusting the submitter that it actually helps
265 XEmacs/Linux, I'm trusting the submitter that it actually helps
260 under win32/GNU Emacs. Will revisit if any problems are reported.
266 under win32/GNU Emacs. Will revisit if any problems are reported.
261
267
262 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
268 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
263
269
264 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
270 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
265 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
271 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
266
272
267 2006-03-12 Ville Vainio <vivainio@gmail.com>
273 2006-03-12 Ville Vainio <vivainio@gmail.com>
268
274
269 * Magic.py (magic_timeit): Added %timeit magic, contributed by
275 * Magic.py (magic_timeit): Added %timeit magic, contributed by
270 Torsten Marek.
276 Torsten Marek.
271
277
272 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
278 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
273
279
274 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
280 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
275 line ranges works again.
281 line ranges works again.
276
282
277 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
283 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
278
284
279 * IPython/iplib.py (showtraceback): add back sys.last_traceback
285 * IPython/iplib.py (showtraceback): add back sys.last_traceback
280 and friends, after a discussion with Zach Pincus on ipython-user.
286 and friends, after a discussion with Zach Pincus on ipython-user.
281 I'm not 100% sure, but after thinking aobut it quite a bit, it may
287 I'm not 100% sure, but after thinking aobut it quite a bit, it may
282 be OK. Testing with the multithreaded shells didn't reveal any
288 be OK. Testing with the multithreaded shells didn't reveal any
283 problems, but let's keep an eye out.
289 problems, but let's keep an eye out.
284
290
285 In the process, I fixed a few things which were calling
291 In the process, I fixed a few things which were calling
286 self.InteractiveTB() directly (like safe_execfile), which is a
292 self.InteractiveTB() directly (like safe_execfile), which is a
287 mistake: ALL exception reporting should be done by calling
293 mistake: ALL exception reporting should be done by calling
288 self.showtraceback(), which handles state and tab-completion and
294 self.showtraceback(), which handles state and tab-completion and
289 more.
295 more.
290
296
291 2006-03-01 Ville Vainio <vivainio@gmail.com>
297 2006-03-01 Ville Vainio <vivainio@gmail.com>
292
298
293 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
299 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
294 To use, do "from ipipe import *".
300 To use, do "from ipipe import *".
295
301
296 2006-02-24 Ville Vainio <vivainio@gmail.com>
302 2006-02-24 Ville Vainio <vivainio@gmail.com>
297
303
298 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
304 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
299 "cleanly" and safely than the older upgrade mechanism.
305 "cleanly" and safely than the older upgrade mechanism.
300
306
301 2006-02-21 Ville Vainio <vivainio@gmail.com>
307 2006-02-21 Ville Vainio <vivainio@gmail.com>
302
308
303 * Magic.py: %save works again.
309 * Magic.py: %save works again.
304
310
305 2006-02-15 Ville Vainio <vivainio@gmail.com>
311 2006-02-15 Ville Vainio <vivainio@gmail.com>
306
312
307 * Magic.py: %Pprint works again
313 * Magic.py: %Pprint works again
308
314
309 * Extensions/ipy_sane_defaults.py: Provide everything provided
315 * Extensions/ipy_sane_defaults.py: Provide everything provided
310 in default ipythonrc, to make it possible to have a completely empty
316 in default ipythonrc, to make it possible to have a completely empty
311 ipythonrc (and thus completely rc-file free configuration)
317 ipythonrc (and thus completely rc-file free configuration)
312
318
313
319
314 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
320 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
315
321
316 * IPython/hooks.py (editor): quote the call to the editor command,
322 * IPython/hooks.py (editor): quote the call to the editor command,
317 to allow commands with spaces in them. Problem noted by watching
323 to allow commands with spaces in them. Problem noted by watching
318 Ian Oswald's video about textpad under win32 at
324 Ian Oswald's video about textpad under win32 at
319 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
325 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
320
326
321 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
327 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
322 describing magics (we haven't used @ for a loong time).
328 describing magics (we haven't used @ for a loong time).
323
329
324 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
330 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
325 contributed by marienz to close
331 contributed by marienz to close
326 http://www.scipy.net/roundup/ipython/issue53.
332 http://www.scipy.net/roundup/ipython/issue53.
327
333
328 2006-02-10 Ville Vainio <vivainio@gmail.com>
334 2006-02-10 Ville Vainio <vivainio@gmail.com>
329
335
330 * genutils.py: getoutput now works in win32 too
336 * genutils.py: getoutput now works in win32 too
331
337
332 * completer.py: alias and magic completion only invoked
338 * completer.py: alias and magic completion only invoked
333 at the first "item" in the line, to avoid "cd %store"
339 at the first "item" in the line, to avoid "cd %store"
334 nonsense.
340 nonsense.
335
341
336 2006-02-09 Ville Vainio <vivainio@gmail.com>
342 2006-02-09 Ville Vainio <vivainio@gmail.com>
337
343
338 * test/*: Added a unit testing framework (finally).
344 * test/*: Added a unit testing framework (finally).
339 '%run runtests.py' to run test_*.
345 '%run runtests.py' to run test_*.
340
346
341 * ipapi.py: Exposed runlines and set_custom_exc
347 * ipapi.py: Exposed runlines and set_custom_exc
342
348
343 2006-02-07 Ville Vainio <vivainio@gmail.com>
349 2006-02-07 Ville Vainio <vivainio@gmail.com>
344
350
345 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
351 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
346 instead use "f(1 2)" as before.
352 instead use "f(1 2)" as before.
347
353
348 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
354 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
349
355
350 * IPython/demo.py (IPythonDemo): Add new classes to the demo
356 * IPython/demo.py (IPythonDemo): Add new classes to the demo
351 facilities, for demos processed by the IPython input filter
357 facilities, for demos processed by the IPython input filter
352 (IPythonDemo), and for running a script one-line-at-a-time as a
358 (IPythonDemo), and for running a script one-line-at-a-time as a
353 demo, both for pure Python (LineDemo) and for IPython-processed
359 demo, both for pure Python (LineDemo) and for IPython-processed
354 input (IPythonLineDemo). After a request by Dave Kohel, from the
360 input (IPythonLineDemo). After a request by Dave Kohel, from the
355 SAGE team.
361 SAGE team.
356 (Demo.edit): added and edit() method to the demo objects, to edit
362 (Demo.edit): added and edit() method to the demo objects, to edit
357 the in-memory copy of the last executed block.
363 the in-memory copy of the last executed block.
358
364
359 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
365 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
360 processing to %edit, %macro and %save. These commands can now be
366 processing to %edit, %macro and %save. These commands can now be
361 invoked on the unprocessed input as it was typed by the user
367 invoked on the unprocessed input as it was typed by the user
362 (without any prefilters applied). After requests by the SAGE team
368 (without any prefilters applied). After requests by the SAGE team
363 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
369 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
364
370
365 2006-02-01 Ville Vainio <vivainio@gmail.com>
371 2006-02-01 Ville Vainio <vivainio@gmail.com>
366
372
367 * setup.py, eggsetup.py: easy_install ipython==dev works
373 * setup.py, eggsetup.py: easy_install ipython==dev works
368 correctly now (on Linux)
374 correctly now (on Linux)
369
375
370 * ipy_user_conf,ipmaker: user config changes, removed spurious
376 * ipy_user_conf,ipmaker: user config changes, removed spurious
371 warnings
377 warnings
372
378
373 * iplib: if rc.banner is string, use it as is.
379 * iplib: if rc.banner is string, use it as is.
374
380
375 * Magic: %pycat accepts a string argument and pages it's contents.
381 * Magic: %pycat accepts a string argument and pages it's contents.
376
382
377
383
378 2006-01-30 Ville Vainio <vivainio@gmail.com>
384 2006-01-30 Ville Vainio <vivainio@gmail.com>
379
385
380 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
386 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
381 Now %store and bookmarks work through PickleShare, meaning that
387 Now %store and bookmarks work through PickleShare, meaning that
382 concurrent access is possible and all ipython sessions see the
388 concurrent access is possible and all ipython sessions see the
383 same database situation all the time, instead of snapshot of
389 same database situation all the time, instead of snapshot of
384 the situation when the session was started. Hence, %bookmark
390 the situation when the session was started. Hence, %bookmark
385 results are immediately accessible from othes sessions. The database
391 results are immediately accessible from othes sessions. The database
386 is also available for use by user extensions. See:
392 is also available for use by user extensions. See:
387 http://www.python.org/pypi/pickleshare
393 http://www.python.org/pypi/pickleshare
388
394
389 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
395 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
390
396
391 * aliases can now be %store'd
397 * aliases can now be %store'd
392
398
393 * path.py move to Extensions so that pickleshare does not need
399 * path.py move to Extensions so that pickleshare does not need
394 IPython-specific import. Extensions added to pythonpath right
400 IPython-specific import. Extensions added to pythonpath right
395 at __init__.
401 at __init__.
396
402
397 * iplib.py: ipalias deprecated/redundant; aliases are converted and
403 * iplib.py: ipalias deprecated/redundant; aliases are converted and
398 called with _ip.system and the pre-transformed command string.
404 called with _ip.system and the pre-transformed command string.
399
405
400 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
406 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
401
407
402 * IPython/iplib.py (interact): Fix that we were not catching
408 * IPython/iplib.py (interact): Fix that we were not catching
403 KeyboardInterrupt exceptions properly. I'm not quite sure why the
409 KeyboardInterrupt exceptions properly. I'm not quite sure why the
404 logic here had to change, but it's fixed now.
410 logic here had to change, but it's fixed now.
405
411
406 2006-01-29 Ville Vainio <vivainio@gmail.com>
412 2006-01-29 Ville Vainio <vivainio@gmail.com>
407
413
408 * iplib.py: Try to import pyreadline on Windows.
414 * iplib.py: Try to import pyreadline on Windows.
409
415
410 2006-01-27 Ville Vainio <vivainio@gmail.com>
416 2006-01-27 Ville Vainio <vivainio@gmail.com>
411
417
412 * iplib.py: Expose ipapi as _ip in builtin namespace.
418 * iplib.py: Expose ipapi as _ip in builtin namespace.
413 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
419 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
414 and ip_set_hook (-> _ip.set_hook) redundant. % and !
420 and ip_set_hook (-> _ip.set_hook) redundant. % and !
415 syntax now produce _ip.* variant of the commands.
421 syntax now produce _ip.* variant of the commands.
416
422
417 * "_ip.options().autoedit_syntax = 2" automatically throws
423 * "_ip.options().autoedit_syntax = 2" automatically throws
418 user to editor for syntax error correction without prompting.
424 user to editor for syntax error correction without prompting.
419
425
420 2006-01-27 Ville Vainio <vivainio@gmail.com>
426 2006-01-27 Ville Vainio <vivainio@gmail.com>
421
427
422 * ipmaker.py: Give "realistic" sys.argv for scripts (without
428 * ipmaker.py: Give "realistic" sys.argv for scripts (without
423 'ipython' at argv[0]) executed through command line.
429 'ipython' at argv[0]) executed through command line.
424 NOTE: this DEPRECATES calling ipython with multiple scripts
430 NOTE: this DEPRECATES calling ipython with multiple scripts
425 ("ipython a.py b.py c.py")
431 ("ipython a.py b.py c.py")
426
432
427 * iplib.py, hooks.py: Added configurable input prefilter,
433 * iplib.py, hooks.py: Added configurable input prefilter,
428 named 'input_prefilter'. See ext_rescapture.py for example
434 named 'input_prefilter'. See ext_rescapture.py for example
429 usage.
435 usage.
430
436
431 * ext_rescapture.py, Magic.py: Better system command output capture
437 * ext_rescapture.py, Magic.py: Better system command output capture
432 through 'var = !ls' (deprecates user-visible %sc). Same notation
438 through 'var = !ls' (deprecates user-visible %sc). Same notation
433 applies for magics, 'var = %alias' assigns alias list to var.
439 applies for magics, 'var = %alias' assigns alias list to var.
434
440
435 * ipapi.py: added meta() for accessing extension-usable data store.
441 * ipapi.py: added meta() for accessing extension-usable data store.
436
442
437 * iplib.py: added InteractiveShell.getapi(). New magics should be
443 * iplib.py: added InteractiveShell.getapi(). New magics should be
438 written doing self.getapi() instead of using the shell directly.
444 written doing self.getapi() instead of using the shell directly.
439
445
440 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
446 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
441 %store foo >> ~/myfoo.txt to store variables to files (in clean
447 %store foo >> ~/myfoo.txt to store variables to files (in clean
442 textual form, not a restorable pickle).
448 textual form, not a restorable pickle).
443
449
444 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
450 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
445
451
446 * usage.py, Magic.py: added %quickref
452 * usage.py, Magic.py: added %quickref
447
453
448 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
454 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
449
455
450 * GetoptErrors when invoking magics etc. with wrong args
456 * GetoptErrors when invoking magics etc. with wrong args
451 are now more helpful:
457 are now more helpful:
452 GetoptError: option -l not recognized (allowed: "qb" )
458 GetoptError: option -l not recognized (allowed: "qb" )
453
459
454 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
460 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
455
461
456 * IPython/demo.py (Demo.show): Flush stdout after each block, so
462 * IPython/demo.py (Demo.show): Flush stdout after each block, so
457 computationally intensive blocks don't appear to stall the demo.
463 computationally intensive blocks don't appear to stall the demo.
458
464
459 2006-01-24 Ville Vainio <vivainio@gmail.com>
465 2006-01-24 Ville Vainio <vivainio@gmail.com>
460
466
461 * iplib.py, hooks.py: 'result_display' hook can return a non-None
467 * iplib.py, hooks.py: 'result_display' hook can return a non-None
462 value to manipulate resulting history entry.
468 value to manipulate resulting history entry.
463
469
464 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
470 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
465 to instance methods of IPApi class, to make extending an embedded
471 to instance methods of IPApi class, to make extending an embedded
466 IPython feasible. See ext_rehashdir.py for example usage.
472 IPython feasible. See ext_rehashdir.py for example usage.
467
473
468 * Merged 1071-1076 from banches/0.7.1
474 * Merged 1071-1076 from banches/0.7.1
469
475
470
476
471 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
477 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
472
478
473 * tools/release (daystamp): Fix build tools to use the new
479 * tools/release (daystamp): Fix build tools to use the new
474 eggsetup.py script to build lightweight eggs.
480 eggsetup.py script to build lightweight eggs.
475
481
476 * Applied changesets 1062 and 1064 before 0.7.1 release.
482 * Applied changesets 1062 and 1064 before 0.7.1 release.
477
483
478 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
484 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
479 see the raw input history (without conversions like %ls ->
485 see the raw input history (without conversions like %ls ->
480 ipmagic("ls")). After a request from W. Stein, SAGE
486 ipmagic("ls")). After a request from W. Stein, SAGE
481 (http://modular.ucsd.edu/sage) developer. This information is
487 (http://modular.ucsd.edu/sage) developer. This information is
482 stored in the input_hist_raw attribute of the IPython instance, so
488 stored in the input_hist_raw attribute of the IPython instance, so
483 developers can access it if needed (it's an InputList instance).
489 developers can access it if needed (it's an InputList instance).
484
490
485 * Versionstring = 0.7.2.svn
491 * Versionstring = 0.7.2.svn
486
492
487 * eggsetup.py: A separate script for constructing eggs, creates
493 * eggsetup.py: A separate script for constructing eggs, creates
488 proper launch scripts even on Windows (an .exe file in
494 proper launch scripts even on Windows (an .exe file in
489 \python24\scripts).
495 \python24\scripts).
490
496
491 * ipapi.py: launch_new_instance, launch entry point needed for the
497 * ipapi.py: launch_new_instance, launch entry point needed for the
492 egg.
498 egg.
493
499
494 2006-01-23 Ville Vainio <vivainio@gmail.com>
500 2006-01-23 Ville Vainio <vivainio@gmail.com>
495
501
496 * Added %cpaste magic for pasting python code
502 * Added %cpaste magic for pasting python code
497
503
498 2006-01-22 Ville Vainio <vivainio@gmail.com>
504 2006-01-22 Ville Vainio <vivainio@gmail.com>
499
505
500 * Merge from branches/0.7.1 into trunk, revs 1052-1057
506 * Merge from branches/0.7.1 into trunk, revs 1052-1057
501
507
502 * Versionstring = 0.7.2.svn
508 * Versionstring = 0.7.2.svn
503
509
504 * eggsetup.py: A separate script for constructing eggs, creates
510 * eggsetup.py: A separate script for constructing eggs, creates
505 proper launch scripts even on Windows (an .exe file in
511 proper launch scripts even on Windows (an .exe file in
506 \python24\scripts).
512 \python24\scripts).
507
513
508 * ipapi.py: launch_new_instance, launch entry point needed for the
514 * ipapi.py: launch_new_instance, launch entry point needed for the
509 egg.
515 egg.
510
516
511 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
517 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
512
518
513 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
519 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
514 %pfile foo would print the file for foo even if it was a binary.
520 %pfile foo would print the file for foo even if it was a binary.
515 Now, extensions '.so' and '.dll' are skipped.
521 Now, extensions '.so' and '.dll' are skipped.
516
522
517 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
523 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
518 bug, where macros would fail in all threaded modes. I'm not 100%
524 bug, where macros would fail in all threaded modes. I'm not 100%
519 sure, so I'm going to put out an rc instead of making a release
525 sure, so I'm going to put out an rc instead of making a release
520 today, and wait for feedback for at least a few days.
526 today, and wait for feedback for at least a few days.
521
527
522 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
528 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
523 it...) the handling of pasting external code with autoindent on.
529 it...) the handling of pasting external code with autoindent on.
524 To get out of a multiline input, the rule will appear for most
530 To get out of a multiline input, the rule will appear for most
525 users unchanged: two blank lines or change the indent level
531 users unchanged: two blank lines or change the indent level
526 proposed by IPython. But there is a twist now: you can
532 proposed by IPython. But there is a twist now: you can
527 add/subtract only *one or two spaces*. If you add/subtract three
533 add/subtract only *one or two spaces*. If you add/subtract three
528 or more (unless you completely delete the line), IPython will
534 or more (unless you completely delete the line), IPython will
529 accept that line, and you'll need to enter a second one of pure
535 accept that line, and you'll need to enter a second one of pure
530 whitespace. I know it sounds complicated, but I can't find a
536 whitespace. I know it sounds complicated, but I can't find a
531 different solution that covers all the cases, with the right
537 different solution that covers all the cases, with the right
532 heuristics. Hopefully in actual use, nobody will really notice
538 heuristics. Hopefully in actual use, nobody will really notice
533 all these strange rules and things will 'just work'.
539 all these strange rules and things will 'just work'.
534
540
535 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
541 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
536
542
537 * IPython/iplib.py (interact): catch exceptions which can be
543 * IPython/iplib.py (interact): catch exceptions which can be
538 triggered asynchronously by signal handlers. Thanks to an
544 triggered asynchronously by signal handlers. Thanks to an
539 automatic crash report, submitted by Colin Kingsley
545 automatic crash report, submitted by Colin Kingsley
540 <tercel-AT-gentoo.org>.
546 <tercel-AT-gentoo.org>.
541
547
542 2006-01-20 Ville Vainio <vivainio@gmail.com>
548 2006-01-20 Ville Vainio <vivainio@gmail.com>
543
549
544 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
550 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
545 (%rehashdir, very useful, try it out) of how to extend ipython
551 (%rehashdir, very useful, try it out) of how to extend ipython
546 with new magics. Also added Extensions dir to pythonpath to make
552 with new magics. Also added Extensions dir to pythonpath to make
547 importing extensions easy.
553 importing extensions easy.
548
554
549 * %store now complains when trying to store interactively declared
555 * %store now complains when trying to store interactively declared
550 classes / instances of those classes.
556 classes / instances of those classes.
551
557
552 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
558 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
553 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
559 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
554 if they exist, and ipy_user_conf.py with some defaults is created for
560 if they exist, and ipy_user_conf.py with some defaults is created for
555 the user.
561 the user.
556
562
557 * Startup rehashing done by the config file, not InterpreterExec.
563 * Startup rehashing done by the config file, not InterpreterExec.
558 This means system commands are available even without selecting the
564 This means system commands are available even without selecting the
559 pysh profile. It's the sensible default after all.
565 pysh profile. It's the sensible default after all.
560
566
561 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
567 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
562
568
563 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
569 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
564 multiline code with autoindent on working. But I am really not
570 multiline code with autoindent on working. But I am really not
565 sure, so this needs more testing. Will commit a debug-enabled
571 sure, so this needs more testing. Will commit a debug-enabled
566 version for now, while I test it some more, so that Ville and
572 version for now, while I test it some more, so that Ville and
567 others may also catch any problems. Also made
573 others may also catch any problems. Also made
568 self.indent_current_str() a method, to ensure that there's no
574 self.indent_current_str() a method, to ensure that there's no
569 chance of the indent space count and the corresponding string
575 chance of the indent space count and the corresponding string
570 falling out of sync. All code needing the string should just call
576 falling out of sync. All code needing the string should just call
571 the method.
577 the method.
572
578
573 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
579 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
574
580
575 * IPython/Magic.py (magic_edit): fix check for when users don't
581 * IPython/Magic.py (magic_edit): fix check for when users don't
576 save their output files, the try/except was in the wrong section.
582 save their output files, the try/except was in the wrong section.
577
583
578 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
584 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
579
585
580 * IPython/Magic.py (magic_run): fix __file__ global missing from
586 * IPython/Magic.py (magic_run): fix __file__ global missing from
581 script's namespace when executed via %run. After a report by
587 script's namespace when executed via %run. After a report by
582 Vivian.
588 Vivian.
583
589
584 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
590 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
585 when using python 2.4. The parent constructor changed in 2.4, and
591 when using python 2.4. The parent constructor changed in 2.4, and
586 we need to track it directly (we can't call it, as it messes up
592 we need to track it directly (we can't call it, as it messes up
587 readline and tab-completion inside our pdb would stop working).
593 readline and tab-completion inside our pdb would stop working).
588 After a bug report by R. Bernstein <rocky-AT-panix.com>.
594 After a bug report by R. Bernstein <rocky-AT-panix.com>.
589
595
590 2006-01-16 Ville Vainio <vivainio@gmail.com>
596 2006-01-16 Ville Vainio <vivainio@gmail.com>
591
597
592 * Ipython/magic.py:Reverted back to old %edit functionality
598 * Ipython/magic.py:Reverted back to old %edit functionality
593 that returns file contents on exit.
599 that returns file contents on exit.
594
600
595 * IPython/path.py: Added Jason Orendorff's "path" module to
601 * IPython/path.py: Added Jason Orendorff's "path" module to
596 IPython tree, http://www.jorendorff.com/articles/python/path/.
602 IPython tree, http://www.jorendorff.com/articles/python/path/.
597 You can get path objects conveniently through %sc, and !!, e.g.:
603 You can get path objects conveniently through %sc, and !!, e.g.:
598 sc files=ls
604 sc files=ls
599 for p in files.paths: # or files.p
605 for p in files.paths: # or files.p
600 print p,p.mtime
606 print p,p.mtime
601
607
602 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
608 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
603 now work again without considering the exclusion regexp -
609 now work again without considering the exclusion regexp -
604 hence, things like ',foo my/path' turn to 'foo("my/path")'
610 hence, things like ',foo my/path' turn to 'foo("my/path")'
605 instead of syntax error.
611 instead of syntax error.
606
612
607
613
608 2006-01-14 Ville Vainio <vivainio@gmail.com>
614 2006-01-14 Ville Vainio <vivainio@gmail.com>
609
615
610 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
616 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
611 ipapi decorators for python 2.4 users, options() provides access to rc
617 ipapi decorators for python 2.4 users, options() provides access to rc
612 data.
618 data.
613
619
614 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
620 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
615 as path separators (even on Linux ;-). Space character after
621 as path separators (even on Linux ;-). Space character after
616 backslash (as yielded by tab completer) is still space;
622 backslash (as yielded by tab completer) is still space;
617 "%cd long\ name" works as expected.
623 "%cd long\ name" works as expected.
618
624
619 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
625 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
620 as "chain of command", with priority. API stays the same,
626 as "chain of command", with priority. API stays the same,
621 TryNext exception raised by a hook function signals that
627 TryNext exception raised by a hook function signals that
622 current hook failed and next hook should try handling it, as
628 current hook failed and next hook should try handling it, as
623 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
629 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
624 requested configurable display hook, which is now implemented.
630 requested configurable display hook, which is now implemented.
625
631
626 2006-01-13 Ville Vainio <vivainio@gmail.com>
632 2006-01-13 Ville Vainio <vivainio@gmail.com>
627
633
628 * IPython/platutils*.py: platform specific utility functions,
634 * IPython/platutils*.py: platform specific utility functions,
629 so far only set_term_title is implemented (change terminal
635 so far only set_term_title is implemented (change terminal
630 label in windowing systems). %cd now changes the title to
636 label in windowing systems). %cd now changes the title to
631 current dir.
637 current dir.
632
638
633 * IPython/Release.py: Added myself to "authors" list,
639 * IPython/Release.py: Added myself to "authors" list,
634 had to create new files.
640 had to create new files.
635
641
636 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
642 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
637 shell escape; not a known bug but had potential to be one in the
643 shell escape; not a known bug but had potential to be one in the
638 future.
644 future.
639
645
640 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
646 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
641 extension API for IPython! See the module for usage example. Fix
647 extension API for IPython! See the module for usage example. Fix
642 OInspect for docstring-less magic functions.
648 OInspect for docstring-less magic functions.
643
649
644
650
645 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
651 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
646
652
647 * IPython/iplib.py (raw_input): temporarily deactivate all
653 * IPython/iplib.py (raw_input): temporarily deactivate all
648 attempts at allowing pasting of code with autoindent on. It
654 attempts at allowing pasting of code with autoindent on. It
649 introduced bugs (reported by Prabhu) and I can't seem to find a
655 introduced bugs (reported by Prabhu) and I can't seem to find a
650 robust combination which works in all cases. Will have to revisit
656 robust combination which works in all cases. Will have to revisit
651 later.
657 later.
652
658
653 * IPython/genutils.py: remove isspace() function. We've dropped
659 * IPython/genutils.py: remove isspace() function. We've dropped
654 2.2 compatibility, so it's OK to use the string method.
660 2.2 compatibility, so it's OK to use the string method.
655
661
656 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
662 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
657
663
658 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
664 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
659 matching what NOT to autocall on, to include all python binary
665 matching what NOT to autocall on, to include all python binary
660 operators (including things like 'and', 'or', 'is' and 'in').
666 operators (including things like 'and', 'or', 'is' and 'in').
661 Prompted by a bug report on 'foo & bar', but I realized we had
667 Prompted by a bug report on 'foo & bar', but I realized we had
662 many more potential bug cases with other operators. The regexp is
668 many more potential bug cases with other operators. The regexp is
663 self.re_exclude_auto, it's fairly commented.
669 self.re_exclude_auto, it's fairly commented.
664
670
665 2006-01-12 Ville Vainio <vivainio@gmail.com>
671 2006-01-12 Ville Vainio <vivainio@gmail.com>
666
672
667 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
673 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
668 Prettified and hardened string/backslash quoting with ipsystem(),
674 Prettified and hardened string/backslash quoting with ipsystem(),
669 ipalias() and ipmagic(). Now even \ characters are passed to
675 ipalias() and ipmagic(). Now even \ characters are passed to
670 %magics, !shell escapes and aliases exactly as they are in the
676 %magics, !shell escapes and aliases exactly as they are in the
671 ipython command line. Should improve backslash experience,
677 ipython command line. Should improve backslash experience,
672 particularly in Windows (path delimiter for some commands that
678 particularly in Windows (path delimiter for some commands that
673 won't understand '/'), but Unix benefits as well (regexps). %cd
679 won't understand '/'), but Unix benefits as well (regexps). %cd
674 magic still doesn't support backslash path delimiters, though. Also
680 magic still doesn't support backslash path delimiters, though. Also
675 deleted all pretense of supporting multiline command strings in
681 deleted all pretense of supporting multiline command strings in
676 !system or %magic commands. Thanks to Jerry McRae for suggestions.
682 !system or %magic commands. Thanks to Jerry McRae for suggestions.
677
683
678 * doc/build_doc_instructions.txt added. Documentation on how to
684 * doc/build_doc_instructions.txt added. Documentation on how to
679 use doc/update_manual.py, added yesterday. Both files contributed
685 use doc/update_manual.py, added yesterday. Both files contributed
680 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
686 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
681 doc/*.sh for deprecation at a later date.
687 doc/*.sh for deprecation at a later date.
682
688
683 * /ipython.py Added ipython.py to root directory for
689 * /ipython.py Added ipython.py to root directory for
684 zero-installation (tar xzvf ipython.tgz; cd ipython; python
690 zero-installation (tar xzvf ipython.tgz; cd ipython; python
685 ipython.py) and development convenience (no need to kee doing
691 ipython.py) and development convenience (no need to kee doing
686 "setup.py install" between changes).
692 "setup.py install" between changes).
687
693
688 * Made ! and !! shell escapes work (again) in multiline expressions:
694 * Made ! and !! shell escapes work (again) in multiline expressions:
689 if 1:
695 if 1:
690 !ls
696 !ls
691 !!ls
697 !!ls
692
698
693 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
699 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
694
700
695 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
701 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
696 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
702 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
697 module in case-insensitive installation. Was causing crashes
703 module in case-insensitive installation. Was causing crashes
698 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
704 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
699
705
700 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
706 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
701 <marienz-AT-gentoo.org>, closes
707 <marienz-AT-gentoo.org>, closes
702 http://www.scipy.net/roundup/ipython/issue51.
708 http://www.scipy.net/roundup/ipython/issue51.
703
709
704 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
710 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
705
711
706 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
712 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
707 problem of excessive CPU usage under *nix and keyboard lag under
713 problem of excessive CPU usage under *nix and keyboard lag under
708 win32.
714 win32.
709
715
710 2006-01-10 *** Released version 0.7.0
716 2006-01-10 *** Released version 0.7.0
711
717
712 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
718 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
713
719
714 * IPython/Release.py (revision): tag version number to 0.7.0,
720 * IPython/Release.py (revision): tag version number to 0.7.0,
715 ready for release.
721 ready for release.
716
722
717 * IPython/Magic.py (magic_edit): Add print statement to %edit so
723 * IPython/Magic.py (magic_edit): Add print statement to %edit so
718 it informs the user of the name of the temp. file used. This can
724 it informs the user of the name of the temp. file used. This can
719 help if you decide later to reuse that same file, so you know
725 help if you decide later to reuse that same file, so you know
720 where to copy the info from.
726 where to copy the info from.
721
727
722 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
728 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
723
729
724 * setup_bdist_egg.py: little script to build an egg. Added
730 * setup_bdist_egg.py: little script to build an egg. Added
725 support in the release tools as well.
731 support in the release tools as well.
726
732
727 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
733 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
728
734
729 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
735 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
730 version selection (new -wxversion command line and ipythonrc
736 version selection (new -wxversion command line and ipythonrc
731 parameter). Patch contributed by Arnd Baecker
737 parameter). Patch contributed by Arnd Baecker
732 <arnd.baecker-AT-web.de>.
738 <arnd.baecker-AT-web.de>.
733
739
734 * IPython/iplib.py (embed_mainloop): fix tab-completion in
740 * IPython/iplib.py (embed_mainloop): fix tab-completion in
735 embedded instances, for variables defined at the interactive
741 embedded instances, for variables defined at the interactive
736 prompt of the embedded ipython. Reported by Arnd.
742 prompt of the embedded ipython. Reported by Arnd.
737
743
738 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
744 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
739 it can be used as a (stateful) toggle, or with a direct parameter.
745 it can be used as a (stateful) toggle, or with a direct parameter.
740
746
741 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
747 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
742 could be triggered in certain cases and cause the traceback
748 could be triggered in certain cases and cause the traceback
743 printer not to work.
749 printer not to work.
744
750
745 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
751 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
746
752
747 * IPython/iplib.py (_should_recompile): Small fix, closes
753 * IPython/iplib.py (_should_recompile): Small fix, closes
748 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
754 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
749
755
750 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
756 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
751
757
752 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
758 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
753 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
759 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
754 Moad for help with tracking it down.
760 Moad for help with tracking it down.
755
761
756 * IPython/iplib.py (handle_auto): fix autocall handling for
762 * IPython/iplib.py (handle_auto): fix autocall handling for
757 objects which support BOTH __getitem__ and __call__ (so that f [x]
763 objects which support BOTH __getitem__ and __call__ (so that f [x]
758 is left alone, instead of becoming f([x]) automatically).
764 is left alone, instead of becoming f([x]) automatically).
759
765
760 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
766 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
761 Ville's patch.
767 Ville's patch.
762
768
763 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
769 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
764
770
765 * IPython/iplib.py (handle_auto): changed autocall semantics to
771 * IPython/iplib.py (handle_auto): changed autocall semantics to
766 include 'smart' mode, where the autocall transformation is NOT
772 include 'smart' mode, where the autocall transformation is NOT
767 applied if there are no arguments on the line. This allows you to
773 applied if there are no arguments on the line. This allows you to
768 just type 'foo' if foo is a callable to see its internal form,
774 just type 'foo' if foo is a callable to see its internal form,
769 instead of having it called with no arguments (typically a
775 instead of having it called with no arguments (typically a
770 mistake). The old 'full' autocall still exists: for that, you
776 mistake). The old 'full' autocall still exists: for that, you
771 need to set the 'autocall' parameter to 2 in your ipythonrc file.
777 need to set the 'autocall' parameter to 2 in your ipythonrc file.
772
778
773 * IPython/completer.py (Completer.attr_matches): add
779 * IPython/completer.py (Completer.attr_matches): add
774 tab-completion support for Enthoughts' traits. After a report by
780 tab-completion support for Enthoughts' traits. After a report by
775 Arnd and a patch by Prabhu.
781 Arnd and a patch by Prabhu.
776
782
777 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
783 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
778
784
779 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
785 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
780 Schmolck's patch to fix inspect.getinnerframes().
786 Schmolck's patch to fix inspect.getinnerframes().
781
787
782 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
788 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
783 for embedded instances, regarding handling of namespaces and items
789 for embedded instances, regarding handling of namespaces and items
784 added to the __builtin__ one. Multiple embedded instances and
790 added to the __builtin__ one. Multiple embedded instances and
785 recursive embeddings should work better now (though I'm not sure
791 recursive embeddings should work better now (though I'm not sure
786 I've got all the corner cases fixed, that code is a bit of a brain
792 I've got all the corner cases fixed, that code is a bit of a brain
787 twister).
793 twister).
788
794
789 * IPython/Magic.py (magic_edit): added support to edit in-memory
795 * IPython/Magic.py (magic_edit): added support to edit in-memory
790 macros (automatically creates the necessary temp files). %edit
796 macros (automatically creates the necessary temp files). %edit
791 also doesn't return the file contents anymore, it's just noise.
797 also doesn't return the file contents anymore, it's just noise.
792
798
793 * IPython/completer.py (Completer.attr_matches): revert change to
799 * IPython/completer.py (Completer.attr_matches): revert change to
794 complete only on attributes listed in __all__. I realized it
800 complete only on attributes listed in __all__. I realized it
795 cripples the tab-completion system as a tool for exploring the
801 cripples the tab-completion system as a tool for exploring the
796 internals of unknown libraries (it renders any non-__all__
802 internals of unknown libraries (it renders any non-__all__
797 attribute off-limits). I got bit by this when trying to see
803 attribute off-limits). I got bit by this when trying to see
798 something inside the dis module.
804 something inside the dis module.
799
805
800 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
806 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
801
807
802 * IPython/iplib.py (InteractiveShell.__init__): add .meta
808 * IPython/iplib.py (InteractiveShell.__init__): add .meta
803 namespace for users and extension writers to hold data in. This
809 namespace for users and extension writers to hold data in. This
804 follows the discussion in
810 follows the discussion in
805 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
811 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
806
812
807 * IPython/completer.py (IPCompleter.complete): small patch to help
813 * IPython/completer.py (IPCompleter.complete): small patch to help
808 tab-completion under Emacs, after a suggestion by John Barnard
814 tab-completion under Emacs, after a suggestion by John Barnard
809 <barnarj-AT-ccf.org>.
815 <barnarj-AT-ccf.org>.
810
816
811 * IPython/Magic.py (Magic.extract_input_slices): added support for
817 * IPython/Magic.py (Magic.extract_input_slices): added support for
812 the slice notation in magics to use N-M to represent numbers N...M
818 the slice notation in magics to use N-M to represent numbers N...M
813 (closed endpoints). This is used by %macro and %save.
819 (closed endpoints). This is used by %macro and %save.
814
820
815 * IPython/completer.py (Completer.attr_matches): for modules which
821 * IPython/completer.py (Completer.attr_matches): for modules which
816 define __all__, complete only on those. After a patch by Jeffrey
822 define __all__, complete only on those. After a patch by Jeffrey
817 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
823 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
818 speed up this routine.
824 speed up this routine.
819
825
820 * IPython/Logger.py (Logger.log): fix a history handling bug. I
826 * IPython/Logger.py (Logger.log): fix a history handling bug. I
821 don't know if this is the end of it, but the behavior now is
827 don't know if this is the end of it, but the behavior now is
822 certainly much more correct. Note that coupled with macros,
828 certainly much more correct. Note that coupled with macros,
823 slightly surprising (at first) behavior may occur: a macro will in
829 slightly surprising (at first) behavior may occur: a macro will in
824 general expand to multiple lines of input, so upon exiting, the
830 general expand to multiple lines of input, so upon exiting, the
825 in/out counters will both be bumped by the corresponding amount
831 in/out counters will both be bumped by the corresponding amount
826 (as if the macro's contents had been typed interactively). Typing
832 (as if the macro's contents had been typed interactively). Typing
827 %hist will reveal the intermediate (silently processed) lines.
833 %hist will reveal the intermediate (silently processed) lines.
828
834
829 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
835 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
830 pickle to fail (%run was overwriting __main__ and not restoring
836 pickle to fail (%run was overwriting __main__ and not restoring
831 it, but pickle relies on __main__ to operate).
837 it, but pickle relies on __main__ to operate).
832
838
833 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
839 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
834 using properties, but forgot to make the main InteractiveShell
840 using properties, but forgot to make the main InteractiveShell
835 class a new-style class. Properties fail silently, and
841 class a new-style class. Properties fail silently, and
836 misteriously, with old-style class (getters work, but
842 misteriously, with old-style class (getters work, but
837 setters don't do anything).
843 setters don't do anything).
838
844
839 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
845 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
840
846
841 * IPython/Magic.py (magic_history): fix history reporting bug (I
847 * IPython/Magic.py (magic_history): fix history reporting bug (I
842 know some nasties are still there, I just can't seem to find a
848 know some nasties are still there, I just can't seem to find a
843 reproducible test case to track them down; the input history is
849 reproducible test case to track them down; the input history is
844 falling out of sync...)
850 falling out of sync...)
845
851
846 * IPython/iplib.py (handle_shell_escape): fix bug where both
852 * IPython/iplib.py (handle_shell_escape): fix bug where both
847 aliases and system accesses where broken for indented code (such
853 aliases and system accesses where broken for indented code (such
848 as loops).
854 as loops).
849
855
850 * IPython/genutils.py (shell): fix small but critical bug for
856 * IPython/genutils.py (shell): fix small but critical bug for
851 win32 system access.
857 win32 system access.
852
858
853 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
859 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
854
860
855 * IPython/iplib.py (showtraceback): remove use of the
861 * IPython/iplib.py (showtraceback): remove use of the
856 sys.last_{type/value/traceback} structures, which are non
862 sys.last_{type/value/traceback} structures, which are non
857 thread-safe.
863 thread-safe.
858 (_prefilter): change control flow to ensure that we NEVER
864 (_prefilter): change control flow to ensure that we NEVER
859 introspect objects when autocall is off. This will guarantee that
865 introspect objects when autocall is off. This will guarantee that
860 having an input line of the form 'x.y', where access to attribute
866 having an input line of the form 'x.y', where access to attribute
861 'y' has side effects, doesn't trigger the side effect TWICE. It
867 'y' has side effects, doesn't trigger the side effect TWICE. It
862 is important to note that, with autocall on, these side effects
868 is important to note that, with autocall on, these side effects
863 can still happen.
869 can still happen.
864 (ipsystem): new builtin, to complete the ip{magic/alias/system}
870 (ipsystem): new builtin, to complete the ip{magic/alias/system}
865 trio. IPython offers these three kinds of special calls which are
871 trio. IPython offers these three kinds of special calls which are
866 not python code, and it's a good thing to have their call method
872 not python code, and it's a good thing to have their call method
867 be accessible as pure python functions (not just special syntax at
873 be accessible as pure python functions (not just special syntax at
868 the command line). It gives us a better internal implementation
874 the command line). It gives us a better internal implementation
869 structure, as well as exposing these for user scripting more
875 structure, as well as exposing these for user scripting more
870 cleanly.
876 cleanly.
871
877
872 * IPython/macro.py (Macro.__init__): moved macros to a standalone
878 * IPython/macro.py (Macro.__init__): moved macros to a standalone
873 file. Now that they'll be more likely to be used with the
879 file. Now that they'll be more likely to be used with the
874 persistance system (%store), I want to make sure their module path
880 persistance system (%store), I want to make sure their module path
875 doesn't change in the future, so that we don't break things for
881 doesn't change in the future, so that we don't break things for
876 users' persisted data.
882 users' persisted data.
877
883
878 * IPython/iplib.py (autoindent_update): move indentation
884 * IPython/iplib.py (autoindent_update): move indentation
879 management into the _text_ processing loop, not the keyboard
885 management into the _text_ processing loop, not the keyboard
880 interactive one. This is necessary to correctly process non-typed
886 interactive one. This is necessary to correctly process non-typed
881 multiline input (such as macros).
887 multiline input (such as macros).
882
888
883 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
889 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
884 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
890 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
885 which was producing problems in the resulting manual.
891 which was producing problems in the resulting manual.
886 (magic_whos): improve reporting of instances (show their class,
892 (magic_whos): improve reporting of instances (show their class,
887 instead of simply printing 'instance' which isn't terribly
893 instead of simply printing 'instance' which isn't terribly
888 informative).
894 informative).
889
895
890 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
896 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
891 (minor mods) to support network shares under win32.
897 (minor mods) to support network shares under win32.
892
898
893 * IPython/winconsole.py (get_console_size): add new winconsole
899 * IPython/winconsole.py (get_console_size): add new winconsole
894 module and fixes to page_dumb() to improve its behavior under
900 module and fixes to page_dumb() to improve its behavior under
895 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
901 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
896
902
897 * IPython/Magic.py (Macro): simplified Macro class to just
903 * IPython/Magic.py (Macro): simplified Macro class to just
898 subclass list. We've had only 2.2 compatibility for a very long
904 subclass list. We've had only 2.2 compatibility for a very long
899 time, yet I was still avoiding subclassing the builtin types. No
905 time, yet I was still avoiding subclassing the builtin types. No
900 more (I'm also starting to use properties, though I won't shift to
906 more (I'm also starting to use properties, though I won't shift to
901 2.3-specific features quite yet).
907 2.3-specific features quite yet).
902 (magic_store): added Ville's patch for lightweight variable
908 (magic_store): added Ville's patch for lightweight variable
903 persistence, after a request on the user list by Matt Wilkie
909 persistence, after a request on the user list by Matt Wilkie
904 <maphew-AT-gmail.com>. The new %store magic's docstring has full
910 <maphew-AT-gmail.com>. The new %store magic's docstring has full
905 details.
911 details.
906
912
907 * IPython/iplib.py (InteractiveShell.post_config_initialization):
913 * IPython/iplib.py (InteractiveShell.post_config_initialization):
908 changed the default logfile name from 'ipython.log' to
914 changed the default logfile name from 'ipython.log' to
909 'ipython_log.py'. These logs are real python files, and now that
915 'ipython_log.py'. These logs are real python files, and now that
910 we have much better multiline support, people are more likely to
916 we have much better multiline support, people are more likely to
911 want to use them as such. Might as well name them correctly.
917 want to use them as such. Might as well name them correctly.
912
918
913 * IPython/Magic.py: substantial cleanup. While we can't stop
919 * IPython/Magic.py: substantial cleanup. While we can't stop
914 using magics as mixins, due to the existing customizations 'out
920 using magics as mixins, due to the existing customizations 'out
915 there' which rely on the mixin naming conventions, at least I
921 there' which rely on the mixin naming conventions, at least I
916 cleaned out all cross-class name usage. So once we are OK with
922 cleaned out all cross-class name usage. So once we are OK with
917 breaking compatibility, the two systems can be separated.
923 breaking compatibility, the two systems can be separated.
918
924
919 * IPython/Logger.py: major cleanup. This one is NOT a mixin
925 * IPython/Logger.py: major cleanup. This one is NOT a mixin
920 anymore, and the class is a fair bit less hideous as well. New
926 anymore, and the class is a fair bit less hideous as well. New
921 features were also introduced: timestamping of input, and logging
927 features were also introduced: timestamping of input, and logging
922 of output results. These are user-visible with the -t and -o
928 of output results. These are user-visible with the -t and -o
923 options to %logstart. Closes
929 options to %logstart. Closes
924 http://www.scipy.net/roundup/ipython/issue11 and a request by
930 http://www.scipy.net/roundup/ipython/issue11 and a request by
925 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
931 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
926
932
927 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
933 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
928
934
929 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
935 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
930 better hadnle backslashes in paths. See the thread 'More Windows
936 better hadnle backslashes in paths. See the thread 'More Windows
931 questions part 2 - \/ characters revisited' on the iypthon user
937 questions part 2 - \/ characters revisited' on the iypthon user
932 list:
938 list:
933 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
939 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
934
940
935 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
941 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
936
942
937 (InteractiveShell.__init__): change threaded shells to not use the
943 (InteractiveShell.__init__): change threaded shells to not use the
938 ipython crash handler. This was causing more problems than not,
944 ipython crash handler. This was causing more problems than not,
939 as exceptions in the main thread (GUI code, typically) would
945 as exceptions in the main thread (GUI code, typically) would
940 always show up as a 'crash', when they really weren't.
946 always show up as a 'crash', when they really weren't.
941
947
942 The colors and exception mode commands (%colors/%xmode) have been
948 The colors and exception mode commands (%colors/%xmode) have been
943 synchronized to also take this into account, so users can get
949 synchronized to also take this into account, so users can get
944 verbose exceptions for their threaded code as well. I also added
950 verbose exceptions for their threaded code as well. I also added
945 support for activating pdb inside this exception handler as well,
951 support for activating pdb inside this exception handler as well,
946 so now GUI authors can use IPython's enhanced pdb at runtime.
952 so now GUI authors can use IPython's enhanced pdb at runtime.
947
953
948 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
954 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
949 true by default, and add it to the shipped ipythonrc file. Since
955 true by default, and add it to the shipped ipythonrc file. Since
950 this asks the user before proceeding, I think it's OK to make it
956 this asks the user before proceeding, I think it's OK to make it
951 true by default.
957 true by default.
952
958
953 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
959 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
954 of the previous special-casing of input in the eval loop. I think
960 of the previous special-casing of input in the eval loop. I think
955 this is cleaner, as they really are commands and shouldn't have
961 this is cleaner, as they really are commands and shouldn't have
956 a special role in the middle of the core code.
962 a special role in the middle of the core code.
957
963
958 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
964 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
959
965
960 * IPython/iplib.py (edit_syntax_error): added support for
966 * IPython/iplib.py (edit_syntax_error): added support for
961 automatically reopening the editor if the file had a syntax error
967 automatically reopening the editor if the file had a syntax error
962 in it. Thanks to scottt who provided the patch at:
968 in it. Thanks to scottt who provided the patch at:
963 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
969 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
964 version committed).
970 version committed).
965
971
966 * IPython/iplib.py (handle_normal): add suport for multi-line
972 * IPython/iplib.py (handle_normal): add suport for multi-line
967 input with emtpy lines. This fixes
973 input with emtpy lines. This fixes
968 http://www.scipy.net/roundup/ipython/issue43 and a similar
974 http://www.scipy.net/roundup/ipython/issue43 and a similar
969 discussion on the user list.
975 discussion on the user list.
970
976
971 WARNING: a behavior change is necessarily introduced to support
977 WARNING: a behavior change is necessarily introduced to support
972 blank lines: now a single blank line with whitespace does NOT
978 blank lines: now a single blank line with whitespace does NOT
973 break the input loop, which means that when autoindent is on, by
979 break the input loop, which means that when autoindent is on, by
974 default hitting return on the next (indented) line does NOT exit.
980 default hitting return on the next (indented) line does NOT exit.
975
981
976 Instead, to exit a multiline input you can either have:
982 Instead, to exit a multiline input you can either have:
977
983
978 - TWO whitespace lines (just hit return again), or
984 - TWO whitespace lines (just hit return again), or
979 - a single whitespace line of a different length than provided
985 - a single whitespace line of a different length than provided
980 by the autoindent (add or remove a space).
986 by the autoindent (add or remove a space).
981
987
982 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
988 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
983 module to better organize all readline-related functionality.
989 module to better organize all readline-related functionality.
984 I've deleted FlexCompleter and put all completion clases here.
990 I've deleted FlexCompleter and put all completion clases here.
985
991
986 * IPython/iplib.py (raw_input): improve indentation management.
992 * IPython/iplib.py (raw_input): improve indentation management.
987 It is now possible to paste indented code with autoindent on, and
993 It is now possible to paste indented code with autoindent on, and
988 the code is interpreted correctly (though it still looks bad on
994 the code is interpreted correctly (though it still looks bad on
989 screen, due to the line-oriented nature of ipython).
995 screen, due to the line-oriented nature of ipython).
990 (MagicCompleter.complete): change behavior so that a TAB key on an
996 (MagicCompleter.complete): change behavior so that a TAB key on an
991 otherwise empty line actually inserts a tab, instead of completing
997 otherwise empty line actually inserts a tab, instead of completing
992 on the entire global namespace. This makes it easier to use the
998 on the entire global namespace. This makes it easier to use the
993 TAB key for indentation. After a request by Hans Meine
999 TAB key for indentation. After a request by Hans Meine
994 <hans_meine-AT-gmx.net>
1000 <hans_meine-AT-gmx.net>
995 (_prefilter): add support so that typing plain 'exit' or 'quit'
1001 (_prefilter): add support so that typing plain 'exit' or 'quit'
996 does a sensible thing. Originally I tried to deviate as little as
1002 does a sensible thing. Originally I tried to deviate as little as
997 possible from the default python behavior, but even that one may
1003 possible from the default python behavior, but even that one may
998 change in this direction (thread on python-dev to that effect).
1004 change in this direction (thread on python-dev to that effect).
999 Regardless, ipython should do the right thing even if CPython's
1005 Regardless, ipython should do the right thing even if CPython's
1000 '>>>' prompt doesn't.
1006 '>>>' prompt doesn't.
1001 (InteractiveShell): removed subclassing code.InteractiveConsole
1007 (InteractiveShell): removed subclassing code.InteractiveConsole
1002 class. By now we'd overridden just about all of its methods: I've
1008 class. By now we'd overridden just about all of its methods: I've
1003 copied the remaining two over, and now ipython is a standalone
1009 copied the remaining two over, and now ipython is a standalone
1004 class. This will provide a clearer picture for the chainsaw
1010 class. This will provide a clearer picture for the chainsaw
1005 branch refactoring.
1011 branch refactoring.
1006
1012
1007 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1013 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1008
1014
1009 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1015 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1010 failures for objects which break when dir() is called on them.
1016 failures for objects which break when dir() is called on them.
1011
1017
1012 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1018 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1013 distinct local and global namespaces in the completer API. This
1019 distinct local and global namespaces in the completer API. This
1014 change allows us top properly handle completion with distinct
1020 change allows us top properly handle completion with distinct
1015 scopes, including in embedded instances (this had never really
1021 scopes, including in embedded instances (this had never really
1016 worked correctly).
1022 worked correctly).
1017
1023
1018 Note: this introduces a change in the constructor for
1024 Note: this introduces a change in the constructor for
1019 MagicCompleter, as a new global_namespace parameter is now the
1025 MagicCompleter, as a new global_namespace parameter is now the
1020 second argument (the others were bumped one position).
1026 second argument (the others were bumped one position).
1021
1027
1022 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1028 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1023
1029
1024 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1030 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1025 embedded instances (which can be done now thanks to Vivian's
1031 embedded instances (which can be done now thanks to Vivian's
1026 frame-handling fixes for pdb).
1032 frame-handling fixes for pdb).
1027 (InteractiveShell.__init__): Fix namespace handling problem in
1033 (InteractiveShell.__init__): Fix namespace handling problem in
1028 embedded instances. We were overwriting __main__ unconditionally,
1034 embedded instances. We were overwriting __main__ unconditionally,
1029 and this should only be done for 'full' (non-embedded) IPython;
1035 and this should only be done for 'full' (non-embedded) IPython;
1030 embedded instances must respect the caller's __main__. Thanks to
1036 embedded instances must respect the caller's __main__. Thanks to
1031 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1037 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1032
1038
1033 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1039 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1034
1040
1035 * setup.py: added download_url to setup(). This registers the
1041 * setup.py: added download_url to setup(). This registers the
1036 download address at PyPI, which is not only useful to humans
1042 download address at PyPI, which is not only useful to humans
1037 browsing the site, but is also picked up by setuptools (the Eggs
1043 browsing the site, but is also picked up by setuptools (the Eggs
1038 machinery). Thanks to Ville and R. Kern for the info/discussion
1044 machinery). Thanks to Ville and R. Kern for the info/discussion
1039 on this.
1045 on this.
1040
1046
1041 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1047 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1042
1048
1043 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1049 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1044 This brings a lot of nice functionality to the pdb mode, which now
1050 This brings a lot of nice functionality to the pdb mode, which now
1045 has tab-completion, syntax highlighting, and better stack handling
1051 has tab-completion, syntax highlighting, and better stack handling
1046 than before. Many thanks to Vivian De Smedt
1052 than before. Many thanks to Vivian De Smedt
1047 <vivian-AT-vdesmedt.com> for the original patches.
1053 <vivian-AT-vdesmedt.com> for the original patches.
1048
1054
1049 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1055 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1050
1056
1051 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1057 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1052 sequence to consistently accept the banner argument. The
1058 sequence to consistently accept the banner argument. The
1053 inconsistency was tripping SAGE, thanks to Gary Zablackis
1059 inconsistency was tripping SAGE, thanks to Gary Zablackis
1054 <gzabl-AT-yahoo.com> for the report.
1060 <gzabl-AT-yahoo.com> for the report.
1055
1061
1056 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1062 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1057
1063
1058 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1064 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1059 Fix bug where a naked 'alias' call in the ipythonrc file would
1065 Fix bug where a naked 'alias' call in the ipythonrc file would
1060 cause a crash. Bug reported by Jorgen Stenarson.
1066 cause a crash. Bug reported by Jorgen Stenarson.
1061
1067
1062 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1068 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1063
1069
1064 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1070 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1065 startup time.
1071 startup time.
1066
1072
1067 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1073 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1068 instances had introduced a bug with globals in normal code. Now
1074 instances had introduced a bug with globals in normal code. Now
1069 it's working in all cases.
1075 it's working in all cases.
1070
1076
1071 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1077 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1072 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1078 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1073 has been introduced to set the default case sensitivity of the
1079 has been introduced to set the default case sensitivity of the
1074 searches. Users can still select either mode at runtime on a
1080 searches. Users can still select either mode at runtime on a
1075 per-search basis.
1081 per-search basis.
1076
1082
1077 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1083 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1078
1084
1079 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1085 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1080 attributes in wildcard searches for subclasses. Modified version
1086 attributes in wildcard searches for subclasses. Modified version
1081 of a patch by Jorgen.
1087 of a patch by Jorgen.
1082
1088
1083 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1089 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1084
1090
1085 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1091 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1086 embedded instances. I added a user_global_ns attribute to the
1092 embedded instances. I added a user_global_ns attribute to the
1087 InteractiveShell class to handle this.
1093 InteractiveShell class to handle this.
1088
1094
1089 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1095 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1090
1096
1091 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1097 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1092 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1098 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1093 (reported under win32, but may happen also in other platforms).
1099 (reported under win32, but may happen also in other platforms).
1094 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1100 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1095
1101
1096 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1102 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1097
1103
1098 * IPython/Magic.py (magic_psearch): new support for wildcard
1104 * IPython/Magic.py (magic_psearch): new support for wildcard
1099 patterns. Now, typing ?a*b will list all names which begin with a
1105 patterns. Now, typing ?a*b will list all names which begin with a
1100 and end in b, for example. The %psearch magic has full
1106 and end in b, for example. The %psearch magic has full
1101 docstrings. Many thanks to JΓΆrgen Stenarson
1107 docstrings. Many thanks to JΓΆrgen Stenarson
1102 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1108 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1103 implementing this functionality.
1109 implementing this functionality.
1104
1110
1105 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1111 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1106
1112
1107 * Manual: fixed long-standing annoyance of double-dashes (as in
1113 * Manual: fixed long-standing annoyance of double-dashes (as in
1108 --prefix=~, for example) being stripped in the HTML version. This
1114 --prefix=~, for example) being stripped in the HTML version. This
1109 is a latex2html bug, but a workaround was provided. Many thanks
1115 is a latex2html bug, but a workaround was provided. Many thanks
1110 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1116 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1111 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1117 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1112 rolling. This seemingly small issue had tripped a number of users
1118 rolling. This seemingly small issue had tripped a number of users
1113 when first installing, so I'm glad to see it gone.
1119 when first installing, so I'm glad to see it gone.
1114
1120
1115 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1121 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1116
1122
1117 * IPython/Extensions/numeric_formats.py: fix missing import,
1123 * IPython/Extensions/numeric_formats.py: fix missing import,
1118 reported by Stephen Walton.
1124 reported by Stephen Walton.
1119
1125
1120 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1126 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1121
1127
1122 * IPython/demo.py: finish demo module, fully documented now.
1128 * IPython/demo.py: finish demo module, fully documented now.
1123
1129
1124 * IPython/genutils.py (file_read): simple little utility to read a
1130 * IPython/genutils.py (file_read): simple little utility to read a
1125 file and ensure it's closed afterwards.
1131 file and ensure it's closed afterwards.
1126
1132
1127 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1133 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1128
1134
1129 * IPython/demo.py (Demo.__init__): added support for individually
1135 * IPython/demo.py (Demo.__init__): added support for individually
1130 tagging blocks for automatic execution.
1136 tagging blocks for automatic execution.
1131
1137
1132 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1138 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1133 syntax-highlighted python sources, requested by John.
1139 syntax-highlighted python sources, requested by John.
1134
1140
1135 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1141 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1136
1142
1137 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1143 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1138 finishing.
1144 finishing.
1139
1145
1140 * IPython/genutils.py (shlex_split): moved from Magic to here,
1146 * IPython/genutils.py (shlex_split): moved from Magic to here,
1141 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1147 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1142
1148
1143 * IPython/demo.py (Demo.__init__): added support for silent
1149 * IPython/demo.py (Demo.__init__): added support for silent
1144 blocks, improved marks as regexps, docstrings written.
1150 blocks, improved marks as regexps, docstrings written.
1145 (Demo.__init__): better docstring, added support for sys.argv.
1151 (Demo.__init__): better docstring, added support for sys.argv.
1146
1152
1147 * IPython/genutils.py (marquee): little utility used by the demo
1153 * IPython/genutils.py (marquee): little utility used by the demo
1148 code, handy in general.
1154 code, handy in general.
1149
1155
1150 * IPython/demo.py (Demo.__init__): new class for interactive
1156 * IPython/demo.py (Demo.__init__): new class for interactive
1151 demos. Not documented yet, I just wrote it in a hurry for
1157 demos. Not documented yet, I just wrote it in a hurry for
1152 scipy'05. Will docstring later.
1158 scipy'05. Will docstring later.
1153
1159
1154 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1160 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1155
1161
1156 * IPython/Shell.py (sigint_handler): Drastic simplification which
1162 * IPython/Shell.py (sigint_handler): Drastic simplification which
1157 also seems to make Ctrl-C work correctly across threads! This is
1163 also seems to make Ctrl-C work correctly across threads! This is
1158 so simple, that I can't beleive I'd missed it before. Needs more
1164 so simple, that I can't beleive I'd missed it before. Needs more
1159 testing, though.
1165 testing, though.
1160 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1166 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1161 like this before...
1167 like this before...
1162
1168
1163 * IPython/genutils.py (get_home_dir): add protection against
1169 * IPython/genutils.py (get_home_dir): add protection against
1164 non-dirs in win32 registry.
1170 non-dirs in win32 registry.
1165
1171
1166 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1172 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1167 bug where dict was mutated while iterating (pysh crash).
1173 bug where dict was mutated while iterating (pysh crash).
1168
1174
1169 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1175 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1170
1176
1171 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1177 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1172 spurious newlines added by this routine. After a report by
1178 spurious newlines added by this routine. After a report by
1173 F. Mantegazza.
1179 F. Mantegazza.
1174
1180
1175 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1181 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1176
1182
1177 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1183 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1178 calls. These were a leftover from the GTK 1.x days, and can cause
1184 calls. These were a leftover from the GTK 1.x days, and can cause
1179 problems in certain cases (after a report by John Hunter).
1185 problems in certain cases (after a report by John Hunter).
1180
1186
1181 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1187 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1182 os.getcwd() fails at init time. Thanks to patch from David Remahl
1188 os.getcwd() fails at init time. Thanks to patch from David Remahl
1183 <chmod007-AT-mac.com>.
1189 <chmod007-AT-mac.com>.
1184 (InteractiveShell.__init__): prevent certain special magics from
1190 (InteractiveShell.__init__): prevent certain special magics from
1185 being shadowed by aliases. Closes
1191 being shadowed by aliases. Closes
1186 http://www.scipy.net/roundup/ipython/issue41.
1192 http://www.scipy.net/roundup/ipython/issue41.
1187
1193
1188 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1194 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1189
1195
1190 * IPython/iplib.py (InteractiveShell.complete): Added new
1196 * IPython/iplib.py (InteractiveShell.complete): Added new
1191 top-level completion method to expose the completion mechanism
1197 top-level completion method to expose the completion mechanism
1192 beyond readline-based environments.
1198 beyond readline-based environments.
1193
1199
1194 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1200 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1195
1201
1196 * tools/ipsvnc (svnversion): fix svnversion capture.
1202 * tools/ipsvnc (svnversion): fix svnversion capture.
1197
1203
1198 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1204 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1199 attribute to self, which was missing. Before, it was set by a
1205 attribute to self, which was missing. Before, it was set by a
1200 routine which in certain cases wasn't being called, so the
1206 routine which in certain cases wasn't being called, so the
1201 instance could end up missing the attribute. This caused a crash.
1207 instance could end up missing the attribute. This caused a crash.
1202 Closes http://www.scipy.net/roundup/ipython/issue40.
1208 Closes http://www.scipy.net/roundup/ipython/issue40.
1203
1209
1204 2005-08-16 Fernando Perez <fperez@colorado.edu>
1210 2005-08-16 Fernando Perez <fperez@colorado.edu>
1205
1211
1206 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1212 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1207 contains non-string attribute. Closes
1213 contains non-string attribute. Closes
1208 http://www.scipy.net/roundup/ipython/issue38.
1214 http://www.scipy.net/roundup/ipython/issue38.
1209
1215
1210 2005-08-14 Fernando Perez <fperez@colorado.edu>
1216 2005-08-14 Fernando Perez <fperez@colorado.edu>
1211
1217
1212 * tools/ipsvnc: Minor improvements, to add changeset info.
1218 * tools/ipsvnc: Minor improvements, to add changeset info.
1213
1219
1214 2005-08-12 Fernando Perez <fperez@colorado.edu>
1220 2005-08-12 Fernando Perez <fperez@colorado.edu>
1215
1221
1216 * IPython/iplib.py (runsource): remove self.code_to_run_src
1222 * IPython/iplib.py (runsource): remove self.code_to_run_src
1217 attribute. I realized this is nothing more than
1223 attribute. I realized this is nothing more than
1218 '\n'.join(self.buffer), and having the same data in two different
1224 '\n'.join(self.buffer), and having the same data in two different
1219 places is just asking for synchronization bugs. This may impact
1225 places is just asking for synchronization bugs. This may impact
1220 people who have custom exception handlers, so I need to warn
1226 people who have custom exception handlers, so I need to warn
1221 ipython-dev about it (F. Mantegazza may use them).
1227 ipython-dev about it (F. Mantegazza may use them).
1222
1228
1223 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1229 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1224
1230
1225 * IPython/genutils.py: fix 2.2 compatibility (generators)
1231 * IPython/genutils.py: fix 2.2 compatibility (generators)
1226
1232
1227 2005-07-18 Fernando Perez <fperez@colorado.edu>
1233 2005-07-18 Fernando Perez <fperez@colorado.edu>
1228
1234
1229 * IPython/genutils.py (get_home_dir): fix to help users with
1235 * IPython/genutils.py (get_home_dir): fix to help users with
1230 invalid $HOME under win32.
1236 invalid $HOME under win32.
1231
1237
1232 2005-07-17 Fernando Perez <fperez@colorado.edu>
1238 2005-07-17 Fernando Perez <fperez@colorado.edu>
1233
1239
1234 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1240 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1235 some old hacks and clean up a bit other routines; code should be
1241 some old hacks and clean up a bit other routines; code should be
1236 simpler and a bit faster.
1242 simpler and a bit faster.
1237
1243
1238 * IPython/iplib.py (interact): removed some last-resort attempts
1244 * IPython/iplib.py (interact): removed some last-resort attempts
1239 to survive broken stdout/stderr. That code was only making it
1245 to survive broken stdout/stderr. That code was only making it
1240 harder to abstract out the i/o (necessary for gui integration),
1246 harder to abstract out the i/o (necessary for gui integration),
1241 and the crashes it could prevent were extremely rare in practice
1247 and the crashes it could prevent were extremely rare in practice
1242 (besides being fully user-induced in a pretty violent manner).
1248 (besides being fully user-induced in a pretty violent manner).
1243
1249
1244 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1250 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1245 Nothing major yet, but the code is simpler to read; this should
1251 Nothing major yet, but the code is simpler to read; this should
1246 make it easier to do more serious modifications in the future.
1252 make it easier to do more serious modifications in the future.
1247
1253
1248 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1254 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1249 which broke in .15 (thanks to a report by Ville).
1255 which broke in .15 (thanks to a report by Ville).
1250
1256
1251 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1257 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1252 be quite correct, I know next to nothing about unicode). This
1258 be quite correct, I know next to nothing about unicode). This
1253 will allow unicode strings to be used in prompts, amongst other
1259 will allow unicode strings to be used in prompts, amongst other
1254 cases. It also will prevent ipython from crashing when unicode
1260 cases. It also will prevent ipython from crashing when unicode
1255 shows up unexpectedly in many places. If ascii encoding fails, we
1261 shows up unexpectedly in many places. If ascii encoding fails, we
1256 assume utf_8. Currently the encoding is not a user-visible
1262 assume utf_8. Currently the encoding is not a user-visible
1257 setting, though it could be made so if there is demand for it.
1263 setting, though it could be made so if there is demand for it.
1258
1264
1259 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1265 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1260
1266
1261 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1267 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1262
1268
1263 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1269 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1264
1270
1265 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1271 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1266 code can work transparently for 2.2/2.3.
1272 code can work transparently for 2.2/2.3.
1267
1273
1268 2005-07-16 Fernando Perez <fperez@colorado.edu>
1274 2005-07-16 Fernando Perez <fperez@colorado.edu>
1269
1275
1270 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1276 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1271 out of the color scheme table used for coloring exception
1277 out of the color scheme table used for coloring exception
1272 tracebacks. This allows user code to add new schemes at runtime.
1278 tracebacks. This allows user code to add new schemes at runtime.
1273 This is a minimally modified version of the patch at
1279 This is a minimally modified version of the patch at
1274 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1280 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1275 for the contribution.
1281 for the contribution.
1276
1282
1277 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1283 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1278 slightly modified version of the patch in
1284 slightly modified version of the patch in
1279 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1285 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1280 to remove the previous try/except solution (which was costlier).
1286 to remove the previous try/except solution (which was costlier).
1281 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1287 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1282
1288
1283 2005-06-08 Fernando Perez <fperez@colorado.edu>
1289 2005-06-08 Fernando Perez <fperez@colorado.edu>
1284
1290
1285 * IPython/iplib.py (write/write_err): Add methods to abstract all
1291 * IPython/iplib.py (write/write_err): Add methods to abstract all
1286 I/O a bit more.
1292 I/O a bit more.
1287
1293
1288 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1294 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1289 warning, reported by Aric Hagberg, fix by JD Hunter.
1295 warning, reported by Aric Hagberg, fix by JD Hunter.
1290
1296
1291 2005-06-02 *** Released version 0.6.15
1297 2005-06-02 *** Released version 0.6.15
1292
1298
1293 2005-06-01 Fernando Perez <fperez@colorado.edu>
1299 2005-06-01 Fernando Perez <fperez@colorado.edu>
1294
1300
1295 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1301 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1296 tab-completion of filenames within open-quoted strings. Note that
1302 tab-completion of filenames within open-quoted strings. Note that
1297 this requires that in ~/.ipython/ipythonrc, users change the
1303 this requires that in ~/.ipython/ipythonrc, users change the
1298 readline delimiters configuration to read:
1304 readline delimiters configuration to read:
1299
1305
1300 readline_remove_delims -/~
1306 readline_remove_delims -/~
1301
1307
1302
1308
1303 2005-05-31 *** Released version 0.6.14
1309 2005-05-31 *** Released version 0.6.14
1304
1310
1305 2005-05-29 Fernando Perez <fperez@colorado.edu>
1311 2005-05-29 Fernando Perez <fperez@colorado.edu>
1306
1312
1307 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1313 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1308 with files not on the filesystem. Reported by Eliyahu Sandler
1314 with files not on the filesystem. Reported by Eliyahu Sandler
1309 <eli@gondolin.net>
1315 <eli@gondolin.net>
1310
1316
1311 2005-05-22 Fernando Perez <fperez@colorado.edu>
1317 2005-05-22 Fernando Perez <fperez@colorado.edu>
1312
1318
1313 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1319 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1314 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1320 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1315
1321
1316 2005-05-19 Fernando Perez <fperez@colorado.edu>
1322 2005-05-19 Fernando Perez <fperez@colorado.edu>
1317
1323
1318 * IPython/iplib.py (safe_execfile): close a file which could be
1324 * IPython/iplib.py (safe_execfile): close a file which could be
1319 left open (causing problems in win32, which locks open files).
1325 left open (causing problems in win32, which locks open files).
1320 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1326 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1321
1327
1322 2005-05-18 Fernando Perez <fperez@colorado.edu>
1328 2005-05-18 Fernando Perez <fperez@colorado.edu>
1323
1329
1324 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1330 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1325 keyword arguments correctly to safe_execfile().
1331 keyword arguments correctly to safe_execfile().
1326
1332
1327 2005-05-13 Fernando Perez <fperez@colorado.edu>
1333 2005-05-13 Fernando Perez <fperez@colorado.edu>
1328
1334
1329 * ipython.1: Added info about Qt to manpage, and threads warning
1335 * ipython.1: Added info about Qt to manpage, and threads warning
1330 to usage page (invoked with --help).
1336 to usage page (invoked with --help).
1331
1337
1332 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1338 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1333 new matcher (it goes at the end of the priority list) to do
1339 new matcher (it goes at the end of the priority list) to do
1334 tab-completion on named function arguments. Submitted by George
1340 tab-completion on named function arguments. Submitted by George
1335 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1341 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1336 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1342 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1337 for more details.
1343 for more details.
1338
1344
1339 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1345 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1340 SystemExit exceptions in the script being run. Thanks to a report
1346 SystemExit exceptions in the script being run. Thanks to a report
1341 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1347 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1342 producing very annoying behavior when running unit tests.
1348 producing very annoying behavior when running unit tests.
1343
1349
1344 2005-05-12 Fernando Perez <fperez@colorado.edu>
1350 2005-05-12 Fernando Perez <fperez@colorado.edu>
1345
1351
1346 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1352 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1347 which I'd broken (again) due to a changed regexp. In the process,
1353 which I'd broken (again) due to a changed regexp. In the process,
1348 added ';' as an escape to auto-quote the whole line without
1354 added ';' as an escape to auto-quote the whole line without
1349 splitting its arguments. Thanks to a report by Jerry McRae
1355 splitting its arguments. Thanks to a report by Jerry McRae
1350 <qrs0xyc02-AT-sneakemail.com>.
1356 <qrs0xyc02-AT-sneakemail.com>.
1351
1357
1352 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1358 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1353 possible crashes caused by a TokenError. Reported by Ed Schofield
1359 possible crashes caused by a TokenError. Reported by Ed Schofield
1354 <schofield-AT-ftw.at>.
1360 <schofield-AT-ftw.at>.
1355
1361
1356 2005-05-06 Fernando Perez <fperez@colorado.edu>
1362 2005-05-06 Fernando Perez <fperez@colorado.edu>
1357
1363
1358 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1364 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1359
1365
1360 2005-04-29 Fernando Perez <fperez@colorado.edu>
1366 2005-04-29 Fernando Perez <fperez@colorado.edu>
1361
1367
1362 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1368 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1363 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1369 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1364 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1370 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1365 which provides support for Qt interactive usage (similar to the
1371 which provides support for Qt interactive usage (similar to the
1366 existing one for WX and GTK). This had been often requested.
1372 existing one for WX and GTK). This had been often requested.
1367
1373
1368 2005-04-14 *** Released version 0.6.13
1374 2005-04-14 *** Released version 0.6.13
1369
1375
1370 2005-04-08 Fernando Perez <fperez@colorado.edu>
1376 2005-04-08 Fernando Perez <fperez@colorado.edu>
1371
1377
1372 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1378 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1373 from _ofind, which gets called on almost every input line. Now,
1379 from _ofind, which gets called on almost every input line. Now,
1374 we only try to get docstrings if they are actually going to be
1380 we only try to get docstrings if they are actually going to be
1375 used (the overhead of fetching unnecessary docstrings can be
1381 used (the overhead of fetching unnecessary docstrings can be
1376 noticeable for certain objects, such as Pyro proxies).
1382 noticeable for certain objects, such as Pyro proxies).
1377
1383
1378 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1384 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1379 for completers. For some reason I had been passing them the state
1385 for completers. For some reason I had been passing them the state
1380 variable, which completers never actually need, and was in
1386 variable, which completers never actually need, and was in
1381 conflict with the rlcompleter API. Custom completers ONLY need to
1387 conflict with the rlcompleter API. Custom completers ONLY need to
1382 take the text parameter.
1388 take the text parameter.
1383
1389
1384 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1390 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1385 work correctly in pysh. I've also moved all the logic which used
1391 work correctly in pysh. I've also moved all the logic which used
1386 to be in pysh.py here, which will prevent problems with future
1392 to be in pysh.py here, which will prevent problems with future
1387 upgrades. However, this time I must warn users to update their
1393 upgrades. However, this time I must warn users to update their
1388 pysh profile to include the line
1394 pysh profile to include the line
1389
1395
1390 import_all IPython.Extensions.InterpreterExec
1396 import_all IPython.Extensions.InterpreterExec
1391
1397
1392 because otherwise things won't work for them. They MUST also
1398 because otherwise things won't work for them. They MUST also
1393 delete pysh.py and the line
1399 delete pysh.py and the line
1394
1400
1395 execfile pysh.py
1401 execfile pysh.py
1396
1402
1397 from their ipythonrc-pysh.
1403 from their ipythonrc-pysh.
1398
1404
1399 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1405 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1400 robust in the face of objects whose dir() returns non-strings
1406 robust in the face of objects whose dir() returns non-strings
1401 (which it shouldn't, but some broken libs like ITK do). Thanks to
1407 (which it shouldn't, but some broken libs like ITK do). Thanks to
1402 a patch by John Hunter (implemented differently, though). Also
1408 a patch by John Hunter (implemented differently, though). Also
1403 minor improvements by using .extend instead of + on lists.
1409 minor improvements by using .extend instead of + on lists.
1404
1410
1405 * pysh.py:
1411 * pysh.py:
1406
1412
1407 2005-04-06 Fernando Perez <fperez@colorado.edu>
1413 2005-04-06 Fernando Perez <fperez@colorado.edu>
1408
1414
1409 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1415 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1410 by default, so that all users benefit from it. Those who don't
1416 by default, so that all users benefit from it. Those who don't
1411 want it can still turn it off.
1417 want it can still turn it off.
1412
1418
1413 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1419 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1414 config file, I'd forgotten about this, so users were getting it
1420 config file, I'd forgotten about this, so users were getting it
1415 off by default.
1421 off by default.
1416
1422
1417 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1423 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1418 consistency. Now magics can be called in multiline statements,
1424 consistency. Now magics can be called in multiline statements,
1419 and python variables can be expanded in magic calls via $var.
1425 and python variables can be expanded in magic calls via $var.
1420 This makes the magic system behave just like aliases or !system
1426 This makes the magic system behave just like aliases or !system
1421 calls.
1427 calls.
1422
1428
1423 2005-03-28 Fernando Perez <fperez@colorado.edu>
1429 2005-03-28 Fernando Perez <fperez@colorado.edu>
1424
1430
1425 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1431 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1426 expensive string additions for building command. Add support for
1432 expensive string additions for building command. Add support for
1427 trailing ';' when autocall is used.
1433 trailing ';' when autocall is used.
1428
1434
1429 2005-03-26 Fernando Perez <fperez@colorado.edu>
1435 2005-03-26 Fernando Perez <fperez@colorado.edu>
1430
1436
1431 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1437 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1432 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1438 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1433 ipython.el robust against prompts with any number of spaces
1439 ipython.el robust against prompts with any number of spaces
1434 (including 0) after the ':' character.
1440 (including 0) after the ':' character.
1435
1441
1436 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1442 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1437 continuation prompt, which misled users to think the line was
1443 continuation prompt, which misled users to think the line was
1438 already indented. Closes debian Bug#300847, reported to me by
1444 already indented. Closes debian Bug#300847, reported to me by
1439 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1445 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1440
1446
1441 2005-03-23 Fernando Perez <fperez@colorado.edu>
1447 2005-03-23 Fernando Perez <fperez@colorado.edu>
1442
1448
1443 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1449 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1444 properly aligned if they have embedded newlines.
1450 properly aligned if they have embedded newlines.
1445
1451
1446 * IPython/iplib.py (runlines): Add a public method to expose
1452 * IPython/iplib.py (runlines): Add a public method to expose
1447 IPython's code execution machinery, so that users can run strings
1453 IPython's code execution machinery, so that users can run strings
1448 as if they had been typed at the prompt interactively.
1454 as if they had been typed at the prompt interactively.
1449 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1455 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1450 methods which can call the system shell, but with python variable
1456 methods which can call the system shell, but with python variable
1451 expansion. The three such methods are: __IPYTHON__.system,
1457 expansion. The three such methods are: __IPYTHON__.system,
1452 .getoutput and .getoutputerror. These need to be documented in a
1458 .getoutput and .getoutputerror. These need to be documented in a
1453 'public API' section (to be written) of the manual.
1459 'public API' section (to be written) of the manual.
1454
1460
1455 2005-03-20 Fernando Perez <fperez@colorado.edu>
1461 2005-03-20 Fernando Perez <fperez@colorado.edu>
1456
1462
1457 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1463 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1458 for custom exception handling. This is quite powerful, and it
1464 for custom exception handling. This is quite powerful, and it
1459 allows for user-installable exception handlers which can trap
1465 allows for user-installable exception handlers which can trap
1460 custom exceptions at runtime and treat them separately from
1466 custom exceptions at runtime and treat them separately from
1461 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1467 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1462 Mantegazza <mantegazza-AT-ill.fr>.
1468 Mantegazza <mantegazza-AT-ill.fr>.
1463 (InteractiveShell.set_custom_completer): public API function to
1469 (InteractiveShell.set_custom_completer): public API function to
1464 add new completers at runtime.
1470 add new completers at runtime.
1465
1471
1466 2005-03-19 Fernando Perez <fperez@colorado.edu>
1472 2005-03-19 Fernando Perez <fperez@colorado.edu>
1467
1473
1468 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1474 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1469 allow objects which provide their docstrings via non-standard
1475 allow objects which provide their docstrings via non-standard
1470 mechanisms (like Pyro proxies) to still be inspected by ipython's
1476 mechanisms (like Pyro proxies) to still be inspected by ipython's
1471 ? system.
1477 ? system.
1472
1478
1473 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1479 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1474 automatic capture system. I tried quite hard to make it work
1480 automatic capture system. I tried quite hard to make it work
1475 reliably, and simply failed. I tried many combinations with the
1481 reliably, and simply failed. I tried many combinations with the
1476 subprocess module, but eventually nothing worked in all needed
1482 subprocess module, but eventually nothing worked in all needed
1477 cases (not blocking stdin for the child, duplicating stdout
1483 cases (not blocking stdin for the child, duplicating stdout
1478 without blocking, etc). The new %sc/%sx still do capture to these
1484 without blocking, etc). The new %sc/%sx still do capture to these
1479 magical list/string objects which make shell use much more
1485 magical list/string objects which make shell use much more
1480 conveninent, so not all is lost.
1486 conveninent, so not all is lost.
1481
1487
1482 XXX - FIX MANUAL for the change above!
1488 XXX - FIX MANUAL for the change above!
1483
1489
1484 (runsource): I copied code.py's runsource() into ipython to modify
1490 (runsource): I copied code.py's runsource() into ipython to modify
1485 it a bit. Now the code object and source to be executed are
1491 it a bit. Now the code object and source to be executed are
1486 stored in ipython. This makes this info accessible to third-party
1492 stored in ipython. This makes this info accessible to third-party
1487 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1493 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1488 Mantegazza <mantegazza-AT-ill.fr>.
1494 Mantegazza <mantegazza-AT-ill.fr>.
1489
1495
1490 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1496 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1491 history-search via readline (like C-p/C-n). I'd wanted this for a
1497 history-search via readline (like C-p/C-n). I'd wanted this for a
1492 long time, but only recently found out how to do it. For users
1498 long time, but only recently found out how to do it. For users
1493 who already have their ipythonrc files made and want this, just
1499 who already have their ipythonrc files made and want this, just
1494 add:
1500 add:
1495
1501
1496 readline_parse_and_bind "\e[A": history-search-backward
1502 readline_parse_and_bind "\e[A": history-search-backward
1497 readline_parse_and_bind "\e[B": history-search-forward
1503 readline_parse_and_bind "\e[B": history-search-forward
1498
1504
1499 2005-03-18 Fernando Perez <fperez@colorado.edu>
1505 2005-03-18 Fernando Perez <fperez@colorado.edu>
1500
1506
1501 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1507 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1502 LSString and SList classes which allow transparent conversions
1508 LSString and SList classes which allow transparent conversions
1503 between list mode and whitespace-separated string.
1509 between list mode and whitespace-separated string.
1504 (magic_r): Fix recursion problem in %r.
1510 (magic_r): Fix recursion problem in %r.
1505
1511
1506 * IPython/genutils.py (LSString): New class to be used for
1512 * IPython/genutils.py (LSString): New class to be used for
1507 automatic storage of the results of all alias/system calls in _o
1513 automatic storage of the results of all alias/system calls in _o
1508 and _e (stdout/err). These provide a .l/.list attribute which
1514 and _e (stdout/err). These provide a .l/.list attribute which
1509 does automatic splitting on newlines. This means that for most
1515 does automatic splitting on newlines. This means that for most
1510 uses, you'll never need to do capturing of output with %sc/%sx
1516 uses, you'll never need to do capturing of output with %sc/%sx
1511 anymore, since ipython keeps this always done for you. Note that
1517 anymore, since ipython keeps this always done for you. Note that
1512 only the LAST results are stored, the _o/e variables are
1518 only the LAST results are stored, the _o/e variables are
1513 overwritten on each call. If you need to save their contents
1519 overwritten on each call. If you need to save their contents
1514 further, simply bind them to any other name.
1520 further, simply bind them to any other name.
1515
1521
1516 2005-03-17 Fernando Perez <fperez@colorado.edu>
1522 2005-03-17 Fernando Perez <fperez@colorado.edu>
1517
1523
1518 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1524 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1519 prompt namespace handling.
1525 prompt namespace handling.
1520
1526
1521 2005-03-16 Fernando Perez <fperez@colorado.edu>
1527 2005-03-16 Fernando Perez <fperez@colorado.edu>
1522
1528
1523 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1529 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1524 classic prompts to be '>>> ' (final space was missing, and it
1530 classic prompts to be '>>> ' (final space was missing, and it
1525 trips the emacs python mode).
1531 trips the emacs python mode).
1526 (BasePrompt.__str__): Added safe support for dynamic prompt
1532 (BasePrompt.__str__): Added safe support for dynamic prompt
1527 strings. Now you can set your prompt string to be '$x', and the
1533 strings. Now you can set your prompt string to be '$x', and the
1528 value of x will be printed from your interactive namespace. The
1534 value of x will be printed from your interactive namespace. The
1529 interpolation syntax includes the full Itpl support, so
1535 interpolation syntax includes the full Itpl support, so
1530 ${foo()+x+bar()} is a valid prompt string now, and the function
1536 ${foo()+x+bar()} is a valid prompt string now, and the function
1531 calls will be made at runtime.
1537 calls will be made at runtime.
1532
1538
1533 2005-03-15 Fernando Perez <fperez@colorado.edu>
1539 2005-03-15 Fernando Perez <fperez@colorado.edu>
1534
1540
1535 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1541 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1536 avoid name clashes in pylab. %hist still works, it just forwards
1542 avoid name clashes in pylab. %hist still works, it just forwards
1537 the call to %history.
1543 the call to %history.
1538
1544
1539 2005-03-02 *** Released version 0.6.12
1545 2005-03-02 *** Released version 0.6.12
1540
1546
1541 2005-03-02 Fernando Perez <fperez@colorado.edu>
1547 2005-03-02 Fernando Perez <fperez@colorado.edu>
1542
1548
1543 * IPython/iplib.py (handle_magic): log magic calls properly as
1549 * IPython/iplib.py (handle_magic): log magic calls properly as
1544 ipmagic() function calls.
1550 ipmagic() function calls.
1545
1551
1546 * IPython/Magic.py (magic_time): Improved %time to support
1552 * IPython/Magic.py (magic_time): Improved %time to support
1547 statements and provide wall-clock as well as CPU time.
1553 statements and provide wall-clock as well as CPU time.
1548
1554
1549 2005-02-27 Fernando Perez <fperez@colorado.edu>
1555 2005-02-27 Fernando Perez <fperez@colorado.edu>
1550
1556
1551 * IPython/hooks.py: New hooks module, to expose user-modifiable
1557 * IPython/hooks.py: New hooks module, to expose user-modifiable
1552 IPython functionality in a clean manner. For now only the editor
1558 IPython functionality in a clean manner. For now only the editor
1553 hook is actually written, and other thigns which I intend to turn
1559 hook is actually written, and other thigns which I intend to turn
1554 into proper hooks aren't yet there. The display and prefilter
1560 into proper hooks aren't yet there. The display and prefilter
1555 stuff, for example, should be hooks. But at least now the
1561 stuff, for example, should be hooks. But at least now the
1556 framework is in place, and the rest can be moved here with more
1562 framework is in place, and the rest can be moved here with more
1557 time later. IPython had had a .hooks variable for a long time for
1563 time later. IPython had had a .hooks variable for a long time for
1558 this purpose, but I'd never actually used it for anything.
1564 this purpose, but I'd never actually used it for anything.
1559
1565
1560 2005-02-26 Fernando Perez <fperez@colorado.edu>
1566 2005-02-26 Fernando Perez <fperez@colorado.edu>
1561
1567
1562 * IPython/ipmaker.py (make_IPython): make the default ipython
1568 * IPython/ipmaker.py (make_IPython): make the default ipython
1563 directory be called _ipython under win32, to follow more the
1569 directory be called _ipython under win32, to follow more the
1564 naming peculiarities of that platform (where buggy software like
1570 naming peculiarities of that platform (where buggy software like
1565 Visual Sourcesafe breaks with .named directories). Reported by
1571 Visual Sourcesafe breaks with .named directories). Reported by
1566 Ville Vainio.
1572 Ville Vainio.
1567
1573
1568 2005-02-23 Fernando Perez <fperez@colorado.edu>
1574 2005-02-23 Fernando Perez <fperez@colorado.edu>
1569
1575
1570 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1576 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1571 auto_aliases for win32 which were causing problems. Users can
1577 auto_aliases for win32 which were causing problems. Users can
1572 define the ones they personally like.
1578 define the ones they personally like.
1573
1579
1574 2005-02-21 Fernando Perez <fperez@colorado.edu>
1580 2005-02-21 Fernando Perez <fperez@colorado.edu>
1575
1581
1576 * IPython/Magic.py (magic_time): new magic to time execution of
1582 * IPython/Magic.py (magic_time): new magic to time execution of
1577 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1583 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1578
1584
1579 2005-02-19 Fernando Perez <fperez@colorado.edu>
1585 2005-02-19 Fernando Perez <fperez@colorado.edu>
1580
1586
1581 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1587 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1582 into keys (for prompts, for example).
1588 into keys (for prompts, for example).
1583
1589
1584 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1590 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1585 prompts in case users want them. This introduces a small behavior
1591 prompts in case users want them. This introduces a small behavior
1586 change: ipython does not automatically add a space to all prompts
1592 change: ipython does not automatically add a space to all prompts
1587 anymore. To get the old prompts with a space, users should add it
1593 anymore. To get the old prompts with a space, users should add it
1588 manually to their ipythonrc file, so for example prompt_in1 should
1594 manually to their ipythonrc file, so for example prompt_in1 should
1589 now read 'In [\#]: ' instead of 'In [\#]:'.
1595 now read 'In [\#]: ' instead of 'In [\#]:'.
1590 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1596 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1591 file) to control left-padding of secondary prompts.
1597 file) to control left-padding of secondary prompts.
1592
1598
1593 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1599 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1594 the profiler can't be imported. Fix for Debian, which removed
1600 the profiler can't be imported. Fix for Debian, which removed
1595 profile.py because of License issues. I applied a slightly
1601 profile.py because of License issues. I applied a slightly
1596 modified version of the original Debian patch at
1602 modified version of the original Debian patch at
1597 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1603 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1598
1604
1599 2005-02-17 Fernando Perez <fperez@colorado.edu>
1605 2005-02-17 Fernando Perez <fperez@colorado.edu>
1600
1606
1601 * IPython/genutils.py (native_line_ends): Fix bug which would
1607 * IPython/genutils.py (native_line_ends): Fix bug which would
1602 cause improper line-ends under win32 b/c I was not opening files
1608 cause improper line-ends under win32 b/c I was not opening files
1603 in binary mode. Bug report and fix thanks to Ville.
1609 in binary mode. Bug report and fix thanks to Ville.
1604
1610
1605 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1611 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1606 trying to catch spurious foo[1] autocalls. My fix actually broke
1612 trying to catch spurious foo[1] autocalls. My fix actually broke
1607 ',/' autoquote/call with explicit escape (bad regexp).
1613 ',/' autoquote/call with explicit escape (bad regexp).
1608
1614
1609 2005-02-15 *** Released version 0.6.11
1615 2005-02-15 *** Released version 0.6.11
1610
1616
1611 2005-02-14 Fernando Perez <fperez@colorado.edu>
1617 2005-02-14 Fernando Perez <fperez@colorado.edu>
1612
1618
1613 * IPython/background_jobs.py: New background job management
1619 * IPython/background_jobs.py: New background job management
1614 subsystem. This is implemented via a new set of classes, and
1620 subsystem. This is implemented via a new set of classes, and
1615 IPython now provides a builtin 'jobs' object for background job
1621 IPython now provides a builtin 'jobs' object for background job
1616 execution. A convenience %bg magic serves as a lightweight
1622 execution. A convenience %bg magic serves as a lightweight
1617 frontend for starting the more common type of calls. This was
1623 frontend for starting the more common type of calls. This was
1618 inspired by discussions with B. Granger and the BackgroundCommand
1624 inspired by discussions with B. Granger and the BackgroundCommand
1619 class described in the book Python Scripting for Computational
1625 class described in the book Python Scripting for Computational
1620 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1626 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1621 (although ultimately no code from this text was used, as IPython's
1627 (although ultimately no code from this text was used, as IPython's
1622 system is a separate implementation).
1628 system is a separate implementation).
1623
1629
1624 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1630 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1625 to control the completion of single/double underscore names
1631 to control the completion of single/double underscore names
1626 separately. As documented in the example ipytonrc file, the
1632 separately. As documented in the example ipytonrc file, the
1627 readline_omit__names variable can now be set to 2, to omit even
1633 readline_omit__names variable can now be set to 2, to omit even
1628 single underscore names. Thanks to a patch by Brian Wong
1634 single underscore names. Thanks to a patch by Brian Wong
1629 <BrianWong-AT-AirgoNetworks.Com>.
1635 <BrianWong-AT-AirgoNetworks.Com>.
1630 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1636 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1631 be autocalled as foo([1]) if foo were callable. A problem for
1637 be autocalled as foo([1]) if foo were callable. A problem for
1632 things which are both callable and implement __getitem__.
1638 things which are both callable and implement __getitem__.
1633 (init_readline): Fix autoindentation for win32. Thanks to a patch
1639 (init_readline): Fix autoindentation for win32. Thanks to a patch
1634 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1640 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1635
1641
1636 2005-02-12 Fernando Perez <fperez@colorado.edu>
1642 2005-02-12 Fernando Perez <fperez@colorado.edu>
1637
1643
1638 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1644 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1639 which I had written long ago to sort out user error messages which
1645 which I had written long ago to sort out user error messages which
1640 may occur during startup. This seemed like a good idea initially,
1646 may occur during startup. This seemed like a good idea initially,
1641 but it has proven a disaster in retrospect. I don't want to
1647 but it has proven a disaster in retrospect. I don't want to
1642 change much code for now, so my fix is to set the internal 'debug'
1648 change much code for now, so my fix is to set the internal 'debug'
1643 flag to true everywhere, whose only job was precisely to control
1649 flag to true everywhere, whose only job was precisely to control
1644 this subsystem. This closes issue 28 (as well as avoiding all
1650 this subsystem. This closes issue 28 (as well as avoiding all
1645 sorts of strange hangups which occur from time to time).
1651 sorts of strange hangups which occur from time to time).
1646
1652
1647 2005-02-07 Fernando Perez <fperez@colorado.edu>
1653 2005-02-07 Fernando Perez <fperez@colorado.edu>
1648
1654
1649 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1655 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1650 previous call produced a syntax error.
1656 previous call produced a syntax error.
1651
1657
1652 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1658 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1653 classes without constructor.
1659 classes without constructor.
1654
1660
1655 2005-02-06 Fernando Perez <fperez@colorado.edu>
1661 2005-02-06 Fernando Perez <fperez@colorado.edu>
1656
1662
1657 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1663 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1658 completions with the results of each matcher, so we return results
1664 completions with the results of each matcher, so we return results
1659 to the user from all namespaces. This breaks with ipython
1665 to the user from all namespaces. This breaks with ipython
1660 tradition, but I think it's a nicer behavior. Now you get all
1666 tradition, but I think it's a nicer behavior. Now you get all
1661 possible completions listed, from all possible namespaces (python,
1667 possible completions listed, from all possible namespaces (python,
1662 filesystem, magics...) After a request by John Hunter
1668 filesystem, magics...) After a request by John Hunter
1663 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1669 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1664
1670
1665 2005-02-05 Fernando Perez <fperez@colorado.edu>
1671 2005-02-05 Fernando Perez <fperez@colorado.edu>
1666
1672
1667 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1673 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1668 the call had quote characters in it (the quotes were stripped).
1674 the call had quote characters in it (the quotes were stripped).
1669
1675
1670 2005-01-31 Fernando Perez <fperez@colorado.edu>
1676 2005-01-31 Fernando Perez <fperez@colorado.edu>
1671
1677
1672 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1678 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1673 Itpl.itpl() to make the code more robust against psyco
1679 Itpl.itpl() to make the code more robust against psyco
1674 optimizations.
1680 optimizations.
1675
1681
1676 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1682 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1677 of causing an exception. Quicker, cleaner.
1683 of causing an exception. Quicker, cleaner.
1678
1684
1679 2005-01-28 Fernando Perez <fperez@colorado.edu>
1685 2005-01-28 Fernando Perez <fperez@colorado.edu>
1680
1686
1681 * scripts/ipython_win_post_install.py (install): hardcode
1687 * scripts/ipython_win_post_install.py (install): hardcode
1682 sys.prefix+'python.exe' as the executable path. It turns out that
1688 sys.prefix+'python.exe' as the executable path. It turns out that
1683 during the post-installation run, sys.executable resolves to the
1689 during the post-installation run, sys.executable resolves to the
1684 name of the binary installer! I should report this as a distutils
1690 name of the binary installer! I should report this as a distutils
1685 bug, I think. I updated the .10 release with this tiny fix, to
1691 bug, I think. I updated the .10 release with this tiny fix, to
1686 avoid annoying the lists further.
1692 avoid annoying the lists further.
1687
1693
1688 2005-01-27 *** Released version 0.6.10
1694 2005-01-27 *** Released version 0.6.10
1689
1695
1690 2005-01-27 Fernando Perez <fperez@colorado.edu>
1696 2005-01-27 Fernando Perez <fperez@colorado.edu>
1691
1697
1692 * IPython/numutils.py (norm): Added 'inf' as optional name for
1698 * IPython/numutils.py (norm): Added 'inf' as optional name for
1693 L-infinity norm, included references to mathworld.com for vector
1699 L-infinity norm, included references to mathworld.com for vector
1694 norm definitions.
1700 norm definitions.
1695 (amin/amax): added amin/amax for array min/max. Similar to what
1701 (amin/amax): added amin/amax for array min/max. Similar to what
1696 pylab ships with after the recent reorganization of names.
1702 pylab ships with after the recent reorganization of names.
1697 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1703 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1698
1704
1699 * ipython.el: committed Alex's recent fixes and improvements.
1705 * ipython.el: committed Alex's recent fixes and improvements.
1700 Tested with python-mode from CVS, and it looks excellent. Since
1706 Tested with python-mode from CVS, and it looks excellent. Since
1701 python-mode hasn't released anything in a while, I'm temporarily
1707 python-mode hasn't released anything in a while, I'm temporarily
1702 putting a copy of today's CVS (v 4.70) of python-mode in:
1708 putting a copy of today's CVS (v 4.70) of python-mode in:
1703 http://ipython.scipy.org/tmp/python-mode.el
1709 http://ipython.scipy.org/tmp/python-mode.el
1704
1710
1705 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1711 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1706 sys.executable for the executable name, instead of assuming it's
1712 sys.executable for the executable name, instead of assuming it's
1707 called 'python.exe' (the post-installer would have produced broken
1713 called 'python.exe' (the post-installer would have produced broken
1708 setups on systems with a differently named python binary).
1714 setups on systems with a differently named python binary).
1709
1715
1710 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1716 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1711 references to os.linesep, to make the code more
1717 references to os.linesep, to make the code more
1712 platform-independent. This is also part of the win32 coloring
1718 platform-independent. This is also part of the win32 coloring
1713 fixes.
1719 fixes.
1714
1720
1715 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1721 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1716 lines, which actually cause coloring bugs because the length of
1722 lines, which actually cause coloring bugs because the length of
1717 the line is very difficult to correctly compute with embedded
1723 the line is very difficult to correctly compute with embedded
1718 escapes. This was the source of all the coloring problems under
1724 escapes. This was the source of all the coloring problems under
1719 Win32. I think that _finally_, Win32 users have a properly
1725 Win32. I think that _finally_, Win32 users have a properly
1720 working ipython in all respects. This would never have happened
1726 working ipython in all respects. This would never have happened
1721 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1727 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1722
1728
1723 2005-01-26 *** Released version 0.6.9
1729 2005-01-26 *** Released version 0.6.9
1724
1730
1725 2005-01-25 Fernando Perez <fperez@colorado.edu>
1731 2005-01-25 Fernando Perez <fperez@colorado.edu>
1726
1732
1727 * setup.py: finally, we have a true Windows installer, thanks to
1733 * setup.py: finally, we have a true Windows installer, thanks to
1728 the excellent work of Viktor Ransmayr
1734 the excellent work of Viktor Ransmayr
1729 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1735 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1730 Windows users. The setup routine is quite a bit cleaner thanks to
1736 Windows users. The setup routine is quite a bit cleaner thanks to
1731 this, and the post-install script uses the proper functions to
1737 this, and the post-install script uses the proper functions to
1732 allow a clean de-installation using the standard Windows Control
1738 allow a clean de-installation using the standard Windows Control
1733 Panel.
1739 Panel.
1734
1740
1735 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1741 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1736 environment variable under all OSes (including win32) if
1742 environment variable under all OSes (including win32) if
1737 available. This will give consistency to win32 users who have set
1743 available. This will give consistency to win32 users who have set
1738 this variable for any reason. If os.environ['HOME'] fails, the
1744 this variable for any reason. If os.environ['HOME'] fails, the
1739 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1745 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1740
1746
1741 2005-01-24 Fernando Perez <fperez@colorado.edu>
1747 2005-01-24 Fernando Perez <fperez@colorado.edu>
1742
1748
1743 * IPython/numutils.py (empty_like): add empty_like(), similar to
1749 * IPython/numutils.py (empty_like): add empty_like(), similar to
1744 zeros_like() but taking advantage of the new empty() Numeric routine.
1750 zeros_like() but taking advantage of the new empty() Numeric routine.
1745
1751
1746 2005-01-23 *** Released version 0.6.8
1752 2005-01-23 *** Released version 0.6.8
1747
1753
1748 2005-01-22 Fernando Perez <fperez@colorado.edu>
1754 2005-01-22 Fernando Perez <fperez@colorado.edu>
1749
1755
1750 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1756 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1751 automatic show() calls. After discussing things with JDH, it
1757 automatic show() calls. After discussing things with JDH, it
1752 turns out there are too many corner cases where this can go wrong.
1758 turns out there are too many corner cases where this can go wrong.
1753 It's best not to try to be 'too smart', and simply have ipython
1759 It's best not to try to be 'too smart', and simply have ipython
1754 reproduce as much as possible the default behavior of a normal
1760 reproduce as much as possible the default behavior of a normal
1755 python shell.
1761 python shell.
1756
1762
1757 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1763 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1758 line-splitting regexp and _prefilter() to avoid calling getattr()
1764 line-splitting regexp and _prefilter() to avoid calling getattr()
1759 on assignments. This closes
1765 on assignments. This closes
1760 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1766 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1761 readline uses getattr(), so a simple <TAB> keypress is still
1767 readline uses getattr(), so a simple <TAB> keypress is still
1762 enough to trigger getattr() calls on an object.
1768 enough to trigger getattr() calls on an object.
1763
1769
1764 2005-01-21 Fernando Perez <fperez@colorado.edu>
1770 2005-01-21 Fernando Perez <fperez@colorado.edu>
1765
1771
1766 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1772 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1767 docstring under pylab so it doesn't mask the original.
1773 docstring under pylab so it doesn't mask the original.
1768
1774
1769 2005-01-21 *** Released version 0.6.7
1775 2005-01-21 *** Released version 0.6.7
1770
1776
1771 2005-01-21 Fernando Perez <fperez@colorado.edu>
1777 2005-01-21 Fernando Perez <fperez@colorado.edu>
1772
1778
1773 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1779 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1774 signal handling for win32 users in multithreaded mode.
1780 signal handling for win32 users in multithreaded mode.
1775
1781
1776 2005-01-17 Fernando Perez <fperez@colorado.edu>
1782 2005-01-17 Fernando Perez <fperez@colorado.edu>
1777
1783
1778 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1784 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1779 instances with no __init__. After a crash report by Norbert Nemec
1785 instances with no __init__. After a crash report by Norbert Nemec
1780 <Norbert-AT-nemec-online.de>.
1786 <Norbert-AT-nemec-online.de>.
1781
1787
1782 2005-01-14 Fernando Perez <fperez@colorado.edu>
1788 2005-01-14 Fernando Perez <fperez@colorado.edu>
1783
1789
1784 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1790 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1785 names for verbose exceptions, when multiple dotted names and the
1791 names for verbose exceptions, when multiple dotted names and the
1786 'parent' object were present on the same line.
1792 'parent' object were present on the same line.
1787
1793
1788 2005-01-11 Fernando Perez <fperez@colorado.edu>
1794 2005-01-11 Fernando Perez <fperez@colorado.edu>
1789
1795
1790 * IPython/genutils.py (flag_calls): new utility to trap and flag
1796 * IPython/genutils.py (flag_calls): new utility to trap and flag
1791 calls in functions. I need it to clean up matplotlib support.
1797 calls in functions. I need it to clean up matplotlib support.
1792 Also removed some deprecated code in genutils.
1798 Also removed some deprecated code in genutils.
1793
1799
1794 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1800 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1795 that matplotlib scripts called with %run, which don't call show()
1801 that matplotlib scripts called with %run, which don't call show()
1796 themselves, still have their plotting windows open.
1802 themselves, still have their plotting windows open.
1797
1803
1798 2005-01-05 Fernando Perez <fperez@colorado.edu>
1804 2005-01-05 Fernando Perez <fperez@colorado.edu>
1799
1805
1800 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1806 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1801 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1807 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1802
1808
1803 2004-12-19 Fernando Perez <fperez@colorado.edu>
1809 2004-12-19 Fernando Perez <fperez@colorado.edu>
1804
1810
1805 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1811 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1806 parent_runcode, which was an eyesore. The same result can be
1812 parent_runcode, which was an eyesore. The same result can be
1807 obtained with Python's regular superclass mechanisms.
1813 obtained with Python's regular superclass mechanisms.
1808
1814
1809 2004-12-17 Fernando Perez <fperez@colorado.edu>
1815 2004-12-17 Fernando Perez <fperez@colorado.edu>
1810
1816
1811 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1817 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1812 reported by Prabhu.
1818 reported by Prabhu.
1813 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1819 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1814 sys.stderr) instead of explicitly calling sys.stderr. This helps
1820 sys.stderr) instead of explicitly calling sys.stderr. This helps
1815 maintain our I/O abstractions clean, for future GUI embeddings.
1821 maintain our I/O abstractions clean, for future GUI embeddings.
1816
1822
1817 * IPython/genutils.py (info): added new utility for sys.stderr
1823 * IPython/genutils.py (info): added new utility for sys.stderr
1818 unified info message handling (thin wrapper around warn()).
1824 unified info message handling (thin wrapper around warn()).
1819
1825
1820 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1826 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1821 composite (dotted) names on verbose exceptions.
1827 composite (dotted) names on verbose exceptions.
1822 (VerboseTB.nullrepr): harden against another kind of errors which
1828 (VerboseTB.nullrepr): harden against another kind of errors which
1823 Python's inspect module can trigger, and which were crashing
1829 Python's inspect module can trigger, and which were crashing
1824 IPython. Thanks to a report by Marco Lombardi
1830 IPython. Thanks to a report by Marco Lombardi
1825 <mlombard-AT-ma010192.hq.eso.org>.
1831 <mlombard-AT-ma010192.hq.eso.org>.
1826
1832
1827 2004-12-13 *** Released version 0.6.6
1833 2004-12-13 *** Released version 0.6.6
1828
1834
1829 2004-12-12 Fernando Perez <fperez@colorado.edu>
1835 2004-12-12 Fernando Perez <fperez@colorado.edu>
1830
1836
1831 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1837 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1832 generated by pygtk upon initialization if it was built without
1838 generated by pygtk upon initialization if it was built without
1833 threads (for matplotlib users). After a crash reported by
1839 threads (for matplotlib users). After a crash reported by
1834 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1840 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1835
1841
1836 * IPython/ipmaker.py (make_IPython): fix small bug in the
1842 * IPython/ipmaker.py (make_IPython): fix small bug in the
1837 import_some parameter for multiple imports.
1843 import_some parameter for multiple imports.
1838
1844
1839 * IPython/iplib.py (ipmagic): simplified the interface of
1845 * IPython/iplib.py (ipmagic): simplified the interface of
1840 ipmagic() to take a single string argument, just as it would be
1846 ipmagic() to take a single string argument, just as it would be
1841 typed at the IPython cmd line.
1847 typed at the IPython cmd line.
1842 (ipalias): Added new ipalias() with an interface identical to
1848 (ipalias): Added new ipalias() with an interface identical to
1843 ipmagic(). This completes exposing a pure python interface to the
1849 ipmagic(). This completes exposing a pure python interface to the
1844 alias and magic system, which can be used in loops or more complex
1850 alias and magic system, which can be used in loops or more complex
1845 code where IPython's automatic line mangling is not active.
1851 code where IPython's automatic line mangling is not active.
1846
1852
1847 * IPython/genutils.py (timing): changed interface of timing to
1853 * IPython/genutils.py (timing): changed interface of timing to
1848 simply run code once, which is the most common case. timings()
1854 simply run code once, which is the most common case. timings()
1849 remains unchanged, for the cases where you want multiple runs.
1855 remains unchanged, for the cases where you want multiple runs.
1850
1856
1851 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1857 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1852 bug where Python2.2 crashes with exec'ing code which does not end
1858 bug where Python2.2 crashes with exec'ing code which does not end
1853 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1859 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1854 before.
1860 before.
1855
1861
1856 2004-12-10 Fernando Perez <fperez@colorado.edu>
1862 2004-12-10 Fernando Perez <fperez@colorado.edu>
1857
1863
1858 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1864 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1859 -t to -T, to accomodate the new -t flag in %run (the %run and
1865 -t to -T, to accomodate the new -t flag in %run (the %run and
1860 %prun options are kind of intermixed, and it's not easy to change
1866 %prun options are kind of intermixed, and it's not easy to change
1861 this with the limitations of python's getopt).
1867 this with the limitations of python's getopt).
1862
1868
1863 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1869 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1864 the execution of scripts. It's not as fine-tuned as timeit.py,
1870 the execution of scripts. It's not as fine-tuned as timeit.py,
1865 but it works from inside ipython (and under 2.2, which lacks
1871 but it works from inside ipython (and under 2.2, which lacks
1866 timeit.py). Optionally a number of runs > 1 can be given for
1872 timeit.py). Optionally a number of runs > 1 can be given for
1867 timing very short-running code.
1873 timing very short-running code.
1868
1874
1869 * IPython/genutils.py (uniq_stable): new routine which returns a
1875 * IPython/genutils.py (uniq_stable): new routine which returns a
1870 list of unique elements in any iterable, but in stable order of
1876 list of unique elements in any iterable, but in stable order of
1871 appearance. I needed this for the ultraTB fixes, and it's a handy
1877 appearance. I needed this for the ultraTB fixes, and it's a handy
1872 utility.
1878 utility.
1873
1879
1874 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1880 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1875 dotted names in Verbose exceptions. This had been broken since
1881 dotted names in Verbose exceptions. This had been broken since
1876 the very start, now x.y will properly be printed in a Verbose
1882 the very start, now x.y will properly be printed in a Verbose
1877 traceback, instead of x being shown and y appearing always as an
1883 traceback, instead of x being shown and y appearing always as an
1878 'undefined global'. Getting this to work was a bit tricky,
1884 'undefined global'. Getting this to work was a bit tricky,
1879 because by default python tokenizers are stateless. Saved by
1885 because by default python tokenizers are stateless. Saved by
1880 python's ability to easily add a bit of state to an arbitrary
1886 python's ability to easily add a bit of state to an arbitrary
1881 function (without needing to build a full-blown callable object).
1887 function (without needing to build a full-blown callable object).
1882
1888
1883 Also big cleanup of this code, which had horrendous runtime
1889 Also big cleanup of this code, which had horrendous runtime
1884 lookups of zillions of attributes for colorization. Moved all
1890 lookups of zillions of attributes for colorization. Moved all
1885 this code into a few templates, which make it cleaner and quicker.
1891 this code into a few templates, which make it cleaner and quicker.
1886
1892
1887 Printout quality was also improved for Verbose exceptions: one
1893 Printout quality was also improved for Verbose exceptions: one
1888 variable per line, and memory addresses are printed (this can be
1894 variable per line, and memory addresses are printed (this can be
1889 quite handy in nasty debugging situations, which is what Verbose
1895 quite handy in nasty debugging situations, which is what Verbose
1890 is for).
1896 is for).
1891
1897
1892 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1898 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1893 the command line as scripts to be loaded by embedded instances.
1899 the command line as scripts to be loaded by embedded instances.
1894 Doing so has the potential for an infinite recursion if there are
1900 Doing so has the potential for an infinite recursion if there are
1895 exceptions thrown in the process. This fixes a strange crash
1901 exceptions thrown in the process. This fixes a strange crash
1896 reported by Philippe MULLER <muller-AT-irit.fr>.
1902 reported by Philippe MULLER <muller-AT-irit.fr>.
1897
1903
1898 2004-12-09 Fernando Perez <fperez@colorado.edu>
1904 2004-12-09 Fernando Perez <fperez@colorado.edu>
1899
1905
1900 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1906 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1901 to reflect new names in matplotlib, which now expose the
1907 to reflect new names in matplotlib, which now expose the
1902 matlab-compatible interface via a pylab module instead of the
1908 matlab-compatible interface via a pylab module instead of the
1903 'matlab' name. The new code is backwards compatible, so users of
1909 'matlab' name. The new code is backwards compatible, so users of
1904 all matplotlib versions are OK. Patch by J. Hunter.
1910 all matplotlib versions are OK. Patch by J. Hunter.
1905
1911
1906 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1912 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1907 of __init__ docstrings for instances (class docstrings are already
1913 of __init__ docstrings for instances (class docstrings are already
1908 automatically printed). Instances with customized docstrings
1914 automatically printed). Instances with customized docstrings
1909 (indep. of the class) are also recognized and all 3 separate
1915 (indep. of the class) are also recognized and all 3 separate
1910 docstrings are printed (instance, class, constructor). After some
1916 docstrings are printed (instance, class, constructor). After some
1911 comments/suggestions by J. Hunter.
1917 comments/suggestions by J. Hunter.
1912
1918
1913 2004-12-05 Fernando Perez <fperez@colorado.edu>
1919 2004-12-05 Fernando Perez <fperez@colorado.edu>
1914
1920
1915 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1921 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1916 warnings when tab-completion fails and triggers an exception.
1922 warnings when tab-completion fails and triggers an exception.
1917
1923
1918 2004-12-03 Fernando Perez <fperez@colorado.edu>
1924 2004-12-03 Fernando Perez <fperez@colorado.edu>
1919
1925
1920 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1926 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1921 be triggered when using 'run -p'. An incorrect option flag was
1927 be triggered when using 'run -p'. An incorrect option flag was
1922 being set ('d' instead of 'D').
1928 being set ('d' instead of 'D').
1923 (manpage): fix missing escaped \- sign.
1929 (manpage): fix missing escaped \- sign.
1924
1930
1925 2004-11-30 *** Released version 0.6.5
1931 2004-11-30 *** Released version 0.6.5
1926
1932
1927 2004-11-30 Fernando Perez <fperez@colorado.edu>
1933 2004-11-30 Fernando Perez <fperez@colorado.edu>
1928
1934
1929 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1935 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1930 setting with -d option.
1936 setting with -d option.
1931
1937
1932 * setup.py (docfiles): Fix problem where the doc glob I was using
1938 * setup.py (docfiles): Fix problem where the doc glob I was using
1933 was COMPLETELY BROKEN. It was giving the right files by pure
1939 was COMPLETELY BROKEN. It was giving the right files by pure
1934 accident, but failed once I tried to include ipython.el. Note:
1940 accident, but failed once I tried to include ipython.el. Note:
1935 glob() does NOT allow you to do exclusion on multiple endings!
1941 glob() does NOT allow you to do exclusion on multiple endings!
1936
1942
1937 2004-11-29 Fernando Perez <fperez@colorado.edu>
1943 2004-11-29 Fernando Perez <fperez@colorado.edu>
1938
1944
1939 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1945 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1940 the manpage as the source. Better formatting & consistency.
1946 the manpage as the source. Better formatting & consistency.
1941
1947
1942 * IPython/Magic.py (magic_run): Added new -d option, to run
1948 * IPython/Magic.py (magic_run): Added new -d option, to run
1943 scripts under the control of the python pdb debugger. Note that
1949 scripts under the control of the python pdb debugger. Note that
1944 this required changing the %prun option -d to -D, to avoid a clash
1950 this required changing the %prun option -d to -D, to avoid a clash
1945 (since %run must pass options to %prun, and getopt is too dumb to
1951 (since %run must pass options to %prun, and getopt is too dumb to
1946 handle options with string values with embedded spaces). Thanks
1952 handle options with string values with embedded spaces). Thanks
1947 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1953 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1948 (magic_who_ls): added type matching to %who and %whos, so that one
1954 (magic_who_ls): added type matching to %who and %whos, so that one
1949 can filter their output to only include variables of certain
1955 can filter their output to only include variables of certain
1950 types. Another suggestion by Matthew.
1956 types. Another suggestion by Matthew.
1951 (magic_whos): Added memory summaries in kb and Mb for arrays.
1957 (magic_whos): Added memory summaries in kb and Mb for arrays.
1952 (magic_who): Improve formatting (break lines every 9 vars).
1958 (magic_who): Improve formatting (break lines every 9 vars).
1953
1959
1954 2004-11-28 Fernando Perez <fperez@colorado.edu>
1960 2004-11-28 Fernando Perez <fperez@colorado.edu>
1955
1961
1956 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1962 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1957 cache when empty lines were present.
1963 cache when empty lines were present.
1958
1964
1959 2004-11-24 Fernando Perez <fperez@colorado.edu>
1965 2004-11-24 Fernando Perez <fperez@colorado.edu>
1960
1966
1961 * IPython/usage.py (__doc__): document the re-activated threading
1967 * IPython/usage.py (__doc__): document the re-activated threading
1962 options for WX and GTK.
1968 options for WX and GTK.
1963
1969
1964 2004-11-23 Fernando Perez <fperez@colorado.edu>
1970 2004-11-23 Fernando Perez <fperez@colorado.edu>
1965
1971
1966 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1972 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1967 the -wthread and -gthread options, along with a new -tk one to try
1973 the -wthread and -gthread options, along with a new -tk one to try
1968 and coordinate Tk threading with wx/gtk. The tk support is very
1974 and coordinate Tk threading with wx/gtk. The tk support is very
1969 platform dependent, since it seems to require Tcl and Tk to be
1975 platform dependent, since it seems to require Tcl and Tk to be
1970 built with threads (Fedora1/2 appears NOT to have it, but in
1976 built with threads (Fedora1/2 appears NOT to have it, but in
1971 Prabhu's Debian boxes it works OK). But even with some Tk
1977 Prabhu's Debian boxes it works OK). But even with some Tk
1972 limitations, this is a great improvement.
1978 limitations, this is a great improvement.
1973
1979
1974 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1980 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1975 info in user prompts. Patch by Prabhu.
1981 info in user prompts. Patch by Prabhu.
1976
1982
1977 2004-11-18 Fernando Perez <fperez@colorado.edu>
1983 2004-11-18 Fernando Perez <fperez@colorado.edu>
1978
1984
1979 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1985 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1980 EOFErrors and bail, to avoid infinite loops if a non-terminating
1986 EOFErrors and bail, to avoid infinite loops if a non-terminating
1981 file is fed into ipython. Patch submitted in issue 19 by user,
1987 file is fed into ipython. Patch submitted in issue 19 by user,
1982 many thanks.
1988 many thanks.
1983
1989
1984 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1990 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1985 autoquote/parens in continuation prompts, which can cause lots of
1991 autoquote/parens in continuation prompts, which can cause lots of
1986 problems. Closes roundup issue 20.
1992 problems. Closes roundup issue 20.
1987
1993
1988 2004-11-17 Fernando Perez <fperez@colorado.edu>
1994 2004-11-17 Fernando Perez <fperez@colorado.edu>
1989
1995
1990 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1996 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1991 reported as debian bug #280505. I'm not sure my local changelog
1997 reported as debian bug #280505. I'm not sure my local changelog
1992 entry has the proper debian format (Jack?).
1998 entry has the proper debian format (Jack?).
1993
1999
1994 2004-11-08 *** Released version 0.6.4
2000 2004-11-08 *** Released version 0.6.4
1995
2001
1996 2004-11-08 Fernando Perez <fperez@colorado.edu>
2002 2004-11-08 Fernando Perez <fperez@colorado.edu>
1997
2003
1998 * IPython/iplib.py (init_readline): Fix exit message for Windows
2004 * IPython/iplib.py (init_readline): Fix exit message for Windows
1999 when readline is active. Thanks to a report by Eric Jones
2005 when readline is active. Thanks to a report by Eric Jones
2000 <eric-AT-enthought.com>.
2006 <eric-AT-enthought.com>.
2001
2007
2002 2004-11-07 Fernando Perez <fperez@colorado.edu>
2008 2004-11-07 Fernando Perez <fperez@colorado.edu>
2003
2009
2004 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2010 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2005 sometimes seen by win2k/cygwin users.
2011 sometimes seen by win2k/cygwin users.
2006
2012
2007 2004-11-06 Fernando Perez <fperez@colorado.edu>
2013 2004-11-06 Fernando Perez <fperez@colorado.edu>
2008
2014
2009 * IPython/iplib.py (interact): Change the handling of %Exit from
2015 * IPython/iplib.py (interact): Change the handling of %Exit from
2010 trying to propagate a SystemExit to an internal ipython flag.
2016 trying to propagate a SystemExit to an internal ipython flag.
2011 This is less elegant than using Python's exception mechanism, but
2017 This is less elegant than using Python's exception mechanism, but
2012 I can't get that to work reliably with threads, so under -pylab
2018 I can't get that to work reliably with threads, so under -pylab
2013 %Exit was hanging IPython. Cross-thread exception handling is
2019 %Exit was hanging IPython. Cross-thread exception handling is
2014 really a bitch. Thaks to a bug report by Stephen Walton
2020 really a bitch. Thaks to a bug report by Stephen Walton
2015 <stephen.walton-AT-csun.edu>.
2021 <stephen.walton-AT-csun.edu>.
2016
2022
2017 2004-11-04 Fernando Perez <fperez@colorado.edu>
2023 2004-11-04 Fernando Perez <fperez@colorado.edu>
2018
2024
2019 * IPython/iplib.py (raw_input_original): store a pointer to the
2025 * IPython/iplib.py (raw_input_original): store a pointer to the
2020 true raw_input to harden against code which can modify it
2026 true raw_input to harden against code which can modify it
2021 (wx.py.PyShell does this and would otherwise crash ipython).
2027 (wx.py.PyShell does this and would otherwise crash ipython).
2022 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2028 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2023
2029
2024 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2030 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2025 Ctrl-C problem, which does not mess up the input line.
2031 Ctrl-C problem, which does not mess up the input line.
2026
2032
2027 2004-11-03 Fernando Perez <fperez@colorado.edu>
2033 2004-11-03 Fernando Perez <fperez@colorado.edu>
2028
2034
2029 * IPython/Release.py: Changed licensing to BSD, in all files.
2035 * IPython/Release.py: Changed licensing to BSD, in all files.
2030 (name): lowercase name for tarball/RPM release.
2036 (name): lowercase name for tarball/RPM release.
2031
2037
2032 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2038 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2033 use throughout ipython.
2039 use throughout ipython.
2034
2040
2035 * IPython/Magic.py (Magic._ofind): Switch to using the new
2041 * IPython/Magic.py (Magic._ofind): Switch to using the new
2036 OInspect.getdoc() function.
2042 OInspect.getdoc() function.
2037
2043
2038 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2044 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2039 of the line currently being canceled via Ctrl-C. It's extremely
2045 of the line currently being canceled via Ctrl-C. It's extremely
2040 ugly, but I don't know how to do it better (the problem is one of
2046 ugly, but I don't know how to do it better (the problem is one of
2041 handling cross-thread exceptions).
2047 handling cross-thread exceptions).
2042
2048
2043 2004-10-28 Fernando Perez <fperez@colorado.edu>
2049 2004-10-28 Fernando Perez <fperez@colorado.edu>
2044
2050
2045 * IPython/Shell.py (signal_handler): add signal handlers to trap
2051 * IPython/Shell.py (signal_handler): add signal handlers to trap
2046 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2052 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2047 report by Francesc Alted.
2053 report by Francesc Alted.
2048
2054
2049 2004-10-21 Fernando Perez <fperez@colorado.edu>
2055 2004-10-21 Fernando Perez <fperez@colorado.edu>
2050
2056
2051 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2057 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2052 to % for pysh syntax extensions.
2058 to % for pysh syntax extensions.
2053
2059
2054 2004-10-09 Fernando Perez <fperez@colorado.edu>
2060 2004-10-09 Fernando Perez <fperez@colorado.edu>
2055
2061
2056 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2062 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2057 arrays to print a more useful summary, without calling str(arr).
2063 arrays to print a more useful summary, without calling str(arr).
2058 This avoids the problem of extremely lengthy computations which
2064 This avoids the problem of extremely lengthy computations which
2059 occur if arr is large, and appear to the user as a system lockup
2065 occur if arr is large, and appear to the user as a system lockup
2060 with 100% cpu activity. After a suggestion by Kristian Sandberg
2066 with 100% cpu activity. After a suggestion by Kristian Sandberg
2061 <Kristian.Sandberg@colorado.edu>.
2067 <Kristian.Sandberg@colorado.edu>.
2062 (Magic.__init__): fix bug in global magic escapes not being
2068 (Magic.__init__): fix bug in global magic escapes not being
2063 correctly set.
2069 correctly set.
2064
2070
2065 2004-10-08 Fernando Perez <fperez@colorado.edu>
2071 2004-10-08 Fernando Perez <fperez@colorado.edu>
2066
2072
2067 * IPython/Magic.py (__license__): change to absolute imports of
2073 * IPython/Magic.py (__license__): change to absolute imports of
2068 ipython's own internal packages, to start adapting to the absolute
2074 ipython's own internal packages, to start adapting to the absolute
2069 import requirement of PEP-328.
2075 import requirement of PEP-328.
2070
2076
2071 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2077 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2072 files, and standardize author/license marks through the Release
2078 files, and standardize author/license marks through the Release
2073 module instead of having per/file stuff (except for files with
2079 module instead of having per/file stuff (except for files with
2074 particular licenses, like the MIT/PSF-licensed codes).
2080 particular licenses, like the MIT/PSF-licensed codes).
2075
2081
2076 * IPython/Debugger.py: remove dead code for python 2.1
2082 * IPython/Debugger.py: remove dead code for python 2.1
2077
2083
2078 2004-10-04 Fernando Perez <fperez@colorado.edu>
2084 2004-10-04 Fernando Perez <fperez@colorado.edu>
2079
2085
2080 * IPython/iplib.py (ipmagic): New function for accessing magics
2086 * IPython/iplib.py (ipmagic): New function for accessing magics
2081 via a normal python function call.
2087 via a normal python function call.
2082
2088
2083 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2089 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2084 from '@' to '%', to accomodate the new @decorator syntax of python
2090 from '@' to '%', to accomodate the new @decorator syntax of python
2085 2.4.
2091 2.4.
2086
2092
2087 2004-09-29 Fernando Perez <fperez@colorado.edu>
2093 2004-09-29 Fernando Perez <fperez@colorado.edu>
2088
2094
2089 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2095 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2090 matplotlib.use to prevent running scripts which try to switch
2096 matplotlib.use to prevent running scripts which try to switch
2091 interactive backends from within ipython. This will just crash
2097 interactive backends from within ipython. This will just crash
2092 the python interpreter, so we can't allow it (but a detailed error
2098 the python interpreter, so we can't allow it (but a detailed error
2093 is given to the user).
2099 is given to the user).
2094
2100
2095 2004-09-28 Fernando Perez <fperez@colorado.edu>
2101 2004-09-28 Fernando Perez <fperez@colorado.edu>
2096
2102
2097 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2103 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2098 matplotlib-related fixes so that using @run with non-matplotlib
2104 matplotlib-related fixes so that using @run with non-matplotlib
2099 scripts doesn't pop up spurious plot windows. This requires
2105 scripts doesn't pop up spurious plot windows. This requires
2100 matplotlib >= 0.63, where I had to make some changes as well.
2106 matplotlib >= 0.63, where I had to make some changes as well.
2101
2107
2102 * IPython/ipmaker.py (make_IPython): update version requirement to
2108 * IPython/ipmaker.py (make_IPython): update version requirement to
2103 python 2.2.
2109 python 2.2.
2104
2110
2105 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2111 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2106 banner arg for embedded customization.
2112 banner arg for embedded customization.
2107
2113
2108 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2114 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2109 explicit uses of __IP as the IPython's instance name. Now things
2115 explicit uses of __IP as the IPython's instance name. Now things
2110 are properly handled via the shell.name value. The actual code
2116 are properly handled via the shell.name value. The actual code
2111 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2117 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2112 is much better than before. I'll clean things completely when the
2118 is much better than before. I'll clean things completely when the
2113 magic stuff gets a real overhaul.
2119 magic stuff gets a real overhaul.
2114
2120
2115 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2121 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2116 minor changes to debian dir.
2122 minor changes to debian dir.
2117
2123
2118 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2124 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2119 pointer to the shell itself in the interactive namespace even when
2125 pointer to the shell itself in the interactive namespace even when
2120 a user-supplied dict is provided. This is needed for embedding
2126 a user-supplied dict is provided. This is needed for embedding
2121 purposes (found by tests with Michel Sanner).
2127 purposes (found by tests with Michel Sanner).
2122
2128
2123 2004-09-27 Fernando Perez <fperez@colorado.edu>
2129 2004-09-27 Fernando Perez <fperez@colorado.edu>
2124
2130
2125 * IPython/UserConfig/ipythonrc: remove []{} from
2131 * IPython/UserConfig/ipythonrc: remove []{} from
2126 readline_remove_delims, so that things like [modname.<TAB> do
2132 readline_remove_delims, so that things like [modname.<TAB> do
2127 proper completion. This disables [].TAB, but that's a less common
2133 proper completion. This disables [].TAB, but that's a less common
2128 case than module names in list comprehensions, for example.
2134 case than module names in list comprehensions, for example.
2129 Thanks to a report by Andrea Riciputi.
2135 Thanks to a report by Andrea Riciputi.
2130
2136
2131 2004-09-09 Fernando Perez <fperez@colorado.edu>
2137 2004-09-09 Fernando Perez <fperez@colorado.edu>
2132
2138
2133 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2139 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2134 blocking problems in win32 and osx. Fix by John.
2140 blocking problems in win32 and osx. Fix by John.
2135
2141
2136 2004-09-08 Fernando Perez <fperez@colorado.edu>
2142 2004-09-08 Fernando Perez <fperez@colorado.edu>
2137
2143
2138 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2144 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2139 for Win32 and OSX. Fix by John Hunter.
2145 for Win32 and OSX. Fix by John Hunter.
2140
2146
2141 2004-08-30 *** Released version 0.6.3
2147 2004-08-30 *** Released version 0.6.3
2142
2148
2143 2004-08-30 Fernando Perez <fperez@colorado.edu>
2149 2004-08-30 Fernando Perez <fperez@colorado.edu>
2144
2150
2145 * setup.py (isfile): Add manpages to list of dependent files to be
2151 * setup.py (isfile): Add manpages to list of dependent files to be
2146 updated.
2152 updated.
2147
2153
2148 2004-08-27 Fernando Perez <fperez@colorado.edu>
2154 2004-08-27 Fernando Perez <fperez@colorado.edu>
2149
2155
2150 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2156 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2151 for now. They don't really work with standalone WX/GTK code
2157 for now. They don't really work with standalone WX/GTK code
2152 (though matplotlib IS working fine with both of those backends).
2158 (though matplotlib IS working fine with both of those backends).
2153 This will neeed much more testing. I disabled most things with
2159 This will neeed much more testing. I disabled most things with
2154 comments, so turning it back on later should be pretty easy.
2160 comments, so turning it back on later should be pretty easy.
2155
2161
2156 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2162 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2157 autocalling of expressions like r'foo', by modifying the line
2163 autocalling of expressions like r'foo', by modifying the line
2158 split regexp. Closes
2164 split regexp. Closes
2159 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2165 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2160 Riley <ipythonbugs-AT-sabi.net>.
2166 Riley <ipythonbugs-AT-sabi.net>.
2161 (InteractiveShell.mainloop): honor --nobanner with banner
2167 (InteractiveShell.mainloop): honor --nobanner with banner
2162 extensions.
2168 extensions.
2163
2169
2164 * IPython/Shell.py: Significant refactoring of all classes, so
2170 * IPython/Shell.py: Significant refactoring of all classes, so
2165 that we can really support ALL matplotlib backends and threading
2171 that we can really support ALL matplotlib backends and threading
2166 models (John spotted a bug with Tk which required this). Now we
2172 models (John spotted a bug with Tk which required this). Now we
2167 should support single-threaded, WX-threads and GTK-threads, both
2173 should support single-threaded, WX-threads and GTK-threads, both
2168 for generic code and for matplotlib.
2174 for generic code and for matplotlib.
2169
2175
2170 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2176 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2171 -pylab, to simplify things for users. Will also remove the pylab
2177 -pylab, to simplify things for users. Will also remove the pylab
2172 profile, since now all of matplotlib configuration is directly
2178 profile, since now all of matplotlib configuration is directly
2173 handled here. This also reduces startup time.
2179 handled here. This also reduces startup time.
2174
2180
2175 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2181 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2176 shell wasn't being correctly called. Also in IPShellWX.
2182 shell wasn't being correctly called. Also in IPShellWX.
2177
2183
2178 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2184 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2179 fine-tune banner.
2185 fine-tune banner.
2180
2186
2181 * IPython/numutils.py (spike): Deprecate these spike functions,
2187 * IPython/numutils.py (spike): Deprecate these spike functions,
2182 delete (long deprecated) gnuplot_exec handler.
2188 delete (long deprecated) gnuplot_exec handler.
2183
2189
2184 2004-08-26 Fernando Perez <fperez@colorado.edu>
2190 2004-08-26 Fernando Perez <fperez@colorado.edu>
2185
2191
2186 * ipython.1: Update for threading options, plus some others which
2192 * ipython.1: Update for threading options, plus some others which
2187 were missing.
2193 were missing.
2188
2194
2189 * IPython/ipmaker.py (__call__): Added -wthread option for
2195 * IPython/ipmaker.py (__call__): Added -wthread option for
2190 wxpython thread handling. Make sure threading options are only
2196 wxpython thread handling. Make sure threading options are only
2191 valid at the command line.
2197 valid at the command line.
2192
2198
2193 * scripts/ipython: moved shell selection into a factory function
2199 * scripts/ipython: moved shell selection into a factory function
2194 in Shell.py, to keep the starter script to a minimum.
2200 in Shell.py, to keep the starter script to a minimum.
2195
2201
2196 2004-08-25 Fernando Perez <fperez@colorado.edu>
2202 2004-08-25 Fernando Perez <fperez@colorado.edu>
2197
2203
2198 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2204 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2199 John. Along with some recent changes he made to matplotlib, the
2205 John. Along with some recent changes he made to matplotlib, the
2200 next versions of both systems should work very well together.
2206 next versions of both systems should work very well together.
2201
2207
2202 2004-08-24 Fernando Perez <fperez@colorado.edu>
2208 2004-08-24 Fernando Perez <fperez@colorado.edu>
2203
2209
2204 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2210 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2205 tried to switch the profiling to using hotshot, but I'm getting
2211 tried to switch the profiling to using hotshot, but I'm getting
2206 strange errors from prof.runctx() there. I may be misreading the
2212 strange errors from prof.runctx() there. I may be misreading the
2207 docs, but it looks weird. For now the profiling code will
2213 docs, but it looks weird. For now the profiling code will
2208 continue to use the standard profiler.
2214 continue to use the standard profiler.
2209
2215
2210 2004-08-23 Fernando Perez <fperez@colorado.edu>
2216 2004-08-23 Fernando Perez <fperez@colorado.edu>
2211
2217
2212 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2218 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2213 threaded shell, by John Hunter. It's not quite ready yet, but
2219 threaded shell, by John Hunter. It's not quite ready yet, but
2214 close.
2220 close.
2215
2221
2216 2004-08-22 Fernando Perez <fperez@colorado.edu>
2222 2004-08-22 Fernando Perez <fperez@colorado.edu>
2217
2223
2218 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2224 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2219 in Magic and ultraTB.
2225 in Magic and ultraTB.
2220
2226
2221 * ipython.1: document threading options in manpage.
2227 * ipython.1: document threading options in manpage.
2222
2228
2223 * scripts/ipython: Changed name of -thread option to -gthread,
2229 * scripts/ipython: Changed name of -thread option to -gthread,
2224 since this is GTK specific. I want to leave the door open for a
2230 since this is GTK specific. I want to leave the door open for a
2225 -wthread option for WX, which will most likely be necessary. This
2231 -wthread option for WX, which will most likely be necessary. This
2226 change affects usage and ipmaker as well.
2232 change affects usage and ipmaker as well.
2227
2233
2228 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2234 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2229 handle the matplotlib shell issues. Code by John Hunter
2235 handle the matplotlib shell issues. Code by John Hunter
2230 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2236 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2231 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2237 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2232 broken (and disabled for end users) for now, but it puts the
2238 broken (and disabled for end users) for now, but it puts the
2233 infrastructure in place.
2239 infrastructure in place.
2234
2240
2235 2004-08-21 Fernando Perez <fperez@colorado.edu>
2241 2004-08-21 Fernando Perez <fperez@colorado.edu>
2236
2242
2237 * ipythonrc-pylab: Add matplotlib support.
2243 * ipythonrc-pylab: Add matplotlib support.
2238
2244
2239 * matplotlib_config.py: new files for matplotlib support, part of
2245 * matplotlib_config.py: new files for matplotlib support, part of
2240 the pylab profile.
2246 the pylab profile.
2241
2247
2242 * IPython/usage.py (__doc__): documented the threading options.
2248 * IPython/usage.py (__doc__): documented the threading options.
2243
2249
2244 2004-08-20 Fernando Perez <fperez@colorado.edu>
2250 2004-08-20 Fernando Perez <fperez@colorado.edu>
2245
2251
2246 * ipython: Modified the main calling routine to handle the -thread
2252 * ipython: Modified the main calling routine to handle the -thread
2247 and -mpthread options. This needs to be done as a top-level hack,
2253 and -mpthread options. This needs to be done as a top-level hack,
2248 because it determines which class to instantiate for IPython
2254 because it determines which class to instantiate for IPython
2249 itself.
2255 itself.
2250
2256
2251 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2257 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2252 classes to support multithreaded GTK operation without blocking,
2258 classes to support multithreaded GTK operation without blocking,
2253 and matplotlib with all backends. This is a lot of still very
2259 and matplotlib with all backends. This is a lot of still very
2254 experimental code, and threads are tricky. So it may still have a
2260 experimental code, and threads are tricky. So it may still have a
2255 few rough edges... This code owes a lot to
2261 few rough edges... This code owes a lot to
2256 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2262 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2257 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2263 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2258 to John Hunter for all the matplotlib work.
2264 to John Hunter for all the matplotlib work.
2259
2265
2260 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2266 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2261 options for gtk thread and matplotlib support.
2267 options for gtk thread and matplotlib support.
2262
2268
2263 2004-08-16 Fernando Perez <fperez@colorado.edu>
2269 2004-08-16 Fernando Perez <fperez@colorado.edu>
2264
2270
2265 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2271 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2266 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2272 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2267 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2273 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2268
2274
2269 2004-08-11 Fernando Perez <fperez@colorado.edu>
2275 2004-08-11 Fernando Perez <fperez@colorado.edu>
2270
2276
2271 * setup.py (isfile): Fix build so documentation gets updated for
2277 * setup.py (isfile): Fix build so documentation gets updated for
2272 rpms (it was only done for .tgz builds).
2278 rpms (it was only done for .tgz builds).
2273
2279
2274 2004-08-10 Fernando Perez <fperez@colorado.edu>
2280 2004-08-10 Fernando Perez <fperez@colorado.edu>
2275
2281
2276 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2282 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2277
2283
2278 * iplib.py : Silence syntax error exceptions in tab-completion.
2284 * iplib.py : Silence syntax error exceptions in tab-completion.
2279
2285
2280 2004-08-05 Fernando Perez <fperez@colorado.edu>
2286 2004-08-05 Fernando Perez <fperez@colorado.edu>
2281
2287
2282 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2288 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2283 'color off' mark for continuation prompts. This was causing long
2289 'color off' mark for continuation prompts. This was causing long
2284 continuation lines to mis-wrap.
2290 continuation lines to mis-wrap.
2285
2291
2286 2004-08-01 Fernando Perez <fperez@colorado.edu>
2292 2004-08-01 Fernando Perez <fperez@colorado.edu>
2287
2293
2288 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2294 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2289 for building ipython to be a parameter. All this is necessary
2295 for building ipython to be a parameter. All this is necessary
2290 right now to have a multithreaded version, but this insane
2296 right now to have a multithreaded version, but this insane
2291 non-design will be cleaned up soon. For now, it's a hack that
2297 non-design will be cleaned up soon. For now, it's a hack that
2292 works.
2298 works.
2293
2299
2294 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2300 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2295 args in various places. No bugs so far, but it's a dangerous
2301 args in various places. No bugs so far, but it's a dangerous
2296 practice.
2302 practice.
2297
2303
2298 2004-07-31 Fernando Perez <fperez@colorado.edu>
2304 2004-07-31 Fernando Perez <fperez@colorado.edu>
2299
2305
2300 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2306 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2301 fix completion of files with dots in their names under most
2307 fix completion of files with dots in their names under most
2302 profiles (pysh was OK because the completion order is different).
2308 profiles (pysh was OK because the completion order is different).
2303
2309
2304 2004-07-27 Fernando Perez <fperez@colorado.edu>
2310 2004-07-27 Fernando Perez <fperez@colorado.edu>
2305
2311
2306 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2312 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2307 keywords manually, b/c the one in keyword.py was removed in python
2313 keywords manually, b/c the one in keyword.py was removed in python
2308 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2314 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2309 This is NOT a bug under python 2.3 and earlier.
2315 This is NOT a bug under python 2.3 and earlier.
2310
2316
2311 2004-07-26 Fernando Perez <fperez@colorado.edu>
2317 2004-07-26 Fernando Perez <fperez@colorado.edu>
2312
2318
2313 * IPython/ultraTB.py (VerboseTB.text): Add another
2319 * IPython/ultraTB.py (VerboseTB.text): Add another
2314 linecache.checkcache() call to try to prevent inspect.py from
2320 linecache.checkcache() call to try to prevent inspect.py from
2315 crashing under python 2.3. I think this fixes
2321 crashing under python 2.3. I think this fixes
2316 http://www.scipy.net/roundup/ipython/issue17.
2322 http://www.scipy.net/roundup/ipython/issue17.
2317
2323
2318 2004-07-26 *** Released version 0.6.2
2324 2004-07-26 *** Released version 0.6.2
2319
2325
2320 2004-07-26 Fernando Perez <fperez@colorado.edu>
2326 2004-07-26 Fernando Perez <fperez@colorado.edu>
2321
2327
2322 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2328 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2323 fail for any number.
2329 fail for any number.
2324 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2330 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2325 empty bookmarks.
2331 empty bookmarks.
2326
2332
2327 2004-07-26 *** Released version 0.6.1
2333 2004-07-26 *** Released version 0.6.1
2328
2334
2329 2004-07-26 Fernando Perez <fperez@colorado.edu>
2335 2004-07-26 Fernando Perez <fperez@colorado.edu>
2330
2336
2331 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2337 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2332
2338
2333 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2339 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2334 escaping '()[]{}' in filenames.
2340 escaping '()[]{}' in filenames.
2335
2341
2336 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2342 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2337 Python 2.2 users who lack a proper shlex.split.
2343 Python 2.2 users who lack a proper shlex.split.
2338
2344
2339 2004-07-19 Fernando Perez <fperez@colorado.edu>
2345 2004-07-19 Fernando Perez <fperez@colorado.edu>
2340
2346
2341 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2347 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2342 for reading readline's init file. I follow the normal chain:
2348 for reading readline's init file. I follow the normal chain:
2343 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2349 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2344 report by Mike Heeter. This closes
2350 report by Mike Heeter. This closes
2345 http://www.scipy.net/roundup/ipython/issue16.
2351 http://www.scipy.net/roundup/ipython/issue16.
2346
2352
2347 2004-07-18 Fernando Perez <fperez@colorado.edu>
2353 2004-07-18 Fernando Perez <fperez@colorado.edu>
2348
2354
2349 * IPython/iplib.py (__init__): Add better handling of '\' under
2355 * IPython/iplib.py (__init__): Add better handling of '\' under
2350 Win32 for filenames. After a patch by Ville.
2356 Win32 for filenames. After a patch by Ville.
2351
2357
2352 2004-07-17 Fernando Perez <fperez@colorado.edu>
2358 2004-07-17 Fernando Perez <fperez@colorado.edu>
2353
2359
2354 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2360 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2355 autocalling would be triggered for 'foo is bar' if foo is
2361 autocalling would be triggered for 'foo is bar' if foo is
2356 callable. I also cleaned up the autocall detection code to use a
2362 callable. I also cleaned up the autocall detection code to use a
2357 regexp, which is faster. Bug reported by Alexander Schmolck.
2363 regexp, which is faster. Bug reported by Alexander Schmolck.
2358
2364
2359 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2365 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2360 '?' in them would confuse the help system. Reported by Alex
2366 '?' in them would confuse the help system. Reported by Alex
2361 Schmolck.
2367 Schmolck.
2362
2368
2363 2004-07-16 Fernando Perez <fperez@colorado.edu>
2369 2004-07-16 Fernando Perez <fperez@colorado.edu>
2364
2370
2365 * IPython/GnuplotInteractive.py (__all__): added plot2.
2371 * IPython/GnuplotInteractive.py (__all__): added plot2.
2366
2372
2367 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2373 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2368 plotting dictionaries, lists or tuples of 1d arrays.
2374 plotting dictionaries, lists or tuples of 1d arrays.
2369
2375
2370 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2376 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2371 optimizations.
2377 optimizations.
2372
2378
2373 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2379 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2374 the information which was there from Janko's original IPP code:
2380 the information which was there from Janko's original IPP code:
2375
2381
2376 03.05.99 20:53 porto.ifm.uni-kiel.de
2382 03.05.99 20:53 porto.ifm.uni-kiel.de
2377 --Started changelog.
2383 --Started changelog.
2378 --make clear do what it say it does
2384 --make clear do what it say it does
2379 --added pretty output of lines from inputcache
2385 --added pretty output of lines from inputcache
2380 --Made Logger a mixin class, simplifies handling of switches
2386 --Made Logger a mixin class, simplifies handling of switches
2381 --Added own completer class. .string<TAB> expands to last history
2387 --Added own completer class. .string<TAB> expands to last history
2382 line which starts with string. The new expansion is also present
2388 line which starts with string. The new expansion is also present
2383 with Ctrl-r from the readline library. But this shows, who this
2389 with Ctrl-r from the readline library. But this shows, who this
2384 can be done for other cases.
2390 can be done for other cases.
2385 --Added convention that all shell functions should accept a
2391 --Added convention that all shell functions should accept a
2386 parameter_string This opens the door for different behaviour for
2392 parameter_string This opens the door for different behaviour for
2387 each function. @cd is a good example of this.
2393 each function. @cd is a good example of this.
2388
2394
2389 04.05.99 12:12 porto.ifm.uni-kiel.de
2395 04.05.99 12:12 porto.ifm.uni-kiel.de
2390 --added logfile rotation
2396 --added logfile rotation
2391 --added new mainloop method which freezes first the namespace
2397 --added new mainloop method which freezes first the namespace
2392
2398
2393 07.05.99 21:24 porto.ifm.uni-kiel.de
2399 07.05.99 21:24 porto.ifm.uni-kiel.de
2394 --added the docreader classes. Now there is a help system.
2400 --added the docreader classes. Now there is a help system.
2395 -This is only a first try. Currently it's not easy to put new
2401 -This is only a first try. Currently it's not easy to put new
2396 stuff in the indices. But this is the way to go. Info would be
2402 stuff in the indices. But this is the way to go. Info would be
2397 better, but HTML is every where and not everybody has an info
2403 better, but HTML is every where and not everybody has an info
2398 system installed and it's not so easy to change html-docs to info.
2404 system installed and it's not so easy to change html-docs to info.
2399 --added global logfile option
2405 --added global logfile option
2400 --there is now a hook for object inspection method pinfo needs to
2406 --there is now a hook for object inspection method pinfo needs to
2401 be provided for this. Can be reached by two '??'.
2407 be provided for this. Can be reached by two '??'.
2402
2408
2403 08.05.99 20:51 porto.ifm.uni-kiel.de
2409 08.05.99 20:51 porto.ifm.uni-kiel.de
2404 --added a README
2410 --added a README
2405 --bug in rc file. Something has changed so functions in the rc
2411 --bug in rc file. Something has changed so functions in the rc
2406 file need to reference the shell and not self. Not clear if it's a
2412 file need to reference the shell and not self. Not clear if it's a
2407 bug or feature.
2413 bug or feature.
2408 --changed rc file for new behavior
2414 --changed rc file for new behavior
2409
2415
2410 2004-07-15 Fernando Perez <fperez@colorado.edu>
2416 2004-07-15 Fernando Perez <fperez@colorado.edu>
2411
2417
2412 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2418 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2413 cache was falling out of sync in bizarre manners when multi-line
2419 cache was falling out of sync in bizarre manners when multi-line
2414 input was present. Minor optimizations and cleanup.
2420 input was present. Minor optimizations and cleanup.
2415
2421
2416 (Logger): Remove old Changelog info for cleanup. This is the
2422 (Logger): Remove old Changelog info for cleanup. This is the
2417 information which was there from Janko's original code:
2423 information which was there from Janko's original code:
2418
2424
2419 Changes to Logger: - made the default log filename a parameter
2425 Changes to Logger: - made the default log filename a parameter
2420
2426
2421 - put a check for lines beginning with !@? in log(). Needed
2427 - put a check for lines beginning with !@? in log(). Needed
2422 (even if the handlers properly log their lines) for mid-session
2428 (even if the handlers properly log their lines) for mid-session
2423 logging activation to work properly. Without this, lines logged
2429 logging activation to work properly. Without this, lines logged
2424 in mid session, which get read from the cache, would end up
2430 in mid session, which get read from the cache, would end up
2425 'bare' (with !@? in the open) in the log. Now they are caught
2431 'bare' (with !@? in the open) in the log. Now they are caught
2426 and prepended with a #.
2432 and prepended with a #.
2427
2433
2428 * IPython/iplib.py (InteractiveShell.init_readline): added check
2434 * IPython/iplib.py (InteractiveShell.init_readline): added check
2429 in case MagicCompleter fails to be defined, so we don't crash.
2435 in case MagicCompleter fails to be defined, so we don't crash.
2430
2436
2431 2004-07-13 Fernando Perez <fperez@colorado.edu>
2437 2004-07-13 Fernando Perez <fperez@colorado.edu>
2432
2438
2433 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2439 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2434 of EPS if the requested filename ends in '.eps'.
2440 of EPS if the requested filename ends in '.eps'.
2435
2441
2436 2004-07-04 Fernando Perez <fperez@colorado.edu>
2442 2004-07-04 Fernando Perez <fperez@colorado.edu>
2437
2443
2438 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2444 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2439 escaping of quotes when calling the shell.
2445 escaping of quotes when calling the shell.
2440
2446
2441 2004-07-02 Fernando Perez <fperez@colorado.edu>
2447 2004-07-02 Fernando Perez <fperez@colorado.edu>
2442
2448
2443 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2449 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2444 gettext not working because we were clobbering '_'. Fixes
2450 gettext not working because we were clobbering '_'. Fixes
2445 http://www.scipy.net/roundup/ipython/issue6.
2451 http://www.scipy.net/roundup/ipython/issue6.
2446
2452
2447 2004-07-01 Fernando Perez <fperez@colorado.edu>
2453 2004-07-01 Fernando Perez <fperez@colorado.edu>
2448
2454
2449 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2455 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2450 into @cd. Patch by Ville.
2456 into @cd. Patch by Ville.
2451
2457
2452 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2458 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2453 new function to store things after ipmaker runs. Patch by Ville.
2459 new function to store things after ipmaker runs. Patch by Ville.
2454 Eventually this will go away once ipmaker is removed and the class
2460 Eventually this will go away once ipmaker is removed and the class
2455 gets cleaned up, but for now it's ok. Key functionality here is
2461 gets cleaned up, but for now it's ok. Key functionality here is
2456 the addition of the persistent storage mechanism, a dict for
2462 the addition of the persistent storage mechanism, a dict for
2457 keeping data across sessions (for now just bookmarks, but more can
2463 keeping data across sessions (for now just bookmarks, but more can
2458 be implemented later).
2464 be implemented later).
2459
2465
2460 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2466 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2461 persistent across sections. Patch by Ville, I modified it
2467 persistent across sections. Patch by Ville, I modified it
2462 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2468 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2463 added a '-l' option to list all bookmarks.
2469 added a '-l' option to list all bookmarks.
2464
2470
2465 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2471 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2466 center for cleanup. Registered with atexit.register(). I moved
2472 center for cleanup. Registered with atexit.register(). I moved
2467 here the old exit_cleanup(). After a patch by Ville.
2473 here the old exit_cleanup(). After a patch by Ville.
2468
2474
2469 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2475 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2470 characters in the hacked shlex_split for python 2.2.
2476 characters in the hacked shlex_split for python 2.2.
2471
2477
2472 * IPython/iplib.py (file_matches): more fixes to filenames with
2478 * IPython/iplib.py (file_matches): more fixes to filenames with
2473 whitespace in them. It's not perfect, but limitations in python's
2479 whitespace in them. It's not perfect, but limitations in python's
2474 readline make it impossible to go further.
2480 readline make it impossible to go further.
2475
2481
2476 2004-06-29 Fernando Perez <fperez@colorado.edu>
2482 2004-06-29 Fernando Perez <fperez@colorado.edu>
2477
2483
2478 * IPython/iplib.py (file_matches): escape whitespace correctly in
2484 * IPython/iplib.py (file_matches): escape whitespace correctly in
2479 filename completions. Bug reported by Ville.
2485 filename completions. Bug reported by Ville.
2480
2486
2481 2004-06-28 Fernando Perez <fperez@colorado.edu>
2487 2004-06-28 Fernando Perez <fperez@colorado.edu>
2482
2488
2483 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2489 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2484 the history file will be called 'history-PROFNAME' (or just
2490 the history file will be called 'history-PROFNAME' (or just
2485 'history' if no profile is loaded). I was getting annoyed at
2491 'history' if no profile is loaded). I was getting annoyed at
2486 getting my Numerical work history clobbered by pysh sessions.
2492 getting my Numerical work history clobbered by pysh sessions.
2487
2493
2488 * IPython/iplib.py (InteractiveShell.__init__): Internal
2494 * IPython/iplib.py (InteractiveShell.__init__): Internal
2489 getoutputerror() function so that we can honor the system_verbose
2495 getoutputerror() function so that we can honor the system_verbose
2490 flag for _all_ system calls. I also added escaping of #
2496 flag for _all_ system calls. I also added escaping of #
2491 characters here to avoid confusing Itpl.
2497 characters here to avoid confusing Itpl.
2492
2498
2493 * IPython/Magic.py (shlex_split): removed call to shell in
2499 * IPython/Magic.py (shlex_split): removed call to shell in
2494 parse_options and replaced it with shlex.split(). The annoying
2500 parse_options and replaced it with shlex.split(). The annoying
2495 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2501 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2496 to backport it from 2.3, with several frail hacks (the shlex
2502 to backport it from 2.3, with several frail hacks (the shlex
2497 module is rather limited in 2.2). Thanks to a suggestion by Ville
2503 module is rather limited in 2.2). Thanks to a suggestion by Ville
2498 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2504 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2499 problem.
2505 problem.
2500
2506
2501 (Magic.magic_system_verbose): new toggle to print the actual
2507 (Magic.magic_system_verbose): new toggle to print the actual
2502 system calls made by ipython. Mainly for debugging purposes.
2508 system calls made by ipython. Mainly for debugging purposes.
2503
2509
2504 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2510 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2505 doesn't support persistence. Reported (and fix suggested) by
2511 doesn't support persistence. Reported (and fix suggested) by
2506 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2512 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2507
2513
2508 2004-06-26 Fernando Perez <fperez@colorado.edu>
2514 2004-06-26 Fernando Perez <fperez@colorado.edu>
2509
2515
2510 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2516 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2511 continue prompts.
2517 continue prompts.
2512
2518
2513 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2519 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2514 function (basically a big docstring) and a few more things here to
2520 function (basically a big docstring) and a few more things here to
2515 speedup startup. pysh.py is now very lightweight. We want because
2521 speedup startup. pysh.py is now very lightweight. We want because
2516 it gets execfile'd, while InterpreterExec gets imported, so
2522 it gets execfile'd, while InterpreterExec gets imported, so
2517 byte-compilation saves time.
2523 byte-compilation saves time.
2518
2524
2519 2004-06-25 Fernando Perez <fperez@colorado.edu>
2525 2004-06-25 Fernando Perez <fperez@colorado.edu>
2520
2526
2521 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2527 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2522 -NUM', which was recently broken.
2528 -NUM', which was recently broken.
2523
2529
2524 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2530 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2525 in multi-line input (but not !!, which doesn't make sense there).
2531 in multi-line input (but not !!, which doesn't make sense there).
2526
2532
2527 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2533 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2528 It's just too useful, and people can turn it off in the less
2534 It's just too useful, and people can turn it off in the less
2529 common cases where it's a problem.
2535 common cases where it's a problem.
2530
2536
2531 2004-06-24 Fernando Perez <fperez@colorado.edu>
2537 2004-06-24 Fernando Perez <fperez@colorado.edu>
2532
2538
2533 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2539 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2534 special syntaxes (like alias calling) is now allied in multi-line
2540 special syntaxes (like alias calling) is now allied in multi-line
2535 input. This is still _very_ experimental, but it's necessary for
2541 input. This is still _very_ experimental, but it's necessary for
2536 efficient shell usage combining python looping syntax with system
2542 efficient shell usage combining python looping syntax with system
2537 calls. For now it's restricted to aliases, I don't think it
2543 calls. For now it's restricted to aliases, I don't think it
2538 really even makes sense to have this for magics.
2544 really even makes sense to have this for magics.
2539
2545
2540 2004-06-23 Fernando Perez <fperez@colorado.edu>
2546 2004-06-23 Fernando Perez <fperez@colorado.edu>
2541
2547
2542 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2548 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2543 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2549 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2544
2550
2545 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2551 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2546 extensions under Windows (after code sent by Gary Bishop). The
2552 extensions under Windows (after code sent by Gary Bishop). The
2547 extensions considered 'executable' are stored in IPython's rc
2553 extensions considered 'executable' are stored in IPython's rc
2548 structure as win_exec_ext.
2554 structure as win_exec_ext.
2549
2555
2550 * IPython/genutils.py (shell): new function, like system() but
2556 * IPython/genutils.py (shell): new function, like system() but
2551 without return value. Very useful for interactive shell work.
2557 without return value. Very useful for interactive shell work.
2552
2558
2553 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2559 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2554 delete aliases.
2560 delete aliases.
2555
2561
2556 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2562 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2557 sure that the alias table doesn't contain python keywords.
2563 sure that the alias table doesn't contain python keywords.
2558
2564
2559 2004-06-21 Fernando Perez <fperez@colorado.edu>
2565 2004-06-21 Fernando Perez <fperez@colorado.edu>
2560
2566
2561 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2567 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2562 non-existent items are found in $PATH. Reported by Thorsten.
2568 non-existent items are found in $PATH. Reported by Thorsten.
2563
2569
2564 2004-06-20 Fernando Perez <fperez@colorado.edu>
2570 2004-06-20 Fernando Perez <fperez@colorado.edu>
2565
2571
2566 * IPython/iplib.py (complete): modified the completer so that the
2572 * IPython/iplib.py (complete): modified the completer so that the
2567 order of priorities can be easily changed at runtime.
2573 order of priorities can be easily changed at runtime.
2568
2574
2569 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2575 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2570 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2576 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2571
2577
2572 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2578 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2573 expand Python variables prepended with $ in all system calls. The
2579 expand Python variables prepended with $ in all system calls. The
2574 same was done to InteractiveShell.handle_shell_escape. Now all
2580 same was done to InteractiveShell.handle_shell_escape. Now all
2575 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2581 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2576 expansion of python variables and expressions according to the
2582 expansion of python variables and expressions according to the
2577 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2583 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2578
2584
2579 Though PEP-215 has been rejected, a similar (but simpler) one
2585 Though PEP-215 has been rejected, a similar (but simpler) one
2580 seems like it will go into Python 2.4, PEP-292 -
2586 seems like it will go into Python 2.4, PEP-292 -
2581 http://www.python.org/peps/pep-0292.html.
2587 http://www.python.org/peps/pep-0292.html.
2582
2588
2583 I'll keep the full syntax of PEP-215, since IPython has since the
2589 I'll keep the full syntax of PEP-215, since IPython has since the
2584 start used Ka-Ping Yee's reference implementation discussed there
2590 start used Ka-Ping Yee's reference implementation discussed there
2585 (Itpl), and I actually like the powerful semantics it offers.
2591 (Itpl), and I actually like the powerful semantics it offers.
2586
2592
2587 In order to access normal shell variables, the $ has to be escaped
2593 In order to access normal shell variables, the $ has to be escaped
2588 via an extra $. For example:
2594 via an extra $. For example:
2589
2595
2590 In [7]: PATH='a python variable'
2596 In [7]: PATH='a python variable'
2591
2597
2592 In [8]: !echo $PATH
2598 In [8]: !echo $PATH
2593 a python variable
2599 a python variable
2594
2600
2595 In [9]: !echo $$PATH
2601 In [9]: !echo $$PATH
2596 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2602 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2597
2603
2598 (Magic.parse_options): escape $ so the shell doesn't evaluate
2604 (Magic.parse_options): escape $ so the shell doesn't evaluate
2599 things prematurely.
2605 things prematurely.
2600
2606
2601 * IPython/iplib.py (InteractiveShell.call_alias): added the
2607 * IPython/iplib.py (InteractiveShell.call_alias): added the
2602 ability for aliases to expand python variables via $.
2608 ability for aliases to expand python variables via $.
2603
2609
2604 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2610 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2605 system, now there's a @rehash/@rehashx pair of magics. These work
2611 system, now there's a @rehash/@rehashx pair of magics. These work
2606 like the csh rehash command, and can be invoked at any time. They
2612 like the csh rehash command, and can be invoked at any time. They
2607 build a table of aliases to everything in the user's $PATH
2613 build a table of aliases to everything in the user's $PATH
2608 (@rehash uses everything, @rehashx is slower but only adds
2614 (@rehash uses everything, @rehashx is slower but only adds
2609 executable files). With this, the pysh.py-based shell profile can
2615 executable files). With this, the pysh.py-based shell profile can
2610 now simply call rehash upon startup, and full access to all
2616 now simply call rehash upon startup, and full access to all
2611 programs in the user's path is obtained.
2617 programs in the user's path is obtained.
2612
2618
2613 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2619 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2614 functionality is now fully in place. I removed the old dynamic
2620 functionality is now fully in place. I removed the old dynamic
2615 code generation based approach, in favor of a much lighter one
2621 code generation based approach, in favor of a much lighter one
2616 based on a simple dict. The advantage is that this allows me to
2622 based on a simple dict. The advantage is that this allows me to
2617 now have thousands of aliases with negligible cost (unthinkable
2623 now have thousands of aliases with negligible cost (unthinkable
2618 with the old system).
2624 with the old system).
2619
2625
2620 2004-06-19 Fernando Perez <fperez@colorado.edu>
2626 2004-06-19 Fernando Perez <fperez@colorado.edu>
2621
2627
2622 * IPython/iplib.py (__init__): extended MagicCompleter class to
2628 * IPython/iplib.py (__init__): extended MagicCompleter class to
2623 also complete (last in priority) on user aliases.
2629 also complete (last in priority) on user aliases.
2624
2630
2625 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2631 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2626 call to eval.
2632 call to eval.
2627 (ItplNS.__init__): Added a new class which functions like Itpl,
2633 (ItplNS.__init__): Added a new class which functions like Itpl,
2628 but allows configuring the namespace for the evaluation to occur
2634 but allows configuring the namespace for the evaluation to occur
2629 in.
2635 in.
2630
2636
2631 2004-06-18 Fernando Perez <fperez@colorado.edu>
2637 2004-06-18 Fernando Perez <fperez@colorado.edu>
2632
2638
2633 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2639 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2634 better message when 'exit' or 'quit' are typed (a common newbie
2640 better message when 'exit' or 'quit' are typed (a common newbie
2635 confusion).
2641 confusion).
2636
2642
2637 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2643 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2638 check for Windows users.
2644 check for Windows users.
2639
2645
2640 * IPython/iplib.py (InteractiveShell.user_setup): removed
2646 * IPython/iplib.py (InteractiveShell.user_setup): removed
2641 disabling of colors for Windows. I'll test at runtime and issue a
2647 disabling of colors for Windows. I'll test at runtime and issue a
2642 warning if Gary's readline isn't found, as to nudge users to
2648 warning if Gary's readline isn't found, as to nudge users to
2643 download it.
2649 download it.
2644
2650
2645 2004-06-16 Fernando Perez <fperez@colorado.edu>
2651 2004-06-16 Fernando Perez <fperez@colorado.edu>
2646
2652
2647 * IPython/genutils.py (Stream.__init__): changed to print errors
2653 * IPython/genutils.py (Stream.__init__): changed to print errors
2648 to sys.stderr. I had a circular dependency here. Now it's
2654 to sys.stderr. I had a circular dependency here. Now it's
2649 possible to run ipython as IDLE's shell (consider this pre-alpha,
2655 possible to run ipython as IDLE's shell (consider this pre-alpha,
2650 since true stdout things end up in the starting terminal instead
2656 since true stdout things end up in the starting terminal instead
2651 of IDLE's out).
2657 of IDLE's out).
2652
2658
2653 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2659 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2654 users who haven't # updated their prompt_in2 definitions. Remove
2660 users who haven't # updated their prompt_in2 definitions. Remove
2655 eventually.
2661 eventually.
2656 (multiple_replace): added credit to original ASPN recipe.
2662 (multiple_replace): added credit to original ASPN recipe.
2657
2663
2658 2004-06-15 Fernando Perez <fperez@colorado.edu>
2664 2004-06-15 Fernando Perez <fperez@colorado.edu>
2659
2665
2660 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2666 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2661 list of auto-defined aliases.
2667 list of auto-defined aliases.
2662
2668
2663 2004-06-13 Fernando Perez <fperez@colorado.edu>
2669 2004-06-13 Fernando Perez <fperez@colorado.edu>
2664
2670
2665 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2671 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2666 install was really requested (so setup.py can be used for other
2672 install was really requested (so setup.py can be used for other
2667 things under Windows).
2673 things under Windows).
2668
2674
2669 2004-06-10 Fernando Perez <fperez@colorado.edu>
2675 2004-06-10 Fernando Perez <fperez@colorado.edu>
2670
2676
2671 * IPython/Logger.py (Logger.create_log): Manually remove any old
2677 * IPython/Logger.py (Logger.create_log): Manually remove any old
2672 backup, since os.remove may fail under Windows. Fixes bug
2678 backup, since os.remove may fail under Windows. Fixes bug
2673 reported by Thorsten.
2679 reported by Thorsten.
2674
2680
2675 2004-06-09 Fernando Perez <fperez@colorado.edu>
2681 2004-06-09 Fernando Perez <fperez@colorado.edu>
2676
2682
2677 * examples/example-embed.py: fixed all references to %n (replaced
2683 * examples/example-embed.py: fixed all references to %n (replaced
2678 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2684 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2679 for all examples and the manual as well.
2685 for all examples and the manual as well.
2680
2686
2681 2004-06-08 Fernando Perez <fperez@colorado.edu>
2687 2004-06-08 Fernando Perez <fperez@colorado.edu>
2682
2688
2683 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2689 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2684 alignment and color management. All 3 prompt subsystems now
2690 alignment and color management. All 3 prompt subsystems now
2685 inherit from BasePrompt.
2691 inherit from BasePrompt.
2686
2692
2687 * tools/release: updates for windows installer build and tag rpms
2693 * tools/release: updates for windows installer build and tag rpms
2688 with python version (since paths are fixed).
2694 with python version (since paths are fixed).
2689
2695
2690 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2696 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2691 which will become eventually obsolete. Also fixed the default
2697 which will become eventually obsolete. Also fixed the default
2692 prompt_in2 to use \D, so at least new users start with the correct
2698 prompt_in2 to use \D, so at least new users start with the correct
2693 defaults.
2699 defaults.
2694 WARNING: Users with existing ipythonrc files will need to apply
2700 WARNING: Users with existing ipythonrc files will need to apply
2695 this fix manually!
2701 this fix manually!
2696
2702
2697 * setup.py: make windows installer (.exe). This is finally the
2703 * setup.py: make windows installer (.exe). This is finally the
2698 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2704 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2699 which I hadn't included because it required Python 2.3 (or recent
2705 which I hadn't included because it required Python 2.3 (or recent
2700 distutils).
2706 distutils).
2701
2707
2702 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2708 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2703 usage of new '\D' escape.
2709 usage of new '\D' escape.
2704
2710
2705 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2711 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2706 lacks os.getuid())
2712 lacks os.getuid())
2707 (CachedOutput.set_colors): Added the ability to turn coloring
2713 (CachedOutput.set_colors): Added the ability to turn coloring
2708 on/off with @colors even for manually defined prompt colors. It
2714 on/off with @colors even for manually defined prompt colors. It
2709 uses a nasty global, but it works safely and via the generic color
2715 uses a nasty global, but it works safely and via the generic color
2710 handling mechanism.
2716 handling mechanism.
2711 (Prompt2.__init__): Introduced new escape '\D' for continuation
2717 (Prompt2.__init__): Introduced new escape '\D' for continuation
2712 prompts. It represents the counter ('\#') as dots.
2718 prompts. It represents the counter ('\#') as dots.
2713 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2719 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2714 need to update their ipythonrc files and replace '%n' with '\D' in
2720 need to update their ipythonrc files and replace '%n' with '\D' in
2715 their prompt_in2 settings everywhere. Sorry, but there's
2721 their prompt_in2 settings everywhere. Sorry, but there's
2716 otherwise no clean way to get all prompts to properly align. The
2722 otherwise no clean way to get all prompts to properly align. The
2717 ipythonrc shipped with IPython has been updated.
2723 ipythonrc shipped with IPython has been updated.
2718
2724
2719 2004-06-07 Fernando Perez <fperez@colorado.edu>
2725 2004-06-07 Fernando Perez <fperez@colorado.edu>
2720
2726
2721 * setup.py (isfile): Pass local_icons option to latex2html, so the
2727 * setup.py (isfile): Pass local_icons option to latex2html, so the
2722 resulting HTML file is self-contained. Thanks to
2728 resulting HTML file is self-contained. Thanks to
2723 dryice-AT-liu.com.cn for the tip.
2729 dryice-AT-liu.com.cn for the tip.
2724
2730
2725 * pysh.py: I created a new profile 'shell', which implements a
2731 * pysh.py: I created a new profile 'shell', which implements a
2726 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2732 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2727 system shell, nor will it become one anytime soon. It's mainly
2733 system shell, nor will it become one anytime soon. It's mainly
2728 meant to illustrate the use of the new flexible bash-like prompts.
2734 meant to illustrate the use of the new flexible bash-like prompts.
2729 I guess it could be used by hardy souls for true shell management,
2735 I guess it could be used by hardy souls for true shell management,
2730 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2736 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2731 profile. This uses the InterpreterExec extension provided by
2737 profile. This uses the InterpreterExec extension provided by
2732 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2738 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2733
2739
2734 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2740 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2735 auto-align itself with the length of the previous input prompt
2741 auto-align itself with the length of the previous input prompt
2736 (taking into account the invisible color escapes).
2742 (taking into account the invisible color escapes).
2737 (CachedOutput.__init__): Large restructuring of this class. Now
2743 (CachedOutput.__init__): Large restructuring of this class. Now
2738 all three prompts (primary1, primary2, output) are proper objects,
2744 all three prompts (primary1, primary2, output) are proper objects,
2739 managed by the 'parent' CachedOutput class. The code is still a
2745 managed by the 'parent' CachedOutput class. The code is still a
2740 bit hackish (all prompts share state via a pointer to the cache),
2746 bit hackish (all prompts share state via a pointer to the cache),
2741 but it's overall far cleaner than before.
2747 but it's overall far cleaner than before.
2742
2748
2743 * IPython/genutils.py (getoutputerror): modified to add verbose,
2749 * IPython/genutils.py (getoutputerror): modified to add verbose,
2744 debug and header options. This makes the interface of all getout*
2750 debug and header options. This makes the interface of all getout*
2745 functions uniform.
2751 functions uniform.
2746 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2752 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2747
2753
2748 * IPython/Magic.py (Magic.default_option): added a function to
2754 * IPython/Magic.py (Magic.default_option): added a function to
2749 allow registering default options for any magic command. This
2755 allow registering default options for any magic command. This
2750 makes it easy to have profiles which customize the magics globally
2756 makes it easy to have profiles which customize the magics globally
2751 for a certain use. The values set through this function are
2757 for a certain use. The values set through this function are
2752 picked up by the parse_options() method, which all magics should
2758 picked up by the parse_options() method, which all magics should
2753 use to parse their options.
2759 use to parse their options.
2754
2760
2755 * IPython/genutils.py (warn): modified the warnings framework to
2761 * IPython/genutils.py (warn): modified the warnings framework to
2756 use the Term I/O class. I'm trying to slowly unify all of
2762 use the Term I/O class. I'm trying to slowly unify all of
2757 IPython's I/O operations to pass through Term.
2763 IPython's I/O operations to pass through Term.
2758
2764
2759 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2765 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2760 the secondary prompt to correctly match the length of the primary
2766 the secondary prompt to correctly match the length of the primary
2761 one for any prompt. Now multi-line code will properly line up
2767 one for any prompt. Now multi-line code will properly line up
2762 even for path dependent prompts, such as the new ones available
2768 even for path dependent prompts, such as the new ones available
2763 via the prompt_specials.
2769 via the prompt_specials.
2764
2770
2765 2004-06-06 Fernando Perez <fperez@colorado.edu>
2771 2004-06-06 Fernando Perez <fperez@colorado.edu>
2766
2772
2767 * IPython/Prompts.py (prompt_specials): Added the ability to have
2773 * IPython/Prompts.py (prompt_specials): Added the ability to have
2768 bash-like special sequences in the prompts, which get
2774 bash-like special sequences in the prompts, which get
2769 automatically expanded. Things like hostname, current working
2775 automatically expanded. Things like hostname, current working
2770 directory and username are implemented already, but it's easy to
2776 directory and username are implemented already, but it's easy to
2771 add more in the future. Thanks to a patch by W.J. van der Laan
2777 add more in the future. Thanks to a patch by W.J. van der Laan
2772 <gnufnork-AT-hetdigitalegat.nl>
2778 <gnufnork-AT-hetdigitalegat.nl>
2773 (prompt_specials): Added color support for prompt strings, so
2779 (prompt_specials): Added color support for prompt strings, so
2774 users can define arbitrary color setups for their prompts.
2780 users can define arbitrary color setups for their prompts.
2775
2781
2776 2004-06-05 Fernando Perez <fperez@colorado.edu>
2782 2004-06-05 Fernando Perez <fperez@colorado.edu>
2777
2783
2778 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2784 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2779 code to load Gary Bishop's readline and configure it
2785 code to load Gary Bishop's readline and configure it
2780 automatically. Thanks to Gary for help on this.
2786 automatically. Thanks to Gary for help on this.
2781
2787
2782 2004-06-01 Fernando Perez <fperez@colorado.edu>
2788 2004-06-01 Fernando Perez <fperez@colorado.edu>
2783
2789
2784 * IPython/Logger.py (Logger.create_log): fix bug for logging
2790 * IPython/Logger.py (Logger.create_log): fix bug for logging
2785 with no filename (previous fix was incomplete).
2791 with no filename (previous fix was incomplete).
2786
2792
2787 2004-05-25 Fernando Perez <fperez@colorado.edu>
2793 2004-05-25 Fernando Perez <fperez@colorado.edu>
2788
2794
2789 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2795 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2790 parens would get passed to the shell.
2796 parens would get passed to the shell.
2791
2797
2792 2004-05-20 Fernando Perez <fperez@colorado.edu>
2798 2004-05-20 Fernando Perez <fperez@colorado.edu>
2793
2799
2794 * IPython/Magic.py (Magic.magic_prun): changed default profile
2800 * IPython/Magic.py (Magic.magic_prun): changed default profile
2795 sort order to 'time' (the more common profiling need).
2801 sort order to 'time' (the more common profiling need).
2796
2802
2797 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2803 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2798 so that source code shown is guaranteed in sync with the file on
2804 so that source code shown is guaranteed in sync with the file on
2799 disk (also changed in psource). Similar fix to the one for
2805 disk (also changed in psource). Similar fix to the one for
2800 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2806 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2801 <yann.ledu-AT-noos.fr>.
2807 <yann.ledu-AT-noos.fr>.
2802
2808
2803 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2809 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2804 with a single option would not be correctly parsed. Closes
2810 with a single option would not be correctly parsed. Closes
2805 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2811 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2806 introduced in 0.6.0 (on 2004-05-06).
2812 introduced in 0.6.0 (on 2004-05-06).
2807
2813
2808 2004-05-13 *** Released version 0.6.0
2814 2004-05-13 *** Released version 0.6.0
2809
2815
2810 2004-05-13 Fernando Perez <fperez@colorado.edu>
2816 2004-05-13 Fernando Perez <fperez@colorado.edu>
2811
2817
2812 * debian/: Added debian/ directory to CVS, so that debian support
2818 * debian/: Added debian/ directory to CVS, so that debian support
2813 is publicly accessible. The debian package is maintained by Jack
2819 is publicly accessible. The debian package is maintained by Jack
2814 Moffit <jack-AT-xiph.org>.
2820 Moffit <jack-AT-xiph.org>.
2815
2821
2816 * Documentation: included the notes about an ipython-based system
2822 * Documentation: included the notes about an ipython-based system
2817 shell (the hypothetical 'pysh') into the new_design.pdf document,
2823 shell (the hypothetical 'pysh') into the new_design.pdf document,
2818 so that these ideas get distributed to users along with the
2824 so that these ideas get distributed to users along with the
2819 official documentation.
2825 official documentation.
2820
2826
2821 2004-05-10 Fernando Perez <fperez@colorado.edu>
2827 2004-05-10 Fernando Perez <fperez@colorado.edu>
2822
2828
2823 * IPython/Logger.py (Logger.create_log): fix recently introduced
2829 * IPython/Logger.py (Logger.create_log): fix recently introduced
2824 bug (misindented line) where logstart would fail when not given an
2830 bug (misindented line) where logstart would fail when not given an
2825 explicit filename.
2831 explicit filename.
2826
2832
2827 2004-05-09 Fernando Perez <fperez@colorado.edu>
2833 2004-05-09 Fernando Perez <fperez@colorado.edu>
2828
2834
2829 * IPython/Magic.py (Magic.parse_options): skip system call when
2835 * IPython/Magic.py (Magic.parse_options): skip system call when
2830 there are no options to look for. Faster, cleaner for the common
2836 there are no options to look for. Faster, cleaner for the common
2831 case.
2837 case.
2832
2838
2833 * Documentation: many updates to the manual: describing Windows
2839 * Documentation: many updates to the manual: describing Windows
2834 support better, Gnuplot updates, credits, misc small stuff. Also
2840 support better, Gnuplot updates, credits, misc small stuff. Also
2835 updated the new_design doc a bit.
2841 updated the new_design doc a bit.
2836
2842
2837 2004-05-06 *** Released version 0.6.0.rc1
2843 2004-05-06 *** Released version 0.6.0.rc1
2838
2844
2839 2004-05-06 Fernando Perez <fperez@colorado.edu>
2845 2004-05-06 Fernando Perez <fperez@colorado.edu>
2840
2846
2841 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2847 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2842 operations to use the vastly more efficient list/''.join() method.
2848 operations to use the vastly more efficient list/''.join() method.
2843 (FormattedTB.text): Fix
2849 (FormattedTB.text): Fix
2844 http://www.scipy.net/roundup/ipython/issue12 - exception source
2850 http://www.scipy.net/roundup/ipython/issue12 - exception source
2845 extract not updated after reload. Thanks to Mike Salib
2851 extract not updated after reload. Thanks to Mike Salib
2846 <msalib-AT-mit.edu> for pinning the source of the problem.
2852 <msalib-AT-mit.edu> for pinning the source of the problem.
2847 Fortunately, the solution works inside ipython and doesn't require
2853 Fortunately, the solution works inside ipython and doesn't require
2848 any changes to python proper.
2854 any changes to python proper.
2849
2855
2850 * IPython/Magic.py (Magic.parse_options): Improved to process the
2856 * IPython/Magic.py (Magic.parse_options): Improved to process the
2851 argument list as a true shell would (by actually using the
2857 argument list as a true shell would (by actually using the
2852 underlying system shell). This way, all @magics automatically get
2858 underlying system shell). This way, all @magics automatically get
2853 shell expansion for variables. Thanks to a comment by Alex
2859 shell expansion for variables. Thanks to a comment by Alex
2854 Schmolck.
2860 Schmolck.
2855
2861
2856 2004-04-04 Fernando Perez <fperez@colorado.edu>
2862 2004-04-04 Fernando Perez <fperez@colorado.edu>
2857
2863
2858 * IPython/iplib.py (InteractiveShell.interact): Added a special
2864 * IPython/iplib.py (InteractiveShell.interact): Added a special
2859 trap for a debugger quit exception, which is basically impossible
2865 trap for a debugger quit exception, which is basically impossible
2860 to handle by normal mechanisms, given what pdb does to the stack.
2866 to handle by normal mechanisms, given what pdb does to the stack.
2861 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2867 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2862
2868
2863 2004-04-03 Fernando Perez <fperez@colorado.edu>
2869 2004-04-03 Fernando Perez <fperez@colorado.edu>
2864
2870
2865 * IPython/genutils.py (Term): Standardized the names of the Term
2871 * IPython/genutils.py (Term): Standardized the names of the Term
2866 class streams to cin/cout/cerr, following C++ naming conventions
2872 class streams to cin/cout/cerr, following C++ naming conventions
2867 (I can't use in/out/err because 'in' is not a valid attribute
2873 (I can't use in/out/err because 'in' is not a valid attribute
2868 name).
2874 name).
2869
2875
2870 * IPython/iplib.py (InteractiveShell.interact): don't increment
2876 * IPython/iplib.py (InteractiveShell.interact): don't increment
2871 the prompt if there's no user input. By Daniel 'Dang' Griffith
2877 the prompt if there's no user input. By Daniel 'Dang' Griffith
2872 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2878 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2873 Francois Pinard.
2879 Francois Pinard.
2874
2880
2875 2004-04-02 Fernando Perez <fperez@colorado.edu>
2881 2004-04-02 Fernando Perez <fperez@colorado.edu>
2876
2882
2877 * IPython/genutils.py (Stream.__init__): Modified to survive at
2883 * IPython/genutils.py (Stream.__init__): Modified to survive at
2878 least importing in contexts where stdin/out/err aren't true file
2884 least importing in contexts where stdin/out/err aren't true file
2879 objects, such as PyCrust (they lack fileno() and mode). However,
2885 objects, such as PyCrust (they lack fileno() and mode). However,
2880 the recovery facilities which rely on these things existing will
2886 the recovery facilities which rely on these things existing will
2881 not work.
2887 not work.
2882
2888
2883 2004-04-01 Fernando Perez <fperez@colorado.edu>
2889 2004-04-01 Fernando Perez <fperez@colorado.edu>
2884
2890
2885 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2891 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2886 use the new getoutputerror() function, so it properly
2892 use the new getoutputerror() function, so it properly
2887 distinguishes stdout/err.
2893 distinguishes stdout/err.
2888
2894
2889 * IPython/genutils.py (getoutputerror): added a function to
2895 * IPython/genutils.py (getoutputerror): added a function to
2890 capture separately the standard output and error of a command.
2896 capture separately the standard output and error of a command.
2891 After a comment from dang on the mailing lists. This code is
2897 After a comment from dang on the mailing lists. This code is
2892 basically a modified version of commands.getstatusoutput(), from
2898 basically a modified version of commands.getstatusoutput(), from
2893 the standard library.
2899 the standard library.
2894
2900
2895 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2901 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2896 '!!' as a special syntax (shorthand) to access @sx.
2902 '!!' as a special syntax (shorthand) to access @sx.
2897
2903
2898 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2904 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2899 command and return its output as a list split on '\n'.
2905 command and return its output as a list split on '\n'.
2900
2906
2901 2004-03-31 Fernando Perez <fperez@colorado.edu>
2907 2004-03-31 Fernando Perez <fperez@colorado.edu>
2902
2908
2903 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2909 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2904 method to dictionaries used as FakeModule instances if they lack
2910 method to dictionaries used as FakeModule instances if they lack
2905 it. At least pydoc in python2.3 breaks for runtime-defined
2911 it. At least pydoc in python2.3 breaks for runtime-defined
2906 functions without this hack. At some point I need to _really_
2912 functions without this hack. At some point I need to _really_
2907 understand what FakeModule is doing, because it's a gross hack.
2913 understand what FakeModule is doing, because it's a gross hack.
2908 But it solves Arnd's problem for now...
2914 But it solves Arnd's problem for now...
2909
2915
2910 2004-02-27 Fernando Perez <fperez@colorado.edu>
2916 2004-02-27 Fernando Perez <fperez@colorado.edu>
2911
2917
2912 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2918 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2913 mode would behave erratically. Also increased the number of
2919 mode would behave erratically. Also increased the number of
2914 possible logs in rotate mod to 999. Thanks to Rod Holland
2920 possible logs in rotate mod to 999. Thanks to Rod Holland
2915 <rhh@StructureLABS.com> for the report and fixes.
2921 <rhh@StructureLABS.com> for the report and fixes.
2916
2922
2917 2004-02-26 Fernando Perez <fperez@colorado.edu>
2923 2004-02-26 Fernando Perez <fperez@colorado.edu>
2918
2924
2919 * IPython/genutils.py (page): Check that the curses module really
2925 * IPython/genutils.py (page): Check that the curses module really
2920 has the initscr attribute before trying to use it. For some
2926 has the initscr attribute before trying to use it. For some
2921 reason, the Solaris curses module is missing this. I think this
2927 reason, the Solaris curses module is missing this. I think this
2922 should be considered a Solaris python bug, but I'm not sure.
2928 should be considered a Solaris python bug, but I'm not sure.
2923
2929
2924 2004-01-17 Fernando Perez <fperez@colorado.edu>
2930 2004-01-17 Fernando Perez <fperez@colorado.edu>
2925
2931
2926 * IPython/genutils.py (Stream.__init__): Changes to try to make
2932 * IPython/genutils.py (Stream.__init__): Changes to try to make
2927 ipython robust against stdin/out/err being closed by the user.
2933 ipython robust against stdin/out/err being closed by the user.
2928 This is 'user error' (and blocks a normal python session, at least
2934 This is 'user error' (and blocks a normal python session, at least
2929 the stdout case). However, Ipython should be able to survive such
2935 the stdout case). However, Ipython should be able to survive such
2930 instances of abuse as gracefully as possible. To simplify the
2936 instances of abuse as gracefully as possible. To simplify the
2931 coding and maintain compatibility with Gary Bishop's Term
2937 coding and maintain compatibility with Gary Bishop's Term
2932 contributions, I've made use of classmethods for this. I think
2938 contributions, I've made use of classmethods for this. I think
2933 this introduces a dependency on python 2.2.
2939 this introduces a dependency on python 2.2.
2934
2940
2935 2004-01-13 Fernando Perez <fperez@colorado.edu>
2941 2004-01-13 Fernando Perez <fperez@colorado.edu>
2936
2942
2937 * IPython/numutils.py (exp_safe): simplified the code a bit and
2943 * IPython/numutils.py (exp_safe): simplified the code a bit and
2938 removed the need for importing the kinds module altogether.
2944 removed the need for importing the kinds module altogether.
2939
2945
2940 2004-01-06 Fernando Perez <fperez@colorado.edu>
2946 2004-01-06 Fernando Perez <fperez@colorado.edu>
2941
2947
2942 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2948 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2943 a magic function instead, after some community feedback. No
2949 a magic function instead, after some community feedback. No
2944 special syntax will exist for it, but its name is deliberately
2950 special syntax will exist for it, but its name is deliberately
2945 very short.
2951 very short.
2946
2952
2947 2003-12-20 Fernando Perez <fperez@colorado.edu>
2953 2003-12-20 Fernando Perez <fperez@colorado.edu>
2948
2954
2949 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2955 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2950 new functionality, to automagically assign the result of a shell
2956 new functionality, to automagically assign the result of a shell
2951 command to a variable. I'll solicit some community feedback on
2957 command to a variable. I'll solicit some community feedback on
2952 this before making it permanent.
2958 this before making it permanent.
2953
2959
2954 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2960 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2955 requested about callables for which inspect couldn't obtain a
2961 requested about callables for which inspect couldn't obtain a
2956 proper argspec. Thanks to a crash report sent by Etienne
2962 proper argspec. Thanks to a crash report sent by Etienne
2957 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2963 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2958
2964
2959 2003-12-09 Fernando Perez <fperez@colorado.edu>
2965 2003-12-09 Fernando Perez <fperez@colorado.edu>
2960
2966
2961 * IPython/genutils.py (page): patch for the pager to work across
2967 * IPython/genutils.py (page): patch for the pager to work across
2962 various versions of Windows. By Gary Bishop.
2968 various versions of Windows. By Gary Bishop.
2963
2969
2964 2003-12-04 Fernando Perez <fperez@colorado.edu>
2970 2003-12-04 Fernando Perez <fperez@colorado.edu>
2965
2971
2966 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2972 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2967 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2973 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2968 While I tested this and it looks ok, there may still be corner
2974 While I tested this and it looks ok, there may still be corner
2969 cases I've missed.
2975 cases I've missed.
2970
2976
2971 2003-12-01 Fernando Perez <fperez@colorado.edu>
2977 2003-12-01 Fernando Perez <fperez@colorado.edu>
2972
2978
2973 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2979 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2974 where a line like 'p,q=1,2' would fail because the automagic
2980 where a line like 'p,q=1,2' would fail because the automagic
2975 system would be triggered for @p.
2981 system would be triggered for @p.
2976
2982
2977 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2983 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2978 cleanups, code unmodified.
2984 cleanups, code unmodified.
2979
2985
2980 * IPython/genutils.py (Term): added a class for IPython to handle
2986 * IPython/genutils.py (Term): added a class for IPython to handle
2981 output. In most cases it will just be a proxy for stdout/err, but
2987 output. In most cases it will just be a proxy for stdout/err, but
2982 having this allows modifications to be made for some platforms,
2988 having this allows modifications to be made for some platforms,
2983 such as handling color escapes under Windows. All of this code
2989 such as handling color escapes under Windows. All of this code
2984 was contributed by Gary Bishop, with minor modifications by me.
2990 was contributed by Gary Bishop, with minor modifications by me.
2985 The actual changes affect many files.
2991 The actual changes affect many files.
2986
2992
2987 2003-11-30 Fernando Perez <fperez@colorado.edu>
2993 2003-11-30 Fernando Perez <fperez@colorado.edu>
2988
2994
2989 * IPython/iplib.py (file_matches): new completion code, courtesy
2995 * IPython/iplib.py (file_matches): new completion code, courtesy
2990 of Jeff Collins. This enables filename completion again under
2996 of Jeff Collins. This enables filename completion again under
2991 python 2.3, which disabled it at the C level.
2997 python 2.3, which disabled it at the C level.
2992
2998
2993 2003-11-11 Fernando Perez <fperez@colorado.edu>
2999 2003-11-11 Fernando Perez <fperez@colorado.edu>
2994
3000
2995 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3001 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2996 for Numeric.array(map(...)), but often convenient.
3002 for Numeric.array(map(...)), but often convenient.
2997
3003
2998 2003-11-05 Fernando Perez <fperez@colorado.edu>
3004 2003-11-05 Fernando Perez <fperez@colorado.edu>
2999
3005
3000 * IPython/numutils.py (frange): Changed a call from int() to
3006 * IPython/numutils.py (frange): Changed a call from int() to
3001 int(round()) to prevent a problem reported with arange() in the
3007 int(round()) to prevent a problem reported with arange() in the
3002 numpy list.
3008 numpy list.
3003
3009
3004 2003-10-06 Fernando Perez <fperez@colorado.edu>
3010 2003-10-06 Fernando Perez <fperez@colorado.edu>
3005
3011
3006 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3012 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3007 prevent crashes if sys lacks an argv attribute (it happens with
3013 prevent crashes if sys lacks an argv attribute (it happens with
3008 embedded interpreters which build a bare-bones sys module).
3014 embedded interpreters which build a bare-bones sys module).
3009 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3015 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3010
3016
3011 2003-09-24 Fernando Perez <fperez@colorado.edu>
3017 2003-09-24 Fernando Perez <fperez@colorado.edu>
3012
3018
3013 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3019 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3014 to protect against poorly written user objects where __getattr__
3020 to protect against poorly written user objects where __getattr__
3015 raises exceptions other than AttributeError. Thanks to a bug
3021 raises exceptions other than AttributeError. Thanks to a bug
3016 report by Oliver Sander <osander-AT-gmx.de>.
3022 report by Oliver Sander <osander-AT-gmx.de>.
3017
3023
3018 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3024 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3019 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3025 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3020
3026
3021 2003-09-09 Fernando Perez <fperez@colorado.edu>
3027 2003-09-09 Fernando Perez <fperez@colorado.edu>
3022
3028
3023 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3029 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3024 unpacking a list whith a callable as first element would
3030 unpacking a list whith a callable as first element would
3025 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3031 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3026 Collins.
3032 Collins.
3027
3033
3028 2003-08-25 *** Released version 0.5.0
3034 2003-08-25 *** Released version 0.5.0
3029
3035
3030 2003-08-22 Fernando Perez <fperez@colorado.edu>
3036 2003-08-22 Fernando Perez <fperez@colorado.edu>
3031
3037
3032 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3038 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3033 improperly defined user exceptions. Thanks to feedback from Mark
3039 improperly defined user exceptions. Thanks to feedback from Mark
3034 Russell <mrussell-AT-verio.net>.
3040 Russell <mrussell-AT-verio.net>.
3035
3041
3036 2003-08-20 Fernando Perez <fperez@colorado.edu>
3042 2003-08-20 Fernando Perez <fperez@colorado.edu>
3037
3043
3038 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3044 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3039 printing so that it would print multi-line string forms starting
3045 printing so that it would print multi-line string forms starting
3040 with a new line. This way the formatting is better respected for
3046 with a new line. This way the formatting is better respected for
3041 objects which work hard to make nice string forms.
3047 objects which work hard to make nice string forms.
3042
3048
3043 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3049 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3044 autocall would overtake data access for objects with both
3050 autocall would overtake data access for objects with both
3045 __getitem__ and __call__.
3051 __getitem__ and __call__.
3046
3052
3047 2003-08-19 *** Released version 0.5.0-rc1
3053 2003-08-19 *** Released version 0.5.0-rc1
3048
3054
3049 2003-08-19 Fernando Perez <fperez@colorado.edu>
3055 2003-08-19 Fernando Perez <fperez@colorado.edu>
3050
3056
3051 * IPython/deep_reload.py (load_tail): single tiny change here
3057 * IPython/deep_reload.py (load_tail): single tiny change here
3052 seems to fix the long-standing bug of dreload() failing to work
3058 seems to fix the long-standing bug of dreload() failing to work
3053 for dotted names. But this module is pretty tricky, so I may have
3059 for dotted names. But this module is pretty tricky, so I may have
3054 missed some subtlety. Needs more testing!.
3060 missed some subtlety. Needs more testing!.
3055
3061
3056 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3062 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3057 exceptions which have badly implemented __str__ methods.
3063 exceptions which have badly implemented __str__ methods.
3058 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3064 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3059 which I've been getting reports about from Python 2.3 users. I
3065 which I've been getting reports about from Python 2.3 users. I
3060 wish I had a simple test case to reproduce the problem, so I could
3066 wish I had a simple test case to reproduce the problem, so I could
3061 either write a cleaner workaround or file a bug report if
3067 either write a cleaner workaround or file a bug report if
3062 necessary.
3068 necessary.
3063
3069
3064 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3070 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3065 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3071 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3066 a bug report by Tjabo Kloppenburg.
3072 a bug report by Tjabo Kloppenburg.
3067
3073
3068 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3074 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3069 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3075 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3070 seems rather unstable. Thanks to a bug report by Tjabo
3076 seems rather unstable. Thanks to a bug report by Tjabo
3071 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3077 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3072
3078
3073 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3079 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3074 this out soon because of the critical fixes in the inner loop for
3080 this out soon because of the critical fixes in the inner loop for
3075 generators.
3081 generators.
3076
3082
3077 * IPython/Magic.py (Magic.getargspec): removed. This (and
3083 * IPython/Magic.py (Magic.getargspec): removed. This (and
3078 _get_def) have been obsoleted by OInspect for a long time, I
3084 _get_def) have been obsoleted by OInspect for a long time, I
3079 hadn't noticed that they were dead code.
3085 hadn't noticed that they were dead code.
3080 (Magic._ofind): restored _ofind functionality for a few literals
3086 (Magic._ofind): restored _ofind functionality for a few literals
3081 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3087 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3082 for things like "hello".capitalize?, since that would require a
3088 for things like "hello".capitalize?, since that would require a
3083 potentially dangerous eval() again.
3089 potentially dangerous eval() again.
3084
3090
3085 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3091 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3086 logic a bit more to clean up the escapes handling and minimize the
3092 logic a bit more to clean up the escapes handling and minimize the
3087 use of _ofind to only necessary cases. The interactive 'feel' of
3093 use of _ofind to only necessary cases. The interactive 'feel' of
3088 IPython should have improved quite a bit with the changes in
3094 IPython should have improved quite a bit with the changes in
3089 _prefilter and _ofind (besides being far safer than before).
3095 _prefilter and _ofind (besides being far safer than before).
3090
3096
3091 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3097 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3092 obscure, never reported). Edit would fail to find the object to
3098 obscure, never reported). Edit would fail to find the object to
3093 edit under some circumstances.
3099 edit under some circumstances.
3094 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3100 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3095 which were causing double-calling of generators. Those eval calls
3101 which were causing double-calling of generators. Those eval calls
3096 were _very_ dangerous, since code with side effects could be
3102 were _very_ dangerous, since code with side effects could be
3097 triggered. As they say, 'eval is evil'... These were the
3103 triggered. As they say, 'eval is evil'... These were the
3098 nastiest evals in IPython. Besides, _ofind is now far simpler,
3104 nastiest evals in IPython. Besides, _ofind is now far simpler,
3099 and it should also be quite a bit faster. Its use of inspect is
3105 and it should also be quite a bit faster. Its use of inspect is
3100 also safer, so perhaps some of the inspect-related crashes I've
3106 also safer, so perhaps some of the inspect-related crashes I've
3101 seen lately with Python 2.3 might be taken care of. That will
3107 seen lately with Python 2.3 might be taken care of. That will
3102 need more testing.
3108 need more testing.
3103
3109
3104 2003-08-17 Fernando Perez <fperez@colorado.edu>
3110 2003-08-17 Fernando Perez <fperez@colorado.edu>
3105
3111
3106 * IPython/iplib.py (InteractiveShell._prefilter): significant
3112 * IPython/iplib.py (InteractiveShell._prefilter): significant
3107 simplifications to the logic for handling user escapes. Faster
3113 simplifications to the logic for handling user escapes. Faster
3108 and simpler code.
3114 and simpler code.
3109
3115
3110 2003-08-14 Fernando Perez <fperez@colorado.edu>
3116 2003-08-14 Fernando Perez <fperez@colorado.edu>
3111
3117
3112 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3118 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3113 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3119 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3114 but it should be quite a bit faster. And the recursive version
3120 but it should be quite a bit faster. And the recursive version
3115 generated O(log N) intermediate storage for all rank>1 arrays,
3121 generated O(log N) intermediate storage for all rank>1 arrays,
3116 even if they were contiguous.
3122 even if they were contiguous.
3117 (l1norm): Added this function.
3123 (l1norm): Added this function.
3118 (norm): Added this function for arbitrary norms (including
3124 (norm): Added this function for arbitrary norms (including
3119 l-infinity). l1 and l2 are still special cases for convenience
3125 l-infinity). l1 and l2 are still special cases for convenience
3120 and speed.
3126 and speed.
3121
3127
3122 2003-08-03 Fernando Perez <fperez@colorado.edu>
3128 2003-08-03 Fernando Perez <fperez@colorado.edu>
3123
3129
3124 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3130 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3125 exceptions, which now raise PendingDeprecationWarnings in Python
3131 exceptions, which now raise PendingDeprecationWarnings in Python
3126 2.3. There were some in Magic and some in Gnuplot2.
3132 2.3. There were some in Magic and some in Gnuplot2.
3127
3133
3128 2003-06-30 Fernando Perez <fperez@colorado.edu>
3134 2003-06-30 Fernando Perez <fperez@colorado.edu>
3129
3135
3130 * IPython/genutils.py (page): modified to call curses only for
3136 * IPython/genutils.py (page): modified to call curses only for
3131 terminals where TERM=='xterm'. After problems under many other
3137 terminals where TERM=='xterm'. After problems under many other
3132 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3138 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3133
3139
3134 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3140 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3135 would be triggered when readline was absent. This was just an old
3141 would be triggered when readline was absent. This was just an old
3136 debugging statement I'd forgotten to take out.
3142 debugging statement I'd forgotten to take out.
3137
3143
3138 2003-06-20 Fernando Perez <fperez@colorado.edu>
3144 2003-06-20 Fernando Perez <fperez@colorado.edu>
3139
3145
3140 * IPython/genutils.py (clock): modified to return only user time
3146 * IPython/genutils.py (clock): modified to return only user time
3141 (not counting system time), after a discussion on scipy. While
3147 (not counting system time), after a discussion on scipy. While
3142 system time may be a useful quantity occasionally, it may much
3148 system time may be a useful quantity occasionally, it may much
3143 more easily be skewed by occasional swapping or other similar
3149 more easily be skewed by occasional swapping or other similar
3144 activity.
3150 activity.
3145
3151
3146 2003-06-05 Fernando Perez <fperez@colorado.edu>
3152 2003-06-05 Fernando Perez <fperez@colorado.edu>
3147
3153
3148 * IPython/numutils.py (identity): new function, for building
3154 * IPython/numutils.py (identity): new function, for building
3149 arbitrary rank Kronecker deltas (mostly backwards compatible with
3155 arbitrary rank Kronecker deltas (mostly backwards compatible with
3150 Numeric.identity)
3156 Numeric.identity)
3151
3157
3152 2003-06-03 Fernando Perez <fperez@colorado.edu>
3158 2003-06-03 Fernando Perez <fperez@colorado.edu>
3153
3159
3154 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3160 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3155 arguments passed to magics with spaces, to allow trailing '\' to
3161 arguments passed to magics with spaces, to allow trailing '\' to
3156 work normally (mainly for Windows users).
3162 work normally (mainly for Windows users).
3157
3163
3158 2003-05-29 Fernando Perez <fperez@colorado.edu>
3164 2003-05-29 Fernando Perez <fperez@colorado.edu>
3159
3165
3160 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3166 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3161 instead of pydoc.help. This fixes a bizarre behavior where
3167 instead of pydoc.help. This fixes a bizarre behavior where
3162 printing '%s' % locals() would trigger the help system. Now
3168 printing '%s' % locals() would trigger the help system. Now
3163 ipython behaves like normal python does.
3169 ipython behaves like normal python does.
3164
3170
3165 Note that if one does 'from pydoc import help', the bizarre
3171 Note that if one does 'from pydoc import help', the bizarre
3166 behavior returns, but this will also happen in normal python, so
3172 behavior returns, but this will also happen in normal python, so
3167 it's not an ipython bug anymore (it has to do with how pydoc.help
3173 it's not an ipython bug anymore (it has to do with how pydoc.help
3168 is implemented).
3174 is implemented).
3169
3175
3170 2003-05-22 Fernando Perez <fperez@colorado.edu>
3176 2003-05-22 Fernando Perez <fperez@colorado.edu>
3171
3177
3172 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3178 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3173 return [] instead of None when nothing matches, also match to end
3179 return [] instead of None when nothing matches, also match to end
3174 of line. Patch by Gary Bishop.
3180 of line. Patch by Gary Bishop.
3175
3181
3176 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3182 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3177 protection as before, for files passed on the command line. This
3183 protection as before, for files passed on the command line. This
3178 prevents the CrashHandler from kicking in if user files call into
3184 prevents the CrashHandler from kicking in if user files call into
3179 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3185 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3180 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3186 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3181
3187
3182 2003-05-20 *** Released version 0.4.0
3188 2003-05-20 *** Released version 0.4.0
3183
3189
3184 2003-05-20 Fernando Perez <fperez@colorado.edu>
3190 2003-05-20 Fernando Perez <fperez@colorado.edu>
3185
3191
3186 * setup.py: added support for manpages. It's a bit hackish b/c of
3192 * setup.py: added support for manpages. It's a bit hackish b/c of
3187 a bug in the way the bdist_rpm distutils target handles gzipped
3193 a bug in the way the bdist_rpm distutils target handles gzipped
3188 manpages, but it works. After a patch by Jack.
3194 manpages, but it works. After a patch by Jack.
3189
3195
3190 2003-05-19 Fernando Perez <fperez@colorado.edu>
3196 2003-05-19 Fernando Perez <fperez@colorado.edu>
3191
3197
3192 * IPython/numutils.py: added a mockup of the kinds module, since
3198 * IPython/numutils.py: added a mockup of the kinds module, since
3193 it was recently removed from Numeric. This way, numutils will
3199 it was recently removed from Numeric. This way, numutils will
3194 work for all users even if they are missing kinds.
3200 work for all users even if they are missing kinds.
3195
3201
3196 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3202 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3197 failure, which can occur with SWIG-wrapped extensions. After a
3203 failure, which can occur with SWIG-wrapped extensions. After a
3198 crash report from Prabhu.
3204 crash report from Prabhu.
3199
3205
3200 2003-05-16 Fernando Perez <fperez@colorado.edu>
3206 2003-05-16 Fernando Perez <fperez@colorado.edu>
3201
3207
3202 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3208 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3203 protect ipython from user code which may call directly
3209 protect ipython from user code which may call directly
3204 sys.excepthook (this looks like an ipython crash to the user, even
3210 sys.excepthook (this looks like an ipython crash to the user, even
3205 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3211 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3206 This is especially important to help users of WxWindows, but may
3212 This is especially important to help users of WxWindows, but may
3207 also be useful in other cases.
3213 also be useful in other cases.
3208
3214
3209 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3215 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3210 an optional tb_offset to be specified, and to preserve exception
3216 an optional tb_offset to be specified, and to preserve exception
3211 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3217 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3212
3218
3213 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3219 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3214
3220
3215 2003-05-15 Fernando Perez <fperez@colorado.edu>
3221 2003-05-15 Fernando Perez <fperez@colorado.edu>
3216
3222
3217 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3223 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3218 installing for a new user under Windows.
3224 installing for a new user under Windows.
3219
3225
3220 2003-05-12 Fernando Perez <fperez@colorado.edu>
3226 2003-05-12 Fernando Perez <fperez@colorado.edu>
3221
3227
3222 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3228 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3223 handler for Emacs comint-based lines. Currently it doesn't do
3229 handler for Emacs comint-based lines. Currently it doesn't do
3224 much (but importantly, it doesn't update the history cache). In
3230 much (but importantly, it doesn't update the history cache). In
3225 the future it may be expanded if Alex needs more functionality
3231 the future it may be expanded if Alex needs more functionality
3226 there.
3232 there.
3227
3233
3228 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3234 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3229 info to crash reports.
3235 info to crash reports.
3230
3236
3231 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3237 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3232 just like Python's -c. Also fixed crash with invalid -color
3238 just like Python's -c. Also fixed crash with invalid -color
3233 option value at startup. Thanks to Will French
3239 option value at startup. Thanks to Will French
3234 <wfrench-AT-bestweb.net> for the bug report.
3240 <wfrench-AT-bestweb.net> for the bug report.
3235
3241
3236 2003-05-09 Fernando Perez <fperez@colorado.edu>
3242 2003-05-09 Fernando Perez <fperez@colorado.edu>
3237
3243
3238 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3244 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3239 to EvalDict (it's a mapping, after all) and simplified its code
3245 to EvalDict (it's a mapping, after all) and simplified its code
3240 quite a bit, after a nice discussion on c.l.py where Gustavo
3246 quite a bit, after a nice discussion on c.l.py where Gustavo
3241 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3247 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3242
3248
3243 2003-04-30 Fernando Perez <fperez@colorado.edu>
3249 2003-04-30 Fernando Perez <fperez@colorado.edu>
3244
3250
3245 * IPython/genutils.py (timings_out): modified it to reduce its
3251 * IPython/genutils.py (timings_out): modified it to reduce its
3246 overhead in the common reps==1 case.
3252 overhead in the common reps==1 case.
3247
3253
3248 2003-04-29 Fernando Perez <fperez@colorado.edu>
3254 2003-04-29 Fernando Perez <fperez@colorado.edu>
3249
3255
3250 * IPython/genutils.py (timings_out): Modified to use the resource
3256 * IPython/genutils.py (timings_out): Modified to use the resource
3251 module, which avoids the wraparound problems of time.clock().
3257 module, which avoids the wraparound problems of time.clock().
3252
3258
3253 2003-04-17 *** Released version 0.2.15pre4
3259 2003-04-17 *** Released version 0.2.15pre4
3254
3260
3255 2003-04-17 Fernando Perez <fperez@colorado.edu>
3261 2003-04-17 Fernando Perez <fperez@colorado.edu>
3256
3262
3257 * setup.py (scriptfiles): Split windows-specific stuff over to a
3263 * setup.py (scriptfiles): Split windows-specific stuff over to a
3258 separate file, in an attempt to have a Windows GUI installer.
3264 separate file, in an attempt to have a Windows GUI installer.
3259 That didn't work, but part of the groundwork is done.
3265 That didn't work, but part of the groundwork is done.
3260
3266
3261 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3267 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3262 indent/unindent with 4 spaces. Particularly useful in combination
3268 indent/unindent with 4 spaces. Particularly useful in combination
3263 with the new auto-indent option.
3269 with the new auto-indent option.
3264
3270
3265 2003-04-16 Fernando Perez <fperez@colorado.edu>
3271 2003-04-16 Fernando Perez <fperez@colorado.edu>
3266
3272
3267 * IPython/Magic.py: various replacements of self.rc for
3273 * IPython/Magic.py: various replacements of self.rc for
3268 self.shell.rc. A lot more remains to be done to fully disentangle
3274 self.shell.rc. A lot more remains to be done to fully disentangle
3269 this class from the main Shell class.
3275 this class from the main Shell class.
3270
3276
3271 * IPython/GnuplotRuntime.py: added checks for mouse support so
3277 * IPython/GnuplotRuntime.py: added checks for mouse support so
3272 that we don't try to enable it if the current gnuplot doesn't
3278 that we don't try to enable it if the current gnuplot doesn't
3273 really support it. Also added checks so that we don't try to
3279 really support it. Also added checks so that we don't try to
3274 enable persist under Windows (where Gnuplot doesn't recognize the
3280 enable persist under Windows (where Gnuplot doesn't recognize the
3275 option).
3281 option).
3276
3282
3277 * IPython/iplib.py (InteractiveShell.interact): Added optional
3283 * IPython/iplib.py (InteractiveShell.interact): Added optional
3278 auto-indenting code, after a patch by King C. Shu
3284 auto-indenting code, after a patch by King C. Shu
3279 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3285 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3280 get along well with pasting indented code. If I ever figure out
3286 get along well with pasting indented code. If I ever figure out
3281 how to make that part go well, it will become on by default.
3287 how to make that part go well, it will become on by default.
3282
3288
3283 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3289 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3284 crash ipython if there was an unmatched '%' in the user's prompt
3290 crash ipython if there was an unmatched '%' in the user's prompt
3285 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3291 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3286
3292
3287 * IPython/iplib.py (InteractiveShell.interact): removed the
3293 * IPython/iplib.py (InteractiveShell.interact): removed the
3288 ability to ask the user whether he wants to crash or not at the
3294 ability to ask the user whether he wants to crash or not at the
3289 'last line' exception handler. Calling functions at that point
3295 'last line' exception handler. Calling functions at that point
3290 changes the stack, and the error reports would have incorrect
3296 changes the stack, and the error reports would have incorrect
3291 tracebacks.
3297 tracebacks.
3292
3298
3293 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3299 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3294 pass through a peger a pretty-printed form of any object. After a
3300 pass through a peger a pretty-printed form of any object. After a
3295 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3301 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3296
3302
3297 2003-04-14 Fernando Perez <fperez@colorado.edu>
3303 2003-04-14 Fernando Perez <fperez@colorado.edu>
3298
3304
3299 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3305 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3300 all files in ~ would be modified at first install (instead of
3306 all files in ~ would be modified at first install (instead of
3301 ~/.ipython). This could be potentially disastrous, as the
3307 ~/.ipython). This could be potentially disastrous, as the
3302 modification (make line-endings native) could damage binary files.
3308 modification (make line-endings native) could damage binary files.
3303
3309
3304 2003-04-10 Fernando Perez <fperez@colorado.edu>
3310 2003-04-10 Fernando Perez <fperez@colorado.edu>
3305
3311
3306 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3312 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3307 handle only lines which are invalid python. This now means that
3313 handle only lines which are invalid python. This now means that
3308 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3314 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3309 for the bug report.
3315 for the bug report.
3310
3316
3311 2003-04-01 Fernando Perez <fperez@colorado.edu>
3317 2003-04-01 Fernando Perez <fperez@colorado.edu>
3312
3318
3313 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3319 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3314 where failing to set sys.last_traceback would crash pdb.pm().
3320 where failing to set sys.last_traceback would crash pdb.pm().
3315 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3321 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3316 report.
3322 report.
3317
3323
3318 2003-03-25 Fernando Perez <fperez@colorado.edu>
3324 2003-03-25 Fernando Perez <fperez@colorado.edu>
3319
3325
3320 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3326 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3321 before printing it (it had a lot of spurious blank lines at the
3327 before printing it (it had a lot of spurious blank lines at the
3322 end).
3328 end).
3323
3329
3324 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3330 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3325 output would be sent 21 times! Obviously people don't use this
3331 output would be sent 21 times! Obviously people don't use this
3326 too often, or I would have heard about it.
3332 too often, or I would have heard about it.
3327
3333
3328 2003-03-24 Fernando Perez <fperez@colorado.edu>
3334 2003-03-24 Fernando Perez <fperez@colorado.edu>
3329
3335
3330 * setup.py (scriptfiles): renamed the data_files parameter from
3336 * setup.py (scriptfiles): renamed the data_files parameter from
3331 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3337 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3332 for the patch.
3338 for the patch.
3333
3339
3334 2003-03-20 Fernando Perez <fperez@colorado.edu>
3340 2003-03-20 Fernando Perez <fperez@colorado.edu>
3335
3341
3336 * IPython/genutils.py (error): added error() and fatal()
3342 * IPython/genutils.py (error): added error() and fatal()
3337 functions.
3343 functions.
3338
3344
3339 2003-03-18 *** Released version 0.2.15pre3
3345 2003-03-18 *** Released version 0.2.15pre3
3340
3346
3341 2003-03-18 Fernando Perez <fperez@colorado.edu>
3347 2003-03-18 Fernando Perez <fperez@colorado.edu>
3342
3348
3343 * setupext/install_data_ext.py
3349 * setupext/install_data_ext.py
3344 (install_data_ext.initialize_options): Class contributed by Jack
3350 (install_data_ext.initialize_options): Class contributed by Jack
3345 Moffit for fixing the old distutils hack. He is sending this to
3351 Moffit for fixing the old distutils hack. He is sending this to
3346 the distutils folks so in the future we may not need it as a
3352 the distutils folks so in the future we may not need it as a
3347 private fix.
3353 private fix.
3348
3354
3349 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3355 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3350 changes for Debian packaging. See his patch for full details.
3356 changes for Debian packaging. See his patch for full details.
3351 The old distutils hack of making the ipythonrc* files carry a
3357 The old distutils hack of making the ipythonrc* files carry a
3352 bogus .py extension is gone, at last. Examples were moved to a
3358 bogus .py extension is gone, at last. Examples were moved to a
3353 separate subdir under doc/, and the separate executable scripts
3359 separate subdir under doc/, and the separate executable scripts
3354 now live in their own directory. Overall a great cleanup. The
3360 now live in their own directory. Overall a great cleanup. The
3355 manual was updated to use the new files, and setup.py has been
3361 manual was updated to use the new files, and setup.py has been
3356 fixed for this setup.
3362 fixed for this setup.
3357
3363
3358 * IPython/PyColorize.py (Parser.usage): made non-executable and
3364 * IPython/PyColorize.py (Parser.usage): made non-executable and
3359 created a pycolor wrapper around it to be included as a script.
3365 created a pycolor wrapper around it to be included as a script.
3360
3366
3361 2003-03-12 *** Released version 0.2.15pre2
3367 2003-03-12 *** Released version 0.2.15pre2
3362
3368
3363 2003-03-12 Fernando Perez <fperez@colorado.edu>
3369 2003-03-12 Fernando Perez <fperez@colorado.edu>
3364
3370
3365 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3371 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3366 long-standing problem with garbage characters in some terminals.
3372 long-standing problem with garbage characters in some terminals.
3367 The issue was really that the \001 and \002 escapes must _only_ be
3373 The issue was really that the \001 and \002 escapes must _only_ be
3368 passed to input prompts (which call readline), but _never_ to
3374 passed to input prompts (which call readline), but _never_ to
3369 normal text to be printed on screen. I changed ColorANSI to have
3375 normal text to be printed on screen. I changed ColorANSI to have
3370 two classes: TermColors and InputTermColors, each with the
3376 two classes: TermColors and InputTermColors, each with the
3371 appropriate escapes for input prompts or normal text. The code in
3377 appropriate escapes for input prompts or normal text. The code in
3372 Prompts.py got slightly more complicated, but this very old and
3378 Prompts.py got slightly more complicated, but this very old and
3373 annoying bug is finally fixed.
3379 annoying bug is finally fixed.
3374
3380
3375 All the credit for nailing down the real origin of this problem
3381 All the credit for nailing down the real origin of this problem
3376 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3382 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3377 *Many* thanks to him for spending quite a bit of effort on this.
3383 *Many* thanks to him for spending quite a bit of effort on this.
3378
3384
3379 2003-03-05 *** Released version 0.2.15pre1
3385 2003-03-05 *** Released version 0.2.15pre1
3380
3386
3381 2003-03-03 Fernando Perez <fperez@colorado.edu>
3387 2003-03-03 Fernando Perez <fperez@colorado.edu>
3382
3388
3383 * IPython/FakeModule.py: Moved the former _FakeModule to a
3389 * IPython/FakeModule.py: Moved the former _FakeModule to a
3384 separate file, because it's also needed by Magic (to fix a similar
3390 separate file, because it's also needed by Magic (to fix a similar
3385 pickle-related issue in @run).
3391 pickle-related issue in @run).
3386
3392
3387 2003-03-02 Fernando Perez <fperez@colorado.edu>
3393 2003-03-02 Fernando Perez <fperez@colorado.edu>
3388
3394
3389 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3395 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3390 the autocall option at runtime.
3396 the autocall option at runtime.
3391 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3397 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3392 across Magic.py to start separating Magic from InteractiveShell.
3398 across Magic.py to start separating Magic from InteractiveShell.
3393 (Magic._ofind): Fixed to return proper namespace for dotted
3399 (Magic._ofind): Fixed to return proper namespace for dotted
3394 names. Before, a dotted name would always return 'not currently
3400 names. Before, a dotted name would always return 'not currently
3395 defined', because it would find the 'parent'. s.x would be found,
3401 defined', because it would find the 'parent'. s.x would be found,
3396 but since 'x' isn't defined by itself, it would get confused.
3402 but since 'x' isn't defined by itself, it would get confused.
3397 (Magic.magic_run): Fixed pickling problems reported by Ralf
3403 (Magic.magic_run): Fixed pickling problems reported by Ralf
3398 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3404 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3399 that I'd used when Mike Heeter reported similar issues at the
3405 that I'd used when Mike Heeter reported similar issues at the
3400 top-level, but now for @run. It boils down to injecting the
3406 top-level, but now for @run. It boils down to injecting the
3401 namespace where code is being executed with something that looks
3407 namespace where code is being executed with something that looks
3402 enough like a module to fool pickle.dump(). Since a pickle stores
3408 enough like a module to fool pickle.dump(). Since a pickle stores
3403 a named reference to the importing module, we need this for
3409 a named reference to the importing module, we need this for
3404 pickles to save something sensible.
3410 pickles to save something sensible.
3405
3411
3406 * IPython/ipmaker.py (make_IPython): added an autocall option.
3412 * IPython/ipmaker.py (make_IPython): added an autocall option.
3407
3413
3408 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3414 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3409 the auto-eval code. Now autocalling is an option, and the code is
3415 the auto-eval code. Now autocalling is an option, and the code is
3410 also vastly safer. There is no more eval() involved at all.
3416 also vastly safer. There is no more eval() involved at all.
3411
3417
3412 2003-03-01 Fernando Perez <fperez@colorado.edu>
3418 2003-03-01 Fernando Perez <fperez@colorado.edu>
3413
3419
3414 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3420 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3415 dict with named keys instead of a tuple.
3421 dict with named keys instead of a tuple.
3416
3422
3417 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3423 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3418
3424
3419 * setup.py (make_shortcut): Fixed message about directories
3425 * setup.py (make_shortcut): Fixed message about directories
3420 created during Windows installation (the directories were ok, just
3426 created during Windows installation (the directories were ok, just
3421 the printed message was misleading). Thanks to Chris Liechti
3427 the printed message was misleading). Thanks to Chris Liechti
3422 <cliechti-AT-gmx.net> for the heads up.
3428 <cliechti-AT-gmx.net> for the heads up.
3423
3429
3424 2003-02-21 Fernando Perez <fperez@colorado.edu>
3430 2003-02-21 Fernando Perez <fperez@colorado.edu>
3425
3431
3426 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3432 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3427 of ValueError exception when checking for auto-execution. This
3433 of ValueError exception when checking for auto-execution. This
3428 one is raised by things like Numeric arrays arr.flat when the
3434 one is raised by things like Numeric arrays arr.flat when the
3429 array is non-contiguous.
3435 array is non-contiguous.
3430
3436
3431 2003-01-31 Fernando Perez <fperez@colorado.edu>
3437 2003-01-31 Fernando Perez <fperez@colorado.edu>
3432
3438
3433 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3439 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3434 not return any value at all (even though the command would get
3440 not return any value at all (even though the command would get
3435 executed).
3441 executed).
3436 (xsys): Flush stdout right after printing the command to ensure
3442 (xsys): Flush stdout right after printing the command to ensure
3437 proper ordering of commands and command output in the total
3443 proper ordering of commands and command output in the total
3438 output.
3444 output.
3439 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3445 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3440 system/getoutput as defaults. The old ones are kept for
3446 system/getoutput as defaults. The old ones are kept for
3441 compatibility reasons, so no code which uses this library needs
3447 compatibility reasons, so no code which uses this library needs
3442 changing.
3448 changing.
3443
3449
3444 2003-01-27 *** Released version 0.2.14
3450 2003-01-27 *** Released version 0.2.14
3445
3451
3446 2003-01-25 Fernando Perez <fperez@colorado.edu>
3452 2003-01-25 Fernando Perez <fperez@colorado.edu>
3447
3453
3448 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3454 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3449 functions defined in previous edit sessions could not be re-edited
3455 functions defined in previous edit sessions could not be re-edited
3450 (because the temp files were immediately removed). Now temp files
3456 (because the temp files were immediately removed). Now temp files
3451 are removed only at IPython's exit.
3457 are removed only at IPython's exit.
3452 (Magic.magic_run): Improved @run to perform shell-like expansions
3458 (Magic.magic_run): Improved @run to perform shell-like expansions
3453 on its arguments (~users and $VARS). With this, @run becomes more
3459 on its arguments (~users and $VARS). With this, @run becomes more
3454 like a normal command-line.
3460 like a normal command-line.
3455
3461
3456 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3462 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3457 bugs related to embedding and cleaned up that code. A fairly
3463 bugs related to embedding and cleaned up that code. A fairly
3458 important one was the impossibility to access the global namespace
3464 important one was the impossibility to access the global namespace
3459 through the embedded IPython (only local variables were visible).
3465 through the embedded IPython (only local variables were visible).
3460
3466
3461 2003-01-14 Fernando Perez <fperez@colorado.edu>
3467 2003-01-14 Fernando Perez <fperez@colorado.edu>
3462
3468
3463 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3469 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3464 auto-calling to be a bit more conservative. Now it doesn't get
3470 auto-calling to be a bit more conservative. Now it doesn't get
3465 triggered if any of '!=()<>' are in the rest of the input line, to
3471 triggered if any of '!=()<>' are in the rest of the input line, to
3466 allow comparing callables. Thanks to Alex for the heads up.
3472 allow comparing callables. Thanks to Alex for the heads up.
3467
3473
3468 2003-01-07 Fernando Perez <fperez@colorado.edu>
3474 2003-01-07 Fernando Perez <fperez@colorado.edu>
3469
3475
3470 * IPython/genutils.py (page): fixed estimation of the number of
3476 * IPython/genutils.py (page): fixed estimation of the number of
3471 lines in a string to be paged to simply count newlines. This
3477 lines in a string to be paged to simply count newlines. This
3472 prevents over-guessing due to embedded escape sequences. A better
3478 prevents over-guessing due to embedded escape sequences. A better
3473 long-term solution would involve stripping out the control chars
3479 long-term solution would involve stripping out the control chars
3474 for the count, but it's potentially so expensive I just don't
3480 for the count, but it's potentially so expensive I just don't
3475 think it's worth doing.
3481 think it's worth doing.
3476
3482
3477 2002-12-19 *** Released version 0.2.14pre50
3483 2002-12-19 *** Released version 0.2.14pre50
3478
3484
3479 2002-12-19 Fernando Perez <fperez@colorado.edu>
3485 2002-12-19 Fernando Perez <fperez@colorado.edu>
3480
3486
3481 * tools/release (version): Changed release scripts to inform
3487 * tools/release (version): Changed release scripts to inform
3482 Andrea and build a NEWS file with a list of recent changes.
3488 Andrea and build a NEWS file with a list of recent changes.
3483
3489
3484 * IPython/ColorANSI.py (__all__): changed terminal detection
3490 * IPython/ColorANSI.py (__all__): changed terminal detection
3485 code. Seems to work better for xterms without breaking
3491 code. Seems to work better for xterms without breaking
3486 konsole. Will need more testing to determine if WinXP and Mac OSX
3492 konsole. Will need more testing to determine if WinXP and Mac OSX
3487 also work ok.
3493 also work ok.
3488
3494
3489 2002-12-18 *** Released version 0.2.14pre49
3495 2002-12-18 *** Released version 0.2.14pre49
3490
3496
3491 2002-12-18 Fernando Perez <fperez@colorado.edu>
3497 2002-12-18 Fernando Perez <fperez@colorado.edu>
3492
3498
3493 * Docs: added new info about Mac OSX, from Andrea.
3499 * Docs: added new info about Mac OSX, from Andrea.
3494
3500
3495 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3501 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3496 allow direct plotting of python strings whose format is the same
3502 allow direct plotting of python strings whose format is the same
3497 of gnuplot data files.
3503 of gnuplot data files.
3498
3504
3499 2002-12-16 Fernando Perez <fperez@colorado.edu>
3505 2002-12-16 Fernando Perez <fperez@colorado.edu>
3500
3506
3501 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3507 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3502 value of exit question to be acknowledged.
3508 value of exit question to be acknowledged.
3503
3509
3504 2002-12-03 Fernando Perez <fperez@colorado.edu>
3510 2002-12-03 Fernando Perez <fperez@colorado.edu>
3505
3511
3506 * IPython/ipmaker.py: removed generators, which had been added
3512 * IPython/ipmaker.py: removed generators, which had been added
3507 by mistake in an earlier debugging run. This was causing trouble
3513 by mistake in an earlier debugging run. This was causing trouble
3508 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3514 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3509 for pointing this out.
3515 for pointing this out.
3510
3516
3511 2002-11-17 Fernando Perez <fperez@colorado.edu>
3517 2002-11-17 Fernando Perez <fperez@colorado.edu>
3512
3518
3513 * Manual: updated the Gnuplot section.
3519 * Manual: updated the Gnuplot section.
3514
3520
3515 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3521 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3516 a much better split of what goes in Runtime and what goes in
3522 a much better split of what goes in Runtime and what goes in
3517 Interactive.
3523 Interactive.
3518
3524
3519 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3525 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3520 being imported from iplib.
3526 being imported from iplib.
3521
3527
3522 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3528 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3523 for command-passing. Now the global Gnuplot instance is called
3529 for command-passing. Now the global Gnuplot instance is called
3524 'gp' instead of 'g', which was really a far too fragile and
3530 'gp' instead of 'g', which was really a far too fragile and
3525 common name.
3531 common name.
3526
3532
3527 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3533 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3528 bounding boxes generated by Gnuplot for square plots.
3534 bounding boxes generated by Gnuplot for square plots.
3529
3535
3530 * IPython/genutils.py (popkey): new function added. I should
3536 * IPython/genutils.py (popkey): new function added. I should
3531 suggest this on c.l.py as a dict method, it seems useful.
3537 suggest this on c.l.py as a dict method, it seems useful.
3532
3538
3533 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3539 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3534 to transparently handle PostScript generation. MUCH better than
3540 to transparently handle PostScript generation. MUCH better than
3535 the previous plot_eps/replot_eps (which I removed now). The code
3541 the previous plot_eps/replot_eps (which I removed now). The code
3536 is also fairly clean and well documented now (including
3542 is also fairly clean and well documented now (including
3537 docstrings).
3543 docstrings).
3538
3544
3539 2002-11-13 Fernando Perez <fperez@colorado.edu>
3545 2002-11-13 Fernando Perez <fperez@colorado.edu>
3540
3546
3541 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3547 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3542 (inconsistent with options).
3548 (inconsistent with options).
3543
3549
3544 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3550 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3545 manually disabled, I don't know why. Fixed it.
3551 manually disabled, I don't know why. Fixed it.
3546 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3552 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3547 eps output.
3553 eps output.
3548
3554
3549 2002-11-12 Fernando Perez <fperez@colorado.edu>
3555 2002-11-12 Fernando Perez <fperez@colorado.edu>
3550
3556
3551 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3557 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3552 don't propagate up to caller. Fixes crash reported by François
3558 don't propagate up to caller. Fixes crash reported by François
3553 Pinard.
3559 Pinard.
3554
3560
3555 2002-11-09 Fernando Perez <fperez@colorado.edu>
3561 2002-11-09 Fernando Perez <fperez@colorado.edu>
3556
3562
3557 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3563 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3558 history file for new users.
3564 history file for new users.
3559 (make_IPython): fixed bug where initial install would leave the
3565 (make_IPython): fixed bug where initial install would leave the
3560 user running in the .ipython dir.
3566 user running in the .ipython dir.
3561 (make_IPython): fixed bug where config dir .ipython would be
3567 (make_IPython): fixed bug where config dir .ipython would be
3562 created regardless of the given -ipythondir option. Thanks to Cory
3568 created regardless of the given -ipythondir option. Thanks to Cory
3563 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3569 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3564
3570
3565 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3571 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3566 type confirmations. Will need to use it in all of IPython's code
3572 type confirmations. Will need to use it in all of IPython's code
3567 consistently.
3573 consistently.
3568
3574
3569 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3575 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3570 context to print 31 lines instead of the default 5. This will make
3576 context to print 31 lines instead of the default 5. This will make
3571 the crash reports extremely detailed in case the problem is in
3577 the crash reports extremely detailed in case the problem is in
3572 libraries I don't have access to.
3578 libraries I don't have access to.
3573
3579
3574 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3580 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3575 line of defense' code to still crash, but giving users fair
3581 line of defense' code to still crash, but giving users fair
3576 warning. I don't want internal errors to go unreported: if there's
3582 warning. I don't want internal errors to go unreported: if there's
3577 an internal problem, IPython should crash and generate a full
3583 an internal problem, IPython should crash and generate a full
3578 report.
3584 report.
3579
3585
3580 2002-11-08 Fernando Perez <fperez@colorado.edu>
3586 2002-11-08 Fernando Perez <fperez@colorado.edu>
3581
3587
3582 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3588 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3583 otherwise uncaught exceptions which can appear if people set
3589 otherwise uncaught exceptions which can appear if people set
3584 sys.stdout to something badly broken. Thanks to a crash report
3590 sys.stdout to something badly broken. Thanks to a crash report
3585 from henni-AT-mail.brainbot.com.
3591 from henni-AT-mail.brainbot.com.
3586
3592
3587 2002-11-04 Fernando Perez <fperez@colorado.edu>
3593 2002-11-04 Fernando Perez <fperez@colorado.edu>
3588
3594
3589 * IPython/iplib.py (InteractiveShell.interact): added
3595 * IPython/iplib.py (InteractiveShell.interact): added
3590 __IPYTHON__active to the builtins. It's a flag which goes on when
3596 __IPYTHON__active to the builtins. It's a flag which goes on when
3591 the interaction starts and goes off again when it stops. This
3597 the interaction starts and goes off again when it stops. This
3592 allows embedding code to detect being inside IPython. Before this
3598 allows embedding code to detect being inside IPython. Before this
3593 was done via __IPYTHON__, but that only shows that an IPython
3599 was done via __IPYTHON__, but that only shows that an IPython
3594 instance has been created.
3600 instance has been created.
3595
3601
3596 * IPython/Magic.py (Magic.magic_env): I realized that in a
3602 * IPython/Magic.py (Magic.magic_env): I realized that in a
3597 UserDict, instance.data holds the data as a normal dict. So I
3603 UserDict, instance.data holds the data as a normal dict. So I
3598 modified @env to return os.environ.data instead of rebuilding a
3604 modified @env to return os.environ.data instead of rebuilding a
3599 dict by hand.
3605 dict by hand.
3600
3606
3601 2002-11-02 Fernando Perez <fperez@colorado.edu>
3607 2002-11-02 Fernando Perez <fperez@colorado.edu>
3602
3608
3603 * IPython/genutils.py (warn): changed so that level 1 prints no
3609 * IPython/genutils.py (warn): changed so that level 1 prints no
3604 header. Level 2 is now the default (with 'WARNING' header, as
3610 header. Level 2 is now the default (with 'WARNING' header, as
3605 before). I think I tracked all places where changes were needed in
3611 before). I think I tracked all places where changes were needed in
3606 IPython, but outside code using the old level numbering may have
3612 IPython, but outside code using the old level numbering may have
3607 broken.
3613 broken.
3608
3614
3609 * IPython/iplib.py (InteractiveShell.runcode): added this to
3615 * IPython/iplib.py (InteractiveShell.runcode): added this to
3610 handle the tracebacks in SystemExit traps correctly. The previous
3616 handle the tracebacks in SystemExit traps correctly. The previous
3611 code (through interact) was printing more of the stack than
3617 code (through interact) was printing more of the stack than
3612 necessary, showing IPython internal code to the user.
3618 necessary, showing IPython internal code to the user.
3613
3619
3614 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3620 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3615 default. Now that the default at the confirmation prompt is yes,
3621 default. Now that the default at the confirmation prompt is yes,
3616 it's not so intrusive. François' argument that ipython sessions
3622 it's not so intrusive. François' argument that ipython sessions
3617 tend to be complex enough not to lose them from an accidental C-d,
3623 tend to be complex enough not to lose them from an accidental C-d,
3618 is a valid one.
3624 is a valid one.
3619
3625
3620 * IPython/iplib.py (InteractiveShell.interact): added a
3626 * IPython/iplib.py (InteractiveShell.interact): added a
3621 showtraceback() call to the SystemExit trap, and modified the exit
3627 showtraceback() call to the SystemExit trap, and modified the exit
3622 confirmation to have yes as the default.
3628 confirmation to have yes as the default.
3623
3629
3624 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3630 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3625 this file. It's been gone from the code for a long time, this was
3631 this file. It's been gone from the code for a long time, this was
3626 simply leftover junk.
3632 simply leftover junk.
3627
3633
3628 2002-11-01 Fernando Perez <fperez@colorado.edu>
3634 2002-11-01 Fernando Perez <fperez@colorado.edu>
3629
3635
3630 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3636 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3631 added. If set, IPython now traps EOF and asks for
3637 added. If set, IPython now traps EOF and asks for
3632 confirmation. After a request by François Pinard.
3638 confirmation. After a request by François Pinard.
3633
3639
3634 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3640 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3635 of @abort, and with a new (better) mechanism for handling the
3641 of @abort, and with a new (better) mechanism for handling the
3636 exceptions.
3642 exceptions.
3637
3643
3638 2002-10-27 Fernando Perez <fperez@colorado.edu>
3644 2002-10-27 Fernando Perez <fperez@colorado.edu>
3639
3645
3640 * IPython/usage.py (__doc__): updated the --help information and
3646 * IPython/usage.py (__doc__): updated the --help information and
3641 the ipythonrc file to indicate that -log generates
3647 the ipythonrc file to indicate that -log generates
3642 ./ipython.log. Also fixed the corresponding info in @logstart.
3648 ./ipython.log. Also fixed the corresponding info in @logstart.
3643 This and several other fixes in the manuals thanks to reports by
3649 This and several other fixes in the manuals thanks to reports by
3644 François Pinard <pinard-AT-iro.umontreal.ca>.
3650 François Pinard <pinard-AT-iro.umontreal.ca>.
3645
3651
3646 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3652 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3647 refer to @logstart (instead of @log, which doesn't exist).
3653 refer to @logstart (instead of @log, which doesn't exist).
3648
3654
3649 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3655 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3650 AttributeError crash. Thanks to Christopher Armstrong
3656 AttributeError crash. Thanks to Christopher Armstrong
3651 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3657 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3652 introduced recently (in 0.2.14pre37) with the fix to the eval
3658 introduced recently (in 0.2.14pre37) with the fix to the eval
3653 problem mentioned below.
3659 problem mentioned below.
3654
3660
3655 2002-10-17 Fernando Perez <fperez@colorado.edu>
3661 2002-10-17 Fernando Perez <fperez@colorado.edu>
3656
3662
3657 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3663 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3658 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3664 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3659
3665
3660 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3666 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3661 this function to fix a problem reported by Alex Schmolck. He saw
3667 this function to fix a problem reported by Alex Schmolck. He saw
3662 it with list comprehensions and generators, which were getting
3668 it with list comprehensions and generators, which were getting
3663 called twice. The real problem was an 'eval' call in testing for
3669 called twice. The real problem was an 'eval' call in testing for
3664 automagic which was evaluating the input line silently.
3670 automagic which was evaluating the input line silently.
3665
3671
3666 This is a potentially very nasty bug, if the input has side
3672 This is a potentially very nasty bug, if the input has side
3667 effects which must not be repeated. The code is much cleaner now,
3673 effects which must not be repeated. The code is much cleaner now,
3668 without any blanket 'except' left and with a regexp test for
3674 without any blanket 'except' left and with a regexp test for
3669 actual function names.
3675 actual function names.
3670
3676
3671 But an eval remains, which I'm not fully comfortable with. I just
3677 But an eval remains, which I'm not fully comfortable with. I just
3672 don't know how to find out if an expression could be a callable in
3678 don't know how to find out if an expression could be a callable in
3673 the user's namespace without doing an eval on the string. However
3679 the user's namespace without doing an eval on the string. However
3674 that string is now much more strictly checked so that no code
3680 that string is now much more strictly checked so that no code
3675 slips by, so the eval should only happen for things that can
3681 slips by, so the eval should only happen for things that can
3676 really be only function/method names.
3682 really be only function/method names.
3677
3683
3678 2002-10-15 Fernando Perez <fperez@colorado.edu>
3684 2002-10-15 Fernando Perez <fperez@colorado.edu>
3679
3685
3680 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3686 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3681 OSX information to main manual, removed README_Mac_OSX file from
3687 OSX information to main manual, removed README_Mac_OSX file from
3682 distribution. Also updated credits for recent additions.
3688 distribution. Also updated credits for recent additions.
3683
3689
3684 2002-10-10 Fernando Perez <fperez@colorado.edu>
3690 2002-10-10 Fernando Perez <fperez@colorado.edu>
3685
3691
3686 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3692 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3687 terminal-related issues. Many thanks to Andrea Riciputi
3693 terminal-related issues. Many thanks to Andrea Riciputi
3688 <andrea.riciputi-AT-libero.it> for writing it.
3694 <andrea.riciputi-AT-libero.it> for writing it.
3689
3695
3690 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3696 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3691 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3697 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3692
3698
3693 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3699 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3694 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3700 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3695 <syver-en-AT-online.no> who both submitted patches for this problem.
3701 <syver-en-AT-online.no> who both submitted patches for this problem.
3696
3702
3697 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3703 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3698 global embedding to make sure that things don't overwrite user
3704 global embedding to make sure that things don't overwrite user
3699 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3705 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3700
3706
3701 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3707 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3702 compatibility. Thanks to Hayden Callow
3708 compatibility. Thanks to Hayden Callow
3703 <h.callow-AT-elec.canterbury.ac.nz>
3709 <h.callow-AT-elec.canterbury.ac.nz>
3704
3710
3705 2002-10-04 Fernando Perez <fperez@colorado.edu>
3711 2002-10-04 Fernando Perez <fperez@colorado.edu>
3706
3712
3707 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3713 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3708 Gnuplot.File objects.
3714 Gnuplot.File objects.
3709
3715
3710 2002-07-23 Fernando Perez <fperez@colorado.edu>
3716 2002-07-23 Fernando Perez <fperez@colorado.edu>
3711
3717
3712 * IPython/genutils.py (timing): Added timings() and timing() for
3718 * IPython/genutils.py (timing): Added timings() and timing() for
3713 quick access to the most commonly needed data, the execution
3719 quick access to the most commonly needed data, the execution
3714 times. Old timing() renamed to timings_out().
3720 times. Old timing() renamed to timings_out().
3715
3721
3716 2002-07-18 Fernando Perez <fperez@colorado.edu>
3722 2002-07-18 Fernando Perez <fperez@colorado.edu>
3717
3723
3718 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3724 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3719 bug with nested instances disrupting the parent's tab completion.
3725 bug with nested instances disrupting the parent's tab completion.
3720
3726
3721 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3727 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3722 all_completions code to begin the emacs integration.
3728 all_completions code to begin the emacs integration.
3723
3729
3724 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3730 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3725 argument to allow titling individual arrays when plotting.
3731 argument to allow titling individual arrays when plotting.
3726
3732
3727 2002-07-15 Fernando Perez <fperez@colorado.edu>
3733 2002-07-15 Fernando Perez <fperez@colorado.edu>
3728
3734
3729 * setup.py (make_shortcut): changed to retrieve the value of
3735 * setup.py (make_shortcut): changed to retrieve the value of
3730 'Program Files' directory from the registry (this value changes in
3736 'Program Files' directory from the registry (this value changes in
3731 non-english versions of Windows). Thanks to Thomas Fanslau
3737 non-english versions of Windows). Thanks to Thomas Fanslau
3732 <tfanslau-AT-gmx.de> for the report.
3738 <tfanslau-AT-gmx.de> for the report.
3733
3739
3734 2002-07-10 Fernando Perez <fperez@colorado.edu>
3740 2002-07-10 Fernando Perez <fperez@colorado.edu>
3735
3741
3736 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3742 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3737 a bug in pdb, which crashes if a line with only whitespace is
3743 a bug in pdb, which crashes if a line with only whitespace is
3738 entered. Bug report submitted to sourceforge.
3744 entered. Bug report submitted to sourceforge.
3739
3745
3740 2002-07-09 Fernando Perez <fperez@colorado.edu>
3746 2002-07-09 Fernando Perez <fperez@colorado.edu>
3741
3747
3742 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3748 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3743 reporting exceptions (it's a bug in inspect.py, I just set a
3749 reporting exceptions (it's a bug in inspect.py, I just set a
3744 workaround).
3750 workaround).
3745
3751
3746 2002-07-08 Fernando Perez <fperez@colorado.edu>
3752 2002-07-08 Fernando Perez <fperez@colorado.edu>
3747
3753
3748 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3754 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3749 __IPYTHON__ in __builtins__ to show up in user_ns.
3755 __IPYTHON__ in __builtins__ to show up in user_ns.
3750
3756
3751 2002-07-03 Fernando Perez <fperez@colorado.edu>
3757 2002-07-03 Fernando Perez <fperez@colorado.edu>
3752
3758
3753 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3759 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3754 name from @gp_set_instance to @gp_set_default.
3760 name from @gp_set_instance to @gp_set_default.
3755
3761
3756 * IPython/ipmaker.py (make_IPython): default editor value set to
3762 * IPython/ipmaker.py (make_IPython): default editor value set to
3757 '0' (a string), to match the rc file. Otherwise will crash when
3763 '0' (a string), to match the rc file. Otherwise will crash when
3758 .strip() is called on it.
3764 .strip() is called on it.
3759
3765
3760
3766
3761 2002-06-28 Fernando Perez <fperez@colorado.edu>
3767 2002-06-28 Fernando Perez <fperez@colorado.edu>
3762
3768
3763 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3769 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3764 of files in current directory when a file is executed via
3770 of files in current directory when a file is executed via
3765 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3771 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3766
3772
3767 * setup.py (manfiles): fix for rpm builds, submitted by RA
3773 * setup.py (manfiles): fix for rpm builds, submitted by RA
3768 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3774 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3769
3775
3770 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3776 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3771 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3777 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3772 string!). A. Schmolck caught this one.
3778 string!). A. Schmolck caught this one.
3773
3779
3774 2002-06-27 Fernando Perez <fperez@colorado.edu>
3780 2002-06-27 Fernando Perez <fperez@colorado.edu>
3775
3781
3776 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3782 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3777 defined files at the cmd line. __name__ wasn't being set to
3783 defined files at the cmd line. __name__ wasn't being set to
3778 __main__.
3784 __main__.
3779
3785
3780 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3786 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3781 regular lists and tuples besides Numeric arrays.
3787 regular lists and tuples besides Numeric arrays.
3782
3788
3783 * IPython/Prompts.py (CachedOutput.__call__): Added output
3789 * IPython/Prompts.py (CachedOutput.__call__): Added output
3784 supression for input ending with ';'. Similar to Mathematica and
3790 supression for input ending with ';'. Similar to Mathematica and
3785 Matlab. The _* vars and Out[] list are still updated, just like
3791 Matlab. The _* vars and Out[] list are still updated, just like
3786 Mathematica behaves.
3792 Mathematica behaves.
3787
3793
3788 2002-06-25 Fernando Perez <fperez@colorado.edu>
3794 2002-06-25 Fernando Perez <fperez@colorado.edu>
3789
3795
3790 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3796 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3791 .ini extensions for profiels under Windows.
3797 .ini extensions for profiels under Windows.
3792
3798
3793 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3799 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3794 string form. Fix contributed by Alexander Schmolck
3800 string form. Fix contributed by Alexander Schmolck
3795 <a.schmolck-AT-gmx.net>
3801 <a.schmolck-AT-gmx.net>
3796
3802
3797 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3803 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3798 pre-configured Gnuplot instance.
3804 pre-configured Gnuplot instance.
3799
3805
3800 2002-06-21 Fernando Perez <fperez@colorado.edu>
3806 2002-06-21 Fernando Perez <fperez@colorado.edu>
3801
3807
3802 * IPython/numutils.py (exp_safe): new function, works around the
3808 * IPython/numutils.py (exp_safe): new function, works around the
3803 underflow problems in Numeric.
3809 underflow problems in Numeric.
3804 (log2): New fn. Safe log in base 2: returns exact integer answer
3810 (log2): New fn. Safe log in base 2: returns exact integer answer
3805 for exact integer powers of 2.
3811 for exact integer powers of 2.
3806
3812
3807 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3813 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3808 properly.
3814 properly.
3809
3815
3810 2002-06-20 Fernando Perez <fperez@colorado.edu>
3816 2002-06-20 Fernando Perez <fperez@colorado.edu>
3811
3817
3812 * IPython/genutils.py (timing): new function like
3818 * IPython/genutils.py (timing): new function like
3813 Mathematica's. Similar to time_test, but returns more info.
3819 Mathematica's. Similar to time_test, but returns more info.
3814
3820
3815 2002-06-18 Fernando Perez <fperez@colorado.edu>
3821 2002-06-18 Fernando Perez <fperez@colorado.edu>
3816
3822
3817 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3823 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3818 according to Mike Heeter's suggestions.
3824 according to Mike Heeter's suggestions.
3819
3825
3820 2002-06-16 Fernando Perez <fperez@colorado.edu>
3826 2002-06-16 Fernando Perez <fperez@colorado.edu>
3821
3827
3822 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3828 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3823 system. GnuplotMagic is gone as a user-directory option. New files
3829 system. GnuplotMagic is gone as a user-directory option. New files
3824 make it easier to use all the gnuplot stuff both from external
3830 make it easier to use all the gnuplot stuff both from external
3825 programs as well as from IPython. Had to rewrite part of
3831 programs as well as from IPython. Had to rewrite part of
3826 hardcopy() b/c of a strange bug: often the ps files simply don't
3832 hardcopy() b/c of a strange bug: often the ps files simply don't
3827 get created, and require a repeat of the command (often several
3833 get created, and require a repeat of the command (often several
3828 times).
3834 times).
3829
3835
3830 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3836 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3831 resolve output channel at call time, so that if sys.stderr has
3837 resolve output channel at call time, so that if sys.stderr has
3832 been redirected by user this gets honored.
3838 been redirected by user this gets honored.
3833
3839
3834 2002-06-13 Fernando Perez <fperez@colorado.edu>
3840 2002-06-13 Fernando Perez <fperez@colorado.edu>
3835
3841
3836 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3842 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3837 IPShell. Kept a copy with the old names to avoid breaking people's
3843 IPShell. Kept a copy with the old names to avoid breaking people's
3838 embedded code.
3844 embedded code.
3839
3845
3840 * IPython/ipython: simplified it to the bare minimum after
3846 * IPython/ipython: simplified it to the bare minimum after
3841 Holger's suggestions. Added info about how to use it in
3847 Holger's suggestions. Added info about how to use it in
3842 PYTHONSTARTUP.
3848 PYTHONSTARTUP.
3843
3849
3844 * IPython/Shell.py (IPythonShell): changed the options passing
3850 * IPython/Shell.py (IPythonShell): changed the options passing
3845 from a string with funky %s replacements to a straight list. Maybe
3851 from a string with funky %s replacements to a straight list. Maybe
3846 a bit more typing, but it follows sys.argv conventions, so there's
3852 a bit more typing, but it follows sys.argv conventions, so there's
3847 less special-casing to remember.
3853 less special-casing to remember.
3848
3854
3849 2002-06-12 Fernando Perez <fperez@colorado.edu>
3855 2002-06-12 Fernando Perez <fperez@colorado.edu>
3850
3856
3851 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3857 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3852 command. Thanks to a suggestion by Mike Heeter.
3858 command. Thanks to a suggestion by Mike Heeter.
3853 (Magic.magic_pfile): added behavior to look at filenames if given
3859 (Magic.magic_pfile): added behavior to look at filenames if given
3854 arg is not a defined object.
3860 arg is not a defined object.
3855 (Magic.magic_save): New @save function to save code snippets. Also
3861 (Magic.magic_save): New @save function to save code snippets. Also
3856 a Mike Heeter idea.
3862 a Mike Heeter idea.
3857
3863
3858 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3864 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3859 plot() and replot(). Much more convenient now, especially for
3865 plot() and replot(). Much more convenient now, especially for
3860 interactive use.
3866 interactive use.
3861
3867
3862 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3868 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3863 filenames.
3869 filenames.
3864
3870
3865 2002-06-02 Fernando Perez <fperez@colorado.edu>
3871 2002-06-02 Fernando Perez <fperez@colorado.edu>
3866
3872
3867 * IPython/Struct.py (Struct.__init__): modified to admit
3873 * IPython/Struct.py (Struct.__init__): modified to admit
3868 initialization via another struct.
3874 initialization via another struct.
3869
3875
3870 * IPython/genutils.py (SystemExec.__init__): New stateful
3876 * IPython/genutils.py (SystemExec.__init__): New stateful
3871 interface to xsys and bq. Useful for writing system scripts.
3877 interface to xsys and bq. Useful for writing system scripts.
3872
3878
3873 2002-05-30 Fernando Perez <fperez@colorado.edu>
3879 2002-05-30 Fernando Perez <fperez@colorado.edu>
3874
3880
3875 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3881 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3876 documents. This will make the user download smaller (it's getting
3882 documents. This will make the user download smaller (it's getting
3877 too big).
3883 too big).
3878
3884
3879 2002-05-29 Fernando Perez <fperez@colorado.edu>
3885 2002-05-29 Fernando Perez <fperez@colorado.edu>
3880
3886
3881 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3887 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3882 fix problems with shelve and pickle. Seems to work, but I don't
3888 fix problems with shelve and pickle. Seems to work, but I don't
3883 know if corner cases break it. Thanks to Mike Heeter
3889 know if corner cases break it. Thanks to Mike Heeter
3884 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3890 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3885
3891
3886 2002-05-24 Fernando Perez <fperez@colorado.edu>
3892 2002-05-24 Fernando Perez <fperez@colorado.edu>
3887
3893
3888 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3894 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3889 macros having broken.
3895 macros having broken.
3890
3896
3891 2002-05-21 Fernando Perez <fperez@colorado.edu>
3897 2002-05-21 Fernando Perez <fperez@colorado.edu>
3892
3898
3893 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3899 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3894 introduced logging bug: all history before logging started was
3900 introduced logging bug: all history before logging started was
3895 being written one character per line! This came from the redesign
3901 being written one character per line! This came from the redesign
3896 of the input history as a special list which slices to strings,
3902 of the input history as a special list which slices to strings,
3897 not to lists.
3903 not to lists.
3898
3904
3899 2002-05-20 Fernando Perez <fperez@colorado.edu>
3905 2002-05-20 Fernando Perez <fperez@colorado.edu>
3900
3906
3901 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3907 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3902 be an attribute of all classes in this module. The design of these
3908 be an attribute of all classes in this module. The design of these
3903 classes needs some serious overhauling.
3909 classes needs some serious overhauling.
3904
3910
3905 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3911 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3906 which was ignoring '_' in option names.
3912 which was ignoring '_' in option names.
3907
3913
3908 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3914 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3909 'Verbose_novars' to 'Context' and made it the new default. It's a
3915 'Verbose_novars' to 'Context' and made it the new default. It's a
3910 bit more readable and also safer than verbose.
3916 bit more readable and also safer than verbose.
3911
3917
3912 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3918 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3913 triple-quoted strings.
3919 triple-quoted strings.
3914
3920
3915 * IPython/OInspect.py (__all__): new module exposing the object
3921 * IPython/OInspect.py (__all__): new module exposing the object
3916 introspection facilities. Now the corresponding magics are dummy
3922 introspection facilities. Now the corresponding magics are dummy
3917 wrappers around this. Having this module will make it much easier
3923 wrappers around this. Having this module will make it much easier
3918 to put these functions into our modified pdb.
3924 to put these functions into our modified pdb.
3919 This new object inspector system uses the new colorizing module,
3925 This new object inspector system uses the new colorizing module,
3920 so source code and other things are nicely syntax highlighted.
3926 so source code and other things are nicely syntax highlighted.
3921
3927
3922 2002-05-18 Fernando Perez <fperez@colorado.edu>
3928 2002-05-18 Fernando Perez <fperez@colorado.edu>
3923
3929
3924 * IPython/ColorANSI.py: Split the coloring tools into a separate
3930 * IPython/ColorANSI.py: Split the coloring tools into a separate
3925 module so I can use them in other code easier (they were part of
3931 module so I can use them in other code easier (they were part of
3926 ultraTB).
3932 ultraTB).
3927
3933
3928 2002-05-17 Fernando Perez <fperez@colorado.edu>
3934 2002-05-17 Fernando Perez <fperez@colorado.edu>
3929
3935
3930 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3936 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3931 fixed it to set the global 'g' also to the called instance, as
3937 fixed it to set the global 'g' also to the called instance, as
3932 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3938 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3933 user's 'g' variables).
3939 user's 'g' variables).
3934
3940
3935 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3941 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3936 global variables (aliases to _ih,_oh) so that users which expect
3942 global variables (aliases to _ih,_oh) so that users which expect
3937 In[5] or Out[7] to work aren't unpleasantly surprised.
3943 In[5] or Out[7] to work aren't unpleasantly surprised.
3938 (InputList.__getslice__): new class to allow executing slices of
3944 (InputList.__getslice__): new class to allow executing slices of
3939 input history directly. Very simple class, complements the use of
3945 input history directly. Very simple class, complements the use of
3940 macros.
3946 macros.
3941
3947
3942 2002-05-16 Fernando Perez <fperez@colorado.edu>
3948 2002-05-16 Fernando Perez <fperez@colorado.edu>
3943
3949
3944 * setup.py (docdirbase): make doc directory be just doc/IPython
3950 * setup.py (docdirbase): make doc directory be just doc/IPython
3945 without version numbers, it will reduce clutter for users.
3951 without version numbers, it will reduce clutter for users.
3946
3952
3947 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3953 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3948 execfile call to prevent possible memory leak. See for details:
3954 execfile call to prevent possible memory leak. See for details:
3949 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3955 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3950
3956
3951 2002-05-15 Fernando Perez <fperez@colorado.edu>
3957 2002-05-15 Fernando Perez <fperez@colorado.edu>
3952
3958
3953 * IPython/Magic.py (Magic.magic_psource): made the object
3959 * IPython/Magic.py (Magic.magic_psource): made the object
3954 introspection names be more standard: pdoc, pdef, pfile and
3960 introspection names be more standard: pdoc, pdef, pfile and
3955 psource. They all print/page their output, and it makes
3961 psource. They all print/page their output, and it makes
3956 remembering them easier. Kept old names for compatibility as
3962 remembering them easier. Kept old names for compatibility as
3957 aliases.
3963 aliases.
3958
3964
3959 2002-05-14 Fernando Perez <fperez@colorado.edu>
3965 2002-05-14 Fernando Perez <fperez@colorado.edu>
3960
3966
3961 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3967 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3962 what the mouse problem was. The trick is to use gnuplot with temp
3968 what the mouse problem was. The trick is to use gnuplot with temp
3963 files and NOT with pipes (for data communication), because having
3969 files and NOT with pipes (for data communication), because having
3964 both pipes and the mouse on is bad news.
3970 both pipes and the mouse on is bad news.
3965
3971
3966 2002-05-13 Fernando Perez <fperez@colorado.edu>
3972 2002-05-13 Fernando Perez <fperez@colorado.edu>
3967
3973
3968 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3974 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3969 bug. Information would be reported about builtins even when
3975 bug. Information would be reported about builtins even when
3970 user-defined functions overrode them.
3976 user-defined functions overrode them.
3971
3977
3972 2002-05-11 Fernando Perez <fperez@colorado.edu>
3978 2002-05-11 Fernando Perez <fperez@colorado.edu>
3973
3979
3974 * IPython/__init__.py (__all__): removed FlexCompleter from
3980 * IPython/__init__.py (__all__): removed FlexCompleter from
3975 __all__ so that things don't fail in platforms without readline.
3981 __all__ so that things don't fail in platforms without readline.
3976
3982
3977 2002-05-10 Fernando Perez <fperez@colorado.edu>
3983 2002-05-10 Fernando Perez <fperez@colorado.edu>
3978
3984
3979 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3985 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3980 it requires Numeric, effectively making Numeric a dependency for
3986 it requires Numeric, effectively making Numeric a dependency for
3981 IPython.
3987 IPython.
3982
3988
3983 * Released 0.2.13
3989 * Released 0.2.13
3984
3990
3985 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3991 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3986 profiler interface. Now all the major options from the profiler
3992 profiler interface. Now all the major options from the profiler
3987 module are directly supported in IPython, both for single
3993 module are directly supported in IPython, both for single
3988 expressions (@prun) and for full programs (@run -p).
3994 expressions (@prun) and for full programs (@run -p).
3989
3995
3990 2002-05-09 Fernando Perez <fperez@colorado.edu>
3996 2002-05-09 Fernando Perez <fperez@colorado.edu>
3991
3997
3992 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3998 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3993 magic properly formatted for screen.
3999 magic properly formatted for screen.
3994
4000
3995 * setup.py (make_shortcut): Changed things to put pdf version in
4001 * setup.py (make_shortcut): Changed things to put pdf version in
3996 doc/ instead of doc/manual (had to change lyxport a bit).
4002 doc/ instead of doc/manual (had to change lyxport a bit).
3997
4003
3998 * IPython/Magic.py (Profile.string_stats): made profile runs go
4004 * IPython/Magic.py (Profile.string_stats): made profile runs go
3999 through pager (they are long and a pager allows searching, saving,
4005 through pager (they are long and a pager allows searching, saving,
4000 etc.)
4006 etc.)
4001
4007
4002 2002-05-08 Fernando Perez <fperez@colorado.edu>
4008 2002-05-08 Fernando Perez <fperez@colorado.edu>
4003
4009
4004 * Released 0.2.12
4010 * Released 0.2.12
4005
4011
4006 2002-05-06 Fernando Perez <fperez@colorado.edu>
4012 2002-05-06 Fernando Perez <fperez@colorado.edu>
4007
4013
4008 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4014 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4009 introduced); 'hist n1 n2' was broken.
4015 introduced); 'hist n1 n2' was broken.
4010 (Magic.magic_pdb): added optional on/off arguments to @pdb
4016 (Magic.magic_pdb): added optional on/off arguments to @pdb
4011 (Magic.magic_run): added option -i to @run, which executes code in
4017 (Magic.magic_run): added option -i to @run, which executes code in
4012 the IPython namespace instead of a clean one. Also added @irun as
4018 the IPython namespace instead of a clean one. Also added @irun as
4013 an alias to @run -i.
4019 an alias to @run -i.
4014
4020
4015 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4021 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4016 fixed (it didn't really do anything, the namespaces were wrong).
4022 fixed (it didn't really do anything, the namespaces were wrong).
4017
4023
4018 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4024 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4019
4025
4020 * IPython/__init__.py (__all__): Fixed package namespace, now
4026 * IPython/__init__.py (__all__): Fixed package namespace, now
4021 'import IPython' does give access to IPython.<all> as
4027 'import IPython' does give access to IPython.<all> as
4022 expected. Also renamed __release__ to Release.
4028 expected. Also renamed __release__ to Release.
4023
4029
4024 * IPython/Debugger.py (__license__): created new Pdb class which
4030 * IPython/Debugger.py (__license__): created new Pdb class which
4025 functions like a drop-in for the normal pdb.Pdb but does NOT
4031 functions like a drop-in for the normal pdb.Pdb but does NOT
4026 import readline by default. This way it doesn't muck up IPython's
4032 import readline by default. This way it doesn't muck up IPython's
4027 readline handling, and now tab-completion finally works in the
4033 readline handling, and now tab-completion finally works in the
4028 debugger -- sort of. It completes things globally visible, but the
4034 debugger -- sort of. It completes things globally visible, but the
4029 completer doesn't track the stack as pdb walks it. That's a bit
4035 completer doesn't track the stack as pdb walks it. That's a bit
4030 tricky, and I'll have to implement it later.
4036 tricky, and I'll have to implement it later.
4031
4037
4032 2002-05-05 Fernando Perez <fperez@colorado.edu>
4038 2002-05-05 Fernando Perez <fperez@colorado.edu>
4033
4039
4034 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4040 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4035 magic docstrings when printed via ? (explicit \'s were being
4041 magic docstrings when printed via ? (explicit \'s were being
4036 printed).
4042 printed).
4037
4043
4038 * IPython/ipmaker.py (make_IPython): fixed namespace
4044 * IPython/ipmaker.py (make_IPython): fixed namespace
4039 identification bug. Now variables loaded via logs or command-line
4045 identification bug. Now variables loaded via logs or command-line
4040 files are recognized in the interactive namespace by @who.
4046 files are recognized in the interactive namespace by @who.
4041
4047
4042 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4048 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4043 log replay system stemming from the string form of Structs.
4049 log replay system stemming from the string form of Structs.
4044
4050
4045 * IPython/Magic.py (Macro.__init__): improved macros to properly
4051 * IPython/Magic.py (Macro.__init__): improved macros to properly
4046 handle magic commands in them.
4052 handle magic commands in them.
4047 (Magic.magic_logstart): usernames are now expanded so 'logstart
4053 (Magic.magic_logstart): usernames are now expanded so 'logstart
4048 ~/mylog' now works.
4054 ~/mylog' now works.
4049
4055
4050 * IPython/iplib.py (complete): fixed bug where paths starting with
4056 * IPython/iplib.py (complete): fixed bug where paths starting with
4051 '/' would be completed as magic names.
4057 '/' would be completed as magic names.
4052
4058
4053 2002-05-04 Fernando Perez <fperez@colorado.edu>
4059 2002-05-04 Fernando Perez <fperez@colorado.edu>
4054
4060
4055 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4061 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4056 allow running full programs under the profiler's control.
4062 allow running full programs under the profiler's control.
4057
4063
4058 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4064 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4059 mode to report exceptions verbosely but without formatting
4065 mode to report exceptions verbosely but without formatting
4060 variables. This addresses the issue of ipython 'freezing' (it's
4066 variables. This addresses the issue of ipython 'freezing' (it's
4061 not frozen, but caught in an expensive formatting loop) when huge
4067 not frozen, but caught in an expensive formatting loop) when huge
4062 variables are in the context of an exception.
4068 variables are in the context of an exception.
4063 (VerboseTB.text): Added '--->' markers at line where exception was
4069 (VerboseTB.text): Added '--->' markers at line where exception was
4064 triggered. Much clearer to read, especially in NoColor modes.
4070 triggered. Much clearer to read, especially in NoColor modes.
4065
4071
4066 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4072 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4067 implemented in reverse when changing to the new parse_options().
4073 implemented in reverse when changing to the new parse_options().
4068
4074
4069 2002-05-03 Fernando Perez <fperez@colorado.edu>
4075 2002-05-03 Fernando Perez <fperez@colorado.edu>
4070
4076
4071 * IPython/Magic.py (Magic.parse_options): new function so that
4077 * IPython/Magic.py (Magic.parse_options): new function so that
4072 magics can parse options easier.
4078 magics can parse options easier.
4073 (Magic.magic_prun): new function similar to profile.run(),
4079 (Magic.magic_prun): new function similar to profile.run(),
4074 suggested by Chris Hart.
4080 suggested by Chris Hart.
4075 (Magic.magic_cd): fixed behavior so that it only changes if
4081 (Magic.magic_cd): fixed behavior so that it only changes if
4076 directory actually is in history.
4082 directory actually is in history.
4077
4083
4078 * IPython/usage.py (__doc__): added information about potential
4084 * IPython/usage.py (__doc__): added information about potential
4079 slowness of Verbose exception mode when there are huge data
4085 slowness of Verbose exception mode when there are huge data
4080 structures to be formatted (thanks to Archie Paulson).
4086 structures to be formatted (thanks to Archie Paulson).
4081
4087
4082 * IPython/ipmaker.py (make_IPython): Changed default logging
4088 * IPython/ipmaker.py (make_IPython): Changed default logging
4083 (when simply called with -log) to use curr_dir/ipython.log in
4089 (when simply called with -log) to use curr_dir/ipython.log in
4084 rotate mode. Fixed crash which was occuring with -log before
4090 rotate mode. Fixed crash which was occuring with -log before
4085 (thanks to Jim Boyle).
4091 (thanks to Jim Boyle).
4086
4092
4087 2002-05-01 Fernando Perez <fperez@colorado.edu>
4093 2002-05-01 Fernando Perez <fperez@colorado.edu>
4088
4094
4089 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4095 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4090 was nasty -- though somewhat of a corner case).
4096 was nasty -- though somewhat of a corner case).
4091
4097
4092 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4098 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4093 text (was a bug).
4099 text (was a bug).
4094
4100
4095 2002-04-30 Fernando Perez <fperez@colorado.edu>
4101 2002-04-30 Fernando Perez <fperez@colorado.edu>
4096
4102
4097 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4103 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4098 a print after ^D or ^C from the user so that the In[] prompt
4104 a print after ^D or ^C from the user so that the In[] prompt
4099 doesn't over-run the gnuplot one.
4105 doesn't over-run the gnuplot one.
4100
4106
4101 2002-04-29 Fernando Perez <fperez@colorado.edu>
4107 2002-04-29 Fernando Perez <fperez@colorado.edu>
4102
4108
4103 * Released 0.2.10
4109 * Released 0.2.10
4104
4110
4105 * IPython/__release__.py (version): get date dynamically.
4111 * IPython/__release__.py (version): get date dynamically.
4106
4112
4107 * Misc. documentation updates thanks to Arnd's comments. Also ran
4113 * Misc. documentation updates thanks to Arnd's comments. Also ran
4108 a full spellcheck on the manual (hadn't been done in a while).
4114 a full spellcheck on the manual (hadn't been done in a while).
4109
4115
4110 2002-04-27 Fernando Perez <fperez@colorado.edu>
4116 2002-04-27 Fernando Perez <fperez@colorado.edu>
4111
4117
4112 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4118 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4113 starting a log in mid-session would reset the input history list.
4119 starting a log in mid-session would reset the input history list.
4114
4120
4115 2002-04-26 Fernando Perez <fperez@colorado.edu>
4121 2002-04-26 Fernando Perez <fperez@colorado.edu>
4116
4122
4117 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4123 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4118 all files were being included in an update. Now anything in
4124 all files were being included in an update. Now anything in
4119 UserConfig that matches [A-Za-z]*.py will go (this excludes
4125 UserConfig that matches [A-Za-z]*.py will go (this excludes
4120 __init__.py)
4126 __init__.py)
4121
4127
4122 2002-04-25 Fernando Perez <fperez@colorado.edu>
4128 2002-04-25 Fernando Perez <fperez@colorado.edu>
4123
4129
4124 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4130 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4125 to __builtins__ so that any form of embedded or imported code can
4131 to __builtins__ so that any form of embedded or imported code can
4126 test for being inside IPython.
4132 test for being inside IPython.
4127
4133
4128 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4134 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4129 changed to GnuplotMagic because it's now an importable module,
4135 changed to GnuplotMagic because it's now an importable module,
4130 this makes the name follow that of the standard Gnuplot module.
4136 this makes the name follow that of the standard Gnuplot module.
4131 GnuplotMagic can now be loaded at any time in mid-session.
4137 GnuplotMagic can now be loaded at any time in mid-session.
4132
4138
4133 2002-04-24 Fernando Perez <fperez@colorado.edu>
4139 2002-04-24 Fernando Perez <fperez@colorado.edu>
4134
4140
4135 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4141 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4136 the globals (IPython has its own namespace) and the
4142 the globals (IPython has its own namespace) and the
4137 PhysicalQuantity stuff is much better anyway.
4143 PhysicalQuantity stuff is much better anyway.
4138
4144
4139 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4145 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4140 embedding example to standard user directory for
4146 embedding example to standard user directory for
4141 distribution. Also put it in the manual.
4147 distribution. Also put it in the manual.
4142
4148
4143 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4149 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4144 instance as first argument (so it doesn't rely on some obscure
4150 instance as first argument (so it doesn't rely on some obscure
4145 hidden global).
4151 hidden global).
4146
4152
4147 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4153 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4148 delimiters. While it prevents ().TAB from working, it allows
4154 delimiters. While it prevents ().TAB from working, it allows
4149 completions in open (... expressions. This is by far a more common
4155 completions in open (... expressions. This is by far a more common
4150 case.
4156 case.
4151
4157
4152 2002-04-23 Fernando Perez <fperez@colorado.edu>
4158 2002-04-23 Fernando Perez <fperez@colorado.edu>
4153
4159
4154 * IPython/Extensions/InterpreterPasteInput.py: new
4160 * IPython/Extensions/InterpreterPasteInput.py: new
4155 syntax-processing module for pasting lines with >>> or ... at the
4161 syntax-processing module for pasting lines with >>> or ... at the
4156 start.
4162 start.
4157
4163
4158 * IPython/Extensions/PhysicalQ_Interactive.py
4164 * IPython/Extensions/PhysicalQ_Interactive.py
4159 (PhysicalQuantityInteractive.__int__): fixed to work with either
4165 (PhysicalQuantityInteractive.__int__): fixed to work with either
4160 Numeric or math.
4166 Numeric or math.
4161
4167
4162 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4168 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4163 provided profiles. Now we have:
4169 provided profiles. Now we have:
4164 -math -> math module as * and cmath with its own namespace.
4170 -math -> math module as * and cmath with its own namespace.
4165 -numeric -> Numeric as *, plus gnuplot & grace
4171 -numeric -> Numeric as *, plus gnuplot & grace
4166 -physics -> same as before
4172 -physics -> same as before
4167
4173
4168 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4174 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4169 user-defined magics wouldn't be found by @magic if they were
4175 user-defined magics wouldn't be found by @magic if they were
4170 defined as class methods. Also cleaned up the namespace search
4176 defined as class methods. Also cleaned up the namespace search
4171 logic and the string building (to use %s instead of many repeated
4177 logic and the string building (to use %s instead of many repeated
4172 string adds).
4178 string adds).
4173
4179
4174 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4180 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4175 of user-defined magics to operate with class methods (cleaner, in
4181 of user-defined magics to operate with class methods (cleaner, in
4176 line with the gnuplot code).
4182 line with the gnuplot code).
4177
4183
4178 2002-04-22 Fernando Perez <fperez@colorado.edu>
4184 2002-04-22 Fernando Perez <fperez@colorado.edu>
4179
4185
4180 * setup.py: updated dependency list so that manual is updated when
4186 * setup.py: updated dependency list so that manual is updated when
4181 all included files change.
4187 all included files change.
4182
4188
4183 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4189 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4184 the delimiter removal option (the fix is ugly right now).
4190 the delimiter removal option (the fix is ugly right now).
4185
4191
4186 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4192 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4187 all of the math profile (quicker loading, no conflict between
4193 all of the math profile (quicker loading, no conflict between
4188 g-9.8 and g-gnuplot).
4194 g-9.8 and g-gnuplot).
4189
4195
4190 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4196 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4191 name of post-mortem files to IPython_crash_report.txt.
4197 name of post-mortem files to IPython_crash_report.txt.
4192
4198
4193 * Cleanup/update of the docs. Added all the new readline info and
4199 * Cleanup/update of the docs. Added all the new readline info and
4194 formatted all lists as 'real lists'.
4200 formatted all lists as 'real lists'.
4195
4201
4196 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4202 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4197 tab-completion options, since the full readline parse_and_bind is
4203 tab-completion options, since the full readline parse_and_bind is
4198 now accessible.
4204 now accessible.
4199
4205
4200 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4206 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4201 handling of readline options. Now users can specify any string to
4207 handling of readline options. Now users can specify any string to
4202 be passed to parse_and_bind(), as well as the delimiters to be
4208 be passed to parse_and_bind(), as well as the delimiters to be
4203 removed.
4209 removed.
4204 (InteractiveShell.__init__): Added __name__ to the global
4210 (InteractiveShell.__init__): Added __name__ to the global
4205 namespace so that things like Itpl which rely on its existence
4211 namespace so that things like Itpl which rely on its existence
4206 don't crash.
4212 don't crash.
4207 (InteractiveShell._prefilter): Defined the default with a _ so
4213 (InteractiveShell._prefilter): Defined the default with a _ so
4208 that prefilter() is easier to override, while the default one
4214 that prefilter() is easier to override, while the default one
4209 remains available.
4215 remains available.
4210
4216
4211 2002-04-18 Fernando Perez <fperez@colorado.edu>
4217 2002-04-18 Fernando Perez <fperez@colorado.edu>
4212
4218
4213 * Added information about pdb in the docs.
4219 * Added information about pdb in the docs.
4214
4220
4215 2002-04-17 Fernando Perez <fperez@colorado.edu>
4221 2002-04-17 Fernando Perez <fperez@colorado.edu>
4216
4222
4217 * IPython/ipmaker.py (make_IPython): added rc_override option to
4223 * IPython/ipmaker.py (make_IPython): added rc_override option to
4218 allow passing config options at creation time which may override
4224 allow passing config options at creation time which may override
4219 anything set in the config files or command line. This is
4225 anything set in the config files or command line. This is
4220 particularly useful for configuring embedded instances.
4226 particularly useful for configuring embedded instances.
4221
4227
4222 2002-04-15 Fernando Perez <fperez@colorado.edu>
4228 2002-04-15 Fernando Perez <fperez@colorado.edu>
4223
4229
4224 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4230 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4225 crash embedded instances because of the input cache falling out of
4231 crash embedded instances because of the input cache falling out of
4226 sync with the output counter.
4232 sync with the output counter.
4227
4233
4228 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4234 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4229 mode which calls pdb after an uncaught exception in IPython itself.
4235 mode which calls pdb after an uncaught exception in IPython itself.
4230
4236
4231 2002-04-14 Fernando Perez <fperez@colorado.edu>
4237 2002-04-14 Fernando Perez <fperez@colorado.edu>
4232
4238
4233 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4239 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4234 readline, fix it back after each call.
4240 readline, fix it back after each call.
4235
4241
4236 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4242 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4237 method to force all access via __call__(), which guarantees that
4243 method to force all access via __call__(), which guarantees that
4238 traceback references are properly deleted.
4244 traceback references are properly deleted.
4239
4245
4240 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4246 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4241 improve printing when pprint is in use.
4247 improve printing when pprint is in use.
4242
4248
4243 2002-04-13 Fernando Perez <fperez@colorado.edu>
4249 2002-04-13 Fernando Perez <fperez@colorado.edu>
4244
4250
4245 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4251 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4246 exceptions aren't caught anymore. If the user triggers one, he
4252 exceptions aren't caught anymore. If the user triggers one, he
4247 should know why he's doing it and it should go all the way up,
4253 should know why he's doing it and it should go all the way up,
4248 just like any other exception. So now @abort will fully kill the
4254 just like any other exception. So now @abort will fully kill the
4249 embedded interpreter and the embedding code (unless that happens
4255 embedded interpreter and the embedding code (unless that happens
4250 to catch SystemExit).
4256 to catch SystemExit).
4251
4257
4252 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4258 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4253 and a debugger() method to invoke the interactive pdb debugger
4259 and a debugger() method to invoke the interactive pdb debugger
4254 after printing exception information. Also added the corresponding
4260 after printing exception information. Also added the corresponding
4255 -pdb option and @pdb magic to control this feature, and updated
4261 -pdb option and @pdb magic to control this feature, and updated
4256 the docs. After a suggestion from Christopher Hart
4262 the docs. After a suggestion from Christopher Hart
4257 (hart-AT-caltech.edu).
4263 (hart-AT-caltech.edu).
4258
4264
4259 2002-04-12 Fernando Perez <fperez@colorado.edu>
4265 2002-04-12 Fernando Perez <fperez@colorado.edu>
4260
4266
4261 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4267 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4262 the exception handlers defined by the user (not the CrashHandler)
4268 the exception handlers defined by the user (not the CrashHandler)
4263 so that user exceptions don't trigger an ipython bug report.
4269 so that user exceptions don't trigger an ipython bug report.
4264
4270
4265 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4271 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4266 configurable (it should have always been so).
4272 configurable (it should have always been so).
4267
4273
4268 2002-03-26 Fernando Perez <fperez@colorado.edu>
4274 2002-03-26 Fernando Perez <fperez@colorado.edu>
4269
4275
4270 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4276 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4271 and there to fix embedding namespace issues. This should all be
4277 and there to fix embedding namespace issues. This should all be
4272 done in a more elegant way.
4278 done in a more elegant way.
4273
4279
4274 2002-03-25 Fernando Perez <fperez@colorado.edu>
4280 2002-03-25 Fernando Perez <fperez@colorado.edu>
4275
4281
4276 * IPython/genutils.py (get_home_dir): Try to make it work under
4282 * IPython/genutils.py (get_home_dir): Try to make it work under
4277 win9x also.
4283 win9x also.
4278
4284
4279 2002-03-20 Fernando Perez <fperez@colorado.edu>
4285 2002-03-20 Fernando Perez <fperez@colorado.edu>
4280
4286
4281 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4287 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4282 sys.displayhook untouched upon __init__.
4288 sys.displayhook untouched upon __init__.
4283
4289
4284 2002-03-19 Fernando Perez <fperez@colorado.edu>
4290 2002-03-19 Fernando Perez <fperez@colorado.edu>
4285
4291
4286 * Released 0.2.9 (for embedding bug, basically).
4292 * Released 0.2.9 (for embedding bug, basically).
4287
4293
4288 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4294 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4289 exceptions so that enclosing shell's state can be restored.
4295 exceptions so that enclosing shell's state can be restored.
4290
4296
4291 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4297 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4292 naming conventions in the .ipython/ dir.
4298 naming conventions in the .ipython/ dir.
4293
4299
4294 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4300 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4295 from delimiters list so filenames with - in them get expanded.
4301 from delimiters list so filenames with - in them get expanded.
4296
4302
4297 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4303 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4298 sys.displayhook not being properly restored after an embedded call.
4304 sys.displayhook not being properly restored after an embedded call.
4299
4305
4300 2002-03-18 Fernando Perez <fperez@colorado.edu>
4306 2002-03-18 Fernando Perez <fperez@colorado.edu>
4301
4307
4302 * Released 0.2.8
4308 * Released 0.2.8
4303
4309
4304 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4310 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4305 some files weren't being included in a -upgrade.
4311 some files weren't being included in a -upgrade.
4306 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4312 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4307 on' so that the first tab completes.
4313 on' so that the first tab completes.
4308 (InteractiveShell.handle_magic): fixed bug with spaces around
4314 (InteractiveShell.handle_magic): fixed bug with spaces around
4309 quotes breaking many magic commands.
4315 quotes breaking many magic commands.
4310
4316
4311 * setup.py: added note about ignoring the syntax error messages at
4317 * setup.py: added note about ignoring the syntax error messages at
4312 installation.
4318 installation.
4313
4319
4314 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4320 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4315 streamlining the gnuplot interface, now there's only one magic @gp.
4321 streamlining the gnuplot interface, now there's only one magic @gp.
4316
4322
4317 2002-03-17 Fernando Perez <fperez@colorado.edu>
4323 2002-03-17 Fernando Perez <fperez@colorado.edu>
4318
4324
4319 * IPython/UserConfig/magic_gnuplot.py: new name for the
4325 * IPython/UserConfig/magic_gnuplot.py: new name for the
4320 example-magic_pm.py file. Much enhanced system, now with a shell
4326 example-magic_pm.py file. Much enhanced system, now with a shell
4321 for communicating directly with gnuplot, one command at a time.
4327 for communicating directly with gnuplot, one command at a time.
4322
4328
4323 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4329 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4324 setting __name__=='__main__'.
4330 setting __name__=='__main__'.
4325
4331
4326 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4332 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4327 mini-shell for accessing gnuplot from inside ipython. Should
4333 mini-shell for accessing gnuplot from inside ipython. Should
4328 extend it later for grace access too. Inspired by Arnd's
4334 extend it later for grace access too. Inspired by Arnd's
4329 suggestion.
4335 suggestion.
4330
4336
4331 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4337 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4332 calling magic functions with () in their arguments. Thanks to Arnd
4338 calling magic functions with () in their arguments. Thanks to Arnd
4333 Baecker for pointing this to me.
4339 Baecker for pointing this to me.
4334
4340
4335 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4341 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4336 infinitely for integer or complex arrays (only worked with floats).
4342 infinitely for integer or complex arrays (only worked with floats).
4337
4343
4338 2002-03-16 Fernando Perez <fperez@colorado.edu>
4344 2002-03-16 Fernando Perez <fperez@colorado.edu>
4339
4345
4340 * setup.py: Merged setup and setup_windows into a single script
4346 * setup.py: Merged setup and setup_windows into a single script
4341 which properly handles things for windows users.
4347 which properly handles things for windows users.
4342
4348
4343 2002-03-15 Fernando Perez <fperez@colorado.edu>
4349 2002-03-15 Fernando Perez <fperez@colorado.edu>
4344
4350
4345 * Big change to the manual: now the magics are all automatically
4351 * Big change to the manual: now the magics are all automatically
4346 documented. This information is generated from their docstrings
4352 documented. This information is generated from their docstrings
4347 and put in a latex file included by the manual lyx file. This way
4353 and put in a latex file included by the manual lyx file. This way
4348 we get always up to date information for the magics. The manual
4354 we get always up to date information for the magics. The manual
4349 now also has proper version information, also auto-synced.
4355 now also has proper version information, also auto-synced.
4350
4356
4351 For this to work, an undocumented --magic_docstrings option was added.
4357 For this to work, an undocumented --magic_docstrings option was added.
4352
4358
4353 2002-03-13 Fernando Perez <fperez@colorado.edu>
4359 2002-03-13 Fernando Perez <fperez@colorado.edu>
4354
4360
4355 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4361 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4356 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4362 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4357
4363
4358 2002-03-12 Fernando Perez <fperez@colorado.edu>
4364 2002-03-12 Fernando Perez <fperez@colorado.edu>
4359
4365
4360 * IPython/ultraTB.py (TermColors): changed color escapes again to
4366 * IPython/ultraTB.py (TermColors): changed color escapes again to
4361 fix the (old, reintroduced) line-wrapping bug. Basically, if
4367 fix the (old, reintroduced) line-wrapping bug. Basically, if
4362 \001..\002 aren't given in the color escapes, lines get wrapped
4368 \001..\002 aren't given in the color escapes, lines get wrapped
4363 weirdly. But giving those screws up old xterms and emacs terms. So
4369 weirdly. But giving those screws up old xterms and emacs terms. So
4364 I added some logic for emacs terms to be ok, but I can't identify old
4370 I added some logic for emacs terms to be ok, but I can't identify old
4365 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4371 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4366
4372
4367 2002-03-10 Fernando Perez <fperez@colorado.edu>
4373 2002-03-10 Fernando Perez <fperez@colorado.edu>
4368
4374
4369 * IPython/usage.py (__doc__): Various documentation cleanups and
4375 * IPython/usage.py (__doc__): Various documentation cleanups and
4370 updates, both in usage docstrings and in the manual.
4376 updates, both in usage docstrings and in the manual.
4371
4377
4372 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4378 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4373 handling of caching. Set minimum acceptabe value for having a
4379 handling of caching. Set minimum acceptabe value for having a
4374 cache at 20 values.
4380 cache at 20 values.
4375
4381
4376 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4382 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4377 install_first_time function to a method, renamed it and added an
4383 install_first_time function to a method, renamed it and added an
4378 'upgrade' mode. Now people can update their config directory with
4384 'upgrade' mode. Now people can update their config directory with
4379 a simple command line switch (-upgrade, also new).
4385 a simple command line switch (-upgrade, also new).
4380
4386
4381 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4387 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4382 @file (convenient for automagic users under Python >= 2.2).
4388 @file (convenient for automagic users under Python >= 2.2).
4383 Removed @files (it seemed more like a plural than an abbrev. of
4389 Removed @files (it seemed more like a plural than an abbrev. of
4384 'file show').
4390 'file show').
4385
4391
4386 * IPython/iplib.py (install_first_time): Fixed crash if there were
4392 * IPython/iplib.py (install_first_time): Fixed crash if there were
4387 backup files ('~') in .ipython/ install directory.
4393 backup files ('~') in .ipython/ install directory.
4388
4394
4389 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4395 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4390 system. Things look fine, but these changes are fairly
4396 system. Things look fine, but these changes are fairly
4391 intrusive. Test them for a few days.
4397 intrusive. Test them for a few days.
4392
4398
4393 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4399 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4394 the prompts system. Now all in/out prompt strings are user
4400 the prompts system. Now all in/out prompt strings are user
4395 controllable. This is particularly useful for embedding, as one
4401 controllable. This is particularly useful for embedding, as one
4396 can tag embedded instances with particular prompts.
4402 can tag embedded instances with particular prompts.
4397
4403
4398 Also removed global use of sys.ps1/2, which now allows nested
4404 Also removed global use of sys.ps1/2, which now allows nested
4399 embeddings without any problems. Added command-line options for
4405 embeddings without any problems. Added command-line options for
4400 the prompt strings.
4406 the prompt strings.
4401
4407
4402 2002-03-08 Fernando Perez <fperez@colorado.edu>
4408 2002-03-08 Fernando Perez <fperez@colorado.edu>
4403
4409
4404 * IPython/UserConfig/example-embed-short.py (ipshell): added
4410 * IPython/UserConfig/example-embed-short.py (ipshell): added
4405 example file with the bare minimum code for embedding.
4411 example file with the bare minimum code for embedding.
4406
4412
4407 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4413 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4408 functionality for the embeddable shell to be activated/deactivated
4414 functionality for the embeddable shell to be activated/deactivated
4409 either globally or at each call.
4415 either globally or at each call.
4410
4416
4411 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4417 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4412 rewriting the prompt with '--->' for auto-inputs with proper
4418 rewriting the prompt with '--->' for auto-inputs with proper
4413 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4419 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4414 this is handled by the prompts class itself, as it should.
4420 this is handled by the prompts class itself, as it should.
4415
4421
4416 2002-03-05 Fernando Perez <fperez@colorado.edu>
4422 2002-03-05 Fernando Perez <fperez@colorado.edu>
4417
4423
4418 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4424 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4419 @logstart to avoid name clashes with the math log function.
4425 @logstart to avoid name clashes with the math log function.
4420
4426
4421 * Big updates to X/Emacs section of the manual.
4427 * Big updates to X/Emacs section of the manual.
4422
4428
4423 * Removed ipython_emacs. Milan explained to me how to pass
4429 * Removed ipython_emacs. Milan explained to me how to pass
4424 arguments to ipython through Emacs. Some day I'm going to end up
4430 arguments to ipython through Emacs. Some day I'm going to end up
4425 learning some lisp...
4431 learning some lisp...
4426
4432
4427 2002-03-04 Fernando Perez <fperez@colorado.edu>
4433 2002-03-04 Fernando Perez <fperez@colorado.edu>
4428
4434
4429 * IPython/ipython_emacs: Created script to be used as the
4435 * IPython/ipython_emacs: Created script to be used as the
4430 py-python-command Emacs variable so we can pass IPython
4436 py-python-command Emacs variable so we can pass IPython
4431 parameters. I can't figure out how to tell Emacs directly to pass
4437 parameters. I can't figure out how to tell Emacs directly to pass
4432 parameters to IPython, so a dummy shell script will do it.
4438 parameters to IPython, so a dummy shell script will do it.
4433
4439
4434 Other enhancements made for things to work better under Emacs'
4440 Other enhancements made for things to work better under Emacs'
4435 various types of terminals. Many thanks to Milan Zamazal
4441 various types of terminals. Many thanks to Milan Zamazal
4436 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4442 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4437
4443
4438 2002-03-01 Fernando Perez <fperez@colorado.edu>
4444 2002-03-01 Fernando Perez <fperez@colorado.edu>
4439
4445
4440 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4446 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4441 that loading of readline is now optional. This gives better
4447 that loading of readline is now optional. This gives better
4442 control to emacs users.
4448 control to emacs users.
4443
4449
4444 * IPython/ultraTB.py (__date__): Modified color escape sequences
4450 * IPython/ultraTB.py (__date__): Modified color escape sequences
4445 and now things work fine under xterm and in Emacs' term buffers
4451 and now things work fine under xterm and in Emacs' term buffers
4446 (though not shell ones). Well, in emacs you get colors, but all
4452 (though not shell ones). Well, in emacs you get colors, but all
4447 seem to be 'light' colors (no difference between dark and light
4453 seem to be 'light' colors (no difference between dark and light
4448 ones). But the garbage chars are gone, and also in xterms. It
4454 ones). But the garbage chars are gone, and also in xterms. It
4449 seems that now I'm using 'cleaner' ansi sequences.
4455 seems that now I'm using 'cleaner' ansi sequences.
4450
4456
4451 2002-02-21 Fernando Perez <fperez@colorado.edu>
4457 2002-02-21 Fernando Perez <fperez@colorado.edu>
4452
4458
4453 * Released 0.2.7 (mainly to publish the scoping fix).
4459 * Released 0.2.7 (mainly to publish the scoping fix).
4454
4460
4455 * IPython/Logger.py (Logger.logstate): added. A corresponding
4461 * IPython/Logger.py (Logger.logstate): added. A corresponding
4456 @logstate magic was created.
4462 @logstate magic was created.
4457
4463
4458 * IPython/Magic.py: fixed nested scoping problem under Python
4464 * IPython/Magic.py: fixed nested scoping problem under Python
4459 2.1.x (automagic wasn't working).
4465 2.1.x (automagic wasn't working).
4460
4466
4461 2002-02-20 Fernando Perez <fperez@colorado.edu>
4467 2002-02-20 Fernando Perez <fperez@colorado.edu>
4462
4468
4463 * Released 0.2.6.
4469 * Released 0.2.6.
4464
4470
4465 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4471 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4466 option so that logs can come out without any headers at all.
4472 option so that logs can come out without any headers at all.
4467
4473
4468 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4474 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4469 SciPy.
4475 SciPy.
4470
4476
4471 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4477 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4472 that embedded IPython calls don't require vars() to be explicitly
4478 that embedded IPython calls don't require vars() to be explicitly
4473 passed. Now they are extracted from the caller's frame (code
4479 passed. Now they are extracted from the caller's frame (code
4474 snatched from Eric Jones' weave). Added better documentation to
4480 snatched from Eric Jones' weave). Added better documentation to
4475 the section on embedding and the example file.
4481 the section on embedding and the example file.
4476
4482
4477 * IPython/genutils.py (page): Changed so that under emacs, it just
4483 * IPython/genutils.py (page): Changed so that under emacs, it just
4478 prints the string. You can then page up and down in the emacs
4484 prints the string. You can then page up and down in the emacs
4479 buffer itself. This is how the builtin help() works.
4485 buffer itself. This is how the builtin help() works.
4480
4486
4481 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4487 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4482 macro scoping: macros need to be executed in the user's namespace
4488 macro scoping: macros need to be executed in the user's namespace
4483 to work as if they had been typed by the user.
4489 to work as if they had been typed by the user.
4484
4490
4485 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4491 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4486 execute automatically (no need to type 'exec...'). They then
4492 execute automatically (no need to type 'exec...'). They then
4487 behave like 'true macros'. The printing system was also modified
4493 behave like 'true macros'. The printing system was also modified
4488 for this to work.
4494 for this to work.
4489
4495
4490 2002-02-19 Fernando Perez <fperez@colorado.edu>
4496 2002-02-19 Fernando Perez <fperez@colorado.edu>
4491
4497
4492 * IPython/genutils.py (page_file): new function for paging files
4498 * IPython/genutils.py (page_file): new function for paging files
4493 in an OS-independent way. Also necessary for file viewing to work
4499 in an OS-independent way. Also necessary for file viewing to work
4494 well inside Emacs buffers.
4500 well inside Emacs buffers.
4495 (page): Added checks for being in an emacs buffer.
4501 (page): Added checks for being in an emacs buffer.
4496 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4502 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4497 same bug in iplib.
4503 same bug in iplib.
4498
4504
4499 2002-02-18 Fernando Perez <fperez@colorado.edu>
4505 2002-02-18 Fernando Perez <fperez@colorado.edu>
4500
4506
4501 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4507 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4502 of readline so that IPython can work inside an Emacs buffer.
4508 of readline so that IPython can work inside an Emacs buffer.
4503
4509
4504 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4510 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4505 method signatures (they weren't really bugs, but it looks cleaner
4511 method signatures (they weren't really bugs, but it looks cleaner
4506 and keeps PyChecker happy).
4512 and keeps PyChecker happy).
4507
4513
4508 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4514 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4509 for implementing various user-defined hooks. Currently only
4515 for implementing various user-defined hooks. Currently only
4510 display is done.
4516 display is done.
4511
4517
4512 * IPython/Prompts.py (CachedOutput._display): changed display
4518 * IPython/Prompts.py (CachedOutput._display): changed display
4513 functions so that they can be dynamically changed by users easily.
4519 functions so that they can be dynamically changed by users easily.
4514
4520
4515 * IPython/Extensions/numeric_formats.py (num_display): added an
4521 * IPython/Extensions/numeric_formats.py (num_display): added an
4516 extension for printing NumPy arrays in flexible manners. It
4522 extension for printing NumPy arrays in flexible manners. It
4517 doesn't do anything yet, but all the structure is in
4523 doesn't do anything yet, but all the structure is in
4518 place. Ultimately the plan is to implement output format control
4524 place. Ultimately the plan is to implement output format control
4519 like in Octave.
4525 like in Octave.
4520
4526
4521 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4527 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4522 methods are found at run-time by all the automatic machinery.
4528 methods are found at run-time by all the automatic machinery.
4523
4529
4524 2002-02-17 Fernando Perez <fperez@colorado.edu>
4530 2002-02-17 Fernando Perez <fperez@colorado.edu>
4525
4531
4526 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4532 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4527 whole file a little.
4533 whole file a little.
4528
4534
4529 * ToDo: closed this document. Now there's a new_design.lyx
4535 * ToDo: closed this document. Now there's a new_design.lyx
4530 document for all new ideas. Added making a pdf of it for the
4536 document for all new ideas. Added making a pdf of it for the
4531 end-user distro.
4537 end-user distro.
4532
4538
4533 * IPython/Logger.py (Logger.switch_log): Created this to replace
4539 * IPython/Logger.py (Logger.switch_log): Created this to replace
4534 logon() and logoff(). It also fixes a nasty crash reported by
4540 logon() and logoff(). It also fixes a nasty crash reported by
4535 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4541 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4536
4542
4537 * IPython/iplib.py (complete): got auto-completion to work with
4543 * IPython/iplib.py (complete): got auto-completion to work with
4538 automagic (I had wanted this for a long time).
4544 automagic (I had wanted this for a long time).
4539
4545
4540 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4546 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4541 to @file, since file() is now a builtin and clashes with automagic
4547 to @file, since file() is now a builtin and clashes with automagic
4542 for @file.
4548 for @file.
4543
4549
4544 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4550 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4545 of this was previously in iplib, which had grown to more than 2000
4551 of this was previously in iplib, which had grown to more than 2000
4546 lines, way too long. No new functionality, but it makes managing
4552 lines, way too long. No new functionality, but it makes managing
4547 the code a bit easier.
4553 the code a bit easier.
4548
4554
4549 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4555 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4550 information to crash reports.
4556 information to crash reports.
4551
4557
4552 2002-02-12 Fernando Perez <fperez@colorado.edu>
4558 2002-02-12 Fernando Perez <fperez@colorado.edu>
4553
4559
4554 * Released 0.2.5.
4560 * Released 0.2.5.
4555
4561
4556 2002-02-11 Fernando Perez <fperez@colorado.edu>
4562 2002-02-11 Fernando Perez <fperez@colorado.edu>
4557
4563
4558 * Wrote a relatively complete Windows installer. It puts
4564 * Wrote a relatively complete Windows installer. It puts
4559 everything in place, creates Start Menu entries and fixes the
4565 everything in place, creates Start Menu entries and fixes the
4560 color issues. Nothing fancy, but it works.
4566 color issues. Nothing fancy, but it works.
4561
4567
4562 2002-02-10 Fernando Perez <fperez@colorado.edu>
4568 2002-02-10 Fernando Perez <fperez@colorado.edu>
4563
4569
4564 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4570 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4565 os.path.expanduser() call so that we can type @run ~/myfile.py and
4571 os.path.expanduser() call so that we can type @run ~/myfile.py and
4566 have thigs work as expected.
4572 have thigs work as expected.
4567
4573
4568 * IPython/genutils.py (page): fixed exception handling so things
4574 * IPython/genutils.py (page): fixed exception handling so things
4569 work both in Unix and Windows correctly. Quitting a pager triggers
4575 work both in Unix and Windows correctly. Quitting a pager triggers
4570 an IOError/broken pipe in Unix, and in windows not finding a pager
4576 an IOError/broken pipe in Unix, and in windows not finding a pager
4571 is also an IOError, so I had to actually look at the return value
4577 is also an IOError, so I had to actually look at the return value
4572 of the exception, not just the exception itself. Should be ok now.
4578 of the exception, not just the exception itself. Should be ok now.
4573
4579
4574 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4580 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4575 modified to allow case-insensitive color scheme changes.
4581 modified to allow case-insensitive color scheme changes.
4576
4582
4577 2002-02-09 Fernando Perez <fperez@colorado.edu>
4583 2002-02-09 Fernando Perez <fperez@colorado.edu>
4578
4584
4579 * IPython/genutils.py (native_line_ends): new function to leave
4585 * IPython/genutils.py (native_line_ends): new function to leave
4580 user config files with os-native line-endings.
4586 user config files with os-native line-endings.
4581
4587
4582 * README and manual updates.
4588 * README and manual updates.
4583
4589
4584 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4590 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4585 instead of StringType to catch Unicode strings.
4591 instead of StringType to catch Unicode strings.
4586
4592
4587 * IPython/genutils.py (filefind): fixed bug for paths with
4593 * IPython/genutils.py (filefind): fixed bug for paths with
4588 embedded spaces (very common in Windows).
4594 embedded spaces (very common in Windows).
4589
4595
4590 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4596 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4591 files under Windows, so that they get automatically associated
4597 files under Windows, so that they get automatically associated
4592 with a text editor. Windows makes it a pain to handle
4598 with a text editor. Windows makes it a pain to handle
4593 extension-less files.
4599 extension-less files.
4594
4600
4595 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4601 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4596 warning about readline only occur for Posix. In Windows there's no
4602 warning about readline only occur for Posix. In Windows there's no
4597 way to get readline, so why bother with the warning.
4603 way to get readline, so why bother with the warning.
4598
4604
4599 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4605 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4600 for __str__ instead of dir(self), since dir() changed in 2.2.
4606 for __str__ instead of dir(self), since dir() changed in 2.2.
4601
4607
4602 * Ported to Windows! Tested on XP, I suspect it should work fine
4608 * Ported to Windows! Tested on XP, I suspect it should work fine
4603 on NT/2000, but I don't think it will work on 98 et al. That
4609 on NT/2000, but I don't think it will work on 98 et al. That
4604 series of Windows is such a piece of junk anyway that I won't try
4610 series of Windows is such a piece of junk anyway that I won't try
4605 porting it there. The XP port was straightforward, showed a few
4611 porting it there. The XP port was straightforward, showed a few
4606 bugs here and there (fixed all), in particular some string
4612 bugs here and there (fixed all), in particular some string
4607 handling stuff which required considering Unicode strings (which
4613 handling stuff which required considering Unicode strings (which
4608 Windows uses). This is good, but hasn't been too tested :) No
4614 Windows uses). This is good, but hasn't been too tested :) No
4609 fancy installer yet, I'll put a note in the manual so people at
4615 fancy installer yet, I'll put a note in the manual so people at
4610 least make manually a shortcut.
4616 least make manually a shortcut.
4611
4617
4612 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4618 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4613 into a single one, "colors". This now controls both prompt and
4619 into a single one, "colors". This now controls both prompt and
4614 exception color schemes, and can be changed both at startup
4620 exception color schemes, and can be changed both at startup
4615 (either via command-line switches or via ipythonrc files) and at
4621 (either via command-line switches or via ipythonrc files) and at
4616 runtime, with @colors.
4622 runtime, with @colors.
4617 (Magic.magic_run): renamed @prun to @run and removed the old
4623 (Magic.magic_run): renamed @prun to @run and removed the old
4618 @run. The two were too similar to warrant keeping both.
4624 @run. The two were too similar to warrant keeping both.
4619
4625
4620 2002-02-03 Fernando Perez <fperez@colorado.edu>
4626 2002-02-03 Fernando Perez <fperez@colorado.edu>
4621
4627
4622 * IPython/iplib.py (install_first_time): Added comment on how to
4628 * IPython/iplib.py (install_first_time): Added comment on how to
4623 configure the color options for first-time users. Put a <return>
4629 configure the color options for first-time users. Put a <return>
4624 request at the end so that small-terminal users get a chance to
4630 request at the end so that small-terminal users get a chance to
4625 read the startup info.
4631 read the startup info.
4626
4632
4627 2002-01-23 Fernando Perez <fperez@colorado.edu>
4633 2002-01-23 Fernando Perez <fperez@colorado.edu>
4628
4634
4629 * IPython/iplib.py (CachedOutput.update): Changed output memory
4635 * IPython/iplib.py (CachedOutput.update): Changed output memory
4630 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4636 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4631 input history we still use _i. Did this b/c these variable are
4637 input history we still use _i. Did this b/c these variable are
4632 very commonly used in interactive work, so the less we need to
4638 very commonly used in interactive work, so the less we need to
4633 type the better off we are.
4639 type the better off we are.
4634 (Magic.magic_prun): updated @prun to better handle the namespaces
4640 (Magic.magic_prun): updated @prun to better handle the namespaces
4635 the file will run in, including a fix for __name__ not being set
4641 the file will run in, including a fix for __name__ not being set
4636 before.
4642 before.
4637
4643
4638 2002-01-20 Fernando Perez <fperez@colorado.edu>
4644 2002-01-20 Fernando Perez <fperez@colorado.edu>
4639
4645
4640 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4646 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4641 extra garbage for Python 2.2. Need to look more carefully into
4647 extra garbage for Python 2.2. Need to look more carefully into
4642 this later.
4648 this later.
4643
4649
4644 2002-01-19 Fernando Perez <fperez@colorado.edu>
4650 2002-01-19 Fernando Perez <fperez@colorado.edu>
4645
4651
4646 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4652 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4647 display SyntaxError exceptions properly formatted when they occur
4653 display SyntaxError exceptions properly formatted when they occur
4648 (they can be triggered by imported code).
4654 (they can be triggered by imported code).
4649
4655
4650 2002-01-18 Fernando Perez <fperez@colorado.edu>
4656 2002-01-18 Fernando Perez <fperez@colorado.edu>
4651
4657
4652 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4658 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4653 SyntaxError exceptions are reported nicely formatted, instead of
4659 SyntaxError exceptions are reported nicely formatted, instead of
4654 spitting out only offset information as before.
4660 spitting out only offset information as before.
4655 (Magic.magic_prun): Added the @prun function for executing
4661 (Magic.magic_prun): Added the @prun function for executing
4656 programs with command line args inside IPython.
4662 programs with command line args inside IPython.
4657
4663
4658 2002-01-16 Fernando Perez <fperez@colorado.edu>
4664 2002-01-16 Fernando Perez <fperez@colorado.edu>
4659
4665
4660 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4666 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4661 to *not* include the last item given in a range. This brings their
4667 to *not* include the last item given in a range. This brings their
4662 behavior in line with Python's slicing:
4668 behavior in line with Python's slicing:
4663 a[n1:n2] -> a[n1]...a[n2-1]
4669 a[n1:n2] -> a[n1]...a[n2-1]
4664 It may be a bit less convenient, but I prefer to stick to Python's
4670 It may be a bit less convenient, but I prefer to stick to Python's
4665 conventions *everywhere*, so users never have to wonder.
4671 conventions *everywhere*, so users never have to wonder.
4666 (Magic.magic_macro): Added @macro function to ease the creation of
4672 (Magic.magic_macro): Added @macro function to ease the creation of
4667 macros.
4673 macros.
4668
4674
4669 2002-01-05 Fernando Perez <fperez@colorado.edu>
4675 2002-01-05 Fernando Perez <fperez@colorado.edu>
4670
4676
4671 * Released 0.2.4.
4677 * Released 0.2.4.
4672
4678
4673 * IPython/iplib.py (Magic.magic_pdef):
4679 * IPython/iplib.py (Magic.magic_pdef):
4674 (InteractiveShell.safe_execfile): report magic lines and error
4680 (InteractiveShell.safe_execfile): report magic lines and error
4675 lines without line numbers so one can easily copy/paste them for
4681 lines without line numbers so one can easily copy/paste them for
4676 re-execution.
4682 re-execution.
4677
4683
4678 * Updated manual with recent changes.
4684 * Updated manual with recent changes.
4679
4685
4680 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4686 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4681 docstring printing when class? is called. Very handy for knowing
4687 docstring printing when class? is called. Very handy for knowing
4682 how to create class instances (as long as __init__ is well
4688 how to create class instances (as long as __init__ is well
4683 documented, of course :)
4689 documented, of course :)
4684 (Magic.magic_doc): print both class and constructor docstrings.
4690 (Magic.magic_doc): print both class and constructor docstrings.
4685 (Magic.magic_pdef): give constructor info if passed a class and
4691 (Magic.magic_pdef): give constructor info if passed a class and
4686 __call__ info for callable object instances.
4692 __call__ info for callable object instances.
4687
4693
4688 2002-01-04 Fernando Perez <fperez@colorado.edu>
4694 2002-01-04 Fernando Perez <fperez@colorado.edu>
4689
4695
4690 * Made deep_reload() off by default. It doesn't always work
4696 * Made deep_reload() off by default. It doesn't always work
4691 exactly as intended, so it's probably safer to have it off. It's
4697 exactly as intended, so it's probably safer to have it off. It's
4692 still available as dreload() anyway, so nothing is lost.
4698 still available as dreload() anyway, so nothing is lost.
4693
4699
4694 2002-01-02 Fernando Perez <fperez@colorado.edu>
4700 2002-01-02 Fernando Perez <fperez@colorado.edu>
4695
4701
4696 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4702 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4697 so I wanted an updated release).
4703 so I wanted an updated release).
4698
4704
4699 2001-12-27 Fernando Perez <fperez@colorado.edu>
4705 2001-12-27 Fernando Perez <fperez@colorado.edu>
4700
4706
4701 * IPython/iplib.py (InteractiveShell.interact): Added the original
4707 * IPython/iplib.py (InteractiveShell.interact): Added the original
4702 code from 'code.py' for this module in order to change the
4708 code from 'code.py' for this module in order to change the
4703 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4709 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4704 the history cache would break when the user hit Ctrl-C, and
4710 the history cache would break when the user hit Ctrl-C, and
4705 interact() offers no way to add any hooks to it.
4711 interact() offers no way to add any hooks to it.
4706
4712
4707 2001-12-23 Fernando Perez <fperez@colorado.edu>
4713 2001-12-23 Fernando Perez <fperez@colorado.edu>
4708
4714
4709 * setup.py: added check for 'MANIFEST' before trying to remove
4715 * setup.py: added check for 'MANIFEST' before trying to remove
4710 it. Thanks to Sean Reifschneider.
4716 it. Thanks to Sean Reifschneider.
4711
4717
4712 2001-12-22 Fernando Perez <fperez@colorado.edu>
4718 2001-12-22 Fernando Perez <fperez@colorado.edu>
4713
4719
4714 * Released 0.2.2.
4720 * Released 0.2.2.
4715
4721
4716 * Finished (reasonably) writing the manual. Later will add the
4722 * Finished (reasonably) writing the manual. Later will add the
4717 python-standard navigation stylesheets, but for the time being
4723 python-standard navigation stylesheets, but for the time being
4718 it's fairly complete. Distribution will include html and pdf
4724 it's fairly complete. Distribution will include html and pdf
4719 versions.
4725 versions.
4720
4726
4721 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4727 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4722 (MayaVi author).
4728 (MayaVi author).
4723
4729
4724 2001-12-21 Fernando Perez <fperez@colorado.edu>
4730 2001-12-21 Fernando Perez <fperez@colorado.edu>
4725
4731
4726 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4732 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4727 good public release, I think (with the manual and the distutils
4733 good public release, I think (with the manual and the distutils
4728 installer). The manual can use some work, but that can go
4734 installer). The manual can use some work, but that can go
4729 slowly. Otherwise I think it's quite nice for end users. Next
4735 slowly. Otherwise I think it's quite nice for end users. Next
4730 summer, rewrite the guts of it...
4736 summer, rewrite the guts of it...
4731
4737
4732 * Changed format of ipythonrc files to use whitespace as the
4738 * Changed format of ipythonrc files to use whitespace as the
4733 separator instead of an explicit '='. Cleaner.
4739 separator instead of an explicit '='. Cleaner.
4734
4740
4735 2001-12-20 Fernando Perez <fperez@colorado.edu>
4741 2001-12-20 Fernando Perez <fperez@colorado.edu>
4736
4742
4737 * Started a manual in LyX. For now it's just a quick merge of the
4743 * Started a manual in LyX. For now it's just a quick merge of the
4738 various internal docstrings and READMEs. Later it may grow into a
4744 various internal docstrings and READMEs. Later it may grow into a
4739 nice, full-blown manual.
4745 nice, full-blown manual.
4740
4746
4741 * Set up a distutils based installer. Installation should now be
4747 * Set up a distutils based installer. Installation should now be
4742 trivially simple for end-users.
4748 trivially simple for end-users.
4743
4749
4744 2001-12-11 Fernando Perez <fperez@colorado.edu>
4750 2001-12-11 Fernando Perez <fperez@colorado.edu>
4745
4751
4746 * Released 0.2.0. First public release, announced it at
4752 * Released 0.2.0. First public release, announced it at
4747 comp.lang.python. From now on, just bugfixes...
4753 comp.lang.python. From now on, just bugfixes...
4748
4754
4749 * Went through all the files, set copyright/license notices and
4755 * Went through all the files, set copyright/license notices and
4750 cleaned up things. Ready for release.
4756 cleaned up things. Ready for release.
4751
4757
4752 2001-12-10 Fernando Perez <fperez@colorado.edu>
4758 2001-12-10 Fernando Perez <fperez@colorado.edu>
4753
4759
4754 * Changed the first-time installer not to use tarfiles. It's more
4760 * Changed the first-time installer not to use tarfiles. It's more
4755 robust now and less unix-dependent. Also makes it easier for
4761 robust now and less unix-dependent. Also makes it easier for
4756 people to later upgrade versions.
4762 people to later upgrade versions.
4757
4763
4758 * Changed @exit to @abort to reflect the fact that it's pretty
4764 * Changed @exit to @abort to reflect the fact that it's pretty
4759 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4765 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4760 becomes significant only when IPyhton is embedded: in that case,
4766 becomes significant only when IPyhton is embedded: in that case,
4761 C-D closes IPython only, but @abort kills the enclosing program
4767 C-D closes IPython only, but @abort kills the enclosing program
4762 too (unless it had called IPython inside a try catching
4768 too (unless it had called IPython inside a try catching
4763 SystemExit).
4769 SystemExit).
4764
4770
4765 * Created Shell module which exposes the actuall IPython Shell
4771 * Created Shell module which exposes the actuall IPython Shell
4766 classes, currently the normal and the embeddable one. This at
4772 classes, currently the normal and the embeddable one. This at
4767 least offers a stable interface we won't need to change when
4773 least offers a stable interface we won't need to change when
4768 (later) the internals are rewritten. That rewrite will be confined
4774 (later) the internals are rewritten. That rewrite will be confined
4769 to iplib and ipmaker, but the Shell interface should remain as is.
4775 to iplib and ipmaker, but the Shell interface should remain as is.
4770
4776
4771 * Added embed module which offers an embeddable IPShell object,
4777 * Added embed module which offers an embeddable IPShell object,
4772 useful to fire up IPython *inside* a running program. Great for
4778 useful to fire up IPython *inside* a running program. Great for
4773 debugging or dynamical data analysis.
4779 debugging or dynamical data analysis.
4774
4780
4775 2001-12-08 Fernando Perez <fperez@colorado.edu>
4781 2001-12-08 Fernando Perez <fperez@colorado.edu>
4776
4782
4777 * Fixed small bug preventing seeing info from methods of defined
4783 * Fixed small bug preventing seeing info from methods of defined
4778 objects (incorrect namespace in _ofind()).
4784 objects (incorrect namespace in _ofind()).
4779
4785
4780 * Documentation cleanup. Moved the main usage docstrings to a
4786 * Documentation cleanup. Moved the main usage docstrings to a
4781 separate file, usage.py (cleaner to maintain, and hopefully in the
4787 separate file, usage.py (cleaner to maintain, and hopefully in the
4782 future some perlpod-like way of producing interactive, man and
4788 future some perlpod-like way of producing interactive, man and
4783 html docs out of it will be found).
4789 html docs out of it will be found).
4784
4790
4785 * Added @profile to see your profile at any time.
4791 * Added @profile to see your profile at any time.
4786
4792
4787 * Added @p as an alias for 'print'. It's especially convenient if
4793 * Added @p as an alias for 'print'. It's especially convenient if
4788 using automagic ('p x' prints x).
4794 using automagic ('p x' prints x).
4789
4795
4790 * Small cleanups and fixes after a pychecker run.
4796 * Small cleanups and fixes after a pychecker run.
4791
4797
4792 * Changed the @cd command to handle @cd - and @cd -<n> for
4798 * Changed the @cd command to handle @cd - and @cd -<n> for
4793 visiting any directory in _dh.
4799 visiting any directory in _dh.
4794
4800
4795 * Introduced _dh, a history of visited directories. @dhist prints
4801 * Introduced _dh, a history of visited directories. @dhist prints
4796 it out with numbers.
4802 it out with numbers.
4797
4803
4798 2001-12-07 Fernando Perez <fperez@colorado.edu>
4804 2001-12-07 Fernando Perez <fperez@colorado.edu>
4799
4805
4800 * Released 0.1.22
4806 * Released 0.1.22
4801
4807
4802 * Made initialization a bit more robust against invalid color
4808 * Made initialization a bit more robust against invalid color
4803 options in user input (exit, not traceback-crash).
4809 options in user input (exit, not traceback-crash).
4804
4810
4805 * Changed the bug crash reporter to write the report only in the
4811 * Changed the bug crash reporter to write the report only in the
4806 user's .ipython directory. That way IPython won't litter people's
4812 user's .ipython directory. That way IPython won't litter people's
4807 hard disks with crash files all over the place. Also print on
4813 hard disks with crash files all over the place. Also print on
4808 screen the necessary mail command.
4814 screen the necessary mail command.
4809
4815
4810 * With the new ultraTB, implemented LightBG color scheme for light
4816 * With the new ultraTB, implemented LightBG color scheme for light
4811 background terminals. A lot of people like white backgrounds, so I
4817 background terminals. A lot of people like white backgrounds, so I
4812 guess we should at least give them something readable.
4818 guess we should at least give them something readable.
4813
4819
4814 2001-12-06 Fernando Perez <fperez@colorado.edu>
4820 2001-12-06 Fernando Perez <fperez@colorado.edu>
4815
4821
4816 * Modified the structure of ultraTB. Now there's a proper class
4822 * Modified the structure of ultraTB. Now there's a proper class
4817 for tables of color schemes which allow adding schemes easily and
4823 for tables of color schemes which allow adding schemes easily and
4818 switching the active scheme without creating a new instance every
4824 switching the active scheme without creating a new instance every
4819 time (which was ridiculous). The syntax for creating new schemes
4825 time (which was ridiculous). The syntax for creating new schemes
4820 is also cleaner. I think ultraTB is finally done, with a clean
4826 is also cleaner. I think ultraTB is finally done, with a clean
4821 class structure. Names are also much cleaner (now there's proper
4827 class structure. Names are also much cleaner (now there's proper
4822 color tables, no need for every variable to also have 'color' in
4828 color tables, no need for every variable to also have 'color' in
4823 its name).
4829 its name).
4824
4830
4825 * Broke down genutils into separate files. Now genutils only
4831 * Broke down genutils into separate files. Now genutils only
4826 contains utility functions, and classes have been moved to their
4832 contains utility functions, and classes have been moved to their
4827 own files (they had enough independent functionality to warrant
4833 own files (they had enough independent functionality to warrant
4828 it): ConfigLoader, OutputTrap, Struct.
4834 it): ConfigLoader, OutputTrap, Struct.
4829
4835
4830 2001-12-05 Fernando Perez <fperez@colorado.edu>
4836 2001-12-05 Fernando Perez <fperez@colorado.edu>
4831
4837
4832 * IPython turns 21! Released version 0.1.21, as a candidate for
4838 * IPython turns 21! Released version 0.1.21, as a candidate for
4833 public consumption. If all goes well, release in a few days.
4839 public consumption. If all goes well, release in a few days.
4834
4840
4835 * Fixed path bug (files in Extensions/ directory wouldn't be found
4841 * Fixed path bug (files in Extensions/ directory wouldn't be found
4836 unless IPython/ was explicitly in sys.path).
4842 unless IPython/ was explicitly in sys.path).
4837
4843
4838 * Extended the FlexCompleter class as MagicCompleter to allow
4844 * Extended the FlexCompleter class as MagicCompleter to allow
4839 completion of @-starting lines.
4845 completion of @-starting lines.
4840
4846
4841 * Created __release__.py file as a central repository for release
4847 * Created __release__.py file as a central repository for release
4842 info that other files can read from.
4848 info that other files can read from.
4843
4849
4844 * Fixed small bug in logging: when logging was turned on in
4850 * Fixed small bug in logging: when logging was turned on in
4845 mid-session, old lines with special meanings (!@?) were being
4851 mid-session, old lines with special meanings (!@?) were being
4846 logged without the prepended comment, which is necessary since
4852 logged without the prepended comment, which is necessary since
4847 they are not truly valid python syntax. This should make session
4853 they are not truly valid python syntax. This should make session
4848 restores produce less errors.
4854 restores produce less errors.
4849
4855
4850 * The namespace cleanup forced me to make a FlexCompleter class
4856 * The namespace cleanup forced me to make a FlexCompleter class
4851 which is nothing but a ripoff of rlcompleter, but with selectable
4857 which is nothing but a ripoff of rlcompleter, but with selectable
4852 namespace (rlcompleter only works in __main__.__dict__). I'll try
4858 namespace (rlcompleter only works in __main__.__dict__). I'll try
4853 to submit a note to the authors to see if this change can be
4859 to submit a note to the authors to see if this change can be
4854 incorporated in future rlcompleter releases (Dec.6: done)
4860 incorporated in future rlcompleter releases (Dec.6: done)
4855
4861
4856 * More fixes to namespace handling. It was a mess! Now all
4862 * More fixes to namespace handling. It was a mess! Now all
4857 explicit references to __main__.__dict__ are gone (except when
4863 explicit references to __main__.__dict__ are gone (except when
4858 really needed) and everything is handled through the namespace
4864 really needed) and everything is handled through the namespace
4859 dicts in the IPython instance. We seem to be getting somewhere
4865 dicts in the IPython instance. We seem to be getting somewhere
4860 with this, finally...
4866 with this, finally...
4861
4867
4862 * Small documentation updates.
4868 * Small documentation updates.
4863
4869
4864 * Created the Extensions directory under IPython (with an
4870 * Created the Extensions directory under IPython (with an
4865 __init__.py). Put the PhysicalQ stuff there. This directory should
4871 __init__.py). Put the PhysicalQ stuff there. This directory should
4866 be used for all special-purpose extensions.
4872 be used for all special-purpose extensions.
4867
4873
4868 * File renaming:
4874 * File renaming:
4869 ipythonlib --> ipmaker
4875 ipythonlib --> ipmaker
4870 ipplib --> iplib
4876 ipplib --> iplib
4871 This makes a bit more sense in terms of what these files actually do.
4877 This makes a bit more sense in terms of what these files actually do.
4872
4878
4873 * Moved all the classes and functions in ipythonlib to ipplib, so
4879 * Moved all the classes and functions in ipythonlib to ipplib, so
4874 now ipythonlib only has make_IPython(). This will ease up its
4880 now ipythonlib only has make_IPython(). This will ease up its
4875 splitting in smaller functional chunks later.
4881 splitting in smaller functional chunks later.
4876
4882
4877 * Cleaned up (done, I think) output of @whos. Better column
4883 * Cleaned up (done, I think) output of @whos. Better column
4878 formatting, and now shows str(var) for as much as it can, which is
4884 formatting, and now shows str(var) for as much as it can, which is
4879 typically what one gets with a 'print var'.
4885 typically what one gets with a 'print var'.
4880
4886
4881 2001-12-04 Fernando Perez <fperez@colorado.edu>
4887 2001-12-04 Fernando Perez <fperez@colorado.edu>
4882
4888
4883 * Fixed namespace problems. Now builtin/IPyhton/user names get
4889 * Fixed namespace problems. Now builtin/IPyhton/user names get
4884 properly reported in their namespace. Internal namespace handling
4890 properly reported in their namespace. Internal namespace handling
4885 is finally getting decent (not perfect yet, but much better than
4891 is finally getting decent (not perfect yet, but much better than
4886 the ad-hoc mess we had).
4892 the ad-hoc mess we had).
4887
4893
4888 * Removed -exit option. If people just want to run a python
4894 * Removed -exit option. If people just want to run a python
4889 script, that's what the normal interpreter is for. Less
4895 script, that's what the normal interpreter is for. Less
4890 unnecessary options, less chances for bugs.
4896 unnecessary options, less chances for bugs.
4891
4897
4892 * Added a crash handler which generates a complete post-mortem if
4898 * Added a crash handler which generates a complete post-mortem if
4893 IPython crashes. This will help a lot in tracking bugs down the
4899 IPython crashes. This will help a lot in tracking bugs down the
4894 road.
4900 road.
4895
4901
4896 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4902 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4897 which were boud to functions being reassigned would bypass the
4903 which were boud to functions being reassigned would bypass the
4898 logger, breaking the sync of _il with the prompt counter. This
4904 logger, breaking the sync of _il with the prompt counter. This
4899 would then crash IPython later when a new line was logged.
4905 would then crash IPython later when a new line was logged.
4900
4906
4901 2001-12-02 Fernando Perez <fperez@colorado.edu>
4907 2001-12-02 Fernando Perez <fperez@colorado.edu>
4902
4908
4903 * Made IPython a package. This means people don't have to clutter
4909 * Made IPython a package. This means people don't have to clutter
4904 their sys.path with yet another directory. Changed the INSTALL
4910 their sys.path with yet another directory. Changed the INSTALL
4905 file accordingly.
4911 file accordingly.
4906
4912
4907 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4913 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4908 sorts its output (so @who shows it sorted) and @whos formats the
4914 sorts its output (so @who shows it sorted) and @whos formats the
4909 table according to the width of the first column. Nicer, easier to
4915 table according to the width of the first column. Nicer, easier to
4910 read. Todo: write a generic table_format() which takes a list of
4916 read. Todo: write a generic table_format() which takes a list of
4911 lists and prints it nicely formatted, with optional row/column
4917 lists and prints it nicely formatted, with optional row/column
4912 separators and proper padding and justification.
4918 separators and proper padding and justification.
4913
4919
4914 * Released 0.1.20
4920 * Released 0.1.20
4915
4921
4916 * Fixed bug in @log which would reverse the inputcache list (a
4922 * Fixed bug in @log which would reverse the inputcache list (a
4917 copy operation was missing).
4923 copy operation was missing).
4918
4924
4919 * Code cleanup. @config was changed to use page(). Better, since
4925 * Code cleanup. @config was changed to use page(). Better, since
4920 its output is always quite long.
4926 its output is always quite long.
4921
4927
4922 * Itpl is back as a dependency. I was having too many problems
4928 * Itpl is back as a dependency. I was having too many problems
4923 getting the parametric aliases to work reliably, and it's just
4929 getting the parametric aliases to work reliably, and it's just
4924 easier to code weird string operations with it than playing %()s
4930 easier to code weird string operations with it than playing %()s
4925 games. It's only ~6k, so I don't think it's too big a deal.
4931 games. It's only ~6k, so I don't think it's too big a deal.
4926
4932
4927 * Found (and fixed) a very nasty bug with history. !lines weren't
4933 * Found (and fixed) a very nasty bug with history. !lines weren't
4928 getting cached, and the out of sync caches would crash
4934 getting cached, and the out of sync caches would crash
4929 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4935 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4930 division of labor a bit better. Bug fixed, cleaner structure.
4936 division of labor a bit better. Bug fixed, cleaner structure.
4931
4937
4932 2001-12-01 Fernando Perez <fperez@colorado.edu>
4938 2001-12-01 Fernando Perez <fperez@colorado.edu>
4933
4939
4934 * Released 0.1.19
4940 * Released 0.1.19
4935
4941
4936 * Added option -n to @hist to prevent line number printing. Much
4942 * Added option -n to @hist to prevent line number printing. Much
4937 easier to copy/paste code this way.
4943 easier to copy/paste code this way.
4938
4944
4939 * Created global _il to hold the input list. Allows easy
4945 * Created global _il to hold the input list. Allows easy
4940 re-execution of blocks of code by slicing it (inspired by Janko's
4946 re-execution of blocks of code by slicing it (inspired by Janko's
4941 comment on 'macros').
4947 comment on 'macros').
4942
4948
4943 * Small fixes and doc updates.
4949 * Small fixes and doc updates.
4944
4950
4945 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4951 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4946 much too fragile with automagic. Handles properly multi-line
4952 much too fragile with automagic. Handles properly multi-line
4947 statements and takes parameters.
4953 statements and takes parameters.
4948
4954
4949 2001-11-30 Fernando Perez <fperez@colorado.edu>
4955 2001-11-30 Fernando Perez <fperez@colorado.edu>
4950
4956
4951 * Version 0.1.18 released.
4957 * Version 0.1.18 released.
4952
4958
4953 * Fixed nasty namespace bug in initial module imports.
4959 * Fixed nasty namespace bug in initial module imports.
4954
4960
4955 * Added copyright/license notes to all code files (except
4961 * Added copyright/license notes to all code files (except
4956 DPyGetOpt). For the time being, LGPL. That could change.
4962 DPyGetOpt). For the time being, LGPL. That could change.
4957
4963
4958 * Rewrote a much nicer README, updated INSTALL, cleaned up
4964 * Rewrote a much nicer README, updated INSTALL, cleaned up
4959 ipythonrc-* samples.
4965 ipythonrc-* samples.
4960
4966
4961 * Overall code/documentation cleanup. Basically ready for
4967 * Overall code/documentation cleanup. Basically ready for
4962 release. Only remaining thing: licence decision (LGPL?).
4968 release. Only remaining thing: licence decision (LGPL?).
4963
4969
4964 * Converted load_config to a class, ConfigLoader. Now recursion
4970 * Converted load_config to a class, ConfigLoader. Now recursion
4965 control is better organized. Doesn't include the same file twice.
4971 control is better organized. Doesn't include the same file twice.
4966
4972
4967 2001-11-29 Fernando Perez <fperez@colorado.edu>
4973 2001-11-29 Fernando Perez <fperez@colorado.edu>
4968
4974
4969 * Got input history working. Changed output history variables from
4975 * Got input history working. Changed output history variables from
4970 _p to _o so that _i is for input and _o for output. Just cleaner
4976 _p to _o so that _i is for input and _o for output. Just cleaner
4971 convention.
4977 convention.
4972
4978
4973 * Implemented parametric aliases. This pretty much allows the
4979 * Implemented parametric aliases. This pretty much allows the
4974 alias system to offer full-blown shell convenience, I think.
4980 alias system to offer full-blown shell convenience, I think.
4975
4981
4976 * Version 0.1.17 released, 0.1.18 opened.
4982 * Version 0.1.17 released, 0.1.18 opened.
4977
4983
4978 * dot_ipython/ipythonrc (alias): added documentation.
4984 * dot_ipython/ipythonrc (alias): added documentation.
4979 (xcolor): Fixed small bug (xcolors -> xcolor)
4985 (xcolor): Fixed small bug (xcolors -> xcolor)
4980
4986
4981 * Changed the alias system. Now alias is a magic command to define
4987 * Changed the alias system. Now alias is a magic command to define
4982 aliases just like the shell. Rationale: the builtin magics should
4988 aliases just like the shell. Rationale: the builtin magics should
4983 be there for things deeply connected to IPython's
4989 be there for things deeply connected to IPython's
4984 architecture. And this is a much lighter system for what I think
4990 architecture. And this is a much lighter system for what I think
4985 is the really important feature: allowing users to define quickly
4991 is the really important feature: allowing users to define quickly
4986 magics that will do shell things for them, so they can customize
4992 magics that will do shell things for them, so they can customize
4987 IPython easily to match their work habits. If someone is really
4993 IPython easily to match their work habits. If someone is really
4988 desperate to have another name for a builtin alias, they can
4994 desperate to have another name for a builtin alias, they can
4989 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4995 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4990 works.
4996 works.
4991
4997
4992 2001-11-28 Fernando Perez <fperez@colorado.edu>
4998 2001-11-28 Fernando Perez <fperez@colorado.edu>
4993
4999
4994 * Changed @file so that it opens the source file at the proper
5000 * Changed @file so that it opens the source file at the proper
4995 line. Since it uses less, if your EDITOR environment is
5001 line. Since it uses less, if your EDITOR environment is
4996 configured, typing v will immediately open your editor of choice
5002 configured, typing v will immediately open your editor of choice
4997 right at the line where the object is defined. Not as quick as
5003 right at the line where the object is defined. Not as quick as
4998 having a direct @edit command, but for all intents and purposes it
5004 having a direct @edit command, but for all intents and purposes it
4999 works. And I don't have to worry about writing @edit to deal with
5005 works. And I don't have to worry about writing @edit to deal with
5000 all the editors, less does that.
5006 all the editors, less does that.
5001
5007
5002 * Version 0.1.16 released, 0.1.17 opened.
5008 * Version 0.1.16 released, 0.1.17 opened.
5003
5009
5004 * Fixed some nasty bugs in the page/page_dumb combo that could
5010 * Fixed some nasty bugs in the page/page_dumb combo that could
5005 crash IPython.
5011 crash IPython.
5006
5012
5007 2001-11-27 Fernando Perez <fperez@colorado.edu>
5013 2001-11-27 Fernando Perez <fperez@colorado.edu>
5008
5014
5009 * Version 0.1.15 released, 0.1.16 opened.
5015 * Version 0.1.15 released, 0.1.16 opened.
5010
5016
5011 * Finally got ? and ?? to work for undefined things: now it's
5017 * Finally got ? and ?? to work for undefined things: now it's
5012 possible to type {}.get? and get information about the get method
5018 possible to type {}.get? and get information about the get method
5013 of dicts, or os.path? even if only os is defined (so technically
5019 of dicts, or os.path? even if only os is defined (so technically
5014 os.path isn't). Works at any level. For example, after import os,
5020 os.path isn't). Works at any level. For example, after import os,
5015 os?, os.path?, os.path.abspath? all work. This is great, took some
5021 os?, os.path?, os.path.abspath? all work. This is great, took some
5016 work in _ofind.
5022 work in _ofind.
5017
5023
5018 * Fixed more bugs with logging. The sanest way to do it was to add
5024 * Fixed more bugs with logging. The sanest way to do it was to add
5019 to @log a 'mode' parameter. Killed two in one shot (this mode
5025 to @log a 'mode' parameter. Killed two in one shot (this mode
5020 option was a request of Janko's). I think it's finally clean
5026 option was a request of Janko's). I think it's finally clean
5021 (famous last words).
5027 (famous last words).
5022
5028
5023 * Added a page_dumb() pager which does a decent job of paging on
5029 * Added a page_dumb() pager which does a decent job of paging on
5024 screen, if better things (like less) aren't available. One less
5030 screen, if better things (like less) aren't available. One less
5025 unix dependency (someday maybe somebody will port this to
5031 unix dependency (someday maybe somebody will port this to
5026 windows).
5032 windows).
5027
5033
5028 * Fixed problem in magic_log: would lock of logging out if log
5034 * Fixed problem in magic_log: would lock of logging out if log
5029 creation failed (because it would still think it had succeeded).
5035 creation failed (because it would still think it had succeeded).
5030
5036
5031 * Improved the page() function using curses to auto-detect screen
5037 * Improved the page() function using curses to auto-detect screen
5032 size. Now it can make a much better decision on whether to print
5038 size. Now it can make a much better decision on whether to print
5033 or page a string. Option screen_length was modified: a value 0
5039 or page a string. Option screen_length was modified: a value 0
5034 means auto-detect, and that's the default now.
5040 means auto-detect, and that's the default now.
5035
5041
5036 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5042 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5037 go out. I'll test it for a few days, then talk to Janko about
5043 go out. I'll test it for a few days, then talk to Janko about
5038 licences and announce it.
5044 licences and announce it.
5039
5045
5040 * Fixed the length of the auto-generated ---> prompt which appears
5046 * Fixed the length of the auto-generated ---> prompt which appears
5041 for auto-parens and auto-quotes. Getting this right isn't trivial,
5047 for auto-parens and auto-quotes. Getting this right isn't trivial,
5042 with all the color escapes, different prompt types and optional
5048 with all the color escapes, different prompt types and optional
5043 separators. But it seems to be working in all the combinations.
5049 separators. But it seems to be working in all the combinations.
5044
5050
5045 2001-11-26 Fernando Perez <fperez@colorado.edu>
5051 2001-11-26 Fernando Perez <fperez@colorado.edu>
5046
5052
5047 * Wrote a regexp filter to get option types from the option names
5053 * Wrote a regexp filter to get option types from the option names
5048 string. This eliminates the need to manually keep two duplicate
5054 string. This eliminates the need to manually keep two duplicate
5049 lists.
5055 lists.
5050
5056
5051 * Removed the unneeded check_option_names. Now options are handled
5057 * Removed the unneeded check_option_names. Now options are handled
5052 in a much saner manner and it's easy to visually check that things
5058 in a much saner manner and it's easy to visually check that things
5053 are ok.
5059 are ok.
5054
5060
5055 * Updated version numbers on all files I modified to carry a
5061 * Updated version numbers on all files I modified to carry a
5056 notice so Janko and Nathan have clear version markers.
5062 notice so Janko and Nathan have clear version markers.
5057
5063
5058 * Updated docstring for ultraTB with my changes. I should send
5064 * Updated docstring for ultraTB with my changes. I should send
5059 this to Nathan.
5065 this to Nathan.
5060
5066
5061 * Lots of small fixes. Ran everything through pychecker again.
5067 * Lots of small fixes. Ran everything through pychecker again.
5062
5068
5063 * Made loading of deep_reload an cmd line option. If it's not too
5069 * Made loading of deep_reload an cmd line option. If it's not too
5064 kosher, now people can just disable it. With -nodeep_reload it's
5070 kosher, now people can just disable it. With -nodeep_reload it's
5065 still available as dreload(), it just won't overwrite reload().
5071 still available as dreload(), it just won't overwrite reload().
5066
5072
5067 * Moved many options to the no| form (-opt and -noopt
5073 * Moved many options to the no| form (-opt and -noopt
5068 accepted). Cleaner.
5074 accepted). Cleaner.
5069
5075
5070 * Changed magic_log so that if called with no parameters, it uses
5076 * Changed magic_log so that if called with no parameters, it uses
5071 'rotate' mode. That way auto-generated logs aren't automatically
5077 'rotate' mode. That way auto-generated logs aren't automatically
5072 over-written. For normal logs, now a backup is made if it exists
5078 over-written. For normal logs, now a backup is made if it exists
5073 (only 1 level of backups). A new 'backup' mode was added to the
5079 (only 1 level of backups). A new 'backup' mode was added to the
5074 Logger class to support this. This was a request by Janko.
5080 Logger class to support this. This was a request by Janko.
5075
5081
5076 * Added @logoff/@logon to stop/restart an active log.
5082 * Added @logoff/@logon to stop/restart an active log.
5077
5083
5078 * Fixed a lot of bugs in log saving/replay. It was pretty
5084 * Fixed a lot of bugs in log saving/replay. It was pretty
5079 broken. Now special lines (!@,/) appear properly in the command
5085 broken. Now special lines (!@,/) appear properly in the command
5080 history after a log replay.
5086 history after a log replay.
5081
5087
5082 * Tried and failed to implement full session saving via pickle. My
5088 * Tried and failed to implement full session saving via pickle. My
5083 idea was to pickle __main__.__dict__, but modules can't be
5089 idea was to pickle __main__.__dict__, but modules can't be
5084 pickled. This would be a better alternative to replaying logs, but
5090 pickled. This would be a better alternative to replaying logs, but
5085 seems quite tricky to get to work. Changed -session to be called
5091 seems quite tricky to get to work. Changed -session to be called
5086 -logplay, which more accurately reflects what it does. And if we
5092 -logplay, which more accurately reflects what it does. And if we
5087 ever get real session saving working, -session is now available.
5093 ever get real session saving working, -session is now available.
5088
5094
5089 * Implemented color schemes for prompts also. As for tracebacks,
5095 * Implemented color schemes for prompts also. As for tracebacks,
5090 currently only NoColor and Linux are supported. But now the
5096 currently only NoColor and Linux are supported. But now the
5091 infrastructure is in place, based on a generic ColorScheme
5097 infrastructure is in place, based on a generic ColorScheme
5092 class. So writing and activating new schemes both for the prompts
5098 class. So writing and activating new schemes both for the prompts
5093 and the tracebacks should be straightforward.
5099 and the tracebacks should be straightforward.
5094
5100
5095 * Version 0.1.13 released, 0.1.14 opened.
5101 * Version 0.1.13 released, 0.1.14 opened.
5096
5102
5097 * Changed handling of options for output cache. Now counter is
5103 * Changed handling of options for output cache. Now counter is
5098 hardwired starting at 1 and one specifies the maximum number of
5104 hardwired starting at 1 and one specifies the maximum number of
5099 entries *in the outcache* (not the max prompt counter). This is
5105 entries *in the outcache* (not the max prompt counter). This is
5100 much better, since many statements won't increase the cache
5106 much better, since many statements won't increase the cache
5101 count. It also eliminated some confusing options, now there's only
5107 count. It also eliminated some confusing options, now there's only
5102 one: cache_size.
5108 one: cache_size.
5103
5109
5104 * Added 'alias' magic function and magic_alias option in the
5110 * Added 'alias' magic function and magic_alias option in the
5105 ipythonrc file. Now the user can easily define whatever names he
5111 ipythonrc file. Now the user can easily define whatever names he
5106 wants for the magic functions without having to play weird
5112 wants for the magic functions without having to play weird
5107 namespace games. This gives IPython a real shell-like feel.
5113 namespace games. This gives IPython a real shell-like feel.
5108
5114
5109 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5115 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5110 @ or not).
5116 @ or not).
5111
5117
5112 This was one of the last remaining 'visible' bugs (that I know
5118 This was one of the last remaining 'visible' bugs (that I know
5113 of). I think if I can clean up the session loading so it works
5119 of). I think if I can clean up the session loading so it works
5114 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5120 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5115 about licensing).
5121 about licensing).
5116
5122
5117 2001-11-25 Fernando Perez <fperez@colorado.edu>
5123 2001-11-25 Fernando Perez <fperez@colorado.edu>
5118
5124
5119 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5125 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5120 there's a cleaner distinction between what ? and ?? show.
5126 there's a cleaner distinction between what ? and ?? show.
5121
5127
5122 * Added screen_length option. Now the user can define his own
5128 * Added screen_length option. Now the user can define his own
5123 screen size for page() operations.
5129 screen size for page() operations.
5124
5130
5125 * Implemented magic shell-like functions with automatic code
5131 * Implemented magic shell-like functions with automatic code
5126 generation. Now adding another function is just a matter of adding
5132 generation. Now adding another function is just a matter of adding
5127 an entry to a dict, and the function is dynamically generated at
5133 an entry to a dict, and the function is dynamically generated at
5128 run-time. Python has some really cool features!
5134 run-time. Python has some really cool features!
5129
5135
5130 * Renamed many options to cleanup conventions a little. Now all
5136 * Renamed many options to cleanup conventions a little. Now all
5131 are lowercase, and only underscores where needed. Also in the code
5137 are lowercase, and only underscores where needed. Also in the code
5132 option name tables are clearer.
5138 option name tables are clearer.
5133
5139
5134 * Changed prompts a little. Now input is 'In [n]:' instead of
5140 * Changed prompts a little. Now input is 'In [n]:' instead of
5135 'In[n]:='. This allows it the numbers to be aligned with the
5141 'In[n]:='. This allows it the numbers to be aligned with the
5136 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5142 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5137 Python (it was a Mathematica thing). The '...' continuation prompt
5143 Python (it was a Mathematica thing). The '...' continuation prompt
5138 was also changed a little to align better.
5144 was also changed a little to align better.
5139
5145
5140 * Fixed bug when flushing output cache. Not all _p<n> variables
5146 * Fixed bug when flushing output cache. Not all _p<n> variables
5141 exist, so their deletion needs to be wrapped in a try:
5147 exist, so their deletion needs to be wrapped in a try:
5142
5148
5143 * Figured out how to properly use inspect.formatargspec() (it
5149 * Figured out how to properly use inspect.formatargspec() (it
5144 requires the args preceded by *). So I removed all the code from
5150 requires the args preceded by *). So I removed all the code from
5145 _get_pdef in Magic, which was just replicating that.
5151 _get_pdef in Magic, which was just replicating that.
5146
5152
5147 * Added test to prefilter to allow redefining magic function names
5153 * Added test to prefilter to allow redefining magic function names
5148 as variables. This is ok, since the @ form is always available,
5154 as variables. This is ok, since the @ form is always available,
5149 but whe should allow the user to define a variable called 'ls' if
5155 but whe should allow the user to define a variable called 'ls' if
5150 he needs it.
5156 he needs it.
5151
5157
5152 * Moved the ToDo information from README into a separate ToDo.
5158 * Moved the ToDo information from README into a separate ToDo.
5153
5159
5154 * General code cleanup and small bugfixes. I think it's close to a
5160 * General code cleanup and small bugfixes. I think it's close to a
5155 state where it can be released, obviously with a big 'beta'
5161 state where it can be released, obviously with a big 'beta'
5156 warning on it.
5162 warning on it.
5157
5163
5158 * Got the magic function split to work. Now all magics are defined
5164 * Got the magic function split to work. Now all magics are defined
5159 in a separate class. It just organizes things a bit, and now
5165 in a separate class. It just organizes things a bit, and now
5160 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5166 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5161 was too long).
5167 was too long).
5162
5168
5163 * Changed @clear to @reset to avoid potential confusions with
5169 * Changed @clear to @reset to avoid potential confusions with
5164 the shell command clear. Also renamed @cl to @clear, which does
5170 the shell command clear. Also renamed @cl to @clear, which does
5165 exactly what people expect it to from their shell experience.
5171 exactly what people expect it to from their shell experience.
5166
5172
5167 Added a check to the @reset command (since it's so
5173 Added a check to the @reset command (since it's so
5168 destructive, it's probably a good idea to ask for confirmation).
5174 destructive, it's probably a good idea to ask for confirmation).
5169 But now reset only works for full namespace resetting. Since the
5175 But now reset only works for full namespace resetting. Since the
5170 del keyword is already there for deleting a few specific
5176 del keyword is already there for deleting a few specific
5171 variables, I don't see the point of having a redundant magic
5177 variables, I don't see the point of having a redundant magic
5172 function for the same task.
5178 function for the same task.
5173
5179
5174 2001-11-24 Fernando Perez <fperez@colorado.edu>
5180 2001-11-24 Fernando Perez <fperez@colorado.edu>
5175
5181
5176 * Updated the builtin docs (esp. the ? ones).
5182 * Updated the builtin docs (esp. the ? ones).
5177
5183
5178 * Ran all the code through pychecker. Not terribly impressed with
5184 * Ran all the code through pychecker. Not terribly impressed with
5179 it: lots of spurious warnings and didn't really find anything of
5185 it: lots of spurious warnings and didn't really find anything of
5180 substance (just a few modules being imported and not used).
5186 substance (just a few modules being imported and not used).
5181
5187
5182 * Implemented the new ultraTB functionality into IPython. New
5188 * Implemented the new ultraTB functionality into IPython. New
5183 option: xcolors. This chooses color scheme. xmode now only selects
5189 option: xcolors. This chooses color scheme. xmode now only selects
5184 between Plain and Verbose. Better orthogonality.
5190 between Plain and Verbose. Better orthogonality.
5185
5191
5186 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5192 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5187 mode and color scheme for the exception handlers. Now it's
5193 mode and color scheme for the exception handlers. Now it's
5188 possible to have the verbose traceback with no coloring.
5194 possible to have the verbose traceback with no coloring.
5189
5195
5190 2001-11-23 Fernando Perez <fperez@colorado.edu>
5196 2001-11-23 Fernando Perez <fperez@colorado.edu>
5191
5197
5192 * Version 0.1.12 released, 0.1.13 opened.
5198 * Version 0.1.12 released, 0.1.13 opened.
5193
5199
5194 * Removed option to set auto-quote and auto-paren escapes by
5200 * Removed option to set auto-quote and auto-paren escapes by
5195 user. The chances of breaking valid syntax are just too high. If
5201 user. The chances of breaking valid syntax are just too high. If
5196 someone *really* wants, they can always dig into the code.
5202 someone *really* wants, they can always dig into the code.
5197
5203
5198 * Made prompt separators configurable.
5204 * Made prompt separators configurable.
5199
5205
5200 2001-11-22 Fernando Perez <fperez@colorado.edu>
5206 2001-11-22 Fernando Perez <fperez@colorado.edu>
5201
5207
5202 * Small bugfixes in many places.
5208 * Small bugfixes in many places.
5203
5209
5204 * Removed the MyCompleter class from ipplib. It seemed redundant
5210 * Removed the MyCompleter class from ipplib. It seemed redundant
5205 with the C-p,C-n history search functionality. Less code to
5211 with the C-p,C-n history search functionality. Less code to
5206 maintain.
5212 maintain.
5207
5213
5208 * Moved all the original ipython.py code into ipythonlib.py. Right
5214 * Moved all the original ipython.py code into ipythonlib.py. Right
5209 now it's just one big dump into a function called make_IPython, so
5215 now it's just one big dump into a function called make_IPython, so
5210 no real modularity has been gained. But at least it makes the
5216 no real modularity has been gained. But at least it makes the
5211 wrapper script tiny, and since ipythonlib is a module, it gets
5217 wrapper script tiny, and since ipythonlib is a module, it gets
5212 compiled and startup is much faster.
5218 compiled and startup is much faster.
5213
5219
5214 This is a reasobably 'deep' change, so we should test it for a
5220 This is a reasobably 'deep' change, so we should test it for a
5215 while without messing too much more with the code.
5221 while without messing too much more with the code.
5216
5222
5217 2001-11-21 Fernando Perez <fperez@colorado.edu>
5223 2001-11-21 Fernando Perez <fperez@colorado.edu>
5218
5224
5219 * Version 0.1.11 released, 0.1.12 opened for further work.
5225 * Version 0.1.11 released, 0.1.12 opened for further work.
5220
5226
5221 * Removed dependency on Itpl. It was only needed in one place. It
5227 * Removed dependency on Itpl. It was only needed in one place. It
5222 would be nice if this became part of python, though. It makes life
5228 would be nice if this became part of python, though. It makes life
5223 *a lot* easier in some cases.
5229 *a lot* easier in some cases.
5224
5230
5225 * Simplified the prefilter code a bit. Now all handlers are
5231 * Simplified the prefilter code a bit. Now all handlers are
5226 expected to explicitly return a value (at least a blank string).
5232 expected to explicitly return a value (at least a blank string).
5227
5233
5228 * Heavy edits in ipplib. Removed the help system altogether. Now
5234 * Heavy edits in ipplib. Removed the help system altogether. Now
5229 obj?/?? is used for inspecting objects, a magic @doc prints
5235 obj?/?? is used for inspecting objects, a magic @doc prints
5230 docstrings, and full-blown Python help is accessed via the 'help'
5236 docstrings, and full-blown Python help is accessed via the 'help'
5231 keyword. This cleans up a lot of code (less to maintain) and does
5237 keyword. This cleans up a lot of code (less to maintain) and does
5232 the job. Since 'help' is now a standard Python component, might as
5238 the job. Since 'help' is now a standard Python component, might as
5233 well use it and remove duplicate functionality.
5239 well use it and remove duplicate functionality.
5234
5240
5235 Also removed the option to use ipplib as a standalone program. By
5241 Also removed the option to use ipplib as a standalone program. By
5236 now it's too dependent on other parts of IPython to function alone.
5242 now it's too dependent on other parts of IPython to function alone.
5237
5243
5238 * Fixed bug in genutils.pager. It would crash if the pager was
5244 * Fixed bug in genutils.pager. It would crash if the pager was
5239 exited immediately after opening (broken pipe).
5245 exited immediately after opening (broken pipe).
5240
5246
5241 * Trimmed down the VerboseTB reporting a little. The header is
5247 * Trimmed down the VerboseTB reporting a little. The header is
5242 much shorter now and the repeated exception arguments at the end
5248 much shorter now and the repeated exception arguments at the end
5243 have been removed. For interactive use the old header seemed a bit
5249 have been removed. For interactive use the old header seemed a bit
5244 excessive.
5250 excessive.
5245
5251
5246 * Fixed small bug in output of @whos for variables with multi-word
5252 * Fixed small bug in output of @whos for variables with multi-word
5247 types (only first word was displayed).
5253 types (only first word was displayed).
5248
5254
5249 2001-11-17 Fernando Perez <fperez@colorado.edu>
5255 2001-11-17 Fernando Perez <fperez@colorado.edu>
5250
5256
5251 * Version 0.1.10 released, 0.1.11 opened for further work.
5257 * Version 0.1.10 released, 0.1.11 opened for further work.
5252
5258
5253 * Modified dirs and friends. dirs now *returns* the stack (not
5259 * Modified dirs and friends. dirs now *returns* the stack (not
5254 prints), so one can manipulate it as a variable. Convenient to
5260 prints), so one can manipulate it as a variable. Convenient to
5255 travel along many directories.
5261 travel along many directories.
5256
5262
5257 * Fixed bug in magic_pdef: would only work with functions with
5263 * Fixed bug in magic_pdef: would only work with functions with
5258 arguments with default values.
5264 arguments with default values.
5259
5265
5260 2001-11-14 Fernando Perez <fperez@colorado.edu>
5266 2001-11-14 Fernando Perez <fperez@colorado.edu>
5261
5267
5262 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5268 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5263 example with IPython. Various other minor fixes and cleanups.
5269 example with IPython. Various other minor fixes and cleanups.
5264
5270
5265 * Version 0.1.9 released, 0.1.10 opened for further work.
5271 * Version 0.1.9 released, 0.1.10 opened for further work.
5266
5272
5267 * Added sys.path to the list of directories searched in the
5273 * Added sys.path to the list of directories searched in the
5268 execfile= option. It used to be the current directory and the
5274 execfile= option. It used to be the current directory and the
5269 user's IPYTHONDIR only.
5275 user's IPYTHONDIR only.
5270
5276
5271 2001-11-13 Fernando Perez <fperez@colorado.edu>
5277 2001-11-13 Fernando Perez <fperez@colorado.edu>
5272
5278
5273 * Reinstated the raw_input/prefilter separation that Janko had
5279 * Reinstated the raw_input/prefilter separation that Janko had
5274 initially. This gives a more convenient setup for extending the
5280 initially. This gives a more convenient setup for extending the
5275 pre-processor from the outside: raw_input always gets a string,
5281 pre-processor from the outside: raw_input always gets a string,
5276 and prefilter has to process it. We can then redefine prefilter
5282 and prefilter has to process it. We can then redefine prefilter
5277 from the outside and implement extensions for special
5283 from the outside and implement extensions for special
5278 purposes.
5284 purposes.
5279
5285
5280 Today I got one for inputting PhysicalQuantity objects
5286 Today I got one for inputting PhysicalQuantity objects
5281 (from Scientific) without needing any function calls at
5287 (from Scientific) without needing any function calls at
5282 all. Extremely convenient, and it's all done as a user-level
5288 all. Extremely convenient, and it's all done as a user-level
5283 extension (no IPython code was touched). Now instead of:
5289 extension (no IPython code was touched). Now instead of:
5284 a = PhysicalQuantity(4.2,'m/s**2')
5290 a = PhysicalQuantity(4.2,'m/s**2')
5285 one can simply say
5291 one can simply say
5286 a = 4.2 m/s**2
5292 a = 4.2 m/s**2
5287 or even
5293 or even
5288 a = 4.2 m/s^2
5294 a = 4.2 m/s^2
5289
5295
5290 I use this, but it's also a proof of concept: IPython really is
5296 I use this, but it's also a proof of concept: IPython really is
5291 fully user-extensible, even at the level of the parsing of the
5297 fully user-extensible, even at the level of the parsing of the
5292 command line. It's not trivial, but it's perfectly doable.
5298 command line. It's not trivial, but it's perfectly doable.
5293
5299
5294 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5300 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5295 the problem of modules being loaded in the inverse order in which
5301 the problem of modules being loaded in the inverse order in which
5296 they were defined in
5302 they were defined in
5297
5303
5298 * Version 0.1.8 released, 0.1.9 opened for further work.
5304 * Version 0.1.8 released, 0.1.9 opened for further work.
5299
5305
5300 * Added magics pdef, source and file. They respectively show the
5306 * Added magics pdef, source and file. They respectively show the
5301 definition line ('prototype' in C), source code and full python
5307 definition line ('prototype' in C), source code and full python
5302 file for any callable object. The object inspector oinfo uses
5308 file for any callable object. The object inspector oinfo uses
5303 these to show the same information.
5309 these to show the same information.
5304
5310
5305 * Version 0.1.7 released, 0.1.8 opened for further work.
5311 * Version 0.1.7 released, 0.1.8 opened for further work.
5306
5312
5307 * Separated all the magic functions into a class called Magic. The
5313 * Separated all the magic functions into a class called Magic. The
5308 InteractiveShell class was becoming too big for Xemacs to handle
5314 InteractiveShell class was becoming too big for Xemacs to handle
5309 (de-indenting a line would lock it up for 10 seconds while it
5315 (de-indenting a line would lock it up for 10 seconds while it
5310 backtracked on the whole class!)
5316 backtracked on the whole class!)
5311
5317
5312 FIXME: didn't work. It can be done, but right now namespaces are
5318 FIXME: didn't work. It can be done, but right now namespaces are
5313 all messed up. Do it later (reverted it for now, so at least
5319 all messed up. Do it later (reverted it for now, so at least
5314 everything works as before).
5320 everything works as before).
5315
5321
5316 * Got the object introspection system (magic_oinfo) working! I
5322 * Got the object introspection system (magic_oinfo) working! I
5317 think this is pretty much ready for release to Janko, so he can
5323 think this is pretty much ready for release to Janko, so he can
5318 test it for a while and then announce it. Pretty much 100% of what
5324 test it for a while and then announce it. Pretty much 100% of what
5319 I wanted for the 'phase 1' release is ready. Happy, tired.
5325 I wanted for the 'phase 1' release is ready. Happy, tired.
5320
5326
5321 2001-11-12 Fernando Perez <fperez@colorado.edu>
5327 2001-11-12 Fernando Perez <fperez@colorado.edu>
5322
5328
5323 * Version 0.1.6 released, 0.1.7 opened for further work.
5329 * Version 0.1.6 released, 0.1.7 opened for further work.
5324
5330
5325 * Fixed bug in printing: it used to test for truth before
5331 * Fixed bug in printing: it used to test for truth before
5326 printing, so 0 wouldn't print. Now checks for None.
5332 printing, so 0 wouldn't print. Now checks for None.
5327
5333
5328 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5334 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5329 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5335 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5330 reaches by hand into the outputcache. Think of a better way to do
5336 reaches by hand into the outputcache. Think of a better way to do
5331 this later.
5337 this later.
5332
5338
5333 * Various small fixes thanks to Nathan's comments.
5339 * Various small fixes thanks to Nathan's comments.
5334
5340
5335 * Changed magic_pprint to magic_Pprint. This way it doesn't
5341 * Changed magic_pprint to magic_Pprint. This way it doesn't
5336 collide with pprint() and the name is consistent with the command
5342 collide with pprint() and the name is consistent with the command
5337 line option.
5343 line option.
5338
5344
5339 * Changed prompt counter behavior to be fully like
5345 * Changed prompt counter behavior to be fully like
5340 Mathematica's. That is, even input that doesn't return a result
5346 Mathematica's. That is, even input that doesn't return a result
5341 raises the prompt counter. The old behavior was kind of confusing
5347 raises the prompt counter. The old behavior was kind of confusing
5342 (getting the same prompt number several times if the operation
5348 (getting the same prompt number several times if the operation
5343 didn't return a result).
5349 didn't return a result).
5344
5350
5345 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5351 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5346
5352
5347 * Fixed -Classic mode (wasn't working anymore).
5353 * Fixed -Classic mode (wasn't working anymore).
5348
5354
5349 * Added colored prompts using Nathan's new code. Colors are
5355 * Added colored prompts using Nathan's new code. Colors are
5350 currently hardwired, they can be user-configurable. For
5356 currently hardwired, they can be user-configurable. For
5351 developers, they can be chosen in file ipythonlib.py, at the
5357 developers, they can be chosen in file ipythonlib.py, at the
5352 beginning of the CachedOutput class def.
5358 beginning of the CachedOutput class def.
5353
5359
5354 2001-11-11 Fernando Perez <fperez@colorado.edu>
5360 2001-11-11 Fernando Perez <fperez@colorado.edu>
5355
5361
5356 * Version 0.1.5 released, 0.1.6 opened for further work.
5362 * Version 0.1.5 released, 0.1.6 opened for further work.
5357
5363
5358 * Changed magic_env to *return* the environment as a dict (not to
5364 * Changed magic_env to *return* the environment as a dict (not to
5359 print it). This way it prints, but it can also be processed.
5365 print it). This way it prints, but it can also be processed.
5360
5366
5361 * Added Verbose exception reporting to interactive
5367 * Added Verbose exception reporting to interactive
5362 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5368 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5363 traceback. Had to make some changes to the ultraTB file. This is
5369 traceback. Had to make some changes to the ultraTB file. This is
5364 probably the last 'big' thing in my mental todo list. This ties
5370 probably the last 'big' thing in my mental todo list. This ties
5365 in with the next entry:
5371 in with the next entry:
5366
5372
5367 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5373 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5368 has to specify is Plain, Color or Verbose for all exception
5374 has to specify is Plain, Color or Verbose for all exception
5369 handling.
5375 handling.
5370
5376
5371 * Removed ShellServices option. All this can really be done via
5377 * Removed ShellServices option. All this can really be done via
5372 the magic system. It's easier to extend, cleaner and has automatic
5378 the magic system. It's easier to extend, cleaner and has automatic
5373 namespace protection and documentation.
5379 namespace protection and documentation.
5374
5380
5375 2001-11-09 Fernando Perez <fperez@colorado.edu>
5381 2001-11-09 Fernando Perez <fperez@colorado.edu>
5376
5382
5377 * Fixed bug in output cache flushing (missing parameter to
5383 * Fixed bug in output cache flushing (missing parameter to
5378 __init__). Other small bugs fixed (found using pychecker).
5384 __init__). Other small bugs fixed (found using pychecker).
5379
5385
5380 * Version 0.1.4 opened for bugfixing.
5386 * Version 0.1.4 opened for bugfixing.
5381
5387
5382 2001-11-07 Fernando Perez <fperez@colorado.edu>
5388 2001-11-07 Fernando Perez <fperez@colorado.edu>
5383
5389
5384 * Version 0.1.3 released, mainly because of the raw_input bug.
5390 * Version 0.1.3 released, mainly because of the raw_input bug.
5385
5391
5386 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5392 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5387 and when testing for whether things were callable, a call could
5393 and when testing for whether things were callable, a call could
5388 actually be made to certain functions. They would get called again
5394 actually be made to certain functions. They would get called again
5389 once 'really' executed, with a resulting double call. A disaster
5395 once 'really' executed, with a resulting double call. A disaster
5390 in many cases (list.reverse() would never work!).
5396 in many cases (list.reverse() would never work!).
5391
5397
5392 * Removed prefilter() function, moved its code to raw_input (which
5398 * Removed prefilter() function, moved its code to raw_input (which
5393 after all was just a near-empty caller for prefilter). This saves
5399 after all was just a near-empty caller for prefilter). This saves
5394 a function call on every prompt, and simplifies the class a tiny bit.
5400 a function call on every prompt, and simplifies the class a tiny bit.
5395
5401
5396 * Fix _ip to __ip name in magic example file.
5402 * Fix _ip to __ip name in magic example file.
5397
5403
5398 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5404 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5399 work with non-gnu versions of tar.
5405 work with non-gnu versions of tar.
5400
5406
5401 2001-11-06 Fernando Perez <fperez@colorado.edu>
5407 2001-11-06 Fernando Perez <fperez@colorado.edu>
5402
5408
5403 * Version 0.1.2. Just to keep track of the recent changes.
5409 * Version 0.1.2. Just to keep track of the recent changes.
5404
5410
5405 * Fixed nasty bug in output prompt routine. It used to check 'if
5411 * Fixed nasty bug in output prompt routine. It used to check 'if
5406 arg != None...'. Problem is, this fails if arg implements a
5412 arg != None...'. Problem is, this fails if arg implements a
5407 special comparison (__cmp__) which disallows comparing to
5413 special comparison (__cmp__) which disallows comparing to
5408 None. Found it when trying to use the PhysicalQuantity module from
5414 None. Found it when trying to use the PhysicalQuantity module from
5409 ScientificPython.
5415 ScientificPython.
5410
5416
5411 2001-11-05 Fernando Perez <fperez@colorado.edu>
5417 2001-11-05 Fernando Perez <fperez@colorado.edu>
5412
5418
5413 * Also added dirs. Now the pushd/popd/dirs family functions
5419 * Also added dirs. Now the pushd/popd/dirs family functions
5414 basically like the shell, with the added convenience of going home
5420 basically like the shell, with the added convenience of going home
5415 when called with no args.
5421 when called with no args.
5416
5422
5417 * pushd/popd slightly modified to mimic shell behavior more
5423 * pushd/popd slightly modified to mimic shell behavior more
5418 closely.
5424 closely.
5419
5425
5420 * Added env,pushd,popd from ShellServices as magic functions. I
5426 * Added env,pushd,popd from ShellServices as magic functions. I
5421 think the cleanest will be to port all desired functions from
5427 think the cleanest will be to port all desired functions from
5422 ShellServices as magics and remove ShellServices altogether. This
5428 ShellServices as magics and remove ShellServices altogether. This
5423 will provide a single, clean way of adding functionality
5429 will provide a single, clean way of adding functionality
5424 (shell-type or otherwise) to IP.
5430 (shell-type or otherwise) to IP.
5425
5431
5426 2001-11-04 Fernando Perez <fperez@colorado.edu>
5432 2001-11-04 Fernando Perez <fperez@colorado.edu>
5427
5433
5428 * Added .ipython/ directory to sys.path. This way users can keep
5434 * Added .ipython/ directory to sys.path. This way users can keep
5429 customizations there and access them via import.
5435 customizations there and access them via import.
5430
5436
5431 2001-11-03 Fernando Perez <fperez@colorado.edu>
5437 2001-11-03 Fernando Perez <fperez@colorado.edu>
5432
5438
5433 * Opened version 0.1.1 for new changes.
5439 * Opened version 0.1.1 for new changes.
5434
5440
5435 * Changed version number to 0.1.0: first 'public' release, sent to
5441 * Changed version number to 0.1.0: first 'public' release, sent to
5436 Nathan and Janko.
5442 Nathan and Janko.
5437
5443
5438 * Lots of small fixes and tweaks.
5444 * Lots of small fixes and tweaks.
5439
5445
5440 * Minor changes to whos format. Now strings are shown, snipped if
5446 * Minor changes to whos format. Now strings are shown, snipped if
5441 too long.
5447 too long.
5442
5448
5443 * Changed ShellServices to work on __main__ so they show up in @who
5449 * Changed ShellServices to work on __main__ so they show up in @who
5444
5450
5445 * Help also works with ? at the end of a line:
5451 * Help also works with ? at the end of a line:
5446 ?sin and sin?
5452 ?sin and sin?
5447 both produce the same effect. This is nice, as often I use the
5453 both produce the same effect. This is nice, as often I use the
5448 tab-complete to find the name of a method, but I used to then have
5454 tab-complete to find the name of a method, but I used to then have
5449 to go to the beginning of the line to put a ? if I wanted more
5455 to go to the beginning of the line to put a ? if I wanted more
5450 info. Now I can just add the ? and hit return. Convenient.
5456 info. Now I can just add the ? and hit return. Convenient.
5451
5457
5452 2001-11-02 Fernando Perez <fperez@colorado.edu>
5458 2001-11-02 Fernando Perez <fperez@colorado.edu>
5453
5459
5454 * Python version check (>=2.1) added.
5460 * Python version check (>=2.1) added.
5455
5461
5456 * Added LazyPython documentation. At this point the docs are quite
5462 * Added LazyPython documentation. At this point the docs are quite
5457 a mess. A cleanup is in order.
5463 a mess. A cleanup is in order.
5458
5464
5459 * Auto-installer created. For some bizarre reason, the zipfiles
5465 * Auto-installer created. For some bizarre reason, the zipfiles
5460 module isn't working on my system. So I made a tar version
5466 module isn't working on my system. So I made a tar version
5461 (hopefully the command line options in various systems won't kill
5467 (hopefully the command line options in various systems won't kill
5462 me).
5468 me).
5463
5469
5464 * Fixes to Struct in genutils. Now all dictionary-like methods are
5470 * Fixes to Struct in genutils. Now all dictionary-like methods are
5465 protected (reasonably).
5471 protected (reasonably).
5466
5472
5467 * Added pager function to genutils and changed ? to print usage
5473 * Added pager function to genutils and changed ? to print usage
5468 note through it (it was too long).
5474 note through it (it was too long).
5469
5475
5470 * Added the LazyPython functionality. Works great! I changed the
5476 * Added the LazyPython functionality. Works great! I changed the
5471 auto-quote escape to ';', it's on home row and next to '. But
5477 auto-quote escape to ';', it's on home row and next to '. But
5472 both auto-quote and auto-paren (still /) escapes are command-line
5478 both auto-quote and auto-paren (still /) escapes are command-line
5473 parameters.
5479 parameters.
5474
5480
5475
5481
5476 2001-11-01 Fernando Perez <fperez@colorado.edu>
5482 2001-11-01 Fernando Perez <fperez@colorado.edu>
5477
5483
5478 * Version changed to 0.0.7. Fairly large change: configuration now
5484 * Version changed to 0.0.7. Fairly large change: configuration now
5479 is all stored in a directory, by default .ipython. There, all
5485 is all stored in a directory, by default .ipython. There, all
5480 config files have normal looking names (not .names)
5486 config files have normal looking names (not .names)
5481
5487
5482 * Version 0.0.6 Released first to Lucas and Archie as a test
5488 * Version 0.0.6 Released first to Lucas and Archie as a test
5483 run. Since it's the first 'semi-public' release, change version to
5489 run. Since it's the first 'semi-public' release, change version to
5484 > 0.0.6 for any changes now.
5490 > 0.0.6 for any changes now.
5485
5491
5486 * Stuff I had put in the ipplib.py changelog:
5492 * Stuff I had put in the ipplib.py changelog:
5487
5493
5488 Changes to InteractiveShell:
5494 Changes to InteractiveShell:
5489
5495
5490 - Made the usage message a parameter.
5496 - Made the usage message a parameter.
5491
5497
5492 - Require the name of the shell variable to be given. It's a bit
5498 - Require the name of the shell variable to be given. It's a bit
5493 of a hack, but allows the name 'shell' not to be hardwire in the
5499 of a hack, but allows the name 'shell' not to be hardwire in the
5494 magic (@) handler, which is problematic b/c it requires
5500 magic (@) handler, which is problematic b/c it requires
5495 polluting the global namespace with 'shell'. This in turn is
5501 polluting the global namespace with 'shell'. This in turn is
5496 fragile: if a user redefines a variable called shell, things
5502 fragile: if a user redefines a variable called shell, things
5497 break.
5503 break.
5498
5504
5499 - magic @: all functions available through @ need to be defined
5505 - magic @: all functions available through @ need to be defined
5500 as magic_<name>, even though they can be called simply as
5506 as magic_<name>, even though they can be called simply as
5501 @<name>. This allows the special command @magic to gather
5507 @<name>. This allows the special command @magic to gather
5502 information automatically about all existing magic functions,
5508 information automatically about all existing magic functions,
5503 even if they are run-time user extensions, by parsing the shell
5509 even if they are run-time user extensions, by parsing the shell
5504 instance __dict__ looking for special magic_ names.
5510 instance __dict__ looking for special magic_ names.
5505
5511
5506 - mainloop: added *two* local namespace parameters. This allows
5512 - mainloop: added *two* local namespace parameters. This allows
5507 the class to differentiate between parameters which were there
5513 the class to differentiate between parameters which were there
5508 before and after command line initialization was processed. This
5514 before and after command line initialization was processed. This
5509 way, later @who can show things loaded at startup by the
5515 way, later @who can show things loaded at startup by the
5510 user. This trick was necessary to make session saving/reloading
5516 user. This trick was necessary to make session saving/reloading
5511 really work: ideally after saving/exiting/reloading a session,
5517 really work: ideally after saving/exiting/reloading a session,
5512 *everythin* should look the same, including the output of @who. I
5518 *everythin* should look the same, including the output of @who. I
5513 was only able to make this work with this double namespace
5519 was only able to make this work with this double namespace
5514 trick.
5520 trick.
5515
5521
5516 - added a header to the logfile which allows (almost) full
5522 - added a header to the logfile which allows (almost) full
5517 session restoring.
5523 session restoring.
5518
5524
5519 - prepend lines beginning with @ or !, with a and log
5525 - prepend lines beginning with @ or !, with a and log
5520 them. Why? !lines: may be useful to know what you did @lines:
5526 them. Why? !lines: may be useful to know what you did @lines:
5521 they may affect session state. So when restoring a session, at
5527 they may affect session state. So when restoring a session, at
5522 least inform the user of their presence. I couldn't quite get
5528 least inform the user of their presence. I couldn't quite get
5523 them to properly re-execute, but at least the user is warned.
5529 them to properly re-execute, but at least the user is warned.
5524
5530
5525 * Started ChangeLog.
5531 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now