##// END OF EJS Templates
%cd accepts \ as pathsep - will convert to /.
vivainio -
Show More
@@ -1,2745 +1,2748 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 1014 2006-01-13 19:16:41Z vivainio $"""
4 $Id: Magic.py 1018 2006-01-14 11:02: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 sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 from cStringIO import StringIO
34 from cStringIO import StringIO
35 from getopt import getopt
35 from getopt import getopt
36 from pprint import pprint, pformat
36 from pprint import pprint, pformat
37
37
38 # profile isn't bundled by default in Debian for license reasons
38 # profile isn't bundled by default in Debian for license reasons
39 try:
39 try:
40 import profile,pstats
40 import profile,pstats
41 except ImportError:
41 except ImportError:
42 profile = pstats = None
42 profile = pstats = None
43
43
44 # Homebrewed
44 # Homebrewed
45 from IPython import Debugger, OInspect, wildcard
45 from IPython import Debugger, OInspect, wildcard
46 from IPython.FakeModule import FakeModule
46 from IPython.FakeModule import FakeModule
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.PyColorize import Parser
48 from IPython.PyColorize import Parser
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.macro import Macro
50 from IPython.macro import Macro
51 from IPython.genutils import *
51 from IPython.genutils import *
52 from IPython import platutils
52 from IPython import platutils
53 #***************************************************************************
53 #***************************************************************************
54 # Utility functions
54 # Utility functions
55 def on_off(tag):
55 def on_off(tag):
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 return ['OFF','ON'][tag]
57 return ['OFF','ON'][tag]
58
58
59 class Bunch: pass
59 class Bunch: pass
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Main class implementing Magic functionality
62 # Main class implementing Magic functionality
63 class Magic:
63 class Magic:
64 """Magic functions for InteractiveShell.
64 """Magic functions for InteractiveShell.
65
65
66 Shell functions which can be reached as %function_name. All magic
66 Shell functions which can be reached as %function_name. All magic
67 functions should accept a string, which they can parse for their own
67 functions should accept a string, which they can parse for their own
68 needs. This can make some functions easier to type, eg `%cd ../`
68 needs. This can make some functions easier to type, eg `%cd ../`
69 vs. `%cd("../")`
69 vs. `%cd("../")`
70
70
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
72 at the command line, but it is is needed in the definition. """
72 at the command line, but it is is needed in the definition. """
73
73
74 # class globals
74 # class globals
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
76 'Automagic is ON, % prefix NOT needed for magic functions.']
76 'Automagic is ON, % prefix NOT needed for magic functions.']
77
77
78 #......................................................................
78 #......................................................................
79 # some utility functions
79 # some utility functions
80
80
81 def __init__(self,shell):
81 def __init__(self,shell):
82
82
83 self.options_table = {}
83 self.options_table = {}
84 if profile is None:
84 if profile is None:
85 self.magic_prun = self.profile_missing_notice
85 self.magic_prun = self.profile_missing_notice
86 self.shell = shell
86 self.shell = shell
87
87
88 # namespace for holding state we may need
88 # namespace for holding state we may need
89 self._magic_state = Bunch()
89 self._magic_state = Bunch()
90
90
91 def profile_missing_notice(self, *args, **kwargs):
91 def profile_missing_notice(self, *args, **kwargs):
92 error("""\
92 error("""\
93 The profile module could not be found. If you are a Debian user,
93 The profile module could not be found. If you are a Debian user,
94 it has been removed from the standard Debian package because of its non-free
94 it has been removed from the standard Debian package because of its non-free
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
96
96
97 def default_option(self,fn,optstr):
97 def default_option(self,fn,optstr):
98 """Make an entry in the options_table for fn, with value optstr"""
98 """Make an entry in the options_table for fn, with value optstr"""
99
99
100 if fn not in self.lsmagic():
100 if fn not in self.lsmagic():
101 error("%s is not a magic function" % fn)
101 error("%s is not a magic function" % fn)
102 self.options_table[fn] = optstr
102 self.options_table[fn] = optstr
103
103
104 def lsmagic(self):
104 def lsmagic(self):
105 """Return a list of currently available magic functions.
105 """Return a list of currently available magic functions.
106
106
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
108 ['magic_ls','magic_cd',...]"""
108 ['magic_ls','magic_cd',...]"""
109
109
110 # FIXME. This needs a cleanup, in the way the magics list is built.
110 # FIXME. This needs a cleanup, in the way the magics list is built.
111
111
112 # magics in class definition
112 # magics in class definition
113 class_magic = lambda fn: fn.startswith('magic_') and \
113 class_magic = lambda fn: fn.startswith('magic_') and \
114 callable(Magic.__dict__[fn])
114 callable(Magic.__dict__[fn])
115 # in instance namespace (run-time user additions)
115 # in instance namespace (run-time user additions)
116 inst_magic = lambda fn: fn.startswith('magic_') and \
116 inst_magic = lambda fn: fn.startswith('magic_') and \
117 callable(self.__dict__[fn])
117 callable(self.__dict__[fn])
118 # and bound magics by user (so they can access self):
118 # and bound magics by user (so they can access self):
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
120 callable(self.__class__.__dict__[fn])
120 callable(self.__class__.__dict__[fn])
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
124 out = []
124 out = []
125 for fn in magics:
125 for fn in magics:
126 out.append(fn.replace('magic_','',1))
126 out.append(fn.replace('magic_','',1))
127 out.sort()
127 out.sort()
128 return out
128 return out
129
129
130 def extract_input_slices(self,slices):
130 def extract_input_slices(self,slices):
131 """Return as a string a set of input history slices.
131 """Return as a string a set of input history slices.
132
132
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
134 since this function is for use by magic functions which get their
134 since this function is for use by magic functions which get their
135 arguments as strings.
135 arguments as strings.
136
136
137 Note that slices can be called with two notations:
137 Note that slices can be called with two notations:
138
138
139 N:M -> standard python form, means including items N...(M-1).
139 N:M -> standard python form, means including items N...(M-1).
140
140
141 N-M -> include items N..M (closed endpoint)."""
141 N-M -> include items N..M (closed endpoint)."""
142
142
143 cmds = []
143 cmds = []
144 for chunk in slices:
144 for chunk in slices:
145 if ':' in chunk:
145 if ':' in chunk:
146 ini,fin = map(int,chunk.split(':'))
146 ini,fin = map(int,chunk.split(':'))
147 elif '-' in chunk:
147 elif '-' in chunk:
148 ini,fin = map(int,chunk.split('-'))
148 ini,fin = map(int,chunk.split('-'))
149 fin += 1
149 fin += 1
150 else:
150 else:
151 ini = int(chunk)
151 ini = int(chunk)
152 fin = ini+1
152 fin = ini+1
153 cmds.append(self.shell.input_hist[ini:fin])
153 cmds.append(self.shell.input_hist[ini:fin])
154 return cmds
154 return cmds
155
155
156 def _ofind(self,oname):
156 def _ofind(self,oname):
157 """Find an object in the available namespaces.
157 """Find an object in the available namespaces.
158
158
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
160
160
161 Has special code to detect magic functions.
161 Has special code to detect magic functions.
162 """
162 """
163
163
164 oname = oname.strip()
164 oname = oname.strip()
165
165
166 # Namespaces to search in:
166 # Namespaces to search in:
167 user_ns = self.shell.user_ns
167 user_ns = self.shell.user_ns
168 internal_ns = self.shell.internal_ns
168 internal_ns = self.shell.internal_ns
169 builtin_ns = __builtin__.__dict__
169 builtin_ns = __builtin__.__dict__
170 alias_ns = self.shell.alias_table
170 alias_ns = self.shell.alias_table
171
171
172 # Put them in a list. The order is important so that we find things in
172 # Put them in a list. The order is important so that we find things in
173 # the same order that Python finds them.
173 # the same order that Python finds them.
174 namespaces = [ ('Interactive',user_ns),
174 namespaces = [ ('Interactive',user_ns),
175 ('IPython internal',internal_ns),
175 ('IPython internal',internal_ns),
176 ('Python builtin',builtin_ns),
176 ('Python builtin',builtin_ns),
177 ('Alias',alias_ns),
177 ('Alias',alias_ns),
178 ]
178 ]
179
179
180 # initialize results to 'null'
180 # initialize results to 'null'
181 found = 0; obj = None; ospace = None; ds = None;
181 found = 0; obj = None; ospace = None; ds = None;
182 ismagic = 0; isalias = 0
182 ismagic = 0; isalias = 0
183
183
184 # Look for the given name by splitting it in parts. If the head is
184 # Look for the given name by splitting it in parts. If the head is
185 # found, then we look for all the remaining parts as members, and only
185 # found, then we look for all the remaining parts as members, and only
186 # declare success if we can find them all.
186 # declare success if we can find them all.
187 oname_parts = oname.split('.')
187 oname_parts = oname.split('.')
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
189 for nsname,ns in namespaces:
189 for nsname,ns in namespaces:
190 try:
190 try:
191 obj = ns[oname_head]
191 obj = ns[oname_head]
192 except KeyError:
192 except KeyError:
193 continue
193 continue
194 else:
194 else:
195 for part in oname_rest:
195 for part in oname_rest:
196 try:
196 try:
197 obj = getattr(obj,part)
197 obj = getattr(obj,part)
198 except:
198 except:
199 # Blanket except b/c some badly implemented objects
199 # Blanket except b/c some badly implemented objects
200 # allow __getattr__ to raise exceptions other than
200 # allow __getattr__ to raise exceptions other than
201 # AttributeError, which then crashes IPython.
201 # AttributeError, which then crashes IPython.
202 break
202 break
203 else:
203 else:
204 # If we finish the for loop (no break), we got all members
204 # If we finish the for loop (no break), we got all members
205 found = 1
205 found = 1
206 ospace = nsname
206 ospace = nsname
207 if ns == alias_ns:
207 if ns == alias_ns:
208 isalias = 1
208 isalias = 1
209 break # namespace loop
209 break # namespace loop
210
210
211 # Try to see if it's magic
211 # Try to see if it's magic
212 if not found:
212 if not found:
213 if oname.startswith(self.shell.ESC_MAGIC):
213 if oname.startswith(self.shell.ESC_MAGIC):
214 oname = oname[1:]
214 oname = oname[1:]
215 obj = getattr(self,'magic_'+oname,None)
215 obj = getattr(self,'magic_'+oname,None)
216 if obj is not None:
216 if obj is not None:
217 found = 1
217 found = 1
218 ospace = 'IPython internal'
218 ospace = 'IPython internal'
219 ismagic = 1
219 ismagic = 1
220
220
221 # Last try: special-case some literals like '', [], {}, etc:
221 # Last try: special-case some literals like '', [], {}, etc:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
223 obj = eval(oname_head)
223 obj = eval(oname_head)
224 found = 1
224 found = 1
225 ospace = 'Interactive'
225 ospace = 'Interactive'
226
226
227 return {'found':found, 'obj':obj, 'namespace':ospace,
227 return {'found':found, 'obj':obj, 'namespace':ospace,
228 'ismagic':ismagic, 'isalias':isalias}
228 'ismagic':ismagic, 'isalias':isalias}
229
229
230 def arg_err(self,func):
230 def arg_err(self,func):
231 """Print docstring if incorrect arguments were passed"""
231 """Print docstring if incorrect arguments were passed"""
232 print 'Error in arguments:'
232 print 'Error in arguments:'
233 print OInspect.getdoc(func)
233 print OInspect.getdoc(func)
234
234
235 def format_latex(self,strng):
235 def format_latex(self,strng):
236 """Format a string for latex inclusion."""
236 """Format a string for latex inclusion."""
237
237
238 # Characters that need to be escaped for latex:
238 # Characters that need to be escaped for latex:
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
240 # Magic command names as headers:
240 # Magic command names as headers:
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
242 re.MULTILINE)
242 re.MULTILINE)
243 # Magic commands
243 # Magic commands
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
245 re.MULTILINE)
245 re.MULTILINE)
246 # Paragraph continue
246 # Paragraph continue
247 par_re = re.compile(r'\\$',re.MULTILINE)
247 par_re = re.compile(r'\\$',re.MULTILINE)
248
248
249 # The "\n" symbol
249 # The "\n" symbol
250 newline_re = re.compile(r'\\n')
250 newline_re = re.compile(r'\\n')
251
251
252 # Now build the string for output:
252 # Now build the string for output:
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
255 strng)
255 strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
257 strng = par_re.sub(r'\\\\',strng)
257 strng = par_re.sub(r'\\\\',strng)
258 strng = escape_re.sub(r'\\\1',strng)
258 strng = escape_re.sub(r'\\\1',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
260 return strng
260 return strng
261
261
262 def format_screen(self,strng):
262 def format_screen(self,strng):
263 """Format a string for screen printing.
263 """Format a string for screen printing.
264
264
265 This removes some latex-type format codes."""
265 This removes some latex-type format codes."""
266 # Paragraph continue
266 # Paragraph continue
267 par_re = re.compile(r'\\$',re.MULTILINE)
267 par_re = re.compile(r'\\$',re.MULTILINE)
268 strng = par_re.sub('',strng)
268 strng = par_re.sub('',strng)
269 return strng
269 return strng
270
270
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
272 """Parse options passed to an argument string.
272 """Parse options passed to an argument string.
273
273
274 The interface is similar to that of getopt(), but it returns back a
274 The interface is similar to that of getopt(), but it returns back a
275 Struct with the options as keys and the stripped argument string still
275 Struct with the options as keys and the stripped argument string still
276 as a string.
276 as a string.
277
277
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
279 This allows us to easily expand variables, glob files, quote
279 This allows us to easily expand variables, glob files, quote
280 arguments, etc.
280 arguments, etc.
281
281
282 Options:
282 Options:
283 -mode: default 'string'. If given as 'list', the argument string is
283 -mode: default 'string'. If given as 'list', the argument string is
284 returned as a list (split on whitespace) instead of a string.
284 returned as a list (split on whitespace) instead of a string.
285
285
286 -list_all: put all option values in lists. Normally only options
286 -list_all: put all option values in lists. Normally only options
287 appearing more than once are put in a list."""
287 appearing more than once are put in a list."""
288
288
289 # inject default options at the beginning of the input line
289 # inject default options at the beginning of the input line
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
292
292
293 mode = kw.get('mode','string')
293 mode = kw.get('mode','string')
294 if mode not in ['string','list']:
294 if mode not in ['string','list']:
295 raise ValueError,'incorrect mode given: %s' % mode
295 raise ValueError,'incorrect mode given: %s' % mode
296 # Get options
296 # Get options
297 list_all = kw.get('list_all',0)
297 list_all = kw.get('list_all',0)
298
298
299 # Check if we have more than one argument to warrant extra processing:
299 # Check if we have more than one argument to warrant extra processing:
300 odict = {} # Dictionary with options
300 odict = {} # Dictionary with options
301 args = arg_str.split()
301 args = arg_str.split()
302 if len(args) >= 1:
302 if len(args) >= 1:
303 # If the list of inputs only has 0 or 1 thing in it, there's no
303 # If the list of inputs only has 0 or 1 thing in it, there's no
304 # need to look for options
304 # need to look for options
305 argv = shlex_split(arg_str)
305 argv = shlex_split(arg_str)
306 # Do regular option processing
306 # Do regular option processing
307 opts,args = getopt(argv,opt_str,*long_opts)
307 opts,args = getopt(argv,opt_str,*long_opts)
308 for o,a in opts:
308 for o,a in opts:
309 if o.startswith('--'):
309 if o.startswith('--'):
310 o = o[2:]
310 o = o[2:]
311 else:
311 else:
312 o = o[1:]
312 o = o[1:]
313 try:
313 try:
314 odict[o].append(a)
314 odict[o].append(a)
315 except AttributeError:
315 except AttributeError:
316 odict[o] = [odict[o],a]
316 odict[o] = [odict[o],a]
317 except KeyError:
317 except KeyError:
318 if list_all:
318 if list_all:
319 odict[o] = [a]
319 odict[o] = [a]
320 else:
320 else:
321 odict[o] = a
321 odict[o] = a
322
322
323 # Prepare opts,args for return
323 # Prepare opts,args for return
324 opts = Struct(odict)
324 opts = Struct(odict)
325 if mode == 'string':
325 if mode == 'string':
326 args = ' '.join(args)
326 args = ' '.join(args)
327
327
328 return opts,args
328 return opts,args
329
329
330 #......................................................................
330 #......................................................................
331 # And now the actual magic functions
331 # And now the actual magic functions
332
332
333 # Functions for IPython shell work (vars,funcs, config, etc)
333 # Functions for IPython shell work (vars,funcs, config, etc)
334 def magic_lsmagic(self, parameter_s = ''):
334 def magic_lsmagic(self, parameter_s = ''):
335 """List currently available magic functions."""
335 """List currently available magic functions."""
336 mesc = self.shell.ESC_MAGIC
336 mesc = self.shell.ESC_MAGIC
337 print 'Available magic functions:\n'+mesc+\
337 print 'Available magic functions:\n'+mesc+\
338 (' '+mesc).join(self.lsmagic())
338 (' '+mesc).join(self.lsmagic())
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
340 return None
340 return None
341
341
342 def magic_magic(self, parameter_s = ''):
342 def magic_magic(self, parameter_s = ''):
343 """Print information about the magic function system."""
343 """Print information about the magic function system."""
344
344
345 mode = ''
345 mode = ''
346 try:
346 try:
347 if parameter_s.split()[0] == '-latex':
347 if parameter_s.split()[0] == '-latex':
348 mode = 'latex'
348 mode = 'latex'
349 except:
349 except:
350 pass
350 pass
351
351
352 magic_docs = []
352 magic_docs = []
353 for fname in self.lsmagic():
353 for fname in self.lsmagic():
354 mname = 'magic_' + fname
354 mname = 'magic_' + fname
355 for space in (Magic,self,self.__class__):
355 for space in (Magic,self,self.__class__):
356 try:
356 try:
357 fn = space.__dict__[mname]
357 fn = space.__dict__[mname]
358 except KeyError:
358 except KeyError:
359 pass
359 pass
360 else:
360 else:
361 break
361 break
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
363 fname,fn.__doc__))
363 fname,fn.__doc__))
364 magic_docs = ''.join(magic_docs)
364 magic_docs = ''.join(magic_docs)
365
365
366 if mode == 'latex':
366 if mode == 'latex':
367 print self.format_latex(magic_docs)
367 print self.format_latex(magic_docs)
368 return
368 return
369 else:
369 else:
370 magic_docs = self.format_screen(magic_docs)
370 magic_docs = self.format_screen(magic_docs)
371
371
372 outmsg = """
372 outmsg = """
373 IPython's 'magic' functions
373 IPython's 'magic' functions
374 ===========================
374 ===========================
375
375
376 The magic function system provides a series of functions which allow you to
376 The magic function system provides a series of functions which allow you to
377 control the behavior of IPython itself, plus a lot of system-type
377 control the behavior of IPython itself, plus a lot of system-type
378 features. All these functions are prefixed with a % character, but parameters
378 features. All these functions are prefixed with a % character, but parameters
379 are given without parentheses or quotes.
379 are given without parentheses or quotes.
380
380
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
382 %automagic function), you don't need to type in the % explicitly. By default,
382 %automagic function), you don't need to type in the % explicitly. By default,
383 IPython ships with automagic on, so you should only rarely need the % escape.
383 IPython ships with automagic on, so you should only rarely need the % escape.
384
384
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 to 'mydir', if it exists.
386 to 'mydir', if it exists.
387
387
388 You can define your own magic functions to extend the system. See the supplied
388 You can define your own magic functions to extend the system. See the supplied
389 ipythonrc and example-magic.py files for details (in your ipython
389 ipythonrc and example-magic.py files for details (in your ipython
390 configuration directory, typically $HOME/.ipython/).
390 configuration directory, typically $HOME/.ipython/).
391
391
392 You can also define your own aliased names for magic functions. In your
392 You can also define your own aliased names for magic functions. In your
393 ipythonrc file, placing a line like:
393 ipythonrc file, placing a line like:
394
394
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
396
396
397 will define %pf as a new name for %profile.
397 will define %pf as a new name for %profile.
398
398
399 You can also call magics in code using the ipmagic() function, which IPython
399 You can also call magics in code using the ipmagic() function, which IPython
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
401
401
402 For a list of the available magic functions, use %lsmagic. For a description
402 For a list of the available magic functions, use %lsmagic. For a description
403 of any of them, type %magic_name?, e.g. '%cd?'.
403 of any of them, type %magic_name?, e.g. '%cd?'.
404
404
405 Currently the magic system has the following functions:\n"""
405 Currently the magic system has the following functions:\n"""
406
406
407 mesc = self.shell.ESC_MAGIC
407 mesc = self.shell.ESC_MAGIC
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 "\n\n%s%s\n\n%s" % (outmsg,
409 "\n\n%s%s\n\n%s" % (outmsg,
410 magic_docs,mesc,mesc,
410 magic_docs,mesc,mesc,
411 (' '+mesc).join(self.lsmagic()),
411 (' '+mesc).join(self.lsmagic()),
412 Magic.auto_status[self.shell.rc.automagic] ) )
412 Magic.auto_status[self.shell.rc.automagic] ) )
413
413
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
415
415
416 def magic_automagic(self, parameter_s = ''):
416 def magic_automagic(self, parameter_s = ''):
417 """Make magic functions callable without having to type the initial %.
417 """Make magic functions callable without having to type the initial %.
418
418
419 Toggles on/off (when off, you must call it as %automagic, of
419 Toggles on/off (when off, you must call it as %automagic, of
420 course). Note that magic functions have lowest priority, so if there's
420 course). Note that magic functions have lowest priority, so if there's
421 a variable whose name collides with that of a magic fn, automagic
421 a variable whose name collides with that of a magic fn, automagic
422 won't work for that function (you get the variable instead). However,
422 won't work for that function (you get the variable instead). However,
423 if you delete the variable (del var), the previously shadowed magic
423 if you delete the variable (del var), the previously shadowed magic
424 function becomes visible to automagic again."""
424 function becomes visible to automagic again."""
425
425
426 rc = self.shell.rc
426 rc = self.shell.rc
427 rc.automagic = not rc.automagic
427 rc.automagic = not rc.automagic
428 print '\n' + Magic.auto_status[rc.automagic]
428 print '\n' + Magic.auto_status[rc.automagic]
429
429
430 def magic_autocall(self, parameter_s = ''):
430 def magic_autocall(self, parameter_s = ''):
431 """Make functions callable without having to type parentheses.
431 """Make functions callable without having to type parentheses.
432
432
433 Usage:
433 Usage:
434
434
435 %autocall [mode]
435 %autocall [mode]
436
436
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
438 value is toggled on and off (remembering the previous state)."""
438 value is toggled on and off (remembering the previous state)."""
439
439
440 rc = self.shell.rc
440 rc = self.shell.rc
441
441
442 if parameter_s:
442 if parameter_s:
443 arg = int(parameter_s)
443 arg = int(parameter_s)
444 else:
444 else:
445 arg = 'toggle'
445 arg = 'toggle'
446
446
447 if not arg in (0,1,2,'toggle'):
447 if not arg in (0,1,2,'toggle'):
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
449 return
449 return
450
450
451 if arg in (0,1,2):
451 if arg in (0,1,2):
452 rc.autocall = arg
452 rc.autocall = arg
453 else: # toggle
453 else: # toggle
454 if rc.autocall:
454 if rc.autocall:
455 self._magic_state.autocall_save = rc.autocall
455 self._magic_state.autocall_save = rc.autocall
456 rc.autocall = 0
456 rc.autocall = 0
457 else:
457 else:
458 try:
458 try:
459 rc.autocall = self._magic_state.autocall_save
459 rc.autocall = self._magic_state.autocall_save
460 except AttributeError:
460 except AttributeError:
461 rc.autocall = self._magic_state.autocall_save = 1
461 rc.autocall = self._magic_state.autocall_save = 1
462
462
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
464
464
465 def magic_autoindent(self, parameter_s = ''):
465 def magic_autoindent(self, parameter_s = ''):
466 """Toggle autoindent on/off (if available)."""
466 """Toggle autoindent on/off (if available)."""
467
467
468 self.shell.set_autoindent()
468 self.shell.set_autoindent()
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
470
470
471 def magic_system_verbose(self, parameter_s = ''):
471 def magic_system_verbose(self, parameter_s = ''):
472 """Toggle verbose printing of system calls on/off."""
472 """Toggle verbose printing of system calls on/off."""
473
473
474 self.shell.rc_set_toggle('system_verbose')
474 self.shell.rc_set_toggle('system_verbose')
475 print "System verbose printing is:",\
475 print "System verbose printing is:",\
476 ['OFF','ON'][self.shell.rc.system_verbose]
476 ['OFF','ON'][self.shell.rc.system_verbose]
477
477
478 def magic_history(self, parameter_s = ''):
478 def magic_history(self, parameter_s = ''):
479 """Print input history (_i<n> variables), with most recent last.
479 """Print input history (_i<n> variables), with most recent last.
480
480
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
482 %history [-n] n -> print at most n inputs\\
482 %history [-n] n -> print at most n inputs\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
484
484
485 Each input's number <n> is shown, and is accessible as the
485 Each input's number <n> is shown, and is accessible as the
486 automatically generated variable _i<n>. Multi-line statements are
486 automatically generated variable _i<n>. Multi-line statements are
487 printed starting at a new line for easy copy/paste.
487 printed starting at a new line for easy copy/paste.
488
488
489 If option -n is used, input numbers are not printed. This is useful if
489 If option -n is used, input numbers are not printed. This is useful if
490 you want to get a printout of many lines which can be directly pasted
490 you want to get a printout of many lines which can be directly pasted
491 into a text editor.
491 into a text editor.
492
492
493 This feature is only available if numbered prompts are in use."""
493 This feature is only available if numbered prompts are in use."""
494
494
495 shell = self.shell
495 shell = self.shell
496 if not shell.outputcache.do_full_cache:
496 if not shell.outputcache.do_full_cache:
497 print 'This feature is only available if numbered prompts are in use.'
497 print 'This feature is only available if numbered prompts are in use.'
498 return
498 return
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
500
500
501 input_hist = shell.input_hist
501 input_hist = shell.input_hist
502 default_length = 40
502 default_length = 40
503 if len(args) == 0:
503 if len(args) == 0:
504 final = len(input_hist)
504 final = len(input_hist)
505 init = max(1,final-default_length)
505 init = max(1,final-default_length)
506 elif len(args) == 1:
506 elif len(args) == 1:
507 final = len(input_hist)
507 final = len(input_hist)
508 init = max(1,final-int(args[0]))
508 init = max(1,final-int(args[0]))
509 elif len(args) == 2:
509 elif len(args) == 2:
510 init,final = map(int,args)
510 init,final = map(int,args)
511 else:
511 else:
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
513 print self.magic_hist.__doc__
513 print self.magic_hist.__doc__
514 return
514 return
515 width = len(str(final))
515 width = len(str(final))
516 line_sep = ['','\n']
516 line_sep = ['','\n']
517 print_nums = not opts.has_key('n')
517 print_nums = not opts.has_key('n')
518 for in_num in range(init,final):
518 for in_num in range(init,final):
519 inline = input_hist[in_num]
519 inline = input_hist[in_num]
520 multiline = int(inline.count('\n') > 1)
520 multiline = int(inline.count('\n') > 1)
521 if print_nums:
521 if print_nums:
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
523 print inline,
523 print inline,
524
524
525 def magic_hist(self, parameter_s=''):
525 def magic_hist(self, parameter_s=''):
526 """Alternate name for %history."""
526 """Alternate name for %history."""
527 return self.magic_history(parameter_s)
527 return self.magic_history(parameter_s)
528
528
529 def magic_p(self, parameter_s=''):
529 def magic_p(self, parameter_s=''):
530 """Just a short alias for Python's 'print'."""
530 """Just a short alias for Python's 'print'."""
531 exec 'print ' + parameter_s in self.shell.user_ns
531 exec 'print ' + parameter_s in self.shell.user_ns
532
532
533 def magic_r(self, parameter_s=''):
533 def magic_r(self, parameter_s=''):
534 """Repeat previous input.
534 """Repeat previous input.
535
535
536 If given an argument, repeats the previous command which starts with
536 If given an argument, repeats the previous command which starts with
537 the same string, otherwise it just repeats the previous input.
537 the same string, otherwise it just repeats the previous input.
538
538
539 Shell escaped commands (with ! as first character) are not recognized
539 Shell escaped commands (with ! as first character) are not recognized
540 by this system, only pure python code and magic commands.
540 by this system, only pure python code and magic commands.
541 """
541 """
542
542
543 start = parameter_s.strip()
543 start = parameter_s.strip()
544 esc_magic = self.shell.ESC_MAGIC
544 esc_magic = self.shell.ESC_MAGIC
545 # Identify magic commands even if automagic is on (which means
545 # Identify magic commands even if automagic is on (which means
546 # the in-memory version is different from that typed by the user).
546 # the in-memory version is different from that typed by the user).
547 if self.shell.rc.automagic:
547 if self.shell.rc.automagic:
548 start_magic = esc_magic+start
548 start_magic = esc_magic+start
549 else:
549 else:
550 start_magic = start
550 start_magic = start
551 # Look through the input history in reverse
551 # Look through the input history in reverse
552 for n in range(len(self.shell.input_hist)-2,0,-1):
552 for n in range(len(self.shell.input_hist)-2,0,-1):
553 input = self.shell.input_hist[n]
553 input = self.shell.input_hist[n]
554 # skip plain 'r' lines so we don't recurse to infinity
554 # skip plain 'r' lines so we don't recurse to infinity
555 if input != 'ipmagic("r")\n' and \
555 if input != 'ipmagic("r")\n' and \
556 (input.startswith(start) or input.startswith(start_magic)):
556 (input.startswith(start) or input.startswith(start_magic)):
557 #print 'match',`input` # dbg
557 #print 'match',`input` # dbg
558 print 'Executing:',input,
558 print 'Executing:',input,
559 self.shell.runlines(input)
559 self.shell.runlines(input)
560 return
560 return
561 print 'No previous input matching `%s` found.' % start
561 print 'No previous input matching `%s` found.' % start
562
562
563 def magic_page(self, parameter_s=''):
563 def magic_page(self, parameter_s=''):
564 """Pretty print the object and display it through a pager.
564 """Pretty print the object and display it through a pager.
565
565
566 If no parameter is given, use _ (last output)."""
566 If no parameter is given, use _ (last output)."""
567 # After a function contributed by Olivier Aubert, slightly modified.
567 # After a function contributed by Olivier Aubert, slightly modified.
568
568
569 oname = parameter_s and parameter_s or '_'
569 oname = parameter_s and parameter_s or '_'
570 info = self._ofind(oname)
570 info = self._ofind(oname)
571 if info['found']:
571 if info['found']:
572 page(pformat(info['obj']))
572 page(pformat(info['obj']))
573 else:
573 else:
574 print 'Object `%s` not found' % oname
574 print 'Object `%s` not found' % oname
575
575
576 def magic_profile(self, parameter_s=''):
576 def magic_profile(self, parameter_s=''):
577 """Print your currently active IPyhton profile."""
577 """Print your currently active IPyhton profile."""
578 if self.shell.rc.profile:
578 if self.shell.rc.profile:
579 printpl('Current IPython profile: $self.shell.rc.profile.')
579 printpl('Current IPython profile: $self.shell.rc.profile.')
580 else:
580 else:
581 print 'No profile active.'
581 print 'No profile active.'
582
582
583 def _inspect(self,meth,oname,**kw):
583 def _inspect(self,meth,oname,**kw):
584 """Generic interface to the inspector system.
584 """Generic interface to the inspector system.
585
585
586 This function is meant to be called by pdef, pdoc & friends."""
586 This function is meant to be called by pdef, pdoc & friends."""
587
587
588 oname = oname.strip()
588 oname = oname.strip()
589 info = Struct(self._ofind(oname))
589 info = Struct(self._ofind(oname))
590 if info.found:
590 if info.found:
591 pmethod = getattr(self.shell.inspector,meth)
591 pmethod = getattr(self.shell.inspector,meth)
592 formatter = info.ismagic and self.format_screen or None
592 formatter = info.ismagic and self.format_screen or None
593 if meth == 'pdoc':
593 if meth == 'pdoc':
594 pmethod(info.obj,oname,formatter)
594 pmethod(info.obj,oname,formatter)
595 elif meth == 'pinfo':
595 elif meth == 'pinfo':
596 pmethod(info.obj,oname,formatter,info,**kw)
596 pmethod(info.obj,oname,formatter,info,**kw)
597 else:
597 else:
598 pmethod(info.obj,oname)
598 pmethod(info.obj,oname)
599 else:
599 else:
600 print 'Object `%s` not found.' % oname
600 print 'Object `%s` not found.' % oname
601 return 'not found' # so callers can take other action
601 return 'not found' # so callers can take other action
602
602
603 def magic_pdef(self, parameter_s=''):
603 def magic_pdef(self, parameter_s=''):
604 """Print the definition header for any callable object.
604 """Print the definition header for any callable object.
605
605
606 If the object is a class, print the constructor information."""
606 If the object is a class, print the constructor information."""
607 self._inspect('pdef',parameter_s)
607 self._inspect('pdef',parameter_s)
608
608
609 def magic_pdoc(self, parameter_s=''):
609 def magic_pdoc(self, parameter_s=''):
610 """Print the docstring for an object.
610 """Print the docstring for an object.
611
611
612 If the given object is a class, it will print both the class and the
612 If the given object is a class, it will print both the class and the
613 constructor docstrings."""
613 constructor docstrings."""
614 self._inspect('pdoc',parameter_s)
614 self._inspect('pdoc',parameter_s)
615
615
616 def magic_psource(self, parameter_s=''):
616 def magic_psource(self, parameter_s=''):
617 """Print (or run through pager) the source code for an object."""
617 """Print (or run through pager) the source code for an object."""
618 self._inspect('psource',parameter_s)
618 self._inspect('psource',parameter_s)
619
619
620 def magic_pfile(self, parameter_s=''):
620 def magic_pfile(self, parameter_s=''):
621 """Print (or run through pager) the file where an object is defined.
621 """Print (or run through pager) the file where an object is defined.
622
622
623 The file opens at the line where the object definition begins. IPython
623 The file opens at the line where the object definition begins. IPython
624 will honor the environment variable PAGER if set, and otherwise will
624 will honor the environment variable PAGER if set, and otherwise will
625 do its best to print the file in a convenient form.
625 do its best to print the file in a convenient form.
626
626
627 If the given argument is not an object currently defined, IPython will
627 If the given argument is not an object currently defined, IPython will
628 try to interpret it as a filename (automatically adding a .py extension
628 try to interpret it as a filename (automatically adding a .py extension
629 if needed). You can thus use %pfile as a syntax highlighting code
629 if needed). You can thus use %pfile as a syntax highlighting code
630 viewer."""
630 viewer."""
631
631
632 # first interpret argument as an object name
632 # first interpret argument as an object name
633 out = self._inspect('pfile',parameter_s)
633 out = self._inspect('pfile',parameter_s)
634 # if not, try the input as a filename
634 # if not, try the input as a filename
635 if out == 'not found':
635 if out == 'not found':
636 try:
636 try:
637 filename = get_py_filename(parameter_s)
637 filename = get_py_filename(parameter_s)
638 except IOError,msg:
638 except IOError,msg:
639 print msg
639 print msg
640 return
640 return
641 page(self.shell.inspector.format(file(filename).read()))
641 page(self.shell.inspector.format(file(filename).read()))
642
642
643 def magic_pinfo(self, parameter_s=''):
643 def magic_pinfo(self, parameter_s=''):
644 """Provide detailed information about an object.
644 """Provide detailed information about an object.
645
645
646 '%pinfo object' is just a synonym for object? or ?object."""
646 '%pinfo object' is just a synonym for object? or ?object."""
647
647
648 #print 'pinfo par: <%s>' % parameter_s # dbg
648 #print 'pinfo par: <%s>' % parameter_s # dbg
649
649
650 # detail_level: 0 -> obj? , 1 -> obj??
650 # detail_level: 0 -> obj? , 1 -> obj??
651 detail_level = 0
651 detail_level = 0
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
653 # happen if the user types 'pinfo foo?' at the cmd line.
653 # happen if the user types 'pinfo foo?' at the cmd line.
654 pinfo,qmark1,oname,qmark2 = \
654 pinfo,qmark1,oname,qmark2 = \
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
656 if pinfo or qmark1 or qmark2:
656 if pinfo or qmark1 or qmark2:
657 detail_level = 1
657 detail_level = 1
658 if "*" in oname:
658 if "*" in oname:
659 self.magic_psearch(oname)
659 self.magic_psearch(oname)
660 else:
660 else:
661 self._inspect('pinfo',oname,detail_level=detail_level)
661 self._inspect('pinfo',oname,detail_level=detail_level)
662
662
663 def magic_psearch(self, parameter_s=''):
663 def magic_psearch(self, parameter_s=''):
664 """Search for object in namespaces by wildcard.
664 """Search for object in namespaces by wildcard.
665
665
666 %psearch [options] PATTERN [OBJECT TYPE]
666 %psearch [options] PATTERN [OBJECT TYPE]
667
667
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
669 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
669 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
670 rest of the command line must be unchanged (options come first), so
670 rest of the command line must be unchanged (options come first), so
671 for example the following forms are equivalent
671 for example the following forms are equivalent
672
672
673 %psearch -i a* function
673 %psearch -i a* function
674 -i a* function?
674 -i a* function?
675 ?-i a* function
675 ?-i a* function
676
676
677 Arguments:
677 Arguments:
678
678
679 PATTERN
679 PATTERN
680
680
681 where PATTERN is a string containing * as a wildcard similar to its
681 where PATTERN is a string containing * as a wildcard similar to its
682 use in a shell. The pattern is matched in all namespaces on the
682 use in a shell. The pattern is matched in all namespaces on the
683 search path. By default objects starting with a single _ are not
683 search path. By default objects starting with a single _ are not
684 matched, many IPython generated objects have a single
684 matched, many IPython generated objects have a single
685 underscore. The default is case insensitive matching. Matching is
685 underscore. The default is case insensitive matching. Matching is
686 also done on the attributes of objects and not only on the objects
686 also done on the attributes of objects and not only on the objects
687 in a module.
687 in a module.
688
688
689 [OBJECT TYPE]
689 [OBJECT TYPE]
690
690
691 Is the name of a python type from the types module. The name is
691 Is the name of a python type from the types module. The name is
692 given in lowercase without the ending type, ex. StringType is
692 given in lowercase without the ending type, ex. StringType is
693 written string. By adding a type here only objects matching the
693 written string. By adding a type here only objects matching the
694 given type are matched. Using all here makes the pattern match all
694 given type are matched. Using all here makes the pattern match all
695 types (this is the default).
695 types (this is the default).
696
696
697 Options:
697 Options:
698
698
699 -a: makes the pattern match even objects whose names start with a
699 -a: makes the pattern match even objects whose names start with a
700 single underscore. These names are normally ommitted from the
700 single underscore. These names are normally ommitted from the
701 search.
701 search.
702
702
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
704 these options is given, the default is read from your ipythonrc
704 these options is given, the default is read from your ipythonrc
705 file. The option name which sets this value is
705 file. The option name which sets this value is
706 'wildcards_case_sensitive'. If this option is not specified in your
706 'wildcards_case_sensitive'. If this option is not specified in your
707 ipythonrc file, IPython's internal default is to do a case sensitive
707 ipythonrc file, IPython's internal default is to do a case sensitive
708 search.
708 search.
709
709
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
711 specifiy can be searched in any of the following namespaces:
711 specifiy can be searched in any of the following namespaces:
712 'builtin', 'user', 'user_global','internal', 'alias', where
712 'builtin', 'user', 'user_global','internal', 'alias', where
713 'builtin' and 'user' are the search defaults. Note that you should
713 'builtin' and 'user' are the search defaults. Note that you should
714 not use quotes when specifying namespaces.
714 not use quotes when specifying namespaces.
715
715
716 'Builtin' contains the python module builtin, 'user' contains all
716 'Builtin' contains the python module builtin, 'user' contains all
717 user data, 'alias' only contain the shell aliases and no python
717 user data, 'alias' only contain the shell aliases and no python
718 objects, 'internal' contains objects used by IPython. The
718 objects, 'internal' contains objects used by IPython. The
719 'user_global' namespace is only used by embedded IPython instances,
719 'user_global' namespace is only used by embedded IPython instances,
720 and it contains module-level globals. You can add namespaces to the
720 and it contains module-level globals. You can add namespaces to the
721 search with -s or exclude them with -e (these options can be given
721 search with -s or exclude them with -e (these options can be given
722 more than once).
722 more than once).
723
723
724 Examples:
724 Examples:
725
725
726 %psearch a* -> objects beginning with an a
726 %psearch a* -> objects beginning with an a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
728 %psearch a* function -> all functions beginning with an a
728 %psearch a* function -> all functions beginning with an a
729 %psearch re.e* -> objects beginning with an e in module re
729 %psearch re.e* -> objects beginning with an e in module re
730 %psearch r*.e* -> objects that start with e in modules starting in r
730 %psearch r*.e* -> objects that start with e in modules starting in r
731 %psearch r*.* string -> all strings in modules beginning with r
731 %psearch r*.* string -> all strings in modules beginning with r
732
732
733 Case sensitve search:
733 Case sensitve search:
734
734
735 %psearch -c a* list all object beginning with lower case a
735 %psearch -c a* list all object beginning with lower case a
736
736
737 Show objects beginning with a single _:
737 Show objects beginning with a single _:
738
738
739 %psearch -a _* list objects beginning with a single underscore"""
739 %psearch -a _* list objects beginning with a single underscore"""
740
740
741 # default namespaces to be searched
741 # default namespaces to be searched
742 def_search = ['user','builtin']
742 def_search = ['user','builtin']
743
743
744 # Process options/args
744 # Process options/args
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
746 opt = opts.get
746 opt = opts.get
747 shell = self.shell
747 shell = self.shell
748 psearch = shell.inspector.psearch
748 psearch = shell.inspector.psearch
749
749
750 # select case options
750 # select case options
751 if opts.has_key('i'):
751 if opts.has_key('i'):
752 ignore_case = True
752 ignore_case = True
753 elif opts.has_key('c'):
753 elif opts.has_key('c'):
754 ignore_case = False
754 ignore_case = False
755 else:
755 else:
756 ignore_case = not shell.rc.wildcards_case_sensitive
756 ignore_case = not shell.rc.wildcards_case_sensitive
757
757
758 # Build list of namespaces to search from user options
758 # Build list of namespaces to search from user options
759 def_search.extend(opt('s',[]))
759 def_search.extend(opt('s',[]))
760 ns_exclude = ns_exclude=opt('e',[])
760 ns_exclude = ns_exclude=opt('e',[])
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
762
762
763 # Call the actual search
763 # Call the actual search
764 try:
764 try:
765 psearch(args,shell.ns_table,ns_search,
765 psearch(args,shell.ns_table,ns_search,
766 show_all=opt('a'),ignore_case=ignore_case)
766 show_all=opt('a'),ignore_case=ignore_case)
767 except:
767 except:
768 shell.showtraceback()
768 shell.showtraceback()
769
769
770 def magic_who_ls(self, parameter_s=''):
770 def magic_who_ls(self, parameter_s=''):
771 """Return a sorted list of all interactive variables.
771 """Return a sorted list of all interactive variables.
772
772
773 If arguments are given, only variables of types matching these
773 If arguments are given, only variables of types matching these
774 arguments are returned."""
774 arguments are returned."""
775
775
776 user_ns = self.shell.user_ns
776 user_ns = self.shell.user_ns
777 internal_ns = self.shell.internal_ns
777 internal_ns = self.shell.internal_ns
778 user_config_ns = self.shell.user_config_ns
778 user_config_ns = self.shell.user_config_ns
779 out = []
779 out = []
780 typelist = parameter_s.split()
780 typelist = parameter_s.split()
781
781
782 for i in user_ns:
782 for i in user_ns:
783 if not (i.startswith('_') or i.startswith('_i')) \
783 if not (i.startswith('_') or i.startswith('_i')) \
784 and not (i in internal_ns or i in user_config_ns):
784 and not (i in internal_ns or i in user_config_ns):
785 if typelist:
785 if typelist:
786 if type(user_ns[i]).__name__ in typelist:
786 if type(user_ns[i]).__name__ in typelist:
787 out.append(i)
787 out.append(i)
788 else:
788 else:
789 out.append(i)
789 out.append(i)
790 out.sort()
790 out.sort()
791 return out
791 return out
792
792
793 def magic_who(self, parameter_s=''):
793 def magic_who(self, parameter_s=''):
794 """Print all interactive variables, with some minimal formatting.
794 """Print all interactive variables, with some minimal formatting.
795
795
796 If any arguments are given, only variables whose type matches one of
796 If any arguments are given, only variables whose type matches one of
797 these are printed. For example:
797 these are printed. For example:
798
798
799 %who function str
799 %who function str
800
800
801 will only list functions and strings, excluding all other types of
801 will only list functions and strings, excluding all other types of
802 variables. To find the proper type names, simply use type(var) at a
802 variables. To find the proper type names, simply use type(var) at a
803 command line to see how python prints type names. For example:
803 command line to see how python prints type names. For example:
804
804
805 In [1]: type('hello')\\
805 In [1]: type('hello')\\
806 Out[1]: <type 'str'>
806 Out[1]: <type 'str'>
807
807
808 indicates that the type name for strings is 'str'.
808 indicates that the type name for strings is 'str'.
809
809
810 %who always excludes executed names loaded through your configuration
810 %who always excludes executed names loaded through your configuration
811 file and things which are internal to IPython.
811 file and things which are internal to IPython.
812
812
813 This is deliberate, as typically you may load many modules and the
813 This is deliberate, as typically you may load many modules and the
814 purpose of %who is to show you only what you've manually defined."""
814 purpose of %who is to show you only what you've manually defined."""
815
815
816 varlist = self.magic_who_ls(parameter_s)
816 varlist = self.magic_who_ls(parameter_s)
817 if not varlist:
817 if not varlist:
818 print 'Interactive namespace is empty.'
818 print 'Interactive namespace is empty.'
819 return
819 return
820
820
821 # if we have variables, move on...
821 # if we have variables, move on...
822
822
823 # stupid flushing problem: when prompts have no separators, stdout is
823 # stupid flushing problem: when prompts have no separators, stdout is
824 # getting lost. I'm starting to think this is a python bug. I'm having
824 # getting lost. I'm starting to think this is a python bug. I'm having
825 # to force a flush with a print because even a sys.stdout.flush
825 # to force a flush with a print because even a sys.stdout.flush
826 # doesn't seem to do anything!
826 # doesn't seem to do anything!
827
827
828 count = 0
828 count = 0
829 for i in varlist:
829 for i in varlist:
830 print i+'\t',
830 print i+'\t',
831 count += 1
831 count += 1
832 if count > 8:
832 if count > 8:
833 count = 0
833 count = 0
834 print
834 print
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
836
836
837 print # well, this does force a flush at the expense of an extra \n
837 print # well, this does force a flush at the expense of an extra \n
838
838
839 def magic_whos(self, parameter_s=''):
839 def magic_whos(self, parameter_s=''):
840 """Like %who, but gives some extra information about each variable.
840 """Like %who, but gives some extra information about each variable.
841
841
842 The same type filtering of %who can be applied here.
842 The same type filtering of %who can be applied here.
843
843
844 For all variables, the type is printed. Additionally it prints:
844 For all variables, the type is printed. Additionally it prints:
845
845
846 - For {},[],(): their length.
846 - For {},[],(): their length.
847
847
848 - For Numeric arrays, a summary with shape, number of elements,
848 - For Numeric arrays, a summary with shape, number of elements,
849 typecode and size in memory.
849 typecode and size in memory.
850
850
851 - Everything else: a string representation, snipping their middle if
851 - Everything else: a string representation, snipping their middle if
852 too long."""
852 too long."""
853
853
854 varnames = self.magic_who_ls(parameter_s)
854 varnames = self.magic_who_ls(parameter_s)
855 if not varnames:
855 if not varnames:
856 print 'Interactive namespace is empty.'
856 print 'Interactive namespace is empty.'
857 return
857 return
858
858
859 # if we have variables, move on...
859 # if we have variables, move on...
860
860
861 # for these types, show len() instead of data:
861 # for these types, show len() instead of data:
862 seq_types = [types.DictType,types.ListType,types.TupleType]
862 seq_types = [types.DictType,types.ListType,types.TupleType]
863
863
864 # for Numeric arrays, display summary info
864 # for Numeric arrays, display summary info
865 try:
865 try:
866 import Numeric
866 import Numeric
867 except ImportError:
867 except ImportError:
868 array_type = None
868 array_type = None
869 else:
869 else:
870 array_type = Numeric.ArrayType.__name__
870 array_type = Numeric.ArrayType.__name__
871
871
872 # Find all variable names and types so we can figure out column sizes
872 # Find all variable names and types so we can figure out column sizes
873 get_vars = lambda i: self.shell.user_ns[i]
873 get_vars = lambda i: self.shell.user_ns[i]
874 type_name = lambda v: type(v).__name__
874 type_name = lambda v: type(v).__name__
875 varlist = map(get_vars,varnames)
875 varlist = map(get_vars,varnames)
876
876
877 typelist = []
877 typelist = []
878 for vv in varlist:
878 for vv in varlist:
879 tt = type_name(vv)
879 tt = type_name(vv)
880 if tt=='instance':
880 if tt=='instance':
881 typelist.append(str(vv.__class__))
881 typelist.append(str(vv.__class__))
882 else:
882 else:
883 typelist.append(tt)
883 typelist.append(tt)
884
884
885 # column labels and # of spaces as separator
885 # column labels and # of spaces as separator
886 varlabel = 'Variable'
886 varlabel = 'Variable'
887 typelabel = 'Type'
887 typelabel = 'Type'
888 datalabel = 'Data/Info'
888 datalabel = 'Data/Info'
889 colsep = 3
889 colsep = 3
890 # variable format strings
890 # variable format strings
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
893 aformat = "%s: %s elems, type `%s`, %s bytes"
893 aformat = "%s: %s elems, type `%s`, %s bytes"
894 # find the size of the columns to format the output nicely
894 # find the size of the columns to format the output nicely
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
897 # table header
897 # table header
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
900 # and the table itself
900 # and the table itself
901 kb = 1024
901 kb = 1024
902 Mb = 1048576 # kb**2
902 Mb = 1048576 # kb**2
903 for vname,var,vtype in zip(varnames,varlist,typelist):
903 for vname,var,vtype in zip(varnames,varlist,typelist):
904 print itpl(vformat),
904 print itpl(vformat),
905 if vtype in seq_types:
905 if vtype in seq_types:
906 print len(var)
906 print len(var)
907 elif vtype==array_type:
907 elif vtype==array_type:
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
909 vsize = Numeric.size(var)
909 vsize = Numeric.size(var)
910 vbytes = vsize*var.itemsize()
910 vbytes = vsize*var.itemsize()
911 if vbytes < 100000:
911 if vbytes < 100000:
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
913 else:
913 else:
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
915 if vbytes < Mb:
915 if vbytes < Mb:
916 print '(%s kb)' % (vbytes/kb,)
916 print '(%s kb)' % (vbytes/kb,)
917 else:
917 else:
918 print '(%s Mb)' % (vbytes/Mb,)
918 print '(%s Mb)' % (vbytes/Mb,)
919 else:
919 else:
920 vstr = str(var).replace('\n','\\n')
920 vstr = str(var).replace('\n','\\n')
921 if len(vstr) < 50:
921 if len(vstr) < 50:
922 print vstr
922 print vstr
923 else:
923 else:
924 printpl(vfmt_short)
924 printpl(vfmt_short)
925
925
926 def magic_reset(self, parameter_s=''):
926 def magic_reset(self, parameter_s=''):
927 """Resets the namespace by removing all names defined by the user.
927 """Resets the namespace by removing all names defined by the user.
928
928
929 Input/Output history are left around in case you need them."""
929 Input/Output history are left around in case you need them."""
930
930
931 ans = raw_input(
931 ans = raw_input(
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
933 if not ans.lower() == 'y':
933 if not ans.lower() == 'y':
934 print 'Nothing done.'
934 print 'Nothing done.'
935 return
935 return
936 user_ns = self.shell.user_ns
936 user_ns = self.shell.user_ns
937 for i in self.magic_who_ls():
937 for i in self.magic_who_ls():
938 del(user_ns[i])
938 del(user_ns[i])
939
939
940 def magic_config(self,parameter_s=''):
940 def magic_config(self,parameter_s=''):
941 """Show IPython's internal configuration."""
941 """Show IPython's internal configuration."""
942
942
943 page('Current configuration structure:\n'+
943 page('Current configuration structure:\n'+
944 pformat(self.shell.rc.dict()))
944 pformat(self.shell.rc.dict()))
945
945
946 def magic_logstart(self,parameter_s=''):
946 def magic_logstart(self,parameter_s=''):
947 """Start logging anywhere in a session.
947 """Start logging anywhere in a session.
948
948
949 %logstart [-o|-t] [log_name [log_mode]]
949 %logstart [-o|-t] [log_name [log_mode]]
950
950
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
952 current directory, in 'rotate' mode (see below).
952 current directory, in 'rotate' mode (see below).
953
953
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
955 history up to that point and then continues logging.
955 history up to that point and then continues logging.
956
956
957 %logstart takes a second optional parameter: logging mode. This can be one
957 %logstart takes a second optional parameter: logging mode. This can be one
958 of (note that the modes are given unquoted):\\
958 of (note that the modes are given unquoted):\\
959 append: well, that says it.\\
959 append: well, that says it.\\
960 backup: rename (if exists) to name~ and start name.\\
960 backup: rename (if exists) to name~ and start name.\\
961 global: single logfile in your home dir, appended to.\\
961 global: single logfile in your home dir, appended to.\\
962 over : overwrite existing log.\\
962 over : overwrite existing log.\\
963 rotate: create rotating logs name.1~, name.2~, etc.
963 rotate: create rotating logs name.1~, name.2~, etc.
964
964
965 Options:
965 Options:
966
966
967 -o: log also IPython's output. In this mode, all commands which
967 -o: log also IPython's output. In this mode, all commands which
968 generate an Out[NN] prompt are recorded to the logfile, right after
968 generate an Out[NN] prompt are recorded to the logfile, right after
969 their corresponding input line. The output lines are always
969 their corresponding input line. The output lines are always
970 prepended with a '#[Out]# ' marker, so that the log remains valid
970 prepended with a '#[Out]# ' marker, so that the log remains valid
971 Python code.
971 Python code.
972
972
973 Since this marker is always the same, filtering only the output from
973 Since this marker is always the same, filtering only the output from
974 a log is very easy, using for example a simple awk call:
974 a log is very easy, using for example a simple awk call:
975
975
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
977
977
978 -t: put timestamps before each input line logged (these are put in
978 -t: put timestamps before each input line logged (these are put in
979 comments)."""
979 comments)."""
980
980
981 opts,par = self.parse_options(parameter_s,'ot')
981 opts,par = self.parse_options(parameter_s,'ot')
982 log_output = 'o' in opts
982 log_output = 'o' in opts
983 timestamp = 't' in opts
983 timestamp = 't' in opts
984
984
985 rc = self.shell.rc
985 rc = self.shell.rc
986 logger = self.shell.logger
986 logger = self.shell.logger
987
987
988 # if no args are given, the defaults set in the logger constructor by
988 # if no args are given, the defaults set in the logger constructor by
989 # ipytohn remain valid
989 # ipytohn remain valid
990 if par:
990 if par:
991 try:
991 try:
992 logfname,logmode = par.split()
992 logfname,logmode = par.split()
993 except:
993 except:
994 logfname = par
994 logfname = par
995 logmode = 'backup'
995 logmode = 'backup'
996 else:
996 else:
997 logfname = logger.logfname
997 logfname = logger.logfname
998 logmode = logger.logmode
998 logmode = logger.logmode
999 # put logfname into rc struct as if it had been called on the command
999 # put logfname into rc struct as if it had been called on the command
1000 # line, so it ends up saved in the log header Save it in case we need
1000 # line, so it ends up saved in the log header Save it in case we need
1001 # to restore it...
1001 # to restore it...
1002 old_logfile = rc.opts.get('logfile','')
1002 old_logfile = rc.opts.get('logfile','')
1003 if logfname:
1003 if logfname:
1004 logfname = os.path.expanduser(logfname)
1004 logfname = os.path.expanduser(logfname)
1005 rc.opts.logfile = logfname
1005 rc.opts.logfile = logfname
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1007 try:
1007 try:
1008 started = logger.logstart(logfname,loghead,logmode,
1008 started = logger.logstart(logfname,loghead,logmode,
1009 log_output,timestamp)
1009 log_output,timestamp)
1010 except:
1010 except:
1011 rc.opts.logfile = old_logfile
1011 rc.opts.logfile = old_logfile
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1013 else:
1013 else:
1014 # log input history up to this point, optionally interleaving
1014 # log input history up to this point, optionally interleaving
1015 # output if requested
1015 # output if requested
1016
1016
1017 if timestamp:
1017 if timestamp:
1018 # disable timestamping for the previous history, since we've
1018 # disable timestamping for the previous history, since we've
1019 # lost those already (no time machine here).
1019 # lost those already (no time machine here).
1020 logger.timestamp = False
1020 logger.timestamp = False
1021 if log_output:
1021 if log_output:
1022 log_write = logger.log_write
1022 log_write = logger.log_write
1023 input_hist = self.shell.input_hist
1023 input_hist = self.shell.input_hist
1024 output_hist = self.shell.output_hist
1024 output_hist = self.shell.output_hist
1025 for n in range(1,len(input_hist)-1):
1025 for n in range(1,len(input_hist)-1):
1026 log_write(input_hist[n].rstrip())
1026 log_write(input_hist[n].rstrip())
1027 if n in output_hist:
1027 if n in output_hist:
1028 log_write(repr(output_hist[n]),'output')
1028 log_write(repr(output_hist[n]),'output')
1029 else:
1029 else:
1030 logger.log_write(self.shell.input_hist[1:])
1030 logger.log_write(self.shell.input_hist[1:])
1031 if timestamp:
1031 if timestamp:
1032 # re-enable timestamping
1032 # re-enable timestamping
1033 logger.timestamp = True
1033 logger.timestamp = True
1034
1034
1035 print ('Activating auto-logging. '
1035 print ('Activating auto-logging. '
1036 'Current session state plus future input saved.')
1036 'Current session state plus future input saved.')
1037 logger.logstate()
1037 logger.logstate()
1038
1038
1039 def magic_logoff(self,parameter_s=''):
1039 def magic_logoff(self,parameter_s=''):
1040 """Temporarily stop logging.
1040 """Temporarily stop logging.
1041
1041
1042 You must have previously started logging."""
1042 You must have previously started logging."""
1043 self.shell.logger.switch_log(0)
1043 self.shell.logger.switch_log(0)
1044
1044
1045 def magic_logon(self,parameter_s=''):
1045 def magic_logon(self,parameter_s=''):
1046 """Restart logging.
1046 """Restart logging.
1047
1047
1048 This function is for restarting logging which you've temporarily
1048 This function is for restarting logging which you've temporarily
1049 stopped with %logoff. For starting logging for the first time, you
1049 stopped with %logoff. For starting logging for the first time, you
1050 must use the %logstart function, which allows you to specify an
1050 must use the %logstart function, which allows you to specify an
1051 optional log filename."""
1051 optional log filename."""
1052
1052
1053 self.shell.logger.switch_log(1)
1053 self.shell.logger.switch_log(1)
1054
1054
1055 def magic_logstate(self,parameter_s=''):
1055 def magic_logstate(self,parameter_s=''):
1056 """Print the status of the logging system."""
1056 """Print the status of the logging system."""
1057
1057
1058 self.shell.logger.logstate()
1058 self.shell.logger.logstate()
1059
1059
1060 def magic_pdb(self, parameter_s=''):
1060 def magic_pdb(self, parameter_s=''):
1061 """Control the calling of the pdb interactive debugger.
1061 """Control the calling of the pdb interactive debugger.
1062
1062
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1064 argument it works as a toggle.
1064 argument it works as a toggle.
1065
1065
1066 When an exception is triggered, IPython can optionally call the
1066 When an exception is triggered, IPython can optionally call the
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1068 this feature on and off."""
1068 this feature on and off."""
1069
1069
1070 par = parameter_s.strip().lower()
1070 par = parameter_s.strip().lower()
1071
1071
1072 if par:
1072 if par:
1073 try:
1073 try:
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1075 except KeyError:
1075 except KeyError:
1076 print ('Incorrect argument. Use on/1, off/0, '
1076 print ('Incorrect argument. Use on/1, off/0, '
1077 'or nothing for a toggle.')
1077 'or nothing for a toggle.')
1078 return
1078 return
1079 else:
1079 else:
1080 # toggle
1080 # toggle
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1082
1082
1083 # set on the shell
1083 # set on the shell
1084 self.shell.call_pdb = new_pdb
1084 self.shell.call_pdb = new_pdb
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1086
1086
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1088 opts=None,arg_lst=None,prog_ns=None):
1088 opts=None,arg_lst=None,prog_ns=None):
1089
1089
1090 """Run a statement through the python code profiler.
1090 """Run a statement through the python code profiler.
1091
1091
1092 Usage:\\
1092 Usage:\\
1093 %prun [options] statement
1093 %prun [options] statement
1094
1094
1095 The given statement (which doesn't require quote marks) is run via the
1095 The given statement (which doesn't require quote marks) is run via the
1096 python profiler in a manner similar to the profile.run() function.
1096 python profiler in a manner similar to the profile.run() function.
1097 Namespaces are internally managed to work correctly; profile.run
1097 Namespaces are internally managed to work correctly; profile.run
1098 cannot be used in IPython because it makes certain assumptions about
1098 cannot be used in IPython because it makes certain assumptions about
1099 namespaces which do not hold under IPython.
1099 namespaces which do not hold under IPython.
1100
1100
1101 Options:
1101 Options:
1102
1102
1103 -l <limit>: you can place restrictions on what or how much of the
1103 -l <limit>: you can place restrictions on what or how much of the
1104 profile gets printed. The limit value can be:
1104 profile gets printed. The limit value can be:
1105
1105
1106 * A string: only information for function names containing this string
1106 * A string: only information for function names containing this string
1107 is printed.
1107 is printed.
1108
1108
1109 * An integer: only these many lines are printed.
1109 * An integer: only these many lines are printed.
1110
1110
1111 * A float (between 0 and 1): this fraction of the report is printed
1111 * A float (between 0 and 1): this fraction of the report is printed
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1113
1113
1114 You can combine several limits with repeated use of the option. For
1114 You can combine several limits with repeated use of the option. For
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1116 information about class constructors.
1116 information about class constructors.
1117
1117
1118 -r: return the pstats.Stats object generated by the profiling. This
1118 -r: return the pstats.Stats object generated by the profiling. This
1119 object has all the information about the profile in it, and you can
1119 object has all the information about the profile in it, and you can
1120 later use it for further analysis or in other functions.
1120 later use it for further analysis or in other functions.
1121
1121
1122 Since magic functions have a particular form of calling which prevents
1122 Since magic functions have a particular form of calling which prevents
1123 you from writing something like:\\
1123 you from writing something like:\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1125 you must instead use IPython's automatic variables to assign this:\\
1125 you must instead use IPython's automatic variables to assign this:\\
1126 In [1]: %prun -r print 4 \\
1126 In [1]: %prun -r print 4 \\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1128 In [2]: stats = _
1128 In [2]: stats = _
1129
1129
1130 If you really need to assign this value via an explicit function call,
1130 If you really need to assign this value via an explicit function call,
1131 you can always tap directly into the true name of the magic function
1131 you can always tap directly into the true name of the magic function
1132 by using the ipmagic function (which IPython automatically adds to the
1132 by using the ipmagic function (which IPython automatically adds to the
1133 builtins):\\
1133 builtins):\\
1134 In [3]: stats = ipmagic('prun','-r print 4')
1134 In [3]: stats = ipmagic('prun','-r print 4')
1135
1135
1136 You can type ipmagic? for more details on ipmagic.
1136 You can type ipmagic? for more details on ipmagic.
1137
1137
1138 -s <key>: sort profile by given key. You can provide more than one key
1138 -s <key>: sort profile by given key. You can provide more than one key
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1140 default sorting key is 'time'.
1140 default sorting key is 'time'.
1141
1141
1142 The following is copied verbatim from the profile documentation
1142 The following is copied verbatim from the profile documentation
1143 referenced below:
1143 referenced below:
1144
1144
1145 When more than one key is provided, additional keys are used as
1145 When more than one key is provided, additional keys are used as
1146 secondary criteria when the there is equality in all keys selected
1146 secondary criteria when the there is equality in all keys selected
1147 before them.
1147 before them.
1148
1148
1149 Abbreviations can be used for any key names, as long as the
1149 Abbreviations can be used for any key names, as long as the
1150 abbreviation is unambiguous. The following are the keys currently
1150 abbreviation is unambiguous. The following are the keys currently
1151 defined:
1151 defined:
1152
1152
1153 Valid Arg Meaning\\
1153 Valid Arg Meaning\\
1154 "calls" call count\\
1154 "calls" call count\\
1155 "cumulative" cumulative time\\
1155 "cumulative" cumulative time\\
1156 "file" file name\\
1156 "file" file name\\
1157 "module" file name\\
1157 "module" file name\\
1158 "pcalls" primitive call count\\
1158 "pcalls" primitive call count\\
1159 "line" line number\\
1159 "line" line number\\
1160 "name" function name\\
1160 "name" function name\\
1161 "nfl" name/file/line\\
1161 "nfl" name/file/line\\
1162 "stdname" standard name\\
1162 "stdname" standard name\\
1163 "time" internal time
1163 "time" internal time
1164
1164
1165 Note that all sorts on statistics are in descending order (placing
1165 Note that all sorts on statistics are in descending order (placing
1166 most time consuming items first), where as name, file, and line number
1166 most time consuming items first), where as name, file, and line number
1167 searches are in ascending order (i.e., alphabetical). The subtle
1167 searches are in ascending order (i.e., alphabetical). The subtle
1168 distinction between "nfl" and "stdname" is that the standard name is a
1168 distinction between "nfl" and "stdname" is that the standard name is a
1169 sort of the name as printed, which means that the embedded line
1169 sort of the name as printed, which means that the embedded line
1170 numbers get compared in an odd way. For example, lines 3, 20, and 40
1170 numbers get compared in an odd way. For example, lines 3, 20, and 40
1171 would (if the file names were the same) appear in the string order
1171 would (if the file names were the same) appear in the string order
1172 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1172 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1173 line numbers. In fact, sort_stats("nfl") is the same as
1173 line numbers. In fact, sort_stats("nfl") is the same as
1174 sort_stats("name", "file", "line").
1174 sort_stats("name", "file", "line").
1175
1175
1176 -T <filename>: save profile results as shown on screen to a text
1176 -T <filename>: save profile results as shown on screen to a text
1177 file. The profile is still shown on screen.
1177 file. The profile is still shown on screen.
1178
1178
1179 -D <filename>: save (via dump_stats) profile statistics to given
1179 -D <filename>: save (via dump_stats) profile statistics to given
1180 filename. This data is in a format understod by the pstats module, and
1180 filename. This data is in a format understod by the pstats module, and
1181 is generated by a call to the dump_stats() method of profile
1181 is generated by a call to the dump_stats() method of profile
1182 objects. The profile is still shown on screen.
1182 objects. The profile is still shown on screen.
1183
1183
1184 If you want to run complete programs under the profiler's control, use
1184 If you want to run complete programs under the profiler's control, use
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1186 contains profiler specific options as described here.
1186 contains profiler specific options as described here.
1187
1187
1188 You can read the complete documentation for the profile module with:\\
1188 You can read the complete documentation for the profile module with:\\
1189 In [1]: import profile; profile.help() """
1189 In [1]: import profile; profile.help() """
1190
1190
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1192 # protect user quote marks
1192 # protect user quote marks
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1194
1194
1195 if user_mode: # regular user call
1195 if user_mode: # regular user call
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1197 list_all=1)
1197 list_all=1)
1198 namespace = self.shell.user_ns
1198 namespace = self.shell.user_ns
1199 else: # called to run a program by %run -p
1199 else: # called to run a program by %run -p
1200 try:
1200 try:
1201 filename = get_py_filename(arg_lst[0])
1201 filename = get_py_filename(arg_lst[0])
1202 except IOError,msg:
1202 except IOError,msg:
1203 error(msg)
1203 error(msg)
1204 return
1204 return
1205
1205
1206 arg_str = 'execfile(filename,prog_ns)'
1206 arg_str = 'execfile(filename,prog_ns)'
1207 namespace = locals()
1207 namespace = locals()
1208
1208
1209 opts.merge(opts_def)
1209 opts.merge(opts_def)
1210
1210
1211 prof = profile.Profile()
1211 prof = profile.Profile()
1212 try:
1212 try:
1213 prof = prof.runctx(arg_str,namespace,namespace)
1213 prof = prof.runctx(arg_str,namespace,namespace)
1214 sys_exit = ''
1214 sys_exit = ''
1215 except SystemExit:
1215 except SystemExit:
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1217
1217
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1219
1219
1220 lims = opts.l
1220 lims = opts.l
1221 if lims:
1221 if lims:
1222 lims = [] # rebuild lims with ints/floats/strings
1222 lims = [] # rebuild lims with ints/floats/strings
1223 for lim in opts.l:
1223 for lim in opts.l:
1224 try:
1224 try:
1225 lims.append(int(lim))
1225 lims.append(int(lim))
1226 except ValueError:
1226 except ValueError:
1227 try:
1227 try:
1228 lims.append(float(lim))
1228 lims.append(float(lim))
1229 except ValueError:
1229 except ValueError:
1230 lims.append(lim)
1230 lims.append(lim)
1231
1231
1232 # trap output
1232 # trap output
1233 sys_stdout = sys.stdout
1233 sys_stdout = sys.stdout
1234 stdout_trap = StringIO()
1234 stdout_trap = StringIO()
1235 try:
1235 try:
1236 sys.stdout = stdout_trap
1236 sys.stdout = stdout_trap
1237 stats.print_stats(*lims)
1237 stats.print_stats(*lims)
1238 finally:
1238 finally:
1239 sys.stdout = sys_stdout
1239 sys.stdout = sys_stdout
1240 output = stdout_trap.getvalue()
1240 output = stdout_trap.getvalue()
1241 output = output.rstrip()
1241 output = output.rstrip()
1242
1242
1243 page(output,screen_lines=self.shell.rc.screen_length)
1243 page(output,screen_lines=self.shell.rc.screen_length)
1244 print sys_exit,
1244 print sys_exit,
1245
1245
1246 dump_file = opts.D[0]
1246 dump_file = opts.D[0]
1247 text_file = opts.T[0]
1247 text_file = opts.T[0]
1248 if dump_file:
1248 if dump_file:
1249 prof.dump_stats(dump_file)
1249 prof.dump_stats(dump_file)
1250 print '\n*** Profile stats marshalled to file',\
1250 print '\n*** Profile stats marshalled to file',\
1251 `dump_file`+'.',sys_exit
1251 `dump_file`+'.',sys_exit
1252 if text_file:
1252 if text_file:
1253 file(text_file,'w').write(output)
1253 file(text_file,'w').write(output)
1254 print '\n*** Profile printout saved to text file',\
1254 print '\n*** Profile printout saved to text file',\
1255 `text_file`+'.',sys_exit
1255 `text_file`+'.',sys_exit
1256
1256
1257 if opts.has_key('r'):
1257 if opts.has_key('r'):
1258 return stats
1258 return stats
1259 else:
1259 else:
1260 return None
1260 return None
1261
1261
1262 def magic_run(self, parameter_s ='',runner=None):
1262 def magic_run(self, parameter_s ='',runner=None):
1263 """Run the named file inside IPython as a program.
1263 """Run the named file inside IPython as a program.
1264
1264
1265 Usage:\\
1265 Usage:\\
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1267
1267
1268 Parameters after the filename are passed as command-line arguments to
1268 Parameters after the filename are passed as command-line arguments to
1269 the program (put in sys.argv). Then, control returns to IPython's
1269 the program (put in sys.argv). Then, control returns to IPython's
1270 prompt.
1270 prompt.
1271
1271
1272 This is similar to running at a system prompt:\\
1272 This is similar to running at a system prompt:\\
1273 $ python file args\\
1273 $ python file args\\
1274 but with the advantage of giving you IPython's tracebacks, and of
1274 but with the advantage of giving you IPython's tracebacks, and of
1275 loading all variables into your interactive namespace for further use
1275 loading all variables into your interactive namespace for further use
1276 (unless -p is used, see below).
1276 (unless -p is used, see below).
1277
1277
1278 The file is executed in a namespace initially consisting only of
1278 The file is executed in a namespace initially consisting only of
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1280 sees its environment as if it were being run as a stand-alone
1280 sees its environment as if it were being run as a stand-alone
1281 program. But after execution, the IPython interactive namespace gets
1281 program. But after execution, the IPython interactive namespace gets
1282 updated with all variables defined in the program (except for __name__
1282 updated with all variables defined in the program (except for __name__
1283 and sys.argv). This allows for very convenient loading of code for
1283 and sys.argv). This allows for very convenient loading of code for
1284 interactive work, while giving each program a 'clean sheet' to run in.
1284 interactive work, while giving each program a 'clean sheet' to run in.
1285
1285
1286 Options:
1286 Options:
1287
1287
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1289 without extension (as python does under import). This allows running
1289 without extension (as python does under import). This allows running
1290 scripts and reloading the definitions in them without calling code
1290 scripts and reloading the definitions in them without calling code
1291 protected by an ' if __name__ == "__main__" ' clause.
1291 protected by an ' if __name__ == "__main__" ' clause.
1292
1292
1293 -i: run the file in IPython's namespace instead of an empty one. This
1293 -i: run the file in IPython's namespace instead of an empty one. This
1294 is useful if you are experimenting with code written in a text editor
1294 is useful if you are experimenting with code written in a text editor
1295 which depends on variables defined interactively.
1295 which depends on variables defined interactively.
1296
1296
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1298 being run. This is particularly useful if IPython is being used to
1298 being run. This is particularly useful if IPython is being used to
1299 run unittests, which always exit with a sys.exit() call. In such
1299 run unittests, which always exit with a sys.exit() call. In such
1300 cases you are interested in the output of the test results, not in
1300 cases you are interested in the output of the test results, not in
1301 seeing a traceback of the unittest module.
1301 seeing a traceback of the unittest module.
1302
1302
1303 -t: print timing information at the end of the run. IPython will give
1303 -t: print timing information at the end of the run. IPython will give
1304 you an estimated CPU time consumption for your script, which under
1304 you an estimated CPU time consumption for your script, which under
1305 Unix uses the resource module to avoid the wraparound problems of
1305 Unix uses the resource module to avoid the wraparound problems of
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1307 is also given (for Windows platforms this is reported as 0.0).
1307 is also given (for Windows platforms this is reported as 0.0).
1308
1308
1309 If -t is given, an additional -N<N> option can be given, where <N>
1309 If -t is given, an additional -N<N> option can be given, where <N>
1310 must be an integer indicating how many times you want the script to
1310 must be an integer indicating how many times you want the script to
1311 run. The final timing report will include total and per run results.
1311 run. The final timing report will include total and per run results.
1312
1312
1313 For example (testing the script uniq_stable.py):
1313 For example (testing the script uniq_stable.py):
1314
1314
1315 In [1]: run -t uniq_stable
1315 In [1]: run -t uniq_stable
1316
1316
1317 IPython CPU timings (estimated):\\
1317 IPython CPU timings (estimated):\\
1318 User : 0.19597 s.\\
1318 User : 0.19597 s.\\
1319 System: 0.0 s.\\
1319 System: 0.0 s.\\
1320
1320
1321 In [2]: run -t -N5 uniq_stable
1321 In [2]: run -t -N5 uniq_stable
1322
1322
1323 IPython CPU timings (estimated):\\
1323 IPython CPU timings (estimated):\\
1324 Total runs performed: 5\\
1324 Total runs performed: 5\\
1325 Times : Total Per run\\
1325 Times : Total Per run\\
1326 User : 0.910862 s, 0.1821724 s.\\
1326 User : 0.910862 s, 0.1821724 s.\\
1327 System: 0.0 s, 0.0 s.
1327 System: 0.0 s, 0.0 s.
1328
1328
1329 -d: run your program under the control of pdb, the Python debugger.
1329 -d: run your program under the control of pdb, the Python debugger.
1330 This allows you to execute your program step by step, watch variables,
1330 This allows you to execute your program step by step, watch variables,
1331 etc. Internally, what IPython does is similar to calling:
1331 etc. Internally, what IPython does is similar to calling:
1332
1332
1333 pdb.run('execfile("YOURFILENAME")')
1333 pdb.run('execfile("YOURFILENAME")')
1334
1334
1335 with a breakpoint set on line 1 of your file. You can change the line
1335 with a breakpoint set on line 1 of your file. You can change the line
1336 number for this automatic breakpoint to be <N> by using the -bN option
1336 number for this automatic breakpoint to be <N> by using the -bN option
1337 (where N must be an integer). For example:
1337 (where N must be an integer). For example:
1338
1338
1339 %run -d -b40 myscript
1339 %run -d -b40 myscript
1340
1340
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1342 the first breakpoint must be set on a line which actually does
1342 the first breakpoint must be set on a line which actually does
1343 something (not a comment or docstring) for it to stop execution.
1343 something (not a comment or docstring) for it to stop execution.
1344
1344
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1346 first enter 'c' (without qoutes) to start execution up to the first
1346 first enter 'c' (without qoutes) to start execution up to the first
1347 breakpoint.
1347 breakpoint.
1348
1348
1349 Entering 'help' gives information about the use of the debugger. You
1349 Entering 'help' gives information about the use of the debugger. You
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1351 at a prompt.
1351 at a prompt.
1352
1352
1353 -p: run program under the control of the Python profiler module (which
1353 -p: run program under the control of the Python profiler module (which
1354 prints a detailed report of execution times, function calls, etc).
1354 prints a detailed report of execution times, function calls, etc).
1355
1355
1356 You can pass other options after -p which affect the behavior of the
1356 You can pass other options after -p which affect the behavior of the
1357 profiler itself. See the docs for %prun for details.
1357 profiler itself. See the docs for %prun for details.
1358
1358
1359 In this mode, the program's variables do NOT propagate back to the
1359 In this mode, the program's variables do NOT propagate back to the
1360 IPython interactive namespace (because they remain in the namespace
1360 IPython interactive namespace (because they remain in the namespace
1361 where the profiler executes them).
1361 where the profiler executes them).
1362
1362
1363 Internally this triggers a call to %prun, see its documentation for
1363 Internally this triggers a call to %prun, see its documentation for
1364 details on the options available specifically for profiling."""
1364 details on the options available specifically for profiling."""
1365
1365
1366 # get arguments and set sys.argv for program to be run.
1366 # get arguments and set sys.argv for program to be run.
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1368 mode='list',list_all=1)
1368 mode='list',list_all=1)
1369
1369
1370 try:
1370 try:
1371 filename = get_py_filename(arg_lst[0])
1371 filename = get_py_filename(arg_lst[0])
1372 except IndexError:
1372 except IndexError:
1373 warn('you must provide at least a filename.')
1373 warn('you must provide at least a filename.')
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1375 return
1375 return
1376 except IOError,msg:
1376 except IOError,msg:
1377 error(msg)
1377 error(msg)
1378 return
1378 return
1379
1379
1380 # Control the response to exit() calls made by the script being run
1380 # Control the response to exit() calls made by the script being run
1381 exit_ignore = opts.has_key('e')
1381 exit_ignore = opts.has_key('e')
1382
1382
1383 # Make sure that the running script gets a proper sys.argv as if it
1383 # Make sure that the running script gets a proper sys.argv as if it
1384 # were run from a system shell.
1384 # were run from a system shell.
1385 save_argv = sys.argv # save it for later restoring
1385 save_argv = sys.argv # save it for later restoring
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1387
1387
1388 if opts.has_key('i'):
1388 if opts.has_key('i'):
1389 prog_ns = self.shell.user_ns
1389 prog_ns = self.shell.user_ns
1390 __name__save = self.shell.user_ns['__name__']
1390 __name__save = self.shell.user_ns['__name__']
1391 prog_ns['__name__'] = '__main__'
1391 prog_ns['__name__'] = '__main__'
1392 else:
1392 else:
1393 if opts.has_key('n'):
1393 if opts.has_key('n'):
1394 name = os.path.splitext(os.path.basename(filename))[0]
1394 name = os.path.splitext(os.path.basename(filename))[0]
1395 else:
1395 else:
1396 name = '__main__'
1396 name = '__main__'
1397 prog_ns = {'__name__':name}
1397 prog_ns = {'__name__':name}
1398
1398
1399 # pickle fix. See iplib for an explanation. But we need to make sure
1399 # pickle fix. See iplib for an explanation. But we need to make sure
1400 # that, if we overwrite __main__, we replace it at the end
1400 # that, if we overwrite __main__, we replace it at the end
1401 if prog_ns['__name__'] == '__main__':
1401 if prog_ns['__name__'] == '__main__':
1402 restore_main = sys.modules['__main__']
1402 restore_main = sys.modules['__main__']
1403 else:
1403 else:
1404 restore_main = False
1404 restore_main = False
1405
1405
1406 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1406 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1407
1407
1408 stats = None
1408 stats = None
1409 try:
1409 try:
1410 if opts.has_key('p'):
1410 if opts.has_key('p'):
1411 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1411 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1412 else:
1412 else:
1413 if opts.has_key('d'):
1413 if opts.has_key('d'):
1414 deb = Debugger.Pdb(self.shell.rc.colors)
1414 deb = Debugger.Pdb(self.shell.rc.colors)
1415 # reset Breakpoint state, which is moronically kept
1415 # reset Breakpoint state, which is moronically kept
1416 # in a class
1416 # in a class
1417 bdb.Breakpoint.next = 1
1417 bdb.Breakpoint.next = 1
1418 bdb.Breakpoint.bplist = {}
1418 bdb.Breakpoint.bplist = {}
1419 bdb.Breakpoint.bpbynumber = [None]
1419 bdb.Breakpoint.bpbynumber = [None]
1420 # Set an initial breakpoint to stop execution
1420 # Set an initial breakpoint to stop execution
1421 maxtries = 10
1421 maxtries = 10
1422 bp = int(opts.get('b',[1])[0])
1422 bp = int(opts.get('b',[1])[0])
1423 checkline = deb.checkline(filename,bp)
1423 checkline = deb.checkline(filename,bp)
1424 if not checkline:
1424 if not checkline:
1425 for bp in range(bp+1,bp+maxtries+1):
1425 for bp in range(bp+1,bp+maxtries+1):
1426 if deb.checkline(filename,bp):
1426 if deb.checkline(filename,bp):
1427 break
1427 break
1428 else:
1428 else:
1429 msg = ("\nI failed to find a valid line to set "
1429 msg = ("\nI failed to find a valid line to set "
1430 "a breakpoint\n"
1430 "a breakpoint\n"
1431 "after trying up to line: %s.\n"
1431 "after trying up to line: %s.\n"
1432 "Please set a valid breakpoint manually "
1432 "Please set a valid breakpoint manually "
1433 "with the -b option." % bp)
1433 "with the -b option." % bp)
1434 error(msg)
1434 error(msg)
1435 return
1435 return
1436 # if we find a good linenumber, set the breakpoint
1436 # if we find a good linenumber, set the breakpoint
1437 deb.do_break('%s:%s' % (filename,bp))
1437 deb.do_break('%s:%s' % (filename,bp))
1438 # Start file run
1438 # Start file run
1439 print "NOTE: Enter 'c' at the",
1439 print "NOTE: Enter 'c' at the",
1440 print "ipdb> prompt to start your script."
1440 print "ipdb> prompt to start your script."
1441 try:
1441 try:
1442 deb.run('execfile("%s")' % filename,prog_ns)
1442 deb.run('execfile("%s")' % filename,prog_ns)
1443 except:
1443 except:
1444 etype, value, tb = sys.exc_info()
1444 etype, value, tb = sys.exc_info()
1445 # Skip three frames in the traceback: the %run one,
1445 # Skip three frames in the traceback: the %run one,
1446 # one inside bdb.py, and the command-line typed by the
1446 # one inside bdb.py, and the command-line typed by the
1447 # user (run by exec in pdb itself).
1447 # user (run by exec in pdb itself).
1448 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1448 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1449 else:
1449 else:
1450 if runner is None:
1450 if runner is None:
1451 runner = self.shell.safe_execfile
1451 runner = self.shell.safe_execfile
1452 if opts.has_key('t'):
1452 if opts.has_key('t'):
1453 try:
1453 try:
1454 nruns = int(opts['N'][0])
1454 nruns = int(opts['N'][0])
1455 if nruns < 1:
1455 if nruns < 1:
1456 error('Number of runs must be >=1')
1456 error('Number of runs must be >=1')
1457 return
1457 return
1458 except (KeyError):
1458 except (KeyError):
1459 nruns = 1
1459 nruns = 1
1460 if nruns == 1:
1460 if nruns == 1:
1461 t0 = clock2()
1461 t0 = clock2()
1462 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1462 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1463 t1 = clock2()
1463 t1 = clock2()
1464 t_usr = t1[0]-t0[0]
1464 t_usr = t1[0]-t0[0]
1465 t_sys = t1[1]-t1[1]
1465 t_sys = t1[1]-t1[1]
1466 print "\nIPython CPU timings (estimated):"
1466 print "\nIPython CPU timings (estimated):"
1467 print " User : %10s s." % t_usr
1467 print " User : %10s s." % t_usr
1468 print " System: %10s s." % t_sys
1468 print " System: %10s s." % t_sys
1469 else:
1469 else:
1470 runs = range(nruns)
1470 runs = range(nruns)
1471 t0 = clock2()
1471 t0 = clock2()
1472 for nr in runs:
1472 for nr in runs:
1473 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1473 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1474 t1 = clock2()
1474 t1 = clock2()
1475 t_usr = t1[0]-t0[0]
1475 t_usr = t1[0]-t0[0]
1476 t_sys = t1[1]-t1[1]
1476 t_sys = t1[1]-t1[1]
1477 print "\nIPython CPU timings (estimated):"
1477 print "\nIPython CPU timings (estimated):"
1478 print "Total runs performed:",nruns
1478 print "Total runs performed:",nruns
1479 print " Times : %10s %10s" % ('Total','Per run')
1479 print " Times : %10s %10s" % ('Total','Per run')
1480 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1480 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1481 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1481 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1482
1482
1483 else:
1483 else:
1484 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1484 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1485 if opts.has_key('i'):
1485 if opts.has_key('i'):
1486 self.shell.user_ns['__name__'] = __name__save
1486 self.shell.user_ns['__name__'] = __name__save
1487 else:
1487 else:
1488 # update IPython interactive namespace
1488 # update IPython interactive namespace
1489 del prog_ns['__name__']
1489 del prog_ns['__name__']
1490 self.shell.user_ns.update(prog_ns)
1490 self.shell.user_ns.update(prog_ns)
1491 finally:
1491 finally:
1492 sys.argv = save_argv
1492 sys.argv = save_argv
1493 if restore_main:
1493 if restore_main:
1494 sys.modules['__main__'] = restore_main
1494 sys.modules['__main__'] = restore_main
1495 return stats
1495 return stats
1496
1496
1497 def magic_runlog(self, parameter_s =''):
1497 def magic_runlog(self, parameter_s =''):
1498 """Run files as logs.
1498 """Run files as logs.
1499
1499
1500 Usage:\\
1500 Usage:\\
1501 %runlog file1 file2 ...
1501 %runlog file1 file2 ...
1502
1502
1503 Run the named files (treating them as log files) in sequence inside
1503 Run the named files (treating them as log files) in sequence inside
1504 the interpreter, and return to the prompt. This is much slower than
1504 the interpreter, and return to the prompt. This is much slower than
1505 %run because each line is executed in a try/except block, but it
1505 %run because each line is executed in a try/except block, but it
1506 allows running files with syntax errors in them.
1506 allows running files with syntax errors in them.
1507
1507
1508 Normally IPython will guess when a file is one of its own logfiles, so
1508 Normally IPython will guess when a file is one of its own logfiles, so
1509 you can typically use %run even for logs. This shorthand allows you to
1509 you can typically use %run even for logs. This shorthand allows you to
1510 force any file to be treated as a log file."""
1510 force any file to be treated as a log file."""
1511
1511
1512 for f in parameter_s.split():
1512 for f in parameter_s.split():
1513 self.shell.safe_execfile(f,self.shell.user_ns,
1513 self.shell.safe_execfile(f,self.shell.user_ns,
1514 self.shell.user_ns,islog=1)
1514 self.shell.user_ns,islog=1)
1515
1515
1516 def magic_time(self,parameter_s = ''):
1516 def magic_time(self,parameter_s = ''):
1517 """Time execution of a Python statement or expression.
1517 """Time execution of a Python statement or expression.
1518
1518
1519 The CPU and wall clock times are printed, and the value of the
1519 The CPU and wall clock times are printed, and the value of the
1520 expression (if any) is returned. Note that under Win32, system time
1520 expression (if any) is returned. Note that under Win32, system time
1521 is always reported as 0, since it can not be measured.
1521 is always reported as 0, since it can not be measured.
1522
1522
1523 This function provides very basic timing functionality. In Python
1523 This function provides very basic timing functionality. In Python
1524 2.3, the timeit module offers more control and sophistication, but for
1524 2.3, the timeit module offers more control and sophistication, but for
1525 now IPython supports Python 2.2, so we can not rely on timeit being
1525 now IPython supports Python 2.2, so we can not rely on timeit being
1526 present.
1526 present.
1527
1527
1528 Some examples:
1528 Some examples:
1529
1529
1530 In [1]: time 2**128
1530 In [1]: time 2**128
1531 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1531 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1532 Wall time: 0.00
1532 Wall time: 0.00
1533 Out[1]: 340282366920938463463374607431768211456L
1533 Out[1]: 340282366920938463463374607431768211456L
1534
1534
1535 In [2]: n = 1000000
1535 In [2]: n = 1000000
1536
1536
1537 In [3]: time sum(range(n))
1537 In [3]: time sum(range(n))
1538 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1538 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1539 Wall time: 1.37
1539 Wall time: 1.37
1540 Out[3]: 499999500000L
1540 Out[3]: 499999500000L
1541
1541
1542 In [4]: time print 'hello world'
1542 In [4]: time print 'hello world'
1543 hello world
1543 hello world
1544 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1544 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1545 Wall time: 0.00
1545 Wall time: 0.00
1546 """
1546 """
1547
1547
1548 # fail immediately if the given expression can't be compiled
1548 # fail immediately if the given expression can't be compiled
1549 try:
1549 try:
1550 mode = 'eval'
1550 mode = 'eval'
1551 code = compile(parameter_s,'<timed eval>',mode)
1551 code = compile(parameter_s,'<timed eval>',mode)
1552 except SyntaxError:
1552 except SyntaxError:
1553 mode = 'exec'
1553 mode = 'exec'
1554 code = compile(parameter_s,'<timed exec>',mode)
1554 code = compile(parameter_s,'<timed exec>',mode)
1555 # skew measurement as little as possible
1555 # skew measurement as little as possible
1556 glob = self.shell.user_ns
1556 glob = self.shell.user_ns
1557 clk = clock2
1557 clk = clock2
1558 wtime = time.time
1558 wtime = time.time
1559 # time execution
1559 # time execution
1560 wall_st = wtime()
1560 wall_st = wtime()
1561 if mode=='eval':
1561 if mode=='eval':
1562 st = clk()
1562 st = clk()
1563 out = eval(code,glob)
1563 out = eval(code,glob)
1564 end = clk()
1564 end = clk()
1565 else:
1565 else:
1566 st = clk()
1566 st = clk()
1567 exec code in glob
1567 exec code in glob
1568 end = clk()
1568 end = clk()
1569 out = None
1569 out = None
1570 wall_end = wtime()
1570 wall_end = wtime()
1571 # Compute actual times and report
1571 # Compute actual times and report
1572 wall_time = wall_end-wall_st
1572 wall_time = wall_end-wall_st
1573 cpu_user = end[0]-st[0]
1573 cpu_user = end[0]-st[0]
1574 cpu_sys = end[1]-st[1]
1574 cpu_sys = end[1]-st[1]
1575 cpu_tot = cpu_user+cpu_sys
1575 cpu_tot = cpu_user+cpu_sys
1576 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1576 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1577 (cpu_user,cpu_sys,cpu_tot)
1577 (cpu_user,cpu_sys,cpu_tot)
1578 print "Wall time: %.2f" % wall_time
1578 print "Wall time: %.2f" % wall_time
1579 return out
1579 return out
1580
1580
1581 def magic_macro(self,parameter_s = ''):
1581 def magic_macro(self,parameter_s = ''):
1582 """Define a set of input lines as a macro for future re-execution.
1582 """Define a set of input lines as a macro for future re-execution.
1583
1583
1584 Usage:\\
1584 Usage:\\
1585 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1585 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1586
1586
1587 This will define a global variable called `name` which is a string
1587 This will define a global variable called `name` which is a string
1588 made of joining the slices and lines you specify (n1,n2,... numbers
1588 made of joining the slices and lines you specify (n1,n2,... numbers
1589 above) from your input history into a single string. This variable
1589 above) from your input history into a single string. This variable
1590 acts like an automatic function which re-executes those lines as if
1590 acts like an automatic function which re-executes those lines as if
1591 you had typed them. You just type 'name' at the prompt and the code
1591 you had typed them. You just type 'name' at the prompt and the code
1592 executes.
1592 executes.
1593
1593
1594 The notation for indicating number ranges is: n1-n2 means 'use line
1594 The notation for indicating number ranges is: n1-n2 means 'use line
1595 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1595 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1596 using the lines numbered 5,6 and 7.
1596 using the lines numbered 5,6 and 7.
1597
1597
1598 Note: as a 'hidden' feature, you can also use traditional python slice
1598 Note: as a 'hidden' feature, you can also use traditional python slice
1599 notation, where N:M means numbers N through M-1.
1599 notation, where N:M means numbers N through M-1.
1600
1600
1601 For example, if your history contains (%hist prints it):
1601 For example, if your history contains (%hist prints it):
1602
1602
1603 44: x=1\\
1603 44: x=1\\
1604 45: y=3\\
1604 45: y=3\\
1605 46: z=x+y\\
1605 46: z=x+y\\
1606 47: print x\\
1606 47: print x\\
1607 48: a=5\\
1607 48: a=5\\
1608 49: print 'x',x,'y',y\\
1608 49: print 'x',x,'y',y\\
1609
1609
1610 you can create a macro with lines 44 through 47 (included) and line 49
1610 you can create a macro with lines 44 through 47 (included) and line 49
1611 called my_macro with:
1611 called my_macro with:
1612
1612
1613 In [51]: %macro my_macro 44-47 49
1613 In [51]: %macro my_macro 44-47 49
1614
1614
1615 Now, typing `my_macro` (without quotes) will re-execute all this code
1615 Now, typing `my_macro` (without quotes) will re-execute all this code
1616 in one pass.
1616 in one pass.
1617
1617
1618 You don't need to give the line-numbers in order, and any given line
1618 You don't need to give the line-numbers in order, and any given line
1619 number can appear multiple times. You can assemble macros with any
1619 number can appear multiple times. You can assemble macros with any
1620 lines from your input history in any order.
1620 lines from your input history in any order.
1621
1621
1622 The macro is a simple object which holds its value in an attribute,
1622 The macro is a simple object which holds its value in an attribute,
1623 but IPython's display system checks for macros and executes them as
1623 but IPython's display system checks for macros and executes them as
1624 code instead of printing them when you type their name.
1624 code instead of printing them when you type their name.
1625
1625
1626 You can view a macro's contents by explicitly printing it with:
1626 You can view a macro's contents by explicitly printing it with:
1627
1627
1628 'print macro_name'.
1628 'print macro_name'.
1629
1629
1630 For one-off cases which DON'T contain magic function calls in them you
1630 For one-off cases which DON'T contain magic function calls in them you
1631 can obtain similar results by explicitly executing slices from your
1631 can obtain similar results by explicitly executing slices from your
1632 input history with:
1632 input history with:
1633
1633
1634 In [60]: exec In[44:48]+In[49]"""
1634 In [60]: exec In[44:48]+In[49]"""
1635
1635
1636 args = parameter_s.split()
1636 args = parameter_s.split()
1637 name,ranges = args[0], args[1:]
1637 name,ranges = args[0], args[1:]
1638 #print 'rng',ranges # dbg
1638 #print 'rng',ranges # dbg
1639 lines = self.extract_input_slices(ranges)
1639 lines = self.extract_input_slices(ranges)
1640 macro = Macro(lines)
1640 macro = Macro(lines)
1641 self.shell.user_ns.update({name:macro})
1641 self.shell.user_ns.update({name:macro})
1642 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1642 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1643 print 'Macro contents:'
1643 print 'Macro contents:'
1644 print macro,
1644 print macro,
1645
1645
1646 def magic_save(self,parameter_s = ''):
1646 def magic_save(self,parameter_s = ''):
1647 """Save a set of lines to a given filename.
1647 """Save a set of lines to a given filename.
1648
1648
1649 Usage:\\
1649 Usage:\\
1650 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1650 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1651
1651
1652 This function uses the same syntax as %macro for line extraction, but
1652 This function uses the same syntax as %macro for line extraction, but
1653 instead of creating a macro it saves the resulting string to the
1653 instead of creating a macro it saves the resulting string to the
1654 filename you specify.
1654 filename you specify.
1655
1655
1656 It adds a '.py' extension to the file if you don't do so yourself, and
1656 It adds a '.py' extension to the file if you don't do so yourself, and
1657 it asks for confirmation before overwriting existing files."""
1657 it asks for confirmation before overwriting existing files."""
1658
1658
1659 args = parameter_s.split()
1659 args = parameter_s.split()
1660 fname,ranges = args[0], args[1:]
1660 fname,ranges = args[0], args[1:]
1661 if not fname.endswith('.py'):
1661 if not fname.endswith('.py'):
1662 fname += '.py'
1662 fname += '.py'
1663 if os.path.isfile(fname):
1663 if os.path.isfile(fname):
1664 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1664 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1665 if ans.lower() not in ['y','yes']:
1665 if ans.lower() not in ['y','yes']:
1666 print 'Operation cancelled.'
1666 print 'Operation cancelled.'
1667 return
1667 return
1668 cmds = ''.join(self.extract_input_slices(ranges))
1668 cmds = ''.join(self.extract_input_slices(ranges))
1669 f = file(fname,'w')
1669 f = file(fname,'w')
1670 f.write(cmds)
1670 f.write(cmds)
1671 f.close()
1671 f.close()
1672 print 'The following commands were written to file `%s`:' % fname
1672 print 'The following commands were written to file `%s`:' % fname
1673 print cmds
1673 print cmds
1674
1674
1675 def _edit_macro(self,mname,macro):
1675 def _edit_macro(self,mname,macro):
1676 """open an editor with the macro data in a file"""
1676 """open an editor with the macro data in a file"""
1677 filename = self.shell.mktempfile(macro.value)
1677 filename = self.shell.mktempfile(macro.value)
1678 self.shell.hooks.editor(filename)
1678 self.shell.hooks.editor(filename)
1679
1679
1680 # and make a new macro object, to replace the old one
1680 # and make a new macro object, to replace the old one
1681 mfile = open(filename)
1681 mfile = open(filename)
1682 mvalue = mfile.read()
1682 mvalue = mfile.read()
1683 mfile.close()
1683 mfile.close()
1684 self.shell.user_ns[mname] = Macro(mvalue)
1684 self.shell.user_ns[mname] = Macro(mvalue)
1685
1685
1686 def magic_ed(self,parameter_s=''):
1686 def magic_ed(self,parameter_s=''):
1687 """Alias to %edit."""
1687 """Alias to %edit."""
1688 return self.magic_edit(parameter_s)
1688 return self.magic_edit(parameter_s)
1689
1689
1690 def magic_edit(self,parameter_s='',last_call=['','']):
1690 def magic_edit(self,parameter_s='',last_call=['','']):
1691 """Bring up an editor and execute the resulting code.
1691 """Bring up an editor and execute the resulting code.
1692
1692
1693 Usage:
1693 Usage:
1694 %edit [options] [args]
1694 %edit [options] [args]
1695
1695
1696 %edit runs IPython's editor hook. The default version of this hook is
1696 %edit runs IPython's editor hook. The default version of this hook is
1697 set to call the __IPYTHON__.rc.editor command. This is read from your
1697 set to call the __IPYTHON__.rc.editor command. This is read from your
1698 environment variable $EDITOR. If this isn't found, it will default to
1698 environment variable $EDITOR. If this isn't found, it will default to
1699 vi under Linux/Unix and to notepad under Windows. See the end of this
1699 vi under Linux/Unix and to notepad under Windows. See the end of this
1700 docstring for how to change the editor hook.
1700 docstring for how to change the editor hook.
1701
1701
1702 You can also set the value of this editor via the command line option
1702 You can also set the value of this editor via the command line option
1703 '-editor' or in your ipythonrc file. This is useful if you wish to use
1703 '-editor' or in your ipythonrc file. This is useful if you wish to use
1704 specifically for IPython an editor different from your typical default
1704 specifically for IPython an editor different from your typical default
1705 (and for Windows users who typically don't set environment variables).
1705 (and for Windows users who typically don't set environment variables).
1706
1706
1707 This command allows you to conveniently edit multi-line code right in
1707 This command allows you to conveniently edit multi-line code right in
1708 your IPython session.
1708 your IPython session.
1709
1709
1710 If called without arguments, %edit opens up an empty editor with a
1710 If called without arguments, %edit opens up an empty editor with a
1711 temporary file and will execute the contents of this file when you
1711 temporary file and will execute the contents of this file when you
1712 close it (don't forget to save it!).
1712 close it (don't forget to save it!).
1713
1713
1714
1714
1715 Options:
1715 Options:
1716
1716
1717 -p: this will call the editor with the same data as the previous time
1717 -p: this will call the editor with the same data as the previous time
1718 it was used, regardless of how long ago (in your current session) it
1718 it was used, regardless of how long ago (in your current session) it
1719 was.
1719 was.
1720
1720
1721 -x: do not execute the edited code immediately upon exit. This is
1721 -x: do not execute the edited code immediately upon exit. This is
1722 mainly useful if you are editing programs which need to be called with
1722 mainly useful if you are editing programs which need to be called with
1723 command line arguments, which you can then do using %run.
1723 command line arguments, which you can then do using %run.
1724
1724
1725
1725
1726 Arguments:
1726 Arguments:
1727
1727
1728 If arguments are given, the following possibilites exist:
1728 If arguments are given, the following possibilites exist:
1729
1729
1730 - The arguments are numbers or pairs of colon-separated numbers (like
1730 - The arguments are numbers or pairs of colon-separated numbers (like
1731 1 4:8 9). These are interpreted as lines of previous input to be
1731 1 4:8 9). These are interpreted as lines of previous input to be
1732 loaded into the editor. The syntax is the same of the %macro command.
1732 loaded into the editor. The syntax is the same of the %macro command.
1733
1733
1734 - If the argument doesn't start with a number, it is evaluated as a
1734 - If the argument doesn't start with a number, it is evaluated as a
1735 variable and its contents loaded into the editor. You can thus edit
1735 variable and its contents loaded into the editor. You can thus edit
1736 any string which contains python code (including the result of
1736 any string which contains python code (including the result of
1737 previous edits).
1737 previous edits).
1738
1738
1739 - If the argument is the name of an object (other than a string),
1739 - If the argument is the name of an object (other than a string),
1740 IPython will try to locate the file where it was defined and open the
1740 IPython will try to locate the file where it was defined and open the
1741 editor at the point where it is defined. You can use `%edit function`
1741 editor at the point where it is defined. You can use `%edit function`
1742 to load an editor exactly at the point where 'function' is defined,
1742 to load an editor exactly at the point where 'function' is defined,
1743 edit it and have the file be executed automatically.
1743 edit it and have the file be executed automatically.
1744
1744
1745 If the object is a macro (see %macro for details), this opens up your
1745 If the object is a macro (see %macro for details), this opens up your
1746 specified editor with a temporary file containing the macro's data.
1746 specified editor with a temporary file containing the macro's data.
1747 Upon exit, the macro is reloaded with the contents of the file.
1747 Upon exit, the macro is reloaded with the contents of the file.
1748
1748
1749 Note: opening at an exact line is only supported under Unix, and some
1749 Note: opening at an exact line is only supported under Unix, and some
1750 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1750 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1751 '+NUMBER' parameter necessary for this feature. Good editors like
1751 '+NUMBER' parameter necessary for this feature. Good editors like
1752 (X)Emacs, vi, jed, pico and joe all do.
1752 (X)Emacs, vi, jed, pico and joe all do.
1753
1753
1754 - If the argument is not found as a variable, IPython will look for a
1754 - If the argument is not found as a variable, IPython will look for a
1755 file with that name (adding .py if necessary) and load it into the
1755 file with that name (adding .py if necessary) and load it into the
1756 editor. It will execute its contents with execfile() when you exit,
1756 editor. It will execute its contents with execfile() when you exit,
1757 loading any code in the file into your interactive namespace.
1757 loading any code in the file into your interactive namespace.
1758
1758
1759 After executing your code, %edit will return as output the code you
1759 After executing your code, %edit will return as output the code you
1760 typed in the editor (except when it was an existing file). This way
1760 typed in the editor (except when it was an existing file). This way
1761 you can reload the code in further invocations of %edit as a variable,
1761 you can reload the code in further invocations of %edit as a variable,
1762 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1762 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1763 the output.
1763 the output.
1764
1764
1765 Note that %edit is also available through the alias %ed.
1765 Note that %edit is also available through the alias %ed.
1766
1766
1767 This is an example of creating a simple function inside the editor and
1767 This is an example of creating a simple function inside the editor and
1768 then modifying it. First, start up the editor:
1768 then modifying it. First, start up the editor:
1769
1769
1770 In [1]: ed\\
1770 In [1]: ed\\
1771 Editing... done. Executing edited code...\\
1771 Editing... done. Executing edited code...\\
1772 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1772 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1773
1773
1774 We can then call the function foo():
1774 We can then call the function foo():
1775
1775
1776 In [2]: foo()\\
1776 In [2]: foo()\\
1777 foo() was defined in an editing session
1777 foo() was defined in an editing session
1778
1778
1779 Now we edit foo. IPython automatically loads the editor with the
1779 Now we edit foo. IPython automatically loads the editor with the
1780 (temporary) file where foo() was previously defined:
1780 (temporary) file where foo() was previously defined:
1781
1781
1782 In [3]: ed foo\\
1782 In [3]: ed foo\\
1783 Editing... done. Executing edited code...
1783 Editing... done. Executing edited code...
1784
1784
1785 And if we call foo() again we get the modified version:
1785 And if we call foo() again we get the modified version:
1786
1786
1787 In [4]: foo()\\
1787 In [4]: foo()\\
1788 foo() has now been changed!
1788 foo() has now been changed!
1789
1789
1790 Here is an example of how to edit a code snippet successive
1790 Here is an example of how to edit a code snippet successive
1791 times. First we call the editor:
1791 times. First we call the editor:
1792
1792
1793 In [8]: ed\\
1793 In [8]: ed\\
1794 Editing... done. Executing edited code...\\
1794 Editing... done. Executing edited code...\\
1795 hello\\
1795 hello\\
1796 Out[8]: "print 'hello'\\n"
1796 Out[8]: "print 'hello'\\n"
1797
1797
1798 Now we call it again with the previous output (stored in _):
1798 Now we call it again with the previous output (stored in _):
1799
1799
1800 In [9]: ed _\\
1800 In [9]: ed _\\
1801 Editing... done. Executing edited code...\\
1801 Editing... done. Executing edited code...\\
1802 hello world\\
1802 hello world\\
1803 Out[9]: "print 'hello world'\\n"
1803 Out[9]: "print 'hello world'\\n"
1804
1804
1805 Now we call it with the output #8 (stored in _8, also as Out[8]):
1805 Now we call it with the output #8 (stored in _8, also as Out[8]):
1806
1806
1807 In [10]: ed _8\\
1807 In [10]: ed _8\\
1808 Editing... done. Executing edited code...\\
1808 Editing... done. Executing edited code...\\
1809 hello again\\
1809 hello again\\
1810 Out[10]: "print 'hello again'\\n"
1810 Out[10]: "print 'hello again'\\n"
1811
1811
1812
1812
1813 Changing the default editor hook:
1813 Changing the default editor hook:
1814
1814
1815 If you wish to write your own editor hook, you can put it in a
1815 If you wish to write your own editor hook, you can put it in a
1816 configuration file which you load at startup time. The default hook
1816 configuration file which you load at startup time. The default hook
1817 is defined in the IPython.hooks module, and you can use that as a
1817 is defined in the IPython.hooks module, and you can use that as a
1818 starting example for further modifications. That file also has
1818 starting example for further modifications. That file also has
1819 general instructions on how to set a new hook for use once you've
1819 general instructions on how to set a new hook for use once you've
1820 defined it."""
1820 defined it."""
1821
1821
1822 # FIXME: This function has become a convoluted mess. It needs a
1822 # FIXME: This function has become a convoluted mess. It needs a
1823 # ground-up rewrite with clean, simple logic.
1823 # ground-up rewrite with clean, simple logic.
1824
1824
1825 def make_filename(arg):
1825 def make_filename(arg):
1826 "Make a filename from the given args"
1826 "Make a filename from the given args"
1827 try:
1827 try:
1828 filename = get_py_filename(arg)
1828 filename = get_py_filename(arg)
1829 except IOError:
1829 except IOError:
1830 if args.endswith('.py'):
1830 if args.endswith('.py'):
1831 filename = arg
1831 filename = arg
1832 else:
1832 else:
1833 filename = None
1833 filename = None
1834 return filename
1834 return filename
1835
1835
1836 # custom exceptions
1836 # custom exceptions
1837 class DataIsObject(Exception): pass
1837 class DataIsObject(Exception): pass
1838
1838
1839 opts,args = self.parse_options(parameter_s,'px')
1839 opts,args = self.parse_options(parameter_s,'px')
1840
1840
1841 # Default line number value
1841 # Default line number value
1842 lineno = None
1842 lineno = None
1843 if opts.has_key('p'):
1843 if opts.has_key('p'):
1844 args = '_%s' % last_call[0]
1844 args = '_%s' % last_call[0]
1845 if not self.shell.user_ns.has_key(args):
1845 if not self.shell.user_ns.has_key(args):
1846 args = last_call[1]
1846 args = last_call[1]
1847
1847
1848 # use last_call to remember the state of the previous call, but don't
1848 # use last_call to remember the state of the previous call, but don't
1849 # let it be clobbered by successive '-p' calls.
1849 # let it be clobbered by successive '-p' calls.
1850 try:
1850 try:
1851 last_call[0] = self.shell.outputcache.prompt_count
1851 last_call[0] = self.shell.outputcache.prompt_count
1852 if not opts.has_key('p'):
1852 if not opts.has_key('p'):
1853 last_call[1] = parameter_s
1853 last_call[1] = parameter_s
1854 except:
1854 except:
1855 pass
1855 pass
1856
1856
1857 # by default this is done with temp files, except when the given
1857 # by default this is done with temp files, except when the given
1858 # arg is a filename
1858 # arg is a filename
1859 use_temp = 1
1859 use_temp = 1
1860
1860
1861 if re.match(r'\d',args):
1861 if re.match(r'\d',args):
1862 # Mode where user specifies ranges of lines, like in %macro.
1862 # Mode where user specifies ranges of lines, like in %macro.
1863 # This means that you can't edit files whose names begin with
1863 # This means that you can't edit files whose names begin with
1864 # numbers this way. Tough.
1864 # numbers this way. Tough.
1865 ranges = args.split()
1865 ranges = args.split()
1866 data = ''.join(self.extract_input_slices(ranges))
1866 data = ''.join(self.extract_input_slices(ranges))
1867 elif args.endswith('.py'):
1867 elif args.endswith('.py'):
1868 filename = make_filename(args)
1868 filename = make_filename(args)
1869 data = ''
1869 data = ''
1870 use_temp = 0
1870 use_temp = 0
1871 elif args:
1871 elif args:
1872 try:
1872 try:
1873 # Load the parameter given as a variable. If not a string,
1873 # Load the parameter given as a variable. If not a string,
1874 # process it as an object instead (below)
1874 # process it as an object instead (below)
1875
1875
1876 #print '*** args',args,'type',type(args) # dbg
1876 #print '*** args',args,'type',type(args) # dbg
1877 data = eval(args,self.shell.user_ns)
1877 data = eval(args,self.shell.user_ns)
1878 if not type(data) in StringTypes:
1878 if not type(data) in StringTypes:
1879 raise DataIsObject
1879 raise DataIsObject
1880
1880
1881 except (NameError,SyntaxError):
1881 except (NameError,SyntaxError):
1882 # given argument is not a variable, try as a filename
1882 # given argument is not a variable, try as a filename
1883 filename = make_filename(args)
1883 filename = make_filename(args)
1884 if filename is None:
1884 if filename is None:
1885 warn("Argument given (%s) can't be found as a variable "
1885 warn("Argument given (%s) can't be found as a variable "
1886 "or as a filename." % args)
1886 "or as a filename." % args)
1887 return
1887 return
1888
1888
1889 data = ''
1889 data = ''
1890 use_temp = 0
1890 use_temp = 0
1891 except DataIsObject:
1891 except DataIsObject:
1892
1892
1893 # macros have a special edit function
1893 # macros have a special edit function
1894 if isinstance(data,Macro):
1894 if isinstance(data,Macro):
1895 self._edit_macro(args,data)
1895 self._edit_macro(args,data)
1896 return
1896 return
1897
1897
1898 # For objects, try to edit the file where they are defined
1898 # For objects, try to edit the file where they are defined
1899 try:
1899 try:
1900 filename = inspect.getabsfile(data)
1900 filename = inspect.getabsfile(data)
1901 datafile = 1
1901 datafile = 1
1902 except TypeError:
1902 except TypeError:
1903 filename = make_filename(args)
1903 filename = make_filename(args)
1904 datafile = 1
1904 datafile = 1
1905 warn('Could not find file where `%s` is defined.\n'
1905 warn('Could not find file where `%s` is defined.\n'
1906 'Opening a file named `%s`' % (args,filename))
1906 'Opening a file named `%s`' % (args,filename))
1907 # Now, make sure we can actually read the source (if it was in
1907 # Now, make sure we can actually read the source (if it was in
1908 # a temp file it's gone by now).
1908 # a temp file it's gone by now).
1909 if datafile:
1909 if datafile:
1910 try:
1910 try:
1911 lineno = inspect.getsourcelines(data)[1]
1911 lineno = inspect.getsourcelines(data)[1]
1912 except IOError:
1912 except IOError:
1913 filename = make_filename(args)
1913 filename = make_filename(args)
1914 if filename is None:
1914 if filename is None:
1915 warn('The file `%s` where `%s` was defined cannot '
1915 warn('The file `%s` where `%s` was defined cannot '
1916 'be read.' % (filename,data))
1916 'be read.' % (filename,data))
1917 return
1917 return
1918 use_temp = 0
1918 use_temp = 0
1919 else:
1919 else:
1920 data = ''
1920 data = ''
1921
1921
1922 if use_temp:
1922 if use_temp:
1923 filename = self.shell.mktempfile(data)
1923 filename = self.shell.mktempfile(data)
1924 print 'IPython will make a temporary file named:',filename
1924 print 'IPython will make a temporary file named:',filename
1925
1925
1926 # do actual editing here
1926 # do actual editing here
1927 print 'Editing...',
1927 print 'Editing...',
1928 sys.stdout.flush()
1928 sys.stdout.flush()
1929 self.shell.hooks.editor(filename,lineno)
1929 self.shell.hooks.editor(filename,lineno)
1930 if opts.has_key('x'): # -x prevents actual execution
1930 if opts.has_key('x'): # -x prevents actual execution
1931 print
1931 print
1932 else:
1932 else:
1933 print 'done. Executing edited code...'
1933 print 'done. Executing edited code...'
1934 try:
1934 try:
1935 self.shell.safe_execfile(filename,self.shell.user_ns)
1935 self.shell.safe_execfile(filename,self.shell.user_ns)
1936 except IOError,msg:
1936 except IOError,msg:
1937 if msg.filename == filename:
1937 if msg.filename == filename:
1938 warn('File not found. Did you forget to save?')
1938 warn('File not found. Did you forget to save?')
1939 return
1939 return
1940 else:
1940 else:
1941 self.shell.showtraceback()
1941 self.shell.showtraceback()
1942 except:
1942 except:
1943 self.shell.showtraceback()
1943 self.shell.showtraceback()
1944
1944
1945 def magic_xmode(self,parameter_s = ''):
1945 def magic_xmode(self,parameter_s = ''):
1946 """Switch modes for the exception handlers.
1946 """Switch modes for the exception handlers.
1947
1947
1948 Valid modes: Plain, Context and Verbose.
1948 Valid modes: Plain, Context and Verbose.
1949
1949
1950 If called without arguments, acts as a toggle."""
1950 If called without arguments, acts as a toggle."""
1951
1951
1952 def xmode_switch_err(name):
1952 def xmode_switch_err(name):
1953 warn('Error changing %s exception modes.\n%s' %
1953 warn('Error changing %s exception modes.\n%s' %
1954 (name,sys.exc_info()[1]))
1954 (name,sys.exc_info()[1]))
1955
1955
1956 shell = self.shell
1956 shell = self.shell
1957 new_mode = parameter_s.strip().capitalize()
1957 new_mode = parameter_s.strip().capitalize()
1958 try:
1958 try:
1959 shell.InteractiveTB.set_mode(mode=new_mode)
1959 shell.InteractiveTB.set_mode(mode=new_mode)
1960 print 'Exception reporting mode:',shell.InteractiveTB.mode
1960 print 'Exception reporting mode:',shell.InteractiveTB.mode
1961 except:
1961 except:
1962 xmode_switch_err('user')
1962 xmode_switch_err('user')
1963
1963
1964 # threaded shells use a special handler in sys.excepthook
1964 # threaded shells use a special handler in sys.excepthook
1965 if shell.isthreaded:
1965 if shell.isthreaded:
1966 try:
1966 try:
1967 shell.sys_excepthook.set_mode(mode=new_mode)
1967 shell.sys_excepthook.set_mode(mode=new_mode)
1968 except:
1968 except:
1969 xmode_switch_err('threaded')
1969 xmode_switch_err('threaded')
1970
1970
1971 def magic_colors(self,parameter_s = ''):
1971 def magic_colors(self,parameter_s = ''):
1972 """Switch color scheme for prompts, info system and exception handlers.
1972 """Switch color scheme for prompts, info system and exception handlers.
1973
1973
1974 Currently implemented schemes: NoColor, Linux, LightBG.
1974 Currently implemented schemes: NoColor, Linux, LightBG.
1975
1975
1976 Color scheme names are not case-sensitive."""
1976 Color scheme names are not case-sensitive."""
1977
1977
1978 def color_switch_err(name):
1978 def color_switch_err(name):
1979 warn('Error changing %s color schemes.\n%s' %
1979 warn('Error changing %s color schemes.\n%s' %
1980 (name,sys.exc_info()[1]))
1980 (name,sys.exc_info()[1]))
1981
1981
1982
1982
1983 new_scheme = parameter_s.strip()
1983 new_scheme = parameter_s.strip()
1984 if not new_scheme:
1984 if not new_scheme:
1985 print 'You must specify a color scheme.'
1985 print 'You must specify a color scheme.'
1986 return
1986 return
1987 # Under Windows, check for Gary Bishop's readline, which is necessary
1987 # Under Windows, check for Gary Bishop's readline, which is necessary
1988 # for ANSI coloring
1988 # for ANSI coloring
1989 if os.name in ['nt','dos']:
1989 if os.name in ['nt','dos']:
1990 try:
1990 try:
1991 import readline
1991 import readline
1992 except ImportError:
1992 except ImportError:
1993 has_readline = 0
1993 has_readline = 0
1994 else:
1994 else:
1995 try:
1995 try:
1996 readline.GetOutputFile()
1996 readline.GetOutputFile()
1997 except AttributeError:
1997 except AttributeError:
1998 has_readline = 0
1998 has_readline = 0
1999 else:
1999 else:
2000 has_readline = 1
2000 has_readline = 1
2001 if not has_readline:
2001 if not has_readline:
2002 msg = """\
2002 msg = """\
2003 Proper color support under MS Windows requires Gary Bishop's readline library.
2003 Proper color support under MS Windows requires Gary Bishop's readline library.
2004 You can find it at:
2004 You can find it at:
2005 http://sourceforge.net/projects/uncpythontools
2005 http://sourceforge.net/projects/uncpythontools
2006 Gary's readline needs the ctypes module, from:
2006 Gary's readline needs the ctypes module, from:
2007 http://starship.python.net/crew/theller/ctypes
2007 http://starship.python.net/crew/theller/ctypes
2008
2008
2009 Defaulting color scheme to 'NoColor'"""
2009 Defaulting color scheme to 'NoColor'"""
2010 new_scheme = 'NoColor'
2010 new_scheme = 'NoColor'
2011 warn(msg)
2011 warn(msg)
2012 # local shortcut
2012 # local shortcut
2013 shell = self.shell
2013 shell = self.shell
2014
2014
2015 # Set prompt colors
2015 # Set prompt colors
2016 try:
2016 try:
2017 shell.outputcache.set_colors(new_scheme)
2017 shell.outputcache.set_colors(new_scheme)
2018 except:
2018 except:
2019 color_switch_err('prompt')
2019 color_switch_err('prompt')
2020 else:
2020 else:
2021 shell.rc.colors = \
2021 shell.rc.colors = \
2022 shell.outputcache.color_table.active_scheme_name
2022 shell.outputcache.color_table.active_scheme_name
2023 # Set exception colors
2023 # Set exception colors
2024 try:
2024 try:
2025 shell.InteractiveTB.set_colors(scheme = new_scheme)
2025 shell.InteractiveTB.set_colors(scheme = new_scheme)
2026 shell.SyntaxTB.set_colors(scheme = new_scheme)
2026 shell.SyntaxTB.set_colors(scheme = new_scheme)
2027 except:
2027 except:
2028 color_switch_err('exception')
2028 color_switch_err('exception')
2029
2029
2030 # threaded shells use a verbose traceback in sys.excepthook
2030 # threaded shells use a verbose traceback in sys.excepthook
2031 if shell.isthreaded:
2031 if shell.isthreaded:
2032 try:
2032 try:
2033 shell.sys_excepthook.set_colors(scheme=new_scheme)
2033 shell.sys_excepthook.set_colors(scheme=new_scheme)
2034 except:
2034 except:
2035 color_switch_err('system exception handler')
2035 color_switch_err('system exception handler')
2036
2036
2037 # Set info (for 'object?') colors
2037 # Set info (for 'object?') colors
2038 if shell.rc.color_info:
2038 if shell.rc.color_info:
2039 try:
2039 try:
2040 shell.inspector.set_active_scheme(new_scheme)
2040 shell.inspector.set_active_scheme(new_scheme)
2041 except:
2041 except:
2042 color_switch_err('object inspector')
2042 color_switch_err('object inspector')
2043 else:
2043 else:
2044 shell.inspector.set_active_scheme('NoColor')
2044 shell.inspector.set_active_scheme('NoColor')
2045
2045
2046 def magic_color_info(self,parameter_s = ''):
2046 def magic_color_info(self,parameter_s = ''):
2047 """Toggle color_info.
2047 """Toggle color_info.
2048
2048
2049 The color_info configuration parameter controls whether colors are
2049 The color_info configuration parameter controls whether colors are
2050 used for displaying object details (by things like %psource, %pfile or
2050 used for displaying object details (by things like %psource, %pfile or
2051 the '?' system). This function toggles this value with each call.
2051 the '?' system). This function toggles this value with each call.
2052
2052
2053 Note that unless you have a fairly recent pager (less works better
2053 Note that unless you have a fairly recent pager (less works better
2054 than more) in your system, using colored object information displays
2054 than more) in your system, using colored object information displays
2055 will not work properly. Test it and see."""
2055 will not work properly. Test it and see."""
2056
2056
2057 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2057 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2058 self.magic_colors(self.shell.rc.colors)
2058 self.magic_colors(self.shell.rc.colors)
2059 print 'Object introspection functions have now coloring:',
2059 print 'Object introspection functions have now coloring:',
2060 print ['OFF','ON'][self.shell.rc.color_info]
2060 print ['OFF','ON'][self.shell.rc.color_info]
2061
2061
2062 def magic_Pprint(self, parameter_s=''):
2062 def magic_Pprint(self, parameter_s=''):
2063 """Toggle pretty printing on/off."""
2063 """Toggle pretty printing on/off."""
2064
2064
2065 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2065 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2066 print 'Pretty printing has been turned', \
2066 print 'Pretty printing has been turned', \
2067 ['OFF','ON'][self.shell.outputcache.Pprint]
2067 ['OFF','ON'][self.shell.outputcache.Pprint]
2068
2068
2069 def magic_exit(self, parameter_s=''):
2069 def magic_exit(self, parameter_s=''):
2070 """Exit IPython, confirming if configured to do so.
2070 """Exit IPython, confirming if configured to do so.
2071
2071
2072 You can configure whether IPython asks for confirmation upon exit by
2072 You can configure whether IPython asks for confirmation upon exit by
2073 setting the confirm_exit flag in the ipythonrc file."""
2073 setting the confirm_exit flag in the ipythonrc file."""
2074
2074
2075 self.shell.exit()
2075 self.shell.exit()
2076
2076
2077 def magic_quit(self, parameter_s=''):
2077 def magic_quit(self, parameter_s=''):
2078 """Exit IPython, confirming if configured to do so (like %exit)"""
2078 """Exit IPython, confirming if configured to do so (like %exit)"""
2079
2079
2080 self.shell.exit()
2080 self.shell.exit()
2081
2081
2082 def magic_Exit(self, parameter_s=''):
2082 def magic_Exit(self, parameter_s=''):
2083 """Exit IPython without confirmation."""
2083 """Exit IPython without confirmation."""
2084
2084
2085 self.shell.exit_now = True
2085 self.shell.exit_now = True
2086
2086
2087 def magic_Quit(self, parameter_s=''):
2087 def magic_Quit(self, parameter_s=''):
2088 """Exit IPython without confirmation (like %Exit)."""
2088 """Exit IPython without confirmation (like %Exit)."""
2089
2089
2090 self.shell.exit_now = True
2090 self.shell.exit_now = True
2091
2091
2092 #......................................................................
2092 #......................................................................
2093 # Functions to implement unix shell-type things
2093 # Functions to implement unix shell-type things
2094
2094
2095 def magic_alias(self, parameter_s = ''):
2095 def magic_alias(self, parameter_s = ''):
2096 """Define an alias for a system command.
2096 """Define an alias for a system command.
2097
2097
2098 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2098 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2099
2099
2100 Then, typing 'alias_name params' will execute the system command 'cmd
2100 Then, typing 'alias_name params' will execute the system command 'cmd
2101 params' (from your underlying operating system).
2101 params' (from your underlying operating system).
2102
2102
2103 Aliases have lower precedence than magic functions and Python normal
2103 Aliases have lower precedence than magic functions and Python normal
2104 variables, so if 'foo' is both a Python variable and an alias, the
2104 variables, so if 'foo' is both a Python variable and an alias, the
2105 alias can not be executed until 'del foo' removes the Python variable.
2105 alias can not be executed until 'del foo' removes the Python variable.
2106
2106
2107 You can use the %l specifier in an alias definition to represent the
2107 You can use the %l specifier in an alias definition to represent the
2108 whole line when the alias is called. For example:
2108 whole line when the alias is called. For example:
2109
2109
2110 In [2]: alias all echo "Input in brackets: <%l>"\\
2110 In [2]: alias all echo "Input in brackets: <%l>"\\
2111 In [3]: all hello world\\
2111 In [3]: all hello world\\
2112 Input in brackets: <hello world>
2112 Input in brackets: <hello world>
2113
2113
2114 You can also define aliases with parameters using %s specifiers (one
2114 You can also define aliases with parameters using %s specifiers (one
2115 per parameter):
2115 per parameter):
2116
2116
2117 In [1]: alias parts echo first %s second %s\\
2117 In [1]: alias parts echo first %s second %s\\
2118 In [2]: %parts A B\\
2118 In [2]: %parts A B\\
2119 first A second B\\
2119 first A second B\\
2120 In [3]: %parts A\\
2120 In [3]: %parts A\\
2121 Incorrect number of arguments: 2 expected.\\
2121 Incorrect number of arguments: 2 expected.\\
2122 parts is an alias to: 'echo first %s second %s'
2122 parts is an alias to: 'echo first %s second %s'
2123
2123
2124 Note that %l and %s are mutually exclusive. You can only use one or
2124 Note that %l and %s are mutually exclusive. You can only use one or
2125 the other in your aliases.
2125 the other in your aliases.
2126
2126
2127 Aliases expand Python variables just like system calls using ! or !!
2127 Aliases expand Python variables just like system calls using ! or !!
2128 do: all expressions prefixed with '$' get expanded. For details of
2128 do: all expressions prefixed with '$' get expanded. For details of
2129 the semantic rules, see PEP-215:
2129 the semantic rules, see PEP-215:
2130 http://www.python.org/peps/pep-0215.html. This is the library used by
2130 http://www.python.org/peps/pep-0215.html. This is the library used by
2131 IPython for variable expansion. If you want to access a true shell
2131 IPython for variable expansion. If you want to access a true shell
2132 variable, an extra $ is necessary to prevent its expansion by IPython:
2132 variable, an extra $ is necessary to prevent its expansion by IPython:
2133
2133
2134 In [6]: alias show echo\\
2134 In [6]: alias show echo\\
2135 In [7]: PATH='A Python string'\\
2135 In [7]: PATH='A Python string'\\
2136 In [8]: show $PATH\\
2136 In [8]: show $PATH\\
2137 A Python string\\
2137 A Python string\\
2138 In [9]: show $$PATH\\
2138 In [9]: show $$PATH\\
2139 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2139 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2140
2140
2141 You can use the alias facility to acess all of $PATH. See the %rehash
2141 You can use the alias facility to acess all of $PATH. See the %rehash
2142 and %rehashx functions, which automatically create aliases for the
2142 and %rehashx functions, which automatically create aliases for the
2143 contents of your $PATH.
2143 contents of your $PATH.
2144
2144
2145 If called with no parameters, %alias prints the current alias table."""
2145 If called with no parameters, %alias prints the current alias table."""
2146
2146
2147 par = parameter_s.strip()
2147 par = parameter_s.strip()
2148 if not par:
2148 if not par:
2149 if self.shell.rc.automagic:
2149 if self.shell.rc.automagic:
2150 prechar = ''
2150 prechar = ''
2151 else:
2151 else:
2152 prechar = self.shell.ESC_MAGIC
2152 prechar = self.shell.ESC_MAGIC
2153 print 'Alias\t\tSystem Command\n'+'-'*30
2153 print 'Alias\t\tSystem Command\n'+'-'*30
2154 atab = self.shell.alias_table
2154 atab = self.shell.alias_table
2155 aliases = atab.keys()
2155 aliases = atab.keys()
2156 aliases.sort()
2156 aliases.sort()
2157 for alias in aliases:
2157 for alias in aliases:
2158 print prechar+alias+'\t\t'+atab[alias][1]
2158 print prechar+alias+'\t\t'+atab[alias][1]
2159 print '-'*30+'\nTotal number of aliases:',len(aliases)
2159 print '-'*30+'\nTotal number of aliases:',len(aliases)
2160 return
2160 return
2161 try:
2161 try:
2162 alias,cmd = par.split(None,1)
2162 alias,cmd = par.split(None,1)
2163 except:
2163 except:
2164 print OInspect.getdoc(self.magic_alias)
2164 print OInspect.getdoc(self.magic_alias)
2165 else:
2165 else:
2166 nargs = cmd.count('%s')
2166 nargs = cmd.count('%s')
2167 if nargs>0 and cmd.find('%l')>=0:
2167 if nargs>0 and cmd.find('%l')>=0:
2168 error('The %s and %l specifiers are mutually exclusive '
2168 error('The %s and %l specifiers are mutually exclusive '
2169 'in alias definitions.')
2169 'in alias definitions.')
2170 else: # all looks OK
2170 else: # all looks OK
2171 self.shell.alias_table[alias] = (nargs,cmd)
2171 self.shell.alias_table[alias] = (nargs,cmd)
2172 self.shell.alias_table_validate(verbose=1)
2172 self.shell.alias_table_validate(verbose=1)
2173 # end magic_alias
2173 # end magic_alias
2174
2174
2175 def magic_unalias(self, parameter_s = ''):
2175 def magic_unalias(self, parameter_s = ''):
2176 """Remove an alias"""
2176 """Remove an alias"""
2177
2177
2178 aname = parameter_s.strip()
2178 aname = parameter_s.strip()
2179 if aname in self.shell.alias_table:
2179 if aname in self.shell.alias_table:
2180 del self.shell.alias_table[aname]
2180 del self.shell.alias_table[aname]
2181
2181
2182 def magic_rehash(self, parameter_s = ''):
2182 def magic_rehash(self, parameter_s = ''):
2183 """Update the alias table with all entries in $PATH.
2183 """Update the alias table with all entries in $PATH.
2184
2184
2185 This version does no checks on execute permissions or whether the
2185 This version does no checks on execute permissions or whether the
2186 contents of $PATH are truly files (instead of directories or something
2186 contents of $PATH are truly files (instead of directories or something
2187 else). For such a safer (but slower) version, use %rehashx."""
2187 else). For such a safer (but slower) version, use %rehashx."""
2188
2188
2189 # This function (and rehashx) manipulate the alias_table directly
2189 # This function (and rehashx) manipulate the alias_table directly
2190 # rather than calling magic_alias, for speed reasons. A rehash on a
2190 # rather than calling magic_alias, for speed reasons. A rehash on a
2191 # typical Linux box involves several thousand entries, so efficiency
2191 # typical Linux box involves several thousand entries, so efficiency
2192 # here is a top concern.
2192 # here is a top concern.
2193
2193
2194 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2194 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2195 alias_table = self.shell.alias_table
2195 alias_table = self.shell.alias_table
2196 for pdir in path:
2196 for pdir in path:
2197 for ff in os.listdir(pdir):
2197 for ff in os.listdir(pdir):
2198 # each entry in the alias table must be (N,name), where
2198 # each entry in the alias table must be (N,name), where
2199 # N is the number of positional arguments of the alias.
2199 # N is the number of positional arguments of the alias.
2200 alias_table[ff] = (0,ff)
2200 alias_table[ff] = (0,ff)
2201 # Make sure the alias table doesn't contain keywords or builtins
2201 # Make sure the alias table doesn't contain keywords or builtins
2202 self.shell.alias_table_validate()
2202 self.shell.alias_table_validate()
2203 # Call again init_auto_alias() so we get 'rm -i' and other modified
2203 # Call again init_auto_alias() so we get 'rm -i' and other modified
2204 # aliases since %rehash will probably clobber them
2204 # aliases since %rehash will probably clobber them
2205 self.shell.init_auto_alias()
2205 self.shell.init_auto_alias()
2206
2206
2207 def magic_rehashx(self, parameter_s = ''):
2207 def magic_rehashx(self, parameter_s = ''):
2208 """Update the alias table with all executable files in $PATH.
2208 """Update the alias table with all executable files in $PATH.
2209
2209
2210 This version explicitly checks that every entry in $PATH is a file
2210 This version explicitly checks that every entry in $PATH is a file
2211 with execute access (os.X_OK), so it is much slower than %rehash.
2211 with execute access (os.X_OK), so it is much slower than %rehash.
2212
2212
2213 Under Windows, it checks executability as a match agains a
2213 Under Windows, it checks executability as a match agains a
2214 '|'-separated string of extensions, stored in the IPython config
2214 '|'-separated string of extensions, stored in the IPython config
2215 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2215 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2216
2216
2217 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2217 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2218 alias_table = self.shell.alias_table
2218 alias_table = self.shell.alias_table
2219
2219
2220 if os.name == 'posix':
2220 if os.name == 'posix':
2221 isexec = lambda fname:os.path.isfile(fname) and \
2221 isexec = lambda fname:os.path.isfile(fname) and \
2222 os.access(fname,os.X_OK)
2222 os.access(fname,os.X_OK)
2223 else:
2223 else:
2224
2224
2225 try:
2225 try:
2226 winext = os.environ['pathext'].replace(';','|').replace('.','')
2226 winext = os.environ['pathext'].replace(';','|').replace('.','')
2227 except KeyError:
2227 except KeyError:
2228 winext = 'exe|com|bat'
2228 winext = 'exe|com|bat'
2229
2229
2230 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2230 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2231 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2231 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2232 savedir = os.getcwd()
2232 savedir = os.getcwd()
2233 try:
2233 try:
2234 # write the whole loop for posix/Windows so we don't have an if in
2234 # write the whole loop for posix/Windows so we don't have an if in
2235 # the innermost part
2235 # the innermost part
2236 if os.name == 'posix':
2236 if os.name == 'posix':
2237 for pdir in path:
2237 for pdir in path:
2238 os.chdir(pdir)
2238 os.chdir(pdir)
2239 for ff in os.listdir(pdir):
2239 for ff in os.listdir(pdir):
2240 if isexec(ff):
2240 if isexec(ff):
2241 # each entry in the alias table must be (N,name),
2241 # each entry in the alias table must be (N,name),
2242 # where N is the number of positional arguments of the
2242 # where N is the number of positional arguments of the
2243 # alias.
2243 # alias.
2244 alias_table[ff] = (0,ff)
2244 alias_table[ff] = (0,ff)
2245 else:
2245 else:
2246 for pdir in path:
2246 for pdir in path:
2247 os.chdir(pdir)
2247 os.chdir(pdir)
2248 for ff in os.listdir(pdir):
2248 for ff in os.listdir(pdir):
2249 if isexec(ff):
2249 if isexec(ff):
2250 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2250 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2251 # Make sure the alias table doesn't contain keywords or builtins
2251 # Make sure the alias table doesn't contain keywords or builtins
2252 self.shell.alias_table_validate()
2252 self.shell.alias_table_validate()
2253 # Call again init_auto_alias() so we get 'rm -i' and other
2253 # Call again init_auto_alias() so we get 'rm -i' and other
2254 # modified aliases since %rehashx will probably clobber them
2254 # modified aliases since %rehashx will probably clobber them
2255 self.shell.init_auto_alias()
2255 self.shell.init_auto_alias()
2256 finally:
2256 finally:
2257 os.chdir(savedir)
2257 os.chdir(savedir)
2258
2258
2259 def magic_pwd(self, parameter_s = ''):
2259 def magic_pwd(self, parameter_s = ''):
2260 """Return the current working directory path."""
2260 """Return the current working directory path."""
2261 return os.getcwd()
2261 return os.getcwd()
2262
2262
2263 def magic_cd(self, parameter_s=''):
2263 def magic_cd(self, parameter_s=''):
2264 """Change the current working directory.
2264 """Change the current working directory.
2265
2265
2266 This command automatically maintains an internal list of directories
2266 This command automatically maintains an internal list of directories
2267 you visit during your IPython session, in the variable _dh. The
2267 you visit during your IPython session, in the variable _dh. The
2268 command %dhist shows this history nicely formatted.
2268 command %dhist shows this history nicely formatted.
2269
2269
2270 Usage:
2270 Usage:
2271
2271
2272 cd 'dir': changes to directory 'dir'.
2272 cd 'dir': changes to directory 'dir'.
2273
2273
2274 cd -: changes to the last visited directory.
2274 cd -: changes to the last visited directory.
2275
2275
2276 cd -<n>: changes to the n-th directory in the directory history.
2276 cd -<n>: changes to the n-th directory in the directory history.
2277
2277
2278 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2278 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2279 (note: cd <bookmark_name> is enough if there is no
2279 (note: cd <bookmark_name> is enough if there is no
2280 directory <bookmark_name>, but a bookmark with the name exists.)
2280 directory <bookmark_name>, but a bookmark with the name exists.)
2281
2281
2282 Options:
2282 Options:
2283
2283
2284 -q: quiet. Do not print the working directory after the cd command is
2284 -q: quiet. Do not print the working directory after the cd command is
2285 executed. By default IPython's cd command does print this directory,
2285 executed. By default IPython's cd command does print this directory,
2286 since the default prompts do not display path information.
2286 since the default prompts do not display path information.
2287
2287
2288 Note that !cd doesn't work for this purpose because the shell where
2288 Note that !cd doesn't work for this purpose because the shell where
2289 !command runs is immediately discarded after executing 'command'."""
2289 !command runs is immediately discarded after executing 'command'."""
2290
2290
2291 parameter_s = parameter_s.strip()
2291 parameter_s = parameter_s.strip()
2292 bkms = self.shell.persist.get("bookmarks",{})
2292 bkms = self.shell.persist.get("bookmarks",{})
2293
2293
2294 numcd = re.match(r'(-)(\d+)$',parameter_s)
2294 numcd = re.match(r'(-)(\d+)$',parameter_s)
2295 # jump in directory history by number
2295 # jump in directory history by number
2296 if numcd:
2296 if numcd:
2297 nn = int(numcd.group(2))
2297 nn = int(numcd.group(2))
2298 try:
2298 try:
2299 ps = self.shell.user_ns['_dh'][nn]
2299 ps = self.shell.user_ns['_dh'][nn]
2300 except IndexError:
2300 except IndexError:
2301 print 'The requested directory does not exist in history.'
2301 print 'The requested directory does not exist in history.'
2302 return
2302 return
2303 else:
2303 else:
2304 opts = {}
2304 opts = {}
2305 else:
2305 else:
2306 #turn all non-space-escaping backslashes to slashes,
2307 # for c:\windows\directory\names\
2308 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2306 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2309 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2307 # jump to previous
2310 # jump to previous
2308 if ps == '-':
2311 if ps == '-':
2309 try:
2312 try:
2310 ps = self.shell.user_ns['_dh'][-2]
2313 ps = self.shell.user_ns['_dh'][-2]
2311 except IndexError:
2314 except IndexError:
2312 print 'No previous directory to change to.'
2315 print 'No previous directory to change to.'
2313 return
2316 return
2314 # jump to bookmark
2317 # jump to bookmark
2315 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2318 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2316 if bkms.has_key(ps):
2319 if bkms.has_key(ps):
2317 target = bkms[ps]
2320 target = bkms[ps]
2318 print '(bookmark:%s) -> %s' % (ps,target)
2321 print '(bookmark:%s) -> %s' % (ps,target)
2319 ps = target
2322 ps = target
2320 else:
2323 else:
2321 if bkms:
2324 if bkms:
2322 error("Bookmark '%s' not found. "
2325 error("Bookmark '%s' not found. "
2323 "Use '%%bookmark -l' to see your bookmarks." % ps)
2326 "Use '%%bookmark -l' to see your bookmarks." % ps)
2324 else:
2327 else:
2325 print "Bookmarks not set - use %bookmark <bookmarkname>"
2328 print "Bookmarks not set - use %bookmark <bookmarkname>"
2326 return
2329 return
2327
2330
2328 # at this point ps should point to the target dir
2331 # at this point ps should point to the target dir
2329 if ps:
2332 if ps:
2330 try:
2333 try:
2331 os.chdir(os.path.expanduser(ps))
2334 os.chdir(os.path.expanduser(ps))
2332 ttitle = ("IPy:" + (
2335 ttitle = ("IPy:" + (
2333 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2336 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2334 platutils.set_term_title(ttitle)
2337 platutils.set_term_title(ttitle)
2335 except OSError:
2338 except OSError:
2336 print sys.exc_info()[1]
2339 print sys.exc_info()[1]
2337 else:
2340 else:
2338 self.shell.user_ns['_dh'].append(os.getcwd())
2341 self.shell.user_ns['_dh'].append(os.getcwd())
2339 else:
2342 else:
2340 os.chdir(self.shell.home_dir)
2343 os.chdir(self.shell.home_dir)
2341 platutils.set_term_title("IPy:~")
2344 platutils.set_term_title("IPy:~")
2342 self.shell.user_ns['_dh'].append(os.getcwd())
2345 self.shell.user_ns['_dh'].append(os.getcwd())
2343 if not 'q' in opts:
2346 if not 'q' in opts:
2344 print self.shell.user_ns['_dh'][-1]
2347 print self.shell.user_ns['_dh'][-1]
2345
2348
2346 def magic_dhist(self, parameter_s=''):
2349 def magic_dhist(self, parameter_s=''):
2347 """Print your history of visited directories.
2350 """Print your history of visited directories.
2348
2351
2349 %dhist -> print full history\\
2352 %dhist -> print full history\\
2350 %dhist n -> print last n entries only\\
2353 %dhist n -> print last n entries only\\
2351 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2354 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2352
2355
2353 This history is automatically maintained by the %cd command, and
2356 This history is automatically maintained by the %cd command, and
2354 always available as the global list variable _dh. You can use %cd -<n>
2357 always available as the global list variable _dh. You can use %cd -<n>
2355 to go to directory number <n>."""
2358 to go to directory number <n>."""
2356
2359
2357 dh = self.shell.user_ns['_dh']
2360 dh = self.shell.user_ns['_dh']
2358 if parameter_s:
2361 if parameter_s:
2359 try:
2362 try:
2360 args = map(int,parameter_s.split())
2363 args = map(int,parameter_s.split())
2361 except:
2364 except:
2362 self.arg_err(Magic.magic_dhist)
2365 self.arg_err(Magic.magic_dhist)
2363 return
2366 return
2364 if len(args) == 1:
2367 if len(args) == 1:
2365 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2368 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2366 elif len(args) == 2:
2369 elif len(args) == 2:
2367 ini,fin = args
2370 ini,fin = args
2368 else:
2371 else:
2369 self.arg_err(Magic.magic_dhist)
2372 self.arg_err(Magic.magic_dhist)
2370 return
2373 return
2371 else:
2374 else:
2372 ini,fin = 0,len(dh)
2375 ini,fin = 0,len(dh)
2373 nlprint(dh,
2376 nlprint(dh,
2374 header = 'Directory history (kept in _dh)',
2377 header = 'Directory history (kept in _dh)',
2375 start=ini,stop=fin)
2378 start=ini,stop=fin)
2376
2379
2377 def magic_env(self, parameter_s=''):
2380 def magic_env(self, parameter_s=''):
2378 """List environment variables."""
2381 """List environment variables."""
2379
2382
2380 return os.environ.data
2383 return os.environ.data
2381
2384
2382 def magic_pushd(self, parameter_s=''):
2385 def magic_pushd(self, parameter_s=''):
2383 """Place the current dir on stack and change directory.
2386 """Place the current dir on stack and change directory.
2384
2387
2385 Usage:\\
2388 Usage:\\
2386 %pushd ['dirname']
2389 %pushd ['dirname']
2387
2390
2388 %pushd with no arguments does a %pushd to your home directory.
2391 %pushd with no arguments does a %pushd to your home directory.
2389 """
2392 """
2390 if parameter_s == '': parameter_s = '~'
2393 if parameter_s == '': parameter_s = '~'
2391 dir_s = self.shell.dir_stack
2394 dir_s = self.shell.dir_stack
2392 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2395 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2393 os.path.expanduser(self.shell.dir_stack[0]):
2396 os.path.expanduser(self.shell.dir_stack[0]):
2394 try:
2397 try:
2395 self.magic_cd(parameter_s)
2398 self.magic_cd(parameter_s)
2396 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2399 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2397 self.magic_dirs()
2400 self.magic_dirs()
2398 except:
2401 except:
2399 print 'Invalid directory'
2402 print 'Invalid directory'
2400 else:
2403 else:
2401 print 'You are already there!'
2404 print 'You are already there!'
2402
2405
2403 def magic_popd(self, parameter_s=''):
2406 def magic_popd(self, parameter_s=''):
2404 """Change to directory popped off the top of the stack.
2407 """Change to directory popped off the top of the stack.
2405 """
2408 """
2406 if len (self.shell.dir_stack) > 1:
2409 if len (self.shell.dir_stack) > 1:
2407 self.shell.dir_stack.pop(0)
2410 self.shell.dir_stack.pop(0)
2408 self.magic_cd(self.shell.dir_stack[0])
2411 self.magic_cd(self.shell.dir_stack[0])
2409 print self.shell.dir_stack[0]
2412 print self.shell.dir_stack[0]
2410 else:
2413 else:
2411 print "You can't remove the starting directory from the stack:",\
2414 print "You can't remove the starting directory from the stack:",\
2412 self.shell.dir_stack
2415 self.shell.dir_stack
2413
2416
2414 def magic_dirs(self, parameter_s=''):
2417 def magic_dirs(self, parameter_s=''):
2415 """Return the current directory stack."""
2418 """Return the current directory stack."""
2416
2419
2417 return self.shell.dir_stack[:]
2420 return self.shell.dir_stack[:]
2418
2421
2419 def magic_sc(self, parameter_s=''):
2422 def magic_sc(self, parameter_s=''):
2420 """Shell capture - execute a shell command and capture its output.
2423 """Shell capture - execute a shell command and capture its output.
2421
2424
2422 %sc [options] varname=command
2425 %sc [options] varname=command
2423
2426
2424 IPython will run the given command using commands.getoutput(), and
2427 IPython will run the given command using commands.getoutput(), and
2425 will then update the user's interactive namespace with a variable
2428 will then update the user's interactive namespace with a variable
2426 called varname, containing the value of the call. Your command can
2429 called varname, containing the value of the call. Your command can
2427 contain shell wildcards, pipes, etc.
2430 contain shell wildcards, pipes, etc.
2428
2431
2429 The '=' sign in the syntax is mandatory, and the variable name you
2432 The '=' sign in the syntax is mandatory, and the variable name you
2430 supply must follow Python's standard conventions for valid names.
2433 supply must follow Python's standard conventions for valid names.
2431
2434
2432 Options:
2435 Options:
2433
2436
2434 -l: list output. Split the output on newlines into a list before
2437 -l: list output. Split the output on newlines into a list before
2435 assigning it to the given variable. By default the output is stored
2438 assigning it to the given variable. By default the output is stored
2436 as a single string.
2439 as a single string.
2437
2440
2438 -v: verbose. Print the contents of the variable.
2441 -v: verbose. Print the contents of the variable.
2439
2442
2440 In most cases you should not need to split as a list, because the
2443 In most cases you should not need to split as a list, because the
2441 returned value is a special type of string which can automatically
2444 returned value is a special type of string which can automatically
2442 provide its contents either as a list (split on newlines) or as a
2445 provide its contents either as a list (split on newlines) or as a
2443 space-separated string. These are convenient, respectively, either
2446 space-separated string. These are convenient, respectively, either
2444 for sequential processing or to be passed to a shell command.
2447 for sequential processing or to be passed to a shell command.
2445
2448
2446 For example:
2449 For example:
2447
2450
2448 # Capture into variable a
2451 # Capture into variable a
2449 In [9]: sc a=ls *py
2452 In [9]: sc a=ls *py
2450
2453
2451 # a is a string with embedded newlines
2454 # a is a string with embedded newlines
2452 In [10]: a
2455 In [10]: a
2453 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2456 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2454
2457
2455 # which can be seen as a list:
2458 # which can be seen as a list:
2456 In [11]: a.l
2459 In [11]: a.l
2457 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2460 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2458
2461
2459 # or as a whitespace-separated string:
2462 # or as a whitespace-separated string:
2460 In [12]: a.s
2463 In [12]: a.s
2461 Out[12]: 'setup.py win32_manual_post_install.py'
2464 Out[12]: 'setup.py win32_manual_post_install.py'
2462
2465
2463 # a.s is useful to pass as a single command line:
2466 # a.s is useful to pass as a single command line:
2464 In [13]: !wc -l $a.s
2467 In [13]: !wc -l $a.s
2465 146 setup.py
2468 146 setup.py
2466 130 win32_manual_post_install.py
2469 130 win32_manual_post_install.py
2467 276 total
2470 276 total
2468
2471
2469 # while the list form is useful to loop over:
2472 # while the list form is useful to loop over:
2470 In [14]: for f in a.l:
2473 In [14]: for f in a.l:
2471 ....: !wc -l $f
2474 ....: !wc -l $f
2472 ....:
2475 ....:
2473 146 setup.py
2476 146 setup.py
2474 130 win32_manual_post_install.py
2477 130 win32_manual_post_install.py
2475
2478
2476 Similiarly, the lists returned by the -l option are also special, in
2479 Similiarly, the lists returned by the -l option are also special, in
2477 the sense that you can equally invoke the .s attribute on them to
2480 the sense that you can equally invoke the .s attribute on them to
2478 automatically get a whitespace-separated string from their contents:
2481 automatically get a whitespace-separated string from their contents:
2479
2482
2480 In [1]: sc -l b=ls *py
2483 In [1]: sc -l b=ls *py
2481
2484
2482 In [2]: b
2485 In [2]: b
2483 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2486 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2484
2487
2485 In [3]: b.s
2488 In [3]: b.s
2486 Out[3]: 'setup.py win32_manual_post_install.py'
2489 Out[3]: 'setup.py win32_manual_post_install.py'
2487
2490
2488 In summary, both the lists and strings used for ouptut capture have
2491 In summary, both the lists and strings used for ouptut capture have
2489 the following special attributes:
2492 the following special attributes:
2490
2493
2491 .l (or .list) : value as list.
2494 .l (or .list) : value as list.
2492 .n (or .nlstr): value as newline-separated string.
2495 .n (or .nlstr): value as newline-separated string.
2493 .s (or .spstr): value as space-separated string.
2496 .s (or .spstr): value as space-separated string.
2494 """
2497 """
2495
2498
2496 opts,args = self.parse_options(parameter_s,'lv')
2499 opts,args = self.parse_options(parameter_s,'lv')
2497 # Try to get a variable name and command to run
2500 # Try to get a variable name and command to run
2498 try:
2501 try:
2499 # the variable name must be obtained from the parse_options
2502 # the variable name must be obtained from the parse_options
2500 # output, which uses shlex.split to strip options out.
2503 # output, which uses shlex.split to strip options out.
2501 var,_ = args.split('=',1)
2504 var,_ = args.split('=',1)
2502 var = var.strip()
2505 var = var.strip()
2503 # But the the command has to be extracted from the original input
2506 # But the the command has to be extracted from the original input
2504 # parameter_s, not on what parse_options returns, to avoid the
2507 # parameter_s, not on what parse_options returns, to avoid the
2505 # quote stripping which shlex.split performs on it.
2508 # quote stripping which shlex.split performs on it.
2506 _,cmd = parameter_s.split('=',1)
2509 _,cmd = parameter_s.split('=',1)
2507 except ValueError:
2510 except ValueError:
2508 var,cmd = '',''
2511 var,cmd = '',''
2509 if not var:
2512 if not var:
2510 error('you must specify a variable to assign the command to.')
2513 error('you must specify a variable to assign the command to.')
2511 return
2514 return
2512 # If all looks ok, proceed
2515 # If all looks ok, proceed
2513 out,err = self.shell.getoutputerror(cmd)
2516 out,err = self.shell.getoutputerror(cmd)
2514 if err:
2517 if err:
2515 print >> Term.cerr,err
2518 print >> Term.cerr,err
2516 if opts.has_key('l'):
2519 if opts.has_key('l'):
2517 out = SList(out.split('\n'))
2520 out = SList(out.split('\n'))
2518 else:
2521 else:
2519 out = LSString(out)
2522 out = LSString(out)
2520 if opts.has_key('v'):
2523 if opts.has_key('v'):
2521 print '%s ==\n%s' % (var,pformat(out))
2524 print '%s ==\n%s' % (var,pformat(out))
2522 self.shell.user_ns.update({var:out})
2525 self.shell.user_ns.update({var:out})
2523
2526
2524 def magic_sx(self, parameter_s=''):
2527 def magic_sx(self, parameter_s=''):
2525 """Shell execute - run a shell command and capture its output.
2528 """Shell execute - run a shell command and capture its output.
2526
2529
2527 %sx command
2530 %sx command
2528
2531
2529 IPython will run the given command using commands.getoutput(), and
2532 IPython will run the given command using commands.getoutput(), and
2530 return the result formatted as a list (split on '\\n'). Since the
2533 return the result formatted as a list (split on '\\n'). Since the
2531 output is _returned_, it will be stored in ipython's regular output
2534 output is _returned_, it will be stored in ipython's regular output
2532 cache Out[N] and in the '_N' automatic variables.
2535 cache Out[N] and in the '_N' automatic variables.
2533
2536
2534 Notes:
2537 Notes:
2535
2538
2536 1) If an input line begins with '!!', then %sx is automatically
2539 1) If an input line begins with '!!', then %sx is automatically
2537 invoked. That is, while:
2540 invoked. That is, while:
2538 !ls
2541 !ls
2539 causes ipython to simply issue system('ls'), typing
2542 causes ipython to simply issue system('ls'), typing
2540 !!ls
2543 !!ls
2541 is a shorthand equivalent to:
2544 is a shorthand equivalent to:
2542 %sx ls
2545 %sx ls
2543
2546
2544 2) %sx differs from %sc in that %sx automatically splits into a list,
2547 2) %sx differs from %sc in that %sx automatically splits into a list,
2545 like '%sc -l'. The reason for this is to make it as easy as possible
2548 like '%sc -l'. The reason for this is to make it as easy as possible
2546 to process line-oriented shell output via further python commands.
2549 to process line-oriented shell output via further python commands.
2547 %sc is meant to provide much finer control, but requires more
2550 %sc is meant to provide much finer control, but requires more
2548 typing.
2551 typing.
2549
2552
2550 3) Just like %sc -l, this is a list with special attributes:
2553 3) Just like %sc -l, this is a list with special attributes:
2551
2554
2552 .l (or .list) : value as list.
2555 .l (or .list) : value as list.
2553 .n (or .nlstr): value as newline-separated string.
2556 .n (or .nlstr): value as newline-separated string.
2554 .s (or .spstr): value as whitespace-separated string.
2557 .s (or .spstr): value as whitespace-separated string.
2555
2558
2556 This is very useful when trying to use such lists as arguments to
2559 This is very useful when trying to use such lists as arguments to
2557 system commands."""
2560 system commands."""
2558
2561
2559 if parameter_s:
2562 if parameter_s:
2560 out,err = self.shell.getoutputerror(parameter_s)
2563 out,err = self.shell.getoutputerror(parameter_s)
2561 if err:
2564 if err:
2562 print >> Term.cerr,err
2565 print >> Term.cerr,err
2563 return SList(out.split('\n'))
2566 return SList(out.split('\n'))
2564
2567
2565 def magic_bg(self, parameter_s=''):
2568 def magic_bg(self, parameter_s=''):
2566 """Run a job in the background, in a separate thread.
2569 """Run a job in the background, in a separate thread.
2567
2570
2568 For example,
2571 For example,
2569
2572
2570 %bg myfunc(x,y,z=1)
2573 %bg myfunc(x,y,z=1)
2571
2574
2572 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2575 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2573 execution starts, a message will be printed indicating the job
2576 execution starts, a message will be printed indicating the job
2574 number. If your job number is 5, you can use
2577 number. If your job number is 5, you can use
2575
2578
2576 myvar = jobs.result(5) or myvar = jobs[5].result
2579 myvar = jobs.result(5) or myvar = jobs[5].result
2577
2580
2578 to assign this result to variable 'myvar'.
2581 to assign this result to variable 'myvar'.
2579
2582
2580 IPython has a job manager, accessible via the 'jobs' object. You can
2583 IPython has a job manager, accessible via the 'jobs' object. You can
2581 type jobs? to get more information about it, and use jobs.<TAB> to see
2584 type jobs? to get more information about it, and use jobs.<TAB> to see
2582 its attributes. All attributes not starting with an underscore are
2585 its attributes. All attributes not starting with an underscore are
2583 meant for public use.
2586 meant for public use.
2584
2587
2585 In particular, look at the jobs.new() method, which is used to create
2588 In particular, look at the jobs.new() method, which is used to create
2586 new jobs. This magic %bg function is just a convenience wrapper
2589 new jobs. This magic %bg function is just a convenience wrapper
2587 around jobs.new(), for expression-based jobs. If you want to create a
2590 around jobs.new(), for expression-based jobs. If you want to create a
2588 new job with an explicit function object and arguments, you must call
2591 new job with an explicit function object and arguments, you must call
2589 jobs.new() directly.
2592 jobs.new() directly.
2590
2593
2591 The jobs.new docstring also describes in detail several important
2594 The jobs.new docstring also describes in detail several important
2592 caveats associated with a thread-based model for background job
2595 caveats associated with a thread-based model for background job
2593 execution. Type jobs.new? for details.
2596 execution. Type jobs.new? for details.
2594
2597
2595 You can check the status of all jobs with jobs.status().
2598 You can check the status of all jobs with jobs.status().
2596
2599
2597 The jobs variable is set by IPython into the Python builtin namespace.
2600 The jobs variable is set by IPython into the Python builtin namespace.
2598 If you ever declare a variable named 'jobs', you will shadow this
2601 If you ever declare a variable named 'jobs', you will shadow this
2599 name. You can either delete your global jobs variable to regain
2602 name. You can either delete your global jobs variable to regain
2600 access to the job manager, or make a new name and assign it manually
2603 access to the job manager, or make a new name and assign it manually
2601 to the manager (stored in IPython's namespace). For example, to
2604 to the manager (stored in IPython's namespace). For example, to
2602 assign the job manager to the Jobs name, use:
2605 assign the job manager to the Jobs name, use:
2603
2606
2604 Jobs = __builtins__.jobs"""
2607 Jobs = __builtins__.jobs"""
2605
2608
2606 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2609 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2607
2610
2608 def magic_store(self, parameter_s=''):
2611 def magic_store(self, parameter_s=''):
2609 """Lightweight persistence for python variables.
2612 """Lightweight persistence for python variables.
2610
2613
2611 Example:
2614 Example:
2612
2615
2613 ville@badger[~]|1> A = ['hello',10,'world']\\
2616 ville@badger[~]|1> A = ['hello',10,'world']\\
2614 ville@badger[~]|2> %store A\\
2617 ville@badger[~]|2> %store A\\
2615 ville@badger[~]|3> Exit
2618 ville@badger[~]|3> Exit
2616
2619
2617 (IPython session is closed and started again...)
2620 (IPython session is closed and started again...)
2618
2621
2619 ville@badger:~$ ipython -p pysh\\
2622 ville@badger:~$ ipython -p pysh\\
2620 ville@badger[~]|1> print A
2623 ville@badger[~]|1> print A
2621
2624
2622 ['hello', 10, 'world']
2625 ['hello', 10, 'world']
2623
2626
2624 Usage:
2627 Usage:
2625
2628
2626 %store - Show list of all variables and their current values\\
2629 %store - Show list of all variables and their current values\\
2627 %store <var> - Store the *current* value of the variable to disk\\
2630 %store <var> - Store the *current* value of the variable to disk\\
2628 %store -d <var> - Remove the variable and its value from storage\\
2631 %store -d <var> - Remove the variable and its value from storage\\
2629 %store -r - Remove all variables from storage
2632 %store -r - Remove all variables from storage
2630
2633
2631 It should be noted that if you change the value of a variable, you
2634 It should be noted that if you change the value of a variable, you
2632 need to %store it again if you want to persist the new value.
2635 need to %store it again if you want to persist the new value.
2633
2636
2634 Note also that the variables will need to be pickleable; most basic
2637 Note also that the variables will need to be pickleable; most basic
2635 python types can be safely %stored.
2638 python types can be safely %stored.
2636 """
2639 """
2637
2640
2638 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2641 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2639 # delete
2642 # delete
2640 if opts.has_key('d'):
2643 if opts.has_key('d'):
2641 try:
2644 try:
2642 todel = args[0]
2645 todel = args[0]
2643 except IndexError:
2646 except IndexError:
2644 error('You must provide the variable to forget')
2647 error('You must provide the variable to forget')
2645 else:
2648 else:
2646 try:
2649 try:
2647 del self.shell.persist['S:' + todel]
2650 del self.shell.persist['S:' + todel]
2648 except:
2651 except:
2649 error("Can't delete variable '%s'" % todel)
2652 error("Can't delete variable '%s'" % todel)
2650 # reset
2653 # reset
2651 elif opts.has_key('r'):
2654 elif opts.has_key('r'):
2652 for k in self.shell.persist.keys():
2655 for k in self.shell.persist.keys():
2653 if k.startswith('S:'):
2656 if k.startswith('S:'):
2654 del self.shell.persist[k]
2657 del self.shell.persist[k]
2655
2658
2656 # run without arguments -> list variables & values
2659 # run without arguments -> list variables & values
2657 elif not args:
2660 elif not args:
2658 vars = [v[2:] for v in self.shell.persist.keys()
2661 vars = [v[2:] for v in self.shell.persist.keys()
2659 if v.startswith('S:')]
2662 if v.startswith('S:')]
2660 vars.sort()
2663 vars.sort()
2661 if vars:
2664 if vars:
2662 size = max(map(len,vars))
2665 size = max(map(len,vars))
2663 else:
2666 else:
2664 size = 0
2667 size = 0
2665
2668
2666 print 'Stored variables and their in-memory values:'
2669 print 'Stored variables and their in-memory values:'
2667 fmt = '%-'+str(size)+'s -> %s'
2670 fmt = '%-'+str(size)+'s -> %s'
2668 get = self.shell.user_ns.get
2671 get = self.shell.user_ns.get
2669 for var in vars:
2672 for var in vars:
2670 # print 30 first characters from every var
2673 # print 30 first characters from every var
2671 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2674 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2672
2675
2673 # default action - store the variable
2676 # default action - store the variable
2674 else:
2677 else:
2675 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2678 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2676 self.shell.persist[ 'S:' + args[0] ] = pickled
2679 self.shell.persist[ 'S:' + args[0] ] = pickled
2677 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2680 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2678
2681
2679 def magic_bookmark(self, parameter_s=''):
2682 def magic_bookmark(self, parameter_s=''):
2680 """Manage IPython's bookmark system.
2683 """Manage IPython's bookmark system.
2681
2684
2682 %bookmark <name> - set bookmark to current dir
2685 %bookmark <name> - set bookmark to current dir
2683 %bookmark <name> <dir> - set bookmark to <dir>
2686 %bookmark <name> <dir> - set bookmark to <dir>
2684 %bookmark -l - list all bookmarks
2687 %bookmark -l - list all bookmarks
2685 %bookmark -d <name> - remove bookmark
2688 %bookmark -d <name> - remove bookmark
2686 %bookmark -r - remove all bookmarks
2689 %bookmark -r - remove all bookmarks
2687
2690
2688 You can later on access a bookmarked folder with:
2691 You can later on access a bookmarked folder with:
2689 %cd -b <name>
2692 %cd -b <name>
2690 or simply '%cd <name>' if there is no directory called <name> AND
2693 or simply '%cd <name>' if there is no directory called <name> AND
2691 there is such a bookmark defined.
2694 there is such a bookmark defined.
2692
2695
2693 Your bookmarks persist through IPython sessions, but they are
2696 Your bookmarks persist through IPython sessions, but they are
2694 associated with each profile."""
2697 associated with each profile."""
2695
2698
2696 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2699 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2697 if len(args) > 2:
2700 if len(args) > 2:
2698 error('You can only give at most two arguments')
2701 error('You can only give at most two arguments')
2699 return
2702 return
2700
2703
2701 bkms = self.shell.persist.get('bookmarks',{})
2704 bkms = self.shell.persist.get('bookmarks',{})
2702
2705
2703 if opts.has_key('d'):
2706 if opts.has_key('d'):
2704 try:
2707 try:
2705 todel = args[0]
2708 todel = args[0]
2706 except IndexError:
2709 except IndexError:
2707 error('You must provide a bookmark to delete')
2710 error('You must provide a bookmark to delete')
2708 else:
2711 else:
2709 try:
2712 try:
2710 del bkms[todel]
2713 del bkms[todel]
2711 except:
2714 except:
2712 error("Can't delete bookmark '%s'" % todel)
2715 error("Can't delete bookmark '%s'" % todel)
2713 elif opts.has_key('r'):
2716 elif opts.has_key('r'):
2714 bkms = {}
2717 bkms = {}
2715 elif opts.has_key('l'):
2718 elif opts.has_key('l'):
2716 bks = bkms.keys()
2719 bks = bkms.keys()
2717 bks.sort()
2720 bks.sort()
2718 if bks:
2721 if bks:
2719 size = max(map(len,bks))
2722 size = max(map(len,bks))
2720 else:
2723 else:
2721 size = 0
2724 size = 0
2722 fmt = '%-'+str(size)+'s -> %s'
2725 fmt = '%-'+str(size)+'s -> %s'
2723 print 'Current bookmarks:'
2726 print 'Current bookmarks:'
2724 for bk in bks:
2727 for bk in bks:
2725 print fmt % (bk,bkms[bk])
2728 print fmt % (bk,bkms[bk])
2726 else:
2729 else:
2727 if not args:
2730 if not args:
2728 error("You must specify the bookmark name")
2731 error("You must specify the bookmark name")
2729 elif len(args)==1:
2732 elif len(args)==1:
2730 bkms[args[0]] = os.getcwd()
2733 bkms[args[0]] = os.getcwd()
2731 elif len(args)==2:
2734 elif len(args)==2:
2732 bkms[args[0]] = args[1]
2735 bkms[args[0]] = args[1]
2733 self.shell.persist['bookmarks'] = bkms
2736 self.shell.persist['bookmarks'] = bkms
2734
2737
2735 def magic_pycat(self, parameter_s=''):
2738 def magic_pycat(self, parameter_s=''):
2736 """Show a syntax-highlighted file through a pager.
2739 """Show a syntax-highlighted file through a pager.
2737
2740
2738 This magic is similar to the cat utility, but it will assume the file
2741 This magic is similar to the cat utility, but it will assume the file
2739 to be Python source and will show it with syntax highlighting. """
2742 to be Python source and will show it with syntax highlighting. """
2740
2743
2741 filename = get_py_filename(parameter_s)
2744 filename = get_py_filename(parameter_s)
2742 page(self.shell.pycolorize(file_read(filename)),
2745 page(self.shell.pycolorize(file_read(filename)),
2743 screen_lines=self.shell.rc.screen_length)
2746 screen_lines=self.shell.rc.screen_length)
2744
2747
2745 # end Magic
2748 # end Magic
@@ -1,4907 +1,4912 b''
1 2006-01-14 Ville Vainio <vivainio@gmail.com>
1 2006-01-14 Ville Vainio <vivainio@gmail.com>
2
2
3 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
3 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
4 ipapi decorators for python 2.4 users, options() provides access to rc
4 ipapi decorators for python 2.4 users, options() provides access to rc
5 data.
5 data.
6
6
7 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
8 as path separators (even on Linux ;-). Space character after
9 backslash (as yielded by tab completer) is still space;
10 "%cd long\ name" works as expected.
11
7
12
8 2006-01-13 Ville Vainio <vivainio@gmail.com>
13 2006-01-13 Ville Vainio <vivainio@gmail.com>
9
14
10 * IPython/platutils*.py: platform specific utility functions,
15 * IPython/platutils*.py: platform specific utility functions,
11 so far only set_term_title is implemented (change terminal
16 so far only set_term_title is implemented (change terminal
12 label in windowing systems). %cd now changes the title to
17 label in windowing systems). %cd now changes the title to
13 current dir.
18 current dir.
14
19
15 * IPython/Release.py: Added myself to "authors" list,
20 * IPython/Release.py: Added myself to "authors" list,
16 had to create new files.
21 had to create new files.
17
22
18 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
23 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
19 shell escape; not a known bug but had potential to be one in the
24 shell escape; not a known bug but had potential to be one in the
20 future.
25 future.
21
26
22 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
27 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
23 extension API for IPython! See the module for usage example. Fix
28 extension API for IPython! See the module for usage example. Fix
24 OInspect for docstring-less magic functions.
29 OInspect for docstring-less magic functions.
25
30
26
31
27 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
32 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
28
33
29 * IPython/iplib.py (raw_input): temporarily deactivate all
34 * IPython/iplib.py (raw_input): temporarily deactivate all
30 attempts at allowing pasting of code with autoindent on. It
35 attempts at allowing pasting of code with autoindent on. It
31 introduced bugs (reported by Prabhu) and I can't seem to find a
36 introduced bugs (reported by Prabhu) and I can't seem to find a
32 robust combination which works in all cases. Will have to revisit
37 robust combination which works in all cases. Will have to revisit
33 later.
38 later.
34
39
35 * IPython/genutils.py: remove isspace() function. We've dropped
40 * IPython/genutils.py: remove isspace() function. We've dropped
36 2.2 compatibility, so it's OK to use the string method.
41 2.2 compatibility, so it's OK to use the string method.
37
42
38 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
43 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
39
44
40 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
45 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
41 matching what NOT to autocall on, to include all python binary
46 matching what NOT to autocall on, to include all python binary
42 operators (including things like 'and', 'or', 'is' and 'in').
47 operators (including things like 'and', 'or', 'is' and 'in').
43 Prompted by a bug report on 'foo & bar', but I realized we had
48 Prompted by a bug report on 'foo & bar', but I realized we had
44 many more potential bug cases with other operators. The regexp is
49 many more potential bug cases with other operators. The regexp is
45 self.re_exclude_auto, it's fairly commented.
50 self.re_exclude_auto, it's fairly commented.
46
51
47 2006-01-12 Ville Vainio <vivainio@gmail.com>
52 2006-01-12 Ville Vainio <vivainio@gmail.com>
48
53
49 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
54 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
50 Prettified and hardened string/backslash quoting with ipsystem(),
55 Prettified and hardened string/backslash quoting with ipsystem(),
51 ipalias() and ipmagic(). Now even \ characters are passed to
56 ipalias() and ipmagic(). Now even \ characters are passed to
52 %magics, !shell escapes and aliases exactly as they are in the
57 %magics, !shell escapes and aliases exactly as they are in the
53 ipython command line. Should improve backslash experience,
58 ipython command line. Should improve backslash experience,
54 particularly in Windows (path delimiter for some commands that
59 particularly in Windows (path delimiter for some commands that
55 won't understand '/'), but Unix benefits as well (regexps). %cd
60 won't understand '/'), but Unix benefits as well (regexps). %cd
56 magic still doesn't support backslash path delimiters, though. Also
61 magic still doesn't support backslash path delimiters, though. Also
57 deleted all pretense of supporting multiline command strings in
62 deleted all pretense of supporting multiline command strings in
58 !system or %magic commands. Thanks to Jerry McRae for suggestions.
63 !system or %magic commands. Thanks to Jerry McRae for suggestions.
59
64
60 * doc/build_doc_instructions.txt added. Documentation on how to
65 * doc/build_doc_instructions.txt added. Documentation on how to
61 use doc/update_manual.py, added yesterday. Both files contributed
66 use doc/update_manual.py, added yesterday. Both files contributed
62 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
67 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
63 doc/*.sh for deprecation at a later date.
68 doc/*.sh for deprecation at a later date.
64
69
65 * /ipython.py Added ipython.py to root directory for
70 * /ipython.py Added ipython.py to root directory for
66 zero-installation (tar xzvf ipython.tgz; cd ipython; python
71 zero-installation (tar xzvf ipython.tgz; cd ipython; python
67 ipython.py) and development convenience (no need to kee doing
72 ipython.py) and development convenience (no need to kee doing
68 "setup.py install" between changes).
73 "setup.py install" between changes).
69
74
70 * Made ! and !! shell escapes work (again) in multiline expressions:
75 * Made ! and !! shell escapes work (again) in multiline expressions:
71 if 1:
76 if 1:
72 !ls
77 !ls
73 !!ls
78 !!ls
74
79
75 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
80 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
76
81
77 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
82 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
78 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
83 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
79 module in case-insensitive installation. Was causing crashes
84 module in case-insensitive installation. Was causing crashes
80 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
85 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
81
86
82 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
87 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
83 <marienz-AT-gentoo.org>, closes
88 <marienz-AT-gentoo.org>, closes
84 http://www.scipy.net/roundup/ipython/issue51.
89 http://www.scipy.net/roundup/ipython/issue51.
85
90
86 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
91 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
87
92
88 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
93 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
89 problem of excessive CPU usage under *nix and keyboard lag under
94 problem of excessive CPU usage under *nix and keyboard lag under
90 win32.
95 win32.
91
96
92 2006-01-10 *** Released version 0.7.0
97 2006-01-10 *** Released version 0.7.0
93
98
94 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
99 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
95
100
96 * IPython/Release.py (revision): tag version number to 0.7.0,
101 * IPython/Release.py (revision): tag version number to 0.7.0,
97 ready for release.
102 ready for release.
98
103
99 * IPython/Magic.py (magic_edit): Add print statement to %edit so
104 * IPython/Magic.py (magic_edit): Add print statement to %edit so
100 it informs the user of the name of the temp. file used. This can
105 it informs the user of the name of the temp. file used. This can
101 help if you decide later to reuse that same file, so you know
106 help if you decide later to reuse that same file, so you know
102 where to copy the info from.
107 where to copy the info from.
103
108
104 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
109 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
105
110
106 * setup_bdist_egg.py: little script to build an egg. Added
111 * setup_bdist_egg.py: little script to build an egg. Added
107 support in the release tools as well.
112 support in the release tools as well.
108
113
109 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
114 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
110
115
111 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
116 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
112 version selection (new -wxversion command line and ipythonrc
117 version selection (new -wxversion command line and ipythonrc
113 parameter). Patch contributed by Arnd Baecker
118 parameter). Patch contributed by Arnd Baecker
114 <arnd.baecker-AT-web.de>.
119 <arnd.baecker-AT-web.de>.
115
120
116 * IPython/iplib.py (embed_mainloop): fix tab-completion in
121 * IPython/iplib.py (embed_mainloop): fix tab-completion in
117 embedded instances, for variables defined at the interactive
122 embedded instances, for variables defined at the interactive
118 prompt of the embedded ipython. Reported by Arnd.
123 prompt of the embedded ipython. Reported by Arnd.
119
124
120 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
125 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
121 it can be used as a (stateful) toggle, or with a direct parameter.
126 it can be used as a (stateful) toggle, or with a direct parameter.
122
127
123 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
128 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
124 could be triggered in certain cases and cause the traceback
129 could be triggered in certain cases and cause the traceback
125 printer not to work.
130 printer not to work.
126
131
127 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
132 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
128
133
129 * IPython/iplib.py (_should_recompile): Small fix, closes
134 * IPython/iplib.py (_should_recompile): Small fix, closes
130 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
135 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
131
136
132 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
137 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
133
138
134 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
139 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
135 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
140 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
136 Moad for help with tracking it down.
141 Moad for help with tracking it down.
137
142
138 * IPython/iplib.py (handle_auto): fix autocall handling for
143 * IPython/iplib.py (handle_auto): fix autocall handling for
139 objects which support BOTH __getitem__ and __call__ (so that f [x]
144 objects which support BOTH __getitem__ and __call__ (so that f [x]
140 is left alone, instead of becoming f([x]) automatically).
145 is left alone, instead of becoming f([x]) automatically).
141
146
142 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
147 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
143 Ville's patch.
148 Ville's patch.
144
149
145 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
146
151
147 * IPython/iplib.py (handle_auto): changed autocall semantics to
152 * IPython/iplib.py (handle_auto): changed autocall semantics to
148 include 'smart' mode, where the autocall transformation is NOT
153 include 'smart' mode, where the autocall transformation is NOT
149 applied if there are no arguments on the line. This allows you to
154 applied if there are no arguments on the line. This allows you to
150 just type 'foo' if foo is a callable to see its internal form,
155 just type 'foo' if foo is a callable to see its internal form,
151 instead of having it called with no arguments (typically a
156 instead of having it called with no arguments (typically a
152 mistake). The old 'full' autocall still exists: for that, you
157 mistake). The old 'full' autocall still exists: for that, you
153 need to set the 'autocall' parameter to 2 in your ipythonrc file.
158 need to set the 'autocall' parameter to 2 in your ipythonrc file.
154
159
155 * IPython/completer.py (Completer.attr_matches): add
160 * IPython/completer.py (Completer.attr_matches): add
156 tab-completion support for Enthoughts' traits. After a report by
161 tab-completion support for Enthoughts' traits. After a report by
157 Arnd and a patch by Prabhu.
162 Arnd and a patch by Prabhu.
158
163
159 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
164 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
160
165
161 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
166 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
162 Schmolck's patch to fix inspect.getinnerframes().
167 Schmolck's patch to fix inspect.getinnerframes().
163
168
164 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
169 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
165 for embedded instances, regarding handling of namespaces and items
170 for embedded instances, regarding handling of namespaces and items
166 added to the __builtin__ one. Multiple embedded instances and
171 added to the __builtin__ one. Multiple embedded instances and
167 recursive embeddings should work better now (though I'm not sure
172 recursive embeddings should work better now (though I'm not sure
168 I've got all the corner cases fixed, that code is a bit of a brain
173 I've got all the corner cases fixed, that code is a bit of a brain
169 twister).
174 twister).
170
175
171 * IPython/Magic.py (magic_edit): added support to edit in-memory
176 * IPython/Magic.py (magic_edit): added support to edit in-memory
172 macros (automatically creates the necessary temp files). %edit
177 macros (automatically creates the necessary temp files). %edit
173 also doesn't return the file contents anymore, it's just noise.
178 also doesn't return the file contents anymore, it's just noise.
174
179
175 * IPython/completer.py (Completer.attr_matches): revert change to
180 * IPython/completer.py (Completer.attr_matches): revert change to
176 complete only on attributes listed in __all__. I realized it
181 complete only on attributes listed in __all__. I realized it
177 cripples the tab-completion system as a tool for exploring the
182 cripples the tab-completion system as a tool for exploring the
178 internals of unknown libraries (it renders any non-__all__
183 internals of unknown libraries (it renders any non-__all__
179 attribute off-limits). I got bit by this when trying to see
184 attribute off-limits). I got bit by this when trying to see
180 something inside the dis module.
185 something inside the dis module.
181
186
182 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
187 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
183
188
184 * IPython/iplib.py (InteractiveShell.__init__): add .meta
189 * IPython/iplib.py (InteractiveShell.__init__): add .meta
185 namespace for users and extension writers to hold data in. This
190 namespace for users and extension writers to hold data in. This
186 follows the discussion in
191 follows the discussion in
187 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
192 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
188
193
189 * IPython/completer.py (IPCompleter.complete): small patch to help
194 * IPython/completer.py (IPCompleter.complete): small patch to help
190 tab-completion under Emacs, after a suggestion by John Barnard
195 tab-completion under Emacs, after a suggestion by John Barnard
191 <barnarj-AT-ccf.org>.
196 <barnarj-AT-ccf.org>.
192
197
193 * IPython/Magic.py (Magic.extract_input_slices): added support for
198 * IPython/Magic.py (Magic.extract_input_slices): added support for
194 the slice notation in magics to use N-M to represent numbers N...M
199 the slice notation in magics to use N-M to represent numbers N...M
195 (closed endpoints). This is used by %macro and %save.
200 (closed endpoints). This is used by %macro and %save.
196
201
197 * IPython/completer.py (Completer.attr_matches): for modules which
202 * IPython/completer.py (Completer.attr_matches): for modules which
198 define __all__, complete only on those. After a patch by Jeffrey
203 define __all__, complete only on those. After a patch by Jeffrey
199 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
204 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
200 speed up this routine.
205 speed up this routine.
201
206
202 * IPython/Logger.py (Logger.log): fix a history handling bug. I
207 * IPython/Logger.py (Logger.log): fix a history handling bug. I
203 don't know if this is the end of it, but the behavior now is
208 don't know if this is the end of it, but the behavior now is
204 certainly much more correct. Note that coupled with macros,
209 certainly much more correct. Note that coupled with macros,
205 slightly surprising (at first) behavior may occur: a macro will in
210 slightly surprising (at first) behavior may occur: a macro will in
206 general expand to multiple lines of input, so upon exiting, the
211 general expand to multiple lines of input, so upon exiting, the
207 in/out counters will both be bumped by the corresponding amount
212 in/out counters will both be bumped by the corresponding amount
208 (as if the macro's contents had been typed interactively). Typing
213 (as if the macro's contents had been typed interactively). Typing
209 %hist will reveal the intermediate (silently processed) lines.
214 %hist will reveal the intermediate (silently processed) lines.
210
215
211 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
216 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
212 pickle to fail (%run was overwriting __main__ and not restoring
217 pickle to fail (%run was overwriting __main__ and not restoring
213 it, but pickle relies on __main__ to operate).
218 it, but pickle relies on __main__ to operate).
214
219
215 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
220 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
216 using properties, but forgot to make the main InteractiveShell
221 using properties, but forgot to make the main InteractiveShell
217 class a new-style class. Properties fail silently, and
222 class a new-style class. Properties fail silently, and
218 misteriously, with old-style class (getters work, but
223 misteriously, with old-style class (getters work, but
219 setters don't do anything).
224 setters don't do anything).
220
225
221 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
226 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
222
227
223 * IPython/Magic.py (magic_history): fix history reporting bug (I
228 * IPython/Magic.py (magic_history): fix history reporting bug (I
224 know some nasties are still there, I just can't seem to find a
229 know some nasties are still there, I just can't seem to find a
225 reproducible test case to track them down; the input history is
230 reproducible test case to track them down; the input history is
226 falling out of sync...)
231 falling out of sync...)
227
232
228 * IPython/iplib.py (handle_shell_escape): fix bug where both
233 * IPython/iplib.py (handle_shell_escape): fix bug where both
229 aliases and system accesses where broken for indented code (such
234 aliases and system accesses where broken for indented code (such
230 as loops).
235 as loops).
231
236
232 * IPython/genutils.py (shell): fix small but critical bug for
237 * IPython/genutils.py (shell): fix small but critical bug for
233 win32 system access.
238 win32 system access.
234
239
235 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
240 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
236
241
237 * IPython/iplib.py (showtraceback): remove use of the
242 * IPython/iplib.py (showtraceback): remove use of the
238 sys.last_{type/value/traceback} structures, which are non
243 sys.last_{type/value/traceback} structures, which are non
239 thread-safe.
244 thread-safe.
240 (_prefilter): change control flow to ensure that we NEVER
245 (_prefilter): change control flow to ensure that we NEVER
241 introspect objects when autocall is off. This will guarantee that
246 introspect objects when autocall is off. This will guarantee that
242 having an input line of the form 'x.y', where access to attribute
247 having an input line of the form 'x.y', where access to attribute
243 'y' has side effects, doesn't trigger the side effect TWICE. It
248 'y' has side effects, doesn't trigger the side effect TWICE. It
244 is important to note that, with autocall on, these side effects
249 is important to note that, with autocall on, these side effects
245 can still happen.
250 can still happen.
246 (ipsystem): new builtin, to complete the ip{magic/alias/system}
251 (ipsystem): new builtin, to complete the ip{magic/alias/system}
247 trio. IPython offers these three kinds of special calls which are
252 trio. IPython offers these three kinds of special calls which are
248 not python code, and it's a good thing to have their call method
253 not python code, and it's a good thing to have their call method
249 be accessible as pure python functions (not just special syntax at
254 be accessible as pure python functions (not just special syntax at
250 the command line). It gives us a better internal implementation
255 the command line). It gives us a better internal implementation
251 structure, as well as exposing these for user scripting more
256 structure, as well as exposing these for user scripting more
252 cleanly.
257 cleanly.
253
258
254 * IPython/macro.py (Macro.__init__): moved macros to a standalone
259 * IPython/macro.py (Macro.__init__): moved macros to a standalone
255 file. Now that they'll be more likely to be used with the
260 file. Now that they'll be more likely to be used with the
256 persistance system (%store), I want to make sure their module path
261 persistance system (%store), I want to make sure their module path
257 doesn't change in the future, so that we don't break things for
262 doesn't change in the future, so that we don't break things for
258 users' persisted data.
263 users' persisted data.
259
264
260 * IPython/iplib.py (autoindent_update): move indentation
265 * IPython/iplib.py (autoindent_update): move indentation
261 management into the _text_ processing loop, not the keyboard
266 management into the _text_ processing loop, not the keyboard
262 interactive one. This is necessary to correctly process non-typed
267 interactive one. This is necessary to correctly process non-typed
263 multiline input (such as macros).
268 multiline input (such as macros).
264
269
265 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
270 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
266 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
271 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
267 which was producing problems in the resulting manual.
272 which was producing problems in the resulting manual.
268 (magic_whos): improve reporting of instances (show their class,
273 (magic_whos): improve reporting of instances (show their class,
269 instead of simply printing 'instance' which isn't terribly
274 instead of simply printing 'instance' which isn't terribly
270 informative).
275 informative).
271
276
272 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
277 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
273 (minor mods) to support network shares under win32.
278 (minor mods) to support network shares under win32.
274
279
275 * IPython/winconsole.py (get_console_size): add new winconsole
280 * IPython/winconsole.py (get_console_size): add new winconsole
276 module and fixes to page_dumb() to improve its behavior under
281 module and fixes to page_dumb() to improve its behavior under
277 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
282 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
278
283
279 * IPython/Magic.py (Macro): simplified Macro class to just
284 * IPython/Magic.py (Macro): simplified Macro class to just
280 subclass list. We've had only 2.2 compatibility for a very long
285 subclass list. We've had only 2.2 compatibility for a very long
281 time, yet I was still avoiding subclassing the builtin types. No
286 time, yet I was still avoiding subclassing the builtin types. No
282 more (I'm also starting to use properties, though I won't shift to
287 more (I'm also starting to use properties, though I won't shift to
283 2.3-specific features quite yet).
288 2.3-specific features quite yet).
284 (magic_store): added Ville's patch for lightweight variable
289 (magic_store): added Ville's patch for lightweight variable
285 persistence, after a request on the user list by Matt Wilkie
290 persistence, after a request on the user list by Matt Wilkie
286 <maphew-AT-gmail.com>. The new %store magic's docstring has full
291 <maphew-AT-gmail.com>. The new %store magic's docstring has full
287 details.
292 details.
288
293
289 * IPython/iplib.py (InteractiveShell.post_config_initialization):
294 * IPython/iplib.py (InteractiveShell.post_config_initialization):
290 changed the default logfile name from 'ipython.log' to
295 changed the default logfile name from 'ipython.log' to
291 'ipython_log.py'. These logs are real python files, and now that
296 'ipython_log.py'. These logs are real python files, and now that
292 we have much better multiline support, people are more likely to
297 we have much better multiline support, people are more likely to
293 want to use them as such. Might as well name them correctly.
298 want to use them as such. Might as well name them correctly.
294
299
295 * IPython/Magic.py: substantial cleanup. While we can't stop
300 * IPython/Magic.py: substantial cleanup. While we can't stop
296 using magics as mixins, due to the existing customizations 'out
301 using magics as mixins, due to the existing customizations 'out
297 there' which rely on the mixin naming conventions, at least I
302 there' which rely on the mixin naming conventions, at least I
298 cleaned out all cross-class name usage. So once we are OK with
303 cleaned out all cross-class name usage. So once we are OK with
299 breaking compatibility, the two systems can be separated.
304 breaking compatibility, the two systems can be separated.
300
305
301 * IPython/Logger.py: major cleanup. This one is NOT a mixin
306 * IPython/Logger.py: major cleanup. This one is NOT a mixin
302 anymore, and the class is a fair bit less hideous as well. New
307 anymore, and the class is a fair bit less hideous as well. New
303 features were also introduced: timestamping of input, and logging
308 features were also introduced: timestamping of input, and logging
304 of output results. These are user-visible with the -t and -o
309 of output results. These are user-visible with the -t and -o
305 options to %logstart. Closes
310 options to %logstart. Closes
306 http://www.scipy.net/roundup/ipython/issue11 and a request by
311 http://www.scipy.net/roundup/ipython/issue11 and a request by
307 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
312 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
308
313
309 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
314 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
310
315
311 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
316 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
312 better hadnle backslashes in paths. See the thread 'More Windows
317 better hadnle backslashes in paths. See the thread 'More Windows
313 questions part 2 - \/ characters revisited' on the iypthon user
318 questions part 2 - \/ characters revisited' on the iypthon user
314 list:
319 list:
315 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
320 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
316
321
317 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
322 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
318
323
319 (InteractiveShell.__init__): change threaded shells to not use the
324 (InteractiveShell.__init__): change threaded shells to not use the
320 ipython crash handler. This was causing more problems than not,
325 ipython crash handler. This was causing more problems than not,
321 as exceptions in the main thread (GUI code, typically) would
326 as exceptions in the main thread (GUI code, typically) would
322 always show up as a 'crash', when they really weren't.
327 always show up as a 'crash', when they really weren't.
323
328
324 The colors and exception mode commands (%colors/%xmode) have been
329 The colors and exception mode commands (%colors/%xmode) have been
325 synchronized to also take this into account, so users can get
330 synchronized to also take this into account, so users can get
326 verbose exceptions for their threaded code as well. I also added
331 verbose exceptions for their threaded code as well. I also added
327 support for activating pdb inside this exception handler as well,
332 support for activating pdb inside this exception handler as well,
328 so now GUI authors can use IPython's enhanced pdb at runtime.
333 so now GUI authors can use IPython's enhanced pdb at runtime.
329
334
330 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
335 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
331 true by default, and add it to the shipped ipythonrc file. Since
336 true by default, and add it to the shipped ipythonrc file. Since
332 this asks the user before proceeding, I think it's OK to make it
337 this asks the user before proceeding, I think it's OK to make it
333 true by default.
338 true by default.
334
339
335 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
340 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
336 of the previous special-casing of input in the eval loop. I think
341 of the previous special-casing of input in the eval loop. I think
337 this is cleaner, as they really are commands and shouldn't have
342 this is cleaner, as they really are commands and shouldn't have
338 a special role in the middle of the core code.
343 a special role in the middle of the core code.
339
344
340 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
345 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
341
346
342 * IPython/iplib.py (edit_syntax_error): added support for
347 * IPython/iplib.py (edit_syntax_error): added support for
343 automatically reopening the editor if the file had a syntax error
348 automatically reopening the editor if the file had a syntax error
344 in it. Thanks to scottt who provided the patch at:
349 in it. Thanks to scottt who provided the patch at:
345 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
350 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
346 version committed).
351 version committed).
347
352
348 * IPython/iplib.py (handle_normal): add suport for multi-line
353 * IPython/iplib.py (handle_normal): add suport for multi-line
349 input with emtpy lines. This fixes
354 input with emtpy lines. This fixes
350 http://www.scipy.net/roundup/ipython/issue43 and a similar
355 http://www.scipy.net/roundup/ipython/issue43 and a similar
351 discussion on the user list.
356 discussion on the user list.
352
357
353 WARNING: a behavior change is necessarily introduced to support
358 WARNING: a behavior change is necessarily introduced to support
354 blank lines: now a single blank line with whitespace does NOT
359 blank lines: now a single blank line with whitespace does NOT
355 break the input loop, which means that when autoindent is on, by
360 break the input loop, which means that when autoindent is on, by
356 default hitting return on the next (indented) line does NOT exit.
361 default hitting return on the next (indented) line does NOT exit.
357
362
358 Instead, to exit a multiline input you can either have:
363 Instead, to exit a multiline input you can either have:
359
364
360 - TWO whitespace lines (just hit return again), or
365 - TWO whitespace lines (just hit return again), or
361 - a single whitespace line of a different length than provided
366 - a single whitespace line of a different length than provided
362 by the autoindent (add or remove a space).
367 by the autoindent (add or remove a space).
363
368
364 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
369 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
365 module to better organize all readline-related functionality.
370 module to better organize all readline-related functionality.
366 I've deleted FlexCompleter and put all completion clases here.
371 I've deleted FlexCompleter and put all completion clases here.
367
372
368 * IPython/iplib.py (raw_input): improve indentation management.
373 * IPython/iplib.py (raw_input): improve indentation management.
369 It is now possible to paste indented code with autoindent on, and
374 It is now possible to paste indented code with autoindent on, and
370 the code is interpreted correctly (though it still looks bad on
375 the code is interpreted correctly (though it still looks bad on
371 screen, due to the line-oriented nature of ipython).
376 screen, due to the line-oriented nature of ipython).
372 (MagicCompleter.complete): change behavior so that a TAB key on an
377 (MagicCompleter.complete): change behavior so that a TAB key on an
373 otherwise empty line actually inserts a tab, instead of completing
378 otherwise empty line actually inserts a tab, instead of completing
374 on the entire global namespace. This makes it easier to use the
379 on the entire global namespace. This makes it easier to use the
375 TAB key for indentation. After a request by Hans Meine
380 TAB key for indentation. After a request by Hans Meine
376 <hans_meine-AT-gmx.net>
381 <hans_meine-AT-gmx.net>
377 (_prefilter): add support so that typing plain 'exit' or 'quit'
382 (_prefilter): add support so that typing plain 'exit' or 'quit'
378 does a sensible thing. Originally I tried to deviate as little as
383 does a sensible thing. Originally I tried to deviate as little as
379 possible from the default python behavior, but even that one may
384 possible from the default python behavior, but even that one may
380 change in this direction (thread on python-dev to that effect).
385 change in this direction (thread on python-dev to that effect).
381 Regardless, ipython should do the right thing even if CPython's
386 Regardless, ipython should do the right thing even if CPython's
382 '>>>' prompt doesn't.
387 '>>>' prompt doesn't.
383 (InteractiveShell): removed subclassing code.InteractiveConsole
388 (InteractiveShell): removed subclassing code.InteractiveConsole
384 class. By now we'd overridden just about all of its methods: I've
389 class. By now we'd overridden just about all of its methods: I've
385 copied the remaining two over, and now ipython is a standalone
390 copied the remaining two over, and now ipython is a standalone
386 class. This will provide a clearer picture for the chainsaw
391 class. This will provide a clearer picture for the chainsaw
387 branch refactoring.
392 branch refactoring.
388
393
389 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
394 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
390
395
391 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
396 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
392 failures for objects which break when dir() is called on them.
397 failures for objects which break when dir() is called on them.
393
398
394 * IPython/FlexCompleter.py (Completer.__init__): Added support for
399 * IPython/FlexCompleter.py (Completer.__init__): Added support for
395 distinct local and global namespaces in the completer API. This
400 distinct local and global namespaces in the completer API. This
396 change allows us top properly handle completion with distinct
401 change allows us top properly handle completion with distinct
397 scopes, including in embedded instances (this had never really
402 scopes, including in embedded instances (this had never really
398 worked correctly).
403 worked correctly).
399
404
400 Note: this introduces a change in the constructor for
405 Note: this introduces a change in the constructor for
401 MagicCompleter, as a new global_namespace parameter is now the
406 MagicCompleter, as a new global_namespace parameter is now the
402 second argument (the others were bumped one position).
407 second argument (the others were bumped one position).
403
408
404 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
409 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
405
410
406 * IPython/iplib.py (embed_mainloop): fix tab-completion in
411 * IPython/iplib.py (embed_mainloop): fix tab-completion in
407 embedded instances (which can be done now thanks to Vivian's
412 embedded instances (which can be done now thanks to Vivian's
408 frame-handling fixes for pdb).
413 frame-handling fixes for pdb).
409 (InteractiveShell.__init__): Fix namespace handling problem in
414 (InteractiveShell.__init__): Fix namespace handling problem in
410 embedded instances. We were overwriting __main__ unconditionally,
415 embedded instances. We were overwriting __main__ unconditionally,
411 and this should only be done for 'full' (non-embedded) IPython;
416 and this should only be done for 'full' (non-embedded) IPython;
412 embedded instances must respect the caller's __main__. Thanks to
417 embedded instances must respect the caller's __main__. Thanks to
413 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
418 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
414
419
415 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
420 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
416
421
417 * setup.py: added download_url to setup(). This registers the
422 * setup.py: added download_url to setup(). This registers the
418 download address at PyPI, which is not only useful to humans
423 download address at PyPI, which is not only useful to humans
419 browsing the site, but is also picked up by setuptools (the Eggs
424 browsing the site, but is also picked up by setuptools (the Eggs
420 machinery). Thanks to Ville and R. Kern for the info/discussion
425 machinery). Thanks to Ville and R. Kern for the info/discussion
421 on this.
426 on this.
422
427
423 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
428 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
424
429
425 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
430 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
426 This brings a lot of nice functionality to the pdb mode, which now
431 This brings a lot of nice functionality to the pdb mode, which now
427 has tab-completion, syntax highlighting, and better stack handling
432 has tab-completion, syntax highlighting, and better stack handling
428 than before. Many thanks to Vivian De Smedt
433 than before. Many thanks to Vivian De Smedt
429 <vivian-AT-vdesmedt.com> for the original patches.
434 <vivian-AT-vdesmedt.com> for the original patches.
430
435
431 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
436 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
432
437
433 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
438 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
434 sequence to consistently accept the banner argument. The
439 sequence to consistently accept the banner argument. The
435 inconsistency was tripping SAGE, thanks to Gary Zablackis
440 inconsistency was tripping SAGE, thanks to Gary Zablackis
436 <gzabl-AT-yahoo.com> for the report.
441 <gzabl-AT-yahoo.com> for the report.
437
442
438 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
443 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
439
444
440 * IPython/iplib.py (InteractiveShell.post_config_initialization):
445 * IPython/iplib.py (InteractiveShell.post_config_initialization):
441 Fix bug where a naked 'alias' call in the ipythonrc file would
446 Fix bug where a naked 'alias' call in the ipythonrc file would
442 cause a crash. Bug reported by Jorgen Stenarson.
447 cause a crash. Bug reported by Jorgen Stenarson.
443
448
444 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
449 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
445
450
446 * IPython/ipmaker.py (make_IPython): cleanups which should improve
451 * IPython/ipmaker.py (make_IPython): cleanups which should improve
447 startup time.
452 startup time.
448
453
449 * IPython/iplib.py (runcode): my globals 'fix' for embedded
454 * IPython/iplib.py (runcode): my globals 'fix' for embedded
450 instances had introduced a bug with globals in normal code. Now
455 instances had introduced a bug with globals in normal code. Now
451 it's working in all cases.
456 it's working in all cases.
452
457
453 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
458 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
454 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
459 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
455 has been introduced to set the default case sensitivity of the
460 has been introduced to set the default case sensitivity of the
456 searches. Users can still select either mode at runtime on a
461 searches. Users can still select either mode at runtime on a
457 per-search basis.
462 per-search basis.
458
463
459 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
464 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
460
465
461 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
466 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
462 attributes in wildcard searches for subclasses. Modified version
467 attributes in wildcard searches for subclasses. Modified version
463 of a patch by Jorgen.
468 of a patch by Jorgen.
464
469
465 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
470 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
466
471
467 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
472 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
468 embedded instances. I added a user_global_ns attribute to the
473 embedded instances. I added a user_global_ns attribute to the
469 InteractiveShell class to handle this.
474 InteractiveShell class to handle this.
470
475
471 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
476 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
472
477
473 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
478 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
474 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
479 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
475 (reported under win32, but may happen also in other platforms).
480 (reported under win32, but may happen also in other platforms).
476 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
481 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
477
482
478 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
483 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
479
484
480 * IPython/Magic.py (magic_psearch): new support for wildcard
485 * IPython/Magic.py (magic_psearch): new support for wildcard
481 patterns. Now, typing ?a*b will list all names which begin with a
486 patterns. Now, typing ?a*b will list all names which begin with a
482 and end in b, for example. The %psearch magic has full
487 and end in b, for example. The %psearch magic has full
483 docstrings. Many thanks to JΓΆrgen Stenarson
488 docstrings. Many thanks to JΓΆrgen Stenarson
484 <jorgen.stenarson-AT-bostream.nu>, author of the patches
489 <jorgen.stenarson-AT-bostream.nu>, author of the patches
485 implementing this functionality.
490 implementing this functionality.
486
491
487 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
492 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
488
493
489 * Manual: fixed long-standing annoyance of double-dashes (as in
494 * Manual: fixed long-standing annoyance of double-dashes (as in
490 --prefix=~, for example) being stripped in the HTML version. This
495 --prefix=~, for example) being stripped in the HTML version. This
491 is a latex2html bug, but a workaround was provided. Many thanks
496 is a latex2html bug, but a workaround was provided. Many thanks
492 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
497 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
493 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
498 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
494 rolling. This seemingly small issue had tripped a number of users
499 rolling. This seemingly small issue had tripped a number of users
495 when first installing, so I'm glad to see it gone.
500 when first installing, so I'm glad to see it gone.
496
501
497 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
502 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
498
503
499 * IPython/Extensions/numeric_formats.py: fix missing import,
504 * IPython/Extensions/numeric_formats.py: fix missing import,
500 reported by Stephen Walton.
505 reported by Stephen Walton.
501
506
502 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
507 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
503
508
504 * IPython/demo.py: finish demo module, fully documented now.
509 * IPython/demo.py: finish demo module, fully documented now.
505
510
506 * IPython/genutils.py (file_read): simple little utility to read a
511 * IPython/genutils.py (file_read): simple little utility to read a
507 file and ensure it's closed afterwards.
512 file and ensure it's closed afterwards.
508
513
509 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
514 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
510
515
511 * IPython/demo.py (Demo.__init__): added support for individually
516 * IPython/demo.py (Demo.__init__): added support for individually
512 tagging blocks for automatic execution.
517 tagging blocks for automatic execution.
513
518
514 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
519 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
515 syntax-highlighted python sources, requested by John.
520 syntax-highlighted python sources, requested by John.
516
521
517 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
522 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
518
523
519 * IPython/demo.py (Demo.again): fix bug where again() blocks after
524 * IPython/demo.py (Demo.again): fix bug where again() blocks after
520 finishing.
525 finishing.
521
526
522 * IPython/genutils.py (shlex_split): moved from Magic to here,
527 * IPython/genutils.py (shlex_split): moved from Magic to here,
523 where all 2.2 compatibility stuff lives. I needed it for demo.py.
528 where all 2.2 compatibility stuff lives. I needed it for demo.py.
524
529
525 * IPython/demo.py (Demo.__init__): added support for silent
530 * IPython/demo.py (Demo.__init__): added support for silent
526 blocks, improved marks as regexps, docstrings written.
531 blocks, improved marks as regexps, docstrings written.
527 (Demo.__init__): better docstring, added support for sys.argv.
532 (Demo.__init__): better docstring, added support for sys.argv.
528
533
529 * IPython/genutils.py (marquee): little utility used by the demo
534 * IPython/genutils.py (marquee): little utility used by the demo
530 code, handy in general.
535 code, handy in general.
531
536
532 * IPython/demo.py (Demo.__init__): new class for interactive
537 * IPython/demo.py (Demo.__init__): new class for interactive
533 demos. Not documented yet, I just wrote it in a hurry for
538 demos. Not documented yet, I just wrote it in a hurry for
534 scipy'05. Will docstring later.
539 scipy'05. Will docstring later.
535
540
536 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
541 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
537
542
538 * IPython/Shell.py (sigint_handler): Drastic simplification which
543 * IPython/Shell.py (sigint_handler): Drastic simplification which
539 also seems to make Ctrl-C work correctly across threads! This is
544 also seems to make Ctrl-C work correctly across threads! This is
540 so simple, that I can't beleive I'd missed it before. Needs more
545 so simple, that I can't beleive I'd missed it before. Needs more
541 testing, though.
546 testing, though.
542 (KBINT): Never mind, revert changes. I'm sure I'd tried something
547 (KBINT): Never mind, revert changes. I'm sure I'd tried something
543 like this before...
548 like this before...
544
549
545 * IPython/genutils.py (get_home_dir): add protection against
550 * IPython/genutils.py (get_home_dir): add protection against
546 non-dirs in win32 registry.
551 non-dirs in win32 registry.
547
552
548 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
553 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
549 bug where dict was mutated while iterating (pysh crash).
554 bug where dict was mutated while iterating (pysh crash).
550
555
551 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
556 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
552
557
553 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
558 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
554 spurious newlines added by this routine. After a report by
559 spurious newlines added by this routine. After a report by
555 F. Mantegazza.
560 F. Mantegazza.
556
561
557 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
562 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
558
563
559 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
564 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
560 calls. These were a leftover from the GTK 1.x days, and can cause
565 calls. These were a leftover from the GTK 1.x days, and can cause
561 problems in certain cases (after a report by John Hunter).
566 problems in certain cases (after a report by John Hunter).
562
567
563 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
568 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
564 os.getcwd() fails at init time. Thanks to patch from David Remahl
569 os.getcwd() fails at init time. Thanks to patch from David Remahl
565 <chmod007-AT-mac.com>.
570 <chmod007-AT-mac.com>.
566 (InteractiveShell.__init__): prevent certain special magics from
571 (InteractiveShell.__init__): prevent certain special magics from
567 being shadowed by aliases. Closes
572 being shadowed by aliases. Closes
568 http://www.scipy.net/roundup/ipython/issue41.
573 http://www.scipy.net/roundup/ipython/issue41.
569
574
570 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
575 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
571
576
572 * IPython/iplib.py (InteractiveShell.complete): Added new
577 * IPython/iplib.py (InteractiveShell.complete): Added new
573 top-level completion method to expose the completion mechanism
578 top-level completion method to expose the completion mechanism
574 beyond readline-based environments.
579 beyond readline-based environments.
575
580
576 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
581 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
577
582
578 * tools/ipsvnc (svnversion): fix svnversion capture.
583 * tools/ipsvnc (svnversion): fix svnversion capture.
579
584
580 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
585 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
581 attribute to self, which was missing. Before, it was set by a
586 attribute to self, which was missing. Before, it was set by a
582 routine which in certain cases wasn't being called, so the
587 routine which in certain cases wasn't being called, so the
583 instance could end up missing the attribute. This caused a crash.
588 instance could end up missing the attribute. This caused a crash.
584 Closes http://www.scipy.net/roundup/ipython/issue40.
589 Closes http://www.scipy.net/roundup/ipython/issue40.
585
590
586 2005-08-16 Fernando Perez <fperez@colorado.edu>
591 2005-08-16 Fernando Perez <fperez@colorado.edu>
587
592
588 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
593 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
589 contains non-string attribute. Closes
594 contains non-string attribute. Closes
590 http://www.scipy.net/roundup/ipython/issue38.
595 http://www.scipy.net/roundup/ipython/issue38.
591
596
592 2005-08-14 Fernando Perez <fperez@colorado.edu>
597 2005-08-14 Fernando Perez <fperez@colorado.edu>
593
598
594 * tools/ipsvnc: Minor improvements, to add changeset info.
599 * tools/ipsvnc: Minor improvements, to add changeset info.
595
600
596 2005-08-12 Fernando Perez <fperez@colorado.edu>
601 2005-08-12 Fernando Perez <fperez@colorado.edu>
597
602
598 * IPython/iplib.py (runsource): remove self.code_to_run_src
603 * IPython/iplib.py (runsource): remove self.code_to_run_src
599 attribute. I realized this is nothing more than
604 attribute. I realized this is nothing more than
600 '\n'.join(self.buffer), and having the same data in two different
605 '\n'.join(self.buffer), and having the same data in two different
601 places is just asking for synchronization bugs. This may impact
606 places is just asking for synchronization bugs. This may impact
602 people who have custom exception handlers, so I need to warn
607 people who have custom exception handlers, so I need to warn
603 ipython-dev about it (F. Mantegazza may use them).
608 ipython-dev about it (F. Mantegazza may use them).
604
609
605 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
610 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
606
611
607 * IPython/genutils.py: fix 2.2 compatibility (generators)
612 * IPython/genutils.py: fix 2.2 compatibility (generators)
608
613
609 2005-07-18 Fernando Perez <fperez@colorado.edu>
614 2005-07-18 Fernando Perez <fperez@colorado.edu>
610
615
611 * IPython/genutils.py (get_home_dir): fix to help users with
616 * IPython/genutils.py (get_home_dir): fix to help users with
612 invalid $HOME under win32.
617 invalid $HOME under win32.
613
618
614 2005-07-17 Fernando Perez <fperez@colorado.edu>
619 2005-07-17 Fernando Perez <fperez@colorado.edu>
615
620
616 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
621 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
617 some old hacks and clean up a bit other routines; code should be
622 some old hacks and clean up a bit other routines; code should be
618 simpler and a bit faster.
623 simpler and a bit faster.
619
624
620 * IPython/iplib.py (interact): removed some last-resort attempts
625 * IPython/iplib.py (interact): removed some last-resort attempts
621 to survive broken stdout/stderr. That code was only making it
626 to survive broken stdout/stderr. That code was only making it
622 harder to abstract out the i/o (necessary for gui integration),
627 harder to abstract out the i/o (necessary for gui integration),
623 and the crashes it could prevent were extremely rare in practice
628 and the crashes it could prevent were extremely rare in practice
624 (besides being fully user-induced in a pretty violent manner).
629 (besides being fully user-induced in a pretty violent manner).
625
630
626 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
631 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
627 Nothing major yet, but the code is simpler to read; this should
632 Nothing major yet, but the code is simpler to read; this should
628 make it easier to do more serious modifications in the future.
633 make it easier to do more serious modifications in the future.
629
634
630 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
635 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
631 which broke in .15 (thanks to a report by Ville).
636 which broke in .15 (thanks to a report by Ville).
632
637
633 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
638 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
634 be quite correct, I know next to nothing about unicode). This
639 be quite correct, I know next to nothing about unicode). This
635 will allow unicode strings to be used in prompts, amongst other
640 will allow unicode strings to be used in prompts, amongst other
636 cases. It also will prevent ipython from crashing when unicode
641 cases. It also will prevent ipython from crashing when unicode
637 shows up unexpectedly in many places. If ascii encoding fails, we
642 shows up unexpectedly in many places. If ascii encoding fails, we
638 assume utf_8. Currently the encoding is not a user-visible
643 assume utf_8. Currently the encoding is not a user-visible
639 setting, though it could be made so if there is demand for it.
644 setting, though it could be made so if there is demand for it.
640
645
641 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
646 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
642
647
643 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
648 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
644
649
645 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
650 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
646
651
647 * IPython/genutils.py: Add 2.2 compatibility here, so all other
652 * IPython/genutils.py: Add 2.2 compatibility here, so all other
648 code can work transparently for 2.2/2.3.
653 code can work transparently for 2.2/2.3.
649
654
650 2005-07-16 Fernando Perez <fperez@colorado.edu>
655 2005-07-16 Fernando Perez <fperez@colorado.edu>
651
656
652 * IPython/ultraTB.py (ExceptionColors): Make a global variable
657 * IPython/ultraTB.py (ExceptionColors): Make a global variable
653 out of the color scheme table used for coloring exception
658 out of the color scheme table used for coloring exception
654 tracebacks. This allows user code to add new schemes at runtime.
659 tracebacks. This allows user code to add new schemes at runtime.
655 This is a minimally modified version of the patch at
660 This is a minimally modified version of the patch at
656 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
661 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
657 for the contribution.
662 for the contribution.
658
663
659 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
664 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
660 slightly modified version of the patch in
665 slightly modified version of the patch in
661 http://www.scipy.net/roundup/ipython/issue34, which also allows me
666 http://www.scipy.net/roundup/ipython/issue34, which also allows me
662 to remove the previous try/except solution (which was costlier).
667 to remove the previous try/except solution (which was costlier).
663 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
668 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
664
669
665 2005-06-08 Fernando Perez <fperez@colorado.edu>
670 2005-06-08 Fernando Perez <fperez@colorado.edu>
666
671
667 * IPython/iplib.py (write/write_err): Add methods to abstract all
672 * IPython/iplib.py (write/write_err): Add methods to abstract all
668 I/O a bit more.
673 I/O a bit more.
669
674
670 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
675 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
671 warning, reported by Aric Hagberg, fix by JD Hunter.
676 warning, reported by Aric Hagberg, fix by JD Hunter.
672
677
673 2005-06-02 *** Released version 0.6.15
678 2005-06-02 *** Released version 0.6.15
674
679
675 2005-06-01 Fernando Perez <fperez@colorado.edu>
680 2005-06-01 Fernando Perez <fperez@colorado.edu>
676
681
677 * IPython/iplib.py (MagicCompleter.file_matches): Fix
682 * IPython/iplib.py (MagicCompleter.file_matches): Fix
678 tab-completion of filenames within open-quoted strings. Note that
683 tab-completion of filenames within open-quoted strings. Note that
679 this requires that in ~/.ipython/ipythonrc, users change the
684 this requires that in ~/.ipython/ipythonrc, users change the
680 readline delimiters configuration to read:
685 readline delimiters configuration to read:
681
686
682 readline_remove_delims -/~
687 readline_remove_delims -/~
683
688
684
689
685 2005-05-31 *** Released version 0.6.14
690 2005-05-31 *** Released version 0.6.14
686
691
687 2005-05-29 Fernando Perez <fperez@colorado.edu>
692 2005-05-29 Fernando Perez <fperez@colorado.edu>
688
693
689 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
694 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
690 with files not on the filesystem. Reported by Eliyahu Sandler
695 with files not on the filesystem. Reported by Eliyahu Sandler
691 <eli@gondolin.net>
696 <eli@gondolin.net>
692
697
693 2005-05-22 Fernando Perez <fperez@colorado.edu>
698 2005-05-22 Fernando Perez <fperez@colorado.edu>
694
699
695 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
700 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
696 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
701 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
697
702
698 2005-05-19 Fernando Perez <fperez@colorado.edu>
703 2005-05-19 Fernando Perez <fperez@colorado.edu>
699
704
700 * IPython/iplib.py (safe_execfile): close a file which could be
705 * IPython/iplib.py (safe_execfile): close a file which could be
701 left open (causing problems in win32, which locks open files).
706 left open (causing problems in win32, which locks open files).
702 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
707 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
703
708
704 2005-05-18 Fernando Perez <fperez@colorado.edu>
709 2005-05-18 Fernando Perez <fperez@colorado.edu>
705
710
706 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
711 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
707 keyword arguments correctly to safe_execfile().
712 keyword arguments correctly to safe_execfile().
708
713
709 2005-05-13 Fernando Perez <fperez@colorado.edu>
714 2005-05-13 Fernando Perez <fperez@colorado.edu>
710
715
711 * ipython.1: Added info about Qt to manpage, and threads warning
716 * ipython.1: Added info about Qt to manpage, and threads warning
712 to usage page (invoked with --help).
717 to usage page (invoked with --help).
713
718
714 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
719 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
715 new matcher (it goes at the end of the priority list) to do
720 new matcher (it goes at the end of the priority list) to do
716 tab-completion on named function arguments. Submitted by George
721 tab-completion on named function arguments. Submitted by George
717 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
722 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
718 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
723 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
719 for more details.
724 for more details.
720
725
721 * IPython/Magic.py (magic_run): Added new -e flag to ignore
726 * IPython/Magic.py (magic_run): Added new -e flag to ignore
722 SystemExit exceptions in the script being run. Thanks to a report
727 SystemExit exceptions in the script being run. Thanks to a report
723 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
728 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
724 producing very annoying behavior when running unit tests.
729 producing very annoying behavior when running unit tests.
725
730
726 2005-05-12 Fernando Perez <fperez@colorado.edu>
731 2005-05-12 Fernando Perez <fperez@colorado.edu>
727
732
728 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
733 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
729 which I'd broken (again) due to a changed regexp. In the process,
734 which I'd broken (again) due to a changed regexp. In the process,
730 added ';' as an escape to auto-quote the whole line without
735 added ';' as an escape to auto-quote the whole line without
731 splitting its arguments. Thanks to a report by Jerry McRae
736 splitting its arguments. Thanks to a report by Jerry McRae
732 <qrs0xyc02-AT-sneakemail.com>.
737 <qrs0xyc02-AT-sneakemail.com>.
733
738
734 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
739 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
735 possible crashes caused by a TokenError. Reported by Ed Schofield
740 possible crashes caused by a TokenError. Reported by Ed Schofield
736 <schofield-AT-ftw.at>.
741 <schofield-AT-ftw.at>.
737
742
738 2005-05-06 Fernando Perez <fperez@colorado.edu>
743 2005-05-06 Fernando Perez <fperez@colorado.edu>
739
744
740 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
745 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
741
746
742 2005-04-29 Fernando Perez <fperez@colorado.edu>
747 2005-04-29 Fernando Perez <fperez@colorado.edu>
743
748
744 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
749 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
745 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
750 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
746 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
751 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
747 which provides support for Qt interactive usage (similar to the
752 which provides support for Qt interactive usage (similar to the
748 existing one for WX and GTK). This had been often requested.
753 existing one for WX and GTK). This had been often requested.
749
754
750 2005-04-14 *** Released version 0.6.13
755 2005-04-14 *** Released version 0.6.13
751
756
752 2005-04-08 Fernando Perez <fperez@colorado.edu>
757 2005-04-08 Fernando Perez <fperez@colorado.edu>
753
758
754 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
759 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
755 from _ofind, which gets called on almost every input line. Now,
760 from _ofind, which gets called on almost every input line. Now,
756 we only try to get docstrings if they are actually going to be
761 we only try to get docstrings if they are actually going to be
757 used (the overhead of fetching unnecessary docstrings can be
762 used (the overhead of fetching unnecessary docstrings can be
758 noticeable for certain objects, such as Pyro proxies).
763 noticeable for certain objects, such as Pyro proxies).
759
764
760 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
765 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
761 for completers. For some reason I had been passing them the state
766 for completers. For some reason I had been passing them the state
762 variable, which completers never actually need, and was in
767 variable, which completers never actually need, and was in
763 conflict with the rlcompleter API. Custom completers ONLY need to
768 conflict with the rlcompleter API. Custom completers ONLY need to
764 take the text parameter.
769 take the text parameter.
765
770
766 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
771 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
767 work correctly in pysh. I've also moved all the logic which used
772 work correctly in pysh. I've also moved all the logic which used
768 to be in pysh.py here, which will prevent problems with future
773 to be in pysh.py here, which will prevent problems with future
769 upgrades. However, this time I must warn users to update their
774 upgrades. However, this time I must warn users to update their
770 pysh profile to include the line
775 pysh profile to include the line
771
776
772 import_all IPython.Extensions.InterpreterExec
777 import_all IPython.Extensions.InterpreterExec
773
778
774 because otherwise things won't work for them. They MUST also
779 because otherwise things won't work for them. They MUST also
775 delete pysh.py and the line
780 delete pysh.py and the line
776
781
777 execfile pysh.py
782 execfile pysh.py
778
783
779 from their ipythonrc-pysh.
784 from their ipythonrc-pysh.
780
785
781 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
786 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
782 robust in the face of objects whose dir() returns non-strings
787 robust in the face of objects whose dir() returns non-strings
783 (which it shouldn't, but some broken libs like ITK do). Thanks to
788 (which it shouldn't, but some broken libs like ITK do). Thanks to
784 a patch by John Hunter (implemented differently, though). Also
789 a patch by John Hunter (implemented differently, though). Also
785 minor improvements by using .extend instead of + on lists.
790 minor improvements by using .extend instead of + on lists.
786
791
787 * pysh.py:
792 * pysh.py:
788
793
789 2005-04-06 Fernando Perez <fperez@colorado.edu>
794 2005-04-06 Fernando Perez <fperez@colorado.edu>
790
795
791 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
796 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
792 by default, so that all users benefit from it. Those who don't
797 by default, so that all users benefit from it. Those who don't
793 want it can still turn it off.
798 want it can still turn it off.
794
799
795 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
800 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
796 config file, I'd forgotten about this, so users were getting it
801 config file, I'd forgotten about this, so users were getting it
797 off by default.
802 off by default.
798
803
799 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
804 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
800 consistency. Now magics can be called in multiline statements,
805 consistency. Now magics can be called in multiline statements,
801 and python variables can be expanded in magic calls via $var.
806 and python variables can be expanded in magic calls via $var.
802 This makes the magic system behave just like aliases or !system
807 This makes the magic system behave just like aliases or !system
803 calls.
808 calls.
804
809
805 2005-03-28 Fernando Perez <fperez@colorado.edu>
810 2005-03-28 Fernando Perez <fperez@colorado.edu>
806
811
807 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
812 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
808 expensive string additions for building command. Add support for
813 expensive string additions for building command. Add support for
809 trailing ';' when autocall is used.
814 trailing ';' when autocall is used.
810
815
811 2005-03-26 Fernando Perez <fperez@colorado.edu>
816 2005-03-26 Fernando Perez <fperez@colorado.edu>
812
817
813 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
818 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
814 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
819 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
815 ipython.el robust against prompts with any number of spaces
820 ipython.el robust against prompts with any number of spaces
816 (including 0) after the ':' character.
821 (including 0) after the ':' character.
817
822
818 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
823 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
819 continuation prompt, which misled users to think the line was
824 continuation prompt, which misled users to think the line was
820 already indented. Closes debian Bug#300847, reported to me by
825 already indented. Closes debian Bug#300847, reported to me by
821 Norbert Tretkowski <tretkowski-AT-inittab.de>.
826 Norbert Tretkowski <tretkowski-AT-inittab.de>.
822
827
823 2005-03-23 Fernando Perez <fperez@colorado.edu>
828 2005-03-23 Fernando Perez <fperez@colorado.edu>
824
829
825 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
830 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
826 properly aligned if they have embedded newlines.
831 properly aligned if they have embedded newlines.
827
832
828 * IPython/iplib.py (runlines): Add a public method to expose
833 * IPython/iplib.py (runlines): Add a public method to expose
829 IPython's code execution machinery, so that users can run strings
834 IPython's code execution machinery, so that users can run strings
830 as if they had been typed at the prompt interactively.
835 as if they had been typed at the prompt interactively.
831 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
836 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
832 methods which can call the system shell, but with python variable
837 methods which can call the system shell, but with python variable
833 expansion. The three such methods are: __IPYTHON__.system,
838 expansion. The three such methods are: __IPYTHON__.system,
834 .getoutput and .getoutputerror. These need to be documented in a
839 .getoutput and .getoutputerror. These need to be documented in a
835 'public API' section (to be written) of the manual.
840 'public API' section (to be written) of the manual.
836
841
837 2005-03-20 Fernando Perez <fperez@colorado.edu>
842 2005-03-20 Fernando Perez <fperez@colorado.edu>
838
843
839 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
844 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
840 for custom exception handling. This is quite powerful, and it
845 for custom exception handling. This is quite powerful, and it
841 allows for user-installable exception handlers which can trap
846 allows for user-installable exception handlers which can trap
842 custom exceptions at runtime and treat them separately from
847 custom exceptions at runtime and treat them separately from
843 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
848 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
844 Mantegazza <mantegazza-AT-ill.fr>.
849 Mantegazza <mantegazza-AT-ill.fr>.
845 (InteractiveShell.set_custom_completer): public API function to
850 (InteractiveShell.set_custom_completer): public API function to
846 add new completers at runtime.
851 add new completers at runtime.
847
852
848 2005-03-19 Fernando Perez <fperez@colorado.edu>
853 2005-03-19 Fernando Perez <fperez@colorado.edu>
849
854
850 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
855 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
851 allow objects which provide their docstrings via non-standard
856 allow objects which provide their docstrings via non-standard
852 mechanisms (like Pyro proxies) to still be inspected by ipython's
857 mechanisms (like Pyro proxies) to still be inspected by ipython's
853 ? system.
858 ? system.
854
859
855 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
860 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
856 automatic capture system. I tried quite hard to make it work
861 automatic capture system. I tried quite hard to make it work
857 reliably, and simply failed. I tried many combinations with the
862 reliably, and simply failed. I tried many combinations with the
858 subprocess module, but eventually nothing worked in all needed
863 subprocess module, but eventually nothing worked in all needed
859 cases (not blocking stdin for the child, duplicating stdout
864 cases (not blocking stdin for the child, duplicating stdout
860 without blocking, etc). The new %sc/%sx still do capture to these
865 without blocking, etc). The new %sc/%sx still do capture to these
861 magical list/string objects which make shell use much more
866 magical list/string objects which make shell use much more
862 conveninent, so not all is lost.
867 conveninent, so not all is lost.
863
868
864 XXX - FIX MANUAL for the change above!
869 XXX - FIX MANUAL for the change above!
865
870
866 (runsource): I copied code.py's runsource() into ipython to modify
871 (runsource): I copied code.py's runsource() into ipython to modify
867 it a bit. Now the code object and source to be executed are
872 it a bit. Now the code object and source to be executed are
868 stored in ipython. This makes this info accessible to third-party
873 stored in ipython. This makes this info accessible to third-party
869 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
874 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
870 Mantegazza <mantegazza-AT-ill.fr>.
875 Mantegazza <mantegazza-AT-ill.fr>.
871
876
872 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
877 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
873 history-search via readline (like C-p/C-n). I'd wanted this for a
878 history-search via readline (like C-p/C-n). I'd wanted this for a
874 long time, but only recently found out how to do it. For users
879 long time, but only recently found out how to do it. For users
875 who already have their ipythonrc files made and want this, just
880 who already have their ipythonrc files made and want this, just
876 add:
881 add:
877
882
878 readline_parse_and_bind "\e[A": history-search-backward
883 readline_parse_and_bind "\e[A": history-search-backward
879 readline_parse_and_bind "\e[B": history-search-forward
884 readline_parse_and_bind "\e[B": history-search-forward
880
885
881 2005-03-18 Fernando Perez <fperez@colorado.edu>
886 2005-03-18 Fernando Perez <fperez@colorado.edu>
882
887
883 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
888 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
884 LSString and SList classes which allow transparent conversions
889 LSString and SList classes which allow transparent conversions
885 between list mode and whitespace-separated string.
890 between list mode and whitespace-separated string.
886 (magic_r): Fix recursion problem in %r.
891 (magic_r): Fix recursion problem in %r.
887
892
888 * IPython/genutils.py (LSString): New class to be used for
893 * IPython/genutils.py (LSString): New class to be used for
889 automatic storage of the results of all alias/system calls in _o
894 automatic storage of the results of all alias/system calls in _o
890 and _e (stdout/err). These provide a .l/.list attribute which
895 and _e (stdout/err). These provide a .l/.list attribute which
891 does automatic splitting on newlines. This means that for most
896 does automatic splitting on newlines. This means that for most
892 uses, you'll never need to do capturing of output with %sc/%sx
897 uses, you'll never need to do capturing of output with %sc/%sx
893 anymore, since ipython keeps this always done for you. Note that
898 anymore, since ipython keeps this always done for you. Note that
894 only the LAST results are stored, the _o/e variables are
899 only the LAST results are stored, the _o/e variables are
895 overwritten on each call. If you need to save their contents
900 overwritten on each call. If you need to save their contents
896 further, simply bind them to any other name.
901 further, simply bind them to any other name.
897
902
898 2005-03-17 Fernando Perez <fperez@colorado.edu>
903 2005-03-17 Fernando Perez <fperez@colorado.edu>
899
904
900 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
905 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
901 prompt namespace handling.
906 prompt namespace handling.
902
907
903 2005-03-16 Fernando Perez <fperez@colorado.edu>
908 2005-03-16 Fernando Perez <fperez@colorado.edu>
904
909
905 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
910 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
906 classic prompts to be '>>> ' (final space was missing, and it
911 classic prompts to be '>>> ' (final space was missing, and it
907 trips the emacs python mode).
912 trips the emacs python mode).
908 (BasePrompt.__str__): Added safe support for dynamic prompt
913 (BasePrompt.__str__): Added safe support for dynamic prompt
909 strings. Now you can set your prompt string to be '$x', and the
914 strings. Now you can set your prompt string to be '$x', and the
910 value of x will be printed from your interactive namespace. The
915 value of x will be printed from your interactive namespace. The
911 interpolation syntax includes the full Itpl support, so
916 interpolation syntax includes the full Itpl support, so
912 ${foo()+x+bar()} is a valid prompt string now, and the function
917 ${foo()+x+bar()} is a valid prompt string now, and the function
913 calls will be made at runtime.
918 calls will be made at runtime.
914
919
915 2005-03-15 Fernando Perez <fperez@colorado.edu>
920 2005-03-15 Fernando Perez <fperez@colorado.edu>
916
921
917 * IPython/Magic.py (magic_history): renamed %hist to %history, to
922 * IPython/Magic.py (magic_history): renamed %hist to %history, to
918 avoid name clashes in pylab. %hist still works, it just forwards
923 avoid name clashes in pylab. %hist still works, it just forwards
919 the call to %history.
924 the call to %history.
920
925
921 2005-03-02 *** Released version 0.6.12
926 2005-03-02 *** Released version 0.6.12
922
927
923 2005-03-02 Fernando Perez <fperez@colorado.edu>
928 2005-03-02 Fernando Perez <fperez@colorado.edu>
924
929
925 * IPython/iplib.py (handle_magic): log magic calls properly as
930 * IPython/iplib.py (handle_magic): log magic calls properly as
926 ipmagic() function calls.
931 ipmagic() function calls.
927
932
928 * IPython/Magic.py (magic_time): Improved %time to support
933 * IPython/Magic.py (magic_time): Improved %time to support
929 statements and provide wall-clock as well as CPU time.
934 statements and provide wall-clock as well as CPU time.
930
935
931 2005-02-27 Fernando Perez <fperez@colorado.edu>
936 2005-02-27 Fernando Perez <fperez@colorado.edu>
932
937
933 * IPython/hooks.py: New hooks module, to expose user-modifiable
938 * IPython/hooks.py: New hooks module, to expose user-modifiable
934 IPython functionality in a clean manner. For now only the editor
939 IPython functionality in a clean manner. For now only the editor
935 hook is actually written, and other thigns which I intend to turn
940 hook is actually written, and other thigns which I intend to turn
936 into proper hooks aren't yet there. The display and prefilter
941 into proper hooks aren't yet there. The display and prefilter
937 stuff, for example, should be hooks. But at least now the
942 stuff, for example, should be hooks. But at least now the
938 framework is in place, and the rest can be moved here with more
943 framework is in place, and the rest can be moved here with more
939 time later. IPython had had a .hooks variable for a long time for
944 time later. IPython had had a .hooks variable for a long time for
940 this purpose, but I'd never actually used it for anything.
945 this purpose, but I'd never actually used it for anything.
941
946
942 2005-02-26 Fernando Perez <fperez@colorado.edu>
947 2005-02-26 Fernando Perez <fperez@colorado.edu>
943
948
944 * IPython/ipmaker.py (make_IPython): make the default ipython
949 * IPython/ipmaker.py (make_IPython): make the default ipython
945 directory be called _ipython under win32, to follow more the
950 directory be called _ipython under win32, to follow more the
946 naming peculiarities of that platform (where buggy software like
951 naming peculiarities of that platform (where buggy software like
947 Visual Sourcesafe breaks with .named directories). Reported by
952 Visual Sourcesafe breaks with .named directories). Reported by
948 Ville Vainio.
953 Ville Vainio.
949
954
950 2005-02-23 Fernando Perez <fperez@colorado.edu>
955 2005-02-23 Fernando Perez <fperez@colorado.edu>
951
956
952 * IPython/iplib.py (InteractiveShell.__init__): removed a few
957 * IPython/iplib.py (InteractiveShell.__init__): removed a few
953 auto_aliases for win32 which were causing problems. Users can
958 auto_aliases for win32 which were causing problems. Users can
954 define the ones they personally like.
959 define the ones they personally like.
955
960
956 2005-02-21 Fernando Perez <fperez@colorado.edu>
961 2005-02-21 Fernando Perez <fperez@colorado.edu>
957
962
958 * IPython/Magic.py (magic_time): new magic to time execution of
963 * IPython/Magic.py (magic_time): new magic to time execution of
959 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
964 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
960
965
961 2005-02-19 Fernando Perez <fperez@colorado.edu>
966 2005-02-19 Fernando Perez <fperez@colorado.edu>
962
967
963 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
968 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
964 into keys (for prompts, for example).
969 into keys (for prompts, for example).
965
970
966 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
971 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
967 prompts in case users want them. This introduces a small behavior
972 prompts in case users want them. This introduces a small behavior
968 change: ipython does not automatically add a space to all prompts
973 change: ipython does not automatically add a space to all prompts
969 anymore. To get the old prompts with a space, users should add it
974 anymore. To get the old prompts with a space, users should add it
970 manually to their ipythonrc file, so for example prompt_in1 should
975 manually to their ipythonrc file, so for example prompt_in1 should
971 now read 'In [\#]: ' instead of 'In [\#]:'.
976 now read 'In [\#]: ' instead of 'In [\#]:'.
972 (BasePrompt.__init__): New option prompts_pad_left (only in rc
977 (BasePrompt.__init__): New option prompts_pad_left (only in rc
973 file) to control left-padding of secondary prompts.
978 file) to control left-padding of secondary prompts.
974
979
975 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
980 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
976 the profiler can't be imported. Fix for Debian, which removed
981 the profiler can't be imported. Fix for Debian, which removed
977 profile.py because of License issues. I applied a slightly
982 profile.py because of License issues. I applied a slightly
978 modified version of the original Debian patch at
983 modified version of the original Debian patch at
979 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
984 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
980
985
981 2005-02-17 Fernando Perez <fperez@colorado.edu>
986 2005-02-17 Fernando Perez <fperez@colorado.edu>
982
987
983 * IPython/genutils.py (native_line_ends): Fix bug which would
988 * IPython/genutils.py (native_line_ends): Fix bug which would
984 cause improper line-ends under win32 b/c I was not opening files
989 cause improper line-ends under win32 b/c I was not opening files
985 in binary mode. Bug report and fix thanks to Ville.
990 in binary mode. Bug report and fix thanks to Ville.
986
991
987 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
992 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
988 trying to catch spurious foo[1] autocalls. My fix actually broke
993 trying to catch spurious foo[1] autocalls. My fix actually broke
989 ',/' autoquote/call with explicit escape (bad regexp).
994 ',/' autoquote/call with explicit escape (bad regexp).
990
995
991 2005-02-15 *** Released version 0.6.11
996 2005-02-15 *** Released version 0.6.11
992
997
993 2005-02-14 Fernando Perez <fperez@colorado.edu>
998 2005-02-14 Fernando Perez <fperez@colorado.edu>
994
999
995 * IPython/background_jobs.py: New background job management
1000 * IPython/background_jobs.py: New background job management
996 subsystem. This is implemented via a new set of classes, and
1001 subsystem. This is implemented via a new set of classes, and
997 IPython now provides a builtin 'jobs' object for background job
1002 IPython now provides a builtin 'jobs' object for background job
998 execution. A convenience %bg magic serves as a lightweight
1003 execution. A convenience %bg magic serves as a lightweight
999 frontend for starting the more common type of calls. This was
1004 frontend for starting the more common type of calls. This was
1000 inspired by discussions with B. Granger and the BackgroundCommand
1005 inspired by discussions with B. Granger and the BackgroundCommand
1001 class described in the book Python Scripting for Computational
1006 class described in the book Python Scripting for Computational
1002 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1007 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1003 (although ultimately no code from this text was used, as IPython's
1008 (although ultimately no code from this text was used, as IPython's
1004 system is a separate implementation).
1009 system is a separate implementation).
1005
1010
1006 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1011 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1007 to control the completion of single/double underscore names
1012 to control the completion of single/double underscore names
1008 separately. As documented in the example ipytonrc file, the
1013 separately. As documented in the example ipytonrc file, the
1009 readline_omit__names variable can now be set to 2, to omit even
1014 readline_omit__names variable can now be set to 2, to omit even
1010 single underscore names. Thanks to a patch by Brian Wong
1015 single underscore names. Thanks to a patch by Brian Wong
1011 <BrianWong-AT-AirgoNetworks.Com>.
1016 <BrianWong-AT-AirgoNetworks.Com>.
1012 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1017 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1013 be autocalled as foo([1]) if foo were callable. A problem for
1018 be autocalled as foo([1]) if foo were callable. A problem for
1014 things which are both callable and implement __getitem__.
1019 things which are both callable and implement __getitem__.
1015 (init_readline): Fix autoindentation for win32. Thanks to a patch
1020 (init_readline): Fix autoindentation for win32. Thanks to a patch
1016 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1021 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1017
1022
1018 2005-02-12 Fernando Perez <fperez@colorado.edu>
1023 2005-02-12 Fernando Perez <fperez@colorado.edu>
1019
1024
1020 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1025 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1021 which I had written long ago to sort out user error messages which
1026 which I had written long ago to sort out user error messages which
1022 may occur during startup. This seemed like a good idea initially,
1027 may occur during startup. This seemed like a good idea initially,
1023 but it has proven a disaster in retrospect. I don't want to
1028 but it has proven a disaster in retrospect. I don't want to
1024 change much code for now, so my fix is to set the internal 'debug'
1029 change much code for now, so my fix is to set the internal 'debug'
1025 flag to true everywhere, whose only job was precisely to control
1030 flag to true everywhere, whose only job was precisely to control
1026 this subsystem. This closes issue 28 (as well as avoiding all
1031 this subsystem. This closes issue 28 (as well as avoiding all
1027 sorts of strange hangups which occur from time to time).
1032 sorts of strange hangups which occur from time to time).
1028
1033
1029 2005-02-07 Fernando Perez <fperez@colorado.edu>
1034 2005-02-07 Fernando Perez <fperez@colorado.edu>
1030
1035
1031 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1036 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1032 previous call produced a syntax error.
1037 previous call produced a syntax error.
1033
1038
1034 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1039 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1035 classes without constructor.
1040 classes without constructor.
1036
1041
1037 2005-02-06 Fernando Perez <fperez@colorado.edu>
1042 2005-02-06 Fernando Perez <fperez@colorado.edu>
1038
1043
1039 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1044 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1040 completions with the results of each matcher, so we return results
1045 completions with the results of each matcher, so we return results
1041 to the user from all namespaces. This breaks with ipython
1046 to the user from all namespaces. This breaks with ipython
1042 tradition, but I think it's a nicer behavior. Now you get all
1047 tradition, but I think it's a nicer behavior. Now you get all
1043 possible completions listed, from all possible namespaces (python,
1048 possible completions listed, from all possible namespaces (python,
1044 filesystem, magics...) After a request by John Hunter
1049 filesystem, magics...) After a request by John Hunter
1045 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1050 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1046
1051
1047 2005-02-05 Fernando Perez <fperez@colorado.edu>
1052 2005-02-05 Fernando Perez <fperez@colorado.edu>
1048
1053
1049 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1054 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1050 the call had quote characters in it (the quotes were stripped).
1055 the call had quote characters in it (the quotes were stripped).
1051
1056
1052 2005-01-31 Fernando Perez <fperez@colorado.edu>
1057 2005-01-31 Fernando Perez <fperez@colorado.edu>
1053
1058
1054 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1059 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1055 Itpl.itpl() to make the code more robust against psyco
1060 Itpl.itpl() to make the code more robust against psyco
1056 optimizations.
1061 optimizations.
1057
1062
1058 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1063 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1059 of causing an exception. Quicker, cleaner.
1064 of causing an exception. Quicker, cleaner.
1060
1065
1061 2005-01-28 Fernando Perez <fperez@colorado.edu>
1066 2005-01-28 Fernando Perez <fperez@colorado.edu>
1062
1067
1063 * scripts/ipython_win_post_install.py (install): hardcode
1068 * scripts/ipython_win_post_install.py (install): hardcode
1064 sys.prefix+'python.exe' as the executable path. It turns out that
1069 sys.prefix+'python.exe' as the executable path. It turns out that
1065 during the post-installation run, sys.executable resolves to the
1070 during the post-installation run, sys.executable resolves to the
1066 name of the binary installer! I should report this as a distutils
1071 name of the binary installer! I should report this as a distutils
1067 bug, I think. I updated the .10 release with this tiny fix, to
1072 bug, I think. I updated the .10 release with this tiny fix, to
1068 avoid annoying the lists further.
1073 avoid annoying the lists further.
1069
1074
1070 2005-01-27 *** Released version 0.6.10
1075 2005-01-27 *** Released version 0.6.10
1071
1076
1072 2005-01-27 Fernando Perez <fperez@colorado.edu>
1077 2005-01-27 Fernando Perez <fperez@colorado.edu>
1073
1078
1074 * IPython/numutils.py (norm): Added 'inf' as optional name for
1079 * IPython/numutils.py (norm): Added 'inf' as optional name for
1075 L-infinity norm, included references to mathworld.com for vector
1080 L-infinity norm, included references to mathworld.com for vector
1076 norm definitions.
1081 norm definitions.
1077 (amin/amax): added amin/amax for array min/max. Similar to what
1082 (amin/amax): added amin/amax for array min/max. Similar to what
1078 pylab ships with after the recent reorganization of names.
1083 pylab ships with after the recent reorganization of names.
1079 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1084 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1080
1085
1081 * ipython.el: committed Alex's recent fixes and improvements.
1086 * ipython.el: committed Alex's recent fixes and improvements.
1082 Tested with python-mode from CVS, and it looks excellent. Since
1087 Tested with python-mode from CVS, and it looks excellent. Since
1083 python-mode hasn't released anything in a while, I'm temporarily
1088 python-mode hasn't released anything in a while, I'm temporarily
1084 putting a copy of today's CVS (v 4.70) of python-mode in:
1089 putting a copy of today's CVS (v 4.70) of python-mode in:
1085 http://ipython.scipy.org/tmp/python-mode.el
1090 http://ipython.scipy.org/tmp/python-mode.el
1086
1091
1087 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1092 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1088 sys.executable for the executable name, instead of assuming it's
1093 sys.executable for the executable name, instead of assuming it's
1089 called 'python.exe' (the post-installer would have produced broken
1094 called 'python.exe' (the post-installer would have produced broken
1090 setups on systems with a differently named python binary).
1095 setups on systems with a differently named python binary).
1091
1096
1092 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1097 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1093 references to os.linesep, to make the code more
1098 references to os.linesep, to make the code more
1094 platform-independent. This is also part of the win32 coloring
1099 platform-independent. This is also part of the win32 coloring
1095 fixes.
1100 fixes.
1096
1101
1097 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1102 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1098 lines, which actually cause coloring bugs because the length of
1103 lines, which actually cause coloring bugs because the length of
1099 the line is very difficult to correctly compute with embedded
1104 the line is very difficult to correctly compute with embedded
1100 escapes. This was the source of all the coloring problems under
1105 escapes. This was the source of all the coloring problems under
1101 Win32. I think that _finally_, Win32 users have a properly
1106 Win32. I think that _finally_, Win32 users have a properly
1102 working ipython in all respects. This would never have happened
1107 working ipython in all respects. This would never have happened
1103 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1108 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1104
1109
1105 2005-01-26 *** Released version 0.6.9
1110 2005-01-26 *** Released version 0.6.9
1106
1111
1107 2005-01-25 Fernando Perez <fperez@colorado.edu>
1112 2005-01-25 Fernando Perez <fperez@colorado.edu>
1108
1113
1109 * setup.py: finally, we have a true Windows installer, thanks to
1114 * setup.py: finally, we have a true Windows installer, thanks to
1110 the excellent work of Viktor Ransmayr
1115 the excellent work of Viktor Ransmayr
1111 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1116 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1112 Windows users. The setup routine is quite a bit cleaner thanks to
1117 Windows users. The setup routine is quite a bit cleaner thanks to
1113 this, and the post-install script uses the proper functions to
1118 this, and the post-install script uses the proper functions to
1114 allow a clean de-installation using the standard Windows Control
1119 allow a clean de-installation using the standard Windows Control
1115 Panel.
1120 Panel.
1116
1121
1117 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1122 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1118 environment variable under all OSes (including win32) if
1123 environment variable under all OSes (including win32) if
1119 available. This will give consistency to win32 users who have set
1124 available. This will give consistency to win32 users who have set
1120 this variable for any reason. If os.environ['HOME'] fails, the
1125 this variable for any reason. If os.environ['HOME'] fails, the
1121 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1126 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1122
1127
1123 2005-01-24 Fernando Perez <fperez@colorado.edu>
1128 2005-01-24 Fernando Perez <fperez@colorado.edu>
1124
1129
1125 * IPython/numutils.py (empty_like): add empty_like(), similar to
1130 * IPython/numutils.py (empty_like): add empty_like(), similar to
1126 zeros_like() but taking advantage of the new empty() Numeric routine.
1131 zeros_like() but taking advantage of the new empty() Numeric routine.
1127
1132
1128 2005-01-23 *** Released version 0.6.8
1133 2005-01-23 *** Released version 0.6.8
1129
1134
1130 2005-01-22 Fernando Perez <fperez@colorado.edu>
1135 2005-01-22 Fernando Perez <fperez@colorado.edu>
1131
1136
1132 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1137 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1133 automatic show() calls. After discussing things with JDH, it
1138 automatic show() calls. After discussing things with JDH, it
1134 turns out there are too many corner cases where this can go wrong.
1139 turns out there are too many corner cases where this can go wrong.
1135 It's best not to try to be 'too smart', and simply have ipython
1140 It's best not to try to be 'too smart', and simply have ipython
1136 reproduce as much as possible the default behavior of a normal
1141 reproduce as much as possible the default behavior of a normal
1137 python shell.
1142 python shell.
1138
1143
1139 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1144 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1140 line-splitting regexp and _prefilter() to avoid calling getattr()
1145 line-splitting regexp and _prefilter() to avoid calling getattr()
1141 on assignments. This closes
1146 on assignments. This closes
1142 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1147 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1143 readline uses getattr(), so a simple <TAB> keypress is still
1148 readline uses getattr(), so a simple <TAB> keypress is still
1144 enough to trigger getattr() calls on an object.
1149 enough to trigger getattr() calls on an object.
1145
1150
1146 2005-01-21 Fernando Perez <fperez@colorado.edu>
1151 2005-01-21 Fernando Perez <fperez@colorado.edu>
1147
1152
1148 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1153 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1149 docstring under pylab so it doesn't mask the original.
1154 docstring under pylab so it doesn't mask the original.
1150
1155
1151 2005-01-21 *** Released version 0.6.7
1156 2005-01-21 *** Released version 0.6.7
1152
1157
1153 2005-01-21 Fernando Perez <fperez@colorado.edu>
1158 2005-01-21 Fernando Perez <fperez@colorado.edu>
1154
1159
1155 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1160 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1156 signal handling for win32 users in multithreaded mode.
1161 signal handling for win32 users in multithreaded mode.
1157
1162
1158 2005-01-17 Fernando Perez <fperez@colorado.edu>
1163 2005-01-17 Fernando Perez <fperez@colorado.edu>
1159
1164
1160 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1165 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1161 instances with no __init__. After a crash report by Norbert Nemec
1166 instances with no __init__. After a crash report by Norbert Nemec
1162 <Norbert-AT-nemec-online.de>.
1167 <Norbert-AT-nemec-online.de>.
1163
1168
1164 2005-01-14 Fernando Perez <fperez@colorado.edu>
1169 2005-01-14 Fernando Perez <fperez@colorado.edu>
1165
1170
1166 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1171 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1167 names for verbose exceptions, when multiple dotted names and the
1172 names for verbose exceptions, when multiple dotted names and the
1168 'parent' object were present on the same line.
1173 'parent' object were present on the same line.
1169
1174
1170 2005-01-11 Fernando Perez <fperez@colorado.edu>
1175 2005-01-11 Fernando Perez <fperez@colorado.edu>
1171
1176
1172 * IPython/genutils.py (flag_calls): new utility to trap and flag
1177 * IPython/genutils.py (flag_calls): new utility to trap and flag
1173 calls in functions. I need it to clean up matplotlib support.
1178 calls in functions. I need it to clean up matplotlib support.
1174 Also removed some deprecated code in genutils.
1179 Also removed some deprecated code in genutils.
1175
1180
1176 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1181 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1177 that matplotlib scripts called with %run, which don't call show()
1182 that matplotlib scripts called with %run, which don't call show()
1178 themselves, still have their plotting windows open.
1183 themselves, still have their plotting windows open.
1179
1184
1180 2005-01-05 Fernando Perez <fperez@colorado.edu>
1185 2005-01-05 Fernando Perez <fperez@colorado.edu>
1181
1186
1182 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1187 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1183 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1188 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1184
1189
1185 2004-12-19 Fernando Perez <fperez@colorado.edu>
1190 2004-12-19 Fernando Perez <fperez@colorado.edu>
1186
1191
1187 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1192 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1188 parent_runcode, which was an eyesore. The same result can be
1193 parent_runcode, which was an eyesore. The same result can be
1189 obtained with Python's regular superclass mechanisms.
1194 obtained with Python's regular superclass mechanisms.
1190
1195
1191 2004-12-17 Fernando Perez <fperez@colorado.edu>
1196 2004-12-17 Fernando Perez <fperez@colorado.edu>
1192
1197
1193 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1198 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1194 reported by Prabhu.
1199 reported by Prabhu.
1195 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1200 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1196 sys.stderr) instead of explicitly calling sys.stderr. This helps
1201 sys.stderr) instead of explicitly calling sys.stderr. This helps
1197 maintain our I/O abstractions clean, for future GUI embeddings.
1202 maintain our I/O abstractions clean, for future GUI embeddings.
1198
1203
1199 * IPython/genutils.py (info): added new utility for sys.stderr
1204 * IPython/genutils.py (info): added new utility for sys.stderr
1200 unified info message handling (thin wrapper around warn()).
1205 unified info message handling (thin wrapper around warn()).
1201
1206
1202 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1207 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1203 composite (dotted) names on verbose exceptions.
1208 composite (dotted) names on verbose exceptions.
1204 (VerboseTB.nullrepr): harden against another kind of errors which
1209 (VerboseTB.nullrepr): harden against another kind of errors which
1205 Python's inspect module can trigger, and which were crashing
1210 Python's inspect module can trigger, and which were crashing
1206 IPython. Thanks to a report by Marco Lombardi
1211 IPython. Thanks to a report by Marco Lombardi
1207 <mlombard-AT-ma010192.hq.eso.org>.
1212 <mlombard-AT-ma010192.hq.eso.org>.
1208
1213
1209 2004-12-13 *** Released version 0.6.6
1214 2004-12-13 *** Released version 0.6.6
1210
1215
1211 2004-12-12 Fernando Perez <fperez@colorado.edu>
1216 2004-12-12 Fernando Perez <fperez@colorado.edu>
1212
1217
1213 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1218 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1214 generated by pygtk upon initialization if it was built without
1219 generated by pygtk upon initialization if it was built without
1215 threads (for matplotlib users). After a crash reported by
1220 threads (for matplotlib users). After a crash reported by
1216 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1221 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1217
1222
1218 * IPython/ipmaker.py (make_IPython): fix small bug in the
1223 * IPython/ipmaker.py (make_IPython): fix small bug in the
1219 import_some parameter for multiple imports.
1224 import_some parameter for multiple imports.
1220
1225
1221 * IPython/iplib.py (ipmagic): simplified the interface of
1226 * IPython/iplib.py (ipmagic): simplified the interface of
1222 ipmagic() to take a single string argument, just as it would be
1227 ipmagic() to take a single string argument, just as it would be
1223 typed at the IPython cmd line.
1228 typed at the IPython cmd line.
1224 (ipalias): Added new ipalias() with an interface identical to
1229 (ipalias): Added new ipalias() with an interface identical to
1225 ipmagic(). This completes exposing a pure python interface to the
1230 ipmagic(). This completes exposing a pure python interface to the
1226 alias and magic system, which can be used in loops or more complex
1231 alias and magic system, which can be used in loops or more complex
1227 code where IPython's automatic line mangling is not active.
1232 code where IPython's automatic line mangling is not active.
1228
1233
1229 * IPython/genutils.py (timing): changed interface of timing to
1234 * IPython/genutils.py (timing): changed interface of timing to
1230 simply run code once, which is the most common case. timings()
1235 simply run code once, which is the most common case. timings()
1231 remains unchanged, for the cases where you want multiple runs.
1236 remains unchanged, for the cases where you want multiple runs.
1232
1237
1233 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1238 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1234 bug where Python2.2 crashes with exec'ing code which does not end
1239 bug where Python2.2 crashes with exec'ing code which does not end
1235 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1240 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1236 before.
1241 before.
1237
1242
1238 2004-12-10 Fernando Perez <fperez@colorado.edu>
1243 2004-12-10 Fernando Perez <fperez@colorado.edu>
1239
1244
1240 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1245 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1241 -t to -T, to accomodate the new -t flag in %run (the %run and
1246 -t to -T, to accomodate the new -t flag in %run (the %run and
1242 %prun options are kind of intermixed, and it's not easy to change
1247 %prun options are kind of intermixed, and it's not easy to change
1243 this with the limitations of python's getopt).
1248 this with the limitations of python's getopt).
1244
1249
1245 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1250 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1246 the execution of scripts. It's not as fine-tuned as timeit.py,
1251 the execution of scripts. It's not as fine-tuned as timeit.py,
1247 but it works from inside ipython (and under 2.2, which lacks
1252 but it works from inside ipython (and under 2.2, which lacks
1248 timeit.py). Optionally a number of runs > 1 can be given for
1253 timeit.py). Optionally a number of runs > 1 can be given for
1249 timing very short-running code.
1254 timing very short-running code.
1250
1255
1251 * IPython/genutils.py (uniq_stable): new routine which returns a
1256 * IPython/genutils.py (uniq_stable): new routine which returns a
1252 list of unique elements in any iterable, but in stable order of
1257 list of unique elements in any iterable, but in stable order of
1253 appearance. I needed this for the ultraTB fixes, and it's a handy
1258 appearance. I needed this for the ultraTB fixes, and it's a handy
1254 utility.
1259 utility.
1255
1260
1256 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1261 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1257 dotted names in Verbose exceptions. This had been broken since
1262 dotted names in Verbose exceptions. This had been broken since
1258 the very start, now x.y will properly be printed in a Verbose
1263 the very start, now x.y will properly be printed in a Verbose
1259 traceback, instead of x being shown and y appearing always as an
1264 traceback, instead of x being shown and y appearing always as an
1260 'undefined global'. Getting this to work was a bit tricky,
1265 'undefined global'. Getting this to work was a bit tricky,
1261 because by default python tokenizers are stateless. Saved by
1266 because by default python tokenizers are stateless. Saved by
1262 python's ability to easily add a bit of state to an arbitrary
1267 python's ability to easily add a bit of state to an arbitrary
1263 function (without needing to build a full-blown callable object).
1268 function (without needing to build a full-blown callable object).
1264
1269
1265 Also big cleanup of this code, which had horrendous runtime
1270 Also big cleanup of this code, which had horrendous runtime
1266 lookups of zillions of attributes for colorization. Moved all
1271 lookups of zillions of attributes for colorization. Moved all
1267 this code into a few templates, which make it cleaner and quicker.
1272 this code into a few templates, which make it cleaner and quicker.
1268
1273
1269 Printout quality was also improved for Verbose exceptions: one
1274 Printout quality was also improved for Verbose exceptions: one
1270 variable per line, and memory addresses are printed (this can be
1275 variable per line, and memory addresses are printed (this can be
1271 quite handy in nasty debugging situations, which is what Verbose
1276 quite handy in nasty debugging situations, which is what Verbose
1272 is for).
1277 is for).
1273
1278
1274 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1279 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1275 the command line as scripts to be loaded by embedded instances.
1280 the command line as scripts to be loaded by embedded instances.
1276 Doing so has the potential for an infinite recursion if there are
1281 Doing so has the potential for an infinite recursion if there are
1277 exceptions thrown in the process. This fixes a strange crash
1282 exceptions thrown in the process. This fixes a strange crash
1278 reported by Philippe MULLER <muller-AT-irit.fr>.
1283 reported by Philippe MULLER <muller-AT-irit.fr>.
1279
1284
1280 2004-12-09 Fernando Perez <fperez@colorado.edu>
1285 2004-12-09 Fernando Perez <fperez@colorado.edu>
1281
1286
1282 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1287 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1283 to reflect new names in matplotlib, which now expose the
1288 to reflect new names in matplotlib, which now expose the
1284 matlab-compatible interface via a pylab module instead of the
1289 matlab-compatible interface via a pylab module instead of the
1285 'matlab' name. The new code is backwards compatible, so users of
1290 'matlab' name. The new code is backwards compatible, so users of
1286 all matplotlib versions are OK. Patch by J. Hunter.
1291 all matplotlib versions are OK. Patch by J. Hunter.
1287
1292
1288 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1293 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1289 of __init__ docstrings for instances (class docstrings are already
1294 of __init__ docstrings for instances (class docstrings are already
1290 automatically printed). Instances with customized docstrings
1295 automatically printed). Instances with customized docstrings
1291 (indep. of the class) are also recognized and all 3 separate
1296 (indep. of the class) are also recognized and all 3 separate
1292 docstrings are printed (instance, class, constructor). After some
1297 docstrings are printed (instance, class, constructor). After some
1293 comments/suggestions by J. Hunter.
1298 comments/suggestions by J. Hunter.
1294
1299
1295 2004-12-05 Fernando Perez <fperez@colorado.edu>
1300 2004-12-05 Fernando Perez <fperez@colorado.edu>
1296
1301
1297 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1302 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1298 warnings when tab-completion fails and triggers an exception.
1303 warnings when tab-completion fails and triggers an exception.
1299
1304
1300 2004-12-03 Fernando Perez <fperez@colorado.edu>
1305 2004-12-03 Fernando Perez <fperez@colorado.edu>
1301
1306
1302 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1307 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1303 be triggered when using 'run -p'. An incorrect option flag was
1308 be triggered when using 'run -p'. An incorrect option flag was
1304 being set ('d' instead of 'D').
1309 being set ('d' instead of 'D').
1305 (manpage): fix missing escaped \- sign.
1310 (manpage): fix missing escaped \- sign.
1306
1311
1307 2004-11-30 *** Released version 0.6.5
1312 2004-11-30 *** Released version 0.6.5
1308
1313
1309 2004-11-30 Fernando Perez <fperez@colorado.edu>
1314 2004-11-30 Fernando Perez <fperez@colorado.edu>
1310
1315
1311 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1316 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1312 setting with -d option.
1317 setting with -d option.
1313
1318
1314 * setup.py (docfiles): Fix problem where the doc glob I was using
1319 * setup.py (docfiles): Fix problem where the doc glob I was using
1315 was COMPLETELY BROKEN. It was giving the right files by pure
1320 was COMPLETELY BROKEN. It was giving the right files by pure
1316 accident, but failed once I tried to include ipython.el. Note:
1321 accident, but failed once I tried to include ipython.el. Note:
1317 glob() does NOT allow you to do exclusion on multiple endings!
1322 glob() does NOT allow you to do exclusion on multiple endings!
1318
1323
1319 2004-11-29 Fernando Perez <fperez@colorado.edu>
1324 2004-11-29 Fernando Perez <fperez@colorado.edu>
1320
1325
1321 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1326 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1322 the manpage as the source. Better formatting & consistency.
1327 the manpage as the source. Better formatting & consistency.
1323
1328
1324 * IPython/Magic.py (magic_run): Added new -d option, to run
1329 * IPython/Magic.py (magic_run): Added new -d option, to run
1325 scripts under the control of the python pdb debugger. Note that
1330 scripts under the control of the python pdb debugger. Note that
1326 this required changing the %prun option -d to -D, to avoid a clash
1331 this required changing the %prun option -d to -D, to avoid a clash
1327 (since %run must pass options to %prun, and getopt is too dumb to
1332 (since %run must pass options to %prun, and getopt is too dumb to
1328 handle options with string values with embedded spaces). Thanks
1333 handle options with string values with embedded spaces). Thanks
1329 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1334 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1330 (magic_who_ls): added type matching to %who and %whos, so that one
1335 (magic_who_ls): added type matching to %who and %whos, so that one
1331 can filter their output to only include variables of certain
1336 can filter their output to only include variables of certain
1332 types. Another suggestion by Matthew.
1337 types. Another suggestion by Matthew.
1333 (magic_whos): Added memory summaries in kb and Mb for arrays.
1338 (magic_whos): Added memory summaries in kb and Mb for arrays.
1334 (magic_who): Improve formatting (break lines every 9 vars).
1339 (magic_who): Improve formatting (break lines every 9 vars).
1335
1340
1336 2004-11-28 Fernando Perez <fperez@colorado.edu>
1341 2004-11-28 Fernando Perez <fperez@colorado.edu>
1337
1342
1338 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1343 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1339 cache when empty lines were present.
1344 cache when empty lines were present.
1340
1345
1341 2004-11-24 Fernando Perez <fperez@colorado.edu>
1346 2004-11-24 Fernando Perez <fperez@colorado.edu>
1342
1347
1343 * IPython/usage.py (__doc__): document the re-activated threading
1348 * IPython/usage.py (__doc__): document the re-activated threading
1344 options for WX and GTK.
1349 options for WX and GTK.
1345
1350
1346 2004-11-23 Fernando Perez <fperez@colorado.edu>
1351 2004-11-23 Fernando Perez <fperez@colorado.edu>
1347
1352
1348 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1353 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1349 the -wthread and -gthread options, along with a new -tk one to try
1354 the -wthread and -gthread options, along with a new -tk one to try
1350 and coordinate Tk threading with wx/gtk. The tk support is very
1355 and coordinate Tk threading with wx/gtk. The tk support is very
1351 platform dependent, since it seems to require Tcl and Tk to be
1356 platform dependent, since it seems to require Tcl and Tk to be
1352 built with threads (Fedora1/2 appears NOT to have it, but in
1357 built with threads (Fedora1/2 appears NOT to have it, but in
1353 Prabhu's Debian boxes it works OK). But even with some Tk
1358 Prabhu's Debian boxes it works OK). But even with some Tk
1354 limitations, this is a great improvement.
1359 limitations, this is a great improvement.
1355
1360
1356 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1361 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1357 info in user prompts. Patch by Prabhu.
1362 info in user prompts. Patch by Prabhu.
1358
1363
1359 2004-11-18 Fernando Perez <fperez@colorado.edu>
1364 2004-11-18 Fernando Perez <fperez@colorado.edu>
1360
1365
1361 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1366 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1362 EOFErrors and bail, to avoid infinite loops if a non-terminating
1367 EOFErrors and bail, to avoid infinite loops if a non-terminating
1363 file is fed into ipython. Patch submitted in issue 19 by user,
1368 file is fed into ipython. Patch submitted in issue 19 by user,
1364 many thanks.
1369 many thanks.
1365
1370
1366 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1371 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1367 autoquote/parens in continuation prompts, which can cause lots of
1372 autoquote/parens in continuation prompts, which can cause lots of
1368 problems. Closes roundup issue 20.
1373 problems. Closes roundup issue 20.
1369
1374
1370 2004-11-17 Fernando Perez <fperez@colorado.edu>
1375 2004-11-17 Fernando Perez <fperez@colorado.edu>
1371
1376
1372 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1377 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1373 reported as debian bug #280505. I'm not sure my local changelog
1378 reported as debian bug #280505. I'm not sure my local changelog
1374 entry has the proper debian format (Jack?).
1379 entry has the proper debian format (Jack?).
1375
1380
1376 2004-11-08 *** Released version 0.6.4
1381 2004-11-08 *** Released version 0.6.4
1377
1382
1378 2004-11-08 Fernando Perez <fperez@colorado.edu>
1383 2004-11-08 Fernando Perez <fperez@colorado.edu>
1379
1384
1380 * IPython/iplib.py (init_readline): Fix exit message for Windows
1385 * IPython/iplib.py (init_readline): Fix exit message for Windows
1381 when readline is active. Thanks to a report by Eric Jones
1386 when readline is active. Thanks to a report by Eric Jones
1382 <eric-AT-enthought.com>.
1387 <eric-AT-enthought.com>.
1383
1388
1384 2004-11-07 Fernando Perez <fperez@colorado.edu>
1389 2004-11-07 Fernando Perez <fperez@colorado.edu>
1385
1390
1386 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1391 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1387 sometimes seen by win2k/cygwin users.
1392 sometimes seen by win2k/cygwin users.
1388
1393
1389 2004-11-06 Fernando Perez <fperez@colorado.edu>
1394 2004-11-06 Fernando Perez <fperez@colorado.edu>
1390
1395
1391 * IPython/iplib.py (interact): Change the handling of %Exit from
1396 * IPython/iplib.py (interact): Change the handling of %Exit from
1392 trying to propagate a SystemExit to an internal ipython flag.
1397 trying to propagate a SystemExit to an internal ipython flag.
1393 This is less elegant than using Python's exception mechanism, but
1398 This is less elegant than using Python's exception mechanism, but
1394 I can't get that to work reliably with threads, so under -pylab
1399 I can't get that to work reliably with threads, so under -pylab
1395 %Exit was hanging IPython. Cross-thread exception handling is
1400 %Exit was hanging IPython. Cross-thread exception handling is
1396 really a bitch. Thaks to a bug report by Stephen Walton
1401 really a bitch. Thaks to a bug report by Stephen Walton
1397 <stephen.walton-AT-csun.edu>.
1402 <stephen.walton-AT-csun.edu>.
1398
1403
1399 2004-11-04 Fernando Perez <fperez@colorado.edu>
1404 2004-11-04 Fernando Perez <fperez@colorado.edu>
1400
1405
1401 * IPython/iplib.py (raw_input_original): store a pointer to the
1406 * IPython/iplib.py (raw_input_original): store a pointer to the
1402 true raw_input to harden against code which can modify it
1407 true raw_input to harden against code which can modify it
1403 (wx.py.PyShell does this and would otherwise crash ipython).
1408 (wx.py.PyShell does this and would otherwise crash ipython).
1404 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1409 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1405
1410
1406 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1411 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1407 Ctrl-C problem, which does not mess up the input line.
1412 Ctrl-C problem, which does not mess up the input line.
1408
1413
1409 2004-11-03 Fernando Perez <fperez@colorado.edu>
1414 2004-11-03 Fernando Perez <fperez@colorado.edu>
1410
1415
1411 * IPython/Release.py: Changed licensing to BSD, in all files.
1416 * IPython/Release.py: Changed licensing to BSD, in all files.
1412 (name): lowercase name for tarball/RPM release.
1417 (name): lowercase name for tarball/RPM release.
1413
1418
1414 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1419 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1415 use throughout ipython.
1420 use throughout ipython.
1416
1421
1417 * IPython/Magic.py (Magic._ofind): Switch to using the new
1422 * IPython/Magic.py (Magic._ofind): Switch to using the new
1418 OInspect.getdoc() function.
1423 OInspect.getdoc() function.
1419
1424
1420 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1425 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1421 of the line currently being canceled via Ctrl-C. It's extremely
1426 of the line currently being canceled via Ctrl-C. It's extremely
1422 ugly, but I don't know how to do it better (the problem is one of
1427 ugly, but I don't know how to do it better (the problem is one of
1423 handling cross-thread exceptions).
1428 handling cross-thread exceptions).
1424
1429
1425 2004-10-28 Fernando Perez <fperez@colorado.edu>
1430 2004-10-28 Fernando Perez <fperez@colorado.edu>
1426
1431
1427 * IPython/Shell.py (signal_handler): add signal handlers to trap
1432 * IPython/Shell.py (signal_handler): add signal handlers to trap
1428 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1433 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1429 report by Francesc Alted.
1434 report by Francesc Alted.
1430
1435
1431 2004-10-21 Fernando Perez <fperez@colorado.edu>
1436 2004-10-21 Fernando Perez <fperez@colorado.edu>
1432
1437
1433 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1438 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1434 to % for pysh syntax extensions.
1439 to % for pysh syntax extensions.
1435
1440
1436 2004-10-09 Fernando Perez <fperez@colorado.edu>
1441 2004-10-09 Fernando Perez <fperez@colorado.edu>
1437
1442
1438 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1443 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1439 arrays to print a more useful summary, without calling str(arr).
1444 arrays to print a more useful summary, without calling str(arr).
1440 This avoids the problem of extremely lengthy computations which
1445 This avoids the problem of extremely lengthy computations which
1441 occur if arr is large, and appear to the user as a system lockup
1446 occur if arr is large, and appear to the user as a system lockup
1442 with 100% cpu activity. After a suggestion by Kristian Sandberg
1447 with 100% cpu activity. After a suggestion by Kristian Sandberg
1443 <Kristian.Sandberg@colorado.edu>.
1448 <Kristian.Sandberg@colorado.edu>.
1444 (Magic.__init__): fix bug in global magic escapes not being
1449 (Magic.__init__): fix bug in global magic escapes not being
1445 correctly set.
1450 correctly set.
1446
1451
1447 2004-10-08 Fernando Perez <fperez@colorado.edu>
1452 2004-10-08 Fernando Perez <fperez@colorado.edu>
1448
1453
1449 * IPython/Magic.py (__license__): change to absolute imports of
1454 * IPython/Magic.py (__license__): change to absolute imports of
1450 ipython's own internal packages, to start adapting to the absolute
1455 ipython's own internal packages, to start adapting to the absolute
1451 import requirement of PEP-328.
1456 import requirement of PEP-328.
1452
1457
1453 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1458 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1454 files, and standardize author/license marks through the Release
1459 files, and standardize author/license marks through the Release
1455 module instead of having per/file stuff (except for files with
1460 module instead of having per/file stuff (except for files with
1456 particular licenses, like the MIT/PSF-licensed codes).
1461 particular licenses, like the MIT/PSF-licensed codes).
1457
1462
1458 * IPython/Debugger.py: remove dead code for python 2.1
1463 * IPython/Debugger.py: remove dead code for python 2.1
1459
1464
1460 2004-10-04 Fernando Perez <fperez@colorado.edu>
1465 2004-10-04 Fernando Perez <fperez@colorado.edu>
1461
1466
1462 * IPython/iplib.py (ipmagic): New function for accessing magics
1467 * IPython/iplib.py (ipmagic): New function for accessing magics
1463 via a normal python function call.
1468 via a normal python function call.
1464
1469
1465 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1470 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1466 from '@' to '%', to accomodate the new @decorator syntax of python
1471 from '@' to '%', to accomodate the new @decorator syntax of python
1467 2.4.
1472 2.4.
1468
1473
1469 2004-09-29 Fernando Perez <fperez@colorado.edu>
1474 2004-09-29 Fernando Perez <fperez@colorado.edu>
1470
1475
1471 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1476 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1472 matplotlib.use to prevent running scripts which try to switch
1477 matplotlib.use to prevent running scripts which try to switch
1473 interactive backends from within ipython. This will just crash
1478 interactive backends from within ipython. This will just crash
1474 the python interpreter, so we can't allow it (but a detailed error
1479 the python interpreter, so we can't allow it (but a detailed error
1475 is given to the user).
1480 is given to the user).
1476
1481
1477 2004-09-28 Fernando Perez <fperez@colorado.edu>
1482 2004-09-28 Fernando Perez <fperez@colorado.edu>
1478
1483
1479 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1484 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1480 matplotlib-related fixes so that using @run with non-matplotlib
1485 matplotlib-related fixes so that using @run with non-matplotlib
1481 scripts doesn't pop up spurious plot windows. This requires
1486 scripts doesn't pop up spurious plot windows. This requires
1482 matplotlib >= 0.63, where I had to make some changes as well.
1487 matplotlib >= 0.63, where I had to make some changes as well.
1483
1488
1484 * IPython/ipmaker.py (make_IPython): update version requirement to
1489 * IPython/ipmaker.py (make_IPython): update version requirement to
1485 python 2.2.
1490 python 2.2.
1486
1491
1487 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1492 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1488 banner arg for embedded customization.
1493 banner arg for embedded customization.
1489
1494
1490 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1495 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1491 explicit uses of __IP as the IPython's instance name. Now things
1496 explicit uses of __IP as the IPython's instance name. Now things
1492 are properly handled via the shell.name value. The actual code
1497 are properly handled via the shell.name value. The actual code
1493 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1498 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1494 is much better than before. I'll clean things completely when the
1499 is much better than before. I'll clean things completely when the
1495 magic stuff gets a real overhaul.
1500 magic stuff gets a real overhaul.
1496
1501
1497 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1502 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1498 minor changes to debian dir.
1503 minor changes to debian dir.
1499
1504
1500 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1505 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1501 pointer to the shell itself in the interactive namespace even when
1506 pointer to the shell itself in the interactive namespace even when
1502 a user-supplied dict is provided. This is needed for embedding
1507 a user-supplied dict is provided. This is needed for embedding
1503 purposes (found by tests with Michel Sanner).
1508 purposes (found by tests with Michel Sanner).
1504
1509
1505 2004-09-27 Fernando Perez <fperez@colorado.edu>
1510 2004-09-27 Fernando Perez <fperez@colorado.edu>
1506
1511
1507 * IPython/UserConfig/ipythonrc: remove []{} from
1512 * IPython/UserConfig/ipythonrc: remove []{} from
1508 readline_remove_delims, so that things like [modname.<TAB> do
1513 readline_remove_delims, so that things like [modname.<TAB> do
1509 proper completion. This disables [].TAB, but that's a less common
1514 proper completion. This disables [].TAB, but that's a less common
1510 case than module names in list comprehensions, for example.
1515 case than module names in list comprehensions, for example.
1511 Thanks to a report by Andrea Riciputi.
1516 Thanks to a report by Andrea Riciputi.
1512
1517
1513 2004-09-09 Fernando Perez <fperez@colorado.edu>
1518 2004-09-09 Fernando Perez <fperez@colorado.edu>
1514
1519
1515 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1520 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1516 blocking problems in win32 and osx. Fix by John.
1521 blocking problems in win32 and osx. Fix by John.
1517
1522
1518 2004-09-08 Fernando Perez <fperez@colorado.edu>
1523 2004-09-08 Fernando Perez <fperez@colorado.edu>
1519
1524
1520 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1525 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1521 for Win32 and OSX. Fix by John Hunter.
1526 for Win32 and OSX. Fix by John Hunter.
1522
1527
1523 2004-08-30 *** Released version 0.6.3
1528 2004-08-30 *** Released version 0.6.3
1524
1529
1525 2004-08-30 Fernando Perez <fperez@colorado.edu>
1530 2004-08-30 Fernando Perez <fperez@colorado.edu>
1526
1531
1527 * setup.py (isfile): Add manpages to list of dependent files to be
1532 * setup.py (isfile): Add manpages to list of dependent files to be
1528 updated.
1533 updated.
1529
1534
1530 2004-08-27 Fernando Perez <fperez@colorado.edu>
1535 2004-08-27 Fernando Perez <fperez@colorado.edu>
1531
1536
1532 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1537 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1533 for now. They don't really work with standalone WX/GTK code
1538 for now. They don't really work with standalone WX/GTK code
1534 (though matplotlib IS working fine with both of those backends).
1539 (though matplotlib IS working fine with both of those backends).
1535 This will neeed much more testing. I disabled most things with
1540 This will neeed much more testing. I disabled most things with
1536 comments, so turning it back on later should be pretty easy.
1541 comments, so turning it back on later should be pretty easy.
1537
1542
1538 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1543 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1539 autocalling of expressions like r'foo', by modifying the line
1544 autocalling of expressions like r'foo', by modifying the line
1540 split regexp. Closes
1545 split regexp. Closes
1541 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1546 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1542 Riley <ipythonbugs-AT-sabi.net>.
1547 Riley <ipythonbugs-AT-sabi.net>.
1543 (InteractiveShell.mainloop): honor --nobanner with banner
1548 (InteractiveShell.mainloop): honor --nobanner with banner
1544 extensions.
1549 extensions.
1545
1550
1546 * IPython/Shell.py: Significant refactoring of all classes, so
1551 * IPython/Shell.py: Significant refactoring of all classes, so
1547 that we can really support ALL matplotlib backends and threading
1552 that we can really support ALL matplotlib backends and threading
1548 models (John spotted a bug with Tk which required this). Now we
1553 models (John spotted a bug with Tk which required this). Now we
1549 should support single-threaded, WX-threads and GTK-threads, both
1554 should support single-threaded, WX-threads and GTK-threads, both
1550 for generic code and for matplotlib.
1555 for generic code and for matplotlib.
1551
1556
1552 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1557 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1553 -pylab, to simplify things for users. Will also remove the pylab
1558 -pylab, to simplify things for users. Will also remove the pylab
1554 profile, since now all of matplotlib configuration is directly
1559 profile, since now all of matplotlib configuration is directly
1555 handled here. This also reduces startup time.
1560 handled here. This also reduces startup time.
1556
1561
1557 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1562 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1558 shell wasn't being correctly called. Also in IPShellWX.
1563 shell wasn't being correctly called. Also in IPShellWX.
1559
1564
1560 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1565 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1561 fine-tune banner.
1566 fine-tune banner.
1562
1567
1563 * IPython/numutils.py (spike): Deprecate these spike functions,
1568 * IPython/numutils.py (spike): Deprecate these spike functions,
1564 delete (long deprecated) gnuplot_exec handler.
1569 delete (long deprecated) gnuplot_exec handler.
1565
1570
1566 2004-08-26 Fernando Perez <fperez@colorado.edu>
1571 2004-08-26 Fernando Perez <fperez@colorado.edu>
1567
1572
1568 * ipython.1: Update for threading options, plus some others which
1573 * ipython.1: Update for threading options, plus some others which
1569 were missing.
1574 were missing.
1570
1575
1571 * IPython/ipmaker.py (__call__): Added -wthread option for
1576 * IPython/ipmaker.py (__call__): Added -wthread option for
1572 wxpython thread handling. Make sure threading options are only
1577 wxpython thread handling. Make sure threading options are only
1573 valid at the command line.
1578 valid at the command line.
1574
1579
1575 * scripts/ipython: moved shell selection into a factory function
1580 * scripts/ipython: moved shell selection into a factory function
1576 in Shell.py, to keep the starter script to a minimum.
1581 in Shell.py, to keep the starter script to a minimum.
1577
1582
1578 2004-08-25 Fernando Perez <fperez@colorado.edu>
1583 2004-08-25 Fernando Perez <fperez@colorado.edu>
1579
1584
1580 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1585 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1581 John. Along with some recent changes he made to matplotlib, the
1586 John. Along with some recent changes he made to matplotlib, the
1582 next versions of both systems should work very well together.
1587 next versions of both systems should work very well together.
1583
1588
1584 2004-08-24 Fernando Perez <fperez@colorado.edu>
1589 2004-08-24 Fernando Perez <fperez@colorado.edu>
1585
1590
1586 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1591 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1587 tried to switch the profiling to using hotshot, but I'm getting
1592 tried to switch the profiling to using hotshot, but I'm getting
1588 strange errors from prof.runctx() there. I may be misreading the
1593 strange errors from prof.runctx() there. I may be misreading the
1589 docs, but it looks weird. For now the profiling code will
1594 docs, but it looks weird. For now the profiling code will
1590 continue to use the standard profiler.
1595 continue to use the standard profiler.
1591
1596
1592 2004-08-23 Fernando Perez <fperez@colorado.edu>
1597 2004-08-23 Fernando Perez <fperez@colorado.edu>
1593
1598
1594 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1599 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1595 threaded shell, by John Hunter. It's not quite ready yet, but
1600 threaded shell, by John Hunter. It's not quite ready yet, but
1596 close.
1601 close.
1597
1602
1598 2004-08-22 Fernando Perez <fperez@colorado.edu>
1603 2004-08-22 Fernando Perez <fperez@colorado.edu>
1599
1604
1600 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1605 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1601 in Magic and ultraTB.
1606 in Magic and ultraTB.
1602
1607
1603 * ipython.1: document threading options in manpage.
1608 * ipython.1: document threading options in manpage.
1604
1609
1605 * scripts/ipython: Changed name of -thread option to -gthread,
1610 * scripts/ipython: Changed name of -thread option to -gthread,
1606 since this is GTK specific. I want to leave the door open for a
1611 since this is GTK specific. I want to leave the door open for a
1607 -wthread option for WX, which will most likely be necessary. This
1612 -wthread option for WX, which will most likely be necessary. This
1608 change affects usage and ipmaker as well.
1613 change affects usage and ipmaker as well.
1609
1614
1610 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1615 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1611 handle the matplotlib shell issues. Code by John Hunter
1616 handle the matplotlib shell issues. Code by John Hunter
1612 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1617 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1613 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1618 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1614 broken (and disabled for end users) for now, but it puts the
1619 broken (and disabled for end users) for now, but it puts the
1615 infrastructure in place.
1620 infrastructure in place.
1616
1621
1617 2004-08-21 Fernando Perez <fperez@colorado.edu>
1622 2004-08-21 Fernando Perez <fperez@colorado.edu>
1618
1623
1619 * ipythonrc-pylab: Add matplotlib support.
1624 * ipythonrc-pylab: Add matplotlib support.
1620
1625
1621 * matplotlib_config.py: new files for matplotlib support, part of
1626 * matplotlib_config.py: new files for matplotlib support, part of
1622 the pylab profile.
1627 the pylab profile.
1623
1628
1624 * IPython/usage.py (__doc__): documented the threading options.
1629 * IPython/usage.py (__doc__): documented the threading options.
1625
1630
1626 2004-08-20 Fernando Perez <fperez@colorado.edu>
1631 2004-08-20 Fernando Perez <fperez@colorado.edu>
1627
1632
1628 * ipython: Modified the main calling routine to handle the -thread
1633 * ipython: Modified the main calling routine to handle the -thread
1629 and -mpthread options. This needs to be done as a top-level hack,
1634 and -mpthread options. This needs to be done as a top-level hack,
1630 because it determines which class to instantiate for IPython
1635 because it determines which class to instantiate for IPython
1631 itself.
1636 itself.
1632
1637
1633 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1638 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1634 classes to support multithreaded GTK operation without blocking,
1639 classes to support multithreaded GTK operation without blocking,
1635 and matplotlib with all backends. This is a lot of still very
1640 and matplotlib with all backends. This is a lot of still very
1636 experimental code, and threads are tricky. So it may still have a
1641 experimental code, and threads are tricky. So it may still have a
1637 few rough edges... This code owes a lot to
1642 few rough edges... This code owes a lot to
1638 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1643 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1639 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1644 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1640 to John Hunter for all the matplotlib work.
1645 to John Hunter for all the matplotlib work.
1641
1646
1642 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1647 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1643 options for gtk thread and matplotlib support.
1648 options for gtk thread and matplotlib support.
1644
1649
1645 2004-08-16 Fernando Perez <fperez@colorado.edu>
1650 2004-08-16 Fernando Perez <fperez@colorado.edu>
1646
1651
1647 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1652 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1648 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1653 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1649 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1654 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1650
1655
1651 2004-08-11 Fernando Perez <fperez@colorado.edu>
1656 2004-08-11 Fernando Perez <fperez@colorado.edu>
1652
1657
1653 * setup.py (isfile): Fix build so documentation gets updated for
1658 * setup.py (isfile): Fix build so documentation gets updated for
1654 rpms (it was only done for .tgz builds).
1659 rpms (it was only done for .tgz builds).
1655
1660
1656 2004-08-10 Fernando Perez <fperez@colorado.edu>
1661 2004-08-10 Fernando Perez <fperez@colorado.edu>
1657
1662
1658 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1663 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1659
1664
1660 * iplib.py : Silence syntax error exceptions in tab-completion.
1665 * iplib.py : Silence syntax error exceptions in tab-completion.
1661
1666
1662 2004-08-05 Fernando Perez <fperez@colorado.edu>
1667 2004-08-05 Fernando Perez <fperez@colorado.edu>
1663
1668
1664 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1669 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1665 'color off' mark for continuation prompts. This was causing long
1670 'color off' mark for continuation prompts. This was causing long
1666 continuation lines to mis-wrap.
1671 continuation lines to mis-wrap.
1667
1672
1668 2004-08-01 Fernando Perez <fperez@colorado.edu>
1673 2004-08-01 Fernando Perez <fperez@colorado.edu>
1669
1674
1670 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1675 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1671 for building ipython to be a parameter. All this is necessary
1676 for building ipython to be a parameter. All this is necessary
1672 right now to have a multithreaded version, but this insane
1677 right now to have a multithreaded version, but this insane
1673 non-design will be cleaned up soon. For now, it's a hack that
1678 non-design will be cleaned up soon. For now, it's a hack that
1674 works.
1679 works.
1675
1680
1676 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1681 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1677 args in various places. No bugs so far, but it's a dangerous
1682 args in various places. No bugs so far, but it's a dangerous
1678 practice.
1683 practice.
1679
1684
1680 2004-07-31 Fernando Perez <fperez@colorado.edu>
1685 2004-07-31 Fernando Perez <fperez@colorado.edu>
1681
1686
1682 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1687 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1683 fix completion of files with dots in their names under most
1688 fix completion of files with dots in their names under most
1684 profiles (pysh was OK because the completion order is different).
1689 profiles (pysh was OK because the completion order is different).
1685
1690
1686 2004-07-27 Fernando Perez <fperez@colorado.edu>
1691 2004-07-27 Fernando Perez <fperez@colorado.edu>
1687
1692
1688 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1693 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1689 keywords manually, b/c the one in keyword.py was removed in python
1694 keywords manually, b/c the one in keyword.py was removed in python
1690 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1695 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1691 This is NOT a bug under python 2.3 and earlier.
1696 This is NOT a bug under python 2.3 and earlier.
1692
1697
1693 2004-07-26 Fernando Perez <fperez@colorado.edu>
1698 2004-07-26 Fernando Perez <fperez@colorado.edu>
1694
1699
1695 * IPython/ultraTB.py (VerboseTB.text): Add another
1700 * IPython/ultraTB.py (VerboseTB.text): Add another
1696 linecache.checkcache() call to try to prevent inspect.py from
1701 linecache.checkcache() call to try to prevent inspect.py from
1697 crashing under python 2.3. I think this fixes
1702 crashing under python 2.3. I think this fixes
1698 http://www.scipy.net/roundup/ipython/issue17.
1703 http://www.scipy.net/roundup/ipython/issue17.
1699
1704
1700 2004-07-26 *** Released version 0.6.2
1705 2004-07-26 *** Released version 0.6.2
1701
1706
1702 2004-07-26 Fernando Perez <fperez@colorado.edu>
1707 2004-07-26 Fernando Perez <fperez@colorado.edu>
1703
1708
1704 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1709 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1705 fail for any number.
1710 fail for any number.
1706 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1711 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1707 empty bookmarks.
1712 empty bookmarks.
1708
1713
1709 2004-07-26 *** Released version 0.6.1
1714 2004-07-26 *** Released version 0.6.1
1710
1715
1711 2004-07-26 Fernando Perez <fperez@colorado.edu>
1716 2004-07-26 Fernando Perez <fperez@colorado.edu>
1712
1717
1713 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1718 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1714
1719
1715 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1720 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1716 escaping '()[]{}' in filenames.
1721 escaping '()[]{}' in filenames.
1717
1722
1718 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1723 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1719 Python 2.2 users who lack a proper shlex.split.
1724 Python 2.2 users who lack a proper shlex.split.
1720
1725
1721 2004-07-19 Fernando Perez <fperez@colorado.edu>
1726 2004-07-19 Fernando Perez <fperez@colorado.edu>
1722
1727
1723 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1728 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1724 for reading readline's init file. I follow the normal chain:
1729 for reading readline's init file. I follow the normal chain:
1725 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1730 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1726 report by Mike Heeter. This closes
1731 report by Mike Heeter. This closes
1727 http://www.scipy.net/roundup/ipython/issue16.
1732 http://www.scipy.net/roundup/ipython/issue16.
1728
1733
1729 2004-07-18 Fernando Perez <fperez@colorado.edu>
1734 2004-07-18 Fernando Perez <fperez@colorado.edu>
1730
1735
1731 * IPython/iplib.py (__init__): Add better handling of '\' under
1736 * IPython/iplib.py (__init__): Add better handling of '\' under
1732 Win32 for filenames. After a patch by Ville.
1737 Win32 for filenames. After a patch by Ville.
1733
1738
1734 2004-07-17 Fernando Perez <fperez@colorado.edu>
1739 2004-07-17 Fernando Perez <fperez@colorado.edu>
1735
1740
1736 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1741 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1737 autocalling would be triggered for 'foo is bar' if foo is
1742 autocalling would be triggered for 'foo is bar' if foo is
1738 callable. I also cleaned up the autocall detection code to use a
1743 callable. I also cleaned up the autocall detection code to use a
1739 regexp, which is faster. Bug reported by Alexander Schmolck.
1744 regexp, which is faster. Bug reported by Alexander Schmolck.
1740
1745
1741 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1746 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1742 '?' in them would confuse the help system. Reported by Alex
1747 '?' in them would confuse the help system. Reported by Alex
1743 Schmolck.
1748 Schmolck.
1744
1749
1745 2004-07-16 Fernando Perez <fperez@colorado.edu>
1750 2004-07-16 Fernando Perez <fperez@colorado.edu>
1746
1751
1747 * IPython/GnuplotInteractive.py (__all__): added plot2.
1752 * IPython/GnuplotInteractive.py (__all__): added plot2.
1748
1753
1749 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1754 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1750 plotting dictionaries, lists or tuples of 1d arrays.
1755 plotting dictionaries, lists or tuples of 1d arrays.
1751
1756
1752 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1757 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1753 optimizations.
1758 optimizations.
1754
1759
1755 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1760 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1756 the information which was there from Janko's original IPP code:
1761 the information which was there from Janko's original IPP code:
1757
1762
1758 03.05.99 20:53 porto.ifm.uni-kiel.de
1763 03.05.99 20:53 porto.ifm.uni-kiel.de
1759 --Started changelog.
1764 --Started changelog.
1760 --make clear do what it say it does
1765 --make clear do what it say it does
1761 --added pretty output of lines from inputcache
1766 --added pretty output of lines from inputcache
1762 --Made Logger a mixin class, simplifies handling of switches
1767 --Made Logger a mixin class, simplifies handling of switches
1763 --Added own completer class. .string<TAB> expands to last history
1768 --Added own completer class. .string<TAB> expands to last history
1764 line which starts with string. The new expansion is also present
1769 line which starts with string. The new expansion is also present
1765 with Ctrl-r from the readline library. But this shows, who this
1770 with Ctrl-r from the readline library. But this shows, who this
1766 can be done for other cases.
1771 can be done for other cases.
1767 --Added convention that all shell functions should accept a
1772 --Added convention that all shell functions should accept a
1768 parameter_string This opens the door for different behaviour for
1773 parameter_string This opens the door for different behaviour for
1769 each function. @cd is a good example of this.
1774 each function. @cd is a good example of this.
1770
1775
1771 04.05.99 12:12 porto.ifm.uni-kiel.de
1776 04.05.99 12:12 porto.ifm.uni-kiel.de
1772 --added logfile rotation
1777 --added logfile rotation
1773 --added new mainloop method which freezes first the namespace
1778 --added new mainloop method which freezes first the namespace
1774
1779
1775 07.05.99 21:24 porto.ifm.uni-kiel.de
1780 07.05.99 21:24 porto.ifm.uni-kiel.de
1776 --added the docreader classes. Now there is a help system.
1781 --added the docreader classes. Now there is a help system.
1777 -This is only a first try. Currently it's not easy to put new
1782 -This is only a first try. Currently it's not easy to put new
1778 stuff in the indices. But this is the way to go. Info would be
1783 stuff in the indices. But this is the way to go. Info would be
1779 better, but HTML is every where and not everybody has an info
1784 better, but HTML is every where and not everybody has an info
1780 system installed and it's not so easy to change html-docs to info.
1785 system installed and it's not so easy to change html-docs to info.
1781 --added global logfile option
1786 --added global logfile option
1782 --there is now a hook for object inspection method pinfo needs to
1787 --there is now a hook for object inspection method pinfo needs to
1783 be provided for this. Can be reached by two '??'.
1788 be provided for this. Can be reached by two '??'.
1784
1789
1785 08.05.99 20:51 porto.ifm.uni-kiel.de
1790 08.05.99 20:51 porto.ifm.uni-kiel.de
1786 --added a README
1791 --added a README
1787 --bug in rc file. Something has changed so functions in the rc
1792 --bug in rc file. Something has changed so functions in the rc
1788 file need to reference the shell and not self. Not clear if it's a
1793 file need to reference the shell and not self. Not clear if it's a
1789 bug or feature.
1794 bug or feature.
1790 --changed rc file for new behavior
1795 --changed rc file for new behavior
1791
1796
1792 2004-07-15 Fernando Perez <fperez@colorado.edu>
1797 2004-07-15 Fernando Perez <fperez@colorado.edu>
1793
1798
1794 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1799 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1795 cache was falling out of sync in bizarre manners when multi-line
1800 cache was falling out of sync in bizarre manners when multi-line
1796 input was present. Minor optimizations and cleanup.
1801 input was present. Minor optimizations and cleanup.
1797
1802
1798 (Logger): Remove old Changelog info for cleanup. This is the
1803 (Logger): Remove old Changelog info for cleanup. This is the
1799 information which was there from Janko's original code:
1804 information which was there from Janko's original code:
1800
1805
1801 Changes to Logger: - made the default log filename a parameter
1806 Changes to Logger: - made the default log filename a parameter
1802
1807
1803 - put a check for lines beginning with !@? in log(). Needed
1808 - put a check for lines beginning with !@? in log(). Needed
1804 (even if the handlers properly log their lines) for mid-session
1809 (even if the handlers properly log their lines) for mid-session
1805 logging activation to work properly. Without this, lines logged
1810 logging activation to work properly. Without this, lines logged
1806 in mid session, which get read from the cache, would end up
1811 in mid session, which get read from the cache, would end up
1807 'bare' (with !@? in the open) in the log. Now they are caught
1812 'bare' (with !@? in the open) in the log. Now they are caught
1808 and prepended with a #.
1813 and prepended with a #.
1809
1814
1810 * IPython/iplib.py (InteractiveShell.init_readline): added check
1815 * IPython/iplib.py (InteractiveShell.init_readline): added check
1811 in case MagicCompleter fails to be defined, so we don't crash.
1816 in case MagicCompleter fails to be defined, so we don't crash.
1812
1817
1813 2004-07-13 Fernando Perez <fperez@colorado.edu>
1818 2004-07-13 Fernando Perez <fperez@colorado.edu>
1814
1819
1815 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1820 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1816 of EPS if the requested filename ends in '.eps'.
1821 of EPS if the requested filename ends in '.eps'.
1817
1822
1818 2004-07-04 Fernando Perez <fperez@colorado.edu>
1823 2004-07-04 Fernando Perez <fperez@colorado.edu>
1819
1824
1820 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1825 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1821 escaping of quotes when calling the shell.
1826 escaping of quotes when calling the shell.
1822
1827
1823 2004-07-02 Fernando Perez <fperez@colorado.edu>
1828 2004-07-02 Fernando Perez <fperez@colorado.edu>
1824
1829
1825 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1830 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1826 gettext not working because we were clobbering '_'. Fixes
1831 gettext not working because we were clobbering '_'. Fixes
1827 http://www.scipy.net/roundup/ipython/issue6.
1832 http://www.scipy.net/roundup/ipython/issue6.
1828
1833
1829 2004-07-01 Fernando Perez <fperez@colorado.edu>
1834 2004-07-01 Fernando Perez <fperez@colorado.edu>
1830
1835
1831 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1836 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1832 into @cd. Patch by Ville.
1837 into @cd. Patch by Ville.
1833
1838
1834 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1839 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1835 new function to store things after ipmaker runs. Patch by Ville.
1840 new function to store things after ipmaker runs. Patch by Ville.
1836 Eventually this will go away once ipmaker is removed and the class
1841 Eventually this will go away once ipmaker is removed and the class
1837 gets cleaned up, but for now it's ok. Key functionality here is
1842 gets cleaned up, but for now it's ok. Key functionality here is
1838 the addition of the persistent storage mechanism, a dict for
1843 the addition of the persistent storage mechanism, a dict for
1839 keeping data across sessions (for now just bookmarks, but more can
1844 keeping data across sessions (for now just bookmarks, but more can
1840 be implemented later).
1845 be implemented later).
1841
1846
1842 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1847 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1843 persistent across sections. Patch by Ville, I modified it
1848 persistent across sections. Patch by Ville, I modified it
1844 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1849 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1845 added a '-l' option to list all bookmarks.
1850 added a '-l' option to list all bookmarks.
1846
1851
1847 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1852 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1848 center for cleanup. Registered with atexit.register(). I moved
1853 center for cleanup. Registered with atexit.register(). I moved
1849 here the old exit_cleanup(). After a patch by Ville.
1854 here the old exit_cleanup(). After a patch by Ville.
1850
1855
1851 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1856 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1852 characters in the hacked shlex_split for python 2.2.
1857 characters in the hacked shlex_split for python 2.2.
1853
1858
1854 * IPython/iplib.py (file_matches): more fixes to filenames with
1859 * IPython/iplib.py (file_matches): more fixes to filenames with
1855 whitespace in them. It's not perfect, but limitations in python's
1860 whitespace in them. It's not perfect, but limitations in python's
1856 readline make it impossible to go further.
1861 readline make it impossible to go further.
1857
1862
1858 2004-06-29 Fernando Perez <fperez@colorado.edu>
1863 2004-06-29 Fernando Perez <fperez@colorado.edu>
1859
1864
1860 * IPython/iplib.py (file_matches): escape whitespace correctly in
1865 * IPython/iplib.py (file_matches): escape whitespace correctly in
1861 filename completions. Bug reported by Ville.
1866 filename completions. Bug reported by Ville.
1862
1867
1863 2004-06-28 Fernando Perez <fperez@colorado.edu>
1868 2004-06-28 Fernando Perez <fperez@colorado.edu>
1864
1869
1865 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1870 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1866 the history file will be called 'history-PROFNAME' (or just
1871 the history file will be called 'history-PROFNAME' (or just
1867 'history' if no profile is loaded). I was getting annoyed at
1872 'history' if no profile is loaded). I was getting annoyed at
1868 getting my Numerical work history clobbered by pysh sessions.
1873 getting my Numerical work history clobbered by pysh sessions.
1869
1874
1870 * IPython/iplib.py (InteractiveShell.__init__): Internal
1875 * IPython/iplib.py (InteractiveShell.__init__): Internal
1871 getoutputerror() function so that we can honor the system_verbose
1876 getoutputerror() function so that we can honor the system_verbose
1872 flag for _all_ system calls. I also added escaping of #
1877 flag for _all_ system calls. I also added escaping of #
1873 characters here to avoid confusing Itpl.
1878 characters here to avoid confusing Itpl.
1874
1879
1875 * IPython/Magic.py (shlex_split): removed call to shell in
1880 * IPython/Magic.py (shlex_split): removed call to shell in
1876 parse_options and replaced it with shlex.split(). The annoying
1881 parse_options and replaced it with shlex.split(). The annoying
1877 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1882 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1878 to backport it from 2.3, with several frail hacks (the shlex
1883 to backport it from 2.3, with several frail hacks (the shlex
1879 module is rather limited in 2.2). Thanks to a suggestion by Ville
1884 module is rather limited in 2.2). Thanks to a suggestion by Ville
1880 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1885 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1881 problem.
1886 problem.
1882
1887
1883 (Magic.magic_system_verbose): new toggle to print the actual
1888 (Magic.magic_system_verbose): new toggle to print the actual
1884 system calls made by ipython. Mainly for debugging purposes.
1889 system calls made by ipython. Mainly for debugging purposes.
1885
1890
1886 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1891 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1887 doesn't support persistence. Reported (and fix suggested) by
1892 doesn't support persistence. Reported (and fix suggested) by
1888 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1893 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1889
1894
1890 2004-06-26 Fernando Perez <fperez@colorado.edu>
1895 2004-06-26 Fernando Perez <fperez@colorado.edu>
1891
1896
1892 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1897 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1893 continue prompts.
1898 continue prompts.
1894
1899
1895 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1900 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1896 function (basically a big docstring) and a few more things here to
1901 function (basically a big docstring) and a few more things here to
1897 speedup startup. pysh.py is now very lightweight. We want because
1902 speedup startup. pysh.py is now very lightweight. We want because
1898 it gets execfile'd, while InterpreterExec gets imported, so
1903 it gets execfile'd, while InterpreterExec gets imported, so
1899 byte-compilation saves time.
1904 byte-compilation saves time.
1900
1905
1901 2004-06-25 Fernando Perez <fperez@colorado.edu>
1906 2004-06-25 Fernando Perez <fperez@colorado.edu>
1902
1907
1903 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1908 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1904 -NUM', which was recently broken.
1909 -NUM', which was recently broken.
1905
1910
1906 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1911 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1907 in multi-line input (but not !!, which doesn't make sense there).
1912 in multi-line input (but not !!, which doesn't make sense there).
1908
1913
1909 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1914 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1910 It's just too useful, and people can turn it off in the less
1915 It's just too useful, and people can turn it off in the less
1911 common cases where it's a problem.
1916 common cases where it's a problem.
1912
1917
1913 2004-06-24 Fernando Perez <fperez@colorado.edu>
1918 2004-06-24 Fernando Perez <fperez@colorado.edu>
1914
1919
1915 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1920 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1916 special syntaxes (like alias calling) is now allied in multi-line
1921 special syntaxes (like alias calling) is now allied in multi-line
1917 input. This is still _very_ experimental, but it's necessary for
1922 input. This is still _very_ experimental, but it's necessary for
1918 efficient shell usage combining python looping syntax with system
1923 efficient shell usage combining python looping syntax with system
1919 calls. For now it's restricted to aliases, I don't think it
1924 calls. For now it's restricted to aliases, I don't think it
1920 really even makes sense to have this for magics.
1925 really even makes sense to have this for magics.
1921
1926
1922 2004-06-23 Fernando Perez <fperez@colorado.edu>
1927 2004-06-23 Fernando Perez <fperez@colorado.edu>
1923
1928
1924 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1929 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1925 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1930 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1926
1931
1927 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1932 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1928 extensions under Windows (after code sent by Gary Bishop). The
1933 extensions under Windows (after code sent by Gary Bishop). The
1929 extensions considered 'executable' are stored in IPython's rc
1934 extensions considered 'executable' are stored in IPython's rc
1930 structure as win_exec_ext.
1935 structure as win_exec_ext.
1931
1936
1932 * IPython/genutils.py (shell): new function, like system() but
1937 * IPython/genutils.py (shell): new function, like system() but
1933 without return value. Very useful for interactive shell work.
1938 without return value. Very useful for interactive shell work.
1934
1939
1935 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1940 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1936 delete aliases.
1941 delete aliases.
1937
1942
1938 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1943 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1939 sure that the alias table doesn't contain python keywords.
1944 sure that the alias table doesn't contain python keywords.
1940
1945
1941 2004-06-21 Fernando Perez <fperez@colorado.edu>
1946 2004-06-21 Fernando Perez <fperez@colorado.edu>
1942
1947
1943 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1948 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1944 non-existent items are found in $PATH. Reported by Thorsten.
1949 non-existent items are found in $PATH. Reported by Thorsten.
1945
1950
1946 2004-06-20 Fernando Perez <fperez@colorado.edu>
1951 2004-06-20 Fernando Perez <fperez@colorado.edu>
1947
1952
1948 * IPython/iplib.py (complete): modified the completer so that the
1953 * IPython/iplib.py (complete): modified the completer so that the
1949 order of priorities can be easily changed at runtime.
1954 order of priorities can be easily changed at runtime.
1950
1955
1951 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1956 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1952 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1957 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1953
1958
1954 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1959 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1955 expand Python variables prepended with $ in all system calls. The
1960 expand Python variables prepended with $ in all system calls. The
1956 same was done to InteractiveShell.handle_shell_escape. Now all
1961 same was done to InteractiveShell.handle_shell_escape. Now all
1957 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1962 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1958 expansion of python variables and expressions according to the
1963 expansion of python variables and expressions according to the
1959 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1964 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1960
1965
1961 Though PEP-215 has been rejected, a similar (but simpler) one
1966 Though PEP-215 has been rejected, a similar (but simpler) one
1962 seems like it will go into Python 2.4, PEP-292 -
1967 seems like it will go into Python 2.4, PEP-292 -
1963 http://www.python.org/peps/pep-0292.html.
1968 http://www.python.org/peps/pep-0292.html.
1964
1969
1965 I'll keep the full syntax of PEP-215, since IPython has since the
1970 I'll keep the full syntax of PEP-215, since IPython has since the
1966 start used Ka-Ping Yee's reference implementation discussed there
1971 start used Ka-Ping Yee's reference implementation discussed there
1967 (Itpl), and I actually like the powerful semantics it offers.
1972 (Itpl), and I actually like the powerful semantics it offers.
1968
1973
1969 In order to access normal shell variables, the $ has to be escaped
1974 In order to access normal shell variables, the $ has to be escaped
1970 via an extra $. For example:
1975 via an extra $. For example:
1971
1976
1972 In [7]: PATH='a python variable'
1977 In [7]: PATH='a python variable'
1973
1978
1974 In [8]: !echo $PATH
1979 In [8]: !echo $PATH
1975 a python variable
1980 a python variable
1976
1981
1977 In [9]: !echo $$PATH
1982 In [9]: !echo $$PATH
1978 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1983 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1979
1984
1980 (Magic.parse_options): escape $ so the shell doesn't evaluate
1985 (Magic.parse_options): escape $ so the shell doesn't evaluate
1981 things prematurely.
1986 things prematurely.
1982
1987
1983 * IPython/iplib.py (InteractiveShell.call_alias): added the
1988 * IPython/iplib.py (InteractiveShell.call_alias): added the
1984 ability for aliases to expand python variables via $.
1989 ability for aliases to expand python variables via $.
1985
1990
1986 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1991 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1987 system, now there's a @rehash/@rehashx pair of magics. These work
1992 system, now there's a @rehash/@rehashx pair of magics. These work
1988 like the csh rehash command, and can be invoked at any time. They
1993 like the csh rehash command, and can be invoked at any time. They
1989 build a table of aliases to everything in the user's $PATH
1994 build a table of aliases to everything in the user's $PATH
1990 (@rehash uses everything, @rehashx is slower but only adds
1995 (@rehash uses everything, @rehashx is slower but only adds
1991 executable files). With this, the pysh.py-based shell profile can
1996 executable files). With this, the pysh.py-based shell profile can
1992 now simply call rehash upon startup, and full access to all
1997 now simply call rehash upon startup, and full access to all
1993 programs in the user's path is obtained.
1998 programs in the user's path is obtained.
1994
1999
1995 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2000 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1996 functionality is now fully in place. I removed the old dynamic
2001 functionality is now fully in place. I removed the old dynamic
1997 code generation based approach, in favor of a much lighter one
2002 code generation based approach, in favor of a much lighter one
1998 based on a simple dict. The advantage is that this allows me to
2003 based on a simple dict. The advantage is that this allows me to
1999 now have thousands of aliases with negligible cost (unthinkable
2004 now have thousands of aliases with negligible cost (unthinkable
2000 with the old system).
2005 with the old system).
2001
2006
2002 2004-06-19 Fernando Perez <fperez@colorado.edu>
2007 2004-06-19 Fernando Perez <fperez@colorado.edu>
2003
2008
2004 * IPython/iplib.py (__init__): extended MagicCompleter class to
2009 * IPython/iplib.py (__init__): extended MagicCompleter class to
2005 also complete (last in priority) on user aliases.
2010 also complete (last in priority) on user aliases.
2006
2011
2007 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2012 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2008 call to eval.
2013 call to eval.
2009 (ItplNS.__init__): Added a new class which functions like Itpl,
2014 (ItplNS.__init__): Added a new class which functions like Itpl,
2010 but allows configuring the namespace for the evaluation to occur
2015 but allows configuring the namespace for the evaluation to occur
2011 in.
2016 in.
2012
2017
2013 2004-06-18 Fernando Perez <fperez@colorado.edu>
2018 2004-06-18 Fernando Perez <fperez@colorado.edu>
2014
2019
2015 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2020 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2016 better message when 'exit' or 'quit' are typed (a common newbie
2021 better message when 'exit' or 'quit' are typed (a common newbie
2017 confusion).
2022 confusion).
2018
2023
2019 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2024 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2020 check for Windows users.
2025 check for Windows users.
2021
2026
2022 * IPython/iplib.py (InteractiveShell.user_setup): removed
2027 * IPython/iplib.py (InteractiveShell.user_setup): removed
2023 disabling of colors for Windows. I'll test at runtime and issue a
2028 disabling of colors for Windows. I'll test at runtime and issue a
2024 warning if Gary's readline isn't found, as to nudge users to
2029 warning if Gary's readline isn't found, as to nudge users to
2025 download it.
2030 download it.
2026
2031
2027 2004-06-16 Fernando Perez <fperez@colorado.edu>
2032 2004-06-16 Fernando Perez <fperez@colorado.edu>
2028
2033
2029 * IPython/genutils.py (Stream.__init__): changed to print errors
2034 * IPython/genutils.py (Stream.__init__): changed to print errors
2030 to sys.stderr. I had a circular dependency here. Now it's
2035 to sys.stderr. I had a circular dependency here. Now it's
2031 possible to run ipython as IDLE's shell (consider this pre-alpha,
2036 possible to run ipython as IDLE's shell (consider this pre-alpha,
2032 since true stdout things end up in the starting terminal instead
2037 since true stdout things end up in the starting terminal instead
2033 of IDLE's out).
2038 of IDLE's out).
2034
2039
2035 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2040 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2036 users who haven't # updated their prompt_in2 definitions. Remove
2041 users who haven't # updated their prompt_in2 definitions. Remove
2037 eventually.
2042 eventually.
2038 (multiple_replace): added credit to original ASPN recipe.
2043 (multiple_replace): added credit to original ASPN recipe.
2039
2044
2040 2004-06-15 Fernando Perez <fperez@colorado.edu>
2045 2004-06-15 Fernando Perez <fperez@colorado.edu>
2041
2046
2042 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2047 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2043 list of auto-defined aliases.
2048 list of auto-defined aliases.
2044
2049
2045 2004-06-13 Fernando Perez <fperez@colorado.edu>
2050 2004-06-13 Fernando Perez <fperez@colorado.edu>
2046
2051
2047 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2052 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2048 install was really requested (so setup.py can be used for other
2053 install was really requested (so setup.py can be used for other
2049 things under Windows).
2054 things under Windows).
2050
2055
2051 2004-06-10 Fernando Perez <fperez@colorado.edu>
2056 2004-06-10 Fernando Perez <fperez@colorado.edu>
2052
2057
2053 * IPython/Logger.py (Logger.create_log): Manually remove any old
2058 * IPython/Logger.py (Logger.create_log): Manually remove any old
2054 backup, since os.remove may fail under Windows. Fixes bug
2059 backup, since os.remove may fail under Windows. Fixes bug
2055 reported by Thorsten.
2060 reported by Thorsten.
2056
2061
2057 2004-06-09 Fernando Perez <fperez@colorado.edu>
2062 2004-06-09 Fernando Perez <fperez@colorado.edu>
2058
2063
2059 * examples/example-embed.py: fixed all references to %n (replaced
2064 * examples/example-embed.py: fixed all references to %n (replaced
2060 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2065 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2061 for all examples and the manual as well.
2066 for all examples and the manual as well.
2062
2067
2063 2004-06-08 Fernando Perez <fperez@colorado.edu>
2068 2004-06-08 Fernando Perez <fperez@colorado.edu>
2064
2069
2065 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2070 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2066 alignment and color management. All 3 prompt subsystems now
2071 alignment and color management. All 3 prompt subsystems now
2067 inherit from BasePrompt.
2072 inherit from BasePrompt.
2068
2073
2069 * tools/release: updates for windows installer build and tag rpms
2074 * tools/release: updates for windows installer build and tag rpms
2070 with python version (since paths are fixed).
2075 with python version (since paths are fixed).
2071
2076
2072 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2077 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2073 which will become eventually obsolete. Also fixed the default
2078 which will become eventually obsolete. Also fixed the default
2074 prompt_in2 to use \D, so at least new users start with the correct
2079 prompt_in2 to use \D, so at least new users start with the correct
2075 defaults.
2080 defaults.
2076 WARNING: Users with existing ipythonrc files will need to apply
2081 WARNING: Users with existing ipythonrc files will need to apply
2077 this fix manually!
2082 this fix manually!
2078
2083
2079 * setup.py: make windows installer (.exe). This is finally the
2084 * setup.py: make windows installer (.exe). This is finally the
2080 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2085 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2081 which I hadn't included because it required Python 2.3 (or recent
2086 which I hadn't included because it required Python 2.3 (or recent
2082 distutils).
2087 distutils).
2083
2088
2084 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2089 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2085 usage of new '\D' escape.
2090 usage of new '\D' escape.
2086
2091
2087 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2092 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2088 lacks os.getuid())
2093 lacks os.getuid())
2089 (CachedOutput.set_colors): Added the ability to turn coloring
2094 (CachedOutput.set_colors): Added the ability to turn coloring
2090 on/off with @colors even for manually defined prompt colors. It
2095 on/off with @colors even for manually defined prompt colors. It
2091 uses a nasty global, but it works safely and via the generic color
2096 uses a nasty global, but it works safely and via the generic color
2092 handling mechanism.
2097 handling mechanism.
2093 (Prompt2.__init__): Introduced new escape '\D' for continuation
2098 (Prompt2.__init__): Introduced new escape '\D' for continuation
2094 prompts. It represents the counter ('\#') as dots.
2099 prompts. It represents the counter ('\#') as dots.
2095 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2100 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2096 need to update their ipythonrc files and replace '%n' with '\D' in
2101 need to update their ipythonrc files and replace '%n' with '\D' in
2097 their prompt_in2 settings everywhere. Sorry, but there's
2102 their prompt_in2 settings everywhere. Sorry, but there's
2098 otherwise no clean way to get all prompts to properly align. The
2103 otherwise no clean way to get all prompts to properly align. The
2099 ipythonrc shipped with IPython has been updated.
2104 ipythonrc shipped with IPython has been updated.
2100
2105
2101 2004-06-07 Fernando Perez <fperez@colorado.edu>
2106 2004-06-07 Fernando Perez <fperez@colorado.edu>
2102
2107
2103 * setup.py (isfile): Pass local_icons option to latex2html, so the
2108 * setup.py (isfile): Pass local_icons option to latex2html, so the
2104 resulting HTML file is self-contained. Thanks to
2109 resulting HTML file is self-contained. Thanks to
2105 dryice-AT-liu.com.cn for the tip.
2110 dryice-AT-liu.com.cn for the tip.
2106
2111
2107 * pysh.py: I created a new profile 'shell', which implements a
2112 * pysh.py: I created a new profile 'shell', which implements a
2108 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2113 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2109 system shell, nor will it become one anytime soon. It's mainly
2114 system shell, nor will it become one anytime soon. It's mainly
2110 meant to illustrate the use of the new flexible bash-like prompts.
2115 meant to illustrate the use of the new flexible bash-like prompts.
2111 I guess it could be used by hardy souls for true shell management,
2116 I guess it could be used by hardy souls for true shell management,
2112 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2117 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2113 profile. This uses the InterpreterExec extension provided by
2118 profile. This uses the InterpreterExec extension provided by
2114 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2119 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2115
2120
2116 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2121 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2117 auto-align itself with the length of the previous input prompt
2122 auto-align itself with the length of the previous input prompt
2118 (taking into account the invisible color escapes).
2123 (taking into account the invisible color escapes).
2119 (CachedOutput.__init__): Large restructuring of this class. Now
2124 (CachedOutput.__init__): Large restructuring of this class. Now
2120 all three prompts (primary1, primary2, output) are proper objects,
2125 all three prompts (primary1, primary2, output) are proper objects,
2121 managed by the 'parent' CachedOutput class. The code is still a
2126 managed by the 'parent' CachedOutput class. The code is still a
2122 bit hackish (all prompts share state via a pointer to the cache),
2127 bit hackish (all prompts share state via a pointer to the cache),
2123 but it's overall far cleaner than before.
2128 but it's overall far cleaner than before.
2124
2129
2125 * IPython/genutils.py (getoutputerror): modified to add verbose,
2130 * IPython/genutils.py (getoutputerror): modified to add verbose,
2126 debug and header options. This makes the interface of all getout*
2131 debug and header options. This makes the interface of all getout*
2127 functions uniform.
2132 functions uniform.
2128 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2133 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2129
2134
2130 * IPython/Magic.py (Magic.default_option): added a function to
2135 * IPython/Magic.py (Magic.default_option): added a function to
2131 allow registering default options for any magic command. This
2136 allow registering default options for any magic command. This
2132 makes it easy to have profiles which customize the magics globally
2137 makes it easy to have profiles which customize the magics globally
2133 for a certain use. The values set through this function are
2138 for a certain use. The values set through this function are
2134 picked up by the parse_options() method, which all magics should
2139 picked up by the parse_options() method, which all magics should
2135 use to parse their options.
2140 use to parse their options.
2136
2141
2137 * IPython/genutils.py (warn): modified the warnings framework to
2142 * IPython/genutils.py (warn): modified the warnings framework to
2138 use the Term I/O class. I'm trying to slowly unify all of
2143 use the Term I/O class. I'm trying to slowly unify all of
2139 IPython's I/O operations to pass through Term.
2144 IPython's I/O operations to pass through Term.
2140
2145
2141 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2146 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2142 the secondary prompt to correctly match the length of the primary
2147 the secondary prompt to correctly match the length of the primary
2143 one for any prompt. Now multi-line code will properly line up
2148 one for any prompt. Now multi-line code will properly line up
2144 even for path dependent prompts, such as the new ones available
2149 even for path dependent prompts, such as the new ones available
2145 via the prompt_specials.
2150 via the prompt_specials.
2146
2151
2147 2004-06-06 Fernando Perez <fperez@colorado.edu>
2152 2004-06-06 Fernando Perez <fperez@colorado.edu>
2148
2153
2149 * IPython/Prompts.py (prompt_specials): Added the ability to have
2154 * IPython/Prompts.py (prompt_specials): Added the ability to have
2150 bash-like special sequences in the prompts, which get
2155 bash-like special sequences in the prompts, which get
2151 automatically expanded. Things like hostname, current working
2156 automatically expanded. Things like hostname, current working
2152 directory and username are implemented already, but it's easy to
2157 directory and username are implemented already, but it's easy to
2153 add more in the future. Thanks to a patch by W.J. van der Laan
2158 add more in the future. Thanks to a patch by W.J. van der Laan
2154 <gnufnork-AT-hetdigitalegat.nl>
2159 <gnufnork-AT-hetdigitalegat.nl>
2155 (prompt_specials): Added color support for prompt strings, so
2160 (prompt_specials): Added color support for prompt strings, so
2156 users can define arbitrary color setups for their prompts.
2161 users can define arbitrary color setups for their prompts.
2157
2162
2158 2004-06-05 Fernando Perez <fperez@colorado.edu>
2163 2004-06-05 Fernando Perez <fperez@colorado.edu>
2159
2164
2160 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2165 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2161 code to load Gary Bishop's readline and configure it
2166 code to load Gary Bishop's readline and configure it
2162 automatically. Thanks to Gary for help on this.
2167 automatically. Thanks to Gary for help on this.
2163
2168
2164 2004-06-01 Fernando Perez <fperez@colorado.edu>
2169 2004-06-01 Fernando Perez <fperez@colorado.edu>
2165
2170
2166 * IPython/Logger.py (Logger.create_log): fix bug for logging
2171 * IPython/Logger.py (Logger.create_log): fix bug for logging
2167 with no filename (previous fix was incomplete).
2172 with no filename (previous fix was incomplete).
2168
2173
2169 2004-05-25 Fernando Perez <fperez@colorado.edu>
2174 2004-05-25 Fernando Perez <fperez@colorado.edu>
2170
2175
2171 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2176 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2172 parens would get passed to the shell.
2177 parens would get passed to the shell.
2173
2178
2174 2004-05-20 Fernando Perez <fperez@colorado.edu>
2179 2004-05-20 Fernando Perez <fperez@colorado.edu>
2175
2180
2176 * IPython/Magic.py (Magic.magic_prun): changed default profile
2181 * IPython/Magic.py (Magic.magic_prun): changed default profile
2177 sort order to 'time' (the more common profiling need).
2182 sort order to 'time' (the more common profiling need).
2178
2183
2179 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2184 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2180 so that source code shown is guaranteed in sync with the file on
2185 so that source code shown is guaranteed in sync with the file on
2181 disk (also changed in psource). Similar fix to the one for
2186 disk (also changed in psource). Similar fix to the one for
2182 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2187 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2183 <yann.ledu-AT-noos.fr>.
2188 <yann.ledu-AT-noos.fr>.
2184
2189
2185 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2190 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2186 with a single option would not be correctly parsed. Closes
2191 with a single option would not be correctly parsed. Closes
2187 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2192 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2188 introduced in 0.6.0 (on 2004-05-06).
2193 introduced in 0.6.0 (on 2004-05-06).
2189
2194
2190 2004-05-13 *** Released version 0.6.0
2195 2004-05-13 *** Released version 0.6.0
2191
2196
2192 2004-05-13 Fernando Perez <fperez@colorado.edu>
2197 2004-05-13 Fernando Perez <fperez@colorado.edu>
2193
2198
2194 * debian/: Added debian/ directory to CVS, so that debian support
2199 * debian/: Added debian/ directory to CVS, so that debian support
2195 is publicly accessible. The debian package is maintained by Jack
2200 is publicly accessible. The debian package is maintained by Jack
2196 Moffit <jack-AT-xiph.org>.
2201 Moffit <jack-AT-xiph.org>.
2197
2202
2198 * Documentation: included the notes about an ipython-based system
2203 * Documentation: included the notes about an ipython-based system
2199 shell (the hypothetical 'pysh') into the new_design.pdf document,
2204 shell (the hypothetical 'pysh') into the new_design.pdf document,
2200 so that these ideas get distributed to users along with the
2205 so that these ideas get distributed to users along with the
2201 official documentation.
2206 official documentation.
2202
2207
2203 2004-05-10 Fernando Perez <fperez@colorado.edu>
2208 2004-05-10 Fernando Perez <fperez@colorado.edu>
2204
2209
2205 * IPython/Logger.py (Logger.create_log): fix recently introduced
2210 * IPython/Logger.py (Logger.create_log): fix recently introduced
2206 bug (misindented line) where logstart would fail when not given an
2211 bug (misindented line) where logstart would fail when not given an
2207 explicit filename.
2212 explicit filename.
2208
2213
2209 2004-05-09 Fernando Perez <fperez@colorado.edu>
2214 2004-05-09 Fernando Perez <fperez@colorado.edu>
2210
2215
2211 * IPython/Magic.py (Magic.parse_options): skip system call when
2216 * IPython/Magic.py (Magic.parse_options): skip system call when
2212 there are no options to look for. Faster, cleaner for the common
2217 there are no options to look for. Faster, cleaner for the common
2213 case.
2218 case.
2214
2219
2215 * Documentation: many updates to the manual: describing Windows
2220 * Documentation: many updates to the manual: describing Windows
2216 support better, Gnuplot updates, credits, misc small stuff. Also
2221 support better, Gnuplot updates, credits, misc small stuff. Also
2217 updated the new_design doc a bit.
2222 updated the new_design doc a bit.
2218
2223
2219 2004-05-06 *** Released version 0.6.0.rc1
2224 2004-05-06 *** Released version 0.6.0.rc1
2220
2225
2221 2004-05-06 Fernando Perez <fperez@colorado.edu>
2226 2004-05-06 Fernando Perez <fperez@colorado.edu>
2222
2227
2223 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2228 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2224 operations to use the vastly more efficient list/''.join() method.
2229 operations to use the vastly more efficient list/''.join() method.
2225 (FormattedTB.text): Fix
2230 (FormattedTB.text): Fix
2226 http://www.scipy.net/roundup/ipython/issue12 - exception source
2231 http://www.scipy.net/roundup/ipython/issue12 - exception source
2227 extract not updated after reload. Thanks to Mike Salib
2232 extract not updated after reload. Thanks to Mike Salib
2228 <msalib-AT-mit.edu> for pinning the source of the problem.
2233 <msalib-AT-mit.edu> for pinning the source of the problem.
2229 Fortunately, the solution works inside ipython and doesn't require
2234 Fortunately, the solution works inside ipython and doesn't require
2230 any changes to python proper.
2235 any changes to python proper.
2231
2236
2232 * IPython/Magic.py (Magic.parse_options): Improved to process the
2237 * IPython/Magic.py (Magic.parse_options): Improved to process the
2233 argument list as a true shell would (by actually using the
2238 argument list as a true shell would (by actually using the
2234 underlying system shell). This way, all @magics automatically get
2239 underlying system shell). This way, all @magics automatically get
2235 shell expansion for variables. Thanks to a comment by Alex
2240 shell expansion for variables. Thanks to a comment by Alex
2236 Schmolck.
2241 Schmolck.
2237
2242
2238 2004-04-04 Fernando Perez <fperez@colorado.edu>
2243 2004-04-04 Fernando Perez <fperez@colorado.edu>
2239
2244
2240 * IPython/iplib.py (InteractiveShell.interact): Added a special
2245 * IPython/iplib.py (InteractiveShell.interact): Added a special
2241 trap for a debugger quit exception, which is basically impossible
2246 trap for a debugger quit exception, which is basically impossible
2242 to handle by normal mechanisms, given what pdb does to the stack.
2247 to handle by normal mechanisms, given what pdb does to the stack.
2243 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2248 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2244
2249
2245 2004-04-03 Fernando Perez <fperez@colorado.edu>
2250 2004-04-03 Fernando Perez <fperez@colorado.edu>
2246
2251
2247 * IPython/genutils.py (Term): Standardized the names of the Term
2252 * IPython/genutils.py (Term): Standardized the names of the Term
2248 class streams to cin/cout/cerr, following C++ naming conventions
2253 class streams to cin/cout/cerr, following C++ naming conventions
2249 (I can't use in/out/err because 'in' is not a valid attribute
2254 (I can't use in/out/err because 'in' is not a valid attribute
2250 name).
2255 name).
2251
2256
2252 * IPython/iplib.py (InteractiveShell.interact): don't increment
2257 * IPython/iplib.py (InteractiveShell.interact): don't increment
2253 the prompt if there's no user input. By Daniel 'Dang' Griffith
2258 the prompt if there's no user input. By Daniel 'Dang' Griffith
2254 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2259 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2255 Francois Pinard.
2260 Francois Pinard.
2256
2261
2257 2004-04-02 Fernando Perez <fperez@colorado.edu>
2262 2004-04-02 Fernando Perez <fperez@colorado.edu>
2258
2263
2259 * IPython/genutils.py (Stream.__init__): Modified to survive at
2264 * IPython/genutils.py (Stream.__init__): Modified to survive at
2260 least importing in contexts where stdin/out/err aren't true file
2265 least importing in contexts where stdin/out/err aren't true file
2261 objects, such as PyCrust (they lack fileno() and mode). However,
2266 objects, such as PyCrust (they lack fileno() and mode). However,
2262 the recovery facilities which rely on these things existing will
2267 the recovery facilities which rely on these things existing will
2263 not work.
2268 not work.
2264
2269
2265 2004-04-01 Fernando Perez <fperez@colorado.edu>
2270 2004-04-01 Fernando Perez <fperez@colorado.edu>
2266
2271
2267 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2272 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2268 use the new getoutputerror() function, so it properly
2273 use the new getoutputerror() function, so it properly
2269 distinguishes stdout/err.
2274 distinguishes stdout/err.
2270
2275
2271 * IPython/genutils.py (getoutputerror): added a function to
2276 * IPython/genutils.py (getoutputerror): added a function to
2272 capture separately the standard output and error of a command.
2277 capture separately the standard output and error of a command.
2273 After a comment from dang on the mailing lists. This code is
2278 After a comment from dang on the mailing lists. This code is
2274 basically a modified version of commands.getstatusoutput(), from
2279 basically a modified version of commands.getstatusoutput(), from
2275 the standard library.
2280 the standard library.
2276
2281
2277 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2282 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2278 '!!' as a special syntax (shorthand) to access @sx.
2283 '!!' as a special syntax (shorthand) to access @sx.
2279
2284
2280 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2285 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2281 command and return its output as a list split on '\n'.
2286 command and return its output as a list split on '\n'.
2282
2287
2283 2004-03-31 Fernando Perez <fperez@colorado.edu>
2288 2004-03-31 Fernando Perez <fperez@colorado.edu>
2284
2289
2285 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2290 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2286 method to dictionaries used as FakeModule instances if they lack
2291 method to dictionaries used as FakeModule instances if they lack
2287 it. At least pydoc in python2.3 breaks for runtime-defined
2292 it. At least pydoc in python2.3 breaks for runtime-defined
2288 functions without this hack. At some point I need to _really_
2293 functions without this hack. At some point I need to _really_
2289 understand what FakeModule is doing, because it's a gross hack.
2294 understand what FakeModule is doing, because it's a gross hack.
2290 But it solves Arnd's problem for now...
2295 But it solves Arnd's problem for now...
2291
2296
2292 2004-02-27 Fernando Perez <fperez@colorado.edu>
2297 2004-02-27 Fernando Perez <fperez@colorado.edu>
2293
2298
2294 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2299 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2295 mode would behave erratically. Also increased the number of
2300 mode would behave erratically. Also increased the number of
2296 possible logs in rotate mod to 999. Thanks to Rod Holland
2301 possible logs in rotate mod to 999. Thanks to Rod Holland
2297 <rhh@StructureLABS.com> for the report and fixes.
2302 <rhh@StructureLABS.com> for the report and fixes.
2298
2303
2299 2004-02-26 Fernando Perez <fperez@colorado.edu>
2304 2004-02-26 Fernando Perez <fperez@colorado.edu>
2300
2305
2301 * IPython/genutils.py (page): Check that the curses module really
2306 * IPython/genutils.py (page): Check that the curses module really
2302 has the initscr attribute before trying to use it. For some
2307 has the initscr attribute before trying to use it. For some
2303 reason, the Solaris curses module is missing this. I think this
2308 reason, the Solaris curses module is missing this. I think this
2304 should be considered a Solaris python bug, but I'm not sure.
2309 should be considered a Solaris python bug, but I'm not sure.
2305
2310
2306 2004-01-17 Fernando Perez <fperez@colorado.edu>
2311 2004-01-17 Fernando Perez <fperez@colorado.edu>
2307
2312
2308 * IPython/genutils.py (Stream.__init__): Changes to try to make
2313 * IPython/genutils.py (Stream.__init__): Changes to try to make
2309 ipython robust against stdin/out/err being closed by the user.
2314 ipython robust against stdin/out/err being closed by the user.
2310 This is 'user error' (and blocks a normal python session, at least
2315 This is 'user error' (and blocks a normal python session, at least
2311 the stdout case). However, Ipython should be able to survive such
2316 the stdout case). However, Ipython should be able to survive such
2312 instances of abuse as gracefully as possible. To simplify the
2317 instances of abuse as gracefully as possible. To simplify the
2313 coding and maintain compatibility with Gary Bishop's Term
2318 coding and maintain compatibility with Gary Bishop's Term
2314 contributions, I've made use of classmethods for this. I think
2319 contributions, I've made use of classmethods for this. I think
2315 this introduces a dependency on python 2.2.
2320 this introduces a dependency on python 2.2.
2316
2321
2317 2004-01-13 Fernando Perez <fperez@colorado.edu>
2322 2004-01-13 Fernando Perez <fperez@colorado.edu>
2318
2323
2319 * IPython/numutils.py (exp_safe): simplified the code a bit and
2324 * IPython/numutils.py (exp_safe): simplified the code a bit and
2320 removed the need for importing the kinds module altogether.
2325 removed the need for importing the kinds module altogether.
2321
2326
2322 2004-01-06 Fernando Perez <fperez@colorado.edu>
2327 2004-01-06 Fernando Perez <fperez@colorado.edu>
2323
2328
2324 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2329 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2325 a magic function instead, after some community feedback. No
2330 a magic function instead, after some community feedback. No
2326 special syntax will exist for it, but its name is deliberately
2331 special syntax will exist for it, but its name is deliberately
2327 very short.
2332 very short.
2328
2333
2329 2003-12-20 Fernando Perez <fperez@colorado.edu>
2334 2003-12-20 Fernando Perez <fperez@colorado.edu>
2330
2335
2331 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2336 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2332 new functionality, to automagically assign the result of a shell
2337 new functionality, to automagically assign the result of a shell
2333 command to a variable. I'll solicit some community feedback on
2338 command to a variable. I'll solicit some community feedback on
2334 this before making it permanent.
2339 this before making it permanent.
2335
2340
2336 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2341 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2337 requested about callables for which inspect couldn't obtain a
2342 requested about callables for which inspect couldn't obtain a
2338 proper argspec. Thanks to a crash report sent by Etienne
2343 proper argspec. Thanks to a crash report sent by Etienne
2339 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2344 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2340
2345
2341 2003-12-09 Fernando Perez <fperez@colorado.edu>
2346 2003-12-09 Fernando Perez <fperez@colorado.edu>
2342
2347
2343 * IPython/genutils.py (page): patch for the pager to work across
2348 * IPython/genutils.py (page): patch for the pager to work across
2344 various versions of Windows. By Gary Bishop.
2349 various versions of Windows. By Gary Bishop.
2345
2350
2346 2003-12-04 Fernando Perez <fperez@colorado.edu>
2351 2003-12-04 Fernando Perez <fperez@colorado.edu>
2347
2352
2348 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2353 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2349 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2354 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2350 While I tested this and it looks ok, there may still be corner
2355 While I tested this and it looks ok, there may still be corner
2351 cases I've missed.
2356 cases I've missed.
2352
2357
2353 2003-12-01 Fernando Perez <fperez@colorado.edu>
2358 2003-12-01 Fernando Perez <fperez@colorado.edu>
2354
2359
2355 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2360 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2356 where a line like 'p,q=1,2' would fail because the automagic
2361 where a line like 'p,q=1,2' would fail because the automagic
2357 system would be triggered for @p.
2362 system would be triggered for @p.
2358
2363
2359 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2364 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2360 cleanups, code unmodified.
2365 cleanups, code unmodified.
2361
2366
2362 * IPython/genutils.py (Term): added a class for IPython to handle
2367 * IPython/genutils.py (Term): added a class for IPython to handle
2363 output. In most cases it will just be a proxy for stdout/err, but
2368 output. In most cases it will just be a proxy for stdout/err, but
2364 having this allows modifications to be made for some platforms,
2369 having this allows modifications to be made for some platforms,
2365 such as handling color escapes under Windows. All of this code
2370 such as handling color escapes under Windows. All of this code
2366 was contributed by Gary Bishop, with minor modifications by me.
2371 was contributed by Gary Bishop, with minor modifications by me.
2367 The actual changes affect many files.
2372 The actual changes affect many files.
2368
2373
2369 2003-11-30 Fernando Perez <fperez@colorado.edu>
2374 2003-11-30 Fernando Perez <fperez@colorado.edu>
2370
2375
2371 * IPython/iplib.py (file_matches): new completion code, courtesy
2376 * IPython/iplib.py (file_matches): new completion code, courtesy
2372 of Jeff Collins. This enables filename completion again under
2377 of Jeff Collins. This enables filename completion again under
2373 python 2.3, which disabled it at the C level.
2378 python 2.3, which disabled it at the C level.
2374
2379
2375 2003-11-11 Fernando Perez <fperez@colorado.edu>
2380 2003-11-11 Fernando Perez <fperez@colorado.edu>
2376
2381
2377 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2382 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2378 for Numeric.array(map(...)), but often convenient.
2383 for Numeric.array(map(...)), but often convenient.
2379
2384
2380 2003-11-05 Fernando Perez <fperez@colorado.edu>
2385 2003-11-05 Fernando Perez <fperez@colorado.edu>
2381
2386
2382 * IPython/numutils.py (frange): Changed a call from int() to
2387 * IPython/numutils.py (frange): Changed a call from int() to
2383 int(round()) to prevent a problem reported with arange() in the
2388 int(round()) to prevent a problem reported with arange() in the
2384 numpy list.
2389 numpy list.
2385
2390
2386 2003-10-06 Fernando Perez <fperez@colorado.edu>
2391 2003-10-06 Fernando Perez <fperez@colorado.edu>
2387
2392
2388 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2393 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2389 prevent crashes if sys lacks an argv attribute (it happens with
2394 prevent crashes if sys lacks an argv attribute (it happens with
2390 embedded interpreters which build a bare-bones sys module).
2395 embedded interpreters which build a bare-bones sys module).
2391 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2396 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2392
2397
2393 2003-09-24 Fernando Perez <fperez@colorado.edu>
2398 2003-09-24 Fernando Perez <fperez@colorado.edu>
2394
2399
2395 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2400 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2396 to protect against poorly written user objects where __getattr__
2401 to protect against poorly written user objects where __getattr__
2397 raises exceptions other than AttributeError. Thanks to a bug
2402 raises exceptions other than AttributeError. Thanks to a bug
2398 report by Oliver Sander <osander-AT-gmx.de>.
2403 report by Oliver Sander <osander-AT-gmx.de>.
2399
2404
2400 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2405 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2401 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2406 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2402
2407
2403 2003-09-09 Fernando Perez <fperez@colorado.edu>
2408 2003-09-09 Fernando Perez <fperez@colorado.edu>
2404
2409
2405 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2410 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2406 unpacking a list whith a callable as first element would
2411 unpacking a list whith a callable as first element would
2407 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2412 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2408 Collins.
2413 Collins.
2409
2414
2410 2003-08-25 *** Released version 0.5.0
2415 2003-08-25 *** Released version 0.5.0
2411
2416
2412 2003-08-22 Fernando Perez <fperez@colorado.edu>
2417 2003-08-22 Fernando Perez <fperez@colorado.edu>
2413
2418
2414 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2419 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2415 improperly defined user exceptions. Thanks to feedback from Mark
2420 improperly defined user exceptions. Thanks to feedback from Mark
2416 Russell <mrussell-AT-verio.net>.
2421 Russell <mrussell-AT-verio.net>.
2417
2422
2418 2003-08-20 Fernando Perez <fperez@colorado.edu>
2423 2003-08-20 Fernando Perez <fperez@colorado.edu>
2419
2424
2420 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2425 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2421 printing so that it would print multi-line string forms starting
2426 printing so that it would print multi-line string forms starting
2422 with a new line. This way the formatting is better respected for
2427 with a new line. This way the formatting is better respected for
2423 objects which work hard to make nice string forms.
2428 objects which work hard to make nice string forms.
2424
2429
2425 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2430 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2426 autocall would overtake data access for objects with both
2431 autocall would overtake data access for objects with both
2427 __getitem__ and __call__.
2432 __getitem__ and __call__.
2428
2433
2429 2003-08-19 *** Released version 0.5.0-rc1
2434 2003-08-19 *** Released version 0.5.0-rc1
2430
2435
2431 2003-08-19 Fernando Perez <fperez@colorado.edu>
2436 2003-08-19 Fernando Perez <fperez@colorado.edu>
2432
2437
2433 * IPython/deep_reload.py (load_tail): single tiny change here
2438 * IPython/deep_reload.py (load_tail): single tiny change here
2434 seems to fix the long-standing bug of dreload() failing to work
2439 seems to fix the long-standing bug of dreload() failing to work
2435 for dotted names. But this module is pretty tricky, so I may have
2440 for dotted names. But this module is pretty tricky, so I may have
2436 missed some subtlety. Needs more testing!.
2441 missed some subtlety. Needs more testing!.
2437
2442
2438 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2443 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2439 exceptions which have badly implemented __str__ methods.
2444 exceptions which have badly implemented __str__ methods.
2440 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2445 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2441 which I've been getting reports about from Python 2.3 users. I
2446 which I've been getting reports about from Python 2.3 users. I
2442 wish I had a simple test case to reproduce the problem, so I could
2447 wish I had a simple test case to reproduce the problem, so I could
2443 either write a cleaner workaround or file a bug report if
2448 either write a cleaner workaround or file a bug report if
2444 necessary.
2449 necessary.
2445
2450
2446 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2451 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2447 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2452 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2448 a bug report by Tjabo Kloppenburg.
2453 a bug report by Tjabo Kloppenburg.
2449
2454
2450 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2455 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2451 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2456 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2452 seems rather unstable. Thanks to a bug report by Tjabo
2457 seems rather unstable. Thanks to a bug report by Tjabo
2453 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2458 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2454
2459
2455 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2460 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2456 this out soon because of the critical fixes in the inner loop for
2461 this out soon because of the critical fixes in the inner loop for
2457 generators.
2462 generators.
2458
2463
2459 * IPython/Magic.py (Magic.getargspec): removed. This (and
2464 * IPython/Magic.py (Magic.getargspec): removed. This (and
2460 _get_def) have been obsoleted by OInspect for a long time, I
2465 _get_def) have been obsoleted by OInspect for a long time, I
2461 hadn't noticed that they were dead code.
2466 hadn't noticed that they were dead code.
2462 (Magic._ofind): restored _ofind functionality for a few literals
2467 (Magic._ofind): restored _ofind functionality for a few literals
2463 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2468 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2464 for things like "hello".capitalize?, since that would require a
2469 for things like "hello".capitalize?, since that would require a
2465 potentially dangerous eval() again.
2470 potentially dangerous eval() again.
2466
2471
2467 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2472 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2468 logic a bit more to clean up the escapes handling and minimize the
2473 logic a bit more to clean up the escapes handling and minimize the
2469 use of _ofind to only necessary cases. The interactive 'feel' of
2474 use of _ofind to only necessary cases. The interactive 'feel' of
2470 IPython should have improved quite a bit with the changes in
2475 IPython should have improved quite a bit with the changes in
2471 _prefilter and _ofind (besides being far safer than before).
2476 _prefilter and _ofind (besides being far safer than before).
2472
2477
2473 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2478 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2474 obscure, never reported). Edit would fail to find the object to
2479 obscure, never reported). Edit would fail to find the object to
2475 edit under some circumstances.
2480 edit under some circumstances.
2476 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2481 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2477 which were causing double-calling of generators. Those eval calls
2482 which were causing double-calling of generators. Those eval calls
2478 were _very_ dangerous, since code with side effects could be
2483 were _very_ dangerous, since code with side effects could be
2479 triggered. As they say, 'eval is evil'... These were the
2484 triggered. As they say, 'eval is evil'... These were the
2480 nastiest evals in IPython. Besides, _ofind is now far simpler,
2485 nastiest evals in IPython. Besides, _ofind is now far simpler,
2481 and it should also be quite a bit faster. Its use of inspect is
2486 and it should also be quite a bit faster. Its use of inspect is
2482 also safer, so perhaps some of the inspect-related crashes I've
2487 also safer, so perhaps some of the inspect-related crashes I've
2483 seen lately with Python 2.3 might be taken care of. That will
2488 seen lately with Python 2.3 might be taken care of. That will
2484 need more testing.
2489 need more testing.
2485
2490
2486 2003-08-17 Fernando Perez <fperez@colorado.edu>
2491 2003-08-17 Fernando Perez <fperez@colorado.edu>
2487
2492
2488 * IPython/iplib.py (InteractiveShell._prefilter): significant
2493 * IPython/iplib.py (InteractiveShell._prefilter): significant
2489 simplifications to the logic for handling user escapes. Faster
2494 simplifications to the logic for handling user escapes. Faster
2490 and simpler code.
2495 and simpler code.
2491
2496
2492 2003-08-14 Fernando Perez <fperez@colorado.edu>
2497 2003-08-14 Fernando Perez <fperez@colorado.edu>
2493
2498
2494 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2499 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2495 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2500 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2496 but it should be quite a bit faster. And the recursive version
2501 but it should be quite a bit faster. And the recursive version
2497 generated O(log N) intermediate storage for all rank>1 arrays,
2502 generated O(log N) intermediate storage for all rank>1 arrays,
2498 even if they were contiguous.
2503 even if they were contiguous.
2499 (l1norm): Added this function.
2504 (l1norm): Added this function.
2500 (norm): Added this function for arbitrary norms (including
2505 (norm): Added this function for arbitrary norms (including
2501 l-infinity). l1 and l2 are still special cases for convenience
2506 l-infinity). l1 and l2 are still special cases for convenience
2502 and speed.
2507 and speed.
2503
2508
2504 2003-08-03 Fernando Perez <fperez@colorado.edu>
2509 2003-08-03 Fernando Perez <fperez@colorado.edu>
2505
2510
2506 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2511 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2507 exceptions, which now raise PendingDeprecationWarnings in Python
2512 exceptions, which now raise PendingDeprecationWarnings in Python
2508 2.3. There were some in Magic and some in Gnuplot2.
2513 2.3. There were some in Magic and some in Gnuplot2.
2509
2514
2510 2003-06-30 Fernando Perez <fperez@colorado.edu>
2515 2003-06-30 Fernando Perez <fperez@colorado.edu>
2511
2516
2512 * IPython/genutils.py (page): modified to call curses only for
2517 * IPython/genutils.py (page): modified to call curses only for
2513 terminals where TERM=='xterm'. After problems under many other
2518 terminals where TERM=='xterm'. After problems under many other
2514 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2519 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2515
2520
2516 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2521 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2517 would be triggered when readline was absent. This was just an old
2522 would be triggered when readline was absent. This was just an old
2518 debugging statement I'd forgotten to take out.
2523 debugging statement I'd forgotten to take out.
2519
2524
2520 2003-06-20 Fernando Perez <fperez@colorado.edu>
2525 2003-06-20 Fernando Perez <fperez@colorado.edu>
2521
2526
2522 * IPython/genutils.py (clock): modified to return only user time
2527 * IPython/genutils.py (clock): modified to return only user time
2523 (not counting system time), after a discussion on scipy. While
2528 (not counting system time), after a discussion on scipy. While
2524 system time may be a useful quantity occasionally, it may much
2529 system time may be a useful quantity occasionally, it may much
2525 more easily be skewed by occasional swapping or other similar
2530 more easily be skewed by occasional swapping or other similar
2526 activity.
2531 activity.
2527
2532
2528 2003-06-05 Fernando Perez <fperez@colorado.edu>
2533 2003-06-05 Fernando Perez <fperez@colorado.edu>
2529
2534
2530 * IPython/numutils.py (identity): new function, for building
2535 * IPython/numutils.py (identity): new function, for building
2531 arbitrary rank Kronecker deltas (mostly backwards compatible with
2536 arbitrary rank Kronecker deltas (mostly backwards compatible with
2532 Numeric.identity)
2537 Numeric.identity)
2533
2538
2534 2003-06-03 Fernando Perez <fperez@colorado.edu>
2539 2003-06-03 Fernando Perez <fperez@colorado.edu>
2535
2540
2536 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2541 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2537 arguments passed to magics with spaces, to allow trailing '\' to
2542 arguments passed to magics with spaces, to allow trailing '\' to
2538 work normally (mainly for Windows users).
2543 work normally (mainly for Windows users).
2539
2544
2540 2003-05-29 Fernando Perez <fperez@colorado.edu>
2545 2003-05-29 Fernando Perez <fperez@colorado.edu>
2541
2546
2542 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2547 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2543 instead of pydoc.help. This fixes a bizarre behavior where
2548 instead of pydoc.help. This fixes a bizarre behavior where
2544 printing '%s' % locals() would trigger the help system. Now
2549 printing '%s' % locals() would trigger the help system. Now
2545 ipython behaves like normal python does.
2550 ipython behaves like normal python does.
2546
2551
2547 Note that if one does 'from pydoc import help', the bizarre
2552 Note that if one does 'from pydoc import help', the bizarre
2548 behavior returns, but this will also happen in normal python, so
2553 behavior returns, but this will also happen in normal python, so
2549 it's not an ipython bug anymore (it has to do with how pydoc.help
2554 it's not an ipython bug anymore (it has to do with how pydoc.help
2550 is implemented).
2555 is implemented).
2551
2556
2552 2003-05-22 Fernando Perez <fperez@colorado.edu>
2557 2003-05-22 Fernando Perez <fperez@colorado.edu>
2553
2558
2554 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2559 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2555 return [] instead of None when nothing matches, also match to end
2560 return [] instead of None when nothing matches, also match to end
2556 of line. Patch by Gary Bishop.
2561 of line. Patch by Gary Bishop.
2557
2562
2558 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2563 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2559 protection as before, for files passed on the command line. This
2564 protection as before, for files passed on the command line. This
2560 prevents the CrashHandler from kicking in if user files call into
2565 prevents the CrashHandler from kicking in if user files call into
2561 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2566 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2562 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2567 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2563
2568
2564 2003-05-20 *** Released version 0.4.0
2569 2003-05-20 *** Released version 0.4.0
2565
2570
2566 2003-05-20 Fernando Perez <fperez@colorado.edu>
2571 2003-05-20 Fernando Perez <fperez@colorado.edu>
2567
2572
2568 * setup.py: added support for manpages. It's a bit hackish b/c of
2573 * setup.py: added support for manpages. It's a bit hackish b/c of
2569 a bug in the way the bdist_rpm distutils target handles gzipped
2574 a bug in the way the bdist_rpm distutils target handles gzipped
2570 manpages, but it works. After a patch by Jack.
2575 manpages, but it works. After a patch by Jack.
2571
2576
2572 2003-05-19 Fernando Perez <fperez@colorado.edu>
2577 2003-05-19 Fernando Perez <fperez@colorado.edu>
2573
2578
2574 * IPython/numutils.py: added a mockup of the kinds module, since
2579 * IPython/numutils.py: added a mockup of the kinds module, since
2575 it was recently removed from Numeric. This way, numutils will
2580 it was recently removed from Numeric. This way, numutils will
2576 work for all users even if they are missing kinds.
2581 work for all users even if they are missing kinds.
2577
2582
2578 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2583 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2579 failure, which can occur with SWIG-wrapped extensions. After a
2584 failure, which can occur with SWIG-wrapped extensions. After a
2580 crash report from Prabhu.
2585 crash report from Prabhu.
2581
2586
2582 2003-05-16 Fernando Perez <fperez@colorado.edu>
2587 2003-05-16 Fernando Perez <fperez@colorado.edu>
2583
2588
2584 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2589 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2585 protect ipython from user code which may call directly
2590 protect ipython from user code which may call directly
2586 sys.excepthook (this looks like an ipython crash to the user, even
2591 sys.excepthook (this looks like an ipython crash to the user, even
2587 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2592 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2588 This is especially important to help users of WxWindows, but may
2593 This is especially important to help users of WxWindows, but may
2589 also be useful in other cases.
2594 also be useful in other cases.
2590
2595
2591 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2596 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2592 an optional tb_offset to be specified, and to preserve exception
2597 an optional tb_offset to be specified, and to preserve exception
2593 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2598 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2594
2599
2595 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2600 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2596
2601
2597 2003-05-15 Fernando Perez <fperez@colorado.edu>
2602 2003-05-15 Fernando Perez <fperez@colorado.edu>
2598
2603
2599 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2604 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2600 installing for a new user under Windows.
2605 installing for a new user under Windows.
2601
2606
2602 2003-05-12 Fernando Perez <fperez@colorado.edu>
2607 2003-05-12 Fernando Perez <fperez@colorado.edu>
2603
2608
2604 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2609 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2605 handler for Emacs comint-based lines. Currently it doesn't do
2610 handler for Emacs comint-based lines. Currently it doesn't do
2606 much (but importantly, it doesn't update the history cache). In
2611 much (but importantly, it doesn't update the history cache). In
2607 the future it may be expanded if Alex needs more functionality
2612 the future it may be expanded if Alex needs more functionality
2608 there.
2613 there.
2609
2614
2610 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2615 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2611 info to crash reports.
2616 info to crash reports.
2612
2617
2613 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2618 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2614 just like Python's -c. Also fixed crash with invalid -color
2619 just like Python's -c. Also fixed crash with invalid -color
2615 option value at startup. Thanks to Will French
2620 option value at startup. Thanks to Will French
2616 <wfrench-AT-bestweb.net> for the bug report.
2621 <wfrench-AT-bestweb.net> for the bug report.
2617
2622
2618 2003-05-09 Fernando Perez <fperez@colorado.edu>
2623 2003-05-09 Fernando Perez <fperez@colorado.edu>
2619
2624
2620 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2625 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2621 to EvalDict (it's a mapping, after all) and simplified its code
2626 to EvalDict (it's a mapping, after all) and simplified its code
2622 quite a bit, after a nice discussion on c.l.py where Gustavo
2627 quite a bit, after a nice discussion on c.l.py where Gustavo
2623 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2628 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2624
2629
2625 2003-04-30 Fernando Perez <fperez@colorado.edu>
2630 2003-04-30 Fernando Perez <fperez@colorado.edu>
2626
2631
2627 * IPython/genutils.py (timings_out): modified it to reduce its
2632 * IPython/genutils.py (timings_out): modified it to reduce its
2628 overhead in the common reps==1 case.
2633 overhead in the common reps==1 case.
2629
2634
2630 2003-04-29 Fernando Perez <fperez@colorado.edu>
2635 2003-04-29 Fernando Perez <fperez@colorado.edu>
2631
2636
2632 * IPython/genutils.py (timings_out): Modified to use the resource
2637 * IPython/genutils.py (timings_out): Modified to use the resource
2633 module, which avoids the wraparound problems of time.clock().
2638 module, which avoids the wraparound problems of time.clock().
2634
2639
2635 2003-04-17 *** Released version 0.2.15pre4
2640 2003-04-17 *** Released version 0.2.15pre4
2636
2641
2637 2003-04-17 Fernando Perez <fperez@colorado.edu>
2642 2003-04-17 Fernando Perez <fperez@colorado.edu>
2638
2643
2639 * setup.py (scriptfiles): Split windows-specific stuff over to a
2644 * setup.py (scriptfiles): Split windows-specific stuff over to a
2640 separate file, in an attempt to have a Windows GUI installer.
2645 separate file, in an attempt to have a Windows GUI installer.
2641 That didn't work, but part of the groundwork is done.
2646 That didn't work, but part of the groundwork is done.
2642
2647
2643 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2648 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2644 indent/unindent with 4 spaces. Particularly useful in combination
2649 indent/unindent with 4 spaces. Particularly useful in combination
2645 with the new auto-indent option.
2650 with the new auto-indent option.
2646
2651
2647 2003-04-16 Fernando Perez <fperez@colorado.edu>
2652 2003-04-16 Fernando Perez <fperez@colorado.edu>
2648
2653
2649 * IPython/Magic.py: various replacements of self.rc for
2654 * IPython/Magic.py: various replacements of self.rc for
2650 self.shell.rc. A lot more remains to be done to fully disentangle
2655 self.shell.rc. A lot more remains to be done to fully disentangle
2651 this class from the main Shell class.
2656 this class from the main Shell class.
2652
2657
2653 * IPython/GnuplotRuntime.py: added checks for mouse support so
2658 * IPython/GnuplotRuntime.py: added checks for mouse support so
2654 that we don't try to enable it if the current gnuplot doesn't
2659 that we don't try to enable it if the current gnuplot doesn't
2655 really support it. Also added checks so that we don't try to
2660 really support it. Also added checks so that we don't try to
2656 enable persist under Windows (where Gnuplot doesn't recognize the
2661 enable persist under Windows (where Gnuplot doesn't recognize the
2657 option).
2662 option).
2658
2663
2659 * IPython/iplib.py (InteractiveShell.interact): Added optional
2664 * IPython/iplib.py (InteractiveShell.interact): Added optional
2660 auto-indenting code, after a patch by King C. Shu
2665 auto-indenting code, after a patch by King C. Shu
2661 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2666 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2662 get along well with pasting indented code. If I ever figure out
2667 get along well with pasting indented code. If I ever figure out
2663 how to make that part go well, it will become on by default.
2668 how to make that part go well, it will become on by default.
2664
2669
2665 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2670 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2666 crash ipython if there was an unmatched '%' in the user's prompt
2671 crash ipython if there was an unmatched '%' in the user's prompt
2667 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2672 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2668
2673
2669 * IPython/iplib.py (InteractiveShell.interact): removed the
2674 * IPython/iplib.py (InteractiveShell.interact): removed the
2670 ability to ask the user whether he wants to crash or not at the
2675 ability to ask the user whether he wants to crash or not at the
2671 'last line' exception handler. Calling functions at that point
2676 'last line' exception handler. Calling functions at that point
2672 changes the stack, and the error reports would have incorrect
2677 changes the stack, and the error reports would have incorrect
2673 tracebacks.
2678 tracebacks.
2674
2679
2675 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2680 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2676 pass through a peger a pretty-printed form of any object. After a
2681 pass through a peger a pretty-printed form of any object. After a
2677 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2682 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2678
2683
2679 2003-04-14 Fernando Perez <fperez@colorado.edu>
2684 2003-04-14 Fernando Perez <fperez@colorado.edu>
2680
2685
2681 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2686 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2682 all files in ~ would be modified at first install (instead of
2687 all files in ~ would be modified at first install (instead of
2683 ~/.ipython). This could be potentially disastrous, as the
2688 ~/.ipython). This could be potentially disastrous, as the
2684 modification (make line-endings native) could damage binary files.
2689 modification (make line-endings native) could damage binary files.
2685
2690
2686 2003-04-10 Fernando Perez <fperez@colorado.edu>
2691 2003-04-10 Fernando Perez <fperez@colorado.edu>
2687
2692
2688 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2693 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2689 handle only lines which are invalid python. This now means that
2694 handle only lines which are invalid python. This now means that
2690 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2695 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2691 for the bug report.
2696 for the bug report.
2692
2697
2693 2003-04-01 Fernando Perez <fperez@colorado.edu>
2698 2003-04-01 Fernando Perez <fperez@colorado.edu>
2694
2699
2695 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2700 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2696 where failing to set sys.last_traceback would crash pdb.pm().
2701 where failing to set sys.last_traceback would crash pdb.pm().
2697 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2702 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2698 report.
2703 report.
2699
2704
2700 2003-03-25 Fernando Perez <fperez@colorado.edu>
2705 2003-03-25 Fernando Perez <fperez@colorado.edu>
2701
2706
2702 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2707 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2703 before printing it (it had a lot of spurious blank lines at the
2708 before printing it (it had a lot of spurious blank lines at the
2704 end).
2709 end).
2705
2710
2706 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2711 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2707 output would be sent 21 times! Obviously people don't use this
2712 output would be sent 21 times! Obviously people don't use this
2708 too often, or I would have heard about it.
2713 too often, or I would have heard about it.
2709
2714
2710 2003-03-24 Fernando Perez <fperez@colorado.edu>
2715 2003-03-24 Fernando Perez <fperez@colorado.edu>
2711
2716
2712 * setup.py (scriptfiles): renamed the data_files parameter from
2717 * setup.py (scriptfiles): renamed the data_files parameter from
2713 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2718 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2714 for the patch.
2719 for the patch.
2715
2720
2716 2003-03-20 Fernando Perez <fperez@colorado.edu>
2721 2003-03-20 Fernando Perez <fperez@colorado.edu>
2717
2722
2718 * IPython/genutils.py (error): added error() and fatal()
2723 * IPython/genutils.py (error): added error() and fatal()
2719 functions.
2724 functions.
2720
2725
2721 2003-03-18 *** Released version 0.2.15pre3
2726 2003-03-18 *** Released version 0.2.15pre3
2722
2727
2723 2003-03-18 Fernando Perez <fperez@colorado.edu>
2728 2003-03-18 Fernando Perez <fperez@colorado.edu>
2724
2729
2725 * setupext/install_data_ext.py
2730 * setupext/install_data_ext.py
2726 (install_data_ext.initialize_options): Class contributed by Jack
2731 (install_data_ext.initialize_options): Class contributed by Jack
2727 Moffit for fixing the old distutils hack. He is sending this to
2732 Moffit for fixing the old distutils hack. He is sending this to
2728 the distutils folks so in the future we may not need it as a
2733 the distutils folks so in the future we may not need it as a
2729 private fix.
2734 private fix.
2730
2735
2731 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2736 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2732 changes for Debian packaging. See his patch for full details.
2737 changes for Debian packaging. See his patch for full details.
2733 The old distutils hack of making the ipythonrc* files carry a
2738 The old distutils hack of making the ipythonrc* files carry a
2734 bogus .py extension is gone, at last. Examples were moved to a
2739 bogus .py extension is gone, at last. Examples were moved to a
2735 separate subdir under doc/, and the separate executable scripts
2740 separate subdir under doc/, and the separate executable scripts
2736 now live in their own directory. Overall a great cleanup. The
2741 now live in their own directory. Overall a great cleanup. The
2737 manual was updated to use the new files, and setup.py has been
2742 manual was updated to use the new files, and setup.py has been
2738 fixed for this setup.
2743 fixed for this setup.
2739
2744
2740 * IPython/PyColorize.py (Parser.usage): made non-executable and
2745 * IPython/PyColorize.py (Parser.usage): made non-executable and
2741 created a pycolor wrapper around it to be included as a script.
2746 created a pycolor wrapper around it to be included as a script.
2742
2747
2743 2003-03-12 *** Released version 0.2.15pre2
2748 2003-03-12 *** Released version 0.2.15pre2
2744
2749
2745 2003-03-12 Fernando Perez <fperez@colorado.edu>
2750 2003-03-12 Fernando Perez <fperez@colorado.edu>
2746
2751
2747 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2752 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2748 long-standing problem with garbage characters in some terminals.
2753 long-standing problem with garbage characters in some terminals.
2749 The issue was really that the \001 and \002 escapes must _only_ be
2754 The issue was really that the \001 and \002 escapes must _only_ be
2750 passed to input prompts (which call readline), but _never_ to
2755 passed to input prompts (which call readline), but _never_ to
2751 normal text to be printed on screen. I changed ColorANSI to have
2756 normal text to be printed on screen. I changed ColorANSI to have
2752 two classes: TermColors and InputTermColors, each with the
2757 two classes: TermColors and InputTermColors, each with the
2753 appropriate escapes for input prompts or normal text. The code in
2758 appropriate escapes for input prompts or normal text. The code in
2754 Prompts.py got slightly more complicated, but this very old and
2759 Prompts.py got slightly more complicated, but this very old and
2755 annoying bug is finally fixed.
2760 annoying bug is finally fixed.
2756
2761
2757 All the credit for nailing down the real origin of this problem
2762 All the credit for nailing down the real origin of this problem
2758 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2763 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2759 *Many* thanks to him for spending quite a bit of effort on this.
2764 *Many* thanks to him for spending quite a bit of effort on this.
2760
2765
2761 2003-03-05 *** Released version 0.2.15pre1
2766 2003-03-05 *** Released version 0.2.15pre1
2762
2767
2763 2003-03-03 Fernando Perez <fperez@colorado.edu>
2768 2003-03-03 Fernando Perez <fperez@colorado.edu>
2764
2769
2765 * IPython/FakeModule.py: Moved the former _FakeModule to a
2770 * IPython/FakeModule.py: Moved the former _FakeModule to a
2766 separate file, because it's also needed by Magic (to fix a similar
2771 separate file, because it's also needed by Magic (to fix a similar
2767 pickle-related issue in @run).
2772 pickle-related issue in @run).
2768
2773
2769 2003-03-02 Fernando Perez <fperez@colorado.edu>
2774 2003-03-02 Fernando Perez <fperez@colorado.edu>
2770
2775
2771 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2776 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2772 the autocall option at runtime.
2777 the autocall option at runtime.
2773 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2778 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2774 across Magic.py to start separating Magic from InteractiveShell.
2779 across Magic.py to start separating Magic from InteractiveShell.
2775 (Magic._ofind): Fixed to return proper namespace for dotted
2780 (Magic._ofind): Fixed to return proper namespace for dotted
2776 names. Before, a dotted name would always return 'not currently
2781 names. Before, a dotted name would always return 'not currently
2777 defined', because it would find the 'parent'. s.x would be found,
2782 defined', because it would find the 'parent'. s.x would be found,
2778 but since 'x' isn't defined by itself, it would get confused.
2783 but since 'x' isn't defined by itself, it would get confused.
2779 (Magic.magic_run): Fixed pickling problems reported by Ralf
2784 (Magic.magic_run): Fixed pickling problems reported by Ralf
2780 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2785 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2781 that I'd used when Mike Heeter reported similar issues at the
2786 that I'd used when Mike Heeter reported similar issues at the
2782 top-level, but now for @run. It boils down to injecting the
2787 top-level, but now for @run. It boils down to injecting the
2783 namespace where code is being executed with something that looks
2788 namespace where code is being executed with something that looks
2784 enough like a module to fool pickle.dump(). Since a pickle stores
2789 enough like a module to fool pickle.dump(). Since a pickle stores
2785 a named reference to the importing module, we need this for
2790 a named reference to the importing module, we need this for
2786 pickles to save something sensible.
2791 pickles to save something sensible.
2787
2792
2788 * IPython/ipmaker.py (make_IPython): added an autocall option.
2793 * IPython/ipmaker.py (make_IPython): added an autocall option.
2789
2794
2790 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2795 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2791 the auto-eval code. Now autocalling is an option, and the code is
2796 the auto-eval code. Now autocalling is an option, and the code is
2792 also vastly safer. There is no more eval() involved at all.
2797 also vastly safer. There is no more eval() involved at all.
2793
2798
2794 2003-03-01 Fernando Perez <fperez@colorado.edu>
2799 2003-03-01 Fernando Perez <fperez@colorado.edu>
2795
2800
2796 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2801 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2797 dict with named keys instead of a tuple.
2802 dict with named keys instead of a tuple.
2798
2803
2799 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2804 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2800
2805
2801 * setup.py (make_shortcut): Fixed message about directories
2806 * setup.py (make_shortcut): Fixed message about directories
2802 created during Windows installation (the directories were ok, just
2807 created during Windows installation (the directories were ok, just
2803 the printed message was misleading). Thanks to Chris Liechti
2808 the printed message was misleading). Thanks to Chris Liechti
2804 <cliechti-AT-gmx.net> for the heads up.
2809 <cliechti-AT-gmx.net> for the heads up.
2805
2810
2806 2003-02-21 Fernando Perez <fperez@colorado.edu>
2811 2003-02-21 Fernando Perez <fperez@colorado.edu>
2807
2812
2808 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2813 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2809 of ValueError exception when checking for auto-execution. This
2814 of ValueError exception when checking for auto-execution. This
2810 one is raised by things like Numeric arrays arr.flat when the
2815 one is raised by things like Numeric arrays arr.flat when the
2811 array is non-contiguous.
2816 array is non-contiguous.
2812
2817
2813 2003-01-31 Fernando Perez <fperez@colorado.edu>
2818 2003-01-31 Fernando Perez <fperez@colorado.edu>
2814
2819
2815 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2820 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2816 not return any value at all (even though the command would get
2821 not return any value at all (even though the command would get
2817 executed).
2822 executed).
2818 (xsys): Flush stdout right after printing the command to ensure
2823 (xsys): Flush stdout right after printing the command to ensure
2819 proper ordering of commands and command output in the total
2824 proper ordering of commands and command output in the total
2820 output.
2825 output.
2821 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2826 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2822 system/getoutput as defaults. The old ones are kept for
2827 system/getoutput as defaults. The old ones are kept for
2823 compatibility reasons, so no code which uses this library needs
2828 compatibility reasons, so no code which uses this library needs
2824 changing.
2829 changing.
2825
2830
2826 2003-01-27 *** Released version 0.2.14
2831 2003-01-27 *** Released version 0.2.14
2827
2832
2828 2003-01-25 Fernando Perez <fperez@colorado.edu>
2833 2003-01-25 Fernando Perez <fperez@colorado.edu>
2829
2834
2830 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2835 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2831 functions defined in previous edit sessions could not be re-edited
2836 functions defined in previous edit sessions could not be re-edited
2832 (because the temp files were immediately removed). Now temp files
2837 (because the temp files were immediately removed). Now temp files
2833 are removed only at IPython's exit.
2838 are removed only at IPython's exit.
2834 (Magic.magic_run): Improved @run to perform shell-like expansions
2839 (Magic.magic_run): Improved @run to perform shell-like expansions
2835 on its arguments (~users and $VARS). With this, @run becomes more
2840 on its arguments (~users and $VARS). With this, @run becomes more
2836 like a normal command-line.
2841 like a normal command-line.
2837
2842
2838 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2843 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2839 bugs related to embedding and cleaned up that code. A fairly
2844 bugs related to embedding and cleaned up that code. A fairly
2840 important one was the impossibility to access the global namespace
2845 important one was the impossibility to access the global namespace
2841 through the embedded IPython (only local variables were visible).
2846 through the embedded IPython (only local variables were visible).
2842
2847
2843 2003-01-14 Fernando Perez <fperez@colorado.edu>
2848 2003-01-14 Fernando Perez <fperez@colorado.edu>
2844
2849
2845 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2850 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2846 auto-calling to be a bit more conservative. Now it doesn't get
2851 auto-calling to be a bit more conservative. Now it doesn't get
2847 triggered if any of '!=()<>' are in the rest of the input line, to
2852 triggered if any of '!=()<>' are in the rest of the input line, to
2848 allow comparing callables. Thanks to Alex for the heads up.
2853 allow comparing callables. Thanks to Alex for the heads up.
2849
2854
2850 2003-01-07 Fernando Perez <fperez@colorado.edu>
2855 2003-01-07 Fernando Perez <fperez@colorado.edu>
2851
2856
2852 * IPython/genutils.py (page): fixed estimation of the number of
2857 * IPython/genutils.py (page): fixed estimation of the number of
2853 lines in a string to be paged to simply count newlines. This
2858 lines in a string to be paged to simply count newlines. This
2854 prevents over-guessing due to embedded escape sequences. A better
2859 prevents over-guessing due to embedded escape sequences. A better
2855 long-term solution would involve stripping out the control chars
2860 long-term solution would involve stripping out the control chars
2856 for the count, but it's potentially so expensive I just don't
2861 for the count, but it's potentially so expensive I just don't
2857 think it's worth doing.
2862 think it's worth doing.
2858
2863
2859 2002-12-19 *** Released version 0.2.14pre50
2864 2002-12-19 *** Released version 0.2.14pre50
2860
2865
2861 2002-12-19 Fernando Perez <fperez@colorado.edu>
2866 2002-12-19 Fernando Perez <fperez@colorado.edu>
2862
2867
2863 * tools/release (version): Changed release scripts to inform
2868 * tools/release (version): Changed release scripts to inform
2864 Andrea and build a NEWS file with a list of recent changes.
2869 Andrea and build a NEWS file with a list of recent changes.
2865
2870
2866 * IPython/ColorANSI.py (__all__): changed terminal detection
2871 * IPython/ColorANSI.py (__all__): changed terminal detection
2867 code. Seems to work better for xterms without breaking
2872 code. Seems to work better for xterms without breaking
2868 konsole. Will need more testing to determine if WinXP and Mac OSX
2873 konsole. Will need more testing to determine if WinXP and Mac OSX
2869 also work ok.
2874 also work ok.
2870
2875
2871 2002-12-18 *** Released version 0.2.14pre49
2876 2002-12-18 *** Released version 0.2.14pre49
2872
2877
2873 2002-12-18 Fernando Perez <fperez@colorado.edu>
2878 2002-12-18 Fernando Perez <fperez@colorado.edu>
2874
2879
2875 * Docs: added new info about Mac OSX, from Andrea.
2880 * Docs: added new info about Mac OSX, from Andrea.
2876
2881
2877 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2882 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2878 allow direct plotting of python strings whose format is the same
2883 allow direct plotting of python strings whose format is the same
2879 of gnuplot data files.
2884 of gnuplot data files.
2880
2885
2881 2002-12-16 Fernando Perez <fperez@colorado.edu>
2886 2002-12-16 Fernando Perez <fperez@colorado.edu>
2882
2887
2883 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2888 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2884 value of exit question to be acknowledged.
2889 value of exit question to be acknowledged.
2885
2890
2886 2002-12-03 Fernando Perez <fperez@colorado.edu>
2891 2002-12-03 Fernando Perez <fperez@colorado.edu>
2887
2892
2888 * IPython/ipmaker.py: removed generators, which had been added
2893 * IPython/ipmaker.py: removed generators, which had been added
2889 by mistake in an earlier debugging run. This was causing trouble
2894 by mistake in an earlier debugging run. This was causing trouble
2890 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2895 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2891 for pointing this out.
2896 for pointing this out.
2892
2897
2893 2002-11-17 Fernando Perez <fperez@colorado.edu>
2898 2002-11-17 Fernando Perez <fperez@colorado.edu>
2894
2899
2895 * Manual: updated the Gnuplot section.
2900 * Manual: updated the Gnuplot section.
2896
2901
2897 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2902 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2898 a much better split of what goes in Runtime and what goes in
2903 a much better split of what goes in Runtime and what goes in
2899 Interactive.
2904 Interactive.
2900
2905
2901 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2906 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2902 being imported from iplib.
2907 being imported from iplib.
2903
2908
2904 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2909 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2905 for command-passing. Now the global Gnuplot instance is called
2910 for command-passing. Now the global Gnuplot instance is called
2906 'gp' instead of 'g', which was really a far too fragile and
2911 'gp' instead of 'g', which was really a far too fragile and
2907 common name.
2912 common name.
2908
2913
2909 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2914 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2910 bounding boxes generated by Gnuplot for square plots.
2915 bounding boxes generated by Gnuplot for square plots.
2911
2916
2912 * IPython/genutils.py (popkey): new function added. I should
2917 * IPython/genutils.py (popkey): new function added. I should
2913 suggest this on c.l.py as a dict method, it seems useful.
2918 suggest this on c.l.py as a dict method, it seems useful.
2914
2919
2915 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2920 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2916 to transparently handle PostScript generation. MUCH better than
2921 to transparently handle PostScript generation. MUCH better than
2917 the previous plot_eps/replot_eps (which I removed now). The code
2922 the previous plot_eps/replot_eps (which I removed now). The code
2918 is also fairly clean and well documented now (including
2923 is also fairly clean and well documented now (including
2919 docstrings).
2924 docstrings).
2920
2925
2921 2002-11-13 Fernando Perez <fperez@colorado.edu>
2926 2002-11-13 Fernando Perez <fperez@colorado.edu>
2922
2927
2923 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2928 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2924 (inconsistent with options).
2929 (inconsistent with options).
2925
2930
2926 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2931 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2927 manually disabled, I don't know why. Fixed it.
2932 manually disabled, I don't know why. Fixed it.
2928 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2933 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2929 eps output.
2934 eps output.
2930
2935
2931 2002-11-12 Fernando Perez <fperez@colorado.edu>
2936 2002-11-12 Fernando Perez <fperez@colorado.edu>
2932
2937
2933 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2938 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2934 don't propagate up to caller. Fixes crash reported by François
2939 don't propagate up to caller. Fixes crash reported by François
2935 Pinard.
2940 Pinard.
2936
2941
2937 2002-11-09 Fernando Perez <fperez@colorado.edu>
2942 2002-11-09 Fernando Perez <fperez@colorado.edu>
2938
2943
2939 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2944 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2940 history file for new users.
2945 history file for new users.
2941 (make_IPython): fixed bug where initial install would leave the
2946 (make_IPython): fixed bug where initial install would leave the
2942 user running in the .ipython dir.
2947 user running in the .ipython dir.
2943 (make_IPython): fixed bug where config dir .ipython would be
2948 (make_IPython): fixed bug where config dir .ipython would be
2944 created regardless of the given -ipythondir option. Thanks to Cory
2949 created regardless of the given -ipythondir option. Thanks to Cory
2945 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2950 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2946
2951
2947 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2952 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2948 type confirmations. Will need to use it in all of IPython's code
2953 type confirmations. Will need to use it in all of IPython's code
2949 consistently.
2954 consistently.
2950
2955
2951 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2956 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2952 context to print 31 lines instead of the default 5. This will make
2957 context to print 31 lines instead of the default 5. This will make
2953 the crash reports extremely detailed in case the problem is in
2958 the crash reports extremely detailed in case the problem is in
2954 libraries I don't have access to.
2959 libraries I don't have access to.
2955
2960
2956 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2961 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2957 line of defense' code to still crash, but giving users fair
2962 line of defense' code to still crash, but giving users fair
2958 warning. I don't want internal errors to go unreported: if there's
2963 warning. I don't want internal errors to go unreported: if there's
2959 an internal problem, IPython should crash and generate a full
2964 an internal problem, IPython should crash and generate a full
2960 report.
2965 report.
2961
2966
2962 2002-11-08 Fernando Perez <fperez@colorado.edu>
2967 2002-11-08 Fernando Perez <fperez@colorado.edu>
2963
2968
2964 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2969 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2965 otherwise uncaught exceptions which can appear if people set
2970 otherwise uncaught exceptions which can appear if people set
2966 sys.stdout to something badly broken. Thanks to a crash report
2971 sys.stdout to something badly broken. Thanks to a crash report
2967 from henni-AT-mail.brainbot.com.
2972 from henni-AT-mail.brainbot.com.
2968
2973
2969 2002-11-04 Fernando Perez <fperez@colorado.edu>
2974 2002-11-04 Fernando Perez <fperez@colorado.edu>
2970
2975
2971 * IPython/iplib.py (InteractiveShell.interact): added
2976 * IPython/iplib.py (InteractiveShell.interact): added
2972 __IPYTHON__active to the builtins. It's a flag which goes on when
2977 __IPYTHON__active to the builtins. It's a flag which goes on when
2973 the interaction starts and goes off again when it stops. This
2978 the interaction starts and goes off again when it stops. This
2974 allows embedding code to detect being inside IPython. Before this
2979 allows embedding code to detect being inside IPython. Before this
2975 was done via __IPYTHON__, but that only shows that an IPython
2980 was done via __IPYTHON__, but that only shows that an IPython
2976 instance has been created.
2981 instance has been created.
2977
2982
2978 * IPython/Magic.py (Magic.magic_env): I realized that in a
2983 * IPython/Magic.py (Magic.magic_env): I realized that in a
2979 UserDict, instance.data holds the data as a normal dict. So I
2984 UserDict, instance.data holds the data as a normal dict. So I
2980 modified @env to return os.environ.data instead of rebuilding a
2985 modified @env to return os.environ.data instead of rebuilding a
2981 dict by hand.
2986 dict by hand.
2982
2987
2983 2002-11-02 Fernando Perez <fperez@colorado.edu>
2988 2002-11-02 Fernando Perez <fperez@colorado.edu>
2984
2989
2985 * IPython/genutils.py (warn): changed so that level 1 prints no
2990 * IPython/genutils.py (warn): changed so that level 1 prints no
2986 header. Level 2 is now the default (with 'WARNING' header, as
2991 header. Level 2 is now the default (with 'WARNING' header, as
2987 before). I think I tracked all places where changes were needed in
2992 before). I think I tracked all places where changes were needed in
2988 IPython, but outside code using the old level numbering may have
2993 IPython, but outside code using the old level numbering may have
2989 broken.
2994 broken.
2990
2995
2991 * IPython/iplib.py (InteractiveShell.runcode): added this to
2996 * IPython/iplib.py (InteractiveShell.runcode): added this to
2992 handle the tracebacks in SystemExit traps correctly. The previous
2997 handle the tracebacks in SystemExit traps correctly. The previous
2993 code (through interact) was printing more of the stack than
2998 code (through interact) was printing more of the stack than
2994 necessary, showing IPython internal code to the user.
2999 necessary, showing IPython internal code to the user.
2995
3000
2996 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3001 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2997 default. Now that the default at the confirmation prompt is yes,
3002 default. Now that the default at the confirmation prompt is yes,
2998 it's not so intrusive. François' argument that ipython sessions
3003 it's not so intrusive. François' argument that ipython sessions
2999 tend to be complex enough not to lose them from an accidental C-d,
3004 tend to be complex enough not to lose them from an accidental C-d,
3000 is a valid one.
3005 is a valid one.
3001
3006
3002 * IPython/iplib.py (InteractiveShell.interact): added a
3007 * IPython/iplib.py (InteractiveShell.interact): added a
3003 showtraceback() call to the SystemExit trap, and modified the exit
3008 showtraceback() call to the SystemExit trap, and modified the exit
3004 confirmation to have yes as the default.
3009 confirmation to have yes as the default.
3005
3010
3006 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3011 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3007 this file. It's been gone from the code for a long time, this was
3012 this file. It's been gone from the code for a long time, this was
3008 simply leftover junk.
3013 simply leftover junk.
3009
3014
3010 2002-11-01 Fernando Perez <fperez@colorado.edu>
3015 2002-11-01 Fernando Perez <fperez@colorado.edu>
3011
3016
3012 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3017 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3013 added. If set, IPython now traps EOF and asks for
3018 added. If set, IPython now traps EOF and asks for
3014 confirmation. After a request by François Pinard.
3019 confirmation. After a request by François Pinard.
3015
3020
3016 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3021 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3017 of @abort, and with a new (better) mechanism for handling the
3022 of @abort, and with a new (better) mechanism for handling the
3018 exceptions.
3023 exceptions.
3019
3024
3020 2002-10-27 Fernando Perez <fperez@colorado.edu>
3025 2002-10-27 Fernando Perez <fperez@colorado.edu>
3021
3026
3022 * IPython/usage.py (__doc__): updated the --help information and
3027 * IPython/usage.py (__doc__): updated the --help information and
3023 the ipythonrc file to indicate that -log generates
3028 the ipythonrc file to indicate that -log generates
3024 ./ipython.log. Also fixed the corresponding info in @logstart.
3029 ./ipython.log. Also fixed the corresponding info in @logstart.
3025 This and several other fixes in the manuals thanks to reports by
3030 This and several other fixes in the manuals thanks to reports by
3026 François Pinard <pinard-AT-iro.umontreal.ca>.
3031 François Pinard <pinard-AT-iro.umontreal.ca>.
3027
3032
3028 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3033 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3029 refer to @logstart (instead of @log, which doesn't exist).
3034 refer to @logstart (instead of @log, which doesn't exist).
3030
3035
3031 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3036 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3032 AttributeError crash. Thanks to Christopher Armstrong
3037 AttributeError crash. Thanks to Christopher Armstrong
3033 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3038 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3034 introduced recently (in 0.2.14pre37) with the fix to the eval
3039 introduced recently (in 0.2.14pre37) with the fix to the eval
3035 problem mentioned below.
3040 problem mentioned below.
3036
3041
3037 2002-10-17 Fernando Perez <fperez@colorado.edu>
3042 2002-10-17 Fernando Perez <fperez@colorado.edu>
3038
3043
3039 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3044 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3040 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3045 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3041
3046
3042 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3047 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3043 this function to fix a problem reported by Alex Schmolck. He saw
3048 this function to fix a problem reported by Alex Schmolck. He saw
3044 it with list comprehensions and generators, which were getting
3049 it with list comprehensions and generators, which were getting
3045 called twice. The real problem was an 'eval' call in testing for
3050 called twice. The real problem was an 'eval' call in testing for
3046 automagic which was evaluating the input line silently.
3051 automagic which was evaluating the input line silently.
3047
3052
3048 This is a potentially very nasty bug, if the input has side
3053 This is a potentially very nasty bug, if the input has side
3049 effects which must not be repeated. The code is much cleaner now,
3054 effects which must not be repeated. The code is much cleaner now,
3050 without any blanket 'except' left and with a regexp test for
3055 without any blanket 'except' left and with a regexp test for
3051 actual function names.
3056 actual function names.
3052
3057
3053 But an eval remains, which I'm not fully comfortable with. I just
3058 But an eval remains, which I'm not fully comfortable with. I just
3054 don't know how to find out if an expression could be a callable in
3059 don't know how to find out if an expression could be a callable in
3055 the user's namespace without doing an eval on the string. However
3060 the user's namespace without doing an eval on the string. However
3056 that string is now much more strictly checked so that no code
3061 that string is now much more strictly checked so that no code
3057 slips by, so the eval should only happen for things that can
3062 slips by, so the eval should only happen for things that can
3058 really be only function/method names.
3063 really be only function/method names.
3059
3064
3060 2002-10-15 Fernando Perez <fperez@colorado.edu>
3065 2002-10-15 Fernando Perez <fperez@colorado.edu>
3061
3066
3062 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3067 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3063 OSX information to main manual, removed README_Mac_OSX file from
3068 OSX information to main manual, removed README_Mac_OSX file from
3064 distribution. Also updated credits for recent additions.
3069 distribution. Also updated credits for recent additions.
3065
3070
3066 2002-10-10 Fernando Perez <fperez@colorado.edu>
3071 2002-10-10 Fernando Perez <fperez@colorado.edu>
3067
3072
3068 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3073 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3069 terminal-related issues. Many thanks to Andrea Riciputi
3074 terminal-related issues. Many thanks to Andrea Riciputi
3070 <andrea.riciputi-AT-libero.it> for writing it.
3075 <andrea.riciputi-AT-libero.it> for writing it.
3071
3076
3072 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3077 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3073 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3078 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3074
3079
3075 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3080 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3076 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3081 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3077 <syver-en-AT-online.no> who both submitted patches for this problem.
3082 <syver-en-AT-online.no> who both submitted patches for this problem.
3078
3083
3079 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3084 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3080 global embedding to make sure that things don't overwrite user
3085 global embedding to make sure that things don't overwrite user
3081 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3086 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3082
3087
3083 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3088 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3084 compatibility. Thanks to Hayden Callow
3089 compatibility. Thanks to Hayden Callow
3085 <h.callow-AT-elec.canterbury.ac.nz>
3090 <h.callow-AT-elec.canterbury.ac.nz>
3086
3091
3087 2002-10-04 Fernando Perez <fperez@colorado.edu>
3092 2002-10-04 Fernando Perez <fperez@colorado.edu>
3088
3093
3089 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3094 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3090 Gnuplot.File objects.
3095 Gnuplot.File objects.
3091
3096
3092 2002-07-23 Fernando Perez <fperez@colorado.edu>
3097 2002-07-23 Fernando Perez <fperez@colorado.edu>
3093
3098
3094 * IPython/genutils.py (timing): Added timings() and timing() for
3099 * IPython/genutils.py (timing): Added timings() and timing() for
3095 quick access to the most commonly needed data, the execution
3100 quick access to the most commonly needed data, the execution
3096 times. Old timing() renamed to timings_out().
3101 times. Old timing() renamed to timings_out().
3097
3102
3098 2002-07-18 Fernando Perez <fperez@colorado.edu>
3103 2002-07-18 Fernando Perez <fperez@colorado.edu>
3099
3104
3100 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3105 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3101 bug with nested instances disrupting the parent's tab completion.
3106 bug with nested instances disrupting the parent's tab completion.
3102
3107
3103 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3108 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3104 all_completions code to begin the emacs integration.
3109 all_completions code to begin the emacs integration.
3105
3110
3106 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3111 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3107 argument to allow titling individual arrays when plotting.
3112 argument to allow titling individual arrays when plotting.
3108
3113
3109 2002-07-15 Fernando Perez <fperez@colorado.edu>
3114 2002-07-15 Fernando Perez <fperez@colorado.edu>
3110
3115
3111 * setup.py (make_shortcut): changed to retrieve the value of
3116 * setup.py (make_shortcut): changed to retrieve the value of
3112 'Program Files' directory from the registry (this value changes in
3117 'Program Files' directory from the registry (this value changes in
3113 non-english versions of Windows). Thanks to Thomas Fanslau
3118 non-english versions of Windows). Thanks to Thomas Fanslau
3114 <tfanslau-AT-gmx.de> for the report.
3119 <tfanslau-AT-gmx.de> for the report.
3115
3120
3116 2002-07-10 Fernando Perez <fperez@colorado.edu>
3121 2002-07-10 Fernando Perez <fperez@colorado.edu>
3117
3122
3118 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3123 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3119 a bug in pdb, which crashes if a line with only whitespace is
3124 a bug in pdb, which crashes if a line with only whitespace is
3120 entered. Bug report submitted to sourceforge.
3125 entered. Bug report submitted to sourceforge.
3121
3126
3122 2002-07-09 Fernando Perez <fperez@colorado.edu>
3127 2002-07-09 Fernando Perez <fperez@colorado.edu>
3123
3128
3124 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3129 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3125 reporting exceptions (it's a bug in inspect.py, I just set a
3130 reporting exceptions (it's a bug in inspect.py, I just set a
3126 workaround).
3131 workaround).
3127
3132
3128 2002-07-08 Fernando Perez <fperez@colorado.edu>
3133 2002-07-08 Fernando Perez <fperez@colorado.edu>
3129
3134
3130 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3135 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3131 __IPYTHON__ in __builtins__ to show up in user_ns.
3136 __IPYTHON__ in __builtins__ to show up in user_ns.
3132
3137
3133 2002-07-03 Fernando Perez <fperez@colorado.edu>
3138 2002-07-03 Fernando Perez <fperez@colorado.edu>
3134
3139
3135 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3140 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3136 name from @gp_set_instance to @gp_set_default.
3141 name from @gp_set_instance to @gp_set_default.
3137
3142
3138 * IPython/ipmaker.py (make_IPython): default editor value set to
3143 * IPython/ipmaker.py (make_IPython): default editor value set to
3139 '0' (a string), to match the rc file. Otherwise will crash when
3144 '0' (a string), to match the rc file. Otherwise will crash when
3140 .strip() is called on it.
3145 .strip() is called on it.
3141
3146
3142
3147
3143 2002-06-28 Fernando Perez <fperez@colorado.edu>
3148 2002-06-28 Fernando Perez <fperez@colorado.edu>
3144
3149
3145 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3150 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3146 of files in current directory when a file is executed via
3151 of files in current directory when a file is executed via
3147 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3152 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3148
3153
3149 * setup.py (manfiles): fix for rpm builds, submitted by RA
3154 * setup.py (manfiles): fix for rpm builds, submitted by RA
3150 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3155 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3151
3156
3152 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3157 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3153 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3158 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3154 string!). A. Schmolck caught this one.
3159 string!). A. Schmolck caught this one.
3155
3160
3156 2002-06-27 Fernando Perez <fperez@colorado.edu>
3161 2002-06-27 Fernando Perez <fperez@colorado.edu>
3157
3162
3158 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3163 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3159 defined files at the cmd line. __name__ wasn't being set to
3164 defined files at the cmd line. __name__ wasn't being set to
3160 __main__.
3165 __main__.
3161
3166
3162 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3167 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3163 regular lists and tuples besides Numeric arrays.
3168 regular lists and tuples besides Numeric arrays.
3164
3169
3165 * IPython/Prompts.py (CachedOutput.__call__): Added output
3170 * IPython/Prompts.py (CachedOutput.__call__): Added output
3166 supression for input ending with ';'. Similar to Mathematica and
3171 supression for input ending with ';'. Similar to Mathematica and
3167 Matlab. The _* vars and Out[] list are still updated, just like
3172 Matlab. The _* vars and Out[] list are still updated, just like
3168 Mathematica behaves.
3173 Mathematica behaves.
3169
3174
3170 2002-06-25 Fernando Perez <fperez@colorado.edu>
3175 2002-06-25 Fernando Perez <fperez@colorado.edu>
3171
3176
3172 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3177 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3173 .ini extensions for profiels under Windows.
3178 .ini extensions for profiels under Windows.
3174
3179
3175 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3180 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3176 string form. Fix contributed by Alexander Schmolck
3181 string form. Fix contributed by Alexander Schmolck
3177 <a.schmolck-AT-gmx.net>
3182 <a.schmolck-AT-gmx.net>
3178
3183
3179 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3184 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3180 pre-configured Gnuplot instance.
3185 pre-configured Gnuplot instance.
3181
3186
3182 2002-06-21 Fernando Perez <fperez@colorado.edu>
3187 2002-06-21 Fernando Perez <fperez@colorado.edu>
3183
3188
3184 * IPython/numutils.py (exp_safe): new function, works around the
3189 * IPython/numutils.py (exp_safe): new function, works around the
3185 underflow problems in Numeric.
3190 underflow problems in Numeric.
3186 (log2): New fn. Safe log in base 2: returns exact integer answer
3191 (log2): New fn. Safe log in base 2: returns exact integer answer
3187 for exact integer powers of 2.
3192 for exact integer powers of 2.
3188
3193
3189 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3194 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3190 properly.
3195 properly.
3191
3196
3192 2002-06-20 Fernando Perez <fperez@colorado.edu>
3197 2002-06-20 Fernando Perez <fperez@colorado.edu>
3193
3198
3194 * IPython/genutils.py (timing): new function like
3199 * IPython/genutils.py (timing): new function like
3195 Mathematica's. Similar to time_test, but returns more info.
3200 Mathematica's. Similar to time_test, but returns more info.
3196
3201
3197 2002-06-18 Fernando Perez <fperez@colorado.edu>
3202 2002-06-18 Fernando Perez <fperez@colorado.edu>
3198
3203
3199 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3204 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3200 according to Mike Heeter's suggestions.
3205 according to Mike Heeter's suggestions.
3201
3206
3202 2002-06-16 Fernando Perez <fperez@colorado.edu>
3207 2002-06-16 Fernando Perez <fperez@colorado.edu>
3203
3208
3204 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3209 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3205 system. GnuplotMagic is gone as a user-directory option. New files
3210 system. GnuplotMagic is gone as a user-directory option. New files
3206 make it easier to use all the gnuplot stuff both from external
3211 make it easier to use all the gnuplot stuff both from external
3207 programs as well as from IPython. Had to rewrite part of
3212 programs as well as from IPython. Had to rewrite part of
3208 hardcopy() b/c of a strange bug: often the ps files simply don't
3213 hardcopy() b/c of a strange bug: often the ps files simply don't
3209 get created, and require a repeat of the command (often several
3214 get created, and require a repeat of the command (often several
3210 times).
3215 times).
3211
3216
3212 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3217 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3213 resolve output channel at call time, so that if sys.stderr has
3218 resolve output channel at call time, so that if sys.stderr has
3214 been redirected by user this gets honored.
3219 been redirected by user this gets honored.
3215
3220
3216 2002-06-13 Fernando Perez <fperez@colorado.edu>
3221 2002-06-13 Fernando Perez <fperez@colorado.edu>
3217
3222
3218 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3223 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3219 IPShell. Kept a copy with the old names to avoid breaking people's
3224 IPShell. Kept a copy with the old names to avoid breaking people's
3220 embedded code.
3225 embedded code.
3221
3226
3222 * IPython/ipython: simplified it to the bare minimum after
3227 * IPython/ipython: simplified it to the bare minimum after
3223 Holger's suggestions. Added info about how to use it in
3228 Holger's suggestions. Added info about how to use it in
3224 PYTHONSTARTUP.
3229 PYTHONSTARTUP.
3225
3230
3226 * IPython/Shell.py (IPythonShell): changed the options passing
3231 * IPython/Shell.py (IPythonShell): changed the options passing
3227 from a string with funky %s replacements to a straight list. Maybe
3232 from a string with funky %s replacements to a straight list. Maybe
3228 a bit more typing, but it follows sys.argv conventions, so there's
3233 a bit more typing, but it follows sys.argv conventions, so there's
3229 less special-casing to remember.
3234 less special-casing to remember.
3230
3235
3231 2002-06-12 Fernando Perez <fperez@colorado.edu>
3236 2002-06-12 Fernando Perez <fperez@colorado.edu>
3232
3237
3233 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3238 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3234 command. Thanks to a suggestion by Mike Heeter.
3239 command. Thanks to a suggestion by Mike Heeter.
3235 (Magic.magic_pfile): added behavior to look at filenames if given
3240 (Magic.magic_pfile): added behavior to look at filenames if given
3236 arg is not a defined object.
3241 arg is not a defined object.
3237 (Magic.magic_save): New @save function to save code snippets. Also
3242 (Magic.magic_save): New @save function to save code snippets. Also
3238 a Mike Heeter idea.
3243 a Mike Heeter idea.
3239
3244
3240 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3245 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3241 plot() and replot(). Much more convenient now, especially for
3246 plot() and replot(). Much more convenient now, especially for
3242 interactive use.
3247 interactive use.
3243
3248
3244 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3249 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3245 filenames.
3250 filenames.
3246
3251
3247 2002-06-02 Fernando Perez <fperez@colorado.edu>
3252 2002-06-02 Fernando Perez <fperez@colorado.edu>
3248
3253
3249 * IPython/Struct.py (Struct.__init__): modified to admit
3254 * IPython/Struct.py (Struct.__init__): modified to admit
3250 initialization via another struct.
3255 initialization via another struct.
3251
3256
3252 * IPython/genutils.py (SystemExec.__init__): New stateful
3257 * IPython/genutils.py (SystemExec.__init__): New stateful
3253 interface to xsys and bq. Useful for writing system scripts.
3258 interface to xsys and bq. Useful for writing system scripts.
3254
3259
3255 2002-05-30 Fernando Perez <fperez@colorado.edu>
3260 2002-05-30 Fernando Perez <fperez@colorado.edu>
3256
3261
3257 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3262 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3258 documents. This will make the user download smaller (it's getting
3263 documents. This will make the user download smaller (it's getting
3259 too big).
3264 too big).
3260
3265
3261 2002-05-29 Fernando Perez <fperez@colorado.edu>
3266 2002-05-29 Fernando Perez <fperez@colorado.edu>
3262
3267
3263 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3268 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3264 fix problems with shelve and pickle. Seems to work, but I don't
3269 fix problems with shelve and pickle. Seems to work, but I don't
3265 know if corner cases break it. Thanks to Mike Heeter
3270 know if corner cases break it. Thanks to Mike Heeter
3266 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3271 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3267
3272
3268 2002-05-24 Fernando Perez <fperez@colorado.edu>
3273 2002-05-24 Fernando Perez <fperez@colorado.edu>
3269
3274
3270 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3275 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3271 macros having broken.
3276 macros having broken.
3272
3277
3273 2002-05-21 Fernando Perez <fperez@colorado.edu>
3278 2002-05-21 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3280 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3276 introduced logging bug: all history before logging started was
3281 introduced logging bug: all history before logging started was
3277 being written one character per line! This came from the redesign
3282 being written one character per line! This came from the redesign
3278 of the input history as a special list which slices to strings,
3283 of the input history as a special list which slices to strings,
3279 not to lists.
3284 not to lists.
3280
3285
3281 2002-05-20 Fernando Perez <fperez@colorado.edu>
3286 2002-05-20 Fernando Perez <fperez@colorado.edu>
3282
3287
3283 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3288 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3284 be an attribute of all classes in this module. The design of these
3289 be an attribute of all classes in this module. The design of these
3285 classes needs some serious overhauling.
3290 classes needs some serious overhauling.
3286
3291
3287 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3292 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3288 which was ignoring '_' in option names.
3293 which was ignoring '_' in option names.
3289
3294
3290 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3295 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3291 'Verbose_novars' to 'Context' and made it the new default. It's a
3296 'Verbose_novars' to 'Context' and made it the new default. It's a
3292 bit more readable and also safer than verbose.
3297 bit more readable and also safer than verbose.
3293
3298
3294 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3299 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3295 triple-quoted strings.
3300 triple-quoted strings.
3296
3301
3297 * IPython/OInspect.py (__all__): new module exposing the object
3302 * IPython/OInspect.py (__all__): new module exposing the object
3298 introspection facilities. Now the corresponding magics are dummy
3303 introspection facilities. Now the corresponding magics are dummy
3299 wrappers around this. Having this module will make it much easier
3304 wrappers around this. Having this module will make it much easier
3300 to put these functions into our modified pdb.
3305 to put these functions into our modified pdb.
3301 This new object inspector system uses the new colorizing module,
3306 This new object inspector system uses the new colorizing module,
3302 so source code and other things are nicely syntax highlighted.
3307 so source code and other things are nicely syntax highlighted.
3303
3308
3304 2002-05-18 Fernando Perez <fperez@colorado.edu>
3309 2002-05-18 Fernando Perez <fperez@colorado.edu>
3305
3310
3306 * IPython/ColorANSI.py: Split the coloring tools into a separate
3311 * IPython/ColorANSI.py: Split the coloring tools into a separate
3307 module so I can use them in other code easier (they were part of
3312 module so I can use them in other code easier (they were part of
3308 ultraTB).
3313 ultraTB).
3309
3314
3310 2002-05-17 Fernando Perez <fperez@colorado.edu>
3315 2002-05-17 Fernando Perez <fperez@colorado.edu>
3311
3316
3312 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3317 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3313 fixed it to set the global 'g' also to the called instance, as
3318 fixed it to set the global 'g' also to the called instance, as
3314 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3319 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3315 user's 'g' variables).
3320 user's 'g' variables).
3316
3321
3317 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3322 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3318 global variables (aliases to _ih,_oh) so that users which expect
3323 global variables (aliases to _ih,_oh) so that users which expect
3319 In[5] or Out[7] to work aren't unpleasantly surprised.
3324 In[5] or Out[7] to work aren't unpleasantly surprised.
3320 (InputList.__getslice__): new class to allow executing slices of
3325 (InputList.__getslice__): new class to allow executing slices of
3321 input history directly. Very simple class, complements the use of
3326 input history directly. Very simple class, complements the use of
3322 macros.
3327 macros.
3323
3328
3324 2002-05-16 Fernando Perez <fperez@colorado.edu>
3329 2002-05-16 Fernando Perez <fperez@colorado.edu>
3325
3330
3326 * setup.py (docdirbase): make doc directory be just doc/IPython
3331 * setup.py (docdirbase): make doc directory be just doc/IPython
3327 without version numbers, it will reduce clutter for users.
3332 without version numbers, it will reduce clutter for users.
3328
3333
3329 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3334 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3330 execfile call to prevent possible memory leak. See for details:
3335 execfile call to prevent possible memory leak. See for details:
3331 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3336 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3332
3337
3333 2002-05-15 Fernando Perez <fperez@colorado.edu>
3338 2002-05-15 Fernando Perez <fperez@colorado.edu>
3334
3339
3335 * IPython/Magic.py (Magic.magic_psource): made the object
3340 * IPython/Magic.py (Magic.magic_psource): made the object
3336 introspection names be more standard: pdoc, pdef, pfile and
3341 introspection names be more standard: pdoc, pdef, pfile and
3337 psource. They all print/page their output, and it makes
3342 psource. They all print/page their output, and it makes
3338 remembering them easier. Kept old names for compatibility as
3343 remembering them easier. Kept old names for compatibility as
3339 aliases.
3344 aliases.
3340
3345
3341 2002-05-14 Fernando Perez <fperez@colorado.edu>
3346 2002-05-14 Fernando Perez <fperez@colorado.edu>
3342
3347
3343 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3348 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3344 what the mouse problem was. The trick is to use gnuplot with temp
3349 what the mouse problem was. The trick is to use gnuplot with temp
3345 files and NOT with pipes (for data communication), because having
3350 files and NOT with pipes (for data communication), because having
3346 both pipes and the mouse on is bad news.
3351 both pipes and the mouse on is bad news.
3347
3352
3348 2002-05-13 Fernando Perez <fperez@colorado.edu>
3353 2002-05-13 Fernando Perez <fperez@colorado.edu>
3349
3354
3350 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3355 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3351 bug. Information would be reported about builtins even when
3356 bug. Information would be reported about builtins even when
3352 user-defined functions overrode them.
3357 user-defined functions overrode them.
3353
3358
3354 2002-05-11 Fernando Perez <fperez@colorado.edu>
3359 2002-05-11 Fernando Perez <fperez@colorado.edu>
3355
3360
3356 * IPython/__init__.py (__all__): removed FlexCompleter from
3361 * IPython/__init__.py (__all__): removed FlexCompleter from
3357 __all__ so that things don't fail in platforms without readline.
3362 __all__ so that things don't fail in platforms without readline.
3358
3363
3359 2002-05-10 Fernando Perez <fperez@colorado.edu>
3364 2002-05-10 Fernando Perez <fperez@colorado.edu>
3360
3365
3361 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3366 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3362 it requires Numeric, effectively making Numeric a dependency for
3367 it requires Numeric, effectively making Numeric a dependency for
3363 IPython.
3368 IPython.
3364
3369
3365 * Released 0.2.13
3370 * Released 0.2.13
3366
3371
3367 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3372 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3368 profiler interface. Now all the major options from the profiler
3373 profiler interface. Now all the major options from the profiler
3369 module are directly supported in IPython, both for single
3374 module are directly supported in IPython, both for single
3370 expressions (@prun) and for full programs (@run -p).
3375 expressions (@prun) and for full programs (@run -p).
3371
3376
3372 2002-05-09 Fernando Perez <fperez@colorado.edu>
3377 2002-05-09 Fernando Perez <fperez@colorado.edu>
3373
3378
3374 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3379 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3375 magic properly formatted for screen.
3380 magic properly formatted for screen.
3376
3381
3377 * setup.py (make_shortcut): Changed things to put pdf version in
3382 * setup.py (make_shortcut): Changed things to put pdf version in
3378 doc/ instead of doc/manual (had to change lyxport a bit).
3383 doc/ instead of doc/manual (had to change lyxport a bit).
3379
3384
3380 * IPython/Magic.py (Profile.string_stats): made profile runs go
3385 * IPython/Magic.py (Profile.string_stats): made profile runs go
3381 through pager (they are long and a pager allows searching, saving,
3386 through pager (they are long and a pager allows searching, saving,
3382 etc.)
3387 etc.)
3383
3388
3384 2002-05-08 Fernando Perez <fperez@colorado.edu>
3389 2002-05-08 Fernando Perez <fperez@colorado.edu>
3385
3390
3386 * Released 0.2.12
3391 * Released 0.2.12
3387
3392
3388 2002-05-06 Fernando Perez <fperez@colorado.edu>
3393 2002-05-06 Fernando Perez <fperez@colorado.edu>
3389
3394
3390 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3395 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3391 introduced); 'hist n1 n2' was broken.
3396 introduced); 'hist n1 n2' was broken.
3392 (Magic.magic_pdb): added optional on/off arguments to @pdb
3397 (Magic.magic_pdb): added optional on/off arguments to @pdb
3393 (Magic.magic_run): added option -i to @run, which executes code in
3398 (Magic.magic_run): added option -i to @run, which executes code in
3394 the IPython namespace instead of a clean one. Also added @irun as
3399 the IPython namespace instead of a clean one. Also added @irun as
3395 an alias to @run -i.
3400 an alias to @run -i.
3396
3401
3397 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3402 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3398 fixed (it didn't really do anything, the namespaces were wrong).
3403 fixed (it didn't really do anything, the namespaces were wrong).
3399
3404
3400 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3405 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3401
3406
3402 * IPython/__init__.py (__all__): Fixed package namespace, now
3407 * IPython/__init__.py (__all__): Fixed package namespace, now
3403 'import IPython' does give access to IPython.<all> as
3408 'import IPython' does give access to IPython.<all> as
3404 expected. Also renamed __release__ to Release.
3409 expected. Also renamed __release__ to Release.
3405
3410
3406 * IPython/Debugger.py (__license__): created new Pdb class which
3411 * IPython/Debugger.py (__license__): created new Pdb class which
3407 functions like a drop-in for the normal pdb.Pdb but does NOT
3412 functions like a drop-in for the normal pdb.Pdb but does NOT
3408 import readline by default. This way it doesn't muck up IPython's
3413 import readline by default. This way it doesn't muck up IPython's
3409 readline handling, and now tab-completion finally works in the
3414 readline handling, and now tab-completion finally works in the
3410 debugger -- sort of. It completes things globally visible, but the
3415 debugger -- sort of. It completes things globally visible, but the
3411 completer doesn't track the stack as pdb walks it. That's a bit
3416 completer doesn't track the stack as pdb walks it. That's a bit
3412 tricky, and I'll have to implement it later.
3417 tricky, and I'll have to implement it later.
3413
3418
3414 2002-05-05 Fernando Perez <fperez@colorado.edu>
3419 2002-05-05 Fernando Perez <fperez@colorado.edu>
3415
3420
3416 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3421 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3417 magic docstrings when printed via ? (explicit \'s were being
3422 magic docstrings when printed via ? (explicit \'s were being
3418 printed).
3423 printed).
3419
3424
3420 * IPython/ipmaker.py (make_IPython): fixed namespace
3425 * IPython/ipmaker.py (make_IPython): fixed namespace
3421 identification bug. Now variables loaded via logs or command-line
3426 identification bug. Now variables loaded via logs or command-line
3422 files are recognized in the interactive namespace by @who.
3427 files are recognized in the interactive namespace by @who.
3423
3428
3424 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3429 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3425 log replay system stemming from the string form of Structs.
3430 log replay system stemming from the string form of Structs.
3426
3431
3427 * IPython/Magic.py (Macro.__init__): improved macros to properly
3432 * IPython/Magic.py (Macro.__init__): improved macros to properly
3428 handle magic commands in them.
3433 handle magic commands in them.
3429 (Magic.magic_logstart): usernames are now expanded so 'logstart
3434 (Magic.magic_logstart): usernames are now expanded so 'logstart
3430 ~/mylog' now works.
3435 ~/mylog' now works.
3431
3436
3432 * IPython/iplib.py (complete): fixed bug where paths starting with
3437 * IPython/iplib.py (complete): fixed bug where paths starting with
3433 '/' would be completed as magic names.
3438 '/' would be completed as magic names.
3434
3439
3435 2002-05-04 Fernando Perez <fperez@colorado.edu>
3440 2002-05-04 Fernando Perez <fperez@colorado.edu>
3436
3441
3437 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3442 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3438 allow running full programs under the profiler's control.
3443 allow running full programs under the profiler's control.
3439
3444
3440 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3445 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3441 mode to report exceptions verbosely but without formatting
3446 mode to report exceptions verbosely but without formatting
3442 variables. This addresses the issue of ipython 'freezing' (it's
3447 variables. This addresses the issue of ipython 'freezing' (it's
3443 not frozen, but caught in an expensive formatting loop) when huge
3448 not frozen, but caught in an expensive formatting loop) when huge
3444 variables are in the context of an exception.
3449 variables are in the context of an exception.
3445 (VerboseTB.text): Added '--->' markers at line where exception was
3450 (VerboseTB.text): Added '--->' markers at line where exception was
3446 triggered. Much clearer to read, especially in NoColor modes.
3451 triggered. Much clearer to read, especially in NoColor modes.
3447
3452
3448 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3453 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3449 implemented in reverse when changing to the new parse_options().
3454 implemented in reverse when changing to the new parse_options().
3450
3455
3451 2002-05-03 Fernando Perez <fperez@colorado.edu>
3456 2002-05-03 Fernando Perez <fperez@colorado.edu>
3452
3457
3453 * IPython/Magic.py (Magic.parse_options): new function so that
3458 * IPython/Magic.py (Magic.parse_options): new function so that
3454 magics can parse options easier.
3459 magics can parse options easier.
3455 (Magic.magic_prun): new function similar to profile.run(),
3460 (Magic.magic_prun): new function similar to profile.run(),
3456 suggested by Chris Hart.
3461 suggested by Chris Hart.
3457 (Magic.magic_cd): fixed behavior so that it only changes if
3462 (Magic.magic_cd): fixed behavior so that it only changes if
3458 directory actually is in history.
3463 directory actually is in history.
3459
3464
3460 * IPython/usage.py (__doc__): added information about potential
3465 * IPython/usage.py (__doc__): added information about potential
3461 slowness of Verbose exception mode when there are huge data
3466 slowness of Verbose exception mode when there are huge data
3462 structures to be formatted (thanks to Archie Paulson).
3467 structures to be formatted (thanks to Archie Paulson).
3463
3468
3464 * IPython/ipmaker.py (make_IPython): Changed default logging
3469 * IPython/ipmaker.py (make_IPython): Changed default logging
3465 (when simply called with -log) to use curr_dir/ipython.log in
3470 (when simply called with -log) to use curr_dir/ipython.log in
3466 rotate mode. Fixed crash which was occuring with -log before
3471 rotate mode. Fixed crash which was occuring with -log before
3467 (thanks to Jim Boyle).
3472 (thanks to Jim Boyle).
3468
3473
3469 2002-05-01 Fernando Perez <fperez@colorado.edu>
3474 2002-05-01 Fernando Perez <fperez@colorado.edu>
3470
3475
3471 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3476 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3472 was nasty -- though somewhat of a corner case).
3477 was nasty -- though somewhat of a corner case).
3473
3478
3474 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3479 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3475 text (was a bug).
3480 text (was a bug).
3476
3481
3477 2002-04-30 Fernando Perez <fperez@colorado.edu>
3482 2002-04-30 Fernando Perez <fperez@colorado.edu>
3478
3483
3479 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3484 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3480 a print after ^D or ^C from the user so that the In[] prompt
3485 a print after ^D or ^C from the user so that the In[] prompt
3481 doesn't over-run the gnuplot one.
3486 doesn't over-run the gnuplot one.
3482
3487
3483 2002-04-29 Fernando Perez <fperez@colorado.edu>
3488 2002-04-29 Fernando Perez <fperez@colorado.edu>
3484
3489
3485 * Released 0.2.10
3490 * Released 0.2.10
3486
3491
3487 * IPython/__release__.py (version): get date dynamically.
3492 * IPython/__release__.py (version): get date dynamically.
3488
3493
3489 * Misc. documentation updates thanks to Arnd's comments. Also ran
3494 * Misc. documentation updates thanks to Arnd's comments. Also ran
3490 a full spellcheck on the manual (hadn't been done in a while).
3495 a full spellcheck on the manual (hadn't been done in a while).
3491
3496
3492 2002-04-27 Fernando Perez <fperez@colorado.edu>
3497 2002-04-27 Fernando Perez <fperez@colorado.edu>
3493
3498
3494 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3499 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3495 starting a log in mid-session would reset the input history list.
3500 starting a log in mid-session would reset the input history list.
3496
3501
3497 2002-04-26 Fernando Perez <fperez@colorado.edu>
3502 2002-04-26 Fernando Perez <fperez@colorado.edu>
3498
3503
3499 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3504 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3500 all files were being included in an update. Now anything in
3505 all files were being included in an update. Now anything in
3501 UserConfig that matches [A-Za-z]*.py will go (this excludes
3506 UserConfig that matches [A-Za-z]*.py will go (this excludes
3502 __init__.py)
3507 __init__.py)
3503
3508
3504 2002-04-25 Fernando Perez <fperez@colorado.edu>
3509 2002-04-25 Fernando Perez <fperez@colorado.edu>
3505
3510
3506 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3511 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3507 to __builtins__ so that any form of embedded or imported code can
3512 to __builtins__ so that any form of embedded or imported code can
3508 test for being inside IPython.
3513 test for being inside IPython.
3509
3514
3510 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3515 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3511 changed to GnuplotMagic because it's now an importable module,
3516 changed to GnuplotMagic because it's now an importable module,
3512 this makes the name follow that of the standard Gnuplot module.
3517 this makes the name follow that of the standard Gnuplot module.
3513 GnuplotMagic can now be loaded at any time in mid-session.
3518 GnuplotMagic can now be loaded at any time in mid-session.
3514
3519
3515 2002-04-24 Fernando Perez <fperez@colorado.edu>
3520 2002-04-24 Fernando Perez <fperez@colorado.edu>
3516
3521
3517 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3522 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3518 the globals (IPython has its own namespace) and the
3523 the globals (IPython has its own namespace) and the
3519 PhysicalQuantity stuff is much better anyway.
3524 PhysicalQuantity stuff is much better anyway.
3520
3525
3521 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3526 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3522 embedding example to standard user directory for
3527 embedding example to standard user directory for
3523 distribution. Also put it in the manual.
3528 distribution. Also put it in the manual.
3524
3529
3525 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3530 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3526 instance as first argument (so it doesn't rely on some obscure
3531 instance as first argument (so it doesn't rely on some obscure
3527 hidden global).
3532 hidden global).
3528
3533
3529 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3534 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3530 delimiters. While it prevents ().TAB from working, it allows
3535 delimiters. While it prevents ().TAB from working, it allows
3531 completions in open (... expressions. This is by far a more common
3536 completions in open (... expressions. This is by far a more common
3532 case.
3537 case.
3533
3538
3534 2002-04-23 Fernando Perez <fperez@colorado.edu>
3539 2002-04-23 Fernando Perez <fperez@colorado.edu>
3535
3540
3536 * IPython/Extensions/InterpreterPasteInput.py: new
3541 * IPython/Extensions/InterpreterPasteInput.py: new
3537 syntax-processing module for pasting lines with >>> or ... at the
3542 syntax-processing module for pasting lines with >>> or ... at the
3538 start.
3543 start.
3539
3544
3540 * IPython/Extensions/PhysicalQ_Interactive.py
3545 * IPython/Extensions/PhysicalQ_Interactive.py
3541 (PhysicalQuantityInteractive.__int__): fixed to work with either
3546 (PhysicalQuantityInteractive.__int__): fixed to work with either
3542 Numeric or math.
3547 Numeric or math.
3543
3548
3544 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3549 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3545 provided profiles. Now we have:
3550 provided profiles. Now we have:
3546 -math -> math module as * and cmath with its own namespace.
3551 -math -> math module as * and cmath with its own namespace.
3547 -numeric -> Numeric as *, plus gnuplot & grace
3552 -numeric -> Numeric as *, plus gnuplot & grace
3548 -physics -> same as before
3553 -physics -> same as before
3549
3554
3550 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3555 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3551 user-defined magics wouldn't be found by @magic if they were
3556 user-defined magics wouldn't be found by @magic if they were
3552 defined as class methods. Also cleaned up the namespace search
3557 defined as class methods. Also cleaned up the namespace search
3553 logic and the string building (to use %s instead of many repeated
3558 logic and the string building (to use %s instead of many repeated
3554 string adds).
3559 string adds).
3555
3560
3556 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3561 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3557 of user-defined magics to operate with class methods (cleaner, in
3562 of user-defined magics to operate with class methods (cleaner, in
3558 line with the gnuplot code).
3563 line with the gnuplot code).
3559
3564
3560 2002-04-22 Fernando Perez <fperez@colorado.edu>
3565 2002-04-22 Fernando Perez <fperez@colorado.edu>
3561
3566
3562 * setup.py: updated dependency list so that manual is updated when
3567 * setup.py: updated dependency list so that manual is updated when
3563 all included files change.
3568 all included files change.
3564
3569
3565 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3570 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3566 the delimiter removal option (the fix is ugly right now).
3571 the delimiter removal option (the fix is ugly right now).
3567
3572
3568 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3573 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3569 all of the math profile (quicker loading, no conflict between
3574 all of the math profile (quicker loading, no conflict between
3570 g-9.8 and g-gnuplot).
3575 g-9.8 and g-gnuplot).
3571
3576
3572 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3577 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3573 name of post-mortem files to IPython_crash_report.txt.
3578 name of post-mortem files to IPython_crash_report.txt.
3574
3579
3575 * Cleanup/update of the docs. Added all the new readline info and
3580 * Cleanup/update of the docs. Added all the new readline info and
3576 formatted all lists as 'real lists'.
3581 formatted all lists as 'real lists'.
3577
3582
3578 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3583 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3579 tab-completion options, since the full readline parse_and_bind is
3584 tab-completion options, since the full readline parse_and_bind is
3580 now accessible.
3585 now accessible.
3581
3586
3582 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3587 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3583 handling of readline options. Now users can specify any string to
3588 handling of readline options. Now users can specify any string to
3584 be passed to parse_and_bind(), as well as the delimiters to be
3589 be passed to parse_and_bind(), as well as the delimiters to be
3585 removed.
3590 removed.
3586 (InteractiveShell.__init__): Added __name__ to the global
3591 (InteractiveShell.__init__): Added __name__ to the global
3587 namespace so that things like Itpl which rely on its existence
3592 namespace so that things like Itpl which rely on its existence
3588 don't crash.
3593 don't crash.
3589 (InteractiveShell._prefilter): Defined the default with a _ so
3594 (InteractiveShell._prefilter): Defined the default with a _ so
3590 that prefilter() is easier to override, while the default one
3595 that prefilter() is easier to override, while the default one
3591 remains available.
3596 remains available.
3592
3597
3593 2002-04-18 Fernando Perez <fperez@colorado.edu>
3598 2002-04-18 Fernando Perez <fperez@colorado.edu>
3594
3599
3595 * Added information about pdb in the docs.
3600 * Added information about pdb in the docs.
3596
3601
3597 2002-04-17 Fernando Perez <fperez@colorado.edu>
3602 2002-04-17 Fernando Perez <fperez@colorado.edu>
3598
3603
3599 * IPython/ipmaker.py (make_IPython): added rc_override option to
3604 * IPython/ipmaker.py (make_IPython): added rc_override option to
3600 allow passing config options at creation time which may override
3605 allow passing config options at creation time which may override
3601 anything set in the config files or command line. This is
3606 anything set in the config files or command line. This is
3602 particularly useful for configuring embedded instances.
3607 particularly useful for configuring embedded instances.
3603
3608
3604 2002-04-15 Fernando Perez <fperez@colorado.edu>
3609 2002-04-15 Fernando Perez <fperez@colorado.edu>
3605
3610
3606 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3611 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3607 crash embedded instances because of the input cache falling out of
3612 crash embedded instances because of the input cache falling out of
3608 sync with the output counter.
3613 sync with the output counter.
3609
3614
3610 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3615 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3611 mode which calls pdb after an uncaught exception in IPython itself.
3616 mode which calls pdb after an uncaught exception in IPython itself.
3612
3617
3613 2002-04-14 Fernando Perez <fperez@colorado.edu>
3618 2002-04-14 Fernando Perez <fperez@colorado.edu>
3614
3619
3615 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3620 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3616 readline, fix it back after each call.
3621 readline, fix it back after each call.
3617
3622
3618 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3623 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3619 method to force all access via __call__(), which guarantees that
3624 method to force all access via __call__(), which guarantees that
3620 traceback references are properly deleted.
3625 traceback references are properly deleted.
3621
3626
3622 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3627 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3623 improve printing when pprint is in use.
3628 improve printing when pprint is in use.
3624
3629
3625 2002-04-13 Fernando Perez <fperez@colorado.edu>
3630 2002-04-13 Fernando Perez <fperez@colorado.edu>
3626
3631
3627 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3632 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3628 exceptions aren't caught anymore. If the user triggers one, he
3633 exceptions aren't caught anymore. If the user triggers one, he
3629 should know why he's doing it and it should go all the way up,
3634 should know why he's doing it and it should go all the way up,
3630 just like any other exception. So now @abort will fully kill the
3635 just like any other exception. So now @abort will fully kill the
3631 embedded interpreter and the embedding code (unless that happens
3636 embedded interpreter and the embedding code (unless that happens
3632 to catch SystemExit).
3637 to catch SystemExit).
3633
3638
3634 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3639 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3635 and a debugger() method to invoke the interactive pdb debugger
3640 and a debugger() method to invoke the interactive pdb debugger
3636 after printing exception information. Also added the corresponding
3641 after printing exception information. Also added the corresponding
3637 -pdb option and @pdb magic to control this feature, and updated
3642 -pdb option and @pdb magic to control this feature, and updated
3638 the docs. After a suggestion from Christopher Hart
3643 the docs. After a suggestion from Christopher Hart
3639 (hart-AT-caltech.edu).
3644 (hart-AT-caltech.edu).
3640
3645
3641 2002-04-12 Fernando Perez <fperez@colorado.edu>
3646 2002-04-12 Fernando Perez <fperez@colorado.edu>
3642
3647
3643 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3648 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3644 the exception handlers defined by the user (not the CrashHandler)
3649 the exception handlers defined by the user (not the CrashHandler)
3645 so that user exceptions don't trigger an ipython bug report.
3650 so that user exceptions don't trigger an ipython bug report.
3646
3651
3647 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3652 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3648 configurable (it should have always been so).
3653 configurable (it should have always been so).
3649
3654
3650 2002-03-26 Fernando Perez <fperez@colorado.edu>
3655 2002-03-26 Fernando Perez <fperez@colorado.edu>
3651
3656
3652 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3657 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3653 and there to fix embedding namespace issues. This should all be
3658 and there to fix embedding namespace issues. This should all be
3654 done in a more elegant way.
3659 done in a more elegant way.
3655
3660
3656 2002-03-25 Fernando Perez <fperez@colorado.edu>
3661 2002-03-25 Fernando Perez <fperez@colorado.edu>
3657
3662
3658 * IPython/genutils.py (get_home_dir): Try to make it work under
3663 * IPython/genutils.py (get_home_dir): Try to make it work under
3659 win9x also.
3664 win9x also.
3660
3665
3661 2002-03-20 Fernando Perez <fperez@colorado.edu>
3666 2002-03-20 Fernando Perez <fperez@colorado.edu>
3662
3667
3663 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3668 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3664 sys.displayhook untouched upon __init__.
3669 sys.displayhook untouched upon __init__.
3665
3670
3666 2002-03-19 Fernando Perez <fperez@colorado.edu>
3671 2002-03-19 Fernando Perez <fperez@colorado.edu>
3667
3672
3668 * Released 0.2.9 (for embedding bug, basically).
3673 * Released 0.2.9 (for embedding bug, basically).
3669
3674
3670 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3675 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3671 exceptions so that enclosing shell's state can be restored.
3676 exceptions so that enclosing shell's state can be restored.
3672
3677
3673 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3678 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3674 naming conventions in the .ipython/ dir.
3679 naming conventions in the .ipython/ dir.
3675
3680
3676 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3681 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3677 from delimiters list so filenames with - in them get expanded.
3682 from delimiters list so filenames with - in them get expanded.
3678
3683
3679 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3684 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3680 sys.displayhook not being properly restored after an embedded call.
3685 sys.displayhook not being properly restored after an embedded call.
3681
3686
3682 2002-03-18 Fernando Perez <fperez@colorado.edu>
3687 2002-03-18 Fernando Perez <fperez@colorado.edu>
3683
3688
3684 * Released 0.2.8
3689 * Released 0.2.8
3685
3690
3686 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3691 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3687 some files weren't being included in a -upgrade.
3692 some files weren't being included in a -upgrade.
3688 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3693 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3689 on' so that the first tab completes.
3694 on' so that the first tab completes.
3690 (InteractiveShell.handle_magic): fixed bug with spaces around
3695 (InteractiveShell.handle_magic): fixed bug with spaces around
3691 quotes breaking many magic commands.
3696 quotes breaking many magic commands.
3692
3697
3693 * setup.py: added note about ignoring the syntax error messages at
3698 * setup.py: added note about ignoring the syntax error messages at
3694 installation.
3699 installation.
3695
3700
3696 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3701 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3697 streamlining the gnuplot interface, now there's only one magic @gp.
3702 streamlining the gnuplot interface, now there's only one magic @gp.
3698
3703
3699 2002-03-17 Fernando Perez <fperez@colorado.edu>
3704 2002-03-17 Fernando Perez <fperez@colorado.edu>
3700
3705
3701 * IPython/UserConfig/magic_gnuplot.py: new name for the
3706 * IPython/UserConfig/magic_gnuplot.py: new name for the
3702 example-magic_pm.py file. Much enhanced system, now with a shell
3707 example-magic_pm.py file. Much enhanced system, now with a shell
3703 for communicating directly with gnuplot, one command at a time.
3708 for communicating directly with gnuplot, one command at a time.
3704
3709
3705 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3710 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3706 setting __name__=='__main__'.
3711 setting __name__=='__main__'.
3707
3712
3708 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3713 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3709 mini-shell for accessing gnuplot from inside ipython. Should
3714 mini-shell for accessing gnuplot from inside ipython. Should
3710 extend it later for grace access too. Inspired by Arnd's
3715 extend it later for grace access too. Inspired by Arnd's
3711 suggestion.
3716 suggestion.
3712
3717
3713 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3718 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3714 calling magic functions with () in their arguments. Thanks to Arnd
3719 calling magic functions with () in their arguments. Thanks to Arnd
3715 Baecker for pointing this to me.
3720 Baecker for pointing this to me.
3716
3721
3717 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3722 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3718 infinitely for integer or complex arrays (only worked with floats).
3723 infinitely for integer or complex arrays (only worked with floats).
3719
3724
3720 2002-03-16 Fernando Perez <fperez@colorado.edu>
3725 2002-03-16 Fernando Perez <fperez@colorado.edu>
3721
3726
3722 * setup.py: Merged setup and setup_windows into a single script
3727 * setup.py: Merged setup and setup_windows into a single script
3723 which properly handles things for windows users.
3728 which properly handles things for windows users.
3724
3729
3725 2002-03-15 Fernando Perez <fperez@colorado.edu>
3730 2002-03-15 Fernando Perez <fperez@colorado.edu>
3726
3731
3727 * Big change to the manual: now the magics are all automatically
3732 * Big change to the manual: now the magics are all automatically
3728 documented. This information is generated from their docstrings
3733 documented. This information is generated from their docstrings
3729 and put in a latex file included by the manual lyx file. This way
3734 and put in a latex file included by the manual lyx file. This way
3730 we get always up to date information for the magics. The manual
3735 we get always up to date information for the magics. The manual
3731 now also has proper version information, also auto-synced.
3736 now also has proper version information, also auto-synced.
3732
3737
3733 For this to work, an undocumented --magic_docstrings option was added.
3738 For this to work, an undocumented --magic_docstrings option was added.
3734
3739
3735 2002-03-13 Fernando Perez <fperez@colorado.edu>
3740 2002-03-13 Fernando Perez <fperez@colorado.edu>
3736
3741
3737 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3742 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3738 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3743 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3739
3744
3740 2002-03-12 Fernando Perez <fperez@colorado.edu>
3745 2002-03-12 Fernando Perez <fperez@colorado.edu>
3741
3746
3742 * IPython/ultraTB.py (TermColors): changed color escapes again to
3747 * IPython/ultraTB.py (TermColors): changed color escapes again to
3743 fix the (old, reintroduced) line-wrapping bug. Basically, if
3748 fix the (old, reintroduced) line-wrapping bug. Basically, if
3744 \001..\002 aren't given in the color escapes, lines get wrapped
3749 \001..\002 aren't given in the color escapes, lines get wrapped
3745 weirdly. But giving those screws up old xterms and emacs terms. So
3750 weirdly. But giving those screws up old xterms and emacs terms. So
3746 I added some logic for emacs terms to be ok, but I can't identify old
3751 I added some logic for emacs terms to be ok, but I can't identify old
3747 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3752 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3748
3753
3749 2002-03-10 Fernando Perez <fperez@colorado.edu>
3754 2002-03-10 Fernando Perez <fperez@colorado.edu>
3750
3755
3751 * IPython/usage.py (__doc__): Various documentation cleanups and
3756 * IPython/usage.py (__doc__): Various documentation cleanups and
3752 updates, both in usage docstrings and in the manual.
3757 updates, both in usage docstrings and in the manual.
3753
3758
3754 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3759 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3755 handling of caching. Set minimum acceptabe value for having a
3760 handling of caching. Set minimum acceptabe value for having a
3756 cache at 20 values.
3761 cache at 20 values.
3757
3762
3758 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3763 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3759 install_first_time function to a method, renamed it and added an
3764 install_first_time function to a method, renamed it and added an
3760 'upgrade' mode. Now people can update their config directory with
3765 'upgrade' mode. Now people can update their config directory with
3761 a simple command line switch (-upgrade, also new).
3766 a simple command line switch (-upgrade, also new).
3762
3767
3763 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3768 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3764 @file (convenient for automagic users under Python >= 2.2).
3769 @file (convenient for automagic users under Python >= 2.2).
3765 Removed @files (it seemed more like a plural than an abbrev. of
3770 Removed @files (it seemed more like a plural than an abbrev. of
3766 'file show').
3771 'file show').
3767
3772
3768 * IPython/iplib.py (install_first_time): Fixed crash if there were
3773 * IPython/iplib.py (install_first_time): Fixed crash if there were
3769 backup files ('~') in .ipython/ install directory.
3774 backup files ('~') in .ipython/ install directory.
3770
3775
3771 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3776 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3772 system. Things look fine, but these changes are fairly
3777 system. Things look fine, but these changes are fairly
3773 intrusive. Test them for a few days.
3778 intrusive. Test them for a few days.
3774
3779
3775 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3780 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3776 the prompts system. Now all in/out prompt strings are user
3781 the prompts system. Now all in/out prompt strings are user
3777 controllable. This is particularly useful for embedding, as one
3782 controllable. This is particularly useful for embedding, as one
3778 can tag embedded instances with particular prompts.
3783 can tag embedded instances with particular prompts.
3779
3784
3780 Also removed global use of sys.ps1/2, which now allows nested
3785 Also removed global use of sys.ps1/2, which now allows nested
3781 embeddings without any problems. Added command-line options for
3786 embeddings without any problems. Added command-line options for
3782 the prompt strings.
3787 the prompt strings.
3783
3788
3784 2002-03-08 Fernando Perez <fperez@colorado.edu>
3789 2002-03-08 Fernando Perez <fperez@colorado.edu>
3785
3790
3786 * IPython/UserConfig/example-embed-short.py (ipshell): added
3791 * IPython/UserConfig/example-embed-short.py (ipshell): added
3787 example file with the bare minimum code for embedding.
3792 example file with the bare minimum code for embedding.
3788
3793
3789 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3794 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3790 functionality for the embeddable shell to be activated/deactivated
3795 functionality for the embeddable shell to be activated/deactivated
3791 either globally or at each call.
3796 either globally or at each call.
3792
3797
3793 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3798 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3794 rewriting the prompt with '--->' for auto-inputs with proper
3799 rewriting the prompt with '--->' for auto-inputs with proper
3795 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3800 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3796 this is handled by the prompts class itself, as it should.
3801 this is handled by the prompts class itself, as it should.
3797
3802
3798 2002-03-05 Fernando Perez <fperez@colorado.edu>
3803 2002-03-05 Fernando Perez <fperez@colorado.edu>
3799
3804
3800 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3805 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3801 @logstart to avoid name clashes with the math log function.
3806 @logstart to avoid name clashes with the math log function.
3802
3807
3803 * Big updates to X/Emacs section of the manual.
3808 * Big updates to X/Emacs section of the manual.
3804
3809
3805 * Removed ipython_emacs. Milan explained to me how to pass
3810 * Removed ipython_emacs. Milan explained to me how to pass
3806 arguments to ipython through Emacs. Some day I'm going to end up
3811 arguments to ipython through Emacs. Some day I'm going to end up
3807 learning some lisp...
3812 learning some lisp...
3808
3813
3809 2002-03-04 Fernando Perez <fperez@colorado.edu>
3814 2002-03-04 Fernando Perez <fperez@colorado.edu>
3810
3815
3811 * IPython/ipython_emacs: Created script to be used as the
3816 * IPython/ipython_emacs: Created script to be used as the
3812 py-python-command Emacs variable so we can pass IPython
3817 py-python-command Emacs variable so we can pass IPython
3813 parameters. I can't figure out how to tell Emacs directly to pass
3818 parameters. I can't figure out how to tell Emacs directly to pass
3814 parameters to IPython, so a dummy shell script will do it.
3819 parameters to IPython, so a dummy shell script will do it.
3815
3820
3816 Other enhancements made for things to work better under Emacs'
3821 Other enhancements made for things to work better under Emacs'
3817 various types of terminals. Many thanks to Milan Zamazal
3822 various types of terminals. Many thanks to Milan Zamazal
3818 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3823 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3819
3824
3820 2002-03-01 Fernando Perez <fperez@colorado.edu>
3825 2002-03-01 Fernando Perez <fperez@colorado.edu>
3821
3826
3822 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3827 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3823 that loading of readline is now optional. This gives better
3828 that loading of readline is now optional. This gives better
3824 control to emacs users.
3829 control to emacs users.
3825
3830
3826 * IPython/ultraTB.py (__date__): Modified color escape sequences
3831 * IPython/ultraTB.py (__date__): Modified color escape sequences
3827 and now things work fine under xterm and in Emacs' term buffers
3832 and now things work fine under xterm and in Emacs' term buffers
3828 (though not shell ones). Well, in emacs you get colors, but all
3833 (though not shell ones). Well, in emacs you get colors, but all
3829 seem to be 'light' colors (no difference between dark and light
3834 seem to be 'light' colors (no difference between dark and light
3830 ones). But the garbage chars are gone, and also in xterms. It
3835 ones). But the garbage chars are gone, and also in xterms. It
3831 seems that now I'm using 'cleaner' ansi sequences.
3836 seems that now I'm using 'cleaner' ansi sequences.
3832
3837
3833 2002-02-21 Fernando Perez <fperez@colorado.edu>
3838 2002-02-21 Fernando Perez <fperez@colorado.edu>
3834
3839
3835 * Released 0.2.7 (mainly to publish the scoping fix).
3840 * Released 0.2.7 (mainly to publish the scoping fix).
3836
3841
3837 * IPython/Logger.py (Logger.logstate): added. A corresponding
3842 * IPython/Logger.py (Logger.logstate): added. A corresponding
3838 @logstate magic was created.
3843 @logstate magic was created.
3839
3844
3840 * IPython/Magic.py: fixed nested scoping problem under Python
3845 * IPython/Magic.py: fixed nested scoping problem under Python
3841 2.1.x (automagic wasn't working).
3846 2.1.x (automagic wasn't working).
3842
3847
3843 2002-02-20 Fernando Perez <fperez@colorado.edu>
3848 2002-02-20 Fernando Perez <fperez@colorado.edu>
3844
3849
3845 * Released 0.2.6.
3850 * Released 0.2.6.
3846
3851
3847 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3852 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3848 option so that logs can come out without any headers at all.
3853 option so that logs can come out without any headers at all.
3849
3854
3850 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3855 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3851 SciPy.
3856 SciPy.
3852
3857
3853 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3858 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3854 that embedded IPython calls don't require vars() to be explicitly
3859 that embedded IPython calls don't require vars() to be explicitly
3855 passed. Now they are extracted from the caller's frame (code
3860 passed. Now they are extracted from the caller's frame (code
3856 snatched from Eric Jones' weave). Added better documentation to
3861 snatched from Eric Jones' weave). Added better documentation to
3857 the section on embedding and the example file.
3862 the section on embedding and the example file.
3858
3863
3859 * IPython/genutils.py (page): Changed so that under emacs, it just
3864 * IPython/genutils.py (page): Changed so that under emacs, it just
3860 prints the string. You can then page up and down in the emacs
3865 prints the string. You can then page up and down in the emacs
3861 buffer itself. This is how the builtin help() works.
3866 buffer itself. This is how the builtin help() works.
3862
3867
3863 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3868 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3864 macro scoping: macros need to be executed in the user's namespace
3869 macro scoping: macros need to be executed in the user's namespace
3865 to work as if they had been typed by the user.
3870 to work as if they had been typed by the user.
3866
3871
3867 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3872 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3868 execute automatically (no need to type 'exec...'). They then
3873 execute automatically (no need to type 'exec...'). They then
3869 behave like 'true macros'. The printing system was also modified
3874 behave like 'true macros'. The printing system was also modified
3870 for this to work.
3875 for this to work.
3871
3876
3872 2002-02-19 Fernando Perez <fperez@colorado.edu>
3877 2002-02-19 Fernando Perez <fperez@colorado.edu>
3873
3878
3874 * IPython/genutils.py (page_file): new function for paging files
3879 * IPython/genutils.py (page_file): new function for paging files
3875 in an OS-independent way. Also necessary for file viewing to work
3880 in an OS-independent way. Also necessary for file viewing to work
3876 well inside Emacs buffers.
3881 well inside Emacs buffers.
3877 (page): Added checks for being in an emacs buffer.
3882 (page): Added checks for being in an emacs buffer.
3878 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3883 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3879 same bug in iplib.
3884 same bug in iplib.
3880
3885
3881 2002-02-18 Fernando Perez <fperez@colorado.edu>
3886 2002-02-18 Fernando Perez <fperez@colorado.edu>
3882
3887
3883 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3888 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3884 of readline so that IPython can work inside an Emacs buffer.
3889 of readline so that IPython can work inside an Emacs buffer.
3885
3890
3886 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3891 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3887 method signatures (they weren't really bugs, but it looks cleaner
3892 method signatures (they weren't really bugs, but it looks cleaner
3888 and keeps PyChecker happy).
3893 and keeps PyChecker happy).
3889
3894
3890 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3895 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3891 for implementing various user-defined hooks. Currently only
3896 for implementing various user-defined hooks. Currently only
3892 display is done.
3897 display is done.
3893
3898
3894 * IPython/Prompts.py (CachedOutput._display): changed display
3899 * IPython/Prompts.py (CachedOutput._display): changed display
3895 functions so that they can be dynamically changed by users easily.
3900 functions so that they can be dynamically changed by users easily.
3896
3901
3897 * IPython/Extensions/numeric_formats.py (num_display): added an
3902 * IPython/Extensions/numeric_formats.py (num_display): added an
3898 extension for printing NumPy arrays in flexible manners. It
3903 extension for printing NumPy arrays in flexible manners. It
3899 doesn't do anything yet, but all the structure is in
3904 doesn't do anything yet, but all the structure is in
3900 place. Ultimately the plan is to implement output format control
3905 place. Ultimately the plan is to implement output format control
3901 like in Octave.
3906 like in Octave.
3902
3907
3903 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3908 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3904 methods are found at run-time by all the automatic machinery.
3909 methods are found at run-time by all the automatic machinery.
3905
3910
3906 2002-02-17 Fernando Perez <fperez@colorado.edu>
3911 2002-02-17 Fernando Perez <fperez@colorado.edu>
3907
3912
3908 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3913 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3909 whole file a little.
3914 whole file a little.
3910
3915
3911 * ToDo: closed this document. Now there's a new_design.lyx
3916 * ToDo: closed this document. Now there's a new_design.lyx
3912 document for all new ideas. Added making a pdf of it for the
3917 document for all new ideas. Added making a pdf of it for the
3913 end-user distro.
3918 end-user distro.
3914
3919
3915 * IPython/Logger.py (Logger.switch_log): Created this to replace
3920 * IPython/Logger.py (Logger.switch_log): Created this to replace
3916 logon() and logoff(). It also fixes a nasty crash reported by
3921 logon() and logoff(). It also fixes a nasty crash reported by
3917 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3922 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3918
3923
3919 * IPython/iplib.py (complete): got auto-completion to work with
3924 * IPython/iplib.py (complete): got auto-completion to work with
3920 automagic (I had wanted this for a long time).
3925 automagic (I had wanted this for a long time).
3921
3926
3922 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3927 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3923 to @file, since file() is now a builtin and clashes with automagic
3928 to @file, since file() is now a builtin and clashes with automagic
3924 for @file.
3929 for @file.
3925
3930
3926 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3931 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3927 of this was previously in iplib, which had grown to more than 2000
3932 of this was previously in iplib, which had grown to more than 2000
3928 lines, way too long. No new functionality, but it makes managing
3933 lines, way too long. No new functionality, but it makes managing
3929 the code a bit easier.
3934 the code a bit easier.
3930
3935
3931 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3936 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3932 information to crash reports.
3937 information to crash reports.
3933
3938
3934 2002-02-12 Fernando Perez <fperez@colorado.edu>
3939 2002-02-12 Fernando Perez <fperez@colorado.edu>
3935
3940
3936 * Released 0.2.5.
3941 * Released 0.2.5.
3937
3942
3938 2002-02-11 Fernando Perez <fperez@colorado.edu>
3943 2002-02-11 Fernando Perez <fperez@colorado.edu>
3939
3944
3940 * Wrote a relatively complete Windows installer. It puts
3945 * Wrote a relatively complete Windows installer. It puts
3941 everything in place, creates Start Menu entries and fixes the
3946 everything in place, creates Start Menu entries and fixes the
3942 color issues. Nothing fancy, but it works.
3947 color issues. Nothing fancy, but it works.
3943
3948
3944 2002-02-10 Fernando Perez <fperez@colorado.edu>
3949 2002-02-10 Fernando Perez <fperez@colorado.edu>
3945
3950
3946 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3951 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3947 os.path.expanduser() call so that we can type @run ~/myfile.py and
3952 os.path.expanduser() call so that we can type @run ~/myfile.py and
3948 have thigs work as expected.
3953 have thigs work as expected.
3949
3954
3950 * IPython/genutils.py (page): fixed exception handling so things
3955 * IPython/genutils.py (page): fixed exception handling so things
3951 work both in Unix and Windows correctly. Quitting a pager triggers
3956 work both in Unix and Windows correctly. Quitting a pager triggers
3952 an IOError/broken pipe in Unix, and in windows not finding a pager
3957 an IOError/broken pipe in Unix, and in windows not finding a pager
3953 is also an IOError, so I had to actually look at the return value
3958 is also an IOError, so I had to actually look at the return value
3954 of the exception, not just the exception itself. Should be ok now.
3959 of the exception, not just the exception itself. Should be ok now.
3955
3960
3956 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3961 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3957 modified to allow case-insensitive color scheme changes.
3962 modified to allow case-insensitive color scheme changes.
3958
3963
3959 2002-02-09 Fernando Perez <fperez@colorado.edu>
3964 2002-02-09 Fernando Perez <fperez@colorado.edu>
3960
3965
3961 * IPython/genutils.py (native_line_ends): new function to leave
3966 * IPython/genutils.py (native_line_ends): new function to leave
3962 user config files with os-native line-endings.
3967 user config files with os-native line-endings.
3963
3968
3964 * README and manual updates.
3969 * README and manual updates.
3965
3970
3966 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3971 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3967 instead of StringType to catch Unicode strings.
3972 instead of StringType to catch Unicode strings.
3968
3973
3969 * IPython/genutils.py (filefind): fixed bug for paths with
3974 * IPython/genutils.py (filefind): fixed bug for paths with
3970 embedded spaces (very common in Windows).
3975 embedded spaces (very common in Windows).
3971
3976
3972 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3977 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3973 files under Windows, so that they get automatically associated
3978 files under Windows, so that they get automatically associated
3974 with a text editor. Windows makes it a pain to handle
3979 with a text editor. Windows makes it a pain to handle
3975 extension-less files.
3980 extension-less files.
3976
3981
3977 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3982 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3978 warning about readline only occur for Posix. In Windows there's no
3983 warning about readline only occur for Posix. In Windows there's no
3979 way to get readline, so why bother with the warning.
3984 way to get readline, so why bother with the warning.
3980
3985
3981 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3986 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3982 for __str__ instead of dir(self), since dir() changed in 2.2.
3987 for __str__ instead of dir(self), since dir() changed in 2.2.
3983
3988
3984 * Ported to Windows! Tested on XP, I suspect it should work fine
3989 * Ported to Windows! Tested on XP, I suspect it should work fine
3985 on NT/2000, but I don't think it will work on 98 et al. That
3990 on NT/2000, but I don't think it will work on 98 et al. That
3986 series of Windows is such a piece of junk anyway that I won't try
3991 series of Windows is such a piece of junk anyway that I won't try
3987 porting it there. The XP port was straightforward, showed a few
3992 porting it there. The XP port was straightforward, showed a few
3988 bugs here and there (fixed all), in particular some string
3993 bugs here and there (fixed all), in particular some string
3989 handling stuff which required considering Unicode strings (which
3994 handling stuff which required considering Unicode strings (which
3990 Windows uses). This is good, but hasn't been too tested :) No
3995 Windows uses). This is good, but hasn't been too tested :) No
3991 fancy installer yet, I'll put a note in the manual so people at
3996 fancy installer yet, I'll put a note in the manual so people at
3992 least make manually a shortcut.
3997 least make manually a shortcut.
3993
3998
3994 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3999 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3995 into a single one, "colors". This now controls both prompt and
4000 into a single one, "colors". This now controls both prompt and
3996 exception color schemes, and can be changed both at startup
4001 exception color schemes, and can be changed both at startup
3997 (either via command-line switches or via ipythonrc files) and at
4002 (either via command-line switches or via ipythonrc files) and at
3998 runtime, with @colors.
4003 runtime, with @colors.
3999 (Magic.magic_run): renamed @prun to @run and removed the old
4004 (Magic.magic_run): renamed @prun to @run and removed the old
4000 @run. The two were too similar to warrant keeping both.
4005 @run. The two were too similar to warrant keeping both.
4001
4006
4002 2002-02-03 Fernando Perez <fperez@colorado.edu>
4007 2002-02-03 Fernando Perez <fperez@colorado.edu>
4003
4008
4004 * IPython/iplib.py (install_first_time): Added comment on how to
4009 * IPython/iplib.py (install_first_time): Added comment on how to
4005 configure the color options for first-time users. Put a <return>
4010 configure the color options for first-time users. Put a <return>
4006 request at the end so that small-terminal users get a chance to
4011 request at the end so that small-terminal users get a chance to
4007 read the startup info.
4012 read the startup info.
4008
4013
4009 2002-01-23 Fernando Perez <fperez@colorado.edu>
4014 2002-01-23 Fernando Perez <fperez@colorado.edu>
4010
4015
4011 * IPython/iplib.py (CachedOutput.update): Changed output memory
4016 * IPython/iplib.py (CachedOutput.update): Changed output memory
4012 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4017 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4013 input history we still use _i. Did this b/c these variable are
4018 input history we still use _i. Did this b/c these variable are
4014 very commonly used in interactive work, so the less we need to
4019 very commonly used in interactive work, so the less we need to
4015 type the better off we are.
4020 type the better off we are.
4016 (Magic.magic_prun): updated @prun to better handle the namespaces
4021 (Magic.magic_prun): updated @prun to better handle the namespaces
4017 the file will run in, including a fix for __name__ not being set
4022 the file will run in, including a fix for __name__ not being set
4018 before.
4023 before.
4019
4024
4020 2002-01-20 Fernando Perez <fperez@colorado.edu>
4025 2002-01-20 Fernando Perez <fperez@colorado.edu>
4021
4026
4022 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4027 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4023 extra garbage for Python 2.2. Need to look more carefully into
4028 extra garbage for Python 2.2. Need to look more carefully into
4024 this later.
4029 this later.
4025
4030
4026 2002-01-19 Fernando Perez <fperez@colorado.edu>
4031 2002-01-19 Fernando Perez <fperez@colorado.edu>
4027
4032
4028 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4033 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4029 display SyntaxError exceptions properly formatted when they occur
4034 display SyntaxError exceptions properly formatted when they occur
4030 (they can be triggered by imported code).
4035 (they can be triggered by imported code).
4031
4036
4032 2002-01-18 Fernando Perez <fperez@colorado.edu>
4037 2002-01-18 Fernando Perez <fperez@colorado.edu>
4033
4038
4034 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4039 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4035 SyntaxError exceptions are reported nicely formatted, instead of
4040 SyntaxError exceptions are reported nicely formatted, instead of
4036 spitting out only offset information as before.
4041 spitting out only offset information as before.
4037 (Magic.magic_prun): Added the @prun function for executing
4042 (Magic.magic_prun): Added the @prun function for executing
4038 programs with command line args inside IPython.
4043 programs with command line args inside IPython.
4039
4044
4040 2002-01-16 Fernando Perez <fperez@colorado.edu>
4045 2002-01-16 Fernando Perez <fperez@colorado.edu>
4041
4046
4042 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4047 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4043 to *not* include the last item given in a range. This brings their
4048 to *not* include the last item given in a range. This brings their
4044 behavior in line with Python's slicing:
4049 behavior in line with Python's slicing:
4045 a[n1:n2] -> a[n1]...a[n2-1]
4050 a[n1:n2] -> a[n1]...a[n2-1]
4046 It may be a bit less convenient, but I prefer to stick to Python's
4051 It may be a bit less convenient, but I prefer to stick to Python's
4047 conventions *everywhere*, so users never have to wonder.
4052 conventions *everywhere*, so users never have to wonder.
4048 (Magic.magic_macro): Added @macro function to ease the creation of
4053 (Magic.magic_macro): Added @macro function to ease the creation of
4049 macros.
4054 macros.
4050
4055
4051 2002-01-05 Fernando Perez <fperez@colorado.edu>
4056 2002-01-05 Fernando Perez <fperez@colorado.edu>
4052
4057
4053 * Released 0.2.4.
4058 * Released 0.2.4.
4054
4059
4055 * IPython/iplib.py (Magic.magic_pdef):
4060 * IPython/iplib.py (Magic.magic_pdef):
4056 (InteractiveShell.safe_execfile): report magic lines and error
4061 (InteractiveShell.safe_execfile): report magic lines and error
4057 lines without line numbers so one can easily copy/paste them for
4062 lines without line numbers so one can easily copy/paste them for
4058 re-execution.
4063 re-execution.
4059
4064
4060 * Updated manual with recent changes.
4065 * Updated manual with recent changes.
4061
4066
4062 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4067 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4063 docstring printing when class? is called. Very handy for knowing
4068 docstring printing when class? is called. Very handy for knowing
4064 how to create class instances (as long as __init__ is well
4069 how to create class instances (as long as __init__ is well
4065 documented, of course :)
4070 documented, of course :)
4066 (Magic.magic_doc): print both class and constructor docstrings.
4071 (Magic.magic_doc): print both class and constructor docstrings.
4067 (Magic.magic_pdef): give constructor info if passed a class and
4072 (Magic.magic_pdef): give constructor info if passed a class and
4068 __call__ info for callable object instances.
4073 __call__ info for callable object instances.
4069
4074
4070 2002-01-04 Fernando Perez <fperez@colorado.edu>
4075 2002-01-04 Fernando Perez <fperez@colorado.edu>
4071
4076
4072 * Made deep_reload() off by default. It doesn't always work
4077 * Made deep_reload() off by default. It doesn't always work
4073 exactly as intended, so it's probably safer to have it off. It's
4078 exactly as intended, so it's probably safer to have it off. It's
4074 still available as dreload() anyway, so nothing is lost.
4079 still available as dreload() anyway, so nothing is lost.
4075
4080
4076 2002-01-02 Fernando Perez <fperez@colorado.edu>
4081 2002-01-02 Fernando Perez <fperez@colorado.edu>
4077
4082
4078 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4083 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4079 so I wanted an updated release).
4084 so I wanted an updated release).
4080
4085
4081 2001-12-27 Fernando Perez <fperez@colorado.edu>
4086 2001-12-27 Fernando Perez <fperez@colorado.edu>
4082
4087
4083 * IPython/iplib.py (InteractiveShell.interact): Added the original
4088 * IPython/iplib.py (InteractiveShell.interact): Added the original
4084 code from 'code.py' for this module in order to change the
4089 code from 'code.py' for this module in order to change the
4085 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4090 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4086 the history cache would break when the user hit Ctrl-C, and
4091 the history cache would break when the user hit Ctrl-C, and
4087 interact() offers no way to add any hooks to it.
4092 interact() offers no way to add any hooks to it.
4088
4093
4089 2001-12-23 Fernando Perez <fperez@colorado.edu>
4094 2001-12-23 Fernando Perez <fperez@colorado.edu>
4090
4095
4091 * setup.py: added check for 'MANIFEST' before trying to remove
4096 * setup.py: added check for 'MANIFEST' before trying to remove
4092 it. Thanks to Sean Reifschneider.
4097 it. Thanks to Sean Reifschneider.
4093
4098
4094 2001-12-22 Fernando Perez <fperez@colorado.edu>
4099 2001-12-22 Fernando Perez <fperez@colorado.edu>
4095
4100
4096 * Released 0.2.2.
4101 * Released 0.2.2.
4097
4102
4098 * Finished (reasonably) writing the manual. Later will add the
4103 * Finished (reasonably) writing the manual. Later will add the
4099 python-standard navigation stylesheets, but for the time being
4104 python-standard navigation stylesheets, but for the time being
4100 it's fairly complete. Distribution will include html and pdf
4105 it's fairly complete. Distribution will include html and pdf
4101 versions.
4106 versions.
4102
4107
4103 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4108 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4104 (MayaVi author).
4109 (MayaVi author).
4105
4110
4106 2001-12-21 Fernando Perez <fperez@colorado.edu>
4111 2001-12-21 Fernando Perez <fperez@colorado.edu>
4107
4112
4108 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4113 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4109 good public release, I think (with the manual and the distutils
4114 good public release, I think (with the manual and the distutils
4110 installer). The manual can use some work, but that can go
4115 installer). The manual can use some work, but that can go
4111 slowly. Otherwise I think it's quite nice for end users. Next
4116 slowly. Otherwise I think it's quite nice for end users. Next
4112 summer, rewrite the guts of it...
4117 summer, rewrite the guts of it...
4113
4118
4114 * Changed format of ipythonrc files to use whitespace as the
4119 * Changed format of ipythonrc files to use whitespace as the
4115 separator instead of an explicit '='. Cleaner.
4120 separator instead of an explicit '='. Cleaner.
4116
4121
4117 2001-12-20 Fernando Perez <fperez@colorado.edu>
4122 2001-12-20 Fernando Perez <fperez@colorado.edu>
4118
4123
4119 * Started a manual in LyX. For now it's just a quick merge of the
4124 * Started a manual in LyX. For now it's just a quick merge of the
4120 various internal docstrings and READMEs. Later it may grow into a
4125 various internal docstrings and READMEs. Later it may grow into a
4121 nice, full-blown manual.
4126 nice, full-blown manual.
4122
4127
4123 * Set up a distutils based installer. Installation should now be
4128 * Set up a distutils based installer. Installation should now be
4124 trivially simple for end-users.
4129 trivially simple for end-users.
4125
4130
4126 2001-12-11 Fernando Perez <fperez@colorado.edu>
4131 2001-12-11 Fernando Perez <fperez@colorado.edu>
4127
4132
4128 * Released 0.2.0. First public release, announced it at
4133 * Released 0.2.0. First public release, announced it at
4129 comp.lang.python. From now on, just bugfixes...
4134 comp.lang.python. From now on, just bugfixes...
4130
4135
4131 * Went through all the files, set copyright/license notices and
4136 * Went through all the files, set copyright/license notices and
4132 cleaned up things. Ready for release.
4137 cleaned up things. Ready for release.
4133
4138
4134 2001-12-10 Fernando Perez <fperez@colorado.edu>
4139 2001-12-10 Fernando Perez <fperez@colorado.edu>
4135
4140
4136 * Changed the first-time installer not to use tarfiles. It's more
4141 * Changed the first-time installer not to use tarfiles. It's more
4137 robust now and less unix-dependent. Also makes it easier for
4142 robust now and less unix-dependent. Also makes it easier for
4138 people to later upgrade versions.
4143 people to later upgrade versions.
4139
4144
4140 * Changed @exit to @abort to reflect the fact that it's pretty
4145 * Changed @exit to @abort to reflect the fact that it's pretty
4141 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4146 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4142 becomes significant only when IPyhton is embedded: in that case,
4147 becomes significant only when IPyhton is embedded: in that case,
4143 C-D closes IPython only, but @abort kills the enclosing program
4148 C-D closes IPython only, but @abort kills the enclosing program
4144 too (unless it had called IPython inside a try catching
4149 too (unless it had called IPython inside a try catching
4145 SystemExit).
4150 SystemExit).
4146
4151
4147 * Created Shell module which exposes the actuall IPython Shell
4152 * Created Shell module which exposes the actuall IPython Shell
4148 classes, currently the normal and the embeddable one. This at
4153 classes, currently the normal and the embeddable one. This at
4149 least offers a stable interface we won't need to change when
4154 least offers a stable interface we won't need to change when
4150 (later) the internals are rewritten. That rewrite will be confined
4155 (later) the internals are rewritten. That rewrite will be confined
4151 to iplib and ipmaker, but the Shell interface should remain as is.
4156 to iplib and ipmaker, but the Shell interface should remain as is.
4152
4157
4153 * Added embed module which offers an embeddable IPShell object,
4158 * Added embed module which offers an embeddable IPShell object,
4154 useful to fire up IPython *inside* a running program. Great for
4159 useful to fire up IPython *inside* a running program. Great for
4155 debugging or dynamical data analysis.
4160 debugging or dynamical data analysis.
4156
4161
4157 2001-12-08 Fernando Perez <fperez@colorado.edu>
4162 2001-12-08 Fernando Perez <fperez@colorado.edu>
4158
4163
4159 * Fixed small bug preventing seeing info from methods of defined
4164 * Fixed small bug preventing seeing info from methods of defined
4160 objects (incorrect namespace in _ofind()).
4165 objects (incorrect namespace in _ofind()).
4161
4166
4162 * Documentation cleanup. Moved the main usage docstrings to a
4167 * Documentation cleanup. Moved the main usage docstrings to a
4163 separate file, usage.py (cleaner to maintain, and hopefully in the
4168 separate file, usage.py (cleaner to maintain, and hopefully in the
4164 future some perlpod-like way of producing interactive, man and
4169 future some perlpod-like way of producing interactive, man and
4165 html docs out of it will be found).
4170 html docs out of it will be found).
4166
4171
4167 * Added @profile to see your profile at any time.
4172 * Added @profile to see your profile at any time.
4168
4173
4169 * Added @p as an alias for 'print'. It's especially convenient if
4174 * Added @p as an alias for 'print'. It's especially convenient if
4170 using automagic ('p x' prints x).
4175 using automagic ('p x' prints x).
4171
4176
4172 * Small cleanups and fixes after a pychecker run.
4177 * Small cleanups and fixes after a pychecker run.
4173
4178
4174 * Changed the @cd command to handle @cd - and @cd -<n> for
4179 * Changed the @cd command to handle @cd - and @cd -<n> for
4175 visiting any directory in _dh.
4180 visiting any directory in _dh.
4176
4181
4177 * Introduced _dh, a history of visited directories. @dhist prints
4182 * Introduced _dh, a history of visited directories. @dhist prints
4178 it out with numbers.
4183 it out with numbers.
4179
4184
4180 2001-12-07 Fernando Perez <fperez@colorado.edu>
4185 2001-12-07 Fernando Perez <fperez@colorado.edu>
4181
4186
4182 * Released 0.1.22
4187 * Released 0.1.22
4183
4188
4184 * Made initialization a bit more robust against invalid color
4189 * Made initialization a bit more robust against invalid color
4185 options in user input (exit, not traceback-crash).
4190 options in user input (exit, not traceback-crash).
4186
4191
4187 * Changed the bug crash reporter to write the report only in the
4192 * Changed the bug crash reporter to write the report only in the
4188 user's .ipython directory. That way IPython won't litter people's
4193 user's .ipython directory. That way IPython won't litter people's
4189 hard disks with crash files all over the place. Also print on
4194 hard disks with crash files all over the place. Also print on
4190 screen the necessary mail command.
4195 screen the necessary mail command.
4191
4196
4192 * With the new ultraTB, implemented LightBG color scheme for light
4197 * With the new ultraTB, implemented LightBG color scheme for light
4193 background terminals. A lot of people like white backgrounds, so I
4198 background terminals. A lot of people like white backgrounds, so I
4194 guess we should at least give them something readable.
4199 guess we should at least give them something readable.
4195
4200
4196 2001-12-06 Fernando Perez <fperez@colorado.edu>
4201 2001-12-06 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * Modified the structure of ultraTB. Now there's a proper class
4203 * Modified the structure of ultraTB. Now there's a proper class
4199 for tables of color schemes which allow adding schemes easily and
4204 for tables of color schemes which allow adding schemes easily and
4200 switching the active scheme without creating a new instance every
4205 switching the active scheme without creating a new instance every
4201 time (which was ridiculous). The syntax for creating new schemes
4206 time (which was ridiculous). The syntax for creating new schemes
4202 is also cleaner. I think ultraTB is finally done, with a clean
4207 is also cleaner. I think ultraTB is finally done, with a clean
4203 class structure. Names are also much cleaner (now there's proper
4208 class structure. Names are also much cleaner (now there's proper
4204 color tables, no need for every variable to also have 'color' in
4209 color tables, no need for every variable to also have 'color' in
4205 its name).
4210 its name).
4206
4211
4207 * Broke down genutils into separate files. Now genutils only
4212 * Broke down genutils into separate files. Now genutils only
4208 contains utility functions, and classes have been moved to their
4213 contains utility functions, and classes have been moved to their
4209 own files (they had enough independent functionality to warrant
4214 own files (they had enough independent functionality to warrant
4210 it): ConfigLoader, OutputTrap, Struct.
4215 it): ConfigLoader, OutputTrap, Struct.
4211
4216
4212 2001-12-05 Fernando Perez <fperez@colorado.edu>
4217 2001-12-05 Fernando Perez <fperez@colorado.edu>
4213
4218
4214 * IPython turns 21! Released version 0.1.21, as a candidate for
4219 * IPython turns 21! Released version 0.1.21, as a candidate for
4215 public consumption. If all goes well, release in a few days.
4220 public consumption. If all goes well, release in a few days.
4216
4221
4217 * Fixed path bug (files in Extensions/ directory wouldn't be found
4222 * Fixed path bug (files in Extensions/ directory wouldn't be found
4218 unless IPython/ was explicitly in sys.path).
4223 unless IPython/ was explicitly in sys.path).
4219
4224
4220 * Extended the FlexCompleter class as MagicCompleter to allow
4225 * Extended the FlexCompleter class as MagicCompleter to allow
4221 completion of @-starting lines.
4226 completion of @-starting lines.
4222
4227
4223 * Created __release__.py file as a central repository for release
4228 * Created __release__.py file as a central repository for release
4224 info that other files can read from.
4229 info that other files can read from.
4225
4230
4226 * Fixed small bug in logging: when logging was turned on in
4231 * Fixed small bug in logging: when logging was turned on in
4227 mid-session, old lines with special meanings (!@?) were being
4232 mid-session, old lines with special meanings (!@?) were being
4228 logged without the prepended comment, which is necessary since
4233 logged without the prepended comment, which is necessary since
4229 they are not truly valid python syntax. This should make session
4234 they are not truly valid python syntax. This should make session
4230 restores produce less errors.
4235 restores produce less errors.
4231
4236
4232 * The namespace cleanup forced me to make a FlexCompleter class
4237 * The namespace cleanup forced me to make a FlexCompleter class
4233 which is nothing but a ripoff of rlcompleter, but with selectable
4238 which is nothing but a ripoff of rlcompleter, but with selectable
4234 namespace (rlcompleter only works in __main__.__dict__). I'll try
4239 namespace (rlcompleter only works in __main__.__dict__). I'll try
4235 to submit a note to the authors to see if this change can be
4240 to submit a note to the authors to see if this change can be
4236 incorporated in future rlcompleter releases (Dec.6: done)
4241 incorporated in future rlcompleter releases (Dec.6: done)
4237
4242
4238 * More fixes to namespace handling. It was a mess! Now all
4243 * More fixes to namespace handling. It was a mess! Now all
4239 explicit references to __main__.__dict__ are gone (except when
4244 explicit references to __main__.__dict__ are gone (except when
4240 really needed) and everything is handled through the namespace
4245 really needed) and everything is handled through the namespace
4241 dicts in the IPython instance. We seem to be getting somewhere
4246 dicts in the IPython instance. We seem to be getting somewhere
4242 with this, finally...
4247 with this, finally...
4243
4248
4244 * Small documentation updates.
4249 * Small documentation updates.
4245
4250
4246 * Created the Extensions directory under IPython (with an
4251 * Created the Extensions directory under IPython (with an
4247 __init__.py). Put the PhysicalQ stuff there. This directory should
4252 __init__.py). Put the PhysicalQ stuff there. This directory should
4248 be used for all special-purpose extensions.
4253 be used for all special-purpose extensions.
4249
4254
4250 * File renaming:
4255 * File renaming:
4251 ipythonlib --> ipmaker
4256 ipythonlib --> ipmaker
4252 ipplib --> iplib
4257 ipplib --> iplib
4253 This makes a bit more sense in terms of what these files actually do.
4258 This makes a bit more sense in terms of what these files actually do.
4254
4259
4255 * Moved all the classes and functions in ipythonlib to ipplib, so
4260 * Moved all the classes and functions in ipythonlib to ipplib, so
4256 now ipythonlib only has make_IPython(). This will ease up its
4261 now ipythonlib only has make_IPython(). This will ease up its
4257 splitting in smaller functional chunks later.
4262 splitting in smaller functional chunks later.
4258
4263
4259 * Cleaned up (done, I think) output of @whos. Better column
4264 * Cleaned up (done, I think) output of @whos. Better column
4260 formatting, and now shows str(var) for as much as it can, which is
4265 formatting, and now shows str(var) for as much as it can, which is
4261 typically what one gets with a 'print var'.
4266 typically what one gets with a 'print var'.
4262
4267
4263 2001-12-04 Fernando Perez <fperez@colorado.edu>
4268 2001-12-04 Fernando Perez <fperez@colorado.edu>
4264
4269
4265 * Fixed namespace problems. Now builtin/IPyhton/user names get
4270 * Fixed namespace problems. Now builtin/IPyhton/user names get
4266 properly reported in their namespace. Internal namespace handling
4271 properly reported in their namespace. Internal namespace handling
4267 is finally getting decent (not perfect yet, but much better than
4272 is finally getting decent (not perfect yet, but much better than
4268 the ad-hoc mess we had).
4273 the ad-hoc mess we had).
4269
4274
4270 * Removed -exit option. If people just want to run a python
4275 * Removed -exit option. If people just want to run a python
4271 script, that's what the normal interpreter is for. Less
4276 script, that's what the normal interpreter is for. Less
4272 unnecessary options, less chances for bugs.
4277 unnecessary options, less chances for bugs.
4273
4278
4274 * Added a crash handler which generates a complete post-mortem if
4279 * Added a crash handler which generates a complete post-mortem if
4275 IPython crashes. This will help a lot in tracking bugs down the
4280 IPython crashes. This will help a lot in tracking bugs down the
4276 road.
4281 road.
4277
4282
4278 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4283 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4279 which were boud to functions being reassigned would bypass the
4284 which were boud to functions being reassigned would bypass the
4280 logger, breaking the sync of _il with the prompt counter. This
4285 logger, breaking the sync of _il with the prompt counter. This
4281 would then crash IPython later when a new line was logged.
4286 would then crash IPython later when a new line was logged.
4282
4287
4283 2001-12-02 Fernando Perez <fperez@colorado.edu>
4288 2001-12-02 Fernando Perez <fperez@colorado.edu>
4284
4289
4285 * Made IPython a package. This means people don't have to clutter
4290 * Made IPython a package. This means people don't have to clutter
4286 their sys.path with yet another directory. Changed the INSTALL
4291 their sys.path with yet another directory. Changed the INSTALL
4287 file accordingly.
4292 file accordingly.
4288
4293
4289 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4294 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4290 sorts its output (so @who shows it sorted) and @whos formats the
4295 sorts its output (so @who shows it sorted) and @whos formats the
4291 table according to the width of the first column. Nicer, easier to
4296 table according to the width of the first column. Nicer, easier to
4292 read. Todo: write a generic table_format() which takes a list of
4297 read. Todo: write a generic table_format() which takes a list of
4293 lists and prints it nicely formatted, with optional row/column
4298 lists and prints it nicely formatted, with optional row/column
4294 separators and proper padding and justification.
4299 separators and proper padding and justification.
4295
4300
4296 * Released 0.1.20
4301 * Released 0.1.20
4297
4302
4298 * Fixed bug in @log which would reverse the inputcache list (a
4303 * Fixed bug in @log which would reverse the inputcache list (a
4299 copy operation was missing).
4304 copy operation was missing).
4300
4305
4301 * Code cleanup. @config was changed to use page(). Better, since
4306 * Code cleanup. @config was changed to use page(). Better, since
4302 its output is always quite long.
4307 its output is always quite long.
4303
4308
4304 * Itpl is back as a dependency. I was having too many problems
4309 * Itpl is back as a dependency. I was having too many problems
4305 getting the parametric aliases to work reliably, and it's just
4310 getting the parametric aliases to work reliably, and it's just
4306 easier to code weird string operations with it than playing %()s
4311 easier to code weird string operations with it than playing %()s
4307 games. It's only ~6k, so I don't think it's too big a deal.
4312 games. It's only ~6k, so I don't think it's too big a deal.
4308
4313
4309 * Found (and fixed) a very nasty bug with history. !lines weren't
4314 * Found (and fixed) a very nasty bug with history. !lines weren't
4310 getting cached, and the out of sync caches would crash
4315 getting cached, and the out of sync caches would crash
4311 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4316 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4312 division of labor a bit better. Bug fixed, cleaner structure.
4317 division of labor a bit better. Bug fixed, cleaner structure.
4313
4318
4314 2001-12-01 Fernando Perez <fperez@colorado.edu>
4319 2001-12-01 Fernando Perez <fperez@colorado.edu>
4315
4320
4316 * Released 0.1.19
4321 * Released 0.1.19
4317
4322
4318 * Added option -n to @hist to prevent line number printing. Much
4323 * Added option -n to @hist to prevent line number printing. Much
4319 easier to copy/paste code this way.
4324 easier to copy/paste code this way.
4320
4325
4321 * Created global _il to hold the input list. Allows easy
4326 * Created global _il to hold the input list. Allows easy
4322 re-execution of blocks of code by slicing it (inspired by Janko's
4327 re-execution of blocks of code by slicing it (inspired by Janko's
4323 comment on 'macros').
4328 comment on 'macros').
4324
4329
4325 * Small fixes and doc updates.
4330 * Small fixes and doc updates.
4326
4331
4327 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4332 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4328 much too fragile with automagic. Handles properly multi-line
4333 much too fragile with automagic. Handles properly multi-line
4329 statements and takes parameters.
4334 statements and takes parameters.
4330
4335
4331 2001-11-30 Fernando Perez <fperez@colorado.edu>
4336 2001-11-30 Fernando Perez <fperez@colorado.edu>
4332
4337
4333 * Version 0.1.18 released.
4338 * Version 0.1.18 released.
4334
4339
4335 * Fixed nasty namespace bug in initial module imports.
4340 * Fixed nasty namespace bug in initial module imports.
4336
4341
4337 * Added copyright/license notes to all code files (except
4342 * Added copyright/license notes to all code files (except
4338 DPyGetOpt). For the time being, LGPL. That could change.
4343 DPyGetOpt). For the time being, LGPL. That could change.
4339
4344
4340 * Rewrote a much nicer README, updated INSTALL, cleaned up
4345 * Rewrote a much nicer README, updated INSTALL, cleaned up
4341 ipythonrc-* samples.
4346 ipythonrc-* samples.
4342
4347
4343 * Overall code/documentation cleanup. Basically ready for
4348 * Overall code/documentation cleanup. Basically ready for
4344 release. Only remaining thing: licence decision (LGPL?).
4349 release. Only remaining thing: licence decision (LGPL?).
4345
4350
4346 * Converted load_config to a class, ConfigLoader. Now recursion
4351 * Converted load_config to a class, ConfigLoader. Now recursion
4347 control is better organized. Doesn't include the same file twice.
4352 control is better organized. Doesn't include the same file twice.
4348
4353
4349 2001-11-29 Fernando Perez <fperez@colorado.edu>
4354 2001-11-29 Fernando Perez <fperez@colorado.edu>
4350
4355
4351 * Got input history working. Changed output history variables from
4356 * Got input history working. Changed output history variables from
4352 _p to _o so that _i is for input and _o for output. Just cleaner
4357 _p to _o so that _i is for input and _o for output. Just cleaner
4353 convention.
4358 convention.
4354
4359
4355 * Implemented parametric aliases. This pretty much allows the
4360 * Implemented parametric aliases. This pretty much allows the
4356 alias system to offer full-blown shell convenience, I think.
4361 alias system to offer full-blown shell convenience, I think.
4357
4362
4358 * Version 0.1.17 released, 0.1.18 opened.
4363 * Version 0.1.17 released, 0.1.18 opened.
4359
4364
4360 * dot_ipython/ipythonrc (alias): added documentation.
4365 * dot_ipython/ipythonrc (alias): added documentation.
4361 (xcolor): Fixed small bug (xcolors -> xcolor)
4366 (xcolor): Fixed small bug (xcolors -> xcolor)
4362
4367
4363 * Changed the alias system. Now alias is a magic command to define
4368 * Changed the alias system. Now alias is a magic command to define
4364 aliases just like the shell. Rationale: the builtin magics should
4369 aliases just like the shell. Rationale: the builtin magics should
4365 be there for things deeply connected to IPython's
4370 be there for things deeply connected to IPython's
4366 architecture. And this is a much lighter system for what I think
4371 architecture. And this is a much lighter system for what I think
4367 is the really important feature: allowing users to define quickly
4372 is the really important feature: allowing users to define quickly
4368 magics that will do shell things for them, so they can customize
4373 magics that will do shell things for them, so they can customize
4369 IPython easily to match their work habits. If someone is really
4374 IPython easily to match their work habits. If someone is really
4370 desperate to have another name for a builtin alias, they can
4375 desperate to have another name for a builtin alias, they can
4371 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4376 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4372 works.
4377 works.
4373
4378
4374 2001-11-28 Fernando Perez <fperez@colorado.edu>
4379 2001-11-28 Fernando Perez <fperez@colorado.edu>
4375
4380
4376 * Changed @file so that it opens the source file at the proper
4381 * Changed @file so that it opens the source file at the proper
4377 line. Since it uses less, if your EDITOR environment is
4382 line. Since it uses less, if your EDITOR environment is
4378 configured, typing v will immediately open your editor of choice
4383 configured, typing v will immediately open your editor of choice
4379 right at the line where the object is defined. Not as quick as
4384 right at the line where the object is defined. Not as quick as
4380 having a direct @edit command, but for all intents and purposes it
4385 having a direct @edit command, but for all intents and purposes it
4381 works. And I don't have to worry about writing @edit to deal with
4386 works. And I don't have to worry about writing @edit to deal with
4382 all the editors, less does that.
4387 all the editors, less does that.
4383
4388
4384 * Version 0.1.16 released, 0.1.17 opened.
4389 * Version 0.1.16 released, 0.1.17 opened.
4385
4390
4386 * Fixed some nasty bugs in the page/page_dumb combo that could
4391 * Fixed some nasty bugs in the page/page_dumb combo that could
4387 crash IPython.
4392 crash IPython.
4388
4393
4389 2001-11-27 Fernando Perez <fperez@colorado.edu>
4394 2001-11-27 Fernando Perez <fperez@colorado.edu>
4390
4395
4391 * Version 0.1.15 released, 0.1.16 opened.
4396 * Version 0.1.15 released, 0.1.16 opened.
4392
4397
4393 * Finally got ? and ?? to work for undefined things: now it's
4398 * Finally got ? and ?? to work for undefined things: now it's
4394 possible to type {}.get? and get information about the get method
4399 possible to type {}.get? and get information about the get method
4395 of dicts, or os.path? even if only os is defined (so technically
4400 of dicts, or os.path? even if only os is defined (so technically
4396 os.path isn't). Works at any level. For example, after import os,
4401 os.path isn't). Works at any level. For example, after import os,
4397 os?, os.path?, os.path.abspath? all work. This is great, took some
4402 os?, os.path?, os.path.abspath? all work. This is great, took some
4398 work in _ofind.
4403 work in _ofind.
4399
4404
4400 * Fixed more bugs with logging. The sanest way to do it was to add
4405 * Fixed more bugs with logging. The sanest way to do it was to add
4401 to @log a 'mode' parameter. Killed two in one shot (this mode
4406 to @log a 'mode' parameter. Killed two in one shot (this mode
4402 option was a request of Janko's). I think it's finally clean
4407 option was a request of Janko's). I think it's finally clean
4403 (famous last words).
4408 (famous last words).
4404
4409
4405 * Added a page_dumb() pager which does a decent job of paging on
4410 * Added a page_dumb() pager which does a decent job of paging on
4406 screen, if better things (like less) aren't available. One less
4411 screen, if better things (like less) aren't available. One less
4407 unix dependency (someday maybe somebody will port this to
4412 unix dependency (someday maybe somebody will port this to
4408 windows).
4413 windows).
4409
4414
4410 * Fixed problem in magic_log: would lock of logging out if log
4415 * Fixed problem in magic_log: would lock of logging out if log
4411 creation failed (because it would still think it had succeeded).
4416 creation failed (because it would still think it had succeeded).
4412
4417
4413 * Improved the page() function using curses to auto-detect screen
4418 * Improved the page() function using curses to auto-detect screen
4414 size. Now it can make a much better decision on whether to print
4419 size. Now it can make a much better decision on whether to print
4415 or page a string. Option screen_length was modified: a value 0
4420 or page a string. Option screen_length was modified: a value 0
4416 means auto-detect, and that's the default now.
4421 means auto-detect, and that's the default now.
4417
4422
4418 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4423 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4419 go out. I'll test it for a few days, then talk to Janko about
4424 go out. I'll test it for a few days, then talk to Janko about
4420 licences and announce it.
4425 licences and announce it.
4421
4426
4422 * Fixed the length of the auto-generated ---> prompt which appears
4427 * Fixed the length of the auto-generated ---> prompt which appears
4423 for auto-parens and auto-quotes. Getting this right isn't trivial,
4428 for auto-parens and auto-quotes. Getting this right isn't trivial,
4424 with all the color escapes, different prompt types and optional
4429 with all the color escapes, different prompt types and optional
4425 separators. But it seems to be working in all the combinations.
4430 separators. But it seems to be working in all the combinations.
4426
4431
4427 2001-11-26 Fernando Perez <fperez@colorado.edu>
4432 2001-11-26 Fernando Perez <fperez@colorado.edu>
4428
4433
4429 * Wrote a regexp filter to get option types from the option names
4434 * Wrote a regexp filter to get option types from the option names
4430 string. This eliminates the need to manually keep two duplicate
4435 string. This eliminates the need to manually keep two duplicate
4431 lists.
4436 lists.
4432
4437
4433 * Removed the unneeded check_option_names. Now options are handled
4438 * Removed the unneeded check_option_names. Now options are handled
4434 in a much saner manner and it's easy to visually check that things
4439 in a much saner manner and it's easy to visually check that things
4435 are ok.
4440 are ok.
4436
4441
4437 * Updated version numbers on all files I modified to carry a
4442 * Updated version numbers on all files I modified to carry a
4438 notice so Janko and Nathan have clear version markers.
4443 notice so Janko and Nathan have clear version markers.
4439
4444
4440 * Updated docstring for ultraTB with my changes. I should send
4445 * Updated docstring for ultraTB with my changes. I should send
4441 this to Nathan.
4446 this to Nathan.
4442
4447
4443 * Lots of small fixes. Ran everything through pychecker again.
4448 * Lots of small fixes. Ran everything through pychecker again.
4444
4449
4445 * Made loading of deep_reload an cmd line option. If it's not too
4450 * Made loading of deep_reload an cmd line option. If it's not too
4446 kosher, now people can just disable it. With -nodeep_reload it's
4451 kosher, now people can just disable it. With -nodeep_reload it's
4447 still available as dreload(), it just won't overwrite reload().
4452 still available as dreload(), it just won't overwrite reload().
4448
4453
4449 * Moved many options to the no| form (-opt and -noopt
4454 * Moved many options to the no| form (-opt and -noopt
4450 accepted). Cleaner.
4455 accepted). Cleaner.
4451
4456
4452 * Changed magic_log so that if called with no parameters, it uses
4457 * Changed magic_log so that if called with no parameters, it uses
4453 'rotate' mode. That way auto-generated logs aren't automatically
4458 'rotate' mode. That way auto-generated logs aren't automatically
4454 over-written. For normal logs, now a backup is made if it exists
4459 over-written. For normal logs, now a backup is made if it exists
4455 (only 1 level of backups). A new 'backup' mode was added to the
4460 (only 1 level of backups). A new 'backup' mode was added to the
4456 Logger class to support this. This was a request by Janko.
4461 Logger class to support this. This was a request by Janko.
4457
4462
4458 * Added @logoff/@logon to stop/restart an active log.
4463 * Added @logoff/@logon to stop/restart an active log.
4459
4464
4460 * Fixed a lot of bugs in log saving/replay. It was pretty
4465 * Fixed a lot of bugs in log saving/replay. It was pretty
4461 broken. Now special lines (!@,/) appear properly in the command
4466 broken. Now special lines (!@,/) appear properly in the command
4462 history after a log replay.
4467 history after a log replay.
4463
4468
4464 * Tried and failed to implement full session saving via pickle. My
4469 * Tried and failed to implement full session saving via pickle. My
4465 idea was to pickle __main__.__dict__, but modules can't be
4470 idea was to pickle __main__.__dict__, but modules can't be
4466 pickled. This would be a better alternative to replaying logs, but
4471 pickled. This would be a better alternative to replaying logs, but
4467 seems quite tricky to get to work. Changed -session to be called
4472 seems quite tricky to get to work. Changed -session to be called
4468 -logplay, which more accurately reflects what it does. And if we
4473 -logplay, which more accurately reflects what it does. And if we
4469 ever get real session saving working, -session is now available.
4474 ever get real session saving working, -session is now available.
4470
4475
4471 * Implemented color schemes for prompts also. As for tracebacks,
4476 * Implemented color schemes for prompts also. As for tracebacks,
4472 currently only NoColor and Linux are supported. But now the
4477 currently only NoColor and Linux are supported. But now the
4473 infrastructure is in place, based on a generic ColorScheme
4478 infrastructure is in place, based on a generic ColorScheme
4474 class. So writing and activating new schemes both for the prompts
4479 class. So writing and activating new schemes both for the prompts
4475 and the tracebacks should be straightforward.
4480 and the tracebacks should be straightforward.
4476
4481
4477 * Version 0.1.13 released, 0.1.14 opened.
4482 * Version 0.1.13 released, 0.1.14 opened.
4478
4483
4479 * Changed handling of options for output cache. Now counter is
4484 * Changed handling of options for output cache. Now counter is
4480 hardwired starting at 1 and one specifies the maximum number of
4485 hardwired starting at 1 and one specifies the maximum number of
4481 entries *in the outcache* (not the max prompt counter). This is
4486 entries *in the outcache* (not the max prompt counter). This is
4482 much better, since many statements won't increase the cache
4487 much better, since many statements won't increase the cache
4483 count. It also eliminated some confusing options, now there's only
4488 count. It also eliminated some confusing options, now there's only
4484 one: cache_size.
4489 one: cache_size.
4485
4490
4486 * Added 'alias' magic function and magic_alias option in the
4491 * Added 'alias' magic function and magic_alias option in the
4487 ipythonrc file. Now the user can easily define whatever names he
4492 ipythonrc file. Now the user can easily define whatever names he
4488 wants for the magic functions without having to play weird
4493 wants for the magic functions without having to play weird
4489 namespace games. This gives IPython a real shell-like feel.
4494 namespace games. This gives IPython a real shell-like feel.
4490
4495
4491 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4496 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4492 @ or not).
4497 @ or not).
4493
4498
4494 This was one of the last remaining 'visible' bugs (that I know
4499 This was one of the last remaining 'visible' bugs (that I know
4495 of). I think if I can clean up the session loading so it works
4500 of). I think if I can clean up the session loading so it works
4496 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4501 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4497 about licensing).
4502 about licensing).
4498
4503
4499 2001-11-25 Fernando Perez <fperez@colorado.edu>
4504 2001-11-25 Fernando Perez <fperez@colorado.edu>
4500
4505
4501 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4506 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4502 there's a cleaner distinction between what ? and ?? show.
4507 there's a cleaner distinction between what ? and ?? show.
4503
4508
4504 * Added screen_length option. Now the user can define his own
4509 * Added screen_length option. Now the user can define his own
4505 screen size for page() operations.
4510 screen size for page() operations.
4506
4511
4507 * Implemented magic shell-like functions with automatic code
4512 * Implemented magic shell-like functions with automatic code
4508 generation. Now adding another function is just a matter of adding
4513 generation. Now adding another function is just a matter of adding
4509 an entry to a dict, and the function is dynamically generated at
4514 an entry to a dict, and the function is dynamically generated at
4510 run-time. Python has some really cool features!
4515 run-time. Python has some really cool features!
4511
4516
4512 * Renamed many options to cleanup conventions a little. Now all
4517 * Renamed many options to cleanup conventions a little. Now all
4513 are lowercase, and only underscores where needed. Also in the code
4518 are lowercase, and only underscores where needed. Also in the code
4514 option name tables are clearer.
4519 option name tables are clearer.
4515
4520
4516 * Changed prompts a little. Now input is 'In [n]:' instead of
4521 * Changed prompts a little. Now input is 'In [n]:' instead of
4517 'In[n]:='. This allows it the numbers to be aligned with the
4522 'In[n]:='. This allows it the numbers to be aligned with the
4518 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4523 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4519 Python (it was a Mathematica thing). The '...' continuation prompt
4524 Python (it was a Mathematica thing). The '...' continuation prompt
4520 was also changed a little to align better.
4525 was also changed a little to align better.
4521
4526
4522 * Fixed bug when flushing output cache. Not all _p<n> variables
4527 * Fixed bug when flushing output cache. Not all _p<n> variables
4523 exist, so their deletion needs to be wrapped in a try:
4528 exist, so their deletion needs to be wrapped in a try:
4524
4529
4525 * Figured out how to properly use inspect.formatargspec() (it
4530 * Figured out how to properly use inspect.formatargspec() (it
4526 requires the args preceded by *). So I removed all the code from
4531 requires the args preceded by *). So I removed all the code from
4527 _get_pdef in Magic, which was just replicating that.
4532 _get_pdef in Magic, which was just replicating that.
4528
4533
4529 * Added test to prefilter to allow redefining magic function names
4534 * Added test to prefilter to allow redefining magic function names
4530 as variables. This is ok, since the @ form is always available,
4535 as variables. This is ok, since the @ form is always available,
4531 but whe should allow the user to define a variable called 'ls' if
4536 but whe should allow the user to define a variable called 'ls' if
4532 he needs it.
4537 he needs it.
4533
4538
4534 * Moved the ToDo information from README into a separate ToDo.
4539 * Moved the ToDo information from README into a separate ToDo.
4535
4540
4536 * General code cleanup and small bugfixes. I think it's close to a
4541 * General code cleanup and small bugfixes. I think it's close to a
4537 state where it can be released, obviously with a big 'beta'
4542 state where it can be released, obviously with a big 'beta'
4538 warning on it.
4543 warning on it.
4539
4544
4540 * Got the magic function split to work. Now all magics are defined
4545 * Got the magic function split to work. Now all magics are defined
4541 in a separate class. It just organizes things a bit, and now
4546 in a separate class. It just organizes things a bit, and now
4542 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4547 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4543 was too long).
4548 was too long).
4544
4549
4545 * Changed @clear to @reset to avoid potential confusions with
4550 * Changed @clear to @reset to avoid potential confusions with
4546 the shell command clear. Also renamed @cl to @clear, which does
4551 the shell command clear. Also renamed @cl to @clear, which does
4547 exactly what people expect it to from their shell experience.
4552 exactly what people expect it to from their shell experience.
4548
4553
4549 Added a check to the @reset command (since it's so
4554 Added a check to the @reset command (since it's so
4550 destructive, it's probably a good idea to ask for confirmation).
4555 destructive, it's probably a good idea to ask for confirmation).
4551 But now reset only works for full namespace resetting. Since the
4556 But now reset only works for full namespace resetting. Since the
4552 del keyword is already there for deleting a few specific
4557 del keyword is already there for deleting a few specific
4553 variables, I don't see the point of having a redundant magic
4558 variables, I don't see the point of having a redundant magic
4554 function for the same task.
4559 function for the same task.
4555
4560
4556 2001-11-24 Fernando Perez <fperez@colorado.edu>
4561 2001-11-24 Fernando Perez <fperez@colorado.edu>
4557
4562
4558 * Updated the builtin docs (esp. the ? ones).
4563 * Updated the builtin docs (esp. the ? ones).
4559
4564
4560 * Ran all the code through pychecker. Not terribly impressed with
4565 * Ran all the code through pychecker. Not terribly impressed with
4561 it: lots of spurious warnings and didn't really find anything of
4566 it: lots of spurious warnings and didn't really find anything of
4562 substance (just a few modules being imported and not used).
4567 substance (just a few modules being imported and not used).
4563
4568
4564 * Implemented the new ultraTB functionality into IPython. New
4569 * Implemented the new ultraTB functionality into IPython. New
4565 option: xcolors. This chooses color scheme. xmode now only selects
4570 option: xcolors. This chooses color scheme. xmode now only selects
4566 between Plain and Verbose. Better orthogonality.
4571 between Plain and Verbose. Better orthogonality.
4567
4572
4568 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4573 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4569 mode and color scheme for the exception handlers. Now it's
4574 mode and color scheme for the exception handlers. Now it's
4570 possible to have the verbose traceback with no coloring.
4575 possible to have the verbose traceback with no coloring.
4571
4576
4572 2001-11-23 Fernando Perez <fperez@colorado.edu>
4577 2001-11-23 Fernando Perez <fperez@colorado.edu>
4573
4578
4574 * Version 0.1.12 released, 0.1.13 opened.
4579 * Version 0.1.12 released, 0.1.13 opened.
4575
4580
4576 * Removed option to set auto-quote and auto-paren escapes by
4581 * Removed option to set auto-quote and auto-paren escapes by
4577 user. The chances of breaking valid syntax are just too high. If
4582 user. The chances of breaking valid syntax are just too high. If
4578 someone *really* wants, they can always dig into the code.
4583 someone *really* wants, they can always dig into the code.
4579
4584
4580 * Made prompt separators configurable.
4585 * Made prompt separators configurable.
4581
4586
4582 2001-11-22 Fernando Perez <fperez@colorado.edu>
4587 2001-11-22 Fernando Perez <fperez@colorado.edu>
4583
4588
4584 * Small bugfixes in many places.
4589 * Small bugfixes in many places.
4585
4590
4586 * Removed the MyCompleter class from ipplib. It seemed redundant
4591 * Removed the MyCompleter class from ipplib. It seemed redundant
4587 with the C-p,C-n history search functionality. Less code to
4592 with the C-p,C-n history search functionality. Less code to
4588 maintain.
4593 maintain.
4589
4594
4590 * Moved all the original ipython.py code into ipythonlib.py. Right
4595 * Moved all the original ipython.py code into ipythonlib.py. Right
4591 now it's just one big dump into a function called make_IPython, so
4596 now it's just one big dump into a function called make_IPython, so
4592 no real modularity has been gained. But at least it makes the
4597 no real modularity has been gained. But at least it makes the
4593 wrapper script tiny, and since ipythonlib is a module, it gets
4598 wrapper script tiny, and since ipythonlib is a module, it gets
4594 compiled and startup is much faster.
4599 compiled and startup is much faster.
4595
4600
4596 This is a reasobably 'deep' change, so we should test it for a
4601 This is a reasobably 'deep' change, so we should test it for a
4597 while without messing too much more with the code.
4602 while without messing too much more with the code.
4598
4603
4599 2001-11-21 Fernando Perez <fperez@colorado.edu>
4604 2001-11-21 Fernando Perez <fperez@colorado.edu>
4600
4605
4601 * Version 0.1.11 released, 0.1.12 opened for further work.
4606 * Version 0.1.11 released, 0.1.12 opened for further work.
4602
4607
4603 * Removed dependency on Itpl. It was only needed in one place. It
4608 * Removed dependency on Itpl. It was only needed in one place. It
4604 would be nice if this became part of python, though. It makes life
4609 would be nice if this became part of python, though. It makes life
4605 *a lot* easier in some cases.
4610 *a lot* easier in some cases.
4606
4611
4607 * Simplified the prefilter code a bit. Now all handlers are
4612 * Simplified the prefilter code a bit. Now all handlers are
4608 expected to explicitly return a value (at least a blank string).
4613 expected to explicitly return a value (at least a blank string).
4609
4614
4610 * Heavy edits in ipplib. Removed the help system altogether. Now
4615 * Heavy edits in ipplib. Removed the help system altogether. Now
4611 obj?/?? is used for inspecting objects, a magic @doc prints
4616 obj?/?? is used for inspecting objects, a magic @doc prints
4612 docstrings, and full-blown Python help is accessed via the 'help'
4617 docstrings, and full-blown Python help is accessed via the 'help'
4613 keyword. This cleans up a lot of code (less to maintain) and does
4618 keyword. This cleans up a lot of code (less to maintain) and does
4614 the job. Since 'help' is now a standard Python component, might as
4619 the job. Since 'help' is now a standard Python component, might as
4615 well use it and remove duplicate functionality.
4620 well use it and remove duplicate functionality.
4616
4621
4617 Also removed the option to use ipplib as a standalone program. By
4622 Also removed the option to use ipplib as a standalone program. By
4618 now it's too dependent on other parts of IPython to function alone.
4623 now it's too dependent on other parts of IPython to function alone.
4619
4624
4620 * Fixed bug in genutils.pager. It would crash if the pager was
4625 * Fixed bug in genutils.pager. It would crash if the pager was
4621 exited immediately after opening (broken pipe).
4626 exited immediately after opening (broken pipe).
4622
4627
4623 * Trimmed down the VerboseTB reporting a little. The header is
4628 * Trimmed down the VerboseTB reporting a little. The header is
4624 much shorter now and the repeated exception arguments at the end
4629 much shorter now and the repeated exception arguments at the end
4625 have been removed. For interactive use the old header seemed a bit
4630 have been removed. For interactive use the old header seemed a bit
4626 excessive.
4631 excessive.
4627
4632
4628 * Fixed small bug in output of @whos for variables with multi-word
4633 * Fixed small bug in output of @whos for variables with multi-word
4629 types (only first word was displayed).
4634 types (only first word was displayed).
4630
4635
4631 2001-11-17 Fernando Perez <fperez@colorado.edu>
4636 2001-11-17 Fernando Perez <fperez@colorado.edu>
4632
4637
4633 * Version 0.1.10 released, 0.1.11 opened for further work.
4638 * Version 0.1.10 released, 0.1.11 opened for further work.
4634
4639
4635 * Modified dirs and friends. dirs now *returns* the stack (not
4640 * Modified dirs and friends. dirs now *returns* the stack (not
4636 prints), so one can manipulate it as a variable. Convenient to
4641 prints), so one can manipulate it as a variable. Convenient to
4637 travel along many directories.
4642 travel along many directories.
4638
4643
4639 * Fixed bug in magic_pdef: would only work with functions with
4644 * Fixed bug in magic_pdef: would only work with functions with
4640 arguments with default values.
4645 arguments with default values.
4641
4646
4642 2001-11-14 Fernando Perez <fperez@colorado.edu>
4647 2001-11-14 Fernando Perez <fperez@colorado.edu>
4643
4648
4644 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4649 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4645 example with IPython. Various other minor fixes and cleanups.
4650 example with IPython. Various other minor fixes and cleanups.
4646
4651
4647 * Version 0.1.9 released, 0.1.10 opened for further work.
4652 * Version 0.1.9 released, 0.1.10 opened for further work.
4648
4653
4649 * Added sys.path to the list of directories searched in the
4654 * Added sys.path to the list of directories searched in the
4650 execfile= option. It used to be the current directory and the
4655 execfile= option. It used to be the current directory and the
4651 user's IPYTHONDIR only.
4656 user's IPYTHONDIR only.
4652
4657
4653 2001-11-13 Fernando Perez <fperez@colorado.edu>
4658 2001-11-13 Fernando Perez <fperez@colorado.edu>
4654
4659
4655 * Reinstated the raw_input/prefilter separation that Janko had
4660 * Reinstated the raw_input/prefilter separation that Janko had
4656 initially. This gives a more convenient setup for extending the
4661 initially. This gives a more convenient setup for extending the
4657 pre-processor from the outside: raw_input always gets a string,
4662 pre-processor from the outside: raw_input always gets a string,
4658 and prefilter has to process it. We can then redefine prefilter
4663 and prefilter has to process it. We can then redefine prefilter
4659 from the outside and implement extensions for special
4664 from the outside and implement extensions for special
4660 purposes.
4665 purposes.
4661
4666
4662 Today I got one for inputting PhysicalQuantity objects
4667 Today I got one for inputting PhysicalQuantity objects
4663 (from Scientific) without needing any function calls at
4668 (from Scientific) without needing any function calls at
4664 all. Extremely convenient, and it's all done as a user-level
4669 all. Extremely convenient, and it's all done as a user-level
4665 extension (no IPython code was touched). Now instead of:
4670 extension (no IPython code was touched). Now instead of:
4666 a = PhysicalQuantity(4.2,'m/s**2')
4671 a = PhysicalQuantity(4.2,'m/s**2')
4667 one can simply say
4672 one can simply say
4668 a = 4.2 m/s**2
4673 a = 4.2 m/s**2
4669 or even
4674 or even
4670 a = 4.2 m/s^2
4675 a = 4.2 m/s^2
4671
4676
4672 I use this, but it's also a proof of concept: IPython really is
4677 I use this, but it's also a proof of concept: IPython really is
4673 fully user-extensible, even at the level of the parsing of the
4678 fully user-extensible, even at the level of the parsing of the
4674 command line. It's not trivial, but it's perfectly doable.
4679 command line. It's not trivial, but it's perfectly doable.
4675
4680
4676 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4681 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4677 the problem of modules being loaded in the inverse order in which
4682 the problem of modules being loaded in the inverse order in which
4678 they were defined in
4683 they were defined in
4679
4684
4680 * Version 0.1.8 released, 0.1.9 opened for further work.
4685 * Version 0.1.8 released, 0.1.9 opened for further work.
4681
4686
4682 * Added magics pdef, source and file. They respectively show the
4687 * Added magics pdef, source and file. They respectively show the
4683 definition line ('prototype' in C), source code and full python
4688 definition line ('prototype' in C), source code and full python
4684 file for any callable object. The object inspector oinfo uses
4689 file for any callable object. The object inspector oinfo uses
4685 these to show the same information.
4690 these to show the same information.
4686
4691
4687 * Version 0.1.7 released, 0.1.8 opened for further work.
4692 * Version 0.1.7 released, 0.1.8 opened for further work.
4688
4693
4689 * Separated all the magic functions into a class called Magic. The
4694 * Separated all the magic functions into a class called Magic. The
4690 InteractiveShell class was becoming too big for Xemacs to handle
4695 InteractiveShell class was becoming too big for Xemacs to handle
4691 (de-indenting a line would lock it up for 10 seconds while it
4696 (de-indenting a line would lock it up for 10 seconds while it
4692 backtracked on the whole class!)
4697 backtracked on the whole class!)
4693
4698
4694 FIXME: didn't work. It can be done, but right now namespaces are
4699 FIXME: didn't work. It can be done, but right now namespaces are
4695 all messed up. Do it later (reverted it for now, so at least
4700 all messed up. Do it later (reverted it for now, so at least
4696 everything works as before).
4701 everything works as before).
4697
4702
4698 * Got the object introspection system (magic_oinfo) working! I
4703 * Got the object introspection system (magic_oinfo) working! I
4699 think this is pretty much ready for release to Janko, so he can
4704 think this is pretty much ready for release to Janko, so he can
4700 test it for a while and then announce it. Pretty much 100% of what
4705 test it for a while and then announce it. Pretty much 100% of what
4701 I wanted for the 'phase 1' release is ready. Happy, tired.
4706 I wanted for the 'phase 1' release is ready. Happy, tired.
4702
4707
4703 2001-11-12 Fernando Perez <fperez@colorado.edu>
4708 2001-11-12 Fernando Perez <fperez@colorado.edu>
4704
4709
4705 * Version 0.1.6 released, 0.1.7 opened for further work.
4710 * Version 0.1.6 released, 0.1.7 opened for further work.
4706
4711
4707 * Fixed bug in printing: it used to test for truth before
4712 * Fixed bug in printing: it used to test for truth before
4708 printing, so 0 wouldn't print. Now checks for None.
4713 printing, so 0 wouldn't print. Now checks for None.
4709
4714
4710 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4715 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4711 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4716 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4712 reaches by hand into the outputcache. Think of a better way to do
4717 reaches by hand into the outputcache. Think of a better way to do
4713 this later.
4718 this later.
4714
4719
4715 * Various small fixes thanks to Nathan's comments.
4720 * Various small fixes thanks to Nathan's comments.
4716
4721
4717 * Changed magic_pprint to magic_Pprint. This way it doesn't
4722 * Changed magic_pprint to magic_Pprint. This way it doesn't
4718 collide with pprint() and the name is consistent with the command
4723 collide with pprint() and the name is consistent with the command
4719 line option.
4724 line option.
4720
4725
4721 * Changed prompt counter behavior to be fully like
4726 * Changed prompt counter behavior to be fully like
4722 Mathematica's. That is, even input that doesn't return a result
4727 Mathematica's. That is, even input that doesn't return a result
4723 raises the prompt counter. The old behavior was kind of confusing
4728 raises the prompt counter. The old behavior was kind of confusing
4724 (getting the same prompt number several times if the operation
4729 (getting the same prompt number several times if the operation
4725 didn't return a result).
4730 didn't return a result).
4726
4731
4727 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4732 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4728
4733
4729 * Fixed -Classic mode (wasn't working anymore).
4734 * Fixed -Classic mode (wasn't working anymore).
4730
4735
4731 * Added colored prompts using Nathan's new code. Colors are
4736 * Added colored prompts using Nathan's new code. Colors are
4732 currently hardwired, they can be user-configurable. For
4737 currently hardwired, they can be user-configurable. For
4733 developers, they can be chosen in file ipythonlib.py, at the
4738 developers, they can be chosen in file ipythonlib.py, at the
4734 beginning of the CachedOutput class def.
4739 beginning of the CachedOutput class def.
4735
4740
4736 2001-11-11 Fernando Perez <fperez@colorado.edu>
4741 2001-11-11 Fernando Perez <fperez@colorado.edu>
4737
4742
4738 * Version 0.1.5 released, 0.1.6 opened for further work.
4743 * Version 0.1.5 released, 0.1.6 opened for further work.
4739
4744
4740 * Changed magic_env to *return* the environment as a dict (not to
4745 * Changed magic_env to *return* the environment as a dict (not to
4741 print it). This way it prints, but it can also be processed.
4746 print it). This way it prints, but it can also be processed.
4742
4747
4743 * Added Verbose exception reporting to interactive
4748 * Added Verbose exception reporting to interactive
4744 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4749 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4745 traceback. Had to make some changes to the ultraTB file. This is
4750 traceback. Had to make some changes to the ultraTB file. This is
4746 probably the last 'big' thing in my mental todo list. This ties
4751 probably the last 'big' thing in my mental todo list. This ties
4747 in with the next entry:
4752 in with the next entry:
4748
4753
4749 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4754 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4750 has to specify is Plain, Color or Verbose for all exception
4755 has to specify is Plain, Color or Verbose for all exception
4751 handling.
4756 handling.
4752
4757
4753 * Removed ShellServices option. All this can really be done via
4758 * Removed ShellServices option. All this can really be done via
4754 the magic system. It's easier to extend, cleaner and has automatic
4759 the magic system. It's easier to extend, cleaner and has automatic
4755 namespace protection and documentation.
4760 namespace protection and documentation.
4756
4761
4757 2001-11-09 Fernando Perez <fperez@colorado.edu>
4762 2001-11-09 Fernando Perez <fperez@colorado.edu>
4758
4763
4759 * Fixed bug in output cache flushing (missing parameter to
4764 * Fixed bug in output cache flushing (missing parameter to
4760 __init__). Other small bugs fixed (found using pychecker).
4765 __init__). Other small bugs fixed (found using pychecker).
4761
4766
4762 * Version 0.1.4 opened for bugfixing.
4767 * Version 0.1.4 opened for bugfixing.
4763
4768
4764 2001-11-07 Fernando Perez <fperez@colorado.edu>
4769 2001-11-07 Fernando Perez <fperez@colorado.edu>
4765
4770
4766 * Version 0.1.3 released, mainly because of the raw_input bug.
4771 * Version 0.1.3 released, mainly because of the raw_input bug.
4767
4772
4768 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4773 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4769 and when testing for whether things were callable, a call could
4774 and when testing for whether things were callable, a call could
4770 actually be made to certain functions. They would get called again
4775 actually be made to certain functions. They would get called again
4771 once 'really' executed, with a resulting double call. A disaster
4776 once 'really' executed, with a resulting double call. A disaster
4772 in many cases (list.reverse() would never work!).
4777 in many cases (list.reverse() would never work!).
4773
4778
4774 * Removed prefilter() function, moved its code to raw_input (which
4779 * Removed prefilter() function, moved its code to raw_input (which
4775 after all was just a near-empty caller for prefilter). This saves
4780 after all was just a near-empty caller for prefilter). This saves
4776 a function call on every prompt, and simplifies the class a tiny bit.
4781 a function call on every prompt, and simplifies the class a tiny bit.
4777
4782
4778 * Fix _ip to __ip name in magic example file.
4783 * Fix _ip to __ip name in magic example file.
4779
4784
4780 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4785 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4781 work with non-gnu versions of tar.
4786 work with non-gnu versions of tar.
4782
4787
4783 2001-11-06 Fernando Perez <fperez@colorado.edu>
4788 2001-11-06 Fernando Perez <fperez@colorado.edu>
4784
4789
4785 * Version 0.1.2. Just to keep track of the recent changes.
4790 * Version 0.1.2. Just to keep track of the recent changes.
4786
4791
4787 * Fixed nasty bug in output prompt routine. It used to check 'if
4792 * Fixed nasty bug in output prompt routine. It used to check 'if
4788 arg != None...'. Problem is, this fails if arg implements a
4793 arg != None...'. Problem is, this fails if arg implements a
4789 special comparison (__cmp__) which disallows comparing to
4794 special comparison (__cmp__) which disallows comparing to
4790 None. Found it when trying to use the PhysicalQuantity module from
4795 None. Found it when trying to use the PhysicalQuantity module from
4791 ScientificPython.
4796 ScientificPython.
4792
4797
4793 2001-11-05 Fernando Perez <fperez@colorado.edu>
4798 2001-11-05 Fernando Perez <fperez@colorado.edu>
4794
4799
4795 * Also added dirs. Now the pushd/popd/dirs family functions
4800 * Also added dirs. Now the pushd/popd/dirs family functions
4796 basically like the shell, with the added convenience of going home
4801 basically like the shell, with the added convenience of going home
4797 when called with no args.
4802 when called with no args.
4798
4803
4799 * pushd/popd slightly modified to mimic shell behavior more
4804 * pushd/popd slightly modified to mimic shell behavior more
4800 closely.
4805 closely.
4801
4806
4802 * Added env,pushd,popd from ShellServices as magic functions. I
4807 * Added env,pushd,popd from ShellServices as magic functions. I
4803 think the cleanest will be to port all desired functions from
4808 think the cleanest will be to port all desired functions from
4804 ShellServices as magics and remove ShellServices altogether. This
4809 ShellServices as magics and remove ShellServices altogether. This
4805 will provide a single, clean way of adding functionality
4810 will provide a single, clean way of adding functionality
4806 (shell-type or otherwise) to IP.
4811 (shell-type or otherwise) to IP.
4807
4812
4808 2001-11-04 Fernando Perez <fperez@colorado.edu>
4813 2001-11-04 Fernando Perez <fperez@colorado.edu>
4809
4814
4810 * Added .ipython/ directory to sys.path. This way users can keep
4815 * Added .ipython/ directory to sys.path. This way users can keep
4811 customizations there and access them via import.
4816 customizations there and access them via import.
4812
4817
4813 2001-11-03 Fernando Perez <fperez@colorado.edu>
4818 2001-11-03 Fernando Perez <fperez@colorado.edu>
4814
4819
4815 * Opened version 0.1.1 for new changes.
4820 * Opened version 0.1.1 for new changes.
4816
4821
4817 * Changed version number to 0.1.0: first 'public' release, sent to
4822 * Changed version number to 0.1.0: first 'public' release, sent to
4818 Nathan and Janko.
4823 Nathan and Janko.
4819
4824
4820 * Lots of small fixes and tweaks.
4825 * Lots of small fixes and tweaks.
4821
4826
4822 * Minor changes to whos format. Now strings are shown, snipped if
4827 * Minor changes to whos format. Now strings are shown, snipped if
4823 too long.
4828 too long.
4824
4829
4825 * Changed ShellServices to work on __main__ so they show up in @who
4830 * Changed ShellServices to work on __main__ so they show up in @who
4826
4831
4827 * Help also works with ? at the end of a line:
4832 * Help also works with ? at the end of a line:
4828 ?sin and sin?
4833 ?sin and sin?
4829 both produce the same effect. This is nice, as often I use the
4834 both produce the same effect. This is nice, as often I use the
4830 tab-complete to find the name of a method, but I used to then have
4835 tab-complete to find the name of a method, but I used to then have
4831 to go to the beginning of the line to put a ? if I wanted more
4836 to go to the beginning of the line to put a ? if I wanted more
4832 info. Now I can just add the ? and hit return. Convenient.
4837 info. Now I can just add the ? and hit return. Convenient.
4833
4838
4834 2001-11-02 Fernando Perez <fperez@colorado.edu>
4839 2001-11-02 Fernando Perez <fperez@colorado.edu>
4835
4840
4836 * Python version check (>=2.1) added.
4841 * Python version check (>=2.1) added.
4837
4842
4838 * Added LazyPython documentation. At this point the docs are quite
4843 * Added LazyPython documentation. At this point the docs are quite
4839 a mess. A cleanup is in order.
4844 a mess. A cleanup is in order.
4840
4845
4841 * Auto-installer created. For some bizarre reason, the zipfiles
4846 * Auto-installer created. For some bizarre reason, the zipfiles
4842 module isn't working on my system. So I made a tar version
4847 module isn't working on my system. So I made a tar version
4843 (hopefully the command line options in various systems won't kill
4848 (hopefully the command line options in various systems won't kill
4844 me).
4849 me).
4845
4850
4846 * Fixes to Struct in genutils. Now all dictionary-like methods are
4851 * Fixes to Struct in genutils. Now all dictionary-like methods are
4847 protected (reasonably).
4852 protected (reasonably).
4848
4853
4849 * Added pager function to genutils and changed ? to print usage
4854 * Added pager function to genutils and changed ? to print usage
4850 note through it (it was too long).
4855 note through it (it was too long).
4851
4856
4852 * Added the LazyPython functionality. Works great! I changed the
4857 * Added the LazyPython functionality. Works great! I changed the
4853 auto-quote escape to ';', it's on home row and next to '. But
4858 auto-quote escape to ';', it's on home row and next to '. But
4854 both auto-quote and auto-paren (still /) escapes are command-line
4859 both auto-quote and auto-paren (still /) escapes are command-line
4855 parameters.
4860 parameters.
4856
4861
4857
4862
4858 2001-11-01 Fernando Perez <fperez@colorado.edu>
4863 2001-11-01 Fernando Perez <fperez@colorado.edu>
4859
4864
4860 * Version changed to 0.0.7. Fairly large change: configuration now
4865 * Version changed to 0.0.7. Fairly large change: configuration now
4861 is all stored in a directory, by default .ipython. There, all
4866 is all stored in a directory, by default .ipython. There, all
4862 config files have normal looking names (not .names)
4867 config files have normal looking names (not .names)
4863
4868
4864 * Version 0.0.6 Released first to Lucas and Archie as a test
4869 * Version 0.0.6 Released first to Lucas and Archie as a test
4865 run. Since it's the first 'semi-public' release, change version to
4870 run. Since it's the first 'semi-public' release, change version to
4866 > 0.0.6 for any changes now.
4871 > 0.0.6 for any changes now.
4867
4872
4868 * Stuff I had put in the ipplib.py changelog:
4873 * Stuff I had put in the ipplib.py changelog:
4869
4874
4870 Changes to InteractiveShell:
4875 Changes to InteractiveShell:
4871
4876
4872 - Made the usage message a parameter.
4877 - Made the usage message a parameter.
4873
4878
4874 - Require the name of the shell variable to be given. It's a bit
4879 - Require the name of the shell variable to be given. It's a bit
4875 of a hack, but allows the name 'shell' not to be hardwire in the
4880 of a hack, but allows the name 'shell' not to be hardwire in the
4876 magic (@) handler, which is problematic b/c it requires
4881 magic (@) handler, which is problematic b/c it requires
4877 polluting the global namespace with 'shell'. This in turn is
4882 polluting the global namespace with 'shell'. This in turn is
4878 fragile: if a user redefines a variable called shell, things
4883 fragile: if a user redefines a variable called shell, things
4879 break.
4884 break.
4880
4885
4881 - magic @: all functions available through @ need to be defined
4886 - magic @: all functions available through @ need to be defined
4882 as magic_<name>, even though they can be called simply as
4887 as magic_<name>, even though they can be called simply as
4883 @<name>. This allows the special command @magic to gather
4888 @<name>. This allows the special command @magic to gather
4884 information automatically about all existing magic functions,
4889 information automatically about all existing magic functions,
4885 even if they are run-time user extensions, by parsing the shell
4890 even if they are run-time user extensions, by parsing the shell
4886 instance __dict__ looking for special magic_ names.
4891 instance __dict__ looking for special magic_ names.
4887
4892
4888 - mainloop: added *two* local namespace parameters. This allows
4893 - mainloop: added *two* local namespace parameters. This allows
4889 the class to differentiate between parameters which were there
4894 the class to differentiate between parameters which were there
4890 before and after command line initialization was processed. This
4895 before and after command line initialization was processed. This
4891 way, later @who can show things loaded at startup by the
4896 way, later @who can show things loaded at startup by the
4892 user. This trick was necessary to make session saving/reloading
4897 user. This trick was necessary to make session saving/reloading
4893 really work: ideally after saving/exiting/reloading a session,
4898 really work: ideally after saving/exiting/reloading a session,
4894 *everythin* should look the same, including the output of @who. I
4899 *everythin* should look the same, including the output of @who. I
4895 was only able to make this work with this double namespace
4900 was only able to make this work with this double namespace
4896 trick.
4901 trick.
4897
4902
4898 - added a header to the logfile which allows (almost) full
4903 - added a header to the logfile which allows (almost) full
4899 session restoring.
4904 session restoring.
4900
4905
4901 - prepend lines beginning with @ or !, with a and log
4906 - prepend lines beginning with @ or !, with a and log
4902 them. Why? !lines: may be useful to know what you did @lines:
4907 them. Why? !lines: may be useful to know what you did @lines:
4903 they may affect session state. So when restoring a session, at
4908 they may affect session state. So when restoring a session, at
4904 least inform the user of their presence. I couldn't quite get
4909 least inform the user of their presence. I couldn't quite get
4905 them to properly re-execute, but at least the user is warned.
4910 them to properly re-execute, but at least the user is warned.
4906
4911
4907 * Started ChangeLog.
4912 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now