##// END OF EJS Templates
Added ipapi, the extension api for ipython....
vivainio -
Show More
@@ -0,0 +1,78 b''
1 ''' IPython customization API
2
3 Your one-stop module for configuring ipython
4
5 This is experimental, use at your own risk.
6
7 All names prefixed by underscores are for internal use, not part
8 of the public api.
9
10 No formal doc yet, here's an example that you can just put
11 to a module and import from ipython.
12
13 -----------------------------------------------
14 import IPython.ipapi as ip
15
16 def ankka_f(self, arg):
17 print "Ankka",self,"says uppercase:",arg.upper()
18
19 ip.expose_magic("ankka",ankka_f)
20
21 ip.magic('alias sayhi echo "Testing, hi ok"')
22 ip.magic('alias helloworld echo "Hello world"')
23 ip.system('pwd')
24
25 ip.ex('import re')
26 ip.ex("""
27 def funcci(a,b):
28 print a+b
29 print funcci(3,4)
30 """)
31 ip.ex("funcci(348,9)")
32
33 def jed_editor(self,filename, linenum=None):
34 print "Calling my own editor, jed ... via hook!"
35 import os
36 if linenum is None: linenum = 0
37 os.system('jed +%d %s' % (linenum, filename))
38 print "exiting jed"
39
40 ip.set_hook('editor',jed_editor)
41 print "done!"
42
43 '''
44
45
46
47
48 def _init_with_shell(ip):
49 global magic
50 magic = ip.ipmagic
51 global system
52 system = ip.ipsystem
53 global set_hook
54 set_hook = ip.set_hook
55 global __IP
56 __IP = ip
57
58 def user_ns():
59 return __IP.user_ns
60
61 def expose_magic(magicname, func):
62 ''' Expose own function as magic function for ipython
63
64 def foo_impl(self,parameter_s=''):
65 """My very own magic!. (Use docstrings, IPython reads them)."""
66 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
67 print 'The self object is:',self
68
69 ipapi.expose_magic("foo",foo_impl)
70 '''
71
72 from IPython import Magic
73
74 setattr(Magic.Magic, "magic_" + magicname, func)
75
76 def ex(cmd):
77 """ Execute a normal python statement """
78 exec cmd in user_ns() No newline at end of file
@@ -1,459 +1,461 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Tools for inspecting Python objects.
2 """Tools for inspecting Python objects.
3
3
4 Uses syntax highlighting for presenting the various information elements.
4 Uses syntax highlighting for presenting the various information elements.
5
5
6 Similar in spirit to the inspect module, but all calls take a name argument to
6 Similar in spirit to the inspect module, but all calls take a name argument to
7 reference the name under which an object is being read.
7 reference the name under which an object is being read.
8
8
9 $Id: OInspect.py 958 2005-12-27 23:17:51Z fperez $
9 $Id: OInspect.py 1016 2006-01-14 00:54:23Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
13 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
14 #
14 #
15 # Distributed under the terms of the BSD License. The full license is in
15 # Distributed under the terms of the BSD License. The full license is in
16 # the file COPYING, distributed as part of this software.
16 # the file COPYING, distributed as part of this software.
17 #*****************************************************************************
17 #*****************************************************************************
18
18
19 from IPython import Release
19 from IPython import Release
20 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __author__ = '%s <%s>' % Release.authors['Fernando']
21 __license__ = Release.license
21 __license__ = Release.license
22
22
23 __all__ = ['Inspector','InspectColors']
23 __all__ = ['Inspector','InspectColors']
24
24
25 # stdlib modules
25 # stdlib modules
26 import __builtin__
26 import __builtin__
27 import inspect
27 import inspect
28 import linecache
28 import linecache
29 import string
29 import string
30 import StringIO
30 import StringIO
31 import types
31 import types
32
32
33 # IPython's own
33 # IPython's own
34 from IPython import PyColorize
34 from IPython import PyColorize
35 from IPython.genutils import page,indent,Term,mkdict
35 from IPython.genutils import page,indent,Term,mkdict
36 from IPython.Itpl import itpl
36 from IPython.Itpl import itpl
37 from IPython.wildcard import list_namespace
37 from IPython.wildcard import list_namespace
38 from IPython.ColorANSI import *
38 from IPython.ColorANSI import *
39
39
40 #****************************************************************************
40 #****************************************************************************
41 # Builtin color schemes
41 # Builtin color schemes
42
42
43 Colors = TermColors # just a shorthand
43 Colors = TermColors # just a shorthand
44
44
45 # Build a few color schemes
45 # Build a few color schemes
46 NoColor = ColorScheme(
46 NoColor = ColorScheme(
47 'NoColor',{
47 'NoColor',{
48 'header' : Colors.NoColor,
48 'header' : Colors.NoColor,
49 'normal' : Colors.NoColor # color off (usu. Colors.Normal)
49 'normal' : Colors.NoColor # color off (usu. Colors.Normal)
50 } )
50 } )
51
51
52 LinuxColors = ColorScheme(
52 LinuxColors = ColorScheme(
53 'Linux',{
53 'Linux',{
54 'header' : Colors.LightRed,
54 'header' : Colors.LightRed,
55 'normal' : Colors.Normal # color off (usu. Colors.Normal)
55 'normal' : Colors.Normal # color off (usu. Colors.Normal)
56 } )
56 } )
57
57
58 LightBGColors = ColorScheme(
58 LightBGColors = ColorScheme(
59 'LightBG',{
59 'LightBG',{
60 'header' : Colors.Red,
60 'header' : Colors.Red,
61 'normal' : Colors.Normal # color off (usu. Colors.Normal)
61 'normal' : Colors.Normal # color off (usu. Colors.Normal)
62 } )
62 } )
63
63
64 # Build table of color schemes (needed by the parser)
64 # Build table of color schemes (needed by the parser)
65 InspectColors = ColorSchemeTable([NoColor,LinuxColors,LightBGColors],
65 InspectColors = ColorSchemeTable([NoColor,LinuxColors,LightBGColors],
66 'Linux')
66 'Linux')
67
67
68 #****************************************************************************
68 #****************************************************************************
69 # Auxiliary functions
69 # Auxiliary functions
70 def getdoc(obj):
70 def getdoc(obj):
71 """Stable wrapper around inspect.getdoc.
71 """Stable wrapper around inspect.getdoc.
72
72
73 This can't crash because of attribute problems.
73 This can't crash because of attribute problems.
74
74
75 It also attempts to call a getdoc() method on the given object. This
75 It also attempts to call a getdoc() method on the given object. This
76 allows objects which provide their docstrings via non-standard mechanisms
76 allows objects which provide their docstrings via non-standard mechanisms
77 (like Pyro proxies) to still be inspected by ipython's ? system."""
77 (like Pyro proxies) to still be inspected by ipython's ? system."""
78
78
79 ds = None # default return value
79 ds = None # default return value
80 try:
80 try:
81 ds = inspect.getdoc(obj)
81 ds = inspect.getdoc(obj)
82 except:
82 except:
83 # Harden against an inspect failure, which can occur with
83 # Harden against an inspect failure, which can occur with
84 # SWIG-wrapped extensions.
84 # SWIG-wrapped extensions.
85 pass
85 pass
86 # Allow objects to offer customized documentation via a getdoc method:
86 # Allow objects to offer customized documentation via a getdoc method:
87 try:
87 try:
88 ds2 = obj.getdoc()
88 ds2 = obj.getdoc()
89 except:
89 except:
90 pass
90 pass
91 else:
91 else:
92 # if we get extra info, we add it to the normal docstring.
92 # if we get extra info, we add it to the normal docstring.
93 if ds is None:
93 if ds is None:
94 ds = ds2
94 ds = ds2
95 else:
95 else:
96 ds = '%s\n%s' % (ds,ds2)
96 ds = '%s\n%s' % (ds,ds2)
97 return ds
97 return ds
98
98
99 #****************************************************************************
99 #****************************************************************************
100 # Class definitions
100 # Class definitions
101
101
102 class myStringIO(StringIO.StringIO):
102 class myStringIO(StringIO.StringIO):
103 """Adds a writeln method to normal StringIO."""
103 """Adds a writeln method to normal StringIO."""
104 def writeln(self,*arg,**kw):
104 def writeln(self,*arg,**kw):
105 """Does a write() and then a write('\n')"""
105 """Does a write() and then a write('\n')"""
106 self.write(*arg,**kw)
106 self.write(*arg,**kw)
107 self.write('\n')
107 self.write('\n')
108
108
109 class Inspector:
109 class Inspector:
110 def __init__(self,color_table,code_color_table,scheme):
110 def __init__(self,color_table,code_color_table,scheme):
111 self.color_table = color_table
111 self.color_table = color_table
112 self.parser = PyColorize.Parser(code_color_table,out='str')
112 self.parser = PyColorize.Parser(code_color_table,out='str')
113 self.format = self.parser.format
113 self.format = self.parser.format
114 self.set_active_scheme(scheme)
114 self.set_active_scheme(scheme)
115
115
116 def __getargspec(self,obj):
116 def __getargspec(self,obj):
117 """Get the names and default values of a function's arguments.
117 """Get the names and default values of a function's arguments.
118
118
119 A tuple of four things is returned: (args, varargs, varkw, defaults).
119 A tuple of four things is returned: (args, varargs, varkw, defaults).
120 'args' is a list of the argument names (it may contain nested lists).
120 'args' is a list of the argument names (it may contain nested lists).
121 'varargs' and 'varkw' are the names of the * and ** arguments or None.
121 'varargs' and 'varkw' are the names of the * and ** arguments or None.
122 'defaults' is an n-tuple of the default values of the last n arguments.
122 'defaults' is an n-tuple of the default values of the last n arguments.
123
123
124 Modified version of inspect.getargspec from the Python Standard
124 Modified version of inspect.getargspec from the Python Standard
125 Library."""
125 Library."""
126
126
127 if inspect.isfunction(obj):
127 if inspect.isfunction(obj):
128 func_obj = obj
128 func_obj = obj
129 elif inspect.ismethod(obj):
129 elif inspect.ismethod(obj):
130 func_obj = obj.im_func
130 func_obj = obj.im_func
131 else:
131 else:
132 raise TypeError, 'arg is not a Python function'
132 raise TypeError, 'arg is not a Python function'
133 args, varargs, varkw = inspect.getargs(func_obj.func_code)
133 args, varargs, varkw = inspect.getargs(func_obj.func_code)
134 return args, varargs, varkw, func_obj.func_defaults
134 return args, varargs, varkw, func_obj.func_defaults
135
135
136 def __getdef(self,obj,oname=''):
136 def __getdef(self,obj,oname=''):
137 """Return the definition header for any callable object.
137 """Return the definition header for any callable object.
138
138
139 If any exception is generated, None is returned instead and the
139 If any exception is generated, None is returned instead and the
140 exception is suppressed."""
140 exception is suppressed."""
141
141
142 try:
142 try:
143 return oname + inspect.formatargspec(*self.__getargspec(obj))
143 return oname + inspect.formatargspec(*self.__getargspec(obj))
144 except:
144 except:
145 return None
145 return None
146
146
147 def __head(self,h):
147 def __head(self,h):
148 """Return a header string with proper colors."""
148 """Return a header string with proper colors."""
149 return '%s%s%s' % (self.color_table.active_colors.header,h,
149 return '%s%s%s' % (self.color_table.active_colors.header,h,
150 self.color_table.active_colors.normal)
150 self.color_table.active_colors.normal)
151
151
152 def set_active_scheme(self,scheme):
152 def set_active_scheme(self,scheme):
153 self.color_table.set_active_scheme(scheme)
153 self.color_table.set_active_scheme(scheme)
154 self.parser.color_table.set_active_scheme(scheme)
154 self.parser.color_table.set_active_scheme(scheme)
155
155
156 def noinfo(self,msg,oname):
156 def noinfo(self,msg,oname):
157 """Generic message when no information is found."""
157 """Generic message when no information is found."""
158 print 'No %s found' % msg,
158 print 'No %s found' % msg,
159 if oname:
159 if oname:
160 print 'for %s' % oname
160 print 'for %s' % oname
161 else:
161 else:
162 print
162 print
163
163
164 def pdef(self,obj,oname=''):
164 def pdef(self,obj,oname=''):
165 """Print the definition header for any callable object.
165 """Print the definition header for any callable object.
166
166
167 If the object is a class, print the constructor information."""
167 If the object is a class, print the constructor information."""
168
168
169 if not callable(obj):
169 if not callable(obj):
170 print 'Object is not callable.'
170 print 'Object is not callable.'
171 return
171 return
172
172
173 header = ''
173 header = ''
174 if type(obj) is types.ClassType:
174 if type(obj) is types.ClassType:
175 header = self.__head('Class constructor information:\n')
175 header = self.__head('Class constructor information:\n')
176 obj = obj.__init__
176 obj = obj.__init__
177 elif type(obj) is types.InstanceType:
177 elif type(obj) is types.InstanceType:
178 obj = obj.__call__
178 obj = obj.__call__
179
179
180 output = self.__getdef(obj,oname)
180 output = self.__getdef(obj,oname)
181 if output is None:
181 if output is None:
182 self.noinfo('definition header',oname)
182 self.noinfo('definition header',oname)
183 else:
183 else:
184 print >>Term.cout, header,self.format(output),
184 print >>Term.cout, header,self.format(output),
185
185
186 def pdoc(self,obj,oname='',formatter = None):
186 def pdoc(self,obj,oname='',formatter = None):
187 """Print the docstring for any object.
187 """Print the docstring for any object.
188
188
189 Optional:
189 Optional:
190 -formatter: a function to run the docstring through for specially
190 -formatter: a function to run the docstring through for specially
191 formatted docstrings."""
191 formatted docstrings."""
192
192
193 head = self.__head # so that itpl can find it even if private
193 head = self.__head # so that itpl can find it even if private
194 ds = getdoc(obj)
194 ds = getdoc(obj)
195 if formatter:
195 if formatter:
196 ds = formatter(ds)
196 ds = formatter(ds)
197 if type(obj) is types.ClassType:
197 if type(obj) is types.ClassType:
198 init_ds = getdoc(obj.__init__)
198 init_ds = getdoc(obj.__init__)
199 output = itpl('$head("Class Docstring:")\n'
199 output = itpl('$head("Class Docstring:")\n'
200 '$indent(ds)\n'
200 '$indent(ds)\n'
201 '$head("Constructor Docstring"):\n'
201 '$head("Constructor Docstring"):\n'
202 '$indent(init_ds)')
202 '$indent(init_ds)')
203 elif type(obj) is types.InstanceType and hasattr(obj,'__call__'):
203 elif type(obj) is types.InstanceType and hasattr(obj,'__call__'):
204 call_ds = getdoc(obj.__call__)
204 call_ds = getdoc(obj.__call__)
205 if call_ds:
205 if call_ds:
206 output = itpl('$head("Class Docstring:")\n$indent(ds)\n'
206 output = itpl('$head("Class Docstring:")\n$indent(ds)\n'
207 '$head("Calling Docstring:")\n$indent(call_ds)')
207 '$head("Calling Docstring:")\n$indent(call_ds)')
208 else:
208 else:
209 output = ds
209 output = ds
210 else:
210 else:
211 output = ds
211 output = ds
212 if output is None:
212 if output is None:
213 self.noinfo('documentation',oname)
213 self.noinfo('documentation',oname)
214 return
214 return
215 page(output)
215 page(output)
216
216
217 def psource(self,obj,oname=''):
217 def psource(self,obj,oname=''):
218 """Print the source code for an object."""
218 """Print the source code for an object."""
219
219
220 # Flush the source cache because inspect can return out-of-date source
220 # Flush the source cache because inspect can return out-of-date source
221 linecache.checkcache()
221 linecache.checkcache()
222 try:
222 try:
223 src = inspect.getsource(obj)
223 src = inspect.getsource(obj)
224 except:
224 except:
225 self.noinfo('source',oname)
225 self.noinfo('source',oname)
226 else:
226 else:
227 page(self.format(src))
227 page(self.format(src))
228
228
229 def pfile(self,obj,oname=''):
229 def pfile(self,obj,oname=''):
230 """Show the whole file where an object was defined."""
230 """Show the whole file where an object was defined."""
231 try:
231 try:
232 sourcelines,lineno = inspect.getsourcelines(obj)
232 sourcelines,lineno = inspect.getsourcelines(obj)
233 except:
233 except:
234 self.noinfo('file',oname)
234 self.noinfo('file',oname)
235 else:
235 else:
236 # run contents of file through pager starting at line
236 # run contents of file through pager starting at line
237 # where the object is defined
237 # where the object is defined
238 page(self.format(open(inspect.getabsfile(obj)).read()),lineno)
238 page(self.format(open(inspect.getabsfile(obj)).read()),lineno)
239
239
240 def pinfo(self,obj,oname='',formatter=None,info=None,detail_level=0):
240 def pinfo(self,obj,oname='',formatter=None,info=None,detail_level=0):
241 """Show detailed information about an object.
241 """Show detailed information about an object.
242
242
243 Optional arguments:
243 Optional arguments:
244
244
245 - oname: name of the variable pointing to the object.
245 - oname: name of the variable pointing to the object.
246
246
247 - formatter: special formatter for docstrings (see pdoc)
247 - formatter: special formatter for docstrings (see pdoc)
248
248
249 - info: a structure with some information fields which may have been
249 - info: a structure with some information fields which may have been
250 precomputed already.
250 precomputed already.
251
251
252 - detail_level: if set to 1, more information is given.
252 - detail_level: if set to 1, more information is given.
253 """
253 """
254
254
255 obj_type = type(obj)
255 obj_type = type(obj)
256
256
257 header = self.__head
257 header = self.__head
258 if info is None:
258 if info is None:
259 ismagic = 0
259 ismagic = 0
260 isalias = 0
260 isalias = 0
261 ospace = ''
261 ospace = ''
262 else:
262 else:
263 ismagic = info.ismagic
263 ismagic = info.ismagic
264 isalias = info.isalias
264 isalias = info.isalias
265 ospace = info.namespace
265 ospace = info.namespace
266 # Get docstring, special-casing aliases:
266 # Get docstring, special-casing aliases:
267 if isalias:
267 if isalias:
268 ds = "Alias to the system command:\n %s" % obj[1]
268 ds = "Alias to the system command:\n %s" % obj[1]
269 else:
269 else:
270 ds = getdoc(obj)
270 ds = getdoc(obj)
271 if ds is None:
272 ds = '<no docstring>'
271 if formatter is not None:
273 if formatter is not None:
272 ds = formatter(ds)
274 ds = formatter(ds)
273
275
274 # store output in a list which gets joined with \n at the end.
276 # store output in a list which gets joined with \n at the end.
275 out = myStringIO()
277 out = myStringIO()
276
278
277 string_max = 200 # max size of strings to show (snipped if longer)
279 string_max = 200 # max size of strings to show (snipped if longer)
278 shalf = int((string_max -5)/2)
280 shalf = int((string_max -5)/2)
279
281
280 if ismagic:
282 if ismagic:
281 obj_type_name = 'Magic function'
283 obj_type_name = 'Magic function'
282 elif isalias:
284 elif isalias:
283 obj_type_name = 'System alias'
285 obj_type_name = 'System alias'
284 else:
286 else:
285 obj_type_name = obj_type.__name__
287 obj_type_name = obj_type.__name__
286 out.writeln(header('Type:\t\t')+obj_type_name)
288 out.writeln(header('Type:\t\t')+obj_type_name)
287
289
288 try:
290 try:
289 bclass = obj.__class__
291 bclass = obj.__class__
290 out.writeln(header('Base Class:\t')+str(bclass))
292 out.writeln(header('Base Class:\t')+str(bclass))
291 except: pass
293 except: pass
292
294
293 # String form, but snip if too long in ? form (full in ??)
295 # String form, but snip if too long in ? form (full in ??)
294 try:
296 try:
295 ostr = str(obj)
297 ostr = str(obj)
296 str_head = 'String Form:'
298 str_head = 'String Form:'
297 if not detail_level and len(ostr)>string_max:
299 if not detail_level and len(ostr)>string_max:
298 ostr = ostr[:shalf] + ' <...> ' + ostr[-shalf:]
300 ostr = ostr[:shalf] + ' <...> ' + ostr[-shalf:]
299 ostr = ("\n" + " " * len(str_head.expandtabs())).\
301 ostr = ("\n" + " " * len(str_head.expandtabs())).\
300 join(map(string.strip,ostr.split("\n")))
302 join(map(string.strip,ostr.split("\n")))
301 if ostr.find('\n') > -1:
303 if ostr.find('\n') > -1:
302 # Print multi-line strings starting at the next line.
304 # Print multi-line strings starting at the next line.
303 str_sep = '\n'
305 str_sep = '\n'
304 else:
306 else:
305 str_sep = '\t'
307 str_sep = '\t'
306 out.writeln("%s%s%s" % (header(str_head),str_sep,ostr))
308 out.writeln("%s%s%s" % (header(str_head),str_sep,ostr))
307 except:
309 except:
308 pass
310 pass
309
311
310 if ospace:
312 if ospace:
311 out.writeln(header('Namespace:\t')+ospace)
313 out.writeln(header('Namespace:\t')+ospace)
312
314
313 # Length (for strings and lists)
315 # Length (for strings and lists)
314 try:
316 try:
315 length = str(len(obj))
317 length = str(len(obj))
316 out.writeln(header('Length:\t\t')+length)
318 out.writeln(header('Length:\t\t')+length)
317 except: pass
319 except: pass
318
320
319 # Filename where object was defined
321 # Filename where object was defined
320 try:
322 try:
321 file = inspect.getabsfile(obj)
323 file = inspect.getabsfile(obj)
322 if file.endswith('<string>'):
324 if file.endswith('<string>'):
323 file = 'Dynamically generated function. No source code available.'
325 file = 'Dynamically generated function. No source code available.'
324 out.writeln(header('File:\t\t')+file)
326 out.writeln(header('File:\t\t')+file)
325 except: pass
327 except: pass
326
328
327 # reconstruct the function definition and print it:
329 # reconstruct the function definition and print it:
328 defln = self.__getdef(obj,oname)
330 defln = self.__getdef(obj,oname)
329 if defln:
331 if defln:
330 out.write(header('Definition:\t')+self.format(defln))
332 out.write(header('Definition:\t')+self.format(defln))
331
333
332 # Docstrings only in detail 0 mode, since source contains them (we
334 # Docstrings only in detail 0 mode, since source contains them (we
333 # avoid repetitions). If source fails, we add them back, see below.
335 # avoid repetitions). If source fails, we add them back, see below.
334 if ds and detail_level == 0:
336 if ds and detail_level == 0:
335 out.writeln(header('Docstring:\n') + indent(ds))
337 out.writeln(header('Docstring:\n') + indent(ds))
336
338
337 # Original source code for any callable
339 # Original source code for any callable
338 if detail_level:
340 if detail_level:
339 # Flush the source cache because inspect can return out-of-date source
341 # Flush the source cache because inspect can return out-of-date source
340 linecache.checkcache()
342 linecache.checkcache()
341 try:
343 try:
342 source = self.format(inspect.getsource(obj))
344 source = self.format(inspect.getsource(obj))
343 out.write(header('Source:\n')+source.rstrip())
345 out.write(header('Source:\n')+source.rstrip())
344 except:
346 except:
345 if ds:
347 if ds:
346 out.writeln(header('Docstring:\n') + indent(ds))
348 out.writeln(header('Docstring:\n') + indent(ds))
347
349
348 # Constructor docstring for classes
350 # Constructor docstring for classes
349 if obj_type is types.ClassType:
351 if obj_type is types.ClassType:
350 # reconstruct the function definition and print it:
352 # reconstruct the function definition and print it:
351 try:
353 try:
352 obj_init = obj.__init__
354 obj_init = obj.__init__
353 except AttributeError:
355 except AttributeError:
354 init_def = init_ds = None
356 init_def = init_ds = None
355 else:
357 else:
356 init_def = self.__getdef(obj_init,oname)
358 init_def = self.__getdef(obj_init,oname)
357 init_ds = getdoc(obj_init)
359 init_ds = getdoc(obj_init)
358
360
359 if init_def or init_ds:
361 if init_def or init_ds:
360 out.writeln(header('\nConstructor information:'))
362 out.writeln(header('\nConstructor information:'))
361 if init_def:
363 if init_def:
362 out.write(header('Definition:\t')+ self.format(init_def))
364 out.write(header('Definition:\t')+ self.format(init_def))
363 if init_ds:
365 if init_ds:
364 out.writeln(header('Docstring:\n') + indent(init_ds))
366 out.writeln(header('Docstring:\n') + indent(init_ds))
365 # and class docstring for instances:
367 # and class docstring for instances:
366 elif obj_type is types.InstanceType:
368 elif obj_type is types.InstanceType:
367
369
368 # First, check whether the instance docstring is identical to the
370 # First, check whether the instance docstring is identical to the
369 # class one, and print it separately if they don't coincide. In
371 # class one, and print it separately if they don't coincide. In
370 # most cases they will, but it's nice to print all the info for
372 # most cases they will, but it's nice to print all the info for
371 # objects which use instance-customized docstrings.
373 # objects which use instance-customized docstrings.
372 if ds:
374 if ds:
373 class_ds = getdoc(obj.__class__)
375 class_ds = getdoc(obj.__class__)
374 if class_ds and ds != class_ds:
376 if class_ds and ds != class_ds:
375 out.writeln(header('Class Docstring:\n') +
377 out.writeln(header('Class Docstring:\n') +
376 indent(class_ds))
378 indent(class_ds))
377
379
378 # Next, try to show constructor docstrings
380 # Next, try to show constructor docstrings
379 try:
381 try:
380 init_ds = getdoc(obj.__init__)
382 init_ds = getdoc(obj.__init__)
381 except AttributeError:
383 except AttributeError:
382 init_ds = None
384 init_ds = None
383 if init_ds:
385 if init_ds:
384 out.writeln(header('Constructor Docstring:\n') +
386 out.writeln(header('Constructor Docstring:\n') +
385 indent(init_ds))
387 indent(init_ds))
386
388
387 # Call form docstring for callable instances
389 # Call form docstring for callable instances
388 if hasattr(obj,'__call__'):
390 if hasattr(obj,'__call__'):
389 out.writeln(header('Callable:\t')+'Yes')
391 out.writeln(header('Callable:\t')+'Yes')
390 call_def = self.__getdef(obj.__call__,oname)
392 call_def = self.__getdef(obj.__call__,oname)
391 if call_def is None:
393 if call_def is None:
392 out.write(header('Call def:\t')+
394 out.write(header('Call def:\t')+
393 'Calling definition not available.')
395 'Calling definition not available.')
394 else:
396 else:
395 out.write(header('Call def:\t')+self.format(call_def))
397 out.write(header('Call def:\t')+self.format(call_def))
396 call_ds = getdoc(obj.__call__)
398 call_ds = getdoc(obj.__call__)
397 if call_ds:
399 if call_ds:
398 out.writeln(header('Call docstring:\n') + indent(call_ds))
400 out.writeln(header('Call docstring:\n') + indent(call_ds))
399
401
400 # Finally send to printer/pager
402 # Finally send to printer/pager
401 output = out.getvalue()
403 output = out.getvalue()
402 if output:
404 if output:
403 page(output)
405 page(output)
404 # end pinfo
406 # end pinfo
405
407
406 def psearch(self,pattern,ns_table,ns_search=[],
408 def psearch(self,pattern,ns_table,ns_search=[],
407 ignore_case=False,show_all=False):
409 ignore_case=False,show_all=False):
408 """Search namespaces with wildcards for objects.
410 """Search namespaces with wildcards for objects.
409
411
410 Arguments:
412 Arguments:
411
413
412 - pattern: string containing shell-like wildcards to use in namespace
414 - pattern: string containing shell-like wildcards to use in namespace
413 searches and optionally a type specification to narrow the search to
415 searches and optionally a type specification to narrow the search to
414 objects of that type.
416 objects of that type.
415
417
416 - ns_table: dict of name->namespaces for search.
418 - ns_table: dict of name->namespaces for search.
417
419
418 Optional arguments:
420 Optional arguments:
419
421
420 - ns_search: list of namespace names to include in search.
422 - ns_search: list of namespace names to include in search.
421
423
422 - ignore_case(False): make the search case-insensitive.
424 - ignore_case(False): make the search case-insensitive.
423
425
424 - show_all(False): show all names, including those starting with
426 - show_all(False): show all names, including those starting with
425 underscores.
427 underscores.
426 """
428 """
427 # defaults
429 # defaults
428 type_pattern = 'all'
430 type_pattern = 'all'
429 filter = ''
431 filter = ''
430
432
431 cmds = pattern.split()
433 cmds = pattern.split()
432 len_cmds = len(cmds)
434 len_cmds = len(cmds)
433 if len_cmds == 1:
435 if len_cmds == 1:
434 # Only filter pattern given
436 # Only filter pattern given
435 filter = cmds[0]
437 filter = cmds[0]
436 elif len_cmds == 2:
438 elif len_cmds == 2:
437 # Both filter and type specified
439 # Both filter and type specified
438 filter,type_pattern = cmds
440 filter,type_pattern = cmds
439 else:
441 else:
440 raise ValueError('invalid argument string for psearch: <%s>' %
442 raise ValueError('invalid argument string for psearch: <%s>' %
441 pattern)
443 pattern)
442
444
443 # filter search namespaces
445 # filter search namespaces
444 for name in ns_search:
446 for name in ns_search:
445 if name not in ns_table:
447 if name not in ns_table:
446 raise ValueError('invalid namespace <%s>. Valid names: %s' %
448 raise ValueError('invalid namespace <%s>. Valid names: %s' %
447 (name,ns_table.keys()))
449 (name,ns_table.keys()))
448
450
449 #print 'type_pattern:',type_pattern # dbg
451 #print 'type_pattern:',type_pattern # dbg
450 search_result = []
452 search_result = []
451 for ns_name in ns_search:
453 for ns_name in ns_search:
452 ns = ns_table[ns_name]
454 ns = ns_table[ns_name]
453 tmp_res = list(list_namespace(ns,type_pattern,filter,
455 tmp_res = list(list_namespace(ns,type_pattern,filter,
454 ignore_case=ignore_case,
456 ignore_case=ignore_case,
455 show_all=show_all))
457 show_all=show_all))
456 search_result.extend(tmp_res)
458 search_result.extend(tmp_res)
457 search_result.sort()
459 search_result.sort()
458
460
459 page('\n'.join(search_result))
461 page('\n'.join(search_result))
@@ -1,65 +1,66 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 One of Python's nicest features is its interactive interpreter. This allows
5 One of Python's nicest features is its interactive interpreter. This allows
6 very fast testing of ideas without the overhead of creating test files as is
6 very fast testing of ideas without the overhead of creating test files as is
7 typical in most programming languages. However, the interpreter supplied with
7 typical in most programming languages. However, the interpreter supplied with
8 the standard Python distribution is fairly primitive (and IDLE isn't really
8 the standard Python distribution is fairly primitive (and IDLE isn't really
9 much better).
9 much better).
10
10
11 IPython tries to:
11 IPython tries to:
12
12
13 i - provide an efficient environment for interactive work in Python
13 i - provide an efficient environment for interactive work in Python
14 programming. It tries to address what we see as shortcomings of the standard
14 programming. It tries to address what we see as shortcomings of the standard
15 Python prompt, and adds many features to make interactive work much more
15 Python prompt, and adds many features to make interactive work much more
16 efficient.
16 efficient.
17
17
18 ii - offer a flexible framework so that it can be used as the base
18 ii - offer a flexible framework so that it can be used as the base
19 environment for other projects and problems where Python can be the
19 environment for other projects and problems where Python can be the
20 underlying language. Specifically scientific environments like Mathematica,
20 underlying language. Specifically scientific environments like Mathematica,
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
22 fields. Python is a fabulous language for implementing this kind of system
22 fields. Python is a fabulous language for implementing this kind of system
23 (due to its dynamic and introspective features), and with suitable libraries
23 (due to its dynamic and introspective features), and with suitable libraries
24 entire systems could be built leveraging Python's power.
24 entire systems could be built leveraging Python's power.
25
25
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
27
27
28 IPython requires Python 2.2 or newer.
28 IPython requires Python 2.2 or newer.
29
29
30 $Id: __init__.py 1014 2006-01-13 19:16:41Z vivainio $"""
30 $Id: __init__.py 1016 2006-01-14 00:54:23Z vivainio $"""
31
31
32 #*****************************************************************************
32 #*****************************************************************************
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
34 #
34 #
35 # Distributed under the terms of the BSD License. The full license is in
35 # Distributed under the terms of the BSD License. The full license is in
36 # the file COPYING, distributed as part of this software.
36 # the file COPYING, distributed as part of this software.
37 #*****************************************************************************
37 #*****************************************************************************
38
38
39 # Enforce proper version requirements
39 # Enforce proper version requirements
40 import sys
40 import sys
41 if sys.version[0:3] < '2.3':
41 if sys.version[0:3] < '2.3':
42 raise ImportError, 'Python Version 2.3 or above is required.'
42 raise ImportError, 'Python Version 2.3 or above is required.'
43
43
44 # Define what gets imported with a 'from IPython import *'
44 # Define what gets imported with a 'from IPython import *'
45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
47 'platutils','platutils_win32','platutils_posix','platutils_dummy']
47 'platutils','platutils_win32','platutils_posix','platutils_dummy',
48 'ipapi']
48
49
49 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
50 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
50 # access to them via IPython.<name>
51 # access to them via IPython.<name>
51 glob,loc = globals(),locals()
52 glob,loc = globals(),locals()
52 for name in __all__:
53 for name in __all__:
53 __import__(name,glob,loc,[])
54 __import__(name,glob,loc,[])
54
55
55 # Release data
56 # Release data
56 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
57 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
57 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
58 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
58 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
59 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
59 Release.authors['Nathan'] )
60 Release.authors['Nathan'] )
60 __license__ = Release.license
61 __license__ = Release.license
61 __version__ = Release.version
62 __version__ = Release.version
62 __revision__ = Release.revision
63 __revision__ = Release.revision
63
64
64 # Namespace cleanup
65 # Namespace cleanup
65 del name,glob,loc
66 del name,glob,loc
@@ -1,2193 +1,2198 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1015 2006-01-13 22:47:06Z vivainio $
9 $Id: iplib.py 1016 2006-01-14 00:54:23Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77
78
78 # Globals
79 # Globals
79
80
80 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
83 raw_input_original = raw_input
83
84
84 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
87
87
88
88 #****************************************************************************
89 #****************************************************************************
89 # Some utility function definitions
90 # Some utility function definitions
90
91
91 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
92
93
93 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
95
96
96 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
98 if ini_spaces:
98 return ini_spaces.end()
99 return ini_spaces.end()
99 else:
100 else:
100 return 0
101 return 0
101
102
102 def softspace(file, newvalue):
103 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
104
105
105 oldvalue = 0
106 oldvalue = 0
106 try:
107 try:
107 oldvalue = file.softspace
108 oldvalue = file.softspace
108 except AttributeError:
109 except AttributeError:
109 pass
110 pass
110 try:
111 try:
111 file.softspace = newvalue
112 file.softspace = newvalue
112 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
114 pass
115 pass
115 return oldvalue
116 return oldvalue
116
117
117
118
118 #****************************************************************************
119 #****************************************************************************
119 # Local use exceptions
120 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
121
122
122
123
123 #****************************************************************************
124 #****************************************************************************
124 # Local use classes
125 # Local use classes
125 class Bunch: pass
126 class Bunch: pass
126
127
127 class Undefined: pass
128 class Undefined: pass
128
129
129 class InputList(list):
130 class InputList(list):
130 """Class to store user input.
131 """Class to store user input.
131
132
132 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
133 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
134
135
135 exec In[4:7]
136 exec In[4:7]
136
137
137 or
138 or
138
139
139 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
140
141
141 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
142 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
143
144
144 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
145 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
146
147
147 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
148 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
149 self.last_syntax_error = None
150 self.last_syntax_error = None
150
151
151 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
152 self.last_syntax_error = value
153 self.last_syntax_error = value
153 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154
155
155 def clear_err_state(self):
156 def clear_err_state(self):
156 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
157 e = self.last_syntax_error
158 e = self.last_syntax_error
158 self.last_syntax_error = None
159 self.last_syntax_error = None
159 return e
160 return e
160
161
161 #****************************************************************************
162 #****************************************************************************
162 # Main IPython class
163 # Main IPython class
163
164
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 #
169 #
169 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
170 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
171 # chainsaw branch.
172 # chainsaw branch.
172
173
173 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class, to prevent clashes.
176 # class, to prevent clashes.
176
177
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.value']
181 # 'self.value']
181
182
182 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
183 """An enhanced console for Python."""
184 """An enhanced console for Python."""
184
185
185 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
186 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
187 isthreaded = False
188 isthreaded = False
188
189
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
191 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
192
193
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object. Uninitialized state is ok
196 IPython.ipapi._init_with_shell(self)
197
193 # some minimal strict typechecks. For some core data structures, I
198 # some minimal strict typechecks. For some core data structures, I
194 # want actual basic python types, not just anything that looks like
199 # want actual basic python types, not just anything that looks like
195 # one. This is especially true for namespaces.
200 # one. This is especially true for namespaces.
196 for ns in (user_ns,user_global_ns):
201 for ns in (user_ns,user_global_ns):
197 if ns is not None and type(ns) != types.DictType:
202 if ns is not None and type(ns) != types.DictType:
198 raise TypeError,'namespace must be a dictionary'
203 raise TypeError,'namespace must be a dictionary'
199
204
200 # Job manager (for jobs run as background threads)
205 # Job manager (for jobs run as background threads)
201 self.jobs = BackgroundJobManager()
206 self.jobs = BackgroundJobManager()
202
207
203 # track which builtins we add, so we can clean up later
208 # track which builtins we add, so we can clean up later
204 self.builtins_added = {}
209 self.builtins_added = {}
205 # This method will add the necessary builtins for operation, but
210 # This method will add the necessary builtins for operation, but
206 # tracking what it did via the builtins_added dict.
211 # tracking what it did via the builtins_added dict.
207 self.add_builtins()
212 self.add_builtins()
208
213
209 # Do the intuitively correct thing for quit/exit: we remove the
214 # Do the intuitively correct thing for quit/exit: we remove the
210 # builtins if they exist, and our own magics will deal with this
215 # builtins if they exist, and our own magics will deal with this
211 try:
216 try:
212 del __builtin__.exit, __builtin__.quit
217 del __builtin__.exit, __builtin__.quit
213 except AttributeError:
218 except AttributeError:
214 pass
219 pass
215
220
216 # Store the actual shell's name
221 # Store the actual shell's name
217 self.name = name
222 self.name = name
218
223
219 # We need to know whether the instance is meant for embedding, since
224 # We need to know whether the instance is meant for embedding, since
220 # global/local namespaces need to be handled differently in that case
225 # global/local namespaces need to be handled differently in that case
221 self.embedded = embedded
226 self.embedded = embedded
222
227
223 # command compiler
228 # command compiler
224 self.compile = codeop.CommandCompiler()
229 self.compile = codeop.CommandCompiler()
225
230
226 # User input buffer
231 # User input buffer
227 self.buffer = []
232 self.buffer = []
228
233
229 # Default name given in compilation of code
234 # Default name given in compilation of code
230 self.filename = '<ipython console>'
235 self.filename = '<ipython console>'
231
236
232 # Make an empty namespace, which extension writers can rely on both
237 # Make an empty namespace, which extension writers can rely on both
233 # existing and NEVER being used by ipython itself. This gives them a
238 # existing and NEVER being used by ipython itself. This gives them a
234 # convenient location for storing additional information and state
239 # convenient location for storing additional information and state
235 # their extensions may require, without fear of collisions with other
240 # their extensions may require, without fear of collisions with other
236 # ipython names that may develop later.
241 # ipython names that may develop later.
237 self.meta = Bunch()
242 self.meta = Bunch()
238
243
239 # Create the namespace where the user will operate. user_ns is
244 # Create the namespace where the user will operate. user_ns is
240 # normally the only one used, and it is passed to the exec calls as
245 # normally the only one used, and it is passed to the exec calls as
241 # the locals argument. But we do carry a user_global_ns namespace
246 # the locals argument. But we do carry a user_global_ns namespace
242 # given as the exec 'globals' argument, This is useful in embedding
247 # given as the exec 'globals' argument, This is useful in embedding
243 # situations where the ipython shell opens in a context where the
248 # situations where the ipython shell opens in a context where the
244 # distinction between locals and globals is meaningful.
249 # distinction between locals and globals is meaningful.
245
250
246 # FIXME. For some strange reason, __builtins__ is showing up at user
251 # FIXME. For some strange reason, __builtins__ is showing up at user
247 # level as a dict instead of a module. This is a manual fix, but I
252 # level as a dict instead of a module. This is a manual fix, but I
248 # should really track down where the problem is coming from. Alex
253 # should really track down where the problem is coming from. Alex
249 # Schmolck reported this problem first.
254 # Schmolck reported this problem first.
250
255
251 # A useful post by Alex Martelli on this topic:
256 # A useful post by Alex Martelli on this topic:
252 # Re: inconsistent value from __builtins__
257 # Re: inconsistent value from __builtins__
253 # Von: Alex Martelli <aleaxit@yahoo.com>
258 # Von: Alex Martelli <aleaxit@yahoo.com>
254 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
255 # Gruppen: comp.lang.python
260 # Gruppen: comp.lang.python
256
261
257 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
258 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
259 # > <type 'dict'>
264 # > <type 'dict'>
260 # > >>> print type(__builtins__)
265 # > >>> print type(__builtins__)
261 # > <type 'module'>
266 # > <type 'module'>
262 # > Is this difference in return value intentional?
267 # > Is this difference in return value intentional?
263
268
264 # Well, it's documented that '__builtins__' can be either a dictionary
269 # Well, it's documented that '__builtins__' can be either a dictionary
265 # or a module, and it's been that way for a long time. Whether it's
270 # or a module, and it's been that way for a long time. Whether it's
266 # intentional (or sensible), I don't know. In any case, the idea is
271 # intentional (or sensible), I don't know. In any case, the idea is
267 # that if you need to access the built-in namespace directly, you
272 # that if you need to access the built-in namespace directly, you
268 # should start with "import __builtin__" (note, no 's') which will
273 # should start with "import __builtin__" (note, no 's') which will
269 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
270
275
271 if user_ns is None:
276 if user_ns is None:
272 # Set __name__ to __main__ to better match the behavior of the
277 # Set __name__ to __main__ to better match the behavior of the
273 # normal interpreter.
278 # normal interpreter.
274 user_ns = {'__name__' :'__main__',
279 user_ns = {'__name__' :'__main__',
275 '__builtins__' : __builtin__,
280 '__builtins__' : __builtin__,
276 }
281 }
277
282
278 if user_global_ns is None:
283 if user_global_ns is None:
279 user_global_ns = {}
284 user_global_ns = {}
280
285
281 # Assign namespaces
286 # Assign namespaces
282 # This is the namespace where all normal user variables live
287 # This is the namespace where all normal user variables live
283 self.user_ns = user_ns
288 self.user_ns = user_ns
284 # Embedded instances require a separate namespace for globals.
289 # Embedded instances require a separate namespace for globals.
285 # Normally this one is unused by non-embedded instances.
290 # Normally this one is unused by non-embedded instances.
286 self.user_global_ns = user_global_ns
291 self.user_global_ns = user_global_ns
287 # A namespace to keep track of internal data structures to prevent
292 # A namespace to keep track of internal data structures to prevent
288 # them from cluttering user-visible stuff. Will be updated later
293 # them from cluttering user-visible stuff. Will be updated later
289 self.internal_ns = {}
294 self.internal_ns = {}
290
295
291 # Namespace of system aliases. Each entry in the alias
296 # Namespace of system aliases. Each entry in the alias
292 # table must be a 2-tuple of the form (N,name), where N is the number
297 # table must be a 2-tuple of the form (N,name), where N is the number
293 # of positional arguments of the alias.
298 # of positional arguments of the alias.
294 self.alias_table = {}
299 self.alias_table = {}
295
300
296 # A table holding all the namespaces IPython deals with, so that
301 # A table holding all the namespaces IPython deals with, so that
297 # introspection facilities can search easily.
302 # introspection facilities can search easily.
298 self.ns_table = {'user':user_ns,
303 self.ns_table = {'user':user_ns,
299 'user_global':user_global_ns,
304 'user_global':user_global_ns,
300 'alias':self.alias_table,
305 'alias':self.alias_table,
301 'internal':self.internal_ns,
306 'internal':self.internal_ns,
302 'builtin':__builtin__.__dict__
307 'builtin':__builtin__.__dict__
303 }
308 }
304
309
305 # The user namespace MUST have a pointer to the shell itself.
310 # The user namespace MUST have a pointer to the shell itself.
306 self.user_ns[name] = self
311 self.user_ns[name] = self
307
312
308 # We need to insert into sys.modules something that looks like a
313 # We need to insert into sys.modules something that looks like a
309 # module but which accesses the IPython namespace, for shelve and
314 # module but which accesses the IPython namespace, for shelve and
310 # pickle to work interactively. Normally they rely on getting
315 # pickle to work interactively. Normally they rely on getting
311 # everything out of __main__, but for embedding purposes each IPython
316 # everything out of __main__, but for embedding purposes each IPython
312 # instance has its own private namespace, so we can't go shoving
317 # instance has its own private namespace, so we can't go shoving
313 # everything into __main__.
318 # everything into __main__.
314
319
315 # note, however, that we should only do this for non-embedded
320 # note, however, that we should only do this for non-embedded
316 # ipythons, which really mimic the __main__.__dict__ with their own
321 # ipythons, which really mimic the __main__.__dict__ with their own
317 # namespace. Embedded instances, on the other hand, should not do
322 # namespace. Embedded instances, on the other hand, should not do
318 # this because they need to manage the user local/global namespaces
323 # this because they need to manage the user local/global namespaces
319 # only, but they live within a 'normal' __main__ (meaning, they
324 # only, but they live within a 'normal' __main__ (meaning, they
320 # shouldn't overtake the execution environment of the script they're
325 # shouldn't overtake the execution environment of the script they're
321 # embedded in).
326 # embedded in).
322
327
323 if not embedded:
328 if not embedded:
324 try:
329 try:
325 main_name = self.user_ns['__name__']
330 main_name = self.user_ns['__name__']
326 except KeyError:
331 except KeyError:
327 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
328 else:
333 else:
329 #print "pickle hack in place" # dbg
334 #print "pickle hack in place" # dbg
330 #print 'main_name:',main_name # dbg
335 #print 'main_name:',main_name # dbg
331 sys.modules[main_name] = FakeModule(self.user_ns)
336 sys.modules[main_name] = FakeModule(self.user_ns)
332
337
333 # List of input with multi-line handling.
338 # List of input with multi-line handling.
334 # Fill its zero entry, user counter starts at 1
339 # Fill its zero entry, user counter starts at 1
335 self.input_hist = InputList(['\n'])
340 self.input_hist = InputList(['\n'])
336
341
337 # list of visited directories
342 # list of visited directories
338 try:
343 try:
339 self.dir_hist = [os.getcwd()]
344 self.dir_hist = [os.getcwd()]
340 except IOError, e:
345 except IOError, e:
341 self.dir_hist = []
346 self.dir_hist = []
342
347
343 # dict of output history
348 # dict of output history
344 self.output_hist = {}
349 self.output_hist = {}
345
350
346 # dict of things NOT to alias (keywords, builtins and some magics)
351 # dict of things NOT to alias (keywords, builtins and some magics)
347 no_alias = {}
352 no_alias = {}
348 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
349 for key in keyword.kwlist + no_alias_magics:
354 for key in keyword.kwlist + no_alias_magics:
350 no_alias[key] = 1
355 no_alias[key] = 1
351 no_alias.update(__builtin__.__dict__)
356 no_alias.update(__builtin__.__dict__)
352 self.no_alias = no_alias
357 self.no_alias = no_alias
353
358
354 # make global variables for user access to these
359 # make global variables for user access to these
355 self.user_ns['_ih'] = self.input_hist
360 self.user_ns['_ih'] = self.input_hist
356 self.user_ns['_oh'] = self.output_hist
361 self.user_ns['_oh'] = self.output_hist
357 self.user_ns['_dh'] = self.dir_hist
362 self.user_ns['_dh'] = self.dir_hist
358
363
359 # user aliases to input and output histories
364 # user aliases to input and output histories
360 self.user_ns['In'] = self.input_hist
365 self.user_ns['In'] = self.input_hist
361 self.user_ns['Out'] = self.output_hist
366 self.user_ns['Out'] = self.output_hist
362
367
363 # Object variable to store code object waiting execution. This is
368 # Object variable to store code object waiting execution. This is
364 # used mainly by the multithreaded shells, but it can come in handy in
369 # used mainly by the multithreaded shells, but it can come in handy in
365 # other situations. No need to use a Queue here, since it's a single
370 # other situations. No need to use a Queue here, since it's a single
366 # item which gets cleared once run.
371 # item which gets cleared once run.
367 self.code_to_run = None
372 self.code_to_run = None
368
373
369 # escapes for automatic behavior on the command line
374 # escapes for automatic behavior on the command line
370 self.ESC_SHELL = '!'
375 self.ESC_SHELL = '!'
371 self.ESC_HELP = '?'
376 self.ESC_HELP = '?'
372 self.ESC_MAGIC = '%'
377 self.ESC_MAGIC = '%'
373 self.ESC_QUOTE = ','
378 self.ESC_QUOTE = ','
374 self.ESC_QUOTE2 = ';'
379 self.ESC_QUOTE2 = ';'
375 self.ESC_PAREN = '/'
380 self.ESC_PAREN = '/'
376
381
377 # And their associated handlers
382 # And their associated handlers
378 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
379 self.ESC_QUOTE : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
380 self.ESC_QUOTE2 : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
381 self.ESC_MAGIC : self.handle_magic,
386 self.ESC_MAGIC : self.handle_magic,
382 self.ESC_HELP : self.handle_help,
387 self.ESC_HELP : self.handle_help,
383 self.ESC_SHELL : self.handle_shell_escape,
388 self.ESC_SHELL : self.handle_shell_escape,
384 }
389 }
385
390
386 # class initializations
391 # class initializations
387 Magic.__init__(self,self)
392 Magic.__init__(self,self)
388
393
389 # Python source parser/formatter for syntax highlighting
394 # Python source parser/formatter for syntax highlighting
390 pyformat = PyColorize.Parser().format
395 pyformat = PyColorize.Parser().format
391 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
392
397
393 # hooks holds pointers used for user-side customizations
398 # hooks holds pointers used for user-side customizations
394 self.hooks = Struct()
399 self.hooks = Struct()
395
400
396 # Set all default hooks, defined in the IPython.hooks module.
401 # Set all default hooks, defined in the IPython.hooks module.
397 hooks = IPython.hooks
402 hooks = IPython.hooks
398 for hook_name in hooks.__all__:
403 for hook_name in hooks.__all__:
399 self.set_hook(hook_name,getattr(hooks,hook_name))
404 self.set_hook(hook_name,getattr(hooks,hook_name))
400
405
401 # Flag to mark unconditional exit
406 # Flag to mark unconditional exit
402 self.exit_now = False
407 self.exit_now = False
403
408
404 self.usage_min = """\
409 self.usage_min = """\
405 An enhanced console for Python.
410 An enhanced console for Python.
406 Some of its features are:
411 Some of its features are:
407 - Readline support if the readline library is present.
412 - Readline support if the readline library is present.
408 - Tab completion in the local namespace.
413 - Tab completion in the local namespace.
409 - Logging of input, see command-line options.
414 - Logging of input, see command-line options.
410 - System shell escape via ! , eg !ls.
415 - System shell escape via ! , eg !ls.
411 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
412 - Keeps track of locally defined variables via %who, %whos.
417 - Keeps track of locally defined variables via %who, %whos.
413 - Show object information with a ? eg ?x or x? (use ?? for more info).
418 - Show object information with a ? eg ?x or x? (use ?? for more info).
414 """
419 """
415 if usage: self.usage = usage
420 if usage: self.usage = usage
416 else: self.usage = self.usage_min
421 else: self.usage = self.usage_min
417
422
418 # Storage
423 # Storage
419 self.rc = rc # This will hold all configuration information
424 self.rc = rc # This will hold all configuration information
420 self.pager = 'less'
425 self.pager = 'less'
421 # temporary files used for various purposes. Deleted at exit.
426 # temporary files used for various purposes. Deleted at exit.
422 self.tempfiles = []
427 self.tempfiles = []
423
428
424 # Keep track of readline usage (later set by init_readline)
429 # Keep track of readline usage (later set by init_readline)
425 self.has_readline = False
430 self.has_readline = False
426
431
427 # template for logfile headers. It gets resolved at runtime by the
432 # template for logfile headers. It gets resolved at runtime by the
428 # logstart method.
433 # logstart method.
429 self.loghead_tpl = \
434 self.loghead_tpl = \
430 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
431 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
432 #log# opts = %s
437 #log# opts = %s
433 #log# args = %s
438 #log# args = %s
434 #log# It is safe to make manual edits below here.
439 #log# It is safe to make manual edits below here.
435 #log#-----------------------------------------------------------------------
440 #log#-----------------------------------------------------------------------
436 """
441 """
437 # for pushd/popd management
442 # for pushd/popd management
438 try:
443 try:
439 self.home_dir = get_home_dir()
444 self.home_dir = get_home_dir()
440 except HomeDirError,msg:
445 except HomeDirError,msg:
441 fatal(msg)
446 fatal(msg)
442
447
443 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
444
449
445 # Functions to call the underlying shell.
450 # Functions to call the underlying shell.
446
451
447 # utility to expand user variables via Itpl
452 # utility to expand user variables via Itpl
448 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
449 self.user_ns))
454 self.user_ns))
450 # The first is similar to os.system, but it doesn't return a value,
455 # The first is similar to os.system, but it doesn't return a value,
451 # and it allows interpolation of variables in the user's namespace.
456 # and it allows interpolation of variables in the user's namespace.
452 self.system = lambda cmd: shell(self.var_expand(cmd),
457 self.system = lambda cmd: shell(self.var_expand(cmd),
453 header='IPython system call: ',
458 header='IPython system call: ',
454 verbose=self.rc.system_verbose)
459 verbose=self.rc.system_verbose)
455 # These are for getoutput and getoutputerror:
460 # These are for getoutput and getoutputerror:
456 self.getoutput = lambda cmd: \
461 self.getoutput = lambda cmd: \
457 getoutput(self.var_expand(cmd),
462 getoutput(self.var_expand(cmd),
458 header='IPython system call: ',
463 header='IPython system call: ',
459 verbose=self.rc.system_verbose)
464 verbose=self.rc.system_verbose)
460 self.getoutputerror = lambda cmd: \
465 self.getoutputerror = lambda cmd: \
461 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
462 self.user_ns)),
467 self.user_ns)),
463 header='IPython system call: ',
468 header='IPython system call: ',
464 verbose=self.rc.system_verbose)
469 verbose=self.rc.system_verbose)
465
470
466 # RegExp for splitting line contents into pre-char//first
471 # RegExp for splitting line contents into pre-char//first
467 # word-method//rest. For clarity, each group in on one line.
472 # word-method//rest. For clarity, each group in on one line.
468
473
469 # WARNING: update the regexp if the above escapes are changed, as they
474 # WARNING: update the regexp if the above escapes are changed, as they
470 # are hardwired in.
475 # are hardwired in.
471
476
472 # Don't get carried away with trying to make the autocalling catch too
477 # Don't get carried away with trying to make the autocalling catch too
473 # much: it's better to be conservative rather than to trigger hidden
478 # much: it's better to be conservative rather than to trigger hidden
474 # evals() somewhere and end up causing side effects.
479 # evals() somewhere and end up causing side effects.
475
480
476 self.line_split = re.compile(r'^([\s*,;/])'
481 self.line_split = re.compile(r'^([\s*,;/])'
477 r'([\?\w\.]+\w*\s*)'
482 r'([\?\w\.]+\w*\s*)'
478 r'(\(?.*$)')
483 r'(\(?.*$)')
479
484
480 # Original re, keep around for a while in case changes break something
485 # Original re, keep around for a while in case changes break something
481 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
482 # r'(\s*[\?\w\.]+\w*\s*)'
487 # r'(\s*[\?\w\.]+\w*\s*)'
483 # r'(\(?.*$)')
488 # r'(\(?.*$)')
484
489
485 # RegExp to identify potential function names
490 # RegExp to identify potential function names
486 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
487
492
488 # RegExp to exclude strings with this start from autocalling. In
493 # RegExp to exclude strings with this start from autocalling. In
489 # particular, all binary operators should be excluded, so that if foo
494 # particular, all binary operators should be excluded, so that if foo
490 # is callable, foo OP bar doesn't become foo(OP bar), which is
495 # is callable, foo OP bar doesn't become foo(OP bar), which is
491 # invalid. The characters '!=()' don't need to be checked for, as the
496 # invalid. The characters '!=()' don't need to be checked for, as the
492 # _prefilter routine explicitely does so, to catch direct calls and
497 # _prefilter routine explicitely does so, to catch direct calls and
493 # rebindings of existing names.
498 # rebindings of existing names.
494
499
495 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
496 # it affects the rest of the group in square brackets.
501 # it affects the rest of the group in square brackets.
497 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
498 '|^is |^not |^in |^and |^or ')
503 '|^is |^not |^in |^and |^or ')
499
504
500 # try to catch also methods for stuff in lists/tuples/dicts: off
505 # try to catch also methods for stuff in lists/tuples/dicts: off
501 # (experimental). For this to work, the line_split regexp would need
506 # (experimental). For this to work, the line_split regexp would need
502 # to be modified so it wouldn't break things at '['. That line is
507 # to be modified so it wouldn't break things at '['. That line is
503 # nasty enough that I shouldn't change it until I can test it _well_.
508 # nasty enough that I shouldn't change it until I can test it _well_.
504 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
505
510
506 # keep track of where we started running (mainly for crash post-mortem)
511 # keep track of where we started running (mainly for crash post-mortem)
507 self.starting_dir = os.getcwd()
512 self.starting_dir = os.getcwd()
508
513
509 # Various switches which can be set
514 # Various switches which can be set
510 self.CACHELENGTH = 5000 # this is cheap, it's just text
515 self.CACHELENGTH = 5000 # this is cheap, it's just text
511 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
512 self.banner2 = banner2
517 self.banner2 = banner2
513
518
514 # TraceBack handlers:
519 # TraceBack handlers:
515
520
516 # Syntax error handler.
521 # Syntax error handler.
517 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
518
523
519 # The interactive one is initialized with an offset, meaning we always
524 # The interactive one is initialized with an offset, meaning we always
520 # want to remove the topmost item in the traceback, which is our own
525 # want to remove the topmost item in the traceback, which is our own
521 # internal code. Valid modes: ['Plain','Context','Verbose']
526 # internal code. Valid modes: ['Plain','Context','Verbose']
522 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
523 color_scheme='NoColor',
528 color_scheme='NoColor',
524 tb_offset = 1)
529 tb_offset = 1)
525
530
526 # IPython itself shouldn't crash. This will produce a detailed
531 # IPython itself shouldn't crash. This will produce a detailed
527 # post-mortem if it does. But we only install the crash handler for
532 # post-mortem if it does. But we only install the crash handler for
528 # non-threaded shells, the threaded ones use a normal verbose reporter
533 # non-threaded shells, the threaded ones use a normal verbose reporter
529 # and lose the crash handler. This is because exceptions in the main
534 # and lose the crash handler. This is because exceptions in the main
530 # thread (such as in GUI code) propagate directly to sys.excepthook,
535 # thread (such as in GUI code) propagate directly to sys.excepthook,
531 # and there's no point in printing crash dumps for every user exception.
536 # and there's no point in printing crash dumps for every user exception.
532 if self.isthreaded:
537 if self.isthreaded:
533 sys.excepthook = ultraTB.FormattedTB()
538 sys.excepthook = ultraTB.FormattedTB()
534 else:
539 else:
535 from IPython import CrashHandler
540 from IPython import CrashHandler
536 sys.excepthook = CrashHandler.CrashHandler(self)
541 sys.excepthook = CrashHandler.CrashHandler(self)
537
542
538 # The instance will store a pointer to this, so that runtime code
543 # The instance will store a pointer to this, so that runtime code
539 # (such as magics) can access it. This is because during the
544 # (such as magics) can access it. This is because during the
540 # read-eval loop, it gets temporarily overwritten (to deal with GUI
545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
541 # frameworks).
546 # frameworks).
542 self.sys_excepthook = sys.excepthook
547 self.sys_excepthook = sys.excepthook
543
548
544 # and add any custom exception handlers the user may have specified
549 # and add any custom exception handlers the user may have specified
545 self.set_custom_exc(*custom_exceptions)
550 self.set_custom_exc(*custom_exceptions)
546
551
547 # Object inspector
552 # Object inspector
548 self.inspector = OInspect.Inspector(OInspect.InspectColors,
553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
549 PyColorize.ANSICodeColors,
554 PyColorize.ANSICodeColors,
550 'NoColor')
555 'NoColor')
551 # indentation management
556 # indentation management
552 self.autoindent = False
557 self.autoindent = False
553 self.indent_current_nsp = 0
558 self.indent_current_nsp = 0
554 self.indent_current = '' # actual indent string
559 self.indent_current = '' # actual indent string
555
560
556 # Make some aliases automatically
561 # Make some aliases automatically
557 # Prepare list of shell aliases to auto-define
562 # Prepare list of shell aliases to auto-define
558 if os.name == 'posix':
563 if os.name == 'posix':
559 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
560 'mv mv -i','rm rm -i','cp cp -i',
565 'mv mv -i','rm rm -i','cp cp -i',
561 'cat cat','less less','clear clear',
566 'cat cat','less less','clear clear',
562 # a better ls
567 # a better ls
563 'ls ls -F',
568 'ls ls -F',
564 # long ls
569 # long ls
565 'll ls -lF',
570 'll ls -lF',
566 # color ls
571 # color ls
567 'lc ls -F -o --color',
572 'lc ls -F -o --color',
568 # ls normal files only
573 # ls normal files only
569 'lf ls -F -o --color %l | grep ^-',
574 'lf ls -F -o --color %l | grep ^-',
570 # ls symbolic links
575 # ls symbolic links
571 'lk ls -F -o --color %l | grep ^l',
576 'lk ls -F -o --color %l | grep ^l',
572 # directories or links to directories,
577 # directories or links to directories,
573 'ldir ls -F -o --color %l | grep /$',
578 'ldir ls -F -o --color %l | grep /$',
574 # things which are executable
579 # things which are executable
575 'lx ls -F -o --color %l | grep ^-..x',
580 'lx ls -F -o --color %l | grep ^-..x',
576 )
581 )
577 elif os.name in ['nt','dos']:
582 elif os.name in ['nt','dos']:
578 auto_alias = ('dir dir /on', 'ls dir /on',
583 auto_alias = ('dir dir /on', 'ls dir /on',
579 'ddir dir /ad /on', 'ldir dir /ad /on',
584 'ddir dir /ad /on', 'ldir dir /ad /on',
580 'mkdir mkdir','rmdir rmdir','echo echo',
585 'mkdir mkdir','rmdir rmdir','echo echo',
581 'ren ren','cls cls','copy copy')
586 'ren ren','cls cls','copy copy')
582 else:
587 else:
583 auto_alias = ()
588 auto_alias = ()
584 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
585 # Call the actual (public) initializer
590 # Call the actual (public) initializer
586 self.init_auto_alias()
591 self.init_auto_alias()
587 # end __init__
592 # end __init__
588
593
589 def post_config_initialization(self):
594 def post_config_initialization(self):
590 """Post configuration init method
595 """Post configuration init method
591
596
592 This is called after the configuration files have been processed to
597 This is called after the configuration files have been processed to
593 'finalize' the initialization."""
598 'finalize' the initialization."""
594
599
595 rc = self.rc
600 rc = self.rc
596
601
597 # Load readline proper
602 # Load readline proper
598 if rc.readline:
603 if rc.readline:
599 self.init_readline()
604 self.init_readline()
600
605
601 # log system
606 # log system
602 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
603 # local shortcut, this is used a LOT
608 # local shortcut, this is used a LOT
604 self.log = self.logger.log
609 self.log = self.logger.log
605
610
606 # Initialize cache, set in/out prompts and printing system
611 # Initialize cache, set in/out prompts and printing system
607 self.outputcache = CachedOutput(self,
612 self.outputcache = CachedOutput(self,
608 rc.cache_size,
613 rc.cache_size,
609 rc.pprint,
614 rc.pprint,
610 input_sep = rc.separate_in,
615 input_sep = rc.separate_in,
611 output_sep = rc.separate_out,
616 output_sep = rc.separate_out,
612 output_sep2 = rc.separate_out2,
617 output_sep2 = rc.separate_out2,
613 ps1 = rc.prompt_in1,
618 ps1 = rc.prompt_in1,
614 ps2 = rc.prompt_in2,
619 ps2 = rc.prompt_in2,
615 ps_out = rc.prompt_out,
620 ps_out = rc.prompt_out,
616 pad_left = rc.prompts_pad_left)
621 pad_left = rc.prompts_pad_left)
617
622
618 # user may have over-ridden the default print hook:
623 # user may have over-ridden the default print hook:
619 try:
624 try:
620 self.outputcache.__class__.display = self.hooks.display
625 self.outputcache.__class__.display = self.hooks.display
621 except AttributeError:
626 except AttributeError:
622 pass
627 pass
623
628
624 # I don't like assigning globally to sys, because it means when embedding
629 # I don't like assigning globally to sys, because it means when embedding
625 # instances, each embedded instance overrides the previous choice. But
630 # instances, each embedded instance overrides the previous choice. But
626 # sys.displayhook seems to be called internally by exec, so I don't see a
631 # sys.displayhook seems to be called internally by exec, so I don't see a
627 # way around it.
632 # way around it.
628 sys.displayhook = self.outputcache
633 sys.displayhook = self.outputcache
629
634
630 # Set user colors (don't do it in the constructor above so that it
635 # Set user colors (don't do it in the constructor above so that it
631 # doesn't crash if colors option is invalid)
636 # doesn't crash if colors option is invalid)
632 self.magic_colors(rc.colors)
637 self.magic_colors(rc.colors)
633
638
634 # Set calling of pdb on exceptions
639 # Set calling of pdb on exceptions
635 self.call_pdb = rc.pdb
640 self.call_pdb = rc.pdb
636
641
637 # Load user aliases
642 # Load user aliases
638 for alias in rc.alias:
643 for alias in rc.alias:
639 self.magic_alias(alias)
644 self.magic_alias(alias)
640
645
641 # dynamic data that survives through sessions
646 # dynamic data that survives through sessions
642 # XXX make the filename a config option?
647 # XXX make the filename a config option?
643 persist_base = 'persist'
648 persist_base = 'persist'
644 if rc.profile:
649 if rc.profile:
645 persist_base += '_%s' % rc.profile
650 persist_base += '_%s' % rc.profile
646 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
647
652
648 try:
653 try:
649 self.persist = pickle.load(file(self.persist_fname))
654 self.persist = pickle.load(file(self.persist_fname))
650 except:
655 except:
651 self.persist = {}
656 self.persist = {}
652
657
653
658
654 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
655 try:
660 try:
656 obj = pickle.loads(value)
661 obj = pickle.loads(value)
657 except:
662 except:
658
663
659 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
660 print "The error was:",sys.exc_info()[0]
665 print "The error was:",sys.exc_info()[0]
661 continue
666 continue
662
667
663
668
664 self.user_ns[key] = obj
669 self.user_ns[key] = obj
665
670
666 def add_builtins(self):
671 def add_builtins(self):
667 """Store ipython references into the builtin namespace.
672 """Store ipython references into the builtin namespace.
668
673
669 Some parts of ipython operate via builtins injected here, which hold a
674 Some parts of ipython operate via builtins injected here, which hold a
670 reference to IPython itself."""
675 reference to IPython itself."""
671
676
672 builtins_new = dict(__IPYTHON__ = self,
677 builtins_new = dict(__IPYTHON__ = self,
673 ip_set_hook = self.set_hook,
678 ip_set_hook = self.set_hook,
674 jobs = self.jobs,
679 jobs = self.jobs,
675 ipmagic = self.ipmagic,
680 ipmagic = self.ipmagic,
676 ipalias = self.ipalias,
681 ipalias = self.ipalias,
677 ipsystem = self.ipsystem,
682 ipsystem = self.ipsystem,
678 )
683 )
679 for biname,bival in builtins_new.items():
684 for biname,bival in builtins_new.items():
680 try:
685 try:
681 # store the orignal value so we can restore it
686 # store the orignal value so we can restore it
682 self.builtins_added[biname] = __builtin__.__dict__[biname]
687 self.builtins_added[biname] = __builtin__.__dict__[biname]
683 except KeyError:
688 except KeyError:
684 # or mark that it wasn't defined, and we'll just delete it at
689 # or mark that it wasn't defined, and we'll just delete it at
685 # cleanup
690 # cleanup
686 self.builtins_added[biname] = Undefined
691 self.builtins_added[biname] = Undefined
687 __builtin__.__dict__[biname] = bival
692 __builtin__.__dict__[biname] = bival
688
693
689 # Keep in the builtins a flag for when IPython is active. We set it
694 # Keep in the builtins a flag for when IPython is active. We set it
690 # with setdefault so that multiple nested IPythons don't clobber one
695 # with setdefault so that multiple nested IPythons don't clobber one
691 # another. Each will increase its value by one upon being activated,
696 # another. Each will increase its value by one upon being activated,
692 # which also gives us a way to determine the nesting level.
697 # which also gives us a way to determine the nesting level.
693 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
694
699
695 def clean_builtins(self):
700 def clean_builtins(self):
696 """Remove any builtins which might have been added by add_builtins, or
701 """Remove any builtins which might have been added by add_builtins, or
697 restore overwritten ones to their previous values."""
702 restore overwritten ones to their previous values."""
698 for biname,bival in self.builtins_added.items():
703 for biname,bival in self.builtins_added.items():
699 if bival is Undefined:
704 if bival is Undefined:
700 del __builtin__.__dict__[biname]
705 del __builtin__.__dict__[biname]
701 else:
706 else:
702 __builtin__.__dict__[biname] = bival
707 __builtin__.__dict__[biname] = bival
703 self.builtins_added.clear()
708 self.builtins_added.clear()
704
709
705 def set_hook(self,name,hook):
710 def set_hook(self,name,hook):
706 """set_hook(name,hook) -> sets an internal IPython hook.
711 """set_hook(name,hook) -> sets an internal IPython hook.
707
712
708 IPython exposes some of its internal API as user-modifiable hooks. By
713 IPython exposes some of its internal API as user-modifiable hooks. By
709 resetting one of these hooks, you can modify IPython's behavior to
714 resetting one of these hooks, you can modify IPython's behavior to
710 call at runtime your own routines."""
715 call at runtime your own routines."""
711
716
712 # At some point in the future, this should validate the hook before it
717 # At some point in the future, this should validate the hook before it
713 # accepts it. Probably at least check that the hook takes the number
718 # accepts it. Probably at least check that the hook takes the number
714 # of args it's supposed to.
719 # of args it's supposed to.
715 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
716
721
717 def set_custom_exc(self,exc_tuple,handler):
722 def set_custom_exc(self,exc_tuple,handler):
718 """set_custom_exc(exc_tuple,handler)
723 """set_custom_exc(exc_tuple,handler)
719
724
720 Set a custom exception handler, which will be called if any of the
725 Set a custom exception handler, which will be called if any of the
721 exceptions in exc_tuple occur in the mainloop (specifically, in the
726 exceptions in exc_tuple occur in the mainloop (specifically, in the
722 runcode() method.
727 runcode() method.
723
728
724 Inputs:
729 Inputs:
725
730
726 - exc_tuple: a *tuple* of valid exceptions to call the defined
731 - exc_tuple: a *tuple* of valid exceptions to call the defined
727 handler for. It is very important that you use a tuple, and NOT A
732 handler for. It is very important that you use a tuple, and NOT A
728 LIST here, because of the way Python's except statement works. If
733 LIST here, because of the way Python's except statement works. If
729 you only want to trap a single exception, use a singleton tuple:
734 you only want to trap a single exception, use a singleton tuple:
730
735
731 exc_tuple == (MyCustomException,)
736 exc_tuple == (MyCustomException,)
732
737
733 - handler: this must be defined as a function with the following
738 - handler: this must be defined as a function with the following
734 basic interface: def my_handler(self,etype,value,tb).
739 basic interface: def my_handler(self,etype,value,tb).
735
740
736 This will be made into an instance method (via new.instancemethod)
741 This will be made into an instance method (via new.instancemethod)
737 of IPython itself, and it will be called if any of the exceptions
742 of IPython itself, and it will be called if any of the exceptions
738 listed in the exc_tuple are caught. If the handler is None, an
743 listed in the exc_tuple are caught. If the handler is None, an
739 internal basic one is used, which just prints basic info.
744 internal basic one is used, which just prints basic info.
740
745
741 WARNING: by putting in your own exception handler into IPython's main
746 WARNING: by putting in your own exception handler into IPython's main
742 execution loop, you run a very good chance of nasty crashes. This
747 execution loop, you run a very good chance of nasty crashes. This
743 facility should only be used if you really know what you are doing."""
748 facility should only be used if you really know what you are doing."""
744
749
745 assert type(exc_tuple)==type(()) , \
750 assert type(exc_tuple)==type(()) , \
746 "The custom exceptions must be given AS A TUPLE."
751 "The custom exceptions must be given AS A TUPLE."
747
752
748 def dummy_handler(self,etype,value,tb):
753 def dummy_handler(self,etype,value,tb):
749 print '*** Simple custom exception handler ***'
754 print '*** Simple custom exception handler ***'
750 print 'Exception type :',etype
755 print 'Exception type :',etype
751 print 'Exception value:',value
756 print 'Exception value:',value
752 print 'Traceback :',tb
757 print 'Traceback :',tb
753 print 'Source code :','\n'.join(self.buffer)
758 print 'Source code :','\n'.join(self.buffer)
754
759
755 if handler is None: handler = dummy_handler
760 if handler is None: handler = dummy_handler
756
761
757 self.CustomTB = new.instancemethod(handler,self,self.__class__)
762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
758 self.custom_exceptions = exc_tuple
763 self.custom_exceptions = exc_tuple
759
764
760 def set_custom_completer(self,completer,pos=0):
765 def set_custom_completer(self,completer,pos=0):
761 """set_custom_completer(completer,pos=0)
766 """set_custom_completer(completer,pos=0)
762
767
763 Adds a new custom completer function.
768 Adds a new custom completer function.
764
769
765 The position argument (defaults to 0) is the index in the completers
770 The position argument (defaults to 0) is the index in the completers
766 list where you want the completer to be inserted."""
771 list where you want the completer to be inserted."""
767
772
768 newcomp = new.instancemethod(completer,self.Completer,
773 newcomp = new.instancemethod(completer,self.Completer,
769 self.Completer.__class__)
774 self.Completer.__class__)
770 self.Completer.matchers.insert(pos,newcomp)
775 self.Completer.matchers.insert(pos,newcomp)
771
776
772 def _get_call_pdb(self):
777 def _get_call_pdb(self):
773 return self._call_pdb
778 return self._call_pdb
774
779
775 def _set_call_pdb(self,val):
780 def _set_call_pdb(self,val):
776
781
777 if val not in (0,1,False,True):
782 if val not in (0,1,False,True):
778 raise ValueError,'new call_pdb value must be boolean'
783 raise ValueError,'new call_pdb value must be boolean'
779
784
780 # store value in instance
785 # store value in instance
781 self._call_pdb = val
786 self._call_pdb = val
782
787
783 # notify the actual exception handlers
788 # notify the actual exception handlers
784 self.InteractiveTB.call_pdb = val
789 self.InteractiveTB.call_pdb = val
785 if self.isthreaded:
790 if self.isthreaded:
786 try:
791 try:
787 self.sys_excepthook.call_pdb = val
792 self.sys_excepthook.call_pdb = val
788 except:
793 except:
789 warn('Failed to activate pdb for threaded exception handler')
794 warn('Failed to activate pdb for threaded exception handler')
790
795
791 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
792 'Control auto-activation of pdb at exceptions')
797 'Control auto-activation of pdb at exceptions')
793
798
794
799
795 # These special functions get installed in the builtin namespace, to
800 # These special functions get installed in the builtin namespace, to
796 # provide programmatic (pure python) access to magics, aliases and system
801 # provide programmatic (pure python) access to magics, aliases and system
797 # calls. This is important for logging, user scripting, and more.
802 # calls. This is important for logging, user scripting, and more.
798
803
799 # We are basically exposing, via normal python functions, the three
804 # We are basically exposing, via normal python functions, the three
800 # mechanisms in which ipython offers special call modes (magics for
805 # mechanisms in which ipython offers special call modes (magics for
801 # internal control, aliases for direct system access via pre-selected
806 # internal control, aliases for direct system access via pre-selected
802 # names, and !cmd for calling arbitrary system commands).
807 # names, and !cmd for calling arbitrary system commands).
803
808
804 def ipmagic(self,arg_s):
809 def ipmagic(self,arg_s):
805 """Call a magic function by name.
810 """Call a magic function by name.
806
811
807 Input: a string containing the name of the magic function to call and any
812 Input: a string containing the name of the magic function to call and any
808 additional arguments to be passed to the magic.
813 additional arguments to be passed to the magic.
809
814
810 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
811 prompt:
816 prompt:
812
817
813 In[1]: %name -opt foo bar
818 In[1]: %name -opt foo bar
814
819
815 To call a magic without arguments, simply use ipmagic('name').
820 To call a magic without arguments, simply use ipmagic('name').
816
821
817 This provides a proper Python function to call IPython's magics in any
822 This provides a proper Python function to call IPython's magics in any
818 valid Python code you can type at the interpreter, including loops and
823 valid Python code you can type at the interpreter, including loops and
819 compound statements. It is added by IPython to the Python builtin
824 compound statements. It is added by IPython to the Python builtin
820 namespace upon initialization."""
825 namespace upon initialization."""
821
826
822 args = arg_s.split(' ',1)
827 args = arg_s.split(' ',1)
823 magic_name = args[0]
828 magic_name = args[0]
824 if magic_name.startswith(self.ESC_MAGIC):
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
825 magic_name = magic_name[1:]
830
826 try:
831 try:
827 magic_args = args[1]
832 magic_args = args[1]
828 except IndexError:
833 except IndexError:
829 magic_args = ''
834 magic_args = ''
830 fn = getattr(self,'magic_'+magic_name,None)
835 fn = getattr(self,'magic_'+magic_name,None)
831 if fn is None:
836 if fn is None:
832 error("Magic function `%s` not found." % magic_name)
837 error("Magic function `%s` not found." % magic_name)
833 else:
838 else:
834 magic_args = self.var_expand(magic_args)
839 magic_args = self.var_expand(magic_args)
835 return fn(magic_args)
840 return fn(magic_args)
836
841
837 def ipalias(self,arg_s):
842 def ipalias(self,arg_s):
838 """Call an alias by name.
843 """Call an alias by name.
839
844
840 Input: a string containing the name of the alias to call and any
845 Input: a string containing the name of the alias to call and any
841 additional arguments to be passed to the magic.
846 additional arguments to be passed to the magic.
842
847
843 ipalias('name -opt foo bar') is equivalent to typing at the ipython
848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
844 prompt:
849 prompt:
845
850
846 In[1]: name -opt foo bar
851 In[1]: name -opt foo bar
847
852
848 To call an alias without arguments, simply use ipalias('name').
853 To call an alias without arguments, simply use ipalias('name').
849
854
850 This provides a proper Python function to call IPython's aliases in any
855 This provides a proper Python function to call IPython's aliases in any
851 valid Python code you can type at the interpreter, including loops and
856 valid Python code you can type at the interpreter, including loops and
852 compound statements. It is added by IPython to the Python builtin
857 compound statements. It is added by IPython to the Python builtin
853 namespace upon initialization."""
858 namespace upon initialization."""
854
859
855 args = arg_s.split(' ',1)
860 args = arg_s.split(' ',1)
856 alias_name = args[0]
861 alias_name = args[0]
857 try:
862 try:
858 alias_args = args[1]
863 alias_args = args[1]
859 except IndexError:
864 except IndexError:
860 alias_args = ''
865 alias_args = ''
861 if alias_name in self.alias_table:
866 if alias_name in self.alias_table:
862 self.call_alias(alias_name,alias_args)
867 self.call_alias(alias_name,alias_args)
863 else:
868 else:
864 error("Alias `%s` not found." % alias_name)
869 error("Alias `%s` not found." % alias_name)
865
870
866 def ipsystem(self,arg_s):
871 def ipsystem(self,arg_s):
867 """Make a system call, using IPython."""
872 """Make a system call, using IPython."""
868
873
869 self.system(arg_s)
874 self.system(arg_s)
870
875
871 def complete(self,text):
876 def complete(self,text):
872 """Return a sorted list of all possible completions on text.
877 """Return a sorted list of all possible completions on text.
873
878
874 Inputs:
879 Inputs:
875
880
876 - text: a string of text to be completed on.
881 - text: a string of text to be completed on.
877
882
878 This is a wrapper around the completion mechanism, similar to what
883 This is a wrapper around the completion mechanism, similar to what
879 readline does at the command line when the TAB key is hit. By
884 readline does at the command line when the TAB key is hit. By
880 exposing it as a method, it can be used by other non-readline
885 exposing it as a method, it can be used by other non-readline
881 environments (such as GUIs) for text completion.
886 environments (such as GUIs) for text completion.
882
887
883 Simple usage example:
888 Simple usage example:
884
889
885 In [1]: x = 'hello'
890 In [1]: x = 'hello'
886
891
887 In [2]: __IP.complete('x.l')
892 In [2]: __IP.complete('x.l')
888 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
889
894
890 complete = self.Completer.complete
895 complete = self.Completer.complete
891 state = 0
896 state = 0
892 # use a dict so we get unique keys, since ipyhton's multiple
897 # use a dict so we get unique keys, since ipyhton's multiple
893 # completers can return duplicates.
898 # completers can return duplicates.
894 comps = {}
899 comps = {}
895 while True:
900 while True:
896 newcomp = complete(text,state)
901 newcomp = complete(text,state)
897 if newcomp is None:
902 if newcomp is None:
898 break
903 break
899 comps[newcomp] = 1
904 comps[newcomp] = 1
900 state += 1
905 state += 1
901 outcomps = comps.keys()
906 outcomps = comps.keys()
902 outcomps.sort()
907 outcomps.sort()
903 return outcomps
908 return outcomps
904
909
905 def set_completer_frame(self, frame=None):
910 def set_completer_frame(self, frame=None):
906 if frame:
911 if frame:
907 self.Completer.namespace = frame.f_locals
912 self.Completer.namespace = frame.f_locals
908 self.Completer.global_namespace = frame.f_globals
913 self.Completer.global_namespace = frame.f_globals
909 else:
914 else:
910 self.Completer.namespace = self.user_ns
915 self.Completer.namespace = self.user_ns
911 self.Completer.global_namespace = self.user_global_ns
916 self.Completer.global_namespace = self.user_global_ns
912
917
913 def init_auto_alias(self):
918 def init_auto_alias(self):
914 """Define some aliases automatically.
919 """Define some aliases automatically.
915
920
916 These are ALL parameter-less aliases"""
921 These are ALL parameter-less aliases"""
917
922
918 for alias,cmd in self.auto_alias:
923 for alias,cmd in self.auto_alias:
919 self.alias_table[alias] = (0,cmd)
924 self.alias_table[alias] = (0,cmd)
920
925
921 def alias_table_validate(self,verbose=0):
926 def alias_table_validate(self,verbose=0):
922 """Update information about the alias table.
927 """Update information about the alias table.
923
928
924 In particular, make sure no Python keywords/builtins are in it."""
929 In particular, make sure no Python keywords/builtins are in it."""
925
930
926 no_alias = self.no_alias
931 no_alias = self.no_alias
927 for k in self.alias_table.keys():
932 for k in self.alias_table.keys():
928 if k in no_alias:
933 if k in no_alias:
929 del self.alias_table[k]
934 del self.alias_table[k]
930 if verbose:
935 if verbose:
931 print ("Deleting alias <%s>, it's a Python "
936 print ("Deleting alias <%s>, it's a Python "
932 "keyword or builtin." % k)
937 "keyword or builtin." % k)
933
938
934 def set_autoindent(self,value=None):
939 def set_autoindent(self,value=None):
935 """Set the autoindent flag, checking for readline support.
940 """Set the autoindent flag, checking for readline support.
936
941
937 If called with no arguments, it acts as a toggle."""
942 If called with no arguments, it acts as a toggle."""
938
943
939 if not self.has_readline:
944 if not self.has_readline:
940 if os.name == 'posix':
945 if os.name == 'posix':
941 warn("The auto-indent feature requires the readline library")
946 warn("The auto-indent feature requires the readline library")
942 self.autoindent = 0
947 self.autoindent = 0
943 return
948 return
944 if value is None:
949 if value is None:
945 self.autoindent = not self.autoindent
950 self.autoindent = not self.autoindent
946 else:
951 else:
947 self.autoindent = value
952 self.autoindent = value
948
953
949 def rc_set_toggle(self,rc_field,value=None):
954 def rc_set_toggle(self,rc_field,value=None):
950 """Set or toggle a field in IPython's rc config. structure.
955 """Set or toggle a field in IPython's rc config. structure.
951
956
952 If called with no arguments, it acts as a toggle.
957 If called with no arguments, it acts as a toggle.
953
958
954 If called with a non-existent field, the resulting AttributeError
959 If called with a non-existent field, the resulting AttributeError
955 exception will propagate out."""
960 exception will propagate out."""
956
961
957 rc_val = getattr(self.rc,rc_field)
962 rc_val = getattr(self.rc,rc_field)
958 if value is None:
963 if value is None:
959 value = not rc_val
964 value = not rc_val
960 setattr(self.rc,rc_field,value)
965 setattr(self.rc,rc_field,value)
961
966
962 def user_setup(self,ipythondir,rc_suffix,mode='install'):
967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
963 """Install the user configuration directory.
968 """Install the user configuration directory.
964
969
965 Can be called when running for the first time or to upgrade the user's
970 Can be called when running for the first time or to upgrade the user's
966 .ipython/ directory with the mode parameter. Valid modes are 'install'
971 .ipython/ directory with the mode parameter. Valid modes are 'install'
967 and 'upgrade'."""
972 and 'upgrade'."""
968
973
969 def wait():
974 def wait():
970 try:
975 try:
971 raw_input("Please press <RETURN> to start IPython.")
976 raw_input("Please press <RETURN> to start IPython.")
972 except EOFError:
977 except EOFError:
973 print >> Term.cout
978 print >> Term.cout
974 print '*'*70
979 print '*'*70
975
980
976 cwd = os.getcwd() # remember where we started
981 cwd = os.getcwd() # remember where we started
977 glb = glob.glob
982 glb = glob.glob
978 print '*'*70
983 print '*'*70
979 if mode == 'install':
984 if mode == 'install':
980 print \
985 print \
981 """Welcome to IPython. I will try to create a personal configuration directory
986 """Welcome to IPython. I will try to create a personal configuration directory
982 where you can customize many aspects of IPython's functionality in:\n"""
987 where you can customize many aspects of IPython's functionality in:\n"""
983 else:
988 else:
984 print 'I am going to upgrade your configuration in:'
989 print 'I am going to upgrade your configuration in:'
985
990
986 print ipythondir
991 print ipythondir
987
992
988 rcdirend = os.path.join('IPython','UserConfig')
993 rcdirend = os.path.join('IPython','UserConfig')
989 cfg = lambda d: os.path.join(d,rcdirend)
994 cfg = lambda d: os.path.join(d,rcdirend)
990 try:
995 try:
991 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
992 except IOError:
997 except IOError:
993 warning = """
998 warning = """
994 Installation error. IPython's directory was not found.
999 Installation error. IPython's directory was not found.
995
1000
996 Check the following:
1001 Check the following:
997
1002
998 The ipython/IPython directory should be in a directory belonging to your
1003 The ipython/IPython directory should be in a directory belonging to your
999 PYTHONPATH environment variable (that is, it should be in a directory
1004 PYTHONPATH environment variable (that is, it should be in a directory
1000 belonging to sys.path). You can copy it explicitly there or just link to it.
1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1001
1006
1002 IPython will proceed with builtin defaults.
1007 IPython will proceed with builtin defaults.
1003 """
1008 """
1004 warn(warning)
1009 warn(warning)
1005 wait()
1010 wait()
1006 return
1011 return
1007
1012
1008 if mode == 'install':
1013 if mode == 'install':
1009 try:
1014 try:
1010 shutil.copytree(rcdir,ipythondir)
1015 shutil.copytree(rcdir,ipythondir)
1011 os.chdir(ipythondir)
1016 os.chdir(ipythondir)
1012 rc_files = glb("ipythonrc*")
1017 rc_files = glb("ipythonrc*")
1013 for rc_file in rc_files:
1018 for rc_file in rc_files:
1014 os.rename(rc_file,rc_file+rc_suffix)
1019 os.rename(rc_file,rc_file+rc_suffix)
1015 except:
1020 except:
1016 warning = """
1021 warning = """
1017
1022
1018 There was a problem with the installation:
1023 There was a problem with the installation:
1019 %s
1024 %s
1020 Try to correct it or contact the developers if you think it's a bug.
1025 Try to correct it or contact the developers if you think it's a bug.
1021 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1022 warn(warning)
1027 warn(warning)
1023 wait()
1028 wait()
1024 return
1029 return
1025
1030
1026 elif mode == 'upgrade':
1031 elif mode == 'upgrade':
1027 try:
1032 try:
1028 os.chdir(ipythondir)
1033 os.chdir(ipythondir)
1029 except:
1034 except:
1030 print """
1035 print """
1031 Can not upgrade: changing to directory %s failed. Details:
1036 Can not upgrade: changing to directory %s failed. Details:
1032 %s
1037 %s
1033 """ % (ipythondir,sys.exc_info()[1])
1038 """ % (ipythondir,sys.exc_info()[1])
1034 wait()
1039 wait()
1035 return
1040 return
1036 else:
1041 else:
1037 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1038 for new_full_path in sources:
1043 for new_full_path in sources:
1039 new_filename = os.path.basename(new_full_path)
1044 new_filename = os.path.basename(new_full_path)
1040 if new_filename.startswith('ipythonrc'):
1045 if new_filename.startswith('ipythonrc'):
1041 new_filename = new_filename + rc_suffix
1046 new_filename = new_filename + rc_suffix
1042 # The config directory should only contain files, skip any
1047 # The config directory should only contain files, skip any
1043 # directories which may be there (like CVS)
1048 # directories which may be there (like CVS)
1044 if os.path.isdir(new_full_path):
1049 if os.path.isdir(new_full_path):
1045 continue
1050 continue
1046 if os.path.exists(new_filename):
1051 if os.path.exists(new_filename):
1047 old_file = new_filename+'.old'
1052 old_file = new_filename+'.old'
1048 if os.path.exists(old_file):
1053 if os.path.exists(old_file):
1049 os.remove(old_file)
1054 os.remove(old_file)
1050 os.rename(new_filename,old_file)
1055 os.rename(new_filename,old_file)
1051 shutil.copy(new_full_path,new_filename)
1056 shutil.copy(new_full_path,new_filename)
1052 else:
1057 else:
1053 raise ValueError,'unrecognized mode for install:',`mode`
1058 raise ValueError,'unrecognized mode for install:',`mode`
1054
1059
1055 # Fix line-endings to those native to each platform in the config
1060 # Fix line-endings to those native to each platform in the config
1056 # directory.
1061 # directory.
1057 try:
1062 try:
1058 os.chdir(ipythondir)
1063 os.chdir(ipythondir)
1059 except:
1064 except:
1060 print """
1065 print """
1061 Problem: changing to directory %s failed.
1066 Problem: changing to directory %s failed.
1062 Details:
1067 Details:
1063 %s
1068 %s
1064
1069
1065 Some configuration files may have incorrect line endings. This should not
1070 Some configuration files may have incorrect line endings. This should not
1066 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1067 wait()
1072 wait()
1068 else:
1073 else:
1069 for fname in glb('ipythonrc*'):
1074 for fname in glb('ipythonrc*'):
1070 try:
1075 try:
1071 native_line_ends(fname,backup=0)
1076 native_line_ends(fname,backup=0)
1072 except IOError:
1077 except IOError:
1073 pass
1078 pass
1074
1079
1075 if mode == 'install':
1080 if mode == 'install':
1076 print """
1081 print """
1077 Successful installation!
1082 Successful installation!
1078
1083
1079 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1080 IPython manual (there are both HTML and PDF versions supplied with the
1085 IPython manual (there are both HTML and PDF versions supplied with the
1081 distribution) to make sure that your system environment is properly configured
1086 distribution) to make sure that your system environment is properly configured
1082 to take advantage of IPython's features."""
1087 to take advantage of IPython's features."""
1083 else:
1088 else:
1084 print """
1089 print """
1085 Successful upgrade!
1090 Successful upgrade!
1086
1091
1087 All files in your directory:
1092 All files in your directory:
1088 %(ipythondir)s
1093 %(ipythondir)s
1089 which would have been overwritten by the upgrade were backed up with a .old
1094 which would have been overwritten by the upgrade were backed up with a .old
1090 extension. If you had made particular customizations in those files you may
1095 extension. If you had made particular customizations in those files you may
1091 want to merge them back into the new files.""" % locals()
1096 want to merge them back into the new files.""" % locals()
1092 wait()
1097 wait()
1093 os.chdir(cwd)
1098 os.chdir(cwd)
1094 # end user_setup()
1099 # end user_setup()
1095
1100
1096 def atexit_operations(self):
1101 def atexit_operations(self):
1097 """This will be executed at the time of exit.
1102 """This will be executed at the time of exit.
1098
1103
1099 Saving of persistent data should be performed here. """
1104 Saving of persistent data should be performed here. """
1100
1105
1101 #print '*** IPython exit cleanup ***' # dbg
1106 #print '*** IPython exit cleanup ***' # dbg
1102 # input history
1107 # input history
1103 self.savehist()
1108 self.savehist()
1104
1109
1105 # Cleanup all tempfiles left around
1110 # Cleanup all tempfiles left around
1106 for tfile in self.tempfiles:
1111 for tfile in self.tempfiles:
1107 try:
1112 try:
1108 os.unlink(tfile)
1113 os.unlink(tfile)
1109 except OSError:
1114 except OSError:
1110 pass
1115 pass
1111
1116
1112 # save the "persistent data" catch-all dictionary
1117 # save the "persistent data" catch-all dictionary
1113 try:
1118 try:
1114 pickle.dump(self.persist, open(self.persist_fname,"w"))
1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1115 except:
1120 except:
1116 print "*** ERROR *** persistent data saving failed."
1121 print "*** ERROR *** persistent data saving failed."
1117
1122
1118 def savehist(self):
1123 def savehist(self):
1119 """Save input history to a file (via readline library)."""
1124 """Save input history to a file (via readline library)."""
1120 try:
1125 try:
1121 self.readline.write_history_file(self.histfile)
1126 self.readline.write_history_file(self.histfile)
1122 except:
1127 except:
1123 print 'Unable to save IPython command history to file: ' + \
1128 print 'Unable to save IPython command history to file: ' + \
1124 `self.histfile`
1129 `self.histfile`
1125
1130
1126 def pre_readline(self):
1131 def pre_readline(self):
1127 """readline hook to be used at the start of each line.
1132 """readline hook to be used at the start of each line.
1128
1133
1129 Currently it handles auto-indent only."""
1134 Currently it handles auto-indent only."""
1130
1135
1131 self.readline.insert_text(self.indent_current)
1136 self.readline.insert_text(self.indent_current)
1132
1137
1133 def init_readline(self):
1138 def init_readline(self):
1134 """Command history completion/saving/reloading."""
1139 """Command history completion/saving/reloading."""
1135 try:
1140 try:
1136 import readline
1141 import readline
1137 except ImportError:
1142 except ImportError:
1138 self.has_readline = 0
1143 self.has_readline = 0
1139 self.readline = None
1144 self.readline = None
1140 # no point in bugging windows users with this every time:
1145 # no point in bugging windows users with this every time:
1141 if os.name == 'posix':
1146 if os.name == 'posix':
1142 warn('Readline services not available on this platform.')
1147 warn('Readline services not available on this platform.')
1143 else:
1148 else:
1144 import atexit
1149 import atexit
1145 from IPython.completer import IPCompleter
1150 from IPython.completer import IPCompleter
1146 self.Completer = IPCompleter(self,
1151 self.Completer = IPCompleter(self,
1147 self.user_ns,
1152 self.user_ns,
1148 self.user_global_ns,
1153 self.user_global_ns,
1149 self.rc.readline_omit__names,
1154 self.rc.readline_omit__names,
1150 self.alias_table)
1155 self.alias_table)
1151
1156
1152 # Platform-specific configuration
1157 # Platform-specific configuration
1153 if os.name == 'nt':
1158 if os.name == 'nt':
1154 self.readline_startup_hook = readline.set_pre_input_hook
1159 self.readline_startup_hook = readline.set_pre_input_hook
1155 else:
1160 else:
1156 self.readline_startup_hook = readline.set_startup_hook
1161 self.readline_startup_hook = readline.set_startup_hook
1157
1162
1158 # Load user's initrc file (readline config)
1163 # Load user's initrc file (readline config)
1159 inputrc_name = os.environ.get('INPUTRC')
1164 inputrc_name = os.environ.get('INPUTRC')
1160 if inputrc_name is None:
1165 if inputrc_name is None:
1161 home_dir = get_home_dir()
1166 home_dir = get_home_dir()
1162 if home_dir is not None:
1167 if home_dir is not None:
1163 inputrc_name = os.path.join(home_dir,'.inputrc')
1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1164 if os.path.isfile(inputrc_name):
1169 if os.path.isfile(inputrc_name):
1165 try:
1170 try:
1166 readline.read_init_file(inputrc_name)
1171 readline.read_init_file(inputrc_name)
1167 except:
1172 except:
1168 warn('Problems reading readline initialization file <%s>'
1173 warn('Problems reading readline initialization file <%s>'
1169 % inputrc_name)
1174 % inputrc_name)
1170
1175
1171 self.has_readline = 1
1176 self.has_readline = 1
1172 self.readline = readline
1177 self.readline = readline
1173 # save this in sys so embedded copies can restore it properly
1178 # save this in sys so embedded copies can restore it properly
1174 sys.ipcompleter = self.Completer.complete
1179 sys.ipcompleter = self.Completer.complete
1175 readline.set_completer(self.Completer.complete)
1180 readline.set_completer(self.Completer.complete)
1176
1181
1177 # Configure readline according to user's prefs
1182 # Configure readline according to user's prefs
1178 for rlcommand in self.rc.readline_parse_and_bind:
1183 for rlcommand in self.rc.readline_parse_and_bind:
1179 readline.parse_and_bind(rlcommand)
1184 readline.parse_and_bind(rlcommand)
1180
1185
1181 # remove some chars from the delimiters list
1186 # remove some chars from the delimiters list
1182 delims = readline.get_completer_delims()
1187 delims = readline.get_completer_delims()
1183 delims = delims.translate(string._idmap,
1188 delims = delims.translate(string._idmap,
1184 self.rc.readline_remove_delims)
1189 self.rc.readline_remove_delims)
1185 readline.set_completer_delims(delims)
1190 readline.set_completer_delims(delims)
1186 # otherwise we end up with a monster history after a while:
1191 # otherwise we end up with a monster history after a while:
1187 readline.set_history_length(1000)
1192 readline.set_history_length(1000)
1188 try:
1193 try:
1189 #print '*** Reading readline history' # dbg
1194 #print '*** Reading readline history' # dbg
1190 readline.read_history_file(self.histfile)
1195 readline.read_history_file(self.histfile)
1191 except IOError:
1196 except IOError:
1192 pass # It doesn't exist yet.
1197 pass # It doesn't exist yet.
1193
1198
1194 atexit.register(self.atexit_operations)
1199 atexit.register(self.atexit_operations)
1195 del atexit
1200 del atexit
1196
1201
1197 # Configure auto-indent for all platforms
1202 # Configure auto-indent for all platforms
1198 self.set_autoindent(self.rc.autoindent)
1203 self.set_autoindent(self.rc.autoindent)
1199
1204
1200 def _should_recompile(self,e):
1205 def _should_recompile(self,e):
1201 """Utility routine for edit_syntax_error"""
1206 """Utility routine for edit_syntax_error"""
1202
1207
1203 if e.filename in ('<ipython console>','<input>','<string>',
1208 if e.filename in ('<ipython console>','<input>','<string>',
1204 '<console>',None):
1209 '<console>',None):
1205
1210
1206 return False
1211 return False
1207 try:
1212 try:
1208 if not ask_yes_no('Return to editor to correct syntax error? '
1213 if not ask_yes_no('Return to editor to correct syntax error? '
1209 '[Y/n] ','y'):
1214 '[Y/n] ','y'):
1210 return False
1215 return False
1211 except EOFError:
1216 except EOFError:
1212 return False
1217 return False
1213
1218
1214 def int0(x):
1219 def int0(x):
1215 try:
1220 try:
1216 return int(x)
1221 return int(x)
1217 except TypeError:
1222 except TypeError:
1218 return 0
1223 return 0
1219 # always pass integer line and offset values to editor hook
1224 # always pass integer line and offset values to editor hook
1220 self.hooks.fix_error_editor(e.filename,
1225 self.hooks.fix_error_editor(e.filename,
1221 int0(e.lineno),int0(e.offset),e.msg)
1226 int0(e.lineno),int0(e.offset),e.msg)
1222 return True
1227 return True
1223
1228
1224 def edit_syntax_error(self):
1229 def edit_syntax_error(self):
1225 """The bottom half of the syntax error handler called in the main loop.
1230 """The bottom half of the syntax error handler called in the main loop.
1226
1231
1227 Loop until syntax error is fixed or user cancels.
1232 Loop until syntax error is fixed or user cancels.
1228 """
1233 """
1229
1234
1230 while self.SyntaxTB.last_syntax_error:
1235 while self.SyntaxTB.last_syntax_error:
1231 # copy and clear last_syntax_error
1236 # copy and clear last_syntax_error
1232 err = self.SyntaxTB.clear_err_state()
1237 err = self.SyntaxTB.clear_err_state()
1233 if not self._should_recompile(err):
1238 if not self._should_recompile(err):
1234 return
1239 return
1235 try:
1240 try:
1236 # may set last_syntax_error again if a SyntaxError is raised
1241 # may set last_syntax_error again if a SyntaxError is raised
1237 self.safe_execfile(err.filename,self.shell.user_ns)
1242 self.safe_execfile(err.filename,self.shell.user_ns)
1238 except:
1243 except:
1239 self.showtraceback()
1244 self.showtraceback()
1240 else:
1245 else:
1241 f = file(err.filename)
1246 f = file(err.filename)
1242 try:
1247 try:
1243 sys.displayhook(f.read())
1248 sys.displayhook(f.read())
1244 finally:
1249 finally:
1245 f.close()
1250 f.close()
1246
1251
1247 def showsyntaxerror(self, filename=None):
1252 def showsyntaxerror(self, filename=None):
1248 """Display the syntax error that just occurred.
1253 """Display the syntax error that just occurred.
1249
1254
1250 This doesn't display a stack trace because there isn't one.
1255 This doesn't display a stack trace because there isn't one.
1251
1256
1252 If a filename is given, it is stuffed in the exception instead
1257 If a filename is given, it is stuffed in the exception instead
1253 of what was there before (because Python's parser always uses
1258 of what was there before (because Python's parser always uses
1254 "<string>" when reading from a string).
1259 "<string>" when reading from a string).
1255 """
1260 """
1256 etype, value, last_traceback = sys.exc_info()
1261 etype, value, last_traceback = sys.exc_info()
1257 if filename and etype is SyntaxError:
1262 if filename and etype is SyntaxError:
1258 # Work hard to stuff the correct filename in the exception
1263 # Work hard to stuff the correct filename in the exception
1259 try:
1264 try:
1260 msg, (dummy_filename, lineno, offset, line) = value
1265 msg, (dummy_filename, lineno, offset, line) = value
1261 except:
1266 except:
1262 # Not the format we expect; leave it alone
1267 # Not the format we expect; leave it alone
1263 pass
1268 pass
1264 else:
1269 else:
1265 # Stuff in the right filename
1270 # Stuff in the right filename
1266 try:
1271 try:
1267 # Assume SyntaxError is a class exception
1272 # Assume SyntaxError is a class exception
1268 value = SyntaxError(msg, (filename, lineno, offset, line))
1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1269 except:
1274 except:
1270 # If that failed, assume SyntaxError is a string
1275 # If that failed, assume SyntaxError is a string
1271 value = msg, (filename, lineno, offset, line)
1276 value = msg, (filename, lineno, offset, line)
1272 self.SyntaxTB(etype,value,[])
1277 self.SyntaxTB(etype,value,[])
1273
1278
1274 def debugger(self):
1279 def debugger(self):
1275 """Call the pdb debugger."""
1280 """Call the pdb debugger."""
1276
1281
1277 if not self.rc.pdb:
1282 if not self.rc.pdb:
1278 return
1283 return
1279 pdb.pm()
1284 pdb.pm()
1280
1285
1281 def showtraceback(self,exc_tuple = None,filename=None):
1286 def showtraceback(self,exc_tuple = None,filename=None):
1282 """Display the exception that just occurred."""
1287 """Display the exception that just occurred."""
1283
1288
1284 # Though this won't be called by syntax errors in the input line,
1289 # Though this won't be called by syntax errors in the input line,
1285 # there may be SyntaxError cases whith imported code.
1290 # there may be SyntaxError cases whith imported code.
1286 if exc_tuple is None:
1291 if exc_tuple is None:
1287 type, value, tb = sys.exc_info()
1292 type, value, tb = sys.exc_info()
1288 else:
1293 else:
1289 type, value, tb = exc_tuple
1294 type, value, tb = exc_tuple
1290 if type is SyntaxError:
1295 if type is SyntaxError:
1291 self.showsyntaxerror(filename)
1296 self.showsyntaxerror(filename)
1292 else:
1297 else:
1293 self.InteractiveTB()
1298 self.InteractiveTB()
1294 if self.InteractiveTB.call_pdb and self.has_readline:
1299 if self.InteractiveTB.call_pdb and self.has_readline:
1295 # pdb mucks up readline, fix it back
1300 # pdb mucks up readline, fix it back
1296 self.readline.set_completer(self.Completer.complete)
1301 self.readline.set_completer(self.Completer.complete)
1297
1302
1298 def mainloop(self,banner=None):
1303 def mainloop(self,banner=None):
1299 """Creates the local namespace and starts the mainloop.
1304 """Creates the local namespace and starts the mainloop.
1300
1305
1301 If an optional banner argument is given, it will override the
1306 If an optional banner argument is given, it will override the
1302 internally created default banner."""
1307 internally created default banner."""
1303
1308
1304 if self.rc.c: # Emulate Python's -c option
1309 if self.rc.c: # Emulate Python's -c option
1305 self.exec_init_cmd()
1310 self.exec_init_cmd()
1306 if banner is None:
1311 if banner is None:
1307 if self.rc.banner:
1312 if self.rc.banner:
1308 banner = self.BANNER+self.banner2
1313 banner = self.BANNER+self.banner2
1309 else:
1314 else:
1310 banner = ''
1315 banner = ''
1311 self.interact(banner)
1316 self.interact(banner)
1312
1317
1313 def exec_init_cmd(self):
1318 def exec_init_cmd(self):
1314 """Execute a command given at the command line.
1319 """Execute a command given at the command line.
1315
1320
1316 This emulates Python's -c option."""
1321 This emulates Python's -c option."""
1317
1322
1318 sys.argv = ['-c']
1323 sys.argv = ['-c']
1319 self.push(self.rc.c)
1324 self.push(self.rc.c)
1320
1325
1321 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1322 """Embeds IPython into a running python program.
1327 """Embeds IPython into a running python program.
1323
1328
1324 Input:
1329 Input:
1325
1330
1326 - header: An optional header message can be specified.
1331 - header: An optional header message can be specified.
1327
1332
1328 - local_ns, global_ns: working namespaces. If given as None, the
1333 - local_ns, global_ns: working namespaces. If given as None, the
1329 IPython-initialized one is updated with __main__.__dict__, so that
1334 IPython-initialized one is updated with __main__.__dict__, so that
1330 program variables become visible but user-specific configuration
1335 program variables become visible but user-specific configuration
1331 remains possible.
1336 remains possible.
1332
1337
1333 - stack_depth: specifies how many levels in the stack to go to
1338 - stack_depth: specifies how many levels in the stack to go to
1334 looking for namespaces (when local_ns and global_ns are None). This
1339 looking for namespaces (when local_ns and global_ns are None). This
1335 allows an intermediate caller to make sure that this function gets
1340 allows an intermediate caller to make sure that this function gets
1336 the namespace from the intended level in the stack. By default (0)
1341 the namespace from the intended level in the stack. By default (0)
1337 it will get its locals and globals from the immediate caller.
1342 it will get its locals and globals from the immediate caller.
1338
1343
1339 Warning: it's possible to use this in a program which is being run by
1344 Warning: it's possible to use this in a program which is being run by
1340 IPython itself (via %run), but some funny things will happen (a few
1345 IPython itself (via %run), but some funny things will happen (a few
1341 globals get overwritten). In the future this will be cleaned up, as
1346 globals get overwritten). In the future this will be cleaned up, as
1342 there is no fundamental reason why it can't work perfectly."""
1347 there is no fundamental reason why it can't work perfectly."""
1343
1348
1344 # Get locals and globals from caller
1349 # Get locals and globals from caller
1345 if local_ns is None or global_ns is None:
1350 if local_ns is None or global_ns is None:
1346 call_frame = sys._getframe(stack_depth).f_back
1351 call_frame = sys._getframe(stack_depth).f_back
1347
1352
1348 if local_ns is None:
1353 if local_ns is None:
1349 local_ns = call_frame.f_locals
1354 local_ns = call_frame.f_locals
1350 if global_ns is None:
1355 if global_ns is None:
1351 global_ns = call_frame.f_globals
1356 global_ns = call_frame.f_globals
1352
1357
1353 # Update namespaces and fire up interpreter
1358 # Update namespaces and fire up interpreter
1354
1359
1355 # The global one is easy, we can just throw it in
1360 # The global one is easy, we can just throw it in
1356 self.user_global_ns = global_ns
1361 self.user_global_ns = global_ns
1357
1362
1358 # but the user/local one is tricky: ipython needs it to store internal
1363 # but the user/local one is tricky: ipython needs it to store internal
1359 # data, but we also need the locals. We'll copy locals in the user
1364 # data, but we also need the locals. We'll copy locals in the user
1360 # one, but will track what got copied so we can delete them at exit.
1365 # one, but will track what got copied so we can delete them at exit.
1361 # This is so that a later embedded call doesn't see locals from a
1366 # This is so that a later embedded call doesn't see locals from a
1362 # previous call (which most likely existed in a separate scope).
1367 # previous call (which most likely existed in a separate scope).
1363 local_varnames = local_ns.keys()
1368 local_varnames = local_ns.keys()
1364 self.user_ns.update(local_ns)
1369 self.user_ns.update(local_ns)
1365
1370
1366 # Patch for global embedding to make sure that things don't overwrite
1371 # Patch for global embedding to make sure that things don't overwrite
1367 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1368 # FIXME. Test this a bit more carefully (the if.. is new)
1373 # FIXME. Test this a bit more carefully (the if.. is new)
1369 if local_ns is None and global_ns is None:
1374 if local_ns is None and global_ns is None:
1370 self.user_global_ns.update(__main__.__dict__)
1375 self.user_global_ns.update(__main__.__dict__)
1371
1376
1372 # make sure the tab-completer has the correct frame information, so it
1377 # make sure the tab-completer has the correct frame information, so it
1373 # actually completes using the frame's locals/globals
1378 # actually completes using the frame's locals/globals
1374 self.set_completer_frame()
1379 self.set_completer_frame()
1375
1380
1376 # before activating the interactive mode, we need to make sure that
1381 # before activating the interactive mode, we need to make sure that
1377 # all names in the builtin namespace needed by ipython point to
1382 # all names in the builtin namespace needed by ipython point to
1378 # ourselves, and not to other instances.
1383 # ourselves, and not to other instances.
1379 self.add_builtins()
1384 self.add_builtins()
1380
1385
1381 self.interact(header)
1386 self.interact(header)
1382
1387
1383 # now, purge out the user namespace from anything we might have added
1388 # now, purge out the user namespace from anything we might have added
1384 # from the caller's local namespace
1389 # from the caller's local namespace
1385 delvar = self.user_ns.pop
1390 delvar = self.user_ns.pop
1386 for var in local_varnames:
1391 for var in local_varnames:
1387 delvar(var,None)
1392 delvar(var,None)
1388 # and clean builtins we may have overridden
1393 # and clean builtins we may have overridden
1389 self.clean_builtins()
1394 self.clean_builtins()
1390
1395
1391 def interact(self, banner=None):
1396 def interact(self, banner=None):
1392 """Closely emulate the interactive Python console.
1397 """Closely emulate the interactive Python console.
1393
1398
1394 The optional banner argument specify the banner to print
1399 The optional banner argument specify the banner to print
1395 before the first interaction; by default it prints a banner
1400 before the first interaction; by default it prints a banner
1396 similar to the one printed by the real Python interpreter,
1401 similar to the one printed by the real Python interpreter,
1397 followed by the current class name in parentheses (so as not
1402 followed by the current class name in parentheses (so as not
1398 to confuse this with the real interpreter -- since it's so
1403 to confuse this with the real interpreter -- since it's so
1399 close!).
1404 close!).
1400
1405
1401 """
1406 """
1402 cprt = 'Type "copyright", "credits" or "license" for more information.'
1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1403 if banner is None:
1408 if banner is None:
1404 self.write("Python %s on %s\n%s\n(%s)\n" %
1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1405 (sys.version, sys.platform, cprt,
1410 (sys.version, sys.platform, cprt,
1406 self.__class__.__name__))
1411 self.__class__.__name__))
1407 else:
1412 else:
1408 self.write(banner)
1413 self.write(banner)
1409
1414
1410 more = 0
1415 more = 0
1411
1416
1412 # Mark activity in the builtins
1417 # Mark activity in the builtins
1413 __builtin__.__dict__['__IPYTHON__active'] += 1
1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1414
1419
1415 # exit_now is set by a call to %Exit or %Quit
1420 # exit_now is set by a call to %Exit or %Quit
1416 self.exit_now = False
1421 self.exit_now = False
1417 while not self.exit_now:
1422 while not self.exit_now:
1418
1423
1419 try:
1424 try:
1420 if more:
1425 if more:
1421 prompt = self.outputcache.prompt2
1426 prompt = self.outputcache.prompt2
1422 if self.autoindent:
1427 if self.autoindent:
1423 self.readline_startup_hook(self.pre_readline)
1428 self.readline_startup_hook(self.pre_readline)
1424 else:
1429 else:
1425 prompt = self.outputcache.prompt1
1430 prompt = self.outputcache.prompt1
1426 try:
1431 try:
1427 line = self.raw_input(prompt,more)
1432 line = self.raw_input(prompt,more)
1428 if self.autoindent:
1433 if self.autoindent:
1429 self.readline_startup_hook(None)
1434 self.readline_startup_hook(None)
1430 except EOFError:
1435 except EOFError:
1431 if self.autoindent:
1436 if self.autoindent:
1432 self.readline_startup_hook(None)
1437 self.readline_startup_hook(None)
1433 self.write("\n")
1438 self.write("\n")
1434 self.exit()
1439 self.exit()
1435 else:
1440 else:
1436 more = self.push(line)
1441 more = self.push(line)
1437
1442
1438 if (self.SyntaxTB.last_syntax_error and
1443 if (self.SyntaxTB.last_syntax_error and
1439 self.rc.autoedit_syntax):
1444 self.rc.autoedit_syntax):
1440 self.edit_syntax_error()
1445 self.edit_syntax_error()
1441
1446
1442 except KeyboardInterrupt:
1447 except KeyboardInterrupt:
1443 self.write("\nKeyboardInterrupt\n")
1448 self.write("\nKeyboardInterrupt\n")
1444 self.resetbuffer()
1449 self.resetbuffer()
1445 more = 0
1450 more = 0
1446 # keep cache in sync with the prompt counter:
1451 # keep cache in sync with the prompt counter:
1447 self.outputcache.prompt_count -= 1
1452 self.outputcache.prompt_count -= 1
1448
1453
1449 if self.autoindent:
1454 if self.autoindent:
1450 self.indent_current_nsp = 0
1455 self.indent_current_nsp = 0
1451 self.indent_current = ' '* self.indent_current_nsp
1456 self.indent_current = ' '* self.indent_current_nsp
1452
1457
1453 except bdb.BdbQuit:
1458 except bdb.BdbQuit:
1454 warn("The Python debugger has exited with a BdbQuit exception.\n"
1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1455 "Because of how pdb handles the stack, it is impossible\n"
1460 "Because of how pdb handles the stack, it is impossible\n"
1456 "for IPython to properly format this particular exception.\n"
1461 "for IPython to properly format this particular exception.\n"
1457 "IPython will resume normal operation.")
1462 "IPython will resume normal operation.")
1458
1463
1459 # We are off again...
1464 # We are off again...
1460 __builtin__.__dict__['__IPYTHON__active'] -= 1
1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1461
1466
1462 def excepthook(self, type, value, tb):
1467 def excepthook(self, type, value, tb):
1463 """One more defense for GUI apps that call sys.excepthook.
1468 """One more defense for GUI apps that call sys.excepthook.
1464
1469
1465 GUI frameworks like wxPython trap exceptions and call
1470 GUI frameworks like wxPython trap exceptions and call
1466 sys.excepthook themselves. I guess this is a feature that
1471 sys.excepthook themselves. I guess this is a feature that
1467 enables them to keep running after exceptions that would
1472 enables them to keep running after exceptions that would
1468 otherwise kill their mainloop. This is a bother for IPython
1473 otherwise kill their mainloop. This is a bother for IPython
1469 which excepts to catch all of the program exceptions with a try:
1474 which excepts to catch all of the program exceptions with a try:
1470 except: statement.
1475 except: statement.
1471
1476
1472 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1473 any app directly invokes sys.excepthook, it will look to the user like
1478 any app directly invokes sys.excepthook, it will look to the user like
1474 IPython crashed. In order to work around this, we can disable the
1479 IPython crashed. In order to work around this, we can disable the
1475 CrashHandler and replace it with this excepthook instead, which prints a
1480 CrashHandler and replace it with this excepthook instead, which prints a
1476 regular traceback using our InteractiveTB. In this fashion, apps which
1481 regular traceback using our InteractiveTB. In this fashion, apps which
1477 call sys.excepthook will generate a regular-looking exception from
1482 call sys.excepthook will generate a regular-looking exception from
1478 IPython, and the CrashHandler will only be triggered by real IPython
1483 IPython, and the CrashHandler will only be triggered by real IPython
1479 crashes.
1484 crashes.
1480
1485
1481 This hook should be used sparingly, only in places which are not likely
1486 This hook should be used sparingly, only in places which are not likely
1482 to be true IPython errors.
1487 to be true IPython errors.
1483 """
1488 """
1484
1489
1485 self.InteractiveTB(type, value, tb, tb_offset=0)
1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1486 if self.InteractiveTB.call_pdb and self.has_readline:
1491 if self.InteractiveTB.call_pdb and self.has_readline:
1487 self.readline.set_completer(self.Completer.complete)
1492 self.readline.set_completer(self.Completer.complete)
1488
1493
1489 def call_alias(self,alias,rest=''):
1494 def call_alias(self,alias,rest=''):
1490 """Call an alias given its name and the rest of the line.
1495 """Call an alias given its name and the rest of the line.
1491
1496
1492 This function MUST be given a proper alias, because it doesn't make
1497 This function MUST be given a proper alias, because it doesn't make
1493 any checks when looking up into the alias table. The caller is
1498 any checks when looking up into the alias table. The caller is
1494 responsible for invoking it only with a valid alias."""
1499 responsible for invoking it only with a valid alias."""
1495
1500
1496 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1497 nargs,cmd = self.alias_table[alias]
1502 nargs,cmd = self.alias_table[alias]
1498 # Expand the %l special to be the user's input line
1503 # Expand the %l special to be the user's input line
1499 if cmd.find('%l') >= 0:
1504 if cmd.find('%l') >= 0:
1500 cmd = cmd.replace('%l',rest)
1505 cmd = cmd.replace('%l',rest)
1501 rest = ''
1506 rest = ''
1502 if nargs==0:
1507 if nargs==0:
1503 # Simple, argument-less aliases
1508 # Simple, argument-less aliases
1504 cmd = '%s %s' % (cmd,rest)
1509 cmd = '%s %s' % (cmd,rest)
1505 else:
1510 else:
1506 # Handle aliases with positional arguments
1511 # Handle aliases with positional arguments
1507 args = rest.split(None,nargs)
1512 args = rest.split(None,nargs)
1508 if len(args)< nargs:
1513 if len(args)< nargs:
1509 error('Alias <%s> requires %s arguments, %s given.' %
1514 error('Alias <%s> requires %s arguments, %s given.' %
1510 (alias,nargs,len(args)))
1515 (alias,nargs,len(args)))
1511 return
1516 return
1512 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1513 # Now call the macro, evaluating in the user's namespace
1518 # Now call the macro, evaluating in the user's namespace
1514 try:
1519 try:
1515 self.system(cmd)
1520 self.system(cmd)
1516 except:
1521 except:
1517 self.showtraceback()
1522 self.showtraceback()
1518
1523
1519 def autoindent_update(self,line):
1524 def autoindent_update(self,line):
1520 """Keep track of the indent level."""
1525 """Keep track of the indent level."""
1521
1526
1522 if self.autoindent:
1527 if self.autoindent:
1523 if line:
1528 if line:
1524 self.indent_current_nsp = num_ini_spaces(line)
1529 self.indent_current_nsp = num_ini_spaces(line)
1525
1530
1526 if line[-1] == ':':
1531 if line[-1] == ':':
1527 self.indent_current_nsp += 4
1532 self.indent_current_nsp += 4
1528 elif dedent_re.match(line):
1533 elif dedent_re.match(line):
1529 self.indent_current_nsp -= 4
1534 self.indent_current_nsp -= 4
1530 else:
1535 else:
1531 self.indent_current_nsp = 0
1536 self.indent_current_nsp = 0
1532
1537
1533 # indent_current is the actual string to be inserted
1538 # indent_current is the actual string to be inserted
1534 # by the readline hooks for indentation
1539 # by the readline hooks for indentation
1535 self.indent_current = ' '* self.indent_current_nsp
1540 self.indent_current = ' '* self.indent_current_nsp
1536
1541
1537 def runlines(self,lines):
1542 def runlines(self,lines):
1538 """Run a string of one or more lines of source.
1543 """Run a string of one or more lines of source.
1539
1544
1540 This method is capable of running a string containing multiple source
1545 This method is capable of running a string containing multiple source
1541 lines, as if they had been entered at the IPython prompt. Since it
1546 lines, as if they had been entered at the IPython prompt. Since it
1542 exposes IPython's processing machinery, the given strings can contain
1547 exposes IPython's processing machinery, the given strings can contain
1543 magic calls (%magic), special shell access (!cmd), etc."""
1548 magic calls (%magic), special shell access (!cmd), etc."""
1544
1549
1545 # We must start with a clean buffer, in case this is run from an
1550 # We must start with a clean buffer, in case this is run from an
1546 # interactive IPython session (via a magic, for example).
1551 # interactive IPython session (via a magic, for example).
1547 self.resetbuffer()
1552 self.resetbuffer()
1548 lines = lines.split('\n')
1553 lines = lines.split('\n')
1549 more = 0
1554 more = 0
1550 for line in lines:
1555 for line in lines:
1551 # skip blank lines so we don't mess up the prompt counter, but do
1556 # skip blank lines so we don't mess up the prompt counter, but do
1552 # NOT skip even a blank line if we are in a code block (more is
1557 # NOT skip even a blank line if we are in a code block (more is
1553 # true)
1558 # true)
1554 if line or more:
1559 if line or more:
1555 more = self.push(self.prefilter(line,more))
1560 more = self.push(self.prefilter(line,more))
1556 # IPython's runsource returns None if there was an error
1561 # IPython's runsource returns None if there was an error
1557 # compiling the code. This allows us to stop processing right
1562 # compiling the code. This allows us to stop processing right
1558 # away, so the user gets the error message at the right place.
1563 # away, so the user gets the error message at the right place.
1559 if more is None:
1564 if more is None:
1560 break
1565 break
1561 # final newline in case the input didn't have it, so that the code
1566 # final newline in case the input didn't have it, so that the code
1562 # actually does get executed
1567 # actually does get executed
1563 if more:
1568 if more:
1564 self.push('\n')
1569 self.push('\n')
1565
1570
1566 def runsource(self, source, filename='<input>', symbol='single'):
1571 def runsource(self, source, filename='<input>', symbol='single'):
1567 """Compile and run some source in the interpreter.
1572 """Compile and run some source in the interpreter.
1568
1573
1569 Arguments are as for compile_command().
1574 Arguments are as for compile_command().
1570
1575
1571 One several things can happen:
1576 One several things can happen:
1572
1577
1573 1) The input is incorrect; compile_command() raised an
1578 1) The input is incorrect; compile_command() raised an
1574 exception (SyntaxError or OverflowError). A syntax traceback
1579 exception (SyntaxError or OverflowError). A syntax traceback
1575 will be printed by calling the showsyntaxerror() method.
1580 will be printed by calling the showsyntaxerror() method.
1576
1581
1577 2) The input is incomplete, and more input is required;
1582 2) The input is incomplete, and more input is required;
1578 compile_command() returned None. Nothing happens.
1583 compile_command() returned None. Nothing happens.
1579
1584
1580 3) The input is complete; compile_command() returned a code
1585 3) The input is complete; compile_command() returned a code
1581 object. The code is executed by calling self.runcode() (which
1586 object. The code is executed by calling self.runcode() (which
1582 also handles run-time exceptions, except for SystemExit).
1587 also handles run-time exceptions, except for SystemExit).
1583
1588
1584 The return value is:
1589 The return value is:
1585
1590
1586 - True in case 2
1591 - True in case 2
1587
1592
1588 - False in the other cases, unless an exception is raised, where
1593 - False in the other cases, unless an exception is raised, where
1589 None is returned instead. This can be used by external callers to
1594 None is returned instead. This can be used by external callers to
1590 know whether to continue feeding input or not.
1595 know whether to continue feeding input or not.
1591
1596
1592 The return value can be used to decide whether to use sys.ps1 or
1597 The return value can be used to decide whether to use sys.ps1 or
1593 sys.ps2 to prompt the next line."""
1598 sys.ps2 to prompt the next line."""
1594
1599
1595 try:
1600 try:
1596 code = self.compile(source,filename,symbol)
1601 code = self.compile(source,filename,symbol)
1597 except (OverflowError, SyntaxError, ValueError):
1602 except (OverflowError, SyntaxError, ValueError):
1598 # Case 1
1603 # Case 1
1599 self.showsyntaxerror(filename)
1604 self.showsyntaxerror(filename)
1600 return None
1605 return None
1601
1606
1602 if code is None:
1607 if code is None:
1603 # Case 2
1608 # Case 2
1604 return True
1609 return True
1605
1610
1606 # Case 3
1611 # Case 3
1607 # We store the code object so that threaded shells and
1612 # We store the code object so that threaded shells and
1608 # custom exception handlers can access all this info if needed.
1613 # custom exception handlers can access all this info if needed.
1609 # The source corresponding to this can be obtained from the
1614 # The source corresponding to this can be obtained from the
1610 # buffer attribute as '\n'.join(self.buffer).
1615 # buffer attribute as '\n'.join(self.buffer).
1611 self.code_to_run = code
1616 self.code_to_run = code
1612 # now actually execute the code object
1617 # now actually execute the code object
1613 if self.runcode(code) == 0:
1618 if self.runcode(code) == 0:
1614 return False
1619 return False
1615 else:
1620 else:
1616 return None
1621 return None
1617
1622
1618 def runcode(self,code_obj):
1623 def runcode(self,code_obj):
1619 """Execute a code object.
1624 """Execute a code object.
1620
1625
1621 When an exception occurs, self.showtraceback() is called to display a
1626 When an exception occurs, self.showtraceback() is called to display a
1622 traceback.
1627 traceback.
1623
1628
1624 Return value: a flag indicating whether the code to be run completed
1629 Return value: a flag indicating whether the code to be run completed
1625 successfully:
1630 successfully:
1626
1631
1627 - 0: successful execution.
1632 - 0: successful execution.
1628 - 1: an error occurred.
1633 - 1: an error occurred.
1629 """
1634 """
1630
1635
1631 # Set our own excepthook in case the user code tries to call it
1636 # Set our own excepthook in case the user code tries to call it
1632 # directly, so that the IPython crash handler doesn't get triggered
1637 # directly, so that the IPython crash handler doesn't get triggered
1633 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1634
1639
1635 # we save the original sys.excepthook in the instance, in case config
1640 # we save the original sys.excepthook in the instance, in case config
1636 # code (such as magics) needs access to it.
1641 # code (such as magics) needs access to it.
1637 self.sys_excepthook = old_excepthook
1642 self.sys_excepthook = old_excepthook
1638 outflag = 1 # happens in more places, so it's easier as default
1643 outflag = 1 # happens in more places, so it's easier as default
1639 try:
1644 try:
1640 try:
1645 try:
1641 # Embedded instances require separate global/local namespaces
1646 # Embedded instances require separate global/local namespaces
1642 # so they can see both the surrounding (local) namespace and
1647 # so they can see both the surrounding (local) namespace and
1643 # the module-level globals when called inside another function.
1648 # the module-level globals when called inside another function.
1644 if self.embedded:
1649 if self.embedded:
1645 exec code_obj in self.user_global_ns, self.user_ns
1650 exec code_obj in self.user_global_ns, self.user_ns
1646 # Normal (non-embedded) instances should only have a single
1651 # Normal (non-embedded) instances should only have a single
1647 # namespace for user code execution, otherwise functions won't
1652 # namespace for user code execution, otherwise functions won't
1648 # see interactive top-level globals.
1653 # see interactive top-level globals.
1649 else:
1654 else:
1650 exec code_obj in self.user_ns
1655 exec code_obj in self.user_ns
1651 finally:
1656 finally:
1652 # Reset our crash handler in place
1657 # Reset our crash handler in place
1653 sys.excepthook = old_excepthook
1658 sys.excepthook = old_excepthook
1654 except SystemExit:
1659 except SystemExit:
1655 self.resetbuffer()
1660 self.resetbuffer()
1656 self.showtraceback()
1661 self.showtraceback()
1657 warn("Type exit or quit to exit IPython "
1662 warn("Type exit or quit to exit IPython "
1658 "(%Exit or %Quit do so unconditionally).",level=1)
1663 "(%Exit or %Quit do so unconditionally).",level=1)
1659 except self.custom_exceptions:
1664 except self.custom_exceptions:
1660 etype,value,tb = sys.exc_info()
1665 etype,value,tb = sys.exc_info()
1661 self.CustomTB(etype,value,tb)
1666 self.CustomTB(etype,value,tb)
1662 except:
1667 except:
1663 self.showtraceback()
1668 self.showtraceback()
1664 else:
1669 else:
1665 outflag = 0
1670 outflag = 0
1666 if softspace(sys.stdout, 0):
1671 if softspace(sys.stdout, 0):
1667 print
1672 print
1668 # Flush out code object which has been run (and source)
1673 # Flush out code object which has been run (and source)
1669 self.code_to_run = None
1674 self.code_to_run = None
1670 return outflag
1675 return outflag
1671
1676
1672 def push(self, line):
1677 def push(self, line):
1673 """Push a line to the interpreter.
1678 """Push a line to the interpreter.
1674
1679
1675 The line should not have a trailing newline; it may have
1680 The line should not have a trailing newline; it may have
1676 internal newlines. The line is appended to a buffer and the
1681 internal newlines. The line is appended to a buffer and the
1677 interpreter's runsource() method is called with the
1682 interpreter's runsource() method is called with the
1678 concatenated contents of the buffer as source. If this
1683 concatenated contents of the buffer as source. If this
1679 indicates that the command was executed or invalid, the buffer
1684 indicates that the command was executed or invalid, the buffer
1680 is reset; otherwise, the command is incomplete, and the buffer
1685 is reset; otherwise, the command is incomplete, and the buffer
1681 is left as it was after the line was appended. The return
1686 is left as it was after the line was appended. The return
1682 value is 1 if more input is required, 0 if the line was dealt
1687 value is 1 if more input is required, 0 if the line was dealt
1683 with in some way (this is the same as runsource()).
1688 with in some way (this is the same as runsource()).
1684 """
1689 """
1685
1690
1686 # autoindent management should be done here, and not in the
1691 # autoindent management should be done here, and not in the
1687 # interactive loop, since that one is only seen by keyboard input. We
1692 # interactive loop, since that one is only seen by keyboard input. We
1688 # need this done correctly even for code run via runlines (which uses
1693 # need this done correctly even for code run via runlines (which uses
1689 # push).
1694 # push).
1690
1695
1691 #print 'push line: <%s>' % line # dbg
1696 #print 'push line: <%s>' % line # dbg
1692 self.autoindent_update(line)
1697 self.autoindent_update(line)
1693
1698
1694 self.buffer.append(line)
1699 self.buffer.append(line)
1695 more = self.runsource('\n'.join(self.buffer), self.filename)
1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1696 if not more:
1701 if not more:
1697 self.resetbuffer()
1702 self.resetbuffer()
1698 return more
1703 return more
1699
1704
1700 def resetbuffer(self):
1705 def resetbuffer(self):
1701 """Reset the input buffer."""
1706 """Reset the input buffer."""
1702 self.buffer[:] = []
1707 self.buffer[:] = []
1703
1708
1704 def raw_input(self,prompt='',continue_prompt=False):
1709 def raw_input(self,prompt='',continue_prompt=False):
1705 """Write a prompt and read a line.
1710 """Write a prompt and read a line.
1706
1711
1707 The returned line does not include the trailing newline.
1712 The returned line does not include the trailing newline.
1708 When the user enters the EOF key sequence, EOFError is raised.
1713 When the user enters the EOF key sequence, EOFError is raised.
1709
1714
1710 Optional inputs:
1715 Optional inputs:
1711
1716
1712 - prompt(''): a string to be printed to prompt the user.
1717 - prompt(''): a string to be printed to prompt the user.
1713
1718
1714 - continue_prompt(False): whether this line is the first one or a
1719 - continue_prompt(False): whether this line is the first one or a
1715 continuation in a sequence of inputs.
1720 continuation in a sequence of inputs.
1716 """
1721 """
1717
1722
1718 line = raw_input_original(prompt)
1723 line = raw_input_original(prompt)
1719 # Try to be reasonably smart about not re-indenting pasted input more
1724 # Try to be reasonably smart about not re-indenting pasted input more
1720 # than necessary. We do this by trimming out the auto-indent initial
1725 # than necessary. We do this by trimming out the auto-indent initial
1721 # spaces, if the user's actual input started itself with whitespace.
1726 # spaces, if the user's actual input started itself with whitespace.
1722 #debugp('self.buffer[-1]')
1727 #debugp('self.buffer[-1]')
1723 ## if self.autoindent:
1728 ## if self.autoindent:
1724 ## try:
1729 ## try:
1725 ## prev_line = self.buffer[-1]
1730 ## prev_line = self.buffer[-1]
1726 ## except IndexError:
1731 ## except IndexError:
1727 ## prev_line = ''
1732 ## prev_line = ''
1728 ## prev_indent = num_ini_spaces(prev_line)
1733 ## prev_indent = num_ini_spaces(prev_line)
1729 ## debugp('prev_indent')
1734 ## debugp('prev_indent')
1730 ## # Split the user's input
1735 ## # Split the user's input
1731 ## line1 = line[:self.indent_current_nsp]
1736 ## line1 = line[:self.indent_current_nsp]
1732 ## line2 = line[self.indent_current_nsp:]
1737 ## line2 = line[self.indent_current_nsp:]
1733 ## if line1.isspace() and line2 and \
1738 ## if line1.isspace() and line2 and \
1734 ## num_ini_spaces(line2)==prev_indent:
1739 ## num_ini_spaces(line2)==prev_indent:
1735 ## line = line2
1740 ## line = line2
1736 #debugp('line')
1741 #debugp('line')
1737 #debugp('line1')
1742 #debugp('line1')
1738 #debugp('line2')
1743 #debugp('line2')
1739 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1740 ## line = line2
1745 ## line = line2
1741 ## debugp('line')
1746 ## debugp('line')
1742 return self.prefilter(line,continue_prompt)
1747 return self.prefilter(line,continue_prompt)
1743
1748
1744 def split_user_input(self,line):
1749 def split_user_input(self,line):
1745 """Split user input into pre-char, function part and rest."""
1750 """Split user input into pre-char, function part and rest."""
1746
1751
1747 lsplit = self.line_split.match(line)
1752 lsplit = self.line_split.match(line)
1748 if lsplit is None: # no regexp match returns None
1753 if lsplit is None: # no regexp match returns None
1749 try:
1754 try:
1750 iFun,theRest = line.split(None,1)
1755 iFun,theRest = line.split(None,1)
1751 except ValueError:
1756 except ValueError:
1752 iFun,theRest = line,''
1757 iFun,theRest = line,''
1753 pre = re.match('^(\s*)(.*)',line).groups()[0]
1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1754 else:
1759 else:
1755 pre,iFun,theRest = lsplit.groups()
1760 pre,iFun,theRest = lsplit.groups()
1756
1761
1757 #print 'line:<%s>' % line # dbg
1762 #print 'line:<%s>' % line # dbg
1758 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1759 return pre,iFun.strip(),theRest
1764 return pre,iFun.strip(),theRest
1760
1765
1761 def _prefilter(self, line, continue_prompt):
1766 def _prefilter(self, line, continue_prompt):
1762 """Calls different preprocessors, depending on the form of line."""
1767 """Calls different preprocessors, depending on the form of line."""
1763
1768
1764 # All handlers *must* return a value, even if it's blank ('').
1769 # All handlers *must* return a value, even if it's blank ('').
1765
1770
1766 # Lines are NOT logged here. Handlers should process the line as
1771 # Lines are NOT logged here. Handlers should process the line as
1767 # needed, update the cache AND log it (so that the input cache array
1772 # needed, update the cache AND log it (so that the input cache array
1768 # stays synced).
1773 # stays synced).
1769
1774
1770 # This function is _very_ delicate, and since it's also the one which
1775 # This function is _very_ delicate, and since it's also the one which
1771 # determines IPython's response to user input, it must be as efficient
1776 # determines IPython's response to user input, it must be as efficient
1772 # as possible. For this reason it has _many_ returns in it, trying
1777 # as possible. For this reason it has _many_ returns in it, trying
1773 # always to exit as quickly as it can figure out what it needs to do.
1778 # always to exit as quickly as it can figure out what it needs to do.
1774
1779
1775 # This function is the main responsible for maintaining IPython's
1780 # This function is the main responsible for maintaining IPython's
1776 # behavior respectful of Python's semantics. So be _very_ careful if
1781 # behavior respectful of Python's semantics. So be _very_ careful if
1777 # making changes to anything here.
1782 # making changes to anything here.
1778
1783
1779 #.....................................................................
1784 #.....................................................................
1780 # Code begins
1785 # Code begins
1781
1786
1782 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1783
1788
1784 # save the line away in case we crash, so the post-mortem handler can
1789 # save the line away in case we crash, so the post-mortem handler can
1785 # record it
1790 # record it
1786 self._last_input_line = line
1791 self._last_input_line = line
1787
1792
1788 #print '***line: <%s>' % line # dbg
1793 #print '***line: <%s>' % line # dbg
1789
1794
1790 # the input history needs to track even empty lines
1795 # the input history needs to track even empty lines
1791 if not line.strip():
1796 if not line.strip():
1792 if not continue_prompt:
1797 if not continue_prompt:
1793 self.outputcache.prompt_count -= 1
1798 self.outputcache.prompt_count -= 1
1794 return self.handle_normal(line,continue_prompt)
1799 return self.handle_normal(line,continue_prompt)
1795 #return self.handle_normal('',continue_prompt)
1800 #return self.handle_normal('',continue_prompt)
1796
1801
1797 # print '***cont',continue_prompt # dbg
1802 # print '***cont',continue_prompt # dbg
1798 # special handlers are only allowed for single line statements
1803 # special handlers are only allowed for single line statements
1799 if continue_prompt and not self.rc.multi_line_specials:
1804 if continue_prompt and not self.rc.multi_line_specials:
1800 return self.handle_normal(line,continue_prompt)
1805 return self.handle_normal(line,continue_prompt)
1801
1806
1802 # For the rest, we need the structure of the input
1807 # For the rest, we need the structure of the input
1803 pre,iFun,theRest = self.split_user_input(line)
1808 pre,iFun,theRest = self.split_user_input(line)
1804 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1805
1810
1806 # First check for explicit escapes in the last/first character
1811 # First check for explicit escapes in the last/first character
1807 handler = None
1812 handler = None
1808 if line[-1] == self.ESC_HELP:
1813 if line[-1] == self.ESC_HELP:
1809 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1810 if handler is None:
1815 if handler is None:
1811 # look at the first character of iFun, NOT of line, so we skip
1816 # look at the first character of iFun, NOT of line, so we skip
1812 # leading whitespace in multiline input
1817 # leading whitespace in multiline input
1813 handler = self.esc_handlers.get(iFun[0:1])
1818 handler = self.esc_handlers.get(iFun[0:1])
1814 if handler is not None:
1819 if handler is not None:
1815 return handler(line,continue_prompt,pre,iFun,theRest)
1820 return handler(line,continue_prompt,pre,iFun,theRest)
1816 # Emacs ipython-mode tags certain input lines
1821 # Emacs ipython-mode tags certain input lines
1817 if line.endswith('# PYTHON-MODE'):
1822 if line.endswith('# PYTHON-MODE'):
1818 return self.handle_emacs(line,continue_prompt)
1823 return self.handle_emacs(line,continue_prompt)
1819
1824
1820 # Next, check if we can automatically execute this thing
1825 # Next, check if we can automatically execute this thing
1821
1826
1822 # Allow ! in multi-line statements if multi_line_specials is on:
1827 # Allow ! in multi-line statements if multi_line_specials is on:
1823 if continue_prompt and self.rc.multi_line_specials and \
1828 if continue_prompt and self.rc.multi_line_specials and \
1824 iFun.startswith(self.ESC_SHELL):
1829 iFun.startswith(self.ESC_SHELL):
1825 return self.handle_shell_escape(line,continue_prompt,
1830 return self.handle_shell_escape(line,continue_prompt,
1826 pre=pre,iFun=iFun,
1831 pre=pre,iFun=iFun,
1827 theRest=theRest)
1832 theRest=theRest)
1828
1833
1829 # Let's try to find if the input line is a magic fn
1834 # Let's try to find if the input line is a magic fn
1830 oinfo = None
1835 oinfo = None
1831 if hasattr(self,'magic_'+iFun):
1836 if hasattr(self,'magic_'+iFun):
1832 # WARNING: _ofind uses getattr(), so it can consume generators and
1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1833 # cause other side effects.
1838 # cause other side effects.
1834 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1835 if oinfo['ismagic']:
1840 if oinfo['ismagic']:
1836 # Be careful not to call magics when a variable assignment is
1841 # Be careful not to call magics when a variable assignment is
1837 # being made (ls='hi', for example)
1842 # being made (ls='hi', for example)
1838 if self.rc.automagic and \
1843 if self.rc.automagic and \
1839 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1840 (self.rc.multi_line_specials or not continue_prompt):
1845 (self.rc.multi_line_specials or not continue_prompt):
1841 return self.handle_magic(line,continue_prompt,
1846 return self.handle_magic(line,continue_prompt,
1842 pre,iFun,theRest)
1847 pre,iFun,theRest)
1843 else:
1848 else:
1844 return self.handle_normal(line,continue_prompt)
1849 return self.handle_normal(line,continue_prompt)
1845
1850
1846 # If the rest of the line begins with an (in)equality, assginment or
1851 # If the rest of the line begins with an (in)equality, assginment or
1847 # function call, we should not call _ofind but simply execute it.
1852 # function call, we should not call _ofind but simply execute it.
1848 # This avoids spurious geattr() accesses on objects upon assignment.
1853 # This avoids spurious geattr() accesses on objects upon assignment.
1849 #
1854 #
1850 # It also allows users to assign to either alias or magic names true
1855 # It also allows users to assign to either alias or magic names true
1851 # python variables (the magic/alias systems always take second seat to
1856 # python variables (the magic/alias systems always take second seat to
1852 # true python code).
1857 # true python code).
1853 if theRest and theRest[0] in '!=()':
1858 if theRest and theRest[0] in '!=()':
1854 return self.handle_normal(line,continue_prompt)
1859 return self.handle_normal(line,continue_prompt)
1855
1860
1856 if oinfo is None:
1861 if oinfo is None:
1857 # let's try to ensure that _oinfo is ONLY called when autocall is
1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1858 # on. Since it has inevitable potential side effects, at least
1863 # on. Since it has inevitable potential side effects, at least
1859 # having autocall off should be a guarantee to the user that no
1864 # having autocall off should be a guarantee to the user that no
1860 # weird things will happen.
1865 # weird things will happen.
1861
1866
1862 if self.rc.autocall:
1867 if self.rc.autocall:
1863 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1864 else:
1869 else:
1865 # in this case, all that's left is either an alias or
1870 # in this case, all that's left is either an alias or
1866 # processing the line normally.
1871 # processing the line normally.
1867 if iFun in self.alias_table:
1872 if iFun in self.alias_table:
1868 return self.handle_alias(line,continue_prompt,
1873 return self.handle_alias(line,continue_prompt,
1869 pre,iFun,theRest)
1874 pre,iFun,theRest)
1870
1875
1871 else:
1876 else:
1872 return self.handle_normal(line,continue_prompt)
1877 return self.handle_normal(line,continue_prompt)
1873
1878
1874 if not oinfo['found']:
1879 if not oinfo['found']:
1875 return self.handle_normal(line,continue_prompt)
1880 return self.handle_normal(line,continue_prompt)
1876 else:
1881 else:
1877 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1878 if oinfo['isalias']:
1883 if oinfo['isalias']:
1879 return self.handle_alias(line,continue_prompt,
1884 return self.handle_alias(line,continue_prompt,
1880 pre,iFun,theRest)
1885 pre,iFun,theRest)
1881
1886
1882 if self.rc.autocall and \
1887 if self.rc.autocall and \
1883 not self.re_exclude_auto.match(theRest) and \
1888 not self.re_exclude_auto.match(theRest) and \
1884 self.re_fun_name.match(iFun) and \
1889 self.re_fun_name.match(iFun) and \
1885 callable(oinfo['obj']) :
1890 callable(oinfo['obj']) :
1886 #print 'going auto' # dbg
1891 #print 'going auto' # dbg
1887 return self.handle_auto(line,continue_prompt,
1892 return self.handle_auto(line,continue_prompt,
1888 pre,iFun,theRest,oinfo['obj'])
1893 pre,iFun,theRest,oinfo['obj'])
1889 else:
1894 else:
1890 #print 'was callable?', callable(oinfo['obj']) # dbg
1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1891 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1892
1897
1893 # If we get here, we have a normal Python line. Log and return.
1898 # If we get here, we have a normal Python line. Log and return.
1894 return self.handle_normal(line,continue_prompt)
1899 return self.handle_normal(line,continue_prompt)
1895
1900
1896 def _prefilter_dumb(self, line, continue_prompt):
1901 def _prefilter_dumb(self, line, continue_prompt):
1897 """simple prefilter function, for debugging"""
1902 """simple prefilter function, for debugging"""
1898 return self.handle_normal(line,continue_prompt)
1903 return self.handle_normal(line,continue_prompt)
1899
1904
1900 # Set the default prefilter() function (this can be user-overridden)
1905 # Set the default prefilter() function (this can be user-overridden)
1901 prefilter = _prefilter
1906 prefilter = _prefilter
1902
1907
1903 def handle_normal(self,line,continue_prompt=None,
1908 def handle_normal(self,line,continue_prompt=None,
1904 pre=None,iFun=None,theRest=None):
1909 pre=None,iFun=None,theRest=None):
1905 """Handle normal input lines. Use as a template for handlers."""
1910 """Handle normal input lines. Use as a template for handlers."""
1906
1911
1907 # With autoindent on, we need some way to exit the input loop, and I
1912 # With autoindent on, we need some way to exit the input loop, and I
1908 # don't want to force the user to have to backspace all the way to
1913 # don't want to force the user to have to backspace all the way to
1909 # clear the line. The rule will be in this case, that either two
1914 # clear the line. The rule will be in this case, that either two
1910 # lines of pure whitespace in a row, or a line of pure whitespace but
1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1911 # of a size different to the indent level, will exit the input loop.
1916 # of a size different to the indent level, will exit the input loop.
1912
1917
1913 if (continue_prompt and self.autoindent and line.isspace() and
1918 if (continue_prompt and self.autoindent and line.isspace() and
1914 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1915 line = ''
1920 line = ''
1916
1921
1917 self.log(line,continue_prompt)
1922 self.log(line,continue_prompt)
1918 return line
1923 return line
1919
1924
1920 def handle_alias(self,line,continue_prompt=None,
1925 def handle_alias(self,line,continue_prompt=None,
1921 pre=None,iFun=None,theRest=None):
1926 pre=None,iFun=None,theRest=None):
1922 """Handle alias input lines. """
1927 """Handle alias input lines. """
1923
1928
1924 # pre is needed, because it carries the leading whitespace. Otherwise
1929 # pre is needed, because it carries the leading whitespace. Otherwise
1925 # aliases won't work in indented sections.
1930 # aliases won't work in indented sections.
1926 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1927 self.log(line_out,continue_prompt)
1932 self.log(line_out,continue_prompt)
1928 return line_out
1933 return line_out
1929
1934
1930 def handle_shell_escape(self, line, continue_prompt=None,
1935 def handle_shell_escape(self, line, continue_prompt=None,
1931 pre=None,iFun=None,theRest=None):
1936 pre=None,iFun=None,theRest=None):
1932 """Execute the line in a shell, empty return value"""
1937 """Execute the line in a shell, empty return value"""
1933
1938
1934 #print 'line in :', `line` # dbg
1939 #print 'line in :', `line` # dbg
1935 # Example of a special handler. Others follow a similar pattern.
1940 # Example of a special handler. Others follow a similar pattern.
1936 if line.lstrip().startswith('!!'):
1941 if line.lstrip().startswith('!!'):
1937 # rewrite iFun/theRest to properly hold the call to %sx and
1942 # rewrite iFun/theRest to properly hold the call to %sx and
1938 # the actual command to be executed, so handle_magic can work
1943 # the actual command to be executed, so handle_magic can work
1939 # correctly
1944 # correctly
1940 theRest = '%s %s' % (iFun[2:],theRest)
1945 theRest = '%s %s' % (iFun[2:],theRest)
1941 iFun = 'sx'
1946 iFun = 'sx'
1942 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1943 line.lstrip()[2:]),
1948 line.lstrip()[2:]),
1944 continue_prompt,pre,iFun,theRest)
1949 continue_prompt,pre,iFun,theRest)
1945 else:
1950 else:
1946 cmd=line.lstrip().lstrip('!')
1951 cmd=line.lstrip().lstrip('!')
1947 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1948 # update cache/log and return
1953 # update cache/log and return
1949 self.log(line_out,continue_prompt)
1954 self.log(line_out,continue_prompt)
1950 return line_out
1955 return line_out
1951
1956
1952 def handle_magic(self, line, continue_prompt=None,
1957 def handle_magic(self, line, continue_prompt=None,
1953 pre=None,iFun=None,theRest=None):
1958 pre=None,iFun=None,theRest=None):
1954 """Execute magic functions."""
1959 """Execute magic functions."""
1955
1960
1956
1961
1957 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1958 self.log(cmd,continue_prompt)
1963 self.log(cmd,continue_prompt)
1959 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1960 return cmd
1965 return cmd
1961
1966
1962 def handle_auto(self, line, continue_prompt=None,
1967 def handle_auto(self, line, continue_prompt=None,
1963 pre=None,iFun=None,theRest=None,obj=None):
1968 pre=None,iFun=None,theRest=None,obj=None):
1964 """Hande lines which can be auto-executed, quoting if requested."""
1969 """Hande lines which can be auto-executed, quoting if requested."""
1965
1970
1966 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1967
1972
1968 # This should only be active for single-line input!
1973 # This should only be active for single-line input!
1969 if continue_prompt:
1974 if continue_prompt:
1970 self.log(line,continue_prompt)
1975 self.log(line,continue_prompt)
1971 return line
1976 return line
1972
1977
1973 auto_rewrite = True
1978 auto_rewrite = True
1974 if pre == self.ESC_QUOTE:
1979 if pre == self.ESC_QUOTE:
1975 # Auto-quote splitting on whitespace
1980 # Auto-quote splitting on whitespace
1976 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1977 elif pre == self.ESC_QUOTE2:
1982 elif pre == self.ESC_QUOTE2:
1978 # Auto-quote whole string
1983 # Auto-quote whole string
1979 newcmd = '%s("%s")' % (iFun,theRest)
1984 newcmd = '%s("%s")' % (iFun,theRest)
1980 else:
1985 else:
1981 # Auto-paren.
1986 # Auto-paren.
1982 # We only apply it to argument-less calls if the autocall
1987 # We only apply it to argument-less calls if the autocall
1983 # parameter is set to 2. We only need to check that autocall is <
1988 # parameter is set to 2. We only need to check that autocall is <
1984 # 2, since this function isn't called unless it's at least 1.
1989 # 2, since this function isn't called unless it's at least 1.
1985 if not theRest and (self.rc.autocall < 2):
1990 if not theRest and (self.rc.autocall < 2):
1986 newcmd = '%s %s' % (iFun,theRest)
1991 newcmd = '%s %s' % (iFun,theRest)
1987 auto_rewrite = False
1992 auto_rewrite = False
1988 else:
1993 else:
1989 if theRest.startswith('['):
1994 if theRest.startswith('['):
1990 if hasattr(obj,'__getitem__'):
1995 if hasattr(obj,'__getitem__'):
1991 # Don't autocall in this case: item access for an object
1996 # Don't autocall in this case: item access for an object
1992 # which is BOTH callable and implements __getitem__.
1997 # which is BOTH callable and implements __getitem__.
1993 newcmd = '%s %s' % (iFun,theRest)
1998 newcmd = '%s %s' % (iFun,theRest)
1994 auto_rewrite = False
1999 auto_rewrite = False
1995 else:
2000 else:
1996 # if the object doesn't support [] access, go ahead and
2001 # if the object doesn't support [] access, go ahead and
1997 # autocall
2002 # autocall
1998 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1999 elif theRest.endswith(';'):
2004 elif theRest.endswith(';'):
2000 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2001 else:
2006 else:
2002 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003
2008
2004 if auto_rewrite:
2009 if auto_rewrite:
2005 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2006 # log what is now valid Python, not the actual user input (without the
2011 # log what is now valid Python, not the actual user input (without the
2007 # final newline)
2012 # final newline)
2008 self.log(newcmd,continue_prompt)
2013 self.log(newcmd,continue_prompt)
2009 return newcmd
2014 return newcmd
2010
2015
2011 def handle_help(self, line, continue_prompt=None,
2016 def handle_help(self, line, continue_prompt=None,
2012 pre=None,iFun=None,theRest=None):
2017 pre=None,iFun=None,theRest=None):
2013 """Try to get some help for the object.
2018 """Try to get some help for the object.
2014
2019
2015 obj? or ?obj -> basic information.
2020 obj? or ?obj -> basic information.
2016 obj?? or ??obj -> more details.
2021 obj?? or ??obj -> more details.
2017 """
2022 """
2018
2023
2019 # We need to make sure that we don't process lines which would be
2024 # We need to make sure that we don't process lines which would be
2020 # otherwise valid python, such as "x=1 # what?"
2025 # otherwise valid python, such as "x=1 # what?"
2021 try:
2026 try:
2022 codeop.compile_command(line)
2027 codeop.compile_command(line)
2023 except SyntaxError:
2028 except SyntaxError:
2024 # We should only handle as help stuff which is NOT valid syntax
2029 # We should only handle as help stuff which is NOT valid syntax
2025 if line[0]==self.ESC_HELP:
2030 if line[0]==self.ESC_HELP:
2026 line = line[1:]
2031 line = line[1:]
2027 elif line[-1]==self.ESC_HELP:
2032 elif line[-1]==self.ESC_HELP:
2028 line = line[:-1]
2033 line = line[:-1]
2029 self.log('#?'+line)
2034 self.log('#?'+line)
2030 if line:
2035 if line:
2031 self.magic_pinfo(line)
2036 self.magic_pinfo(line)
2032 else:
2037 else:
2033 page(self.usage,screen_lines=self.rc.screen_length)
2038 page(self.usage,screen_lines=self.rc.screen_length)
2034 return '' # Empty string is needed here!
2039 return '' # Empty string is needed here!
2035 except:
2040 except:
2036 # Pass any other exceptions through to the normal handler
2041 # Pass any other exceptions through to the normal handler
2037 return self.handle_normal(line,continue_prompt)
2042 return self.handle_normal(line,continue_prompt)
2038 else:
2043 else:
2039 # If the code compiles ok, we should handle it normally
2044 # If the code compiles ok, we should handle it normally
2040 return self.handle_normal(line,continue_prompt)
2045 return self.handle_normal(line,continue_prompt)
2041
2046
2042 def handle_emacs(self,line,continue_prompt=None,
2047 def handle_emacs(self,line,continue_prompt=None,
2043 pre=None,iFun=None,theRest=None):
2048 pre=None,iFun=None,theRest=None):
2044 """Handle input lines marked by python-mode."""
2049 """Handle input lines marked by python-mode."""
2045
2050
2046 # Currently, nothing is done. Later more functionality can be added
2051 # Currently, nothing is done. Later more functionality can be added
2047 # here if needed.
2052 # here if needed.
2048
2053
2049 # The input cache shouldn't be updated
2054 # The input cache shouldn't be updated
2050
2055
2051 return line
2056 return line
2052
2057
2053 def mktempfile(self,data=None):
2058 def mktempfile(self,data=None):
2054 """Make a new tempfile and return its filename.
2059 """Make a new tempfile and return its filename.
2055
2060
2056 This makes a call to tempfile.mktemp, but it registers the created
2061 This makes a call to tempfile.mktemp, but it registers the created
2057 filename internally so ipython cleans it up at exit time.
2062 filename internally so ipython cleans it up at exit time.
2058
2063
2059 Optional inputs:
2064 Optional inputs:
2060
2065
2061 - data(None): if data is given, it gets written out to the temp file
2066 - data(None): if data is given, it gets written out to the temp file
2062 immediately, and the file is closed again."""
2067 immediately, and the file is closed again."""
2063
2068
2064 filename = tempfile.mktemp('.py','ipython_edit_')
2069 filename = tempfile.mktemp('.py','ipython_edit_')
2065 self.tempfiles.append(filename)
2070 self.tempfiles.append(filename)
2066
2071
2067 if data:
2072 if data:
2068 tmp_file = open(filename,'w')
2073 tmp_file = open(filename,'w')
2069 tmp_file.write(data)
2074 tmp_file.write(data)
2070 tmp_file.close()
2075 tmp_file.close()
2071 return filename
2076 return filename
2072
2077
2073 def write(self,data):
2078 def write(self,data):
2074 """Write a string to the default output"""
2079 """Write a string to the default output"""
2075 Term.cout.write(data)
2080 Term.cout.write(data)
2076
2081
2077 def write_err(self,data):
2082 def write_err(self,data):
2078 """Write a string to the default error output"""
2083 """Write a string to the default error output"""
2079 Term.cerr.write(data)
2084 Term.cerr.write(data)
2080
2085
2081 def exit(self):
2086 def exit(self):
2082 """Handle interactive exit.
2087 """Handle interactive exit.
2083
2088
2084 This method sets the exit_now attribute."""
2089 This method sets the exit_now attribute."""
2085
2090
2086 if self.rc.confirm_exit:
2091 if self.rc.confirm_exit:
2087 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2088 self.exit_now = True
2093 self.exit_now = True
2089 else:
2094 else:
2090 self.exit_now = True
2095 self.exit_now = True
2091 return self.exit_now
2096 return self.exit_now
2092
2097
2093 def safe_execfile(self,fname,*where,**kw):
2098 def safe_execfile(self,fname,*where,**kw):
2094 fname = os.path.expanduser(fname)
2099 fname = os.path.expanduser(fname)
2095
2100
2096 # find things also in current directory
2101 # find things also in current directory
2097 dname = os.path.dirname(fname)
2102 dname = os.path.dirname(fname)
2098 if not sys.path.count(dname):
2103 if not sys.path.count(dname):
2099 sys.path.append(dname)
2104 sys.path.append(dname)
2100
2105
2101 try:
2106 try:
2102 xfile = open(fname)
2107 xfile = open(fname)
2103 except:
2108 except:
2104 print >> Term.cerr, \
2109 print >> Term.cerr, \
2105 'Could not open file <%s> for safe execution.' % fname
2110 'Could not open file <%s> for safe execution.' % fname
2106 return None
2111 return None
2107
2112
2108 kw.setdefault('islog',0)
2113 kw.setdefault('islog',0)
2109 kw.setdefault('quiet',1)
2114 kw.setdefault('quiet',1)
2110 kw.setdefault('exit_ignore',0)
2115 kw.setdefault('exit_ignore',0)
2111 first = xfile.readline()
2116 first = xfile.readline()
2112 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2113 xfile.close()
2118 xfile.close()
2114 # line by line execution
2119 # line by line execution
2115 if first.startswith(loghead) or kw['islog']:
2120 if first.startswith(loghead) or kw['islog']:
2116 print 'Loading log file <%s> one line at a time...' % fname
2121 print 'Loading log file <%s> one line at a time...' % fname
2117 if kw['quiet']:
2122 if kw['quiet']:
2118 stdout_save = sys.stdout
2123 stdout_save = sys.stdout
2119 sys.stdout = StringIO.StringIO()
2124 sys.stdout = StringIO.StringIO()
2120 try:
2125 try:
2121 globs,locs = where[0:2]
2126 globs,locs = where[0:2]
2122 except:
2127 except:
2123 try:
2128 try:
2124 globs = locs = where[0]
2129 globs = locs = where[0]
2125 except:
2130 except:
2126 globs = locs = globals()
2131 globs = locs = globals()
2127 badblocks = []
2132 badblocks = []
2128
2133
2129 # we also need to identify indented blocks of code when replaying
2134 # we also need to identify indented blocks of code when replaying
2130 # logs and put them together before passing them to an exec
2135 # logs and put them together before passing them to an exec
2131 # statement. This takes a bit of regexp and look-ahead work in the
2136 # statement. This takes a bit of regexp and look-ahead work in the
2132 # file. It's easiest if we swallow the whole thing in memory
2137 # file. It's easiest if we swallow the whole thing in memory
2133 # first, and manually walk through the lines list moving the
2138 # first, and manually walk through the lines list moving the
2134 # counter ourselves.
2139 # counter ourselves.
2135 indent_re = re.compile('\s+\S')
2140 indent_re = re.compile('\s+\S')
2136 xfile = open(fname)
2141 xfile = open(fname)
2137 filelines = xfile.readlines()
2142 filelines = xfile.readlines()
2138 xfile.close()
2143 xfile.close()
2139 nlines = len(filelines)
2144 nlines = len(filelines)
2140 lnum = 0
2145 lnum = 0
2141 while lnum < nlines:
2146 while lnum < nlines:
2142 line = filelines[lnum]
2147 line = filelines[lnum]
2143 lnum += 1
2148 lnum += 1
2144 # don't re-insert logger status info into cache
2149 # don't re-insert logger status info into cache
2145 if line.startswith('#log#'):
2150 if line.startswith('#log#'):
2146 continue
2151 continue
2147 else:
2152 else:
2148 # build a block of code (maybe a single line) for execution
2153 # build a block of code (maybe a single line) for execution
2149 block = line
2154 block = line
2150 try:
2155 try:
2151 next = filelines[lnum] # lnum has already incremented
2156 next = filelines[lnum] # lnum has already incremented
2152 except:
2157 except:
2153 next = None
2158 next = None
2154 while next and indent_re.match(next):
2159 while next and indent_re.match(next):
2155 block += next
2160 block += next
2156 lnum += 1
2161 lnum += 1
2157 try:
2162 try:
2158 next = filelines[lnum]
2163 next = filelines[lnum]
2159 except:
2164 except:
2160 next = None
2165 next = None
2161 # now execute the block of one or more lines
2166 # now execute the block of one or more lines
2162 try:
2167 try:
2163 exec block in globs,locs
2168 exec block in globs,locs
2164 except SystemExit:
2169 except SystemExit:
2165 pass
2170 pass
2166 except:
2171 except:
2167 badblocks.append(block.rstrip())
2172 badblocks.append(block.rstrip())
2168 if kw['quiet']: # restore stdout
2173 if kw['quiet']: # restore stdout
2169 sys.stdout.close()
2174 sys.stdout.close()
2170 sys.stdout = stdout_save
2175 sys.stdout = stdout_save
2171 print 'Finished replaying log file <%s>' % fname
2176 print 'Finished replaying log file <%s>' % fname
2172 if badblocks:
2177 if badblocks:
2173 print >> sys.stderr, ('\nThe following lines/blocks in file '
2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2174 '<%s> reported errors:' % fname)
2179 '<%s> reported errors:' % fname)
2175
2180
2176 for badline in badblocks:
2181 for badline in badblocks:
2177 print >> sys.stderr, badline
2182 print >> sys.stderr, badline
2178 else: # regular file execution
2183 else: # regular file execution
2179 try:
2184 try:
2180 execfile(fname,*where)
2185 execfile(fname,*where)
2181 except SyntaxError:
2186 except SyntaxError:
2182 etype,evalue = sys.exc_info()[:2]
2187 etype,evalue = sys.exc_info()[:2]
2183 self.SyntaxTB(etype,evalue,[])
2188 self.SyntaxTB(etype,evalue,[])
2184 warn('Failure executing file: <%s>' % fname)
2189 warn('Failure executing file: <%s>' % fname)
2185 except SystemExit,status:
2190 except SystemExit,status:
2186 if not kw['exit_ignore']:
2191 if not kw['exit_ignore']:
2187 self.InteractiveTB()
2192 self.InteractiveTB()
2188 warn('Failure executing file: <%s>' % fname)
2193 warn('Failure executing file: <%s>' % fname)
2189 except:
2194 except:
2190 self.InteractiveTB()
2195 self.InteractiveTB()
2191 warn('Failure executing file: <%s>' % fname)
2196 warn('Failure executing file: <%s>' % fname)
2192
2197
2193 #************************* end of file <iplib.py> *****************************
2198 #************************* end of file <iplib.py> *****************************
@@ -1,4896 +1,4900 b''
1 2006-01-13 Ville Vainio <vivainio@gmail.com>
1 2006-01-13 Ville Vainio <vivainio@gmail.com>
2
2
3 * IPython/platutils*.py: platform specific utility functions,
3 * IPython/platutils*.py: platform specific utility functions,
4 so far only set_term_title is implemented (change terminal
4 so far only set_term_title is implemented (change terminal
5 label in windowing systems). %cd now changes the title to
5 label in windowing systems). %cd now changes the title to
6 current dir.
6 current dir.
7
7
8 * IPython/Release.py: Added myself to "authors" list,
8 * IPython/Release.py: Added myself to "authors" list,
9 had to create new files.
9 had to create new files.
10
10
11 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
11 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
12 shell escape; not a known bug but had potential to be one in the
12 shell escape; not a known bug but had potential to be one in the
13 future.
13 future.
14
14
15 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
16 extension API for IPython! See the module for usage example. Fix
17 OInspect for docstring-less magic functions.
18
15
19
16 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
20 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
17
21
18 * IPython/iplib.py (raw_input): temporarily deactivate all
22 * IPython/iplib.py (raw_input): temporarily deactivate all
19 attempts at allowing pasting of code with autoindent on. It
23 attempts at allowing pasting of code with autoindent on. It
20 introduced bugs (reported by Prabhu) and I can't seem to find a
24 introduced bugs (reported by Prabhu) and I can't seem to find a
21 robust combination which works in all cases. Will have to revisit
25 robust combination which works in all cases. Will have to revisit
22 later.
26 later.
23
27
24 * IPython/genutils.py: remove isspace() function. We've dropped
28 * IPython/genutils.py: remove isspace() function. We've dropped
25 2.2 compatibility, so it's OK to use the string method.
29 2.2 compatibility, so it's OK to use the string method.
26
30
27 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
31 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
28
32
29 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
33 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
30 matching what NOT to autocall on, to include all python binary
34 matching what NOT to autocall on, to include all python binary
31 operators (including things like 'and', 'or', 'is' and 'in').
35 operators (including things like 'and', 'or', 'is' and 'in').
32 Prompted by a bug report on 'foo & bar', but I realized we had
36 Prompted by a bug report on 'foo & bar', but I realized we had
33 many more potential bug cases with other operators. The regexp is
37 many more potential bug cases with other operators. The regexp is
34 self.re_exclude_auto, it's fairly commented.
38 self.re_exclude_auto, it's fairly commented.
35
39
36 2006-01-12 Ville Vainio <vivainio@gmail.com>
40 2006-01-12 Ville Vainio <vivainio@gmail.com>
37
41
38 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
42 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
39 Prettified and hardened string/backslash quoting with ipsystem(),
43 Prettified and hardened string/backslash quoting with ipsystem(),
40 ipalias() and ipmagic(). Now even \ characters are passed to
44 ipalias() and ipmagic(). Now even \ characters are passed to
41 %magics, !shell escapes and aliases exactly as they are in the
45 %magics, !shell escapes and aliases exactly as they are in the
42 ipython command line. Should improve backslash experience,
46 ipython command line. Should improve backslash experience,
43 particularly in Windows (path delimiter for some commands that
47 particularly in Windows (path delimiter for some commands that
44 won't understand '/'), but Unix benefits as well (regexps). %cd
48 won't understand '/'), but Unix benefits as well (regexps). %cd
45 magic still doesn't support backslash path delimiters, though. Also
49 magic still doesn't support backslash path delimiters, though. Also
46 deleted all pretense of supporting multiline command strings in
50 deleted all pretense of supporting multiline command strings in
47 !system or %magic commands. Thanks to Jerry McRae for suggestions.
51 !system or %magic commands. Thanks to Jerry McRae for suggestions.
48
52
49 * doc/build_doc_instructions.txt added. Documentation on how to
53 * doc/build_doc_instructions.txt added. Documentation on how to
50 use doc/update_manual.py, added yesterday. Both files contributed
54 use doc/update_manual.py, added yesterday. Both files contributed
51 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
55 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
52 doc/*.sh for deprecation at a later date.
56 doc/*.sh for deprecation at a later date.
53
57
54 * /ipython.py Added ipython.py to root directory for
58 * /ipython.py Added ipython.py to root directory for
55 zero-installation (tar xzvf ipython.tgz; cd ipython; python
59 zero-installation (tar xzvf ipython.tgz; cd ipython; python
56 ipython.py) and development convenience (no need to kee doing
60 ipython.py) and development convenience (no need to kee doing
57 "setup.py install" between changes).
61 "setup.py install" between changes).
58
62
59 * Made ! and !! shell escapes work (again) in multiline expressions:
63 * Made ! and !! shell escapes work (again) in multiline expressions:
60 if 1:
64 if 1:
61 !ls
65 !ls
62 !!ls
66 !!ls
63
67
64 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
68 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
65
69
66 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
70 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
67 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
71 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
68 module in case-insensitive installation. Was causing crashes
72 module in case-insensitive installation. Was causing crashes
69 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
73 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
70
74
71 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
75 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
72 <marienz-AT-gentoo.org>, closes
76 <marienz-AT-gentoo.org>, closes
73 http://www.scipy.net/roundup/ipython/issue51.
77 http://www.scipy.net/roundup/ipython/issue51.
74
78
75 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
79 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
76
80
77 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
81 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
78 problem of excessive CPU usage under *nix and keyboard lag under
82 problem of excessive CPU usage under *nix and keyboard lag under
79 win32.
83 win32.
80
84
81 2006-01-10 *** Released version 0.7.0
85 2006-01-10 *** Released version 0.7.0
82
86
83 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
87 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
84
88
85 * IPython/Release.py (revision): tag version number to 0.7.0,
89 * IPython/Release.py (revision): tag version number to 0.7.0,
86 ready for release.
90 ready for release.
87
91
88 * IPython/Magic.py (magic_edit): Add print statement to %edit so
92 * IPython/Magic.py (magic_edit): Add print statement to %edit so
89 it informs the user of the name of the temp. file used. This can
93 it informs the user of the name of the temp. file used. This can
90 help if you decide later to reuse that same file, so you know
94 help if you decide later to reuse that same file, so you know
91 where to copy the info from.
95 where to copy the info from.
92
96
93 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
97 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
94
98
95 * setup_bdist_egg.py: little script to build an egg. Added
99 * setup_bdist_egg.py: little script to build an egg. Added
96 support in the release tools as well.
100 support in the release tools as well.
97
101
98 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
102 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
99
103
100 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
104 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
101 version selection (new -wxversion command line and ipythonrc
105 version selection (new -wxversion command line and ipythonrc
102 parameter). Patch contributed by Arnd Baecker
106 parameter). Patch contributed by Arnd Baecker
103 <arnd.baecker-AT-web.de>.
107 <arnd.baecker-AT-web.de>.
104
108
105 * IPython/iplib.py (embed_mainloop): fix tab-completion in
109 * IPython/iplib.py (embed_mainloop): fix tab-completion in
106 embedded instances, for variables defined at the interactive
110 embedded instances, for variables defined at the interactive
107 prompt of the embedded ipython. Reported by Arnd.
111 prompt of the embedded ipython. Reported by Arnd.
108
112
109 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
113 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
110 it can be used as a (stateful) toggle, or with a direct parameter.
114 it can be used as a (stateful) toggle, or with a direct parameter.
111
115
112 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
116 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
113 could be triggered in certain cases and cause the traceback
117 could be triggered in certain cases and cause the traceback
114 printer not to work.
118 printer not to work.
115
119
116 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
120 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
117
121
118 * IPython/iplib.py (_should_recompile): Small fix, closes
122 * IPython/iplib.py (_should_recompile): Small fix, closes
119 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
123 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
120
124
121 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
125 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
122
126
123 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
127 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
124 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
128 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
125 Moad for help with tracking it down.
129 Moad for help with tracking it down.
126
130
127 * IPython/iplib.py (handle_auto): fix autocall handling for
131 * IPython/iplib.py (handle_auto): fix autocall handling for
128 objects which support BOTH __getitem__ and __call__ (so that f [x]
132 objects which support BOTH __getitem__ and __call__ (so that f [x]
129 is left alone, instead of becoming f([x]) automatically).
133 is left alone, instead of becoming f([x]) automatically).
130
134
131 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
135 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
132 Ville's patch.
136 Ville's patch.
133
137
134 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
138 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
135
139
136 * IPython/iplib.py (handle_auto): changed autocall semantics to
140 * IPython/iplib.py (handle_auto): changed autocall semantics to
137 include 'smart' mode, where the autocall transformation is NOT
141 include 'smart' mode, where the autocall transformation is NOT
138 applied if there are no arguments on the line. This allows you to
142 applied if there are no arguments on the line. This allows you to
139 just type 'foo' if foo is a callable to see its internal form,
143 just type 'foo' if foo is a callable to see its internal form,
140 instead of having it called with no arguments (typically a
144 instead of having it called with no arguments (typically a
141 mistake). The old 'full' autocall still exists: for that, you
145 mistake). The old 'full' autocall still exists: for that, you
142 need to set the 'autocall' parameter to 2 in your ipythonrc file.
146 need to set the 'autocall' parameter to 2 in your ipythonrc file.
143
147
144 * IPython/completer.py (Completer.attr_matches): add
148 * IPython/completer.py (Completer.attr_matches): add
145 tab-completion support for Enthoughts' traits. After a report by
149 tab-completion support for Enthoughts' traits. After a report by
146 Arnd and a patch by Prabhu.
150 Arnd and a patch by Prabhu.
147
151
148 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
152 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
149
153
150 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
154 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
151 Schmolck's patch to fix inspect.getinnerframes().
155 Schmolck's patch to fix inspect.getinnerframes().
152
156
153 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
157 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
154 for embedded instances, regarding handling of namespaces and items
158 for embedded instances, regarding handling of namespaces and items
155 added to the __builtin__ one. Multiple embedded instances and
159 added to the __builtin__ one. Multiple embedded instances and
156 recursive embeddings should work better now (though I'm not sure
160 recursive embeddings should work better now (though I'm not sure
157 I've got all the corner cases fixed, that code is a bit of a brain
161 I've got all the corner cases fixed, that code is a bit of a brain
158 twister).
162 twister).
159
163
160 * IPython/Magic.py (magic_edit): added support to edit in-memory
164 * IPython/Magic.py (magic_edit): added support to edit in-memory
161 macros (automatically creates the necessary temp files). %edit
165 macros (automatically creates the necessary temp files). %edit
162 also doesn't return the file contents anymore, it's just noise.
166 also doesn't return the file contents anymore, it's just noise.
163
167
164 * IPython/completer.py (Completer.attr_matches): revert change to
168 * IPython/completer.py (Completer.attr_matches): revert change to
165 complete only on attributes listed in __all__. I realized it
169 complete only on attributes listed in __all__. I realized it
166 cripples the tab-completion system as a tool for exploring the
170 cripples the tab-completion system as a tool for exploring the
167 internals of unknown libraries (it renders any non-__all__
171 internals of unknown libraries (it renders any non-__all__
168 attribute off-limits). I got bit by this when trying to see
172 attribute off-limits). I got bit by this when trying to see
169 something inside the dis module.
173 something inside the dis module.
170
174
171 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
175 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
172
176
173 * IPython/iplib.py (InteractiveShell.__init__): add .meta
177 * IPython/iplib.py (InteractiveShell.__init__): add .meta
174 namespace for users and extension writers to hold data in. This
178 namespace for users and extension writers to hold data in. This
175 follows the discussion in
179 follows the discussion in
176 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
180 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
177
181
178 * IPython/completer.py (IPCompleter.complete): small patch to help
182 * IPython/completer.py (IPCompleter.complete): small patch to help
179 tab-completion under Emacs, after a suggestion by John Barnard
183 tab-completion under Emacs, after a suggestion by John Barnard
180 <barnarj-AT-ccf.org>.
184 <barnarj-AT-ccf.org>.
181
185
182 * IPython/Magic.py (Magic.extract_input_slices): added support for
186 * IPython/Magic.py (Magic.extract_input_slices): added support for
183 the slice notation in magics to use N-M to represent numbers N...M
187 the slice notation in magics to use N-M to represent numbers N...M
184 (closed endpoints). This is used by %macro and %save.
188 (closed endpoints). This is used by %macro and %save.
185
189
186 * IPython/completer.py (Completer.attr_matches): for modules which
190 * IPython/completer.py (Completer.attr_matches): for modules which
187 define __all__, complete only on those. After a patch by Jeffrey
191 define __all__, complete only on those. After a patch by Jeffrey
188 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
192 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
189 speed up this routine.
193 speed up this routine.
190
194
191 * IPython/Logger.py (Logger.log): fix a history handling bug. I
195 * IPython/Logger.py (Logger.log): fix a history handling bug. I
192 don't know if this is the end of it, but the behavior now is
196 don't know if this is the end of it, but the behavior now is
193 certainly much more correct. Note that coupled with macros,
197 certainly much more correct. Note that coupled with macros,
194 slightly surprising (at first) behavior may occur: a macro will in
198 slightly surprising (at first) behavior may occur: a macro will in
195 general expand to multiple lines of input, so upon exiting, the
199 general expand to multiple lines of input, so upon exiting, the
196 in/out counters will both be bumped by the corresponding amount
200 in/out counters will both be bumped by the corresponding amount
197 (as if the macro's contents had been typed interactively). Typing
201 (as if the macro's contents had been typed interactively). Typing
198 %hist will reveal the intermediate (silently processed) lines.
202 %hist will reveal the intermediate (silently processed) lines.
199
203
200 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
204 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
201 pickle to fail (%run was overwriting __main__ and not restoring
205 pickle to fail (%run was overwriting __main__ and not restoring
202 it, but pickle relies on __main__ to operate).
206 it, but pickle relies on __main__ to operate).
203
207
204 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
208 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
205 using properties, but forgot to make the main InteractiveShell
209 using properties, but forgot to make the main InteractiveShell
206 class a new-style class. Properties fail silently, and
210 class a new-style class. Properties fail silently, and
207 misteriously, with old-style class (getters work, but
211 misteriously, with old-style class (getters work, but
208 setters don't do anything).
212 setters don't do anything).
209
213
210 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
214 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
211
215
212 * IPython/Magic.py (magic_history): fix history reporting bug (I
216 * IPython/Magic.py (magic_history): fix history reporting bug (I
213 know some nasties are still there, I just can't seem to find a
217 know some nasties are still there, I just can't seem to find a
214 reproducible test case to track them down; the input history is
218 reproducible test case to track them down; the input history is
215 falling out of sync...)
219 falling out of sync...)
216
220
217 * IPython/iplib.py (handle_shell_escape): fix bug where both
221 * IPython/iplib.py (handle_shell_escape): fix bug where both
218 aliases and system accesses where broken for indented code (such
222 aliases and system accesses where broken for indented code (such
219 as loops).
223 as loops).
220
224
221 * IPython/genutils.py (shell): fix small but critical bug for
225 * IPython/genutils.py (shell): fix small but critical bug for
222 win32 system access.
226 win32 system access.
223
227
224 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
228 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
225
229
226 * IPython/iplib.py (showtraceback): remove use of the
230 * IPython/iplib.py (showtraceback): remove use of the
227 sys.last_{type/value/traceback} structures, which are non
231 sys.last_{type/value/traceback} structures, which are non
228 thread-safe.
232 thread-safe.
229 (_prefilter): change control flow to ensure that we NEVER
233 (_prefilter): change control flow to ensure that we NEVER
230 introspect objects when autocall is off. This will guarantee that
234 introspect objects when autocall is off. This will guarantee that
231 having an input line of the form 'x.y', where access to attribute
235 having an input line of the form 'x.y', where access to attribute
232 'y' has side effects, doesn't trigger the side effect TWICE. It
236 'y' has side effects, doesn't trigger the side effect TWICE. It
233 is important to note that, with autocall on, these side effects
237 is important to note that, with autocall on, these side effects
234 can still happen.
238 can still happen.
235 (ipsystem): new builtin, to complete the ip{magic/alias/system}
239 (ipsystem): new builtin, to complete the ip{magic/alias/system}
236 trio. IPython offers these three kinds of special calls which are
240 trio. IPython offers these three kinds of special calls which are
237 not python code, and it's a good thing to have their call method
241 not python code, and it's a good thing to have their call method
238 be accessible as pure python functions (not just special syntax at
242 be accessible as pure python functions (not just special syntax at
239 the command line). It gives us a better internal implementation
243 the command line). It gives us a better internal implementation
240 structure, as well as exposing these for user scripting more
244 structure, as well as exposing these for user scripting more
241 cleanly.
245 cleanly.
242
246
243 * IPython/macro.py (Macro.__init__): moved macros to a standalone
247 * IPython/macro.py (Macro.__init__): moved macros to a standalone
244 file. Now that they'll be more likely to be used with the
248 file. Now that they'll be more likely to be used with the
245 persistance system (%store), I want to make sure their module path
249 persistance system (%store), I want to make sure their module path
246 doesn't change in the future, so that we don't break things for
250 doesn't change in the future, so that we don't break things for
247 users' persisted data.
251 users' persisted data.
248
252
249 * IPython/iplib.py (autoindent_update): move indentation
253 * IPython/iplib.py (autoindent_update): move indentation
250 management into the _text_ processing loop, not the keyboard
254 management into the _text_ processing loop, not the keyboard
251 interactive one. This is necessary to correctly process non-typed
255 interactive one. This is necessary to correctly process non-typed
252 multiline input (such as macros).
256 multiline input (such as macros).
253
257
254 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
258 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
255 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
259 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
256 which was producing problems in the resulting manual.
260 which was producing problems in the resulting manual.
257 (magic_whos): improve reporting of instances (show their class,
261 (magic_whos): improve reporting of instances (show their class,
258 instead of simply printing 'instance' which isn't terribly
262 instead of simply printing 'instance' which isn't terribly
259 informative).
263 informative).
260
264
261 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
265 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
262 (minor mods) to support network shares under win32.
266 (minor mods) to support network shares under win32.
263
267
264 * IPython/winconsole.py (get_console_size): add new winconsole
268 * IPython/winconsole.py (get_console_size): add new winconsole
265 module and fixes to page_dumb() to improve its behavior under
269 module and fixes to page_dumb() to improve its behavior under
266 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
270 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
267
271
268 * IPython/Magic.py (Macro): simplified Macro class to just
272 * IPython/Magic.py (Macro): simplified Macro class to just
269 subclass list. We've had only 2.2 compatibility for a very long
273 subclass list. We've had only 2.2 compatibility for a very long
270 time, yet I was still avoiding subclassing the builtin types. No
274 time, yet I was still avoiding subclassing the builtin types. No
271 more (I'm also starting to use properties, though I won't shift to
275 more (I'm also starting to use properties, though I won't shift to
272 2.3-specific features quite yet).
276 2.3-specific features quite yet).
273 (magic_store): added Ville's patch for lightweight variable
277 (magic_store): added Ville's patch for lightweight variable
274 persistence, after a request on the user list by Matt Wilkie
278 persistence, after a request on the user list by Matt Wilkie
275 <maphew-AT-gmail.com>. The new %store magic's docstring has full
279 <maphew-AT-gmail.com>. The new %store magic's docstring has full
276 details.
280 details.
277
281
278 * IPython/iplib.py (InteractiveShell.post_config_initialization):
282 * IPython/iplib.py (InteractiveShell.post_config_initialization):
279 changed the default logfile name from 'ipython.log' to
283 changed the default logfile name from 'ipython.log' to
280 'ipython_log.py'. These logs are real python files, and now that
284 'ipython_log.py'. These logs are real python files, and now that
281 we have much better multiline support, people are more likely to
285 we have much better multiline support, people are more likely to
282 want to use them as such. Might as well name them correctly.
286 want to use them as such. Might as well name them correctly.
283
287
284 * IPython/Magic.py: substantial cleanup. While we can't stop
288 * IPython/Magic.py: substantial cleanup. While we can't stop
285 using magics as mixins, due to the existing customizations 'out
289 using magics as mixins, due to the existing customizations 'out
286 there' which rely on the mixin naming conventions, at least I
290 there' which rely on the mixin naming conventions, at least I
287 cleaned out all cross-class name usage. So once we are OK with
291 cleaned out all cross-class name usage. So once we are OK with
288 breaking compatibility, the two systems can be separated.
292 breaking compatibility, the two systems can be separated.
289
293
290 * IPython/Logger.py: major cleanup. This one is NOT a mixin
294 * IPython/Logger.py: major cleanup. This one is NOT a mixin
291 anymore, and the class is a fair bit less hideous as well. New
295 anymore, and the class is a fair bit less hideous as well. New
292 features were also introduced: timestamping of input, and logging
296 features were also introduced: timestamping of input, and logging
293 of output results. These are user-visible with the -t and -o
297 of output results. These are user-visible with the -t and -o
294 options to %logstart. Closes
298 options to %logstart. Closes
295 http://www.scipy.net/roundup/ipython/issue11 and a request by
299 http://www.scipy.net/roundup/ipython/issue11 and a request by
296 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
300 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
297
301
298 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
302 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
299
303
300 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
304 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
301 better hadnle backslashes in paths. See the thread 'More Windows
305 better hadnle backslashes in paths. See the thread 'More Windows
302 questions part 2 - \/ characters revisited' on the iypthon user
306 questions part 2 - \/ characters revisited' on the iypthon user
303 list:
307 list:
304 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
308 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
305
309
306 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
310 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
307
311
308 (InteractiveShell.__init__): change threaded shells to not use the
312 (InteractiveShell.__init__): change threaded shells to not use the
309 ipython crash handler. This was causing more problems than not,
313 ipython crash handler. This was causing more problems than not,
310 as exceptions in the main thread (GUI code, typically) would
314 as exceptions in the main thread (GUI code, typically) would
311 always show up as a 'crash', when they really weren't.
315 always show up as a 'crash', when they really weren't.
312
316
313 The colors and exception mode commands (%colors/%xmode) have been
317 The colors and exception mode commands (%colors/%xmode) have been
314 synchronized to also take this into account, so users can get
318 synchronized to also take this into account, so users can get
315 verbose exceptions for their threaded code as well. I also added
319 verbose exceptions for their threaded code as well. I also added
316 support for activating pdb inside this exception handler as well,
320 support for activating pdb inside this exception handler as well,
317 so now GUI authors can use IPython's enhanced pdb at runtime.
321 so now GUI authors can use IPython's enhanced pdb at runtime.
318
322
319 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
323 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
320 true by default, and add it to the shipped ipythonrc file. Since
324 true by default, and add it to the shipped ipythonrc file. Since
321 this asks the user before proceeding, I think it's OK to make it
325 this asks the user before proceeding, I think it's OK to make it
322 true by default.
326 true by default.
323
327
324 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
328 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
325 of the previous special-casing of input in the eval loop. I think
329 of the previous special-casing of input in the eval loop. I think
326 this is cleaner, as they really are commands and shouldn't have
330 this is cleaner, as they really are commands and shouldn't have
327 a special role in the middle of the core code.
331 a special role in the middle of the core code.
328
332
329 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
333 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
330
334
331 * IPython/iplib.py (edit_syntax_error): added support for
335 * IPython/iplib.py (edit_syntax_error): added support for
332 automatically reopening the editor if the file had a syntax error
336 automatically reopening the editor if the file had a syntax error
333 in it. Thanks to scottt who provided the patch at:
337 in it. Thanks to scottt who provided the patch at:
334 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
338 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
335 version committed).
339 version committed).
336
340
337 * IPython/iplib.py (handle_normal): add suport for multi-line
341 * IPython/iplib.py (handle_normal): add suport for multi-line
338 input with emtpy lines. This fixes
342 input with emtpy lines. This fixes
339 http://www.scipy.net/roundup/ipython/issue43 and a similar
343 http://www.scipy.net/roundup/ipython/issue43 and a similar
340 discussion on the user list.
344 discussion on the user list.
341
345
342 WARNING: a behavior change is necessarily introduced to support
346 WARNING: a behavior change is necessarily introduced to support
343 blank lines: now a single blank line with whitespace does NOT
347 blank lines: now a single blank line with whitespace does NOT
344 break the input loop, which means that when autoindent is on, by
348 break the input loop, which means that when autoindent is on, by
345 default hitting return on the next (indented) line does NOT exit.
349 default hitting return on the next (indented) line does NOT exit.
346
350
347 Instead, to exit a multiline input you can either have:
351 Instead, to exit a multiline input you can either have:
348
352
349 - TWO whitespace lines (just hit return again), or
353 - TWO whitespace lines (just hit return again), or
350 - a single whitespace line of a different length than provided
354 - a single whitespace line of a different length than provided
351 by the autoindent (add or remove a space).
355 by the autoindent (add or remove a space).
352
356
353 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
357 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
354 module to better organize all readline-related functionality.
358 module to better organize all readline-related functionality.
355 I've deleted FlexCompleter and put all completion clases here.
359 I've deleted FlexCompleter and put all completion clases here.
356
360
357 * IPython/iplib.py (raw_input): improve indentation management.
361 * IPython/iplib.py (raw_input): improve indentation management.
358 It is now possible to paste indented code with autoindent on, and
362 It is now possible to paste indented code with autoindent on, and
359 the code is interpreted correctly (though it still looks bad on
363 the code is interpreted correctly (though it still looks bad on
360 screen, due to the line-oriented nature of ipython).
364 screen, due to the line-oriented nature of ipython).
361 (MagicCompleter.complete): change behavior so that a TAB key on an
365 (MagicCompleter.complete): change behavior so that a TAB key on an
362 otherwise empty line actually inserts a tab, instead of completing
366 otherwise empty line actually inserts a tab, instead of completing
363 on the entire global namespace. This makes it easier to use the
367 on the entire global namespace. This makes it easier to use the
364 TAB key for indentation. After a request by Hans Meine
368 TAB key for indentation. After a request by Hans Meine
365 <hans_meine-AT-gmx.net>
369 <hans_meine-AT-gmx.net>
366 (_prefilter): add support so that typing plain 'exit' or 'quit'
370 (_prefilter): add support so that typing plain 'exit' or 'quit'
367 does a sensible thing. Originally I tried to deviate as little as
371 does a sensible thing. Originally I tried to deviate as little as
368 possible from the default python behavior, but even that one may
372 possible from the default python behavior, but even that one may
369 change in this direction (thread on python-dev to that effect).
373 change in this direction (thread on python-dev to that effect).
370 Regardless, ipython should do the right thing even if CPython's
374 Regardless, ipython should do the right thing even if CPython's
371 '>>>' prompt doesn't.
375 '>>>' prompt doesn't.
372 (InteractiveShell): removed subclassing code.InteractiveConsole
376 (InteractiveShell): removed subclassing code.InteractiveConsole
373 class. By now we'd overridden just about all of its methods: I've
377 class. By now we'd overridden just about all of its methods: I've
374 copied the remaining two over, and now ipython is a standalone
378 copied the remaining two over, and now ipython is a standalone
375 class. This will provide a clearer picture for the chainsaw
379 class. This will provide a clearer picture for the chainsaw
376 branch refactoring.
380 branch refactoring.
377
381
378 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
382 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
379
383
380 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
384 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
381 failures for objects which break when dir() is called on them.
385 failures for objects which break when dir() is called on them.
382
386
383 * IPython/FlexCompleter.py (Completer.__init__): Added support for
387 * IPython/FlexCompleter.py (Completer.__init__): Added support for
384 distinct local and global namespaces in the completer API. This
388 distinct local and global namespaces in the completer API. This
385 change allows us top properly handle completion with distinct
389 change allows us top properly handle completion with distinct
386 scopes, including in embedded instances (this had never really
390 scopes, including in embedded instances (this had never really
387 worked correctly).
391 worked correctly).
388
392
389 Note: this introduces a change in the constructor for
393 Note: this introduces a change in the constructor for
390 MagicCompleter, as a new global_namespace parameter is now the
394 MagicCompleter, as a new global_namespace parameter is now the
391 second argument (the others were bumped one position).
395 second argument (the others were bumped one position).
392
396
393 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
397 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
394
398
395 * IPython/iplib.py (embed_mainloop): fix tab-completion in
399 * IPython/iplib.py (embed_mainloop): fix tab-completion in
396 embedded instances (which can be done now thanks to Vivian's
400 embedded instances (which can be done now thanks to Vivian's
397 frame-handling fixes for pdb).
401 frame-handling fixes for pdb).
398 (InteractiveShell.__init__): Fix namespace handling problem in
402 (InteractiveShell.__init__): Fix namespace handling problem in
399 embedded instances. We were overwriting __main__ unconditionally,
403 embedded instances. We were overwriting __main__ unconditionally,
400 and this should only be done for 'full' (non-embedded) IPython;
404 and this should only be done for 'full' (non-embedded) IPython;
401 embedded instances must respect the caller's __main__. Thanks to
405 embedded instances must respect the caller's __main__. Thanks to
402 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
406 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
403
407
404 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
408 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
405
409
406 * setup.py: added download_url to setup(). This registers the
410 * setup.py: added download_url to setup(). This registers the
407 download address at PyPI, which is not only useful to humans
411 download address at PyPI, which is not only useful to humans
408 browsing the site, but is also picked up by setuptools (the Eggs
412 browsing the site, but is also picked up by setuptools (the Eggs
409 machinery). Thanks to Ville and R. Kern for the info/discussion
413 machinery). Thanks to Ville and R. Kern for the info/discussion
410 on this.
414 on this.
411
415
412 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
416 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
413
417
414 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
418 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
415 This brings a lot of nice functionality to the pdb mode, which now
419 This brings a lot of nice functionality to the pdb mode, which now
416 has tab-completion, syntax highlighting, and better stack handling
420 has tab-completion, syntax highlighting, and better stack handling
417 than before. Many thanks to Vivian De Smedt
421 than before. Many thanks to Vivian De Smedt
418 <vivian-AT-vdesmedt.com> for the original patches.
422 <vivian-AT-vdesmedt.com> for the original patches.
419
423
420 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
424 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
421
425
422 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
426 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
423 sequence to consistently accept the banner argument. The
427 sequence to consistently accept the banner argument. The
424 inconsistency was tripping SAGE, thanks to Gary Zablackis
428 inconsistency was tripping SAGE, thanks to Gary Zablackis
425 <gzabl-AT-yahoo.com> for the report.
429 <gzabl-AT-yahoo.com> for the report.
426
430
427 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
431 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
428
432
429 * IPython/iplib.py (InteractiveShell.post_config_initialization):
433 * IPython/iplib.py (InteractiveShell.post_config_initialization):
430 Fix bug where a naked 'alias' call in the ipythonrc file would
434 Fix bug where a naked 'alias' call in the ipythonrc file would
431 cause a crash. Bug reported by Jorgen Stenarson.
435 cause a crash. Bug reported by Jorgen Stenarson.
432
436
433 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
437 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
434
438
435 * IPython/ipmaker.py (make_IPython): cleanups which should improve
439 * IPython/ipmaker.py (make_IPython): cleanups which should improve
436 startup time.
440 startup time.
437
441
438 * IPython/iplib.py (runcode): my globals 'fix' for embedded
442 * IPython/iplib.py (runcode): my globals 'fix' for embedded
439 instances had introduced a bug with globals in normal code. Now
443 instances had introduced a bug with globals in normal code. Now
440 it's working in all cases.
444 it's working in all cases.
441
445
442 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
446 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
443 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
447 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
444 has been introduced to set the default case sensitivity of the
448 has been introduced to set the default case sensitivity of the
445 searches. Users can still select either mode at runtime on a
449 searches. Users can still select either mode at runtime on a
446 per-search basis.
450 per-search basis.
447
451
448 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
452 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
449
453
450 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
454 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
451 attributes in wildcard searches for subclasses. Modified version
455 attributes in wildcard searches for subclasses. Modified version
452 of a patch by Jorgen.
456 of a patch by Jorgen.
453
457
454 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
458 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
455
459
456 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
460 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
457 embedded instances. I added a user_global_ns attribute to the
461 embedded instances. I added a user_global_ns attribute to the
458 InteractiveShell class to handle this.
462 InteractiveShell class to handle this.
459
463
460 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
464 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
461
465
462 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
466 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
463 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
467 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
464 (reported under win32, but may happen also in other platforms).
468 (reported under win32, but may happen also in other platforms).
465 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
469 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
466
470
467 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
471 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
468
472
469 * IPython/Magic.py (magic_psearch): new support for wildcard
473 * IPython/Magic.py (magic_psearch): new support for wildcard
470 patterns. Now, typing ?a*b will list all names which begin with a
474 patterns. Now, typing ?a*b will list all names which begin with a
471 and end in b, for example. The %psearch magic has full
475 and end in b, for example. The %psearch magic has full
472 docstrings. Many thanks to JΓΆrgen Stenarson
476 docstrings. Many thanks to JΓΆrgen Stenarson
473 <jorgen.stenarson-AT-bostream.nu>, author of the patches
477 <jorgen.stenarson-AT-bostream.nu>, author of the patches
474 implementing this functionality.
478 implementing this functionality.
475
479
476 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
480 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
477
481
478 * Manual: fixed long-standing annoyance of double-dashes (as in
482 * Manual: fixed long-standing annoyance of double-dashes (as in
479 --prefix=~, for example) being stripped in the HTML version. This
483 --prefix=~, for example) being stripped in the HTML version. This
480 is a latex2html bug, but a workaround was provided. Many thanks
484 is a latex2html bug, but a workaround was provided. Many thanks
481 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
485 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
482 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
486 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
483 rolling. This seemingly small issue had tripped a number of users
487 rolling. This seemingly small issue had tripped a number of users
484 when first installing, so I'm glad to see it gone.
488 when first installing, so I'm glad to see it gone.
485
489
486 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
490 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
487
491
488 * IPython/Extensions/numeric_formats.py: fix missing import,
492 * IPython/Extensions/numeric_formats.py: fix missing import,
489 reported by Stephen Walton.
493 reported by Stephen Walton.
490
494
491 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
495 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
492
496
493 * IPython/demo.py: finish demo module, fully documented now.
497 * IPython/demo.py: finish demo module, fully documented now.
494
498
495 * IPython/genutils.py (file_read): simple little utility to read a
499 * IPython/genutils.py (file_read): simple little utility to read a
496 file and ensure it's closed afterwards.
500 file and ensure it's closed afterwards.
497
501
498 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
502 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
499
503
500 * IPython/demo.py (Demo.__init__): added support for individually
504 * IPython/demo.py (Demo.__init__): added support for individually
501 tagging blocks for automatic execution.
505 tagging blocks for automatic execution.
502
506
503 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
507 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
504 syntax-highlighted python sources, requested by John.
508 syntax-highlighted python sources, requested by John.
505
509
506 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
510 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
507
511
508 * IPython/demo.py (Demo.again): fix bug where again() blocks after
512 * IPython/demo.py (Demo.again): fix bug where again() blocks after
509 finishing.
513 finishing.
510
514
511 * IPython/genutils.py (shlex_split): moved from Magic to here,
515 * IPython/genutils.py (shlex_split): moved from Magic to here,
512 where all 2.2 compatibility stuff lives. I needed it for demo.py.
516 where all 2.2 compatibility stuff lives. I needed it for demo.py.
513
517
514 * IPython/demo.py (Demo.__init__): added support for silent
518 * IPython/demo.py (Demo.__init__): added support for silent
515 blocks, improved marks as regexps, docstrings written.
519 blocks, improved marks as regexps, docstrings written.
516 (Demo.__init__): better docstring, added support for sys.argv.
520 (Demo.__init__): better docstring, added support for sys.argv.
517
521
518 * IPython/genutils.py (marquee): little utility used by the demo
522 * IPython/genutils.py (marquee): little utility used by the demo
519 code, handy in general.
523 code, handy in general.
520
524
521 * IPython/demo.py (Demo.__init__): new class for interactive
525 * IPython/demo.py (Demo.__init__): new class for interactive
522 demos. Not documented yet, I just wrote it in a hurry for
526 demos. Not documented yet, I just wrote it in a hurry for
523 scipy'05. Will docstring later.
527 scipy'05. Will docstring later.
524
528
525 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
529 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
526
530
527 * IPython/Shell.py (sigint_handler): Drastic simplification which
531 * IPython/Shell.py (sigint_handler): Drastic simplification which
528 also seems to make Ctrl-C work correctly across threads! This is
532 also seems to make Ctrl-C work correctly across threads! This is
529 so simple, that I can't beleive I'd missed it before. Needs more
533 so simple, that I can't beleive I'd missed it before. Needs more
530 testing, though.
534 testing, though.
531 (KBINT): Never mind, revert changes. I'm sure I'd tried something
535 (KBINT): Never mind, revert changes. I'm sure I'd tried something
532 like this before...
536 like this before...
533
537
534 * IPython/genutils.py (get_home_dir): add protection against
538 * IPython/genutils.py (get_home_dir): add protection against
535 non-dirs in win32 registry.
539 non-dirs in win32 registry.
536
540
537 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
541 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
538 bug where dict was mutated while iterating (pysh crash).
542 bug where dict was mutated while iterating (pysh crash).
539
543
540 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
544 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
541
545
542 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
546 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
543 spurious newlines added by this routine. After a report by
547 spurious newlines added by this routine. After a report by
544 F. Mantegazza.
548 F. Mantegazza.
545
549
546 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
550 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
547
551
548 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
552 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
549 calls. These were a leftover from the GTK 1.x days, and can cause
553 calls. These were a leftover from the GTK 1.x days, and can cause
550 problems in certain cases (after a report by John Hunter).
554 problems in certain cases (after a report by John Hunter).
551
555
552 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
556 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
553 os.getcwd() fails at init time. Thanks to patch from David Remahl
557 os.getcwd() fails at init time. Thanks to patch from David Remahl
554 <chmod007-AT-mac.com>.
558 <chmod007-AT-mac.com>.
555 (InteractiveShell.__init__): prevent certain special magics from
559 (InteractiveShell.__init__): prevent certain special magics from
556 being shadowed by aliases. Closes
560 being shadowed by aliases. Closes
557 http://www.scipy.net/roundup/ipython/issue41.
561 http://www.scipy.net/roundup/ipython/issue41.
558
562
559 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
563 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
560
564
561 * IPython/iplib.py (InteractiveShell.complete): Added new
565 * IPython/iplib.py (InteractiveShell.complete): Added new
562 top-level completion method to expose the completion mechanism
566 top-level completion method to expose the completion mechanism
563 beyond readline-based environments.
567 beyond readline-based environments.
564
568
565 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
569 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
566
570
567 * tools/ipsvnc (svnversion): fix svnversion capture.
571 * tools/ipsvnc (svnversion): fix svnversion capture.
568
572
569 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
573 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
570 attribute to self, which was missing. Before, it was set by a
574 attribute to self, which was missing. Before, it was set by a
571 routine which in certain cases wasn't being called, so the
575 routine which in certain cases wasn't being called, so the
572 instance could end up missing the attribute. This caused a crash.
576 instance could end up missing the attribute. This caused a crash.
573 Closes http://www.scipy.net/roundup/ipython/issue40.
577 Closes http://www.scipy.net/roundup/ipython/issue40.
574
578
575 2005-08-16 Fernando Perez <fperez@colorado.edu>
579 2005-08-16 Fernando Perez <fperez@colorado.edu>
576
580
577 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
581 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
578 contains non-string attribute. Closes
582 contains non-string attribute. Closes
579 http://www.scipy.net/roundup/ipython/issue38.
583 http://www.scipy.net/roundup/ipython/issue38.
580
584
581 2005-08-14 Fernando Perez <fperez@colorado.edu>
585 2005-08-14 Fernando Perez <fperez@colorado.edu>
582
586
583 * tools/ipsvnc: Minor improvements, to add changeset info.
587 * tools/ipsvnc: Minor improvements, to add changeset info.
584
588
585 2005-08-12 Fernando Perez <fperez@colorado.edu>
589 2005-08-12 Fernando Perez <fperez@colorado.edu>
586
590
587 * IPython/iplib.py (runsource): remove self.code_to_run_src
591 * IPython/iplib.py (runsource): remove self.code_to_run_src
588 attribute. I realized this is nothing more than
592 attribute. I realized this is nothing more than
589 '\n'.join(self.buffer), and having the same data in two different
593 '\n'.join(self.buffer), and having the same data in two different
590 places is just asking for synchronization bugs. This may impact
594 places is just asking for synchronization bugs. This may impact
591 people who have custom exception handlers, so I need to warn
595 people who have custom exception handlers, so I need to warn
592 ipython-dev about it (F. Mantegazza may use them).
596 ipython-dev about it (F. Mantegazza may use them).
593
597
594 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
598 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
595
599
596 * IPython/genutils.py: fix 2.2 compatibility (generators)
600 * IPython/genutils.py: fix 2.2 compatibility (generators)
597
601
598 2005-07-18 Fernando Perez <fperez@colorado.edu>
602 2005-07-18 Fernando Perez <fperez@colorado.edu>
599
603
600 * IPython/genutils.py (get_home_dir): fix to help users with
604 * IPython/genutils.py (get_home_dir): fix to help users with
601 invalid $HOME under win32.
605 invalid $HOME under win32.
602
606
603 2005-07-17 Fernando Perez <fperez@colorado.edu>
607 2005-07-17 Fernando Perez <fperez@colorado.edu>
604
608
605 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
609 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
606 some old hacks and clean up a bit other routines; code should be
610 some old hacks and clean up a bit other routines; code should be
607 simpler and a bit faster.
611 simpler and a bit faster.
608
612
609 * IPython/iplib.py (interact): removed some last-resort attempts
613 * IPython/iplib.py (interact): removed some last-resort attempts
610 to survive broken stdout/stderr. That code was only making it
614 to survive broken stdout/stderr. That code was only making it
611 harder to abstract out the i/o (necessary for gui integration),
615 harder to abstract out the i/o (necessary for gui integration),
612 and the crashes it could prevent were extremely rare in practice
616 and the crashes it could prevent were extremely rare in practice
613 (besides being fully user-induced in a pretty violent manner).
617 (besides being fully user-induced in a pretty violent manner).
614
618
615 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
619 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
616 Nothing major yet, but the code is simpler to read; this should
620 Nothing major yet, but the code is simpler to read; this should
617 make it easier to do more serious modifications in the future.
621 make it easier to do more serious modifications in the future.
618
622
619 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
623 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
620 which broke in .15 (thanks to a report by Ville).
624 which broke in .15 (thanks to a report by Ville).
621
625
622 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
626 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
623 be quite correct, I know next to nothing about unicode). This
627 be quite correct, I know next to nothing about unicode). This
624 will allow unicode strings to be used in prompts, amongst other
628 will allow unicode strings to be used in prompts, amongst other
625 cases. It also will prevent ipython from crashing when unicode
629 cases. It also will prevent ipython from crashing when unicode
626 shows up unexpectedly in many places. If ascii encoding fails, we
630 shows up unexpectedly in many places. If ascii encoding fails, we
627 assume utf_8. Currently the encoding is not a user-visible
631 assume utf_8. Currently the encoding is not a user-visible
628 setting, though it could be made so if there is demand for it.
632 setting, though it could be made so if there is demand for it.
629
633
630 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
634 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
631
635
632 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
636 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
633
637
634 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
638 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
635
639
636 * IPython/genutils.py: Add 2.2 compatibility here, so all other
640 * IPython/genutils.py: Add 2.2 compatibility here, so all other
637 code can work transparently for 2.2/2.3.
641 code can work transparently for 2.2/2.3.
638
642
639 2005-07-16 Fernando Perez <fperez@colorado.edu>
643 2005-07-16 Fernando Perez <fperez@colorado.edu>
640
644
641 * IPython/ultraTB.py (ExceptionColors): Make a global variable
645 * IPython/ultraTB.py (ExceptionColors): Make a global variable
642 out of the color scheme table used for coloring exception
646 out of the color scheme table used for coloring exception
643 tracebacks. This allows user code to add new schemes at runtime.
647 tracebacks. This allows user code to add new schemes at runtime.
644 This is a minimally modified version of the patch at
648 This is a minimally modified version of the patch at
645 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
649 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
646 for the contribution.
650 for the contribution.
647
651
648 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
652 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
649 slightly modified version of the patch in
653 slightly modified version of the patch in
650 http://www.scipy.net/roundup/ipython/issue34, which also allows me
654 http://www.scipy.net/roundup/ipython/issue34, which also allows me
651 to remove the previous try/except solution (which was costlier).
655 to remove the previous try/except solution (which was costlier).
652 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
656 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
653
657
654 2005-06-08 Fernando Perez <fperez@colorado.edu>
658 2005-06-08 Fernando Perez <fperez@colorado.edu>
655
659
656 * IPython/iplib.py (write/write_err): Add methods to abstract all
660 * IPython/iplib.py (write/write_err): Add methods to abstract all
657 I/O a bit more.
661 I/O a bit more.
658
662
659 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
663 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
660 warning, reported by Aric Hagberg, fix by JD Hunter.
664 warning, reported by Aric Hagberg, fix by JD Hunter.
661
665
662 2005-06-02 *** Released version 0.6.15
666 2005-06-02 *** Released version 0.6.15
663
667
664 2005-06-01 Fernando Perez <fperez@colorado.edu>
668 2005-06-01 Fernando Perez <fperez@colorado.edu>
665
669
666 * IPython/iplib.py (MagicCompleter.file_matches): Fix
670 * IPython/iplib.py (MagicCompleter.file_matches): Fix
667 tab-completion of filenames within open-quoted strings. Note that
671 tab-completion of filenames within open-quoted strings. Note that
668 this requires that in ~/.ipython/ipythonrc, users change the
672 this requires that in ~/.ipython/ipythonrc, users change the
669 readline delimiters configuration to read:
673 readline delimiters configuration to read:
670
674
671 readline_remove_delims -/~
675 readline_remove_delims -/~
672
676
673
677
674 2005-05-31 *** Released version 0.6.14
678 2005-05-31 *** Released version 0.6.14
675
679
676 2005-05-29 Fernando Perez <fperez@colorado.edu>
680 2005-05-29 Fernando Perez <fperez@colorado.edu>
677
681
678 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
682 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
679 with files not on the filesystem. Reported by Eliyahu Sandler
683 with files not on the filesystem. Reported by Eliyahu Sandler
680 <eli@gondolin.net>
684 <eli@gondolin.net>
681
685
682 2005-05-22 Fernando Perez <fperez@colorado.edu>
686 2005-05-22 Fernando Perez <fperez@colorado.edu>
683
687
684 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
688 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
685 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
689 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
686
690
687 2005-05-19 Fernando Perez <fperez@colorado.edu>
691 2005-05-19 Fernando Perez <fperez@colorado.edu>
688
692
689 * IPython/iplib.py (safe_execfile): close a file which could be
693 * IPython/iplib.py (safe_execfile): close a file which could be
690 left open (causing problems in win32, which locks open files).
694 left open (causing problems in win32, which locks open files).
691 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
695 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
692
696
693 2005-05-18 Fernando Perez <fperez@colorado.edu>
697 2005-05-18 Fernando Perez <fperez@colorado.edu>
694
698
695 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
699 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
696 keyword arguments correctly to safe_execfile().
700 keyword arguments correctly to safe_execfile().
697
701
698 2005-05-13 Fernando Perez <fperez@colorado.edu>
702 2005-05-13 Fernando Perez <fperez@colorado.edu>
699
703
700 * ipython.1: Added info about Qt to manpage, and threads warning
704 * ipython.1: Added info about Qt to manpage, and threads warning
701 to usage page (invoked with --help).
705 to usage page (invoked with --help).
702
706
703 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
707 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
704 new matcher (it goes at the end of the priority list) to do
708 new matcher (it goes at the end of the priority list) to do
705 tab-completion on named function arguments. Submitted by George
709 tab-completion on named function arguments. Submitted by George
706 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
710 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
707 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
711 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
708 for more details.
712 for more details.
709
713
710 * IPython/Magic.py (magic_run): Added new -e flag to ignore
714 * IPython/Magic.py (magic_run): Added new -e flag to ignore
711 SystemExit exceptions in the script being run. Thanks to a report
715 SystemExit exceptions in the script being run. Thanks to a report
712 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
716 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
713 producing very annoying behavior when running unit tests.
717 producing very annoying behavior when running unit tests.
714
718
715 2005-05-12 Fernando Perez <fperez@colorado.edu>
719 2005-05-12 Fernando Perez <fperez@colorado.edu>
716
720
717 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
721 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
718 which I'd broken (again) due to a changed regexp. In the process,
722 which I'd broken (again) due to a changed regexp. In the process,
719 added ';' as an escape to auto-quote the whole line without
723 added ';' as an escape to auto-quote the whole line without
720 splitting its arguments. Thanks to a report by Jerry McRae
724 splitting its arguments. Thanks to a report by Jerry McRae
721 <qrs0xyc02-AT-sneakemail.com>.
725 <qrs0xyc02-AT-sneakemail.com>.
722
726
723 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
727 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
724 possible crashes caused by a TokenError. Reported by Ed Schofield
728 possible crashes caused by a TokenError. Reported by Ed Schofield
725 <schofield-AT-ftw.at>.
729 <schofield-AT-ftw.at>.
726
730
727 2005-05-06 Fernando Perez <fperez@colorado.edu>
731 2005-05-06 Fernando Perez <fperez@colorado.edu>
728
732
729 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
733 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
730
734
731 2005-04-29 Fernando Perez <fperez@colorado.edu>
735 2005-04-29 Fernando Perez <fperez@colorado.edu>
732
736
733 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
737 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
734 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
738 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
735 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
739 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
736 which provides support for Qt interactive usage (similar to the
740 which provides support for Qt interactive usage (similar to the
737 existing one for WX and GTK). This had been often requested.
741 existing one for WX and GTK). This had been often requested.
738
742
739 2005-04-14 *** Released version 0.6.13
743 2005-04-14 *** Released version 0.6.13
740
744
741 2005-04-08 Fernando Perez <fperez@colorado.edu>
745 2005-04-08 Fernando Perez <fperez@colorado.edu>
742
746
743 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
747 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
744 from _ofind, which gets called on almost every input line. Now,
748 from _ofind, which gets called on almost every input line. Now,
745 we only try to get docstrings if they are actually going to be
749 we only try to get docstrings if they are actually going to be
746 used (the overhead of fetching unnecessary docstrings can be
750 used (the overhead of fetching unnecessary docstrings can be
747 noticeable for certain objects, such as Pyro proxies).
751 noticeable for certain objects, such as Pyro proxies).
748
752
749 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
753 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
750 for completers. For some reason I had been passing them the state
754 for completers. For some reason I had been passing them the state
751 variable, which completers never actually need, and was in
755 variable, which completers never actually need, and was in
752 conflict with the rlcompleter API. Custom completers ONLY need to
756 conflict with the rlcompleter API. Custom completers ONLY need to
753 take the text parameter.
757 take the text parameter.
754
758
755 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
759 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
756 work correctly in pysh. I've also moved all the logic which used
760 work correctly in pysh. I've also moved all the logic which used
757 to be in pysh.py here, which will prevent problems with future
761 to be in pysh.py here, which will prevent problems with future
758 upgrades. However, this time I must warn users to update their
762 upgrades. However, this time I must warn users to update their
759 pysh profile to include the line
763 pysh profile to include the line
760
764
761 import_all IPython.Extensions.InterpreterExec
765 import_all IPython.Extensions.InterpreterExec
762
766
763 because otherwise things won't work for them. They MUST also
767 because otherwise things won't work for them. They MUST also
764 delete pysh.py and the line
768 delete pysh.py and the line
765
769
766 execfile pysh.py
770 execfile pysh.py
767
771
768 from their ipythonrc-pysh.
772 from their ipythonrc-pysh.
769
773
770 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
774 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
771 robust in the face of objects whose dir() returns non-strings
775 robust in the face of objects whose dir() returns non-strings
772 (which it shouldn't, but some broken libs like ITK do). Thanks to
776 (which it shouldn't, but some broken libs like ITK do). Thanks to
773 a patch by John Hunter (implemented differently, though). Also
777 a patch by John Hunter (implemented differently, though). Also
774 minor improvements by using .extend instead of + on lists.
778 minor improvements by using .extend instead of + on lists.
775
779
776 * pysh.py:
780 * pysh.py:
777
781
778 2005-04-06 Fernando Perez <fperez@colorado.edu>
782 2005-04-06 Fernando Perez <fperez@colorado.edu>
779
783
780 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
784 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
781 by default, so that all users benefit from it. Those who don't
785 by default, so that all users benefit from it. Those who don't
782 want it can still turn it off.
786 want it can still turn it off.
783
787
784 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
788 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
785 config file, I'd forgotten about this, so users were getting it
789 config file, I'd forgotten about this, so users were getting it
786 off by default.
790 off by default.
787
791
788 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
792 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
789 consistency. Now magics can be called in multiline statements,
793 consistency. Now magics can be called in multiline statements,
790 and python variables can be expanded in magic calls via $var.
794 and python variables can be expanded in magic calls via $var.
791 This makes the magic system behave just like aliases or !system
795 This makes the magic system behave just like aliases or !system
792 calls.
796 calls.
793
797
794 2005-03-28 Fernando Perez <fperez@colorado.edu>
798 2005-03-28 Fernando Perez <fperez@colorado.edu>
795
799
796 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
800 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
797 expensive string additions for building command. Add support for
801 expensive string additions for building command. Add support for
798 trailing ';' when autocall is used.
802 trailing ';' when autocall is used.
799
803
800 2005-03-26 Fernando Perez <fperez@colorado.edu>
804 2005-03-26 Fernando Perez <fperez@colorado.edu>
801
805
802 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
806 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
803 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
807 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
804 ipython.el robust against prompts with any number of spaces
808 ipython.el robust against prompts with any number of spaces
805 (including 0) after the ':' character.
809 (including 0) after the ':' character.
806
810
807 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
811 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
808 continuation prompt, which misled users to think the line was
812 continuation prompt, which misled users to think the line was
809 already indented. Closes debian Bug#300847, reported to me by
813 already indented. Closes debian Bug#300847, reported to me by
810 Norbert Tretkowski <tretkowski-AT-inittab.de>.
814 Norbert Tretkowski <tretkowski-AT-inittab.de>.
811
815
812 2005-03-23 Fernando Perez <fperez@colorado.edu>
816 2005-03-23 Fernando Perez <fperez@colorado.edu>
813
817
814 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
818 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
815 properly aligned if they have embedded newlines.
819 properly aligned if they have embedded newlines.
816
820
817 * IPython/iplib.py (runlines): Add a public method to expose
821 * IPython/iplib.py (runlines): Add a public method to expose
818 IPython's code execution machinery, so that users can run strings
822 IPython's code execution machinery, so that users can run strings
819 as if they had been typed at the prompt interactively.
823 as if they had been typed at the prompt interactively.
820 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
824 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
821 methods which can call the system shell, but with python variable
825 methods which can call the system shell, but with python variable
822 expansion. The three such methods are: __IPYTHON__.system,
826 expansion. The three such methods are: __IPYTHON__.system,
823 .getoutput and .getoutputerror. These need to be documented in a
827 .getoutput and .getoutputerror. These need to be documented in a
824 'public API' section (to be written) of the manual.
828 'public API' section (to be written) of the manual.
825
829
826 2005-03-20 Fernando Perez <fperez@colorado.edu>
830 2005-03-20 Fernando Perez <fperez@colorado.edu>
827
831
828 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
832 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
829 for custom exception handling. This is quite powerful, and it
833 for custom exception handling. This is quite powerful, and it
830 allows for user-installable exception handlers which can trap
834 allows for user-installable exception handlers which can trap
831 custom exceptions at runtime and treat them separately from
835 custom exceptions at runtime and treat them separately from
832 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
836 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
833 Mantegazza <mantegazza-AT-ill.fr>.
837 Mantegazza <mantegazza-AT-ill.fr>.
834 (InteractiveShell.set_custom_completer): public API function to
838 (InteractiveShell.set_custom_completer): public API function to
835 add new completers at runtime.
839 add new completers at runtime.
836
840
837 2005-03-19 Fernando Perez <fperez@colorado.edu>
841 2005-03-19 Fernando Perez <fperez@colorado.edu>
838
842
839 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
843 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
840 allow objects which provide their docstrings via non-standard
844 allow objects which provide their docstrings via non-standard
841 mechanisms (like Pyro proxies) to still be inspected by ipython's
845 mechanisms (like Pyro proxies) to still be inspected by ipython's
842 ? system.
846 ? system.
843
847
844 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
848 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
845 automatic capture system. I tried quite hard to make it work
849 automatic capture system. I tried quite hard to make it work
846 reliably, and simply failed. I tried many combinations with the
850 reliably, and simply failed. I tried many combinations with the
847 subprocess module, but eventually nothing worked in all needed
851 subprocess module, but eventually nothing worked in all needed
848 cases (not blocking stdin for the child, duplicating stdout
852 cases (not blocking stdin for the child, duplicating stdout
849 without blocking, etc). The new %sc/%sx still do capture to these
853 without blocking, etc). The new %sc/%sx still do capture to these
850 magical list/string objects which make shell use much more
854 magical list/string objects which make shell use much more
851 conveninent, so not all is lost.
855 conveninent, so not all is lost.
852
856
853 XXX - FIX MANUAL for the change above!
857 XXX - FIX MANUAL for the change above!
854
858
855 (runsource): I copied code.py's runsource() into ipython to modify
859 (runsource): I copied code.py's runsource() into ipython to modify
856 it a bit. Now the code object and source to be executed are
860 it a bit. Now the code object and source to be executed are
857 stored in ipython. This makes this info accessible to third-party
861 stored in ipython. This makes this info accessible to third-party
858 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
862 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
859 Mantegazza <mantegazza-AT-ill.fr>.
863 Mantegazza <mantegazza-AT-ill.fr>.
860
864
861 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
865 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
862 history-search via readline (like C-p/C-n). I'd wanted this for a
866 history-search via readline (like C-p/C-n). I'd wanted this for a
863 long time, but only recently found out how to do it. For users
867 long time, but only recently found out how to do it. For users
864 who already have their ipythonrc files made and want this, just
868 who already have their ipythonrc files made and want this, just
865 add:
869 add:
866
870
867 readline_parse_and_bind "\e[A": history-search-backward
871 readline_parse_and_bind "\e[A": history-search-backward
868 readline_parse_and_bind "\e[B": history-search-forward
872 readline_parse_and_bind "\e[B": history-search-forward
869
873
870 2005-03-18 Fernando Perez <fperez@colorado.edu>
874 2005-03-18 Fernando Perez <fperez@colorado.edu>
871
875
872 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
876 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
873 LSString and SList classes which allow transparent conversions
877 LSString and SList classes which allow transparent conversions
874 between list mode and whitespace-separated string.
878 between list mode and whitespace-separated string.
875 (magic_r): Fix recursion problem in %r.
879 (magic_r): Fix recursion problem in %r.
876
880
877 * IPython/genutils.py (LSString): New class to be used for
881 * IPython/genutils.py (LSString): New class to be used for
878 automatic storage of the results of all alias/system calls in _o
882 automatic storage of the results of all alias/system calls in _o
879 and _e (stdout/err). These provide a .l/.list attribute which
883 and _e (stdout/err). These provide a .l/.list attribute which
880 does automatic splitting on newlines. This means that for most
884 does automatic splitting on newlines. This means that for most
881 uses, you'll never need to do capturing of output with %sc/%sx
885 uses, you'll never need to do capturing of output with %sc/%sx
882 anymore, since ipython keeps this always done for you. Note that
886 anymore, since ipython keeps this always done for you. Note that
883 only the LAST results are stored, the _o/e variables are
887 only the LAST results are stored, the _o/e variables are
884 overwritten on each call. If you need to save their contents
888 overwritten on each call. If you need to save their contents
885 further, simply bind them to any other name.
889 further, simply bind them to any other name.
886
890
887 2005-03-17 Fernando Perez <fperez@colorado.edu>
891 2005-03-17 Fernando Perez <fperez@colorado.edu>
888
892
889 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
893 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
890 prompt namespace handling.
894 prompt namespace handling.
891
895
892 2005-03-16 Fernando Perez <fperez@colorado.edu>
896 2005-03-16 Fernando Perez <fperez@colorado.edu>
893
897
894 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
898 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
895 classic prompts to be '>>> ' (final space was missing, and it
899 classic prompts to be '>>> ' (final space was missing, and it
896 trips the emacs python mode).
900 trips the emacs python mode).
897 (BasePrompt.__str__): Added safe support for dynamic prompt
901 (BasePrompt.__str__): Added safe support for dynamic prompt
898 strings. Now you can set your prompt string to be '$x', and the
902 strings. Now you can set your prompt string to be '$x', and the
899 value of x will be printed from your interactive namespace. The
903 value of x will be printed from your interactive namespace. The
900 interpolation syntax includes the full Itpl support, so
904 interpolation syntax includes the full Itpl support, so
901 ${foo()+x+bar()} is a valid prompt string now, and the function
905 ${foo()+x+bar()} is a valid prompt string now, and the function
902 calls will be made at runtime.
906 calls will be made at runtime.
903
907
904 2005-03-15 Fernando Perez <fperez@colorado.edu>
908 2005-03-15 Fernando Perez <fperez@colorado.edu>
905
909
906 * IPython/Magic.py (magic_history): renamed %hist to %history, to
910 * IPython/Magic.py (magic_history): renamed %hist to %history, to
907 avoid name clashes in pylab. %hist still works, it just forwards
911 avoid name clashes in pylab. %hist still works, it just forwards
908 the call to %history.
912 the call to %history.
909
913
910 2005-03-02 *** Released version 0.6.12
914 2005-03-02 *** Released version 0.6.12
911
915
912 2005-03-02 Fernando Perez <fperez@colorado.edu>
916 2005-03-02 Fernando Perez <fperez@colorado.edu>
913
917
914 * IPython/iplib.py (handle_magic): log magic calls properly as
918 * IPython/iplib.py (handle_magic): log magic calls properly as
915 ipmagic() function calls.
919 ipmagic() function calls.
916
920
917 * IPython/Magic.py (magic_time): Improved %time to support
921 * IPython/Magic.py (magic_time): Improved %time to support
918 statements and provide wall-clock as well as CPU time.
922 statements and provide wall-clock as well as CPU time.
919
923
920 2005-02-27 Fernando Perez <fperez@colorado.edu>
924 2005-02-27 Fernando Perez <fperez@colorado.edu>
921
925
922 * IPython/hooks.py: New hooks module, to expose user-modifiable
926 * IPython/hooks.py: New hooks module, to expose user-modifiable
923 IPython functionality in a clean manner. For now only the editor
927 IPython functionality in a clean manner. For now only the editor
924 hook is actually written, and other thigns which I intend to turn
928 hook is actually written, and other thigns which I intend to turn
925 into proper hooks aren't yet there. The display and prefilter
929 into proper hooks aren't yet there. The display and prefilter
926 stuff, for example, should be hooks. But at least now the
930 stuff, for example, should be hooks. But at least now the
927 framework is in place, and the rest can be moved here with more
931 framework is in place, and the rest can be moved here with more
928 time later. IPython had had a .hooks variable for a long time for
932 time later. IPython had had a .hooks variable for a long time for
929 this purpose, but I'd never actually used it for anything.
933 this purpose, but I'd never actually used it for anything.
930
934
931 2005-02-26 Fernando Perez <fperez@colorado.edu>
935 2005-02-26 Fernando Perez <fperez@colorado.edu>
932
936
933 * IPython/ipmaker.py (make_IPython): make the default ipython
937 * IPython/ipmaker.py (make_IPython): make the default ipython
934 directory be called _ipython under win32, to follow more the
938 directory be called _ipython under win32, to follow more the
935 naming peculiarities of that platform (where buggy software like
939 naming peculiarities of that platform (where buggy software like
936 Visual Sourcesafe breaks with .named directories). Reported by
940 Visual Sourcesafe breaks with .named directories). Reported by
937 Ville Vainio.
941 Ville Vainio.
938
942
939 2005-02-23 Fernando Perez <fperez@colorado.edu>
943 2005-02-23 Fernando Perez <fperez@colorado.edu>
940
944
941 * IPython/iplib.py (InteractiveShell.__init__): removed a few
945 * IPython/iplib.py (InteractiveShell.__init__): removed a few
942 auto_aliases for win32 which were causing problems. Users can
946 auto_aliases for win32 which were causing problems. Users can
943 define the ones they personally like.
947 define the ones they personally like.
944
948
945 2005-02-21 Fernando Perez <fperez@colorado.edu>
949 2005-02-21 Fernando Perez <fperez@colorado.edu>
946
950
947 * IPython/Magic.py (magic_time): new magic to time execution of
951 * IPython/Magic.py (magic_time): new magic to time execution of
948 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
952 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
949
953
950 2005-02-19 Fernando Perez <fperez@colorado.edu>
954 2005-02-19 Fernando Perez <fperez@colorado.edu>
951
955
952 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
956 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
953 into keys (for prompts, for example).
957 into keys (for prompts, for example).
954
958
955 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
959 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
956 prompts in case users want them. This introduces a small behavior
960 prompts in case users want them. This introduces a small behavior
957 change: ipython does not automatically add a space to all prompts
961 change: ipython does not automatically add a space to all prompts
958 anymore. To get the old prompts with a space, users should add it
962 anymore. To get the old prompts with a space, users should add it
959 manually to their ipythonrc file, so for example prompt_in1 should
963 manually to their ipythonrc file, so for example prompt_in1 should
960 now read 'In [\#]: ' instead of 'In [\#]:'.
964 now read 'In [\#]: ' instead of 'In [\#]:'.
961 (BasePrompt.__init__): New option prompts_pad_left (only in rc
965 (BasePrompt.__init__): New option prompts_pad_left (only in rc
962 file) to control left-padding of secondary prompts.
966 file) to control left-padding of secondary prompts.
963
967
964 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
968 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
965 the profiler can't be imported. Fix for Debian, which removed
969 the profiler can't be imported. Fix for Debian, which removed
966 profile.py because of License issues. I applied a slightly
970 profile.py because of License issues. I applied a slightly
967 modified version of the original Debian patch at
971 modified version of the original Debian patch at
968 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
972 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
969
973
970 2005-02-17 Fernando Perez <fperez@colorado.edu>
974 2005-02-17 Fernando Perez <fperez@colorado.edu>
971
975
972 * IPython/genutils.py (native_line_ends): Fix bug which would
976 * IPython/genutils.py (native_line_ends): Fix bug which would
973 cause improper line-ends under win32 b/c I was not opening files
977 cause improper line-ends under win32 b/c I was not opening files
974 in binary mode. Bug report and fix thanks to Ville.
978 in binary mode. Bug report and fix thanks to Ville.
975
979
976 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
980 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
977 trying to catch spurious foo[1] autocalls. My fix actually broke
981 trying to catch spurious foo[1] autocalls. My fix actually broke
978 ',/' autoquote/call with explicit escape (bad regexp).
982 ',/' autoquote/call with explicit escape (bad regexp).
979
983
980 2005-02-15 *** Released version 0.6.11
984 2005-02-15 *** Released version 0.6.11
981
985
982 2005-02-14 Fernando Perez <fperez@colorado.edu>
986 2005-02-14 Fernando Perez <fperez@colorado.edu>
983
987
984 * IPython/background_jobs.py: New background job management
988 * IPython/background_jobs.py: New background job management
985 subsystem. This is implemented via a new set of classes, and
989 subsystem. This is implemented via a new set of classes, and
986 IPython now provides a builtin 'jobs' object for background job
990 IPython now provides a builtin 'jobs' object for background job
987 execution. A convenience %bg magic serves as a lightweight
991 execution. A convenience %bg magic serves as a lightweight
988 frontend for starting the more common type of calls. This was
992 frontend for starting the more common type of calls. This was
989 inspired by discussions with B. Granger and the BackgroundCommand
993 inspired by discussions with B. Granger and the BackgroundCommand
990 class described in the book Python Scripting for Computational
994 class described in the book Python Scripting for Computational
991 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
995 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
992 (although ultimately no code from this text was used, as IPython's
996 (although ultimately no code from this text was used, as IPython's
993 system is a separate implementation).
997 system is a separate implementation).
994
998
995 * IPython/iplib.py (MagicCompleter.python_matches): add new option
999 * IPython/iplib.py (MagicCompleter.python_matches): add new option
996 to control the completion of single/double underscore names
1000 to control the completion of single/double underscore names
997 separately. As documented in the example ipytonrc file, the
1001 separately. As documented in the example ipytonrc file, the
998 readline_omit__names variable can now be set to 2, to omit even
1002 readline_omit__names variable can now be set to 2, to omit even
999 single underscore names. Thanks to a patch by Brian Wong
1003 single underscore names. Thanks to a patch by Brian Wong
1000 <BrianWong-AT-AirgoNetworks.Com>.
1004 <BrianWong-AT-AirgoNetworks.Com>.
1001 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1005 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1002 be autocalled as foo([1]) if foo were callable. A problem for
1006 be autocalled as foo([1]) if foo were callable. A problem for
1003 things which are both callable and implement __getitem__.
1007 things which are both callable and implement __getitem__.
1004 (init_readline): Fix autoindentation for win32. Thanks to a patch
1008 (init_readline): Fix autoindentation for win32. Thanks to a patch
1005 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1009 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1006
1010
1007 2005-02-12 Fernando Perez <fperez@colorado.edu>
1011 2005-02-12 Fernando Perez <fperez@colorado.edu>
1008
1012
1009 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1013 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1010 which I had written long ago to sort out user error messages which
1014 which I had written long ago to sort out user error messages which
1011 may occur during startup. This seemed like a good idea initially,
1015 may occur during startup. This seemed like a good idea initially,
1012 but it has proven a disaster in retrospect. I don't want to
1016 but it has proven a disaster in retrospect. I don't want to
1013 change much code for now, so my fix is to set the internal 'debug'
1017 change much code for now, so my fix is to set the internal 'debug'
1014 flag to true everywhere, whose only job was precisely to control
1018 flag to true everywhere, whose only job was precisely to control
1015 this subsystem. This closes issue 28 (as well as avoiding all
1019 this subsystem. This closes issue 28 (as well as avoiding all
1016 sorts of strange hangups which occur from time to time).
1020 sorts of strange hangups which occur from time to time).
1017
1021
1018 2005-02-07 Fernando Perez <fperez@colorado.edu>
1022 2005-02-07 Fernando Perez <fperez@colorado.edu>
1019
1023
1020 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1024 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1021 previous call produced a syntax error.
1025 previous call produced a syntax error.
1022
1026
1023 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1027 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1024 classes without constructor.
1028 classes without constructor.
1025
1029
1026 2005-02-06 Fernando Perez <fperez@colorado.edu>
1030 2005-02-06 Fernando Perez <fperez@colorado.edu>
1027
1031
1028 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1032 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1029 completions with the results of each matcher, so we return results
1033 completions with the results of each matcher, so we return results
1030 to the user from all namespaces. This breaks with ipython
1034 to the user from all namespaces. This breaks with ipython
1031 tradition, but I think it's a nicer behavior. Now you get all
1035 tradition, but I think it's a nicer behavior. Now you get all
1032 possible completions listed, from all possible namespaces (python,
1036 possible completions listed, from all possible namespaces (python,
1033 filesystem, magics...) After a request by John Hunter
1037 filesystem, magics...) After a request by John Hunter
1034 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1038 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1035
1039
1036 2005-02-05 Fernando Perez <fperez@colorado.edu>
1040 2005-02-05 Fernando Perez <fperez@colorado.edu>
1037
1041
1038 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1042 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1039 the call had quote characters in it (the quotes were stripped).
1043 the call had quote characters in it (the quotes were stripped).
1040
1044
1041 2005-01-31 Fernando Perez <fperez@colorado.edu>
1045 2005-01-31 Fernando Perez <fperez@colorado.edu>
1042
1046
1043 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1047 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1044 Itpl.itpl() to make the code more robust against psyco
1048 Itpl.itpl() to make the code more robust against psyco
1045 optimizations.
1049 optimizations.
1046
1050
1047 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1051 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1048 of causing an exception. Quicker, cleaner.
1052 of causing an exception. Quicker, cleaner.
1049
1053
1050 2005-01-28 Fernando Perez <fperez@colorado.edu>
1054 2005-01-28 Fernando Perez <fperez@colorado.edu>
1051
1055
1052 * scripts/ipython_win_post_install.py (install): hardcode
1056 * scripts/ipython_win_post_install.py (install): hardcode
1053 sys.prefix+'python.exe' as the executable path. It turns out that
1057 sys.prefix+'python.exe' as the executable path. It turns out that
1054 during the post-installation run, sys.executable resolves to the
1058 during the post-installation run, sys.executable resolves to the
1055 name of the binary installer! I should report this as a distutils
1059 name of the binary installer! I should report this as a distutils
1056 bug, I think. I updated the .10 release with this tiny fix, to
1060 bug, I think. I updated the .10 release with this tiny fix, to
1057 avoid annoying the lists further.
1061 avoid annoying the lists further.
1058
1062
1059 2005-01-27 *** Released version 0.6.10
1063 2005-01-27 *** Released version 0.6.10
1060
1064
1061 2005-01-27 Fernando Perez <fperez@colorado.edu>
1065 2005-01-27 Fernando Perez <fperez@colorado.edu>
1062
1066
1063 * IPython/numutils.py (norm): Added 'inf' as optional name for
1067 * IPython/numutils.py (norm): Added 'inf' as optional name for
1064 L-infinity norm, included references to mathworld.com for vector
1068 L-infinity norm, included references to mathworld.com for vector
1065 norm definitions.
1069 norm definitions.
1066 (amin/amax): added amin/amax for array min/max. Similar to what
1070 (amin/amax): added amin/amax for array min/max. Similar to what
1067 pylab ships with after the recent reorganization of names.
1071 pylab ships with after the recent reorganization of names.
1068 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1072 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1069
1073
1070 * ipython.el: committed Alex's recent fixes and improvements.
1074 * ipython.el: committed Alex's recent fixes and improvements.
1071 Tested with python-mode from CVS, and it looks excellent. Since
1075 Tested with python-mode from CVS, and it looks excellent. Since
1072 python-mode hasn't released anything in a while, I'm temporarily
1076 python-mode hasn't released anything in a while, I'm temporarily
1073 putting a copy of today's CVS (v 4.70) of python-mode in:
1077 putting a copy of today's CVS (v 4.70) of python-mode in:
1074 http://ipython.scipy.org/tmp/python-mode.el
1078 http://ipython.scipy.org/tmp/python-mode.el
1075
1079
1076 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1080 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1077 sys.executable for the executable name, instead of assuming it's
1081 sys.executable for the executable name, instead of assuming it's
1078 called 'python.exe' (the post-installer would have produced broken
1082 called 'python.exe' (the post-installer would have produced broken
1079 setups on systems with a differently named python binary).
1083 setups on systems with a differently named python binary).
1080
1084
1081 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1085 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1082 references to os.linesep, to make the code more
1086 references to os.linesep, to make the code more
1083 platform-independent. This is also part of the win32 coloring
1087 platform-independent. This is also part of the win32 coloring
1084 fixes.
1088 fixes.
1085
1089
1086 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1090 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1087 lines, which actually cause coloring bugs because the length of
1091 lines, which actually cause coloring bugs because the length of
1088 the line is very difficult to correctly compute with embedded
1092 the line is very difficult to correctly compute with embedded
1089 escapes. This was the source of all the coloring problems under
1093 escapes. This was the source of all the coloring problems under
1090 Win32. I think that _finally_, Win32 users have a properly
1094 Win32. I think that _finally_, Win32 users have a properly
1091 working ipython in all respects. This would never have happened
1095 working ipython in all respects. This would never have happened
1092 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1096 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1093
1097
1094 2005-01-26 *** Released version 0.6.9
1098 2005-01-26 *** Released version 0.6.9
1095
1099
1096 2005-01-25 Fernando Perez <fperez@colorado.edu>
1100 2005-01-25 Fernando Perez <fperez@colorado.edu>
1097
1101
1098 * setup.py: finally, we have a true Windows installer, thanks to
1102 * setup.py: finally, we have a true Windows installer, thanks to
1099 the excellent work of Viktor Ransmayr
1103 the excellent work of Viktor Ransmayr
1100 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1104 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1101 Windows users. The setup routine is quite a bit cleaner thanks to
1105 Windows users. The setup routine is quite a bit cleaner thanks to
1102 this, and the post-install script uses the proper functions to
1106 this, and the post-install script uses the proper functions to
1103 allow a clean de-installation using the standard Windows Control
1107 allow a clean de-installation using the standard Windows Control
1104 Panel.
1108 Panel.
1105
1109
1106 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1110 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1107 environment variable under all OSes (including win32) if
1111 environment variable under all OSes (including win32) if
1108 available. This will give consistency to win32 users who have set
1112 available. This will give consistency to win32 users who have set
1109 this variable for any reason. If os.environ['HOME'] fails, the
1113 this variable for any reason. If os.environ['HOME'] fails, the
1110 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1114 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1111
1115
1112 2005-01-24 Fernando Perez <fperez@colorado.edu>
1116 2005-01-24 Fernando Perez <fperez@colorado.edu>
1113
1117
1114 * IPython/numutils.py (empty_like): add empty_like(), similar to
1118 * IPython/numutils.py (empty_like): add empty_like(), similar to
1115 zeros_like() but taking advantage of the new empty() Numeric routine.
1119 zeros_like() but taking advantage of the new empty() Numeric routine.
1116
1120
1117 2005-01-23 *** Released version 0.6.8
1121 2005-01-23 *** Released version 0.6.8
1118
1122
1119 2005-01-22 Fernando Perez <fperez@colorado.edu>
1123 2005-01-22 Fernando Perez <fperez@colorado.edu>
1120
1124
1121 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1125 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1122 automatic show() calls. After discussing things with JDH, it
1126 automatic show() calls. After discussing things with JDH, it
1123 turns out there are too many corner cases where this can go wrong.
1127 turns out there are too many corner cases where this can go wrong.
1124 It's best not to try to be 'too smart', and simply have ipython
1128 It's best not to try to be 'too smart', and simply have ipython
1125 reproduce as much as possible the default behavior of a normal
1129 reproduce as much as possible the default behavior of a normal
1126 python shell.
1130 python shell.
1127
1131
1128 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1132 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1129 line-splitting regexp and _prefilter() to avoid calling getattr()
1133 line-splitting regexp and _prefilter() to avoid calling getattr()
1130 on assignments. This closes
1134 on assignments. This closes
1131 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1135 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1132 readline uses getattr(), so a simple <TAB> keypress is still
1136 readline uses getattr(), so a simple <TAB> keypress is still
1133 enough to trigger getattr() calls on an object.
1137 enough to trigger getattr() calls on an object.
1134
1138
1135 2005-01-21 Fernando Perez <fperez@colorado.edu>
1139 2005-01-21 Fernando Perez <fperez@colorado.edu>
1136
1140
1137 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1141 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1138 docstring under pylab so it doesn't mask the original.
1142 docstring under pylab so it doesn't mask the original.
1139
1143
1140 2005-01-21 *** Released version 0.6.7
1144 2005-01-21 *** Released version 0.6.7
1141
1145
1142 2005-01-21 Fernando Perez <fperez@colorado.edu>
1146 2005-01-21 Fernando Perez <fperez@colorado.edu>
1143
1147
1144 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1148 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1145 signal handling for win32 users in multithreaded mode.
1149 signal handling for win32 users in multithreaded mode.
1146
1150
1147 2005-01-17 Fernando Perez <fperez@colorado.edu>
1151 2005-01-17 Fernando Perez <fperez@colorado.edu>
1148
1152
1149 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1153 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1150 instances with no __init__. After a crash report by Norbert Nemec
1154 instances with no __init__. After a crash report by Norbert Nemec
1151 <Norbert-AT-nemec-online.de>.
1155 <Norbert-AT-nemec-online.de>.
1152
1156
1153 2005-01-14 Fernando Perez <fperez@colorado.edu>
1157 2005-01-14 Fernando Perez <fperez@colorado.edu>
1154
1158
1155 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1159 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1156 names for verbose exceptions, when multiple dotted names and the
1160 names for verbose exceptions, when multiple dotted names and the
1157 'parent' object were present on the same line.
1161 'parent' object were present on the same line.
1158
1162
1159 2005-01-11 Fernando Perez <fperez@colorado.edu>
1163 2005-01-11 Fernando Perez <fperez@colorado.edu>
1160
1164
1161 * IPython/genutils.py (flag_calls): new utility to trap and flag
1165 * IPython/genutils.py (flag_calls): new utility to trap and flag
1162 calls in functions. I need it to clean up matplotlib support.
1166 calls in functions. I need it to clean up matplotlib support.
1163 Also removed some deprecated code in genutils.
1167 Also removed some deprecated code in genutils.
1164
1168
1165 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1169 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1166 that matplotlib scripts called with %run, which don't call show()
1170 that matplotlib scripts called with %run, which don't call show()
1167 themselves, still have their plotting windows open.
1171 themselves, still have their plotting windows open.
1168
1172
1169 2005-01-05 Fernando Perez <fperez@colorado.edu>
1173 2005-01-05 Fernando Perez <fperez@colorado.edu>
1170
1174
1171 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1175 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1172 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1176 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1173
1177
1174 2004-12-19 Fernando Perez <fperez@colorado.edu>
1178 2004-12-19 Fernando Perez <fperez@colorado.edu>
1175
1179
1176 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1180 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1177 parent_runcode, which was an eyesore. The same result can be
1181 parent_runcode, which was an eyesore. The same result can be
1178 obtained with Python's regular superclass mechanisms.
1182 obtained with Python's regular superclass mechanisms.
1179
1183
1180 2004-12-17 Fernando Perez <fperez@colorado.edu>
1184 2004-12-17 Fernando Perez <fperez@colorado.edu>
1181
1185
1182 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1186 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1183 reported by Prabhu.
1187 reported by Prabhu.
1184 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1188 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1185 sys.stderr) instead of explicitly calling sys.stderr. This helps
1189 sys.stderr) instead of explicitly calling sys.stderr. This helps
1186 maintain our I/O abstractions clean, for future GUI embeddings.
1190 maintain our I/O abstractions clean, for future GUI embeddings.
1187
1191
1188 * IPython/genutils.py (info): added new utility for sys.stderr
1192 * IPython/genutils.py (info): added new utility for sys.stderr
1189 unified info message handling (thin wrapper around warn()).
1193 unified info message handling (thin wrapper around warn()).
1190
1194
1191 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1195 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1192 composite (dotted) names on verbose exceptions.
1196 composite (dotted) names on verbose exceptions.
1193 (VerboseTB.nullrepr): harden against another kind of errors which
1197 (VerboseTB.nullrepr): harden against another kind of errors which
1194 Python's inspect module can trigger, and which were crashing
1198 Python's inspect module can trigger, and which were crashing
1195 IPython. Thanks to a report by Marco Lombardi
1199 IPython. Thanks to a report by Marco Lombardi
1196 <mlombard-AT-ma010192.hq.eso.org>.
1200 <mlombard-AT-ma010192.hq.eso.org>.
1197
1201
1198 2004-12-13 *** Released version 0.6.6
1202 2004-12-13 *** Released version 0.6.6
1199
1203
1200 2004-12-12 Fernando Perez <fperez@colorado.edu>
1204 2004-12-12 Fernando Perez <fperez@colorado.edu>
1201
1205
1202 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1206 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1203 generated by pygtk upon initialization if it was built without
1207 generated by pygtk upon initialization if it was built without
1204 threads (for matplotlib users). After a crash reported by
1208 threads (for matplotlib users). After a crash reported by
1205 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1209 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1206
1210
1207 * IPython/ipmaker.py (make_IPython): fix small bug in the
1211 * IPython/ipmaker.py (make_IPython): fix small bug in the
1208 import_some parameter for multiple imports.
1212 import_some parameter for multiple imports.
1209
1213
1210 * IPython/iplib.py (ipmagic): simplified the interface of
1214 * IPython/iplib.py (ipmagic): simplified the interface of
1211 ipmagic() to take a single string argument, just as it would be
1215 ipmagic() to take a single string argument, just as it would be
1212 typed at the IPython cmd line.
1216 typed at the IPython cmd line.
1213 (ipalias): Added new ipalias() with an interface identical to
1217 (ipalias): Added new ipalias() with an interface identical to
1214 ipmagic(). This completes exposing a pure python interface to the
1218 ipmagic(). This completes exposing a pure python interface to the
1215 alias and magic system, which can be used in loops or more complex
1219 alias and magic system, which can be used in loops or more complex
1216 code where IPython's automatic line mangling is not active.
1220 code where IPython's automatic line mangling is not active.
1217
1221
1218 * IPython/genutils.py (timing): changed interface of timing to
1222 * IPython/genutils.py (timing): changed interface of timing to
1219 simply run code once, which is the most common case. timings()
1223 simply run code once, which is the most common case. timings()
1220 remains unchanged, for the cases where you want multiple runs.
1224 remains unchanged, for the cases where you want multiple runs.
1221
1225
1222 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1226 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1223 bug where Python2.2 crashes with exec'ing code which does not end
1227 bug where Python2.2 crashes with exec'ing code which does not end
1224 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1228 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1225 before.
1229 before.
1226
1230
1227 2004-12-10 Fernando Perez <fperez@colorado.edu>
1231 2004-12-10 Fernando Perez <fperez@colorado.edu>
1228
1232
1229 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1233 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1230 -t to -T, to accomodate the new -t flag in %run (the %run and
1234 -t to -T, to accomodate the new -t flag in %run (the %run and
1231 %prun options are kind of intermixed, and it's not easy to change
1235 %prun options are kind of intermixed, and it's not easy to change
1232 this with the limitations of python's getopt).
1236 this with the limitations of python's getopt).
1233
1237
1234 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1238 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1235 the execution of scripts. It's not as fine-tuned as timeit.py,
1239 the execution of scripts. It's not as fine-tuned as timeit.py,
1236 but it works from inside ipython (and under 2.2, which lacks
1240 but it works from inside ipython (and under 2.2, which lacks
1237 timeit.py). Optionally a number of runs > 1 can be given for
1241 timeit.py). Optionally a number of runs > 1 can be given for
1238 timing very short-running code.
1242 timing very short-running code.
1239
1243
1240 * IPython/genutils.py (uniq_stable): new routine which returns a
1244 * IPython/genutils.py (uniq_stable): new routine which returns a
1241 list of unique elements in any iterable, but in stable order of
1245 list of unique elements in any iterable, but in stable order of
1242 appearance. I needed this for the ultraTB fixes, and it's a handy
1246 appearance. I needed this for the ultraTB fixes, and it's a handy
1243 utility.
1247 utility.
1244
1248
1245 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1249 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1246 dotted names in Verbose exceptions. This had been broken since
1250 dotted names in Verbose exceptions. This had been broken since
1247 the very start, now x.y will properly be printed in a Verbose
1251 the very start, now x.y will properly be printed in a Verbose
1248 traceback, instead of x being shown and y appearing always as an
1252 traceback, instead of x being shown and y appearing always as an
1249 'undefined global'. Getting this to work was a bit tricky,
1253 'undefined global'. Getting this to work was a bit tricky,
1250 because by default python tokenizers are stateless. Saved by
1254 because by default python tokenizers are stateless. Saved by
1251 python's ability to easily add a bit of state to an arbitrary
1255 python's ability to easily add a bit of state to an arbitrary
1252 function (without needing to build a full-blown callable object).
1256 function (without needing to build a full-blown callable object).
1253
1257
1254 Also big cleanup of this code, which had horrendous runtime
1258 Also big cleanup of this code, which had horrendous runtime
1255 lookups of zillions of attributes for colorization. Moved all
1259 lookups of zillions of attributes for colorization. Moved all
1256 this code into a few templates, which make it cleaner and quicker.
1260 this code into a few templates, which make it cleaner and quicker.
1257
1261
1258 Printout quality was also improved for Verbose exceptions: one
1262 Printout quality was also improved for Verbose exceptions: one
1259 variable per line, and memory addresses are printed (this can be
1263 variable per line, and memory addresses are printed (this can be
1260 quite handy in nasty debugging situations, which is what Verbose
1264 quite handy in nasty debugging situations, which is what Verbose
1261 is for).
1265 is for).
1262
1266
1263 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1267 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1264 the command line as scripts to be loaded by embedded instances.
1268 the command line as scripts to be loaded by embedded instances.
1265 Doing so has the potential for an infinite recursion if there are
1269 Doing so has the potential for an infinite recursion if there are
1266 exceptions thrown in the process. This fixes a strange crash
1270 exceptions thrown in the process. This fixes a strange crash
1267 reported by Philippe MULLER <muller-AT-irit.fr>.
1271 reported by Philippe MULLER <muller-AT-irit.fr>.
1268
1272
1269 2004-12-09 Fernando Perez <fperez@colorado.edu>
1273 2004-12-09 Fernando Perez <fperez@colorado.edu>
1270
1274
1271 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1275 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1272 to reflect new names in matplotlib, which now expose the
1276 to reflect new names in matplotlib, which now expose the
1273 matlab-compatible interface via a pylab module instead of the
1277 matlab-compatible interface via a pylab module instead of the
1274 'matlab' name. The new code is backwards compatible, so users of
1278 'matlab' name. The new code is backwards compatible, so users of
1275 all matplotlib versions are OK. Patch by J. Hunter.
1279 all matplotlib versions are OK. Patch by J. Hunter.
1276
1280
1277 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1281 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1278 of __init__ docstrings for instances (class docstrings are already
1282 of __init__ docstrings for instances (class docstrings are already
1279 automatically printed). Instances with customized docstrings
1283 automatically printed). Instances with customized docstrings
1280 (indep. of the class) are also recognized and all 3 separate
1284 (indep. of the class) are also recognized and all 3 separate
1281 docstrings are printed (instance, class, constructor). After some
1285 docstrings are printed (instance, class, constructor). After some
1282 comments/suggestions by J. Hunter.
1286 comments/suggestions by J. Hunter.
1283
1287
1284 2004-12-05 Fernando Perez <fperez@colorado.edu>
1288 2004-12-05 Fernando Perez <fperez@colorado.edu>
1285
1289
1286 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1290 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1287 warnings when tab-completion fails and triggers an exception.
1291 warnings when tab-completion fails and triggers an exception.
1288
1292
1289 2004-12-03 Fernando Perez <fperez@colorado.edu>
1293 2004-12-03 Fernando Perez <fperez@colorado.edu>
1290
1294
1291 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1295 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1292 be triggered when using 'run -p'. An incorrect option flag was
1296 be triggered when using 'run -p'. An incorrect option flag was
1293 being set ('d' instead of 'D').
1297 being set ('d' instead of 'D').
1294 (manpage): fix missing escaped \- sign.
1298 (manpage): fix missing escaped \- sign.
1295
1299
1296 2004-11-30 *** Released version 0.6.5
1300 2004-11-30 *** Released version 0.6.5
1297
1301
1298 2004-11-30 Fernando Perez <fperez@colorado.edu>
1302 2004-11-30 Fernando Perez <fperez@colorado.edu>
1299
1303
1300 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1304 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1301 setting with -d option.
1305 setting with -d option.
1302
1306
1303 * setup.py (docfiles): Fix problem where the doc glob I was using
1307 * setup.py (docfiles): Fix problem where the doc glob I was using
1304 was COMPLETELY BROKEN. It was giving the right files by pure
1308 was COMPLETELY BROKEN. It was giving the right files by pure
1305 accident, but failed once I tried to include ipython.el. Note:
1309 accident, but failed once I tried to include ipython.el. Note:
1306 glob() does NOT allow you to do exclusion on multiple endings!
1310 glob() does NOT allow you to do exclusion on multiple endings!
1307
1311
1308 2004-11-29 Fernando Perez <fperez@colorado.edu>
1312 2004-11-29 Fernando Perez <fperez@colorado.edu>
1309
1313
1310 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1314 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1311 the manpage as the source. Better formatting & consistency.
1315 the manpage as the source. Better formatting & consistency.
1312
1316
1313 * IPython/Magic.py (magic_run): Added new -d option, to run
1317 * IPython/Magic.py (magic_run): Added new -d option, to run
1314 scripts under the control of the python pdb debugger. Note that
1318 scripts under the control of the python pdb debugger. Note that
1315 this required changing the %prun option -d to -D, to avoid a clash
1319 this required changing the %prun option -d to -D, to avoid a clash
1316 (since %run must pass options to %prun, and getopt is too dumb to
1320 (since %run must pass options to %prun, and getopt is too dumb to
1317 handle options with string values with embedded spaces). Thanks
1321 handle options with string values with embedded spaces). Thanks
1318 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1322 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1319 (magic_who_ls): added type matching to %who and %whos, so that one
1323 (magic_who_ls): added type matching to %who and %whos, so that one
1320 can filter their output to only include variables of certain
1324 can filter their output to only include variables of certain
1321 types. Another suggestion by Matthew.
1325 types. Another suggestion by Matthew.
1322 (magic_whos): Added memory summaries in kb and Mb for arrays.
1326 (magic_whos): Added memory summaries in kb and Mb for arrays.
1323 (magic_who): Improve formatting (break lines every 9 vars).
1327 (magic_who): Improve formatting (break lines every 9 vars).
1324
1328
1325 2004-11-28 Fernando Perez <fperez@colorado.edu>
1329 2004-11-28 Fernando Perez <fperez@colorado.edu>
1326
1330
1327 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1331 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1328 cache when empty lines were present.
1332 cache when empty lines were present.
1329
1333
1330 2004-11-24 Fernando Perez <fperez@colorado.edu>
1334 2004-11-24 Fernando Perez <fperez@colorado.edu>
1331
1335
1332 * IPython/usage.py (__doc__): document the re-activated threading
1336 * IPython/usage.py (__doc__): document the re-activated threading
1333 options for WX and GTK.
1337 options for WX and GTK.
1334
1338
1335 2004-11-23 Fernando Perez <fperez@colorado.edu>
1339 2004-11-23 Fernando Perez <fperez@colorado.edu>
1336
1340
1337 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1341 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1338 the -wthread and -gthread options, along with a new -tk one to try
1342 the -wthread and -gthread options, along with a new -tk one to try
1339 and coordinate Tk threading with wx/gtk. The tk support is very
1343 and coordinate Tk threading with wx/gtk. The tk support is very
1340 platform dependent, since it seems to require Tcl and Tk to be
1344 platform dependent, since it seems to require Tcl and Tk to be
1341 built with threads (Fedora1/2 appears NOT to have it, but in
1345 built with threads (Fedora1/2 appears NOT to have it, but in
1342 Prabhu's Debian boxes it works OK). But even with some Tk
1346 Prabhu's Debian boxes it works OK). But even with some Tk
1343 limitations, this is a great improvement.
1347 limitations, this is a great improvement.
1344
1348
1345 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1349 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1346 info in user prompts. Patch by Prabhu.
1350 info in user prompts. Patch by Prabhu.
1347
1351
1348 2004-11-18 Fernando Perez <fperez@colorado.edu>
1352 2004-11-18 Fernando Perez <fperez@colorado.edu>
1349
1353
1350 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1354 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1351 EOFErrors and bail, to avoid infinite loops if a non-terminating
1355 EOFErrors and bail, to avoid infinite loops if a non-terminating
1352 file is fed into ipython. Patch submitted in issue 19 by user,
1356 file is fed into ipython. Patch submitted in issue 19 by user,
1353 many thanks.
1357 many thanks.
1354
1358
1355 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1359 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1356 autoquote/parens in continuation prompts, which can cause lots of
1360 autoquote/parens in continuation prompts, which can cause lots of
1357 problems. Closes roundup issue 20.
1361 problems. Closes roundup issue 20.
1358
1362
1359 2004-11-17 Fernando Perez <fperez@colorado.edu>
1363 2004-11-17 Fernando Perez <fperez@colorado.edu>
1360
1364
1361 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1365 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1362 reported as debian bug #280505. I'm not sure my local changelog
1366 reported as debian bug #280505. I'm not sure my local changelog
1363 entry has the proper debian format (Jack?).
1367 entry has the proper debian format (Jack?).
1364
1368
1365 2004-11-08 *** Released version 0.6.4
1369 2004-11-08 *** Released version 0.6.4
1366
1370
1367 2004-11-08 Fernando Perez <fperez@colorado.edu>
1371 2004-11-08 Fernando Perez <fperez@colorado.edu>
1368
1372
1369 * IPython/iplib.py (init_readline): Fix exit message for Windows
1373 * IPython/iplib.py (init_readline): Fix exit message for Windows
1370 when readline is active. Thanks to a report by Eric Jones
1374 when readline is active. Thanks to a report by Eric Jones
1371 <eric-AT-enthought.com>.
1375 <eric-AT-enthought.com>.
1372
1376
1373 2004-11-07 Fernando Perez <fperez@colorado.edu>
1377 2004-11-07 Fernando Perez <fperez@colorado.edu>
1374
1378
1375 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1379 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1376 sometimes seen by win2k/cygwin users.
1380 sometimes seen by win2k/cygwin users.
1377
1381
1378 2004-11-06 Fernando Perez <fperez@colorado.edu>
1382 2004-11-06 Fernando Perez <fperez@colorado.edu>
1379
1383
1380 * IPython/iplib.py (interact): Change the handling of %Exit from
1384 * IPython/iplib.py (interact): Change the handling of %Exit from
1381 trying to propagate a SystemExit to an internal ipython flag.
1385 trying to propagate a SystemExit to an internal ipython flag.
1382 This is less elegant than using Python's exception mechanism, but
1386 This is less elegant than using Python's exception mechanism, but
1383 I can't get that to work reliably with threads, so under -pylab
1387 I can't get that to work reliably with threads, so under -pylab
1384 %Exit was hanging IPython. Cross-thread exception handling is
1388 %Exit was hanging IPython. Cross-thread exception handling is
1385 really a bitch. Thaks to a bug report by Stephen Walton
1389 really a bitch. Thaks to a bug report by Stephen Walton
1386 <stephen.walton-AT-csun.edu>.
1390 <stephen.walton-AT-csun.edu>.
1387
1391
1388 2004-11-04 Fernando Perez <fperez@colorado.edu>
1392 2004-11-04 Fernando Perez <fperez@colorado.edu>
1389
1393
1390 * IPython/iplib.py (raw_input_original): store a pointer to the
1394 * IPython/iplib.py (raw_input_original): store a pointer to the
1391 true raw_input to harden against code which can modify it
1395 true raw_input to harden against code which can modify it
1392 (wx.py.PyShell does this and would otherwise crash ipython).
1396 (wx.py.PyShell does this and would otherwise crash ipython).
1393 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1397 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1394
1398
1395 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1399 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1396 Ctrl-C problem, which does not mess up the input line.
1400 Ctrl-C problem, which does not mess up the input line.
1397
1401
1398 2004-11-03 Fernando Perez <fperez@colorado.edu>
1402 2004-11-03 Fernando Perez <fperez@colorado.edu>
1399
1403
1400 * IPython/Release.py: Changed licensing to BSD, in all files.
1404 * IPython/Release.py: Changed licensing to BSD, in all files.
1401 (name): lowercase name for tarball/RPM release.
1405 (name): lowercase name for tarball/RPM release.
1402
1406
1403 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1407 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1404 use throughout ipython.
1408 use throughout ipython.
1405
1409
1406 * IPython/Magic.py (Magic._ofind): Switch to using the new
1410 * IPython/Magic.py (Magic._ofind): Switch to using the new
1407 OInspect.getdoc() function.
1411 OInspect.getdoc() function.
1408
1412
1409 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1413 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1410 of the line currently being canceled via Ctrl-C. It's extremely
1414 of the line currently being canceled via Ctrl-C. It's extremely
1411 ugly, but I don't know how to do it better (the problem is one of
1415 ugly, but I don't know how to do it better (the problem is one of
1412 handling cross-thread exceptions).
1416 handling cross-thread exceptions).
1413
1417
1414 2004-10-28 Fernando Perez <fperez@colorado.edu>
1418 2004-10-28 Fernando Perez <fperez@colorado.edu>
1415
1419
1416 * IPython/Shell.py (signal_handler): add signal handlers to trap
1420 * IPython/Shell.py (signal_handler): add signal handlers to trap
1417 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1421 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1418 report by Francesc Alted.
1422 report by Francesc Alted.
1419
1423
1420 2004-10-21 Fernando Perez <fperez@colorado.edu>
1424 2004-10-21 Fernando Perez <fperez@colorado.edu>
1421
1425
1422 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1426 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1423 to % for pysh syntax extensions.
1427 to % for pysh syntax extensions.
1424
1428
1425 2004-10-09 Fernando Perez <fperez@colorado.edu>
1429 2004-10-09 Fernando Perez <fperez@colorado.edu>
1426
1430
1427 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1431 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1428 arrays to print a more useful summary, without calling str(arr).
1432 arrays to print a more useful summary, without calling str(arr).
1429 This avoids the problem of extremely lengthy computations which
1433 This avoids the problem of extremely lengthy computations which
1430 occur if arr is large, and appear to the user as a system lockup
1434 occur if arr is large, and appear to the user as a system lockup
1431 with 100% cpu activity. After a suggestion by Kristian Sandberg
1435 with 100% cpu activity. After a suggestion by Kristian Sandberg
1432 <Kristian.Sandberg@colorado.edu>.
1436 <Kristian.Sandberg@colorado.edu>.
1433 (Magic.__init__): fix bug in global magic escapes not being
1437 (Magic.__init__): fix bug in global magic escapes not being
1434 correctly set.
1438 correctly set.
1435
1439
1436 2004-10-08 Fernando Perez <fperez@colorado.edu>
1440 2004-10-08 Fernando Perez <fperez@colorado.edu>
1437
1441
1438 * IPython/Magic.py (__license__): change to absolute imports of
1442 * IPython/Magic.py (__license__): change to absolute imports of
1439 ipython's own internal packages, to start adapting to the absolute
1443 ipython's own internal packages, to start adapting to the absolute
1440 import requirement of PEP-328.
1444 import requirement of PEP-328.
1441
1445
1442 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1446 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1443 files, and standardize author/license marks through the Release
1447 files, and standardize author/license marks through the Release
1444 module instead of having per/file stuff (except for files with
1448 module instead of having per/file stuff (except for files with
1445 particular licenses, like the MIT/PSF-licensed codes).
1449 particular licenses, like the MIT/PSF-licensed codes).
1446
1450
1447 * IPython/Debugger.py: remove dead code for python 2.1
1451 * IPython/Debugger.py: remove dead code for python 2.1
1448
1452
1449 2004-10-04 Fernando Perez <fperez@colorado.edu>
1453 2004-10-04 Fernando Perez <fperez@colorado.edu>
1450
1454
1451 * IPython/iplib.py (ipmagic): New function for accessing magics
1455 * IPython/iplib.py (ipmagic): New function for accessing magics
1452 via a normal python function call.
1456 via a normal python function call.
1453
1457
1454 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1458 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1455 from '@' to '%', to accomodate the new @decorator syntax of python
1459 from '@' to '%', to accomodate the new @decorator syntax of python
1456 2.4.
1460 2.4.
1457
1461
1458 2004-09-29 Fernando Perez <fperez@colorado.edu>
1462 2004-09-29 Fernando Perez <fperez@colorado.edu>
1459
1463
1460 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1464 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1461 matplotlib.use to prevent running scripts which try to switch
1465 matplotlib.use to prevent running scripts which try to switch
1462 interactive backends from within ipython. This will just crash
1466 interactive backends from within ipython. This will just crash
1463 the python interpreter, so we can't allow it (but a detailed error
1467 the python interpreter, so we can't allow it (but a detailed error
1464 is given to the user).
1468 is given to the user).
1465
1469
1466 2004-09-28 Fernando Perez <fperez@colorado.edu>
1470 2004-09-28 Fernando Perez <fperez@colorado.edu>
1467
1471
1468 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1472 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1469 matplotlib-related fixes so that using @run with non-matplotlib
1473 matplotlib-related fixes so that using @run with non-matplotlib
1470 scripts doesn't pop up spurious plot windows. This requires
1474 scripts doesn't pop up spurious plot windows. This requires
1471 matplotlib >= 0.63, where I had to make some changes as well.
1475 matplotlib >= 0.63, where I had to make some changes as well.
1472
1476
1473 * IPython/ipmaker.py (make_IPython): update version requirement to
1477 * IPython/ipmaker.py (make_IPython): update version requirement to
1474 python 2.2.
1478 python 2.2.
1475
1479
1476 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1480 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1477 banner arg for embedded customization.
1481 banner arg for embedded customization.
1478
1482
1479 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1483 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1480 explicit uses of __IP as the IPython's instance name. Now things
1484 explicit uses of __IP as the IPython's instance name. Now things
1481 are properly handled via the shell.name value. The actual code
1485 are properly handled via the shell.name value. The actual code
1482 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1486 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1483 is much better than before. I'll clean things completely when the
1487 is much better than before. I'll clean things completely when the
1484 magic stuff gets a real overhaul.
1488 magic stuff gets a real overhaul.
1485
1489
1486 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1490 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1487 minor changes to debian dir.
1491 minor changes to debian dir.
1488
1492
1489 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1493 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1490 pointer to the shell itself in the interactive namespace even when
1494 pointer to the shell itself in the interactive namespace even when
1491 a user-supplied dict is provided. This is needed for embedding
1495 a user-supplied dict is provided. This is needed for embedding
1492 purposes (found by tests with Michel Sanner).
1496 purposes (found by tests with Michel Sanner).
1493
1497
1494 2004-09-27 Fernando Perez <fperez@colorado.edu>
1498 2004-09-27 Fernando Perez <fperez@colorado.edu>
1495
1499
1496 * IPython/UserConfig/ipythonrc: remove []{} from
1500 * IPython/UserConfig/ipythonrc: remove []{} from
1497 readline_remove_delims, so that things like [modname.<TAB> do
1501 readline_remove_delims, so that things like [modname.<TAB> do
1498 proper completion. This disables [].TAB, but that's a less common
1502 proper completion. This disables [].TAB, but that's a less common
1499 case than module names in list comprehensions, for example.
1503 case than module names in list comprehensions, for example.
1500 Thanks to a report by Andrea Riciputi.
1504 Thanks to a report by Andrea Riciputi.
1501
1505
1502 2004-09-09 Fernando Perez <fperez@colorado.edu>
1506 2004-09-09 Fernando Perez <fperez@colorado.edu>
1503
1507
1504 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1508 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1505 blocking problems in win32 and osx. Fix by John.
1509 blocking problems in win32 and osx. Fix by John.
1506
1510
1507 2004-09-08 Fernando Perez <fperez@colorado.edu>
1511 2004-09-08 Fernando Perez <fperez@colorado.edu>
1508
1512
1509 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1513 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1510 for Win32 and OSX. Fix by John Hunter.
1514 for Win32 and OSX. Fix by John Hunter.
1511
1515
1512 2004-08-30 *** Released version 0.6.3
1516 2004-08-30 *** Released version 0.6.3
1513
1517
1514 2004-08-30 Fernando Perez <fperez@colorado.edu>
1518 2004-08-30 Fernando Perez <fperez@colorado.edu>
1515
1519
1516 * setup.py (isfile): Add manpages to list of dependent files to be
1520 * setup.py (isfile): Add manpages to list of dependent files to be
1517 updated.
1521 updated.
1518
1522
1519 2004-08-27 Fernando Perez <fperez@colorado.edu>
1523 2004-08-27 Fernando Perez <fperez@colorado.edu>
1520
1524
1521 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1525 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1522 for now. They don't really work with standalone WX/GTK code
1526 for now. They don't really work with standalone WX/GTK code
1523 (though matplotlib IS working fine with both of those backends).
1527 (though matplotlib IS working fine with both of those backends).
1524 This will neeed much more testing. I disabled most things with
1528 This will neeed much more testing. I disabled most things with
1525 comments, so turning it back on later should be pretty easy.
1529 comments, so turning it back on later should be pretty easy.
1526
1530
1527 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1531 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1528 autocalling of expressions like r'foo', by modifying the line
1532 autocalling of expressions like r'foo', by modifying the line
1529 split regexp. Closes
1533 split regexp. Closes
1530 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1534 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1531 Riley <ipythonbugs-AT-sabi.net>.
1535 Riley <ipythonbugs-AT-sabi.net>.
1532 (InteractiveShell.mainloop): honor --nobanner with banner
1536 (InteractiveShell.mainloop): honor --nobanner with banner
1533 extensions.
1537 extensions.
1534
1538
1535 * IPython/Shell.py: Significant refactoring of all classes, so
1539 * IPython/Shell.py: Significant refactoring of all classes, so
1536 that we can really support ALL matplotlib backends and threading
1540 that we can really support ALL matplotlib backends and threading
1537 models (John spotted a bug with Tk which required this). Now we
1541 models (John spotted a bug with Tk which required this). Now we
1538 should support single-threaded, WX-threads and GTK-threads, both
1542 should support single-threaded, WX-threads and GTK-threads, both
1539 for generic code and for matplotlib.
1543 for generic code and for matplotlib.
1540
1544
1541 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1545 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1542 -pylab, to simplify things for users. Will also remove the pylab
1546 -pylab, to simplify things for users. Will also remove the pylab
1543 profile, since now all of matplotlib configuration is directly
1547 profile, since now all of matplotlib configuration is directly
1544 handled here. This also reduces startup time.
1548 handled here. This also reduces startup time.
1545
1549
1546 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1550 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1547 shell wasn't being correctly called. Also in IPShellWX.
1551 shell wasn't being correctly called. Also in IPShellWX.
1548
1552
1549 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1553 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1550 fine-tune banner.
1554 fine-tune banner.
1551
1555
1552 * IPython/numutils.py (spike): Deprecate these spike functions,
1556 * IPython/numutils.py (spike): Deprecate these spike functions,
1553 delete (long deprecated) gnuplot_exec handler.
1557 delete (long deprecated) gnuplot_exec handler.
1554
1558
1555 2004-08-26 Fernando Perez <fperez@colorado.edu>
1559 2004-08-26 Fernando Perez <fperez@colorado.edu>
1556
1560
1557 * ipython.1: Update for threading options, plus some others which
1561 * ipython.1: Update for threading options, plus some others which
1558 were missing.
1562 were missing.
1559
1563
1560 * IPython/ipmaker.py (__call__): Added -wthread option for
1564 * IPython/ipmaker.py (__call__): Added -wthread option for
1561 wxpython thread handling. Make sure threading options are only
1565 wxpython thread handling. Make sure threading options are only
1562 valid at the command line.
1566 valid at the command line.
1563
1567
1564 * scripts/ipython: moved shell selection into a factory function
1568 * scripts/ipython: moved shell selection into a factory function
1565 in Shell.py, to keep the starter script to a minimum.
1569 in Shell.py, to keep the starter script to a minimum.
1566
1570
1567 2004-08-25 Fernando Perez <fperez@colorado.edu>
1571 2004-08-25 Fernando Perez <fperez@colorado.edu>
1568
1572
1569 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1573 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1570 John. Along with some recent changes he made to matplotlib, the
1574 John. Along with some recent changes he made to matplotlib, the
1571 next versions of both systems should work very well together.
1575 next versions of both systems should work very well together.
1572
1576
1573 2004-08-24 Fernando Perez <fperez@colorado.edu>
1577 2004-08-24 Fernando Perez <fperez@colorado.edu>
1574
1578
1575 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1579 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1576 tried to switch the profiling to using hotshot, but I'm getting
1580 tried to switch the profiling to using hotshot, but I'm getting
1577 strange errors from prof.runctx() there. I may be misreading the
1581 strange errors from prof.runctx() there. I may be misreading the
1578 docs, but it looks weird. For now the profiling code will
1582 docs, but it looks weird. For now the profiling code will
1579 continue to use the standard profiler.
1583 continue to use the standard profiler.
1580
1584
1581 2004-08-23 Fernando Perez <fperez@colorado.edu>
1585 2004-08-23 Fernando Perez <fperez@colorado.edu>
1582
1586
1583 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1587 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1584 threaded shell, by John Hunter. It's not quite ready yet, but
1588 threaded shell, by John Hunter. It's not quite ready yet, but
1585 close.
1589 close.
1586
1590
1587 2004-08-22 Fernando Perez <fperez@colorado.edu>
1591 2004-08-22 Fernando Perez <fperez@colorado.edu>
1588
1592
1589 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1593 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1590 in Magic and ultraTB.
1594 in Magic and ultraTB.
1591
1595
1592 * ipython.1: document threading options in manpage.
1596 * ipython.1: document threading options in manpage.
1593
1597
1594 * scripts/ipython: Changed name of -thread option to -gthread,
1598 * scripts/ipython: Changed name of -thread option to -gthread,
1595 since this is GTK specific. I want to leave the door open for a
1599 since this is GTK specific. I want to leave the door open for a
1596 -wthread option for WX, which will most likely be necessary. This
1600 -wthread option for WX, which will most likely be necessary. This
1597 change affects usage and ipmaker as well.
1601 change affects usage and ipmaker as well.
1598
1602
1599 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1603 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1600 handle the matplotlib shell issues. Code by John Hunter
1604 handle the matplotlib shell issues. Code by John Hunter
1601 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1605 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1602 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1606 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1603 broken (and disabled for end users) for now, but it puts the
1607 broken (and disabled for end users) for now, but it puts the
1604 infrastructure in place.
1608 infrastructure in place.
1605
1609
1606 2004-08-21 Fernando Perez <fperez@colorado.edu>
1610 2004-08-21 Fernando Perez <fperez@colorado.edu>
1607
1611
1608 * ipythonrc-pylab: Add matplotlib support.
1612 * ipythonrc-pylab: Add matplotlib support.
1609
1613
1610 * matplotlib_config.py: new files for matplotlib support, part of
1614 * matplotlib_config.py: new files for matplotlib support, part of
1611 the pylab profile.
1615 the pylab profile.
1612
1616
1613 * IPython/usage.py (__doc__): documented the threading options.
1617 * IPython/usage.py (__doc__): documented the threading options.
1614
1618
1615 2004-08-20 Fernando Perez <fperez@colorado.edu>
1619 2004-08-20 Fernando Perez <fperez@colorado.edu>
1616
1620
1617 * ipython: Modified the main calling routine to handle the -thread
1621 * ipython: Modified the main calling routine to handle the -thread
1618 and -mpthread options. This needs to be done as a top-level hack,
1622 and -mpthread options. This needs to be done as a top-level hack,
1619 because it determines which class to instantiate for IPython
1623 because it determines which class to instantiate for IPython
1620 itself.
1624 itself.
1621
1625
1622 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1626 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1623 classes to support multithreaded GTK operation without blocking,
1627 classes to support multithreaded GTK operation without blocking,
1624 and matplotlib with all backends. This is a lot of still very
1628 and matplotlib with all backends. This is a lot of still very
1625 experimental code, and threads are tricky. So it may still have a
1629 experimental code, and threads are tricky. So it may still have a
1626 few rough edges... This code owes a lot to
1630 few rough edges... This code owes a lot to
1627 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1631 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1628 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1632 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1629 to John Hunter for all the matplotlib work.
1633 to John Hunter for all the matplotlib work.
1630
1634
1631 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1635 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1632 options for gtk thread and matplotlib support.
1636 options for gtk thread and matplotlib support.
1633
1637
1634 2004-08-16 Fernando Perez <fperez@colorado.edu>
1638 2004-08-16 Fernando Perez <fperez@colorado.edu>
1635
1639
1636 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1640 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1637 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1641 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1638 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1642 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1639
1643
1640 2004-08-11 Fernando Perez <fperez@colorado.edu>
1644 2004-08-11 Fernando Perez <fperez@colorado.edu>
1641
1645
1642 * setup.py (isfile): Fix build so documentation gets updated for
1646 * setup.py (isfile): Fix build so documentation gets updated for
1643 rpms (it was only done for .tgz builds).
1647 rpms (it was only done for .tgz builds).
1644
1648
1645 2004-08-10 Fernando Perez <fperez@colorado.edu>
1649 2004-08-10 Fernando Perez <fperez@colorado.edu>
1646
1650
1647 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1651 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1648
1652
1649 * iplib.py : Silence syntax error exceptions in tab-completion.
1653 * iplib.py : Silence syntax error exceptions in tab-completion.
1650
1654
1651 2004-08-05 Fernando Perez <fperez@colorado.edu>
1655 2004-08-05 Fernando Perez <fperez@colorado.edu>
1652
1656
1653 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1657 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1654 'color off' mark for continuation prompts. This was causing long
1658 'color off' mark for continuation prompts. This was causing long
1655 continuation lines to mis-wrap.
1659 continuation lines to mis-wrap.
1656
1660
1657 2004-08-01 Fernando Perez <fperez@colorado.edu>
1661 2004-08-01 Fernando Perez <fperez@colorado.edu>
1658
1662
1659 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1663 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1660 for building ipython to be a parameter. All this is necessary
1664 for building ipython to be a parameter. All this is necessary
1661 right now to have a multithreaded version, but this insane
1665 right now to have a multithreaded version, but this insane
1662 non-design will be cleaned up soon. For now, it's a hack that
1666 non-design will be cleaned up soon. For now, it's a hack that
1663 works.
1667 works.
1664
1668
1665 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1669 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1666 args in various places. No bugs so far, but it's a dangerous
1670 args in various places. No bugs so far, but it's a dangerous
1667 practice.
1671 practice.
1668
1672
1669 2004-07-31 Fernando Perez <fperez@colorado.edu>
1673 2004-07-31 Fernando Perez <fperez@colorado.edu>
1670
1674
1671 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1675 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1672 fix completion of files with dots in their names under most
1676 fix completion of files with dots in their names under most
1673 profiles (pysh was OK because the completion order is different).
1677 profiles (pysh was OK because the completion order is different).
1674
1678
1675 2004-07-27 Fernando Perez <fperez@colorado.edu>
1679 2004-07-27 Fernando Perez <fperez@colorado.edu>
1676
1680
1677 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1681 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1678 keywords manually, b/c the one in keyword.py was removed in python
1682 keywords manually, b/c the one in keyword.py was removed in python
1679 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1683 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1680 This is NOT a bug under python 2.3 and earlier.
1684 This is NOT a bug under python 2.3 and earlier.
1681
1685
1682 2004-07-26 Fernando Perez <fperez@colorado.edu>
1686 2004-07-26 Fernando Perez <fperez@colorado.edu>
1683
1687
1684 * IPython/ultraTB.py (VerboseTB.text): Add another
1688 * IPython/ultraTB.py (VerboseTB.text): Add another
1685 linecache.checkcache() call to try to prevent inspect.py from
1689 linecache.checkcache() call to try to prevent inspect.py from
1686 crashing under python 2.3. I think this fixes
1690 crashing under python 2.3. I think this fixes
1687 http://www.scipy.net/roundup/ipython/issue17.
1691 http://www.scipy.net/roundup/ipython/issue17.
1688
1692
1689 2004-07-26 *** Released version 0.6.2
1693 2004-07-26 *** Released version 0.6.2
1690
1694
1691 2004-07-26 Fernando Perez <fperez@colorado.edu>
1695 2004-07-26 Fernando Perez <fperez@colorado.edu>
1692
1696
1693 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1697 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1694 fail for any number.
1698 fail for any number.
1695 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1699 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1696 empty bookmarks.
1700 empty bookmarks.
1697
1701
1698 2004-07-26 *** Released version 0.6.1
1702 2004-07-26 *** Released version 0.6.1
1699
1703
1700 2004-07-26 Fernando Perez <fperez@colorado.edu>
1704 2004-07-26 Fernando Perez <fperez@colorado.edu>
1701
1705
1702 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1706 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1703
1707
1704 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1708 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1705 escaping '()[]{}' in filenames.
1709 escaping '()[]{}' in filenames.
1706
1710
1707 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1711 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1708 Python 2.2 users who lack a proper shlex.split.
1712 Python 2.2 users who lack a proper shlex.split.
1709
1713
1710 2004-07-19 Fernando Perez <fperez@colorado.edu>
1714 2004-07-19 Fernando Perez <fperez@colorado.edu>
1711
1715
1712 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1716 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1713 for reading readline's init file. I follow the normal chain:
1717 for reading readline's init file. I follow the normal chain:
1714 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1718 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1715 report by Mike Heeter. This closes
1719 report by Mike Heeter. This closes
1716 http://www.scipy.net/roundup/ipython/issue16.
1720 http://www.scipy.net/roundup/ipython/issue16.
1717
1721
1718 2004-07-18 Fernando Perez <fperez@colorado.edu>
1722 2004-07-18 Fernando Perez <fperez@colorado.edu>
1719
1723
1720 * IPython/iplib.py (__init__): Add better handling of '\' under
1724 * IPython/iplib.py (__init__): Add better handling of '\' under
1721 Win32 for filenames. After a patch by Ville.
1725 Win32 for filenames. After a patch by Ville.
1722
1726
1723 2004-07-17 Fernando Perez <fperez@colorado.edu>
1727 2004-07-17 Fernando Perez <fperez@colorado.edu>
1724
1728
1725 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1729 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1726 autocalling would be triggered for 'foo is bar' if foo is
1730 autocalling would be triggered for 'foo is bar' if foo is
1727 callable. I also cleaned up the autocall detection code to use a
1731 callable. I also cleaned up the autocall detection code to use a
1728 regexp, which is faster. Bug reported by Alexander Schmolck.
1732 regexp, which is faster. Bug reported by Alexander Schmolck.
1729
1733
1730 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1734 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1731 '?' in them would confuse the help system. Reported by Alex
1735 '?' in them would confuse the help system. Reported by Alex
1732 Schmolck.
1736 Schmolck.
1733
1737
1734 2004-07-16 Fernando Perez <fperez@colorado.edu>
1738 2004-07-16 Fernando Perez <fperez@colorado.edu>
1735
1739
1736 * IPython/GnuplotInteractive.py (__all__): added plot2.
1740 * IPython/GnuplotInteractive.py (__all__): added plot2.
1737
1741
1738 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1742 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1739 plotting dictionaries, lists or tuples of 1d arrays.
1743 plotting dictionaries, lists or tuples of 1d arrays.
1740
1744
1741 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1745 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1742 optimizations.
1746 optimizations.
1743
1747
1744 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1748 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1745 the information which was there from Janko's original IPP code:
1749 the information which was there from Janko's original IPP code:
1746
1750
1747 03.05.99 20:53 porto.ifm.uni-kiel.de
1751 03.05.99 20:53 porto.ifm.uni-kiel.de
1748 --Started changelog.
1752 --Started changelog.
1749 --make clear do what it say it does
1753 --make clear do what it say it does
1750 --added pretty output of lines from inputcache
1754 --added pretty output of lines from inputcache
1751 --Made Logger a mixin class, simplifies handling of switches
1755 --Made Logger a mixin class, simplifies handling of switches
1752 --Added own completer class. .string<TAB> expands to last history
1756 --Added own completer class. .string<TAB> expands to last history
1753 line which starts with string. The new expansion is also present
1757 line which starts with string. The new expansion is also present
1754 with Ctrl-r from the readline library. But this shows, who this
1758 with Ctrl-r from the readline library. But this shows, who this
1755 can be done for other cases.
1759 can be done for other cases.
1756 --Added convention that all shell functions should accept a
1760 --Added convention that all shell functions should accept a
1757 parameter_string This opens the door for different behaviour for
1761 parameter_string This opens the door for different behaviour for
1758 each function. @cd is a good example of this.
1762 each function. @cd is a good example of this.
1759
1763
1760 04.05.99 12:12 porto.ifm.uni-kiel.de
1764 04.05.99 12:12 porto.ifm.uni-kiel.de
1761 --added logfile rotation
1765 --added logfile rotation
1762 --added new mainloop method which freezes first the namespace
1766 --added new mainloop method which freezes first the namespace
1763
1767
1764 07.05.99 21:24 porto.ifm.uni-kiel.de
1768 07.05.99 21:24 porto.ifm.uni-kiel.de
1765 --added the docreader classes. Now there is a help system.
1769 --added the docreader classes. Now there is a help system.
1766 -This is only a first try. Currently it's not easy to put new
1770 -This is only a first try. Currently it's not easy to put new
1767 stuff in the indices. But this is the way to go. Info would be
1771 stuff in the indices. But this is the way to go. Info would be
1768 better, but HTML is every where and not everybody has an info
1772 better, but HTML is every where and not everybody has an info
1769 system installed and it's not so easy to change html-docs to info.
1773 system installed and it's not so easy to change html-docs to info.
1770 --added global logfile option
1774 --added global logfile option
1771 --there is now a hook for object inspection method pinfo needs to
1775 --there is now a hook for object inspection method pinfo needs to
1772 be provided for this. Can be reached by two '??'.
1776 be provided for this. Can be reached by two '??'.
1773
1777
1774 08.05.99 20:51 porto.ifm.uni-kiel.de
1778 08.05.99 20:51 porto.ifm.uni-kiel.de
1775 --added a README
1779 --added a README
1776 --bug in rc file. Something has changed so functions in the rc
1780 --bug in rc file. Something has changed so functions in the rc
1777 file need to reference the shell and not self. Not clear if it's a
1781 file need to reference the shell and not self. Not clear if it's a
1778 bug or feature.
1782 bug or feature.
1779 --changed rc file for new behavior
1783 --changed rc file for new behavior
1780
1784
1781 2004-07-15 Fernando Perez <fperez@colorado.edu>
1785 2004-07-15 Fernando Perez <fperez@colorado.edu>
1782
1786
1783 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1787 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1784 cache was falling out of sync in bizarre manners when multi-line
1788 cache was falling out of sync in bizarre manners when multi-line
1785 input was present. Minor optimizations and cleanup.
1789 input was present. Minor optimizations and cleanup.
1786
1790
1787 (Logger): Remove old Changelog info for cleanup. This is the
1791 (Logger): Remove old Changelog info for cleanup. This is the
1788 information which was there from Janko's original code:
1792 information which was there from Janko's original code:
1789
1793
1790 Changes to Logger: - made the default log filename a parameter
1794 Changes to Logger: - made the default log filename a parameter
1791
1795
1792 - put a check for lines beginning with !@? in log(). Needed
1796 - put a check for lines beginning with !@? in log(). Needed
1793 (even if the handlers properly log their lines) for mid-session
1797 (even if the handlers properly log their lines) for mid-session
1794 logging activation to work properly. Without this, lines logged
1798 logging activation to work properly. Without this, lines logged
1795 in mid session, which get read from the cache, would end up
1799 in mid session, which get read from the cache, would end up
1796 'bare' (with !@? in the open) in the log. Now they are caught
1800 'bare' (with !@? in the open) in the log. Now they are caught
1797 and prepended with a #.
1801 and prepended with a #.
1798
1802
1799 * IPython/iplib.py (InteractiveShell.init_readline): added check
1803 * IPython/iplib.py (InteractiveShell.init_readline): added check
1800 in case MagicCompleter fails to be defined, so we don't crash.
1804 in case MagicCompleter fails to be defined, so we don't crash.
1801
1805
1802 2004-07-13 Fernando Perez <fperez@colorado.edu>
1806 2004-07-13 Fernando Perez <fperez@colorado.edu>
1803
1807
1804 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1808 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1805 of EPS if the requested filename ends in '.eps'.
1809 of EPS if the requested filename ends in '.eps'.
1806
1810
1807 2004-07-04 Fernando Perez <fperez@colorado.edu>
1811 2004-07-04 Fernando Perez <fperez@colorado.edu>
1808
1812
1809 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1813 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1810 escaping of quotes when calling the shell.
1814 escaping of quotes when calling the shell.
1811
1815
1812 2004-07-02 Fernando Perez <fperez@colorado.edu>
1816 2004-07-02 Fernando Perez <fperez@colorado.edu>
1813
1817
1814 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1818 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1815 gettext not working because we were clobbering '_'. Fixes
1819 gettext not working because we were clobbering '_'. Fixes
1816 http://www.scipy.net/roundup/ipython/issue6.
1820 http://www.scipy.net/roundup/ipython/issue6.
1817
1821
1818 2004-07-01 Fernando Perez <fperez@colorado.edu>
1822 2004-07-01 Fernando Perez <fperez@colorado.edu>
1819
1823
1820 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1824 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1821 into @cd. Patch by Ville.
1825 into @cd. Patch by Ville.
1822
1826
1823 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1827 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1824 new function to store things after ipmaker runs. Patch by Ville.
1828 new function to store things after ipmaker runs. Patch by Ville.
1825 Eventually this will go away once ipmaker is removed and the class
1829 Eventually this will go away once ipmaker is removed and the class
1826 gets cleaned up, but for now it's ok. Key functionality here is
1830 gets cleaned up, but for now it's ok. Key functionality here is
1827 the addition of the persistent storage mechanism, a dict for
1831 the addition of the persistent storage mechanism, a dict for
1828 keeping data across sessions (for now just bookmarks, but more can
1832 keeping data across sessions (for now just bookmarks, but more can
1829 be implemented later).
1833 be implemented later).
1830
1834
1831 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1835 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1832 persistent across sections. Patch by Ville, I modified it
1836 persistent across sections. Patch by Ville, I modified it
1833 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1837 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1834 added a '-l' option to list all bookmarks.
1838 added a '-l' option to list all bookmarks.
1835
1839
1836 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1840 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1837 center for cleanup. Registered with atexit.register(). I moved
1841 center for cleanup. Registered with atexit.register(). I moved
1838 here the old exit_cleanup(). After a patch by Ville.
1842 here the old exit_cleanup(). After a patch by Ville.
1839
1843
1840 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1844 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1841 characters in the hacked shlex_split for python 2.2.
1845 characters in the hacked shlex_split for python 2.2.
1842
1846
1843 * IPython/iplib.py (file_matches): more fixes to filenames with
1847 * IPython/iplib.py (file_matches): more fixes to filenames with
1844 whitespace in them. It's not perfect, but limitations in python's
1848 whitespace in them. It's not perfect, but limitations in python's
1845 readline make it impossible to go further.
1849 readline make it impossible to go further.
1846
1850
1847 2004-06-29 Fernando Perez <fperez@colorado.edu>
1851 2004-06-29 Fernando Perez <fperez@colorado.edu>
1848
1852
1849 * IPython/iplib.py (file_matches): escape whitespace correctly in
1853 * IPython/iplib.py (file_matches): escape whitespace correctly in
1850 filename completions. Bug reported by Ville.
1854 filename completions. Bug reported by Ville.
1851
1855
1852 2004-06-28 Fernando Perez <fperez@colorado.edu>
1856 2004-06-28 Fernando Perez <fperez@colorado.edu>
1853
1857
1854 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1858 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1855 the history file will be called 'history-PROFNAME' (or just
1859 the history file will be called 'history-PROFNAME' (or just
1856 'history' if no profile is loaded). I was getting annoyed at
1860 'history' if no profile is loaded). I was getting annoyed at
1857 getting my Numerical work history clobbered by pysh sessions.
1861 getting my Numerical work history clobbered by pysh sessions.
1858
1862
1859 * IPython/iplib.py (InteractiveShell.__init__): Internal
1863 * IPython/iplib.py (InteractiveShell.__init__): Internal
1860 getoutputerror() function so that we can honor the system_verbose
1864 getoutputerror() function so that we can honor the system_verbose
1861 flag for _all_ system calls. I also added escaping of #
1865 flag for _all_ system calls. I also added escaping of #
1862 characters here to avoid confusing Itpl.
1866 characters here to avoid confusing Itpl.
1863
1867
1864 * IPython/Magic.py (shlex_split): removed call to shell in
1868 * IPython/Magic.py (shlex_split): removed call to shell in
1865 parse_options and replaced it with shlex.split(). The annoying
1869 parse_options and replaced it with shlex.split(). The annoying
1866 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1870 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1867 to backport it from 2.3, with several frail hacks (the shlex
1871 to backport it from 2.3, with several frail hacks (the shlex
1868 module is rather limited in 2.2). Thanks to a suggestion by Ville
1872 module is rather limited in 2.2). Thanks to a suggestion by Ville
1869 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1873 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1870 problem.
1874 problem.
1871
1875
1872 (Magic.magic_system_verbose): new toggle to print the actual
1876 (Magic.magic_system_verbose): new toggle to print the actual
1873 system calls made by ipython. Mainly for debugging purposes.
1877 system calls made by ipython. Mainly for debugging purposes.
1874
1878
1875 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1879 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1876 doesn't support persistence. Reported (and fix suggested) by
1880 doesn't support persistence. Reported (and fix suggested) by
1877 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1881 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1878
1882
1879 2004-06-26 Fernando Perez <fperez@colorado.edu>
1883 2004-06-26 Fernando Perez <fperez@colorado.edu>
1880
1884
1881 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1885 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1882 continue prompts.
1886 continue prompts.
1883
1887
1884 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1888 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1885 function (basically a big docstring) and a few more things here to
1889 function (basically a big docstring) and a few more things here to
1886 speedup startup. pysh.py is now very lightweight. We want because
1890 speedup startup. pysh.py is now very lightweight. We want because
1887 it gets execfile'd, while InterpreterExec gets imported, so
1891 it gets execfile'd, while InterpreterExec gets imported, so
1888 byte-compilation saves time.
1892 byte-compilation saves time.
1889
1893
1890 2004-06-25 Fernando Perez <fperez@colorado.edu>
1894 2004-06-25 Fernando Perez <fperez@colorado.edu>
1891
1895
1892 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1896 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1893 -NUM', which was recently broken.
1897 -NUM', which was recently broken.
1894
1898
1895 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1899 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1896 in multi-line input (but not !!, which doesn't make sense there).
1900 in multi-line input (but not !!, which doesn't make sense there).
1897
1901
1898 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1902 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1899 It's just too useful, and people can turn it off in the less
1903 It's just too useful, and people can turn it off in the less
1900 common cases where it's a problem.
1904 common cases where it's a problem.
1901
1905
1902 2004-06-24 Fernando Perez <fperez@colorado.edu>
1906 2004-06-24 Fernando Perez <fperez@colorado.edu>
1903
1907
1904 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1908 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1905 special syntaxes (like alias calling) is now allied in multi-line
1909 special syntaxes (like alias calling) is now allied in multi-line
1906 input. This is still _very_ experimental, but it's necessary for
1910 input. This is still _very_ experimental, but it's necessary for
1907 efficient shell usage combining python looping syntax with system
1911 efficient shell usage combining python looping syntax with system
1908 calls. For now it's restricted to aliases, I don't think it
1912 calls. For now it's restricted to aliases, I don't think it
1909 really even makes sense to have this for magics.
1913 really even makes sense to have this for magics.
1910
1914
1911 2004-06-23 Fernando Perez <fperez@colorado.edu>
1915 2004-06-23 Fernando Perez <fperez@colorado.edu>
1912
1916
1913 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1917 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1914 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1918 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1915
1919
1916 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1920 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1917 extensions under Windows (after code sent by Gary Bishop). The
1921 extensions under Windows (after code sent by Gary Bishop). The
1918 extensions considered 'executable' are stored in IPython's rc
1922 extensions considered 'executable' are stored in IPython's rc
1919 structure as win_exec_ext.
1923 structure as win_exec_ext.
1920
1924
1921 * IPython/genutils.py (shell): new function, like system() but
1925 * IPython/genutils.py (shell): new function, like system() but
1922 without return value. Very useful for interactive shell work.
1926 without return value. Very useful for interactive shell work.
1923
1927
1924 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1928 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1925 delete aliases.
1929 delete aliases.
1926
1930
1927 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1931 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1928 sure that the alias table doesn't contain python keywords.
1932 sure that the alias table doesn't contain python keywords.
1929
1933
1930 2004-06-21 Fernando Perez <fperez@colorado.edu>
1934 2004-06-21 Fernando Perez <fperez@colorado.edu>
1931
1935
1932 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1936 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1933 non-existent items are found in $PATH. Reported by Thorsten.
1937 non-existent items are found in $PATH. Reported by Thorsten.
1934
1938
1935 2004-06-20 Fernando Perez <fperez@colorado.edu>
1939 2004-06-20 Fernando Perez <fperez@colorado.edu>
1936
1940
1937 * IPython/iplib.py (complete): modified the completer so that the
1941 * IPython/iplib.py (complete): modified the completer so that the
1938 order of priorities can be easily changed at runtime.
1942 order of priorities can be easily changed at runtime.
1939
1943
1940 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1944 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1941 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1945 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1942
1946
1943 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1947 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1944 expand Python variables prepended with $ in all system calls. The
1948 expand Python variables prepended with $ in all system calls. The
1945 same was done to InteractiveShell.handle_shell_escape. Now all
1949 same was done to InteractiveShell.handle_shell_escape. Now all
1946 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1950 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1947 expansion of python variables and expressions according to the
1951 expansion of python variables and expressions according to the
1948 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1952 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1949
1953
1950 Though PEP-215 has been rejected, a similar (but simpler) one
1954 Though PEP-215 has been rejected, a similar (but simpler) one
1951 seems like it will go into Python 2.4, PEP-292 -
1955 seems like it will go into Python 2.4, PEP-292 -
1952 http://www.python.org/peps/pep-0292.html.
1956 http://www.python.org/peps/pep-0292.html.
1953
1957
1954 I'll keep the full syntax of PEP-215, since IPython has since the
1958 I'll keep the full syntax of PEP-215, since IPython has since the
1955 start used Ka-Ping Yee's reference implementation discussed there
1959 start used Ka-Ping Yee's reference implementation discussed there
1956 (Itpl), and I actually like the powerful semantics it offers.
1960 (Itpl), and I actually like the powerful semantics it offers.
1957
1961
1958 In order to access normal shell variables, the $ has to be escaped
1962 In order to access normal shell variables, the $ has to be escaped
1959 via an extra $. For example:
1963 via an extra $. For example:
1960
1964
1961 In [7]: PATH='a python variable'
1965 In [7]: PATH='a python variable'
1962
1966
1963 In [8]: !echo $PATH
1967 In [8]: !echo $PATH
1964 a python variable
1968 a python variable
1965
1969
1966 In [9]: !echo $$PATH
1970 In [9]: !echo $$PATH
1967 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1971 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1968
1972
1969 (Magic.parse_options): escape $ so the shell doesn't evaluate
1973 (Magic.parse_options): escape $ so the shell doesn't evaluate
1970 things prematurely.
1974 things prematurely.
1971
1975
1972 * IPython/iplib.py (InteractiveShell.call_alias): added the
1976 * IPython/iplib.py (InteractiveShell.call_alias): added the
1973 ability for aliases to expand python variables via $.
1977 ability for aliases to expand python variables via $.
1974
1978
1975 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1979 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1976 system, now there's a @rehash/@rehashx pair of magics. These work
1980 system, now there's a @rehash/@rehashx pair of magics. These work
1977 like the csh rehash command, and can be invoked at any time. They
1981 like the csh rehash command, and can be invoked at any time. They
1978 build a table of aliases to everything in the user's $PATH
1982 build a table of aliases to everything in the user's $PATH
1979 (@rehash uses everything, @rehashx is slower but only adds
1983 (@rehash uses everything, @rehashx is slower but only adds
1980 executable files). With this, the pysh.py-based shell profile can
1984 executable files). With this, the pysh.py-based shell profile can
1981 now simply call rehash upon startup, and full access to all
1985 now simply call rehash upon startup, and full access to all
1982 programs in the user's path is obtained.
1986 programs in the user's path is obtained.
1983
1987
1984 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1988 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1985 functionality is now fully in place. I removed the old dynamic
1989 functionality is now fully in place. I removed the old dynamic
1986 code generation based approach, in favor of a much lighter one
1990 code generation based approach, in favor of a much lighter one
1987 based on a simple dict. The advantage is that this allows me to
1991 based on a simple dict. The advantage is that this allows me to
1988 now have thousands of aliases with negligible cost (unthinkable
1992 now have thousands of aliases with negligible cost (unthinkable
1989 with the old system).
1993 with the old system).
1990
1994
1991 2004-06-19 Fernando Perez <fperez@colorado.edu>
1995 2004-06-19 Fernando Perez <fperez@colorado.edu>
1992
1996
1993 * IPython/iplib.py (__init__): extended MagicCompleter class to
1997 * IPython/iplib.py (__init__): extended MagicCompleter class to
1994 also complete (last in priority) on user aliases.
1998 also complete (last in priority) on user aliases.
1995
1999
1996 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2000 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1997 call to eval.
2001 call to eval.
1998 (ItplNS.__init__): Added a new class which functions like Itpl,
2002 (ItplNS.__init__): Added a new class which functions like Itpl,
1999 but allows configuring the namespace for the evaluation to occur
2003 but allows configuring the namespace for the evaluation to occur
2000 in.
2004 in.
2001
2005
2002 2004-06-18 Fernando Perez <fperez@colorado.edu>
2006 2004-06-18 Fernando Perez <fperez@colorado.edu>
2003
2007
2004 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2008 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2005 better message when 'exit' or 'quit' are typed (a common newbie
2009 better message when 'exit' or 'quit' are typed (a common newbie
2006 confusion).
2010 confusion).
2007
2011
2008 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2012 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2009 check for Windows users.
2013 check for Windows users.
2010
2014
2011 * IPython/iplib.py (InteractiveShell.user_setup): removed
2015 * IPython/iplib.py (InteractiveShell.user_setup): removed
2012 disabling of colors for Windows. I'll test at runtime and issue a
2016 disabling of colors for Windows. I'll test at runtime and issue a
2013 warning if Gary's readline isn't found, as to nudge users to
2017 warning if Gary's readline isn't found, as to nudge users to
2014 download it.
2018 download it.
2015
2019
2016 2004-06-16 Fernando Perez <fperez@colorado.edu>
2020 2004-06-16 Fernando Perez <fperez@colorado.edu>
2017
2021
2018 * IPython/genutils.py (Stream.__init__): changed to print errors
2022 * IPython/genutils.py (Stream.__init__): changed to print errors
2019 to sys.stderr. I had a circular dependency here. Now it's
2023 to sys.stderr. I had a circular dependency here. Now it's
2020 possible to run ipython as IDLE's shell (consider this pre-alpha,
2024 possible to run ipython as IDLE's shell (consider this pre-alpha,
2021 since true stdout things end up in the starting terminal instead
2025 since true stdout things end up in the starting terminal instead
2022 of IDLE's out).
2026 of IDLE's out).
2023
2027
2024 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2028 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2025 users who haven't # updated their prompt_in2 definitions. Remove
2029 users who haven't # updated their prompt_in2 definitions. Remove
2026 eventually.
2030 eventually.
2027 (multiple_replace): added credit to original ASPN recipe.
2031 (multiple_replace): added credit to original ASPN recipe.
2028
2032
2029 2004-06-15 Fernando Perez <fperez@colorado.edu>
2033 2004-06-15 Fernando Perez <fperez@colorado.edu>
2030
2034
2031 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2035 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2032 list of auto-defined aliases.
2036 list of auto-defined aliases.
2033
2037
2034 2004-06-13 Fernando Perez <fperez@colorado.edu>
2038 2004-06-13 Fernando Perez <fperez@colorado.edu>
2035
2039
2036 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2040 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2037 install was really requested (so setup.py can be used for other
2041 install was really requested (so setup.py can be used for other
2038 things under Windows).
2042 things under Windows).
2039
2043
2040 2004-06-10 Fernando Perez <fperez@colorado.edu>
2044 2004-06-10 Fernando Perez <fperez@colorado.edu>
2041
2045
2042 * IPython/Logger.py (Logger.create_log): Manually remove any old
2046 * IPython/Logger.py (Logger.create_log): Manually remove any old
2043 backup, since os.remove may fail under Windows. Fixes bug
2047 backup, since os.remove may fail under Windows. Fixes bug
2044 reported by Thorsten.
2048 reported by Thorsten.
2045
2049
2046 2004-06-09 Fernando Perez <fperez@colorado.edu>
2050 2004-06-09 Fernando Perez <fperez@colorado.edu>
2047
2051
2048 * examples/example-embed.py: fixed all references to %n (replaced
2052 * examples/example-embed.py: fixed all references to %n (replaced
2049 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2053 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2050 for all examples and the manual as well.
2054 for all examples and the manual as well.
2051
2055
2052 2004-06-08 Fernando Perez <fperez@colorado.edu>
2056 2004-06-08 Fernando Perez <fperez@colorado.edu>
2053
2057
2054 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2058 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2055 alignment and color management. All 3 prompt subsystems now
2059 alignment and color management. All 3 prompt subsystems now
2056 inherit from BasePrompt.
2060 inherit from BasePrompt.
2057
2061
2058 * tools/release: updates for windows installer build and tag rpms
2062 * tools/release: updates for windows installer build and tag rpms
2059 with python version (since paths are fixed).
2063 with python version (since paths are fixed).
2060
2064
2061 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2065 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2062 which will become eventually obsolete. Also fixed the default
2066 which will become eventually obsolete. Also fixed the default
2063 prompt_in2 to use \D, so at least new users start with the correct
2067 prompt_in2 to use \D, so at least new users start with the correct
2064 defaults.
2068 defaults.
2065 WARNING: Users with existing ipythonrc files will need to apply
2069 WARNING: Users with existing ipythonrc files will need to apply
2066 this fix manually!
2070 this fix manually!
2067
2071
2068 * setup.py: make windows installer (.exe). This is finally the
2072 * setup.py: make windows installer (.exe). This is finally the
2069 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2073 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2070 which I hadn't included because it required Python 2.3 (or recent
2074 which I hadn't included because it required Python 2.3 (or recent
2071 distutils).
2075 distutils).
2072
2076
2073 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2077 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2074 usage of new '\D' escape.
2078 usage of new '\D' escape.
2075
2079
2076 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2080 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2077 lacks os.getuid())
2081 lacks os.getuid())
2078 (CachedOutput.set_colors): Added the ability to turn coloring
2082 (CachedOutput.set_colors): Added the ability to turn coloring
2079 on/off with @colors even for manually defined prompt colors. It
2083 on/off with @colors even for manually defined prompt colors. It
2080 uses a nasty global, but it works safely and via the generic color
2084 uses a nasty global, but it works safely and via the generic color
2081 handling mechanism.
2085 handling mechanism.
2082 (Prompt2.__init__): Introduced new escape '\D' for continuation
2086 (Prompt2.__init__): Introduced new escape '\D' for continuation
2083 prompts. It represents the counter ('\#') as dots.
2087 prompts. It represents the counter ('\#') as dots.
2084 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2088 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2085 need to update their ipythonrc files and replace '%n' with '\D' in
2089 need to update their ipythonrc files and replace '%n' with '\D' in
2086 their prompt_in2 settings everywhere. Sorry, but there's
2090 their prompt_in2 settings everywhere. Sorry, but there's
2087 otherwise no clean way to get all prompts to properly align. The
2091 otherwise no clean way to get all prompts to properly align. The
2088 ipythonrc shipped with IPython has been updated.
2092 ipythonrc shipped with IPython has been updated.
2089
2093
2090 2004-06-07 Fernando Perez <fperez@colorado.edu>
2094 2004-06-07 Fernando Perez <fperez@colorado.edu>
2091
2095
2092 * setup.py (isfile): Pass local_icons option to latex2html, so the
2096 * setup.py (isfile): Pass local_icons option to latex2html, so the
2093 resulting HTML file is self-contained. Thanks to
2097 resulting HTML file is self-contained. Thanks to
2094 dryice-AT-liu.com.cn for the tip.
2098 dryice-AT-liu.com.cn for the tip.
2095
2099
2096 * pysh.py: I created a new profile 'shell', which implements a
2100 * pysh.py: I created a new profile 'shell', which implements a
2097 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2101 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2098 system shell, nor will it become one anytime soon. It's mainly
2102 system shell, nor will it become one anytime soon. It's mainly
2099 meant to illustrate the use of the new flexible bash-like prompts.
2103 meant to illustrate the use of the new flexible bash-like prompts.
2100 I guess it could be used by hardy souls for true shell management,
2104 I guess it could be used by hardy souls for true shell management,
2101 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2105 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2102 profile. This uses the InterpreterExec extension provided by
2106 profile. This uses the InterpreterExec extension provided by
2103 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2107 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2104
2108
2105 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2109 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2106 auto-align itself with the length of the previous input prompt
2110 auto-align itself with the length of the previous input prompt
2107 (taking into account the invisible color escapes).
2111 (taking into account the invisible color escapes).
2108 (CachedOutput.__init__): Large restructuring of this class. Now
2112 (CachedOutput.__init__): Large restructuring of this class. Now
2109 all three prompts (primary1, primary2, output) are proper objects,
2113 all three prompts (primary1, primary2, output) are proper objects,
2110 managed by the 'parent' CachedOutput class. The code is still a
2114 managed by the 'parent' CachedOutput class. The code is still a
2111 bit hackish (all prompts share state via a pointer to the cache),
2115 bit hackish (all prompts share state via a pointer to the cache),
2112 but it's overall far cleaner than before.
2116 but it's overall far cleaner than before.
2113
2117
2114 * IPython/genutils.py (getoutputerror): modified to add verbose,
2118 * IPython/genutils.py (getoutputerror): modified to add verbose,
2115 debug and header options. This makes the interface of all getout*
2119 debug and header options. This makes the interface of all getout*
2116 functions uniform.
2120 functions uniform.
2117 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2121 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2118
2122
2119 * IPython/Magic.py (Magic.default_option): added a function to
2123 * IPython/Magic.py (Magic.default_option): added a function to
2120 allow registering default options for any magic command. This
2124 allow registering default options for any magic command. This
2121 makes it easy to have profiles which customize the magics globally
2125 makes it easy to have profiles which customize the magics globally
2122 for a certain use. The values set through this function are
2126 for a certain use. The values set through this function are
2123 picked up by the parse_options() method, which all magics should
2127 picked up by the parse_options() method, which all magics should
2124 use to parse their options.
2128 use to parse their options.
2125
2129
2126 * IPython/genutils.py (warn): modified the warnings framework to
2130 * IPython/genutils.py (warn): modified the warnings framework to
2127 use the Term I/O class. I'm trying to slowly unify all of
2131 use the Term I/O class. I'm trying to slowly unify all of
2128 IPython's I/O operations to pass through Term.
2132 IPython's I/O operations to pass through Term.
2129
2133
2130 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2134 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2131 the secondary prompt to correctly match the length of the primary
2135 the secondary prompt to correctly match the length of the primary
2132 one for any prompt. Now multi-line code will properly line up
2136 one for any prompt. Now multi-line code will properly line up
2133 even for path dependent prompts, such as the new ones available
2137 even for path dependent prompts, such as the new ones available
2134 via the prompt_specials.
2138 via the prompt_specials.
2135
2139
2136 2004-06-06 Fernando Perez <fperez@colorado.edu>
2140 2004-06-06 Fernando Perez <fperez@colorado.edu>
2137
2141
2138 * IPython/Prompts.py (prompt_specials): Added the ability to have
2142 * IPython/Prompts.py (prompt_specials): Added the ability to have
2139 bash-like special sequences in the prompts, which get
2143 bash-like special sequences in the prompts, which get
2140 automatically expanded. Things like hostname, current working
2144 automatically expanded. Things like hostname, current working
2141 directory and username are implemented already, but it's easy to
2145 directory and username are implemented already, but it's easy to
2142 add more in the future. Thanks to a patch by W.J. van der Laan
2146 add more in the future. Thanks to a patch by W.J. van der Laan
2143 <gnufnork-AT-hetdigitalegat.nl>
2147 <gnufnork-AT-hetdigitalegat.nl>
2144 (prompt_specials): Added color support for prompt strings, so
2148 (prompt_specials): Added color support for prompt strings, so
2145 users can define arbitrary color setups for their prompts.
2149 users can define arbitrary color setups for their prompts.
2146
2150
2147 2004-06-05 Fernando Perez <fperez@colorado.edu>
2151 2004-06-05 Fernando Perez <fperez@colorado.edu>
2148
2152
2149 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2153 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2150 code to load Gary Bishop's readline and configure it
2154 code to load Gary Bishop's readline and configure it
2151 automatically. Thanks to Gary for help on this.
2155 automatically. Thanks to Gary for help on this.
2152
2156
2153 2004-06-01 Fernando Perez <fperez@colorado.edu>
2157 2004-06-01 Fernando Perez <fperez@colorado.edu>
2154
2158
2155 * IPython/Logger.py (Logger.create_log): fix bug for logging
2159 * IPython/Logger.py (Logger.create_log): fix bug for logging
2156 with no filename (previous fix was incomplete).
2160 with no filename (previous fix was incomplete).
2157
2161
2158 2004-05-25 Fernando Perez <fperez@colorado.edu>
2162 2004-05-25 Fernando Perez <fperez@colorado.edu>
2159
2163
2160 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2164 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2161 parens would get passed to the shell.
2165 parens would get passed to the shell.
2162
2166
2163 2004-05-20 Fernando Perez <fperez@colorado.edu>
2167 2004-05-20 Fernando Perez <fperez@colorado.edu>
2164
2168
2165 * IPython/Magic.py (Magic.magic_prun): changed default profile
2169 * IPython/Magic.py (Magic.magic_prun): changed default profile
2166 sort order to 'time' (the more common profiling need).
2170 sort order to 'time' (the more common profiling need).
2167
2171
2168 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2172 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2169 so that source code shown is guaranteed in sync with the file on
2173 so that source code shown is guaranteed in sync with the file on
2170 disk (also changed in psource). Similar fix to the one for
2174 disk (also changed in psource). Similar fix to the one for
2171 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2175 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2172 <yann.ledu-AT-noos.fr>.
2176 <yann.ledu-AT-noos.fr>.
2173
2177
2174 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2178 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2175 with a single option would not be correctly parsed. Closes
2179 with a single option would not be correctly parsed. Closes
2176 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2180 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2177 introduced in 0.6.0 (on 2004-05-06).
2181 introduced in 0.6.0 (on 2004-05-06).
2178
2182
2179 2004-05-13 *** Released version 0.6.0
2183 2004-05-13 *** Released version 0.6.0
2180
2184
2181 2004-05-13 Fernando Perez <fperez@colorado.edu>
2185 2004-05-13 Fernando Perez <fperez@colorado.edu>
2182
2186
2183 * debian/: Added debian/ directory to CVS, so that debian support
2187 * debian/: Added debian/ directory to CVS, so that debian support
2184 is publicly accessible. The debian package is maintained by Jack
2188 is publicly accessible. The debian package is maintained by Jack
2185 Moffit <jack-AT-xiph.org>.
2189 Moffit <jack-AT-xiph.org>.
2186
2190
2187 * Documentation: included the notes about an ipython-based system
2191 * Documentation: included the notes about an ipython-based system
2188 shell (the hypothetical 'pysh') into the new_design.pdf document,
2192 shell (the hypothetical 'pysh') into the new_design.pdf document,
2189 so that these ideas get distributed to users along with the
2193 so that these ideas get distributed to users along with the
2190 official documentation.
2194 official documentation.
2191
2195
2192 2004-05-10 Fernando Perez <fperez@colorado.edu>
2196 2004-05-10 Fernando Perez <fperez@colorado.edu>
2193
2197
2194 * IPython/Logger.py (Logger.create_log): fix recently introduced
2198 * IPython/Logger.py (Logger.create_log): fix recently introduced
2195 bug (misindented line) where logstart would fail when not given an
2199 bug (misindented line) where logstart would fail when not given an
2196 explicit filename.
2200 explicit filename.
2197
2201
2198 2004-05-09 Fernando Perez <fperez@colorado.edu>
2202 2004-05-09 Fernando Perez <fperez@colorado.edu>
2199
2203
2200 * IPython/Magic.py (Magic.parse_options): skip system call when
2204 * IPython/Magic.py (Magic.parse_options): skip system call when
2201 there are no options to look for. Faster, cleaner for the common
2205 there are no options to look for. Faster, cleaner for the common
2202 case.
2206 case.
2203
2207
2204 * Documentation: many updates to the manual: describing Windows
2208 * Documentation: many updates to the manual: describing Windows
2205 support better, Gnuplot updates, credits, misc small stuff. Also
2209 support better, Gnuplot updates, credits, misc small stuff. Also
2206 updated the new_design doc a bit.
2210 updated the new_design doc a bit.
2207
2211
2208 2004-05-06 *** Released version 0.6.0.rc1
2212 2004-05-06 *** Released version 0.6.0.rc1
2209
2213
2210 2004-05-06 Fernando Perez <fperez@colorado.edu>
2214 2004-05-06 Fernando Perez <fperez@colorado.edu>
2211
2215
2212 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2216 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2213 operations to use the vastly more efficient list/''.join() method.
2217 operations to use the vastly more efficient list/''.join() method.
2214 (FormattedTB.text): Fix
2218 (FormattedTB.text): Fix
2215 http://www.scipy.net/roundup/ipython/issue12 - exception source
2219 http://www.scipy.net/roundup/ipython/issue12 - exception source
2216 extract not updated after reload. Thanks to Mike Salib
2220 extract not updated after reload. Thanks to Mike Salib
2217 <msalib-AT-mit.edu> for pinning the source of the problem.
2221 <msalib-AT-mit.edu> for pinning the source of the problem.
2218 Fortunately, the solution works inside ipython and doesn't require
2222 Fortunately, the solution works inside ipython and doesn't require
2219 any changes to python proper.
2223 any changes to python proper.
2220
2224
2221 * IPython/Magic.py (Magic.parse_options): Improved to process the
2225 * IPython/Magic.py (Magic.parse_options): Improved to process the
2222 argument list as a true shell would (by actually using the
2226 argument list as a true shell would (by actually using the
2223 underlying system shell). This way, all @magics automatically get
2227 underlying system shell). This way, all @magics automatically get
2224 shell expansion for variables. Thanks to a comment by Alex
2228 shell expansion for variables. Thanks to a comment by Alex
2225 Schmolck.
2229 Schmolck.
2226
2230
2227 2004-04-04 Fernando Perez <fperez@colorado.edu>
2231 2004-04-04 Fernando Perez <fperez@colorado.edu>
2228
2232
2229 * IPython/iplib.py (InteractiveShell.interact): Added a special
2233 * IPython/iplib.py (InteractiveShell.interact): Added a special
2230 trap for a debugger quit exception, which is basically impossible
2234 trap for a debugger quit exception, which is basically impossible
2231 to handle by normal mechanisms, given what pdb does to the stack.
2235 to handle by normal mechanisms, given what pdb does to the stack.
2232 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2236 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2233
2237
2234 2004-04-03 Fernando Perez <fperez@colorado.edu>
2238 2004-04-03 Fernando Perez <fperez@colorado.edu>
2235
2239
2236 * IPython/genutils.py (Term): Standardized the names of the Term
2240 * IPython/genutils.py (Term): Standardized the names of the Term
2237 class streams to cin/cout/cerr, following C++ naming conventions
2241 class streams to cin/cout/cerr, following C++ naming conventions
2238 (I can't use in/out/err because 'in' is not a valid attribute
2242 (I can't use in/out/err because 'in' is not a valid attribute
2239 name).
2243 name).
2240
2244
2241 * IPython/iplib.py (InteractiveShell.interact): don't increment
2245 * IPython/iplib.py (InteractiveShell.interact): don't increment
2242 the prompt if there's no user input. By Daniel 'Dang' Griffith
2246 the prompt if there's no user input. By Daniel 'Dang' Griffith
2243 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2247 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2244 Francois Pinard.
2248 Francois Pinard.
2245
2249
2246 2004-04-02 Fernando Perez <fperez@colorado.edu>
2250 2004-04-02 Fernando Perez <fperez@colorado.edu>
2247
2251
2248 * IPython/genutils.py (Stream.__init__): Modified to survive at
2252 * IPython/genutils.py (Stream.__init__): Modified to survive at
2249 least importing in contexts where stdin/out/err aren't true file
2253 least importing in contexts where stdin/out/err aren't true file
2250 objects, such as PyCrust (they lack fileno() and mode). However,
2254 objects, such as PyCrust (they lack fileno() and mode). However,
2251 the recovery facilities which rely on these things existing will
2255 the recovery facilities which rely on these things existing will
2252 not work.
2256 not work.
2253
2257
2254 2004-04-01 Fernando Perez <fperez@colorado.edu>
2258 2004-04-01 Fernando Perez <fperez@colorado.edu>
2255
2259
2256 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2260 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2257 use the new getoutputerror() function, so it properly
2261 use the new getoutputerror() function, so it properly
2258 distinguishes stdout/err.
2262 distinguishes stdout/err.
2259
2263
2260 * IPython/genutils.py (getoutputerror): added a function to
2264 * IPython/genutils.py (getoutputerror): added a function to
2261 capture separately the standard output and error of a command.
2265 capture separately the standard output and error of a command.
2262 After a comment from dang on the mailing lists. This code is
2266 After a comment from dang on the mailing lists. This code is
2263 basically a modified version of commands.getstatusoutput(), from
2267 basically a modified version of commands.getstatusoutput(), from
2264 the standard library.
2268 the standard library.
2265
2269
2266 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2270 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2267 '!!' as a special syntax (shorthand) to access @sx.
2271 '!!' as a special syntax (shorthand) to access @sx.
2268
2272
2269 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2273 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2270 command and return its output as a list split on '\n'.
2274 command and return its output as a list split on '\n'.
2271
2275
2272 2004-03-31 Fernando Perez <fperez@colorado.edu>
2276 2004-03-31 Fernando Perez <fperez@colorado.edu>
2273
2277
2274 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2278 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2275 method to dictionaries used as FakeModule instances if they lack
2279 method to dictionaries used as FakeModule instances if they lack
2276 it. At least pydoc in python2.3 breaks for runtime-defined
2280 it. At least pydoc in python2.3 breaks for runtime-defined
2277 functions without this hack. At some point I need to _really_
2281 functions without this hack. At some point I need to _really_
2278 understand what FakeModule is doing, because it's a gross hack.
2282 understand what FakeModule is doing, because it's a gross hack.
2279 But it solves Arnd's problem for now...
2283 But it solves Arnd's problem for now...
2280
2284
2281 2004-02-27 Fernando Perez <fperez@colorado.edu>
2285 2004-02-27 Fernando Perez <fperez@colorado.edu>
2282
2286
2283 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2287 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2284 mode would behave erratically. Also increased the number of
2288 mode would behave erratically. Also increased the number of
2285 possible logs in rotate mod to 999. Thanks to Rod Holland
2289 possible logs in rotate mod to 999. Thanks to Rod Holland
2286 <rhh@StructureLABS.com> for the report and fixes.
2290 <rhh@StructureLABS.com> for the report and fixes.
2287
2291
2288 2004-02-26 Fernando Perez <fperez@colorado.edu>
2292 2004-02-26 Fernando Perez <fperez@colorado.edu>
2289
2293
2290 * IPython/genutils.py (page): Check that the curses module really
2294 * IPython/genutils.py (page): Check that the curses module really
2291 has the initscr attribute before trying to use it. For some
2295 has the initscr attribute before trying to use it. For some
2292 reason, the Solaris curses module is missing this. I think this
2296 reason, the Solaris curses module is missing this. I think this
2293 should be considered a Solaris python bug, but I'm not sure.
2297 should be considered a Solaris python bug, but I'm not sure.
2294
2298
2295 2004-01-17 Fernando Perez <fperez@colorado.edu>
2299 2004-01-17 Fernando Perez <fperez@colorado.edu>
2296
2300
2297 * IPython/genutils.py (Stream.__init__): Changes to try to make
2301 * IPython/genutils.py (Stream.__init__): Changes to try to make
2298 ipython robust against stdin/out/err being closed by the user.
2302 ipython robust against stdin/out/err being closed by the user.
2299 This is 'user error' (and blocks a normal python session, at least
2303 This is 'user error' (and blocks a normal python session, at least
2300 the stdout case). However, Ipython should be able to survive such
2304 the stdout case). However, Ipython should be able to survive such
2301 instances of abuse as gracefully as possible. To simplify the
2305 instances of abuse as gracefully as possible. To simplify the
2302 coding and maintain compatibility with Gary Bishop's Term
2306 coding and maintain compatibility with Gary Bishop's Term
2303 contributions, I've made use of classmethods for this. I think
2307 contributions, I've made use of classmethods for this. I think
2304 this introduces a dependency on python 2.2.
2308 this introduces a dependency on python 2.2.
2305
2309
2306 2004-01-13 Fernando Perez <fperez@colorado.edu>
2310 2004-01-13 Fernando Perez <fperez@colorado.edu>
2307
2311
2308 * IPython/numutils.py (exp_safe): simplified the code a bit and
2312 * IPython/numutils.py (exp_safe): simplified the code a bit and
2309 removed the need for importing the kinds module altogether.
2313 removed the need for importing the kinds module altogether.
2310
2314
2311 2004-01-06 Fernando Perez <fperez@colorado.edu>
2315 2004-01-06 Fernando Perez <fperez@colorado.edu>
2312
2316
2313 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2317 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2314 a magic function instead, after some community feedback. No
2318 a magic function instead, after some community feedback. No
2315 special syntax will exist for it, but its name is deliberately
2319 special syntax will exist for it, but its name is deliberately
2316 very short.
2320 very short.
2317
2321
2318 2003-12-20 Fernando Perez <fperez@colorado.edu>
2322 2003-12-20 Fernando Perez <fperez@colorado.edu>
2319
2323
2320 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2324 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2321 new functionality, to automagically assign the result of a shell
2325 new functionality, to automagically assign the result of a shell
2322 command to a variable. I'll solicit some community feedback on
2326 command to a variable. I'll solicit some community feedback on
2323 this before making it permanent.
2327 this before making it permanent.
2324
2328
2325 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2329 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2326 requested about callables for which inspect couldn't obtain a
2330 requested about callables for which inspect couldn't obtain a
2327 proper argspec. Thanks to a crash report sent by Etienne
2331 proper argspec. Thanks to a crash report sent by Etienne
2328 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2332 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2329
2333
2330 2003-12-09 Fernando Perez <fperez@colorado.edu>
2334 2003-12-09 Fernando Perez <fperez@colorado.edu>
2331
2335
2332 * IPython/genutils.py (page): patch for the pager to work across
2336 * IPython/genutils.py (page): patch for the pager to work across
2333 various versions of Windows. By Gary Bishop.
2337 various versions of Windows. By Gary Bishop.
2334
2338
2335 2003-12-04 Fernando Perez <fperez@colorado.edu>
2339 2003-12-04 Fernando Perez <fperez@colorado.edu>
2336
2340
2337 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2341 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2338 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2342 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2339 While I tested this and it looks ok, there may still be corner
2343 While I tested this and it looks ok, there may still be corner
2340 cases I've missed.
2344 cases I've missed.
2341
2345
2342 2003-12-01 Fernando Perez <fperez@colorado.edu>
2346 2003-12-01 Fernando Perez <fperez@colorado.edu>
2343
2347
2344 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2348 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2345 where a line like 'p,q=1,2' would fail because the automagic
2349 where a line like 'p,q=1,2' would fail because the automagic
2346 system would be triggered for @p.
2350 system would be triggered for @p.
2347
2351
2348 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2352 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2349 cleanups, code unmodified.
2353 cleanups, code unmodified.
2350
2354
2351 * IPython/genutils.py (Term): added a class for IPython to handle
2355 * IPython/genutils.py (Term): added a class for IPython to handle
2352 output. In most cases it will just be a proxy for stdout/err, but
2356 output. In most cases it will just be a proxy for stdout/err, but
2353 having this allows modifications to be made for some platforms,
2357 having this allows modifications to be made for some platforms,
2354 such as handling color escapes under Windows. All of this code
2358 such as handling color escapes under Windows. All of this code
2355 was contributed by Gary Bishop, with minor modifications by me.
2359 was contributed by Gary Bishop, with minor modifications by me.
2356 The actual changes affect many files.
2360 The actual changes affect many files.
2357
2361
2358 2003-11-30 Fernando Perez <fperez@colorado.edu>
2362 2003-11-30 Fernando Perez <fperez@colorado.edu>
2359
2363
2360 * IPython/iplib.py (file_matches): new completion code, courtesy
2364 * IPython/iplib.py (file_matches): new completion code, courtesy
2361 of Jeff Collins. This enables filename completion again under
2365 of Jeff Collins. This enables filename completion again under
2362 python 2.3, which disabled it at the C level.
2366 python 2.3, which disabled it at the C level.
2363
2367
2364 2003-11-11 Fernando Perez <fperez@colorado.edu>
2368 2003-11-11 Fernando Perez <fperez@colorado.edu>
2365
2369
2366 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2370 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2367 for Numeric.array(map(...)), but often convenient.
2371 for Numeric.array(map(...)), but often convenient.
2368
2372
2369 2003-11-05 Fernando Perez <fperez@colorado.edu>
2373 2003-11-05 Fernando Perez <fperez@colorado.edu>
2370
2374
2371 * IPython/numutils.py (frange): Changed a call from int() to
2375 * IPython/numutils.py (frange): Changed a call from int() to
2372 int(round()) to prevent a problem reported with arange() in the
2376 int(round()) to prevent a problem reported with arange() in the
2373 numpy list.
2377 numpy list.
2374
2378
2375 2003-10-06 Fernando Perez <fperez@colorado.edu>
2379 2003-10-06 Fernando Perez <fperez@colorado.edu>
2376
2380
2377 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2381 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2378 prevent crashes if sys lacks an argv attribute (it happens with
2382 prevent crashes if sys lacks an argv attribute (it happens with
2379 embedded interpreters which build a bare-bones sys module).
2383 embedded interpreters which build a bare-bones sys module).
2380 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2384 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2381
2385
2382 2003-09-24 Fernando Perez <fperez@colorado.edu>
2386 2003-09-24 Fernando Perez <fperez@colorado.edu>
2383
2387
2384 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2388 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2385 to protect against poorly written user objects where __getattr__
2389 to protect against poorly written user objects where __getattr__
2386 raises exceptions other than AttributeError. Thanks to a bug
2390 raises exceptions other than AttributeError. Thanks to a bug
2387 report by Oliver Sander <osander-AT-gmx.de>.
2391 report by Oliver Sander <osander-AT-gmx.de>.
2388
2392
2389 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2393 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2390 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2394 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2391
2395
2392 2003-09-09 Fernando Perez <fperez@colorado.edu>
2396 2003-09-09 Fernando Perez <fperez@colorado.edu>
2393
2397
2394 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2398 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2395 unpacking a list whith a callable as first element would
2399 unpacking a list whith a callable as first element would
2396 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2400 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2397 Collins.
2401 Collins.
2398
2402
2399 2003-08-25 *** Released version 0.5.0
2403 2003-08-25 *** Released version 0.5.0
2400
2404
2401 2003-08-22 Fernando Perez <fperez@colorado.edu>
2405 2003-08-22 Fernando Perez <fperez@colorado.edu>
2402
2406
2403 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2407 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2404 improperly defined user exceptions. Thanks to feedback from Mark
2408 improperly defined user exceptions. Thanks to feedback from Mark
2405 Russell <mrussell-AT-verio.net>.
2409 Russell <mrussell-AT-verio.net>.
2406
2410
2407 2003-08-20 Fernando Perez <fperez@colorado.edu>
2411 2003-08-20 Fernando Perez <fperez@colorado.edu>
2408
2412
2409 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2413 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2410 printing so that it would print multi-line string forms starting
2414 printing so that it would print multi-line string forms starting
2411 with a new line. This way the formatting is better respected for
2415 with a new line. This way the formatting is better respected for
2412 objects which work hard to make nice string forms.
2416 objects which work hard to make nice string forms.
2413
2417
2414 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2418 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2415 autocall would overtake data access for objects with both
2419 autocall would overtake data access for objects with both
2416 __getitem__ and __call__.
2420 __getitem__ and __call__.
2417
2421
2418 2003-08-19 *** Released version 0.5.0-rc1
2422 2003-08-19 *** Released version 0.5.0-rc1
2419
2423
2420 2003-08-19 Fernando Perez <fperez@colorado.edu>
2424 2003-08-19 Fernando Perez <fperez@colorado.edu>
2421
2425
2422 * IPython/deep_reload.py (load_tail): single tiny change here
2426 * IPython/deep_reload.py (load_tail): single tiny change here
2423 seems to fix the long-standing bug of dreload() failing to work
2427 seems to fix the long-standing bug of dreload() failing to work
2424 for dotted names. But this module is pretty tricky, so I may have
2428 for dotted names. But this module is pretty tricky, so I may have
2425 missed some subtlety. Needs more testing!.
2429 missed some subtlety. Needs more testing!.
2426
2430
2427 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2431 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2428 exceptions which have badly implemented __str__ methods.
2432 exceptions which have badly implemented __str__ methods.
2429 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2433 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2430 which I've been getting reports about from Python 2.3 users. I
2434 which I've been getting reports about from Python 2.3 users. I
2431 wish I had a simple test case to reproduce the problem, so I could
2435 wish I had a simple test case to reproduce the problem, so I could
2432 either write a cleaner workaround or file a bug report if
2436 either write a cleaner workaround or file a bug report if
2433 necessary.
2437 necessary.
2434
2438
2435 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2439 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2436 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2440 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2437 a bug report by Tjabo Kloppenburg.
2441 a bug report by Tjabo Kloppenburg.
2438
2442
2439 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2443 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2440 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2444 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2441 seems rather unstable. Thanks to a bug report by Tjabo
2445 seems rather unstable. Thanks to a bug report by Tjabo
2442 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2446 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2443
2447
2444 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2448 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2445 this out soon because of the critical fixes in the inner loop for
2449 this out soon because of the critical fixes in the inner loop for
2446 generators.
2450 generators.
2447
2451
2448 * IPython/Magic.py (Magic.getargspec): removed. This (and
2452 * IPython/Magic.py (Magic.getargspec): removed. This (and
2449 _get_def) have been obsoleted by OInspect for a long time, I
2453 _get_def) have been obsoleted by OInspect for a long time, I
2450 hadn't noticed that they were dead code.
2454 hadn't noticed that they were dead code.
2451 (Magic._ofind): restored _ofind functionality for a few literals
2455 (Magic._ofind): restored _ofind functionality for a few literals
2452 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2456 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2453 for things like "hello".capitalize?, since that would require a
2457 for things like "hello".capitalize?, since that would require a
2454 potentially dangerous eval() again.
2458 potentially dangerous eval() again.
2455
2459
2456 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2460 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2457 logic a bit more to clean up the escapes handling and minimize the
2461 logic a bit more to clean up the escapes handling and minimize the
2458 use of _ofind to only necessary cases. The interactive 'feel' of
2462 use of _ofind to only necessary cases. The interactive 'feel' of
2459 IPython should have improved quite a bit with the changes in
2463 IPython should have improved quite a bit with the changes in
2460 _prefilter and _ofind (besides being far safer than before).
2464 _prefilter and _ofind (besides being far safer than before).
2461
2465
2462 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2466 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2463 obscure, never reported). Edit would fail to find the object to
2467 obscure, never reported). Edit would fail to find the object to
2464 edit under some circumstances.
2468 edit under some circumstances.
2465 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2469 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2466 which were causing double-calling of generators. Those eval calls
2470 which were causing double-calling of generators. Those eval calls
2467 were _very_ dangerous, since code with side effects could be
2471 were _very_ dangerous, since code with side effects could be
2468 triggered. As they say, 'eval is evil'... These were the
2472 triggered. As they say, 'eval is evil'... These were the
2469 nastiest evals in IPython. Besides, _ofind is now far simpler,
2473 nastiest evals in IPython. Besides, _ofind is now far simpler,
2470 and it should also be quite a bit faster. Its use of inspect is
2474 and it should also be quite a bit faster. Its use of inspect is
2471 also safer, so perhaps some of the inspect-related crashes I've
2475 also safer, so perhaps some of the inspect-related crashes I've
2472 seen lately with Python 2.3 might be taken care of. That will
2476 seen lately with Python 2.3 might be taken care of. That will
2473 need more testing.
2477 need more testing.
2474
2478
2475 2003-08-17 Fernando Perez <fperez@colorado.edu>
2479 2003-08-17 Fernando Perez <fperez@colorado.edu>
2476
2480
2477 * IPython/iplib.py (InteractiveShell._prefilter): significant
2481 * IPython/iplib.py (InteractiveShell._prefilter): significant
2478 simplifications to the logic for handling user escapes. Faster
2482 simplifications to the logic for handling user escapes. Faster
2479 and simpler code.
2483 and simpler code.
2480
2484
2481 2003-08-14 Fernando Perez <fperez@colorado.edu>
2485 2003-08-14 Fernando Perez <fperez@colorado.edu>
2482
2486
2483 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2487 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2484 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2488 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2485 but it should be quite a bit faster. And the recursive version
2489 but it should be quite a bit faster. And the recursive version
2486 generated O(log N) intermediate storage for all rank>1 arrays,
2490 generated O(log N) intermediate storage for all rank>1 arrays,
2487 even if they were contiguous.
2491 even if they were contiguous.
2488 (l1norm): Added this function.
2492 (l1norm): Added this function.
2489 (norm): Added this function for arbitrary norms (including
2493 (norm): Added this function for arbitrary norms (including
2490 l-infinity). l1 and l2 are still special cases for convenience
2494 l-infinity). l1 and l2 are still special cases for convenience
2491 and speed.
2495 and speed.
2492
2496
2493 2003-08-03 Fernando Perez <fperez@colorado.edu>
2497 2003-08-03 Fernando Perez <fperez@colorado.edu>
2494
2498
2495 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2499 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2496 exceptions, which now raise PendingDeprecationWarnings in Python
2500 exceptions, which now raise PendingDeprecationWarnings in Python
2497 2.3. There were some in Magic and some in Gnuplot2.
2501 2.3. There were some in Magic and some in Gnuplot2.
2498
2502
2499 2003-06-30 Fernando Perez <fperez@colorado.edu>
2503 2003-06-30 Fernando Perez <fperez@colorado.edu>
2500
2504
2501 * IPython/genutils.py (page): modified to call curses only for
2505 * IPython/genutils.py (page): modified to call curses only for
2502 terminals where TERM=='xterm'. After problems under many other
2506 terminals where TERM=='xterm'. After problems under many other
2503 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2507 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2504
2508
2505 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2509 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2506 would be triggered when readline was absent. This was just an old
2510 would be triggered when readline was absent. This was just an old
2507 debugging statement I'd forgotten to take out.
2511 debugging statement I'd forgotten to take out.
2508
2512
2509 2003-06-20 Fernando Perez <fperez@colorado.edu>
2513 2003-06-20 Fernando Perez <fperez@colorado.edu>
2510
2514
2511 * IPython/genutils.py (clock): modified to return only user time
2515 * IPython/genutils.py (clock): modified to return only user time
2512 (not counting system time), after a discussion on scipy. While
2516 (not counting system time), after a discussion on scipy. While
2513 system time may be a useful quantity occasionally, it may much
2517 system time may be a useful quantity occasionally, it may much
2514 more easily be skewed by occasional swapping or other similar
2518 more easily be skewed by occasional swapping or other similar
2515 activity.
2519 activity.
2516
2520
2517 2003-06-05 Fernando Perez <fperez@colorado.edu>
2521 2003-06-05 Fernando Perez <fperez@colorado.edu>
2518
2522
2519 * IPython/numutils.py (identity): new function, for building
2523 * IPython/numutils.py (identity): new function, for building
2520 arbitrary rank Kronecker deltas (mostly backwards compatible with
2524 arbitrary rank Kronecker deltas (mostly backwards compatible with
2521 Numeric.identity)
2525 Numeric.identity)
2522
2526
2523 2003-06-03 Fernando Perez <fperez@colorado.edu>
2527 2003-06-03 Fernando Perez <fperez@colorado.edu>
2524
2528
2525 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2529 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2526 arguments passed to magics with spaces, to allow trailing '\' to
2530 arguments passed to magics with spaces, to allow trailing '\' to
2527 work normally (mainly for Windows users).
2531 work normally (mainly for Windows users).
2528
2532
2529 2003-05-29 Fernando Perez <fperez@colorado.edu>
2533 2003-05-29 Fernando Perez <fperez@colorado.edu>
2530
2534
2531 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2535 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2532 instead of pydoc.help. This fixes a bizarre behavior where
2536 instead of pydoc.help. This fixes a bizarre behavior where
2533 printing '%s' % locals() would trigger the help system. Now
2537 printing '%s' % locals() would trigger the help system. Now
2534 ipython behaves like normal python does.
2538 ipython behaves like normal python does.
2535
2539
2536 Note that if one does 'from pydoc import help', the bizarre
2540 Note that if one does 'from pydoc import help', the bizarre
2537 behavior returns, but this will also happen in normal python, so
2541 behavior returns, but this will also happen in normal python, so
2538 it's not an ipython bug anymore (it has to do with how pydoc.help
2542 it's not an ipython bug anymore (it has to do with how pydoc.help
2539 is implemented).
2543 is implemented).
2540
2544
2541 2003-05-22 Fernando Perez <fperez@colorado.edu>
2545 2003-05-22 Fernando Perez <fperez@colorado.edu>
2542
2546
2543 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2547 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2544 return [] instead of None when nothing matches, also match to end
2548 return [] instead of None when nothing matches, also match to end
2545 of line. Patch by Gary Bishop.
2549 of line. Patch by Gary Bishop.
2546
2550
2547 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2551 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2548 protection as before, for files passed on the command line. This
2552 protection as before, for files passed on the command line. This
2549 prevents the CrashHandler from kicking in if user files call into
2553 prevents the CrashHandler from kicking in if user files call into
2550 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2554 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2551 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2555 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2552
2556
2553 2003-05-20 *** Released version 0.4.0
2557 2003-05-20 *** Released version 0.4.0
2554
2558
2555 2003-05-20 Fernando Perez <fperez@colorado.edu>
2559 2003-05-20 Fernando Perez <fperez@colorado.edu>
2556
2560
2557 * setup.py: added support for manpages. It's a bit hackish b/c of
2561 * setup.py: added support for manpages. It's a bit hackish b/c of
2558 a bug in the way the bdist_rpm distutils target handles gzipped
2562 a bug in the way the bdist_rpm distutils target handles gzipped
2559 manpages, but it works. After a patch by Jack.
2563 manpages, but it works. After a patch by Jack.
2560
2564
2561 2003-05-19 Fernando Perez <fperez@colorado.edu>
2565 2003-05-19 Fernando Perez <fperez@colorado.edu>
2562
2566
2563 * IPython/numutils.py: added a mockup of the kinds module, since
2567 * IPython/numutils.py: added a mockup of the kinds module, since
2564 it was recently removed from Numeric. This way, numutils will
2568 it was recently removed from Numeric. This way, numutils will
2565 work for all users even if they are missing kinds.
2569 work for all users even if they are missing kinds.
2566
2570
2567 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2571 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2568 failure, which can occur with SWIG-wrapped extensions. After a
2572 failure, which can occur with SWIG-wrapped extensions. After a
2569 crash report from Prabhu.
2573 crash report from Prabhu.
2570
2574
2571 2003-05-16 Fernando Perez <fperez@colorado.edu>
2575 2003-05-16 Fernando Perez <fperez@colorado.edu>
2572
2576
2573 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2577 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2574 protect ipython from user code which may call directly
2578 protect ipython from user code which may call directly
2575 sys.excepthook (this looks like an ipython crash to the user, even
2579 sys.excepthook (this looks like an ipython crash to the user, even
2576 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2580 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2577 This is especially important to help users of WxWindows, but may
2581 This is especially important to help users of WxWindows, but may
2578 also be useful in other cases.
2582 also be useful in other cases.
2579
2583
2580 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2584 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2581 an optional tb_offset to be specified, and to preserve exception
2585 an optional tb_offset to be specified, and to preserve exception
2582 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2586 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2583
2587
2584 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2588 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2585
2589
2586 2003-05-15 Fernando Perez <fperez@colorado.edu>
2590 2003-05-15 Fernando Perez <fperez@colorado.edu>
2587
2591
2588 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2592 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2589 installing for a new user under Windows.
2593 installing for a new user under Windows.
2590
2594
2591 2003-05-12 Fernando Perez <fperez@colorado.edu>
2595 2003-05-12 Fernando Perez <fperez@colorado.edu>
2592
2596
2593 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2597 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2594 handler for Emacs comint-based lines. Currently it doesn't do
2598 handler for Emacs comint-based lines. Currently it doesn't do
2595 much (but importantly, it doesn't update the history cache). In
2599 much (but importantly, it doesn't update the history cache). In
2596 the future it may be expanded if Alex needs more functionality
2600 the future it may be expanded if Alex needs more functionality
2597 there.
2601 there.
2598
2602
2599 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2603 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2600 info to crash reports.
2604 info to crash reports.
2601
2605
2602 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2606 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2603 just like Python's -c. Also fixed crash with invalid -color
2607 just like Python's -c. Also fixed crash with invalid -color
2604 option value at startup. Thanks to Will French
2608 option value at startup. Thanks to Will French
2605 <wfrench-AT-bestweb.net> for the bug report.
2609 <wfrench-AT-bestweb.net> for the bug report.
2606
2610
2607 2003-05-09 Fernando Perez <fperez@colorado.edu>
2611 2003-05-09 Fernando Perez <fperez@colorado.edu>
2608
2612
2609 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2613 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2610 to EvalDict (it's a mapping, after all) and simplified its code
2614 to EvalDict (it's a mapping, after all) and simplified its code
2611 quite a bit, after a nice discussion on c.l.py where Gustavo
2615 quite a bit, after a nice discussion on c.l.py where Gustavo
2612 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2616 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2613
2617
2614 2003-04-30 Fernando Perez <fperez@colorado.edu>
2618 2003-04-30 Fernando Perez <fperez@colorado.edu>
2615
2619
2616 * IPython/genutils.py (timings_out): modified it to reduce its
2620 * IPython/genutils.py (timings_out): modified it to reduce its
2617 overhead in the common reps==1 case.
2621 overhead in the common reps==1 case.
2618
2622
2619 2003-04-29 Fernando Perez <fperez@colorado.edu>
2623 2003-04-29 Fernando Perez <fperez@colorado.edu>
2620
2624
2621 * IPython/genutils.py (timings_out): Modified to use the resource
2625 * IPython/genutils.py (timings_out): Modified to use the resource
2622 module, which avoids the wraparound problems of time.clock().
2626 module, which avoids the wraparound problems of time.clock().
2623
2627
2624 2003-04-17 *** Released version 0.2.15pre4
2628 2003-04-17 *** Released version 0.2.15pre4
2625
2629
2626 2003-04-17 Fernando Perez <fperez@colorado.edu>
2630 2003-04-17 Fernando Perez <fperez@colorado.edu>
2627
2631
2628 * setup.py (scriptfiles): Split windows-specific stuff over to a
2632 * setup.py (scriptfiles): Split windows-specific stuff over to a
2629 separate file, in an attempt to have a Windows GUI installer.
2633 separate file, in an attempt to have a Windows GUI installer.
2630 That didn't work, but part of the groundwork is done.
2634 That didn't work, but part of the groundwork is done.
2631
2635
2632 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2636 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2633 indent/unindent with 4 spaces. Particularly useful in combination
2637 indent/unindent with 4 spaces. Particularly useful in combination
2634 with the new auto-indent option.
2638 with the new auto-indent option.
2635
2639
2636 2003-04-16 Fernando Perez <fperez@colorado.edu>
2640 2003-04-16 Fernando Perez <fperez@colorado.edu>
2637
2641
2638 * IPython/Magic.py: various replacements of self.rc for
2642 * IPython/Magic.py: various replacements of self.rc for
2639 self.shell.rc. A lot more remains to be done to fully disentangle
2643 self.shell.rc. A lot more remains to be done to fully disentangle
2640 this class from the main Shell class.
2644 this class from the main Shell class.
2641
2645
2642 * IPython/GnuplotRuntime.py: added checks for mouse support so
2646 * IPython/GnuplotRuntime.py: added checks for mouse support so
2643 that we don't try to enable it if the current gnuplot doesn't
2647 that we don't try to enable it if the current gnuplot doesn't
2644 really support it. Also added checks so that we don't try to
2648 really support it. Also added checks so that we don't try to
2645 enable persist under Windows (where Gnuplot doesn't recognize the
2649 enable persist under Windows (where Gnuplot doesn't recognize the
2646 option).
2650 option).
2647
2651
2648 * IPython/iplib.py (InteractiveShell.interact): Added optional
2652 * IPython/iplib.py (InteractiveShell.interact): Added optional
2649 auto-indenting code, after a patch by King C. Shu
2653 auto-indenting code, after a patch by King C. Shu
2650 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2654 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2651 get along well with pasting indented code. If I ever figure out
2655 get along well with pasting indented code. If I ever figure out
2652 how to make that part go well, it will become on by default.
2656 how to make that part go well, it will become on by default.
2653
2657
2654 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2658 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2655 crash ipython if there was an unmatched '%' in the user's prompt
2659 crash ipython if there was an unmatched '%' in the user's prompt
2656 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2660 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2657
2661
2658 * IPython/iplib.py (InteractiveShell.interact): removed the
2662 * IPython/iplib.py (InteractiveShell.interact): removed the
2659 ability to ask the user whether he wants to crash or not at the
2663 ability to ask the user whether he wants to crash or not at the
2660 'last line' exception handler. Calling functions at that point
2664 'last line' exception handler. Calling functions at that point
2661 changes the stack, and the error reports would have incorrect
2665 changes the stack, and the error reports would have incorrect
2662 tracebacks.
2666 tracebacks.
2663
2667
2664 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2668 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2665 pass through a peger a pretty-printed form of any object. After a
2669 pass through a peger a pretty-printed form of any object. After a
2666 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2670 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2667
2671
2668 2003-04-14 Fernando Perez <fperez@colorado.edu>
2672 2003-04-14 Fernando Perez <fperez@colorado.edu>
2669
2673
2670 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2674 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2671 all files in ~ would be modified at first install (instead of
2675 all files in ~ would be modified at first install (instead of
2672 ~/.ipython). This could be potentially disastrous, as the
2676 ~/.ipython). This could be potentially disastrous, as the
2673 modification (make line-endings native) could damage binary files.
2677 modification (make line-endings native) could damage binary files.
2674
2678
2675 2003-04-10 Fernando Perez <fperez@colorado.edu>
2679 2003-04-10 Fernando Perez <fperez@colorado.edu>
2676
2680
2677 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2681 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2678 handle only lines which are invalid python. This now means that
2682 handle only lines which are invalid python. This now means that
2679 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2683 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2680 for the bug report.
2684 for the bug report.
2681
2685
2682 2003-04-01 Fernando Perez <fperez@colorado.edu>
2686 2003-04-01 Fernando Perez <fperez@colorado.edu>
2683
2687
2684 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2688 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2685 where failing to set sys.last_traceback would crash pdb.pm().
2689 where failing to set sys.last_traceback would crash pdb.pm().
2686 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2690 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2687 report.
2691 report.
2688
2692
2689 2003-03-25 Fernando Perez <fperez@colorado.edu>
2693 2003-03-25 Fernando Perez <fperez@colorado.edu>
2690
2694
2691 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2695 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2692 before printing it (it had a lot of spurious blank lines at the
2696 before printing it (it had a lot of spurious blank lines at the
2693 end).
2697 end).
2694
2698
2695 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2699 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2696 output would be sent 21 times! Obviously people don't use this
2700 output would be sent 21 times! Obviously people don't use this
2697 too often, or I would have heard about it.
2701 too often, or I would have heard about it.
2698
2702
2699 2003-03-24 Fernando Perez <fperez@colorado.edu>
2703 2003-03-24 Fernando Perez <fperez@colorado.edu>
2700
2704
2701 * setup.py (scriptfiles): renamed the data_files parameter from
2705 * setup.py (scriptfiles): renamed the data_files parameter from
2702 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2706 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2703 for the patch.
2707 for the patch.
2704
2708
2705 2003-03-20 Fernando Perez <fperez@colorado.edu>
2709 2003-03-20 Fernando Perez <fperez@colorado.edu>
2706
2710
2707 * IPython/genutils.py (error): added error() and fatal()
2711 * IPython/genutils.py (error): added error() and fatal()
2708 functions.
2712 functions.
2709
2713
2710 2003-03-18 *** Released version 0.2.15pre3
2714 2003-03-18 *** Released version 0.2.15pre3
2711
2715
2712 2003-03-18 Fernando Perez <fperez@colorado.edu>
2716 2003-03-18 Fernando Perez <fperez@colorado.edu>
2713
2717
2714 * setupext/install_data_ext.py
2718 * setupext/install_data_ext.py
2715 (install_data_ext.initialize_options): Class contributed by Jack
2719 (install_data_ext.initialize_options): Class contributed by Jack
2716 Moffit for fixing the old distutils hack. He is sending this to
2720 Moffit for fixing the old distutils hack. He is sending this to
2717 the distutils folks so in the future we may not need it as a
2721 the distutils folks so in the future we may not need it as a
2718 private fix.
2722 private fix.
2719
2723
2720 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2724 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2721 changes for Debian packaging. See his patch for full details.
2725 changes for Debian packaging. See his patch for full details.
2722 The old distutils hack of making the ipythonrc* files carry a
2726 The old distutils hack of making the ipythonrc* files carry a
2723 bogus .py extension is gone, at last. Examples were moved to a
2727 bogus .py extension is gone, at last. Examples were moved to a
2724 separate subdir under doc/, and the separate executable scripts
2728 separate subdir under doc/, and the separate executable scripts
2725 now live in their own directory. Overall a great cleanup. The
2729 now live in their own directory. Overall a great cleanup. The
2726 manual was updated to use the new files, and setup.py has been
2730 manual was updated to use the new files, and setup.py has been
2727 fixed for this setup.
2731 fixed for this setup.
2728
2732
2729 * IPython/PyColorize.py (Parser.usage): made non-executable and
2733 * IPython/PyColorize.py (Parser.usage): made non-executable and
2730 created a pycolor wrapper around it to be included as a script.
2734 created a pycolor wrapper around it to be included as a script.
2731
2735
2732 2003-03-12 *** Released version 0.2.15pre2
2736 2003-03-12 *** Released version 0.2.15pre2
2733
2737
2734 2003-03-12 Fernando Perez <fperez@colorado.edu>
2738 2003-03-12 Fernando Perez <fperez@colorado.edu>
2735
2739
2736 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2740 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2737 long-standing problem with garbage characters in some terminals.
2741 long-standing problem with garbage characters in some terminals.
2738 The issue was really that the \001 and \002 escapes must _only_ be
2742 The issue was really that the \001 and \002 escapes must _only_ be
2739 passed to input prompts (which call readline), but _never_ to
2743 passed to input prompts (which call readline), but _never_ to
2740 normal text to be printed on screen. I changed ColorANSI to have
2744 normal text to be printed on screen. I changed ColorANSI to have
2741 two classes: TermColors and InputTermColors, each with the
2745 two classes: TermColors and InputTermColors, each with the
2742 appropriate escapes for input prompts or normal text. The code in
2746 appropriate escapes for input prompts or normal text. The code in
2743 Prompts.py got slightly more complicated, but this very old and
2747 Prompts.py got slightly more complicated, but this very old and
2744 annoying bug is finally fixed.
2748 annoying bug is finally fixed.
2745
2749
2746 All the credit for nailing down the real origin of this problem
2750 All the credit for nailing down the real origin of this problem
2747 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2751 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2748 *Many* thanks to him for spending quite a bit of effort on this.
2752 *Many* thanks to him for spending quite a bit of effort on this.
2749
2753
2750 2003-03-05 *** Released version 0.2.15pre1
2754 2003-03-05 *** Released version 0.2.15pre1
2751
2755
2752 2003-03-03 Fernando Perez <fperez@colorado.edu>
2756 2003-03-03 Fernando Perez <fperez@colorado.edu>
2753
2757
2754 * IPython/FakeModule.py: Moved the former _FakeModule to a
2758 * IPython/FakeModule.py: Moved the former _FakeModule to a
2755 separate file, because it's also needed by Magic (to fix a similar
2759 separate file, because it's also needed by Magic (to fix a similar
2756 pickle-related issue in @run).
2760 pickle-related issue in @run).
2757
2761
2758 2003-03-02 Fernando Perez <fperez@colorado.edu>
2762 2003-03-02 Fernando Perez <fperez@colorado.edu>
2759
2763
2760 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2764 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2761 the autocall option at runtime.
2765 the autocall option at runtime.
2762 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2766 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2763 across Magic.py to start separating Magic from InteractiveShell.
2767 across Magic.py to start separating Magic from InteractiveShell.
2764 (Magic._ofind): Fixed to return proper namespace for dotted
2768 (Magic._ofind): Fixed to return proper namespace for dotted
2765 names. Before, a dotted name would always return 'not currently
2769 names. Before, a dotted name would always return 'not currently
2766 defined', because it would find the 'parent'. s.x would be found,
2770 defined', because it would find the 'parent'. s.x would be found,
2767 but since 'x' isn't defined by itself, it would get confused.
2771 but since 'x' isn't defined by itself, it would get confused.
2768 (Magic.magic_run): Fixed pickling problems reported by Ralf
2772 (Magic.magic_run): Fixed pickling problems reported by Ralf
2769 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2773 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2770 that I'd used when Mike Heeter reported similar issues at the
2774 that I'd used when Mike Heeter reported similar issues at the
2771 top-level, but now for @run. It boils down to injecting the
2775 top-level, but now for @run. It boils down to injecting the
2772 namespace where code is being executed with something that looks
2776 namespace where code is being executed with something that looks
2773 enough like a module to fool pickle.dump(). Since a pickle stores
2777 enough like a module to fool pickle.dump(). Since a pickle stores
2774 a named reference to the importing module, we need this for
2778 a named reference to the importing module, we need this for
2775 pickles to save something sensible.
2779 pickles to save something sensible.
2776
2780
2777 * IPython/ipmaker.py (make_IPython): added an autocall option.
2781 * IPython/ipmaker.py (make_IPython): added an autocall option.
2778
2782
2779 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2783 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2780 the auto-eval code. Now autocalling is an option, and the code is
2784 the auto-eval code. Now autocalling is an option, and the code is
2781 also vastly safer. There is no more eval() involved at all.
2785 also vastly safer. There is no more eval() involved at all.
2782
2786
2783 2003-03-01 Fernando Perez <fperez@colorado.edu>
2787 2003-03-01 Fernando Perez <fperez@colorado.edu>
2784
2788
2785 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2789 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2786 dict with named keys instead of a tuple.
2790 dict with named keys instead of a tuple.
2787
2791
2788 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2792 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2789
2793
2790 * setup.py (make_shortcut): Fixed message about directories
2794 * setup.py (make_shortcut): Fixed message about directories
2791 created during Windows installation (the directories were ok, just
2795 created during Windows installation (the directories were ok, just
2792 the printed message was misleading). Thanks to Chris Liechti
2796 the printed message was misleading). Thanks to Chris Liechti
2793 <cliechti-AT-gmx.net> for the heads up.
2797 <cliechti-AT-gmx.net> for the heads up.
2794
2798
2795 2003-02-21 Fernando Perez <fperez@colorado.edu>
2799 2003-02-21 Fernando Perez <fperez@colorado.edu>
2796
2800
2797 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2801 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2798 of ValueError exception when checking for auto-execution. This
2802 of ValueError exception when checking for auto-execution. This
2799 one is raised by things like Numeric arrays arr.flat when the
2803 one is raised by things like Numeric arrays arr.flat when the
2800 array is non-contiguous.
2804 array is non-contiguous.
2801
2805
2802 2003-01-31 Fernando Perez <fperez@colorado.edu>
2806 2003-01-31 Fernando Perez <fperez@colorado.edu>
2803
2807
2804 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2808 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2805 not return any value at all (even though the command would get
2809 not return any value at all (even though the command would get
2806 executed).
2810 executed).
2807 (xsys): Flush stdout right after printing the command to ensure
2811 (xsys): Flush stdout right after printing the command to ensure
2808 proper ordering of commands and command output in the total
2812 proper ordering of commands and command output in the total
2809 output.
2813 output.
2810 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2814 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2811 system/getoutput as defaults. The old ones are kept for
2815 system/getoutput as defaults. The old ones are kept for
2812 compatibility reasons, so no code which uses this library needs
2816 compatibility reasons, so no code which uses this library needs
2813 changing.
2817 changing.
2814
2818
2815 2003-01-27 *** Released version 0.2.14
2819 2003-01-27 *** Released version 0.2.14
2816
2820
2817 2003-01-25 Fernando Perez <fperez@colorado.edu>
2821 2003-01-25 Fernando Perez <fperez@colorado.edu>
2818
2822
2819 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2823 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2820 functions defined in previous edit sessions could not be re-edited
2824 functions defined in previous edit sessions could not be re-edited
2821 (because the temp files were immediately removed). Now temp files
2825 (because the temp files were immediately removed). Now temp files
2822 are removed only at IPython's exit.
2826 are removed only at IPython's exit.
2823 (Magic.magic_run): Improved @run to perform shell-like expansions
2827 (Magic.magic_run): Improved @run to perform shell-like expansions
2824 on its arguments (~users and $VARS). With this, @run becomes more
2828 on its arguments (~users and $VARS). With this, @run becomes more
2825 like a normal command-line.
2829 like a normal command-line.
2826
2830
2827 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2831 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2828 bugs related to embedding and cleaned up that code. A fairly
2832 bugs related to embedding and cleaned up that code. A fairly
2829 important one was the impossibility to access the global namespace
2833 important one was the impossibility to access the global namespace
2830 through the embedded IPython (only local variables were visible).
2834 through the embedded IPython (only local variables were visible).
2831
2835
2832 2003-01-14 Fernando Perez <fperez@colorado.edu>
2836 2003-01-14 Fernando Perez <fperez@colorado.edu>
2833
2837
2834 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2838 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2835 auto-calling to be a bit more conservative. Now it doesn't get
2839 auto-calling to be a bit more conservative. Now it doesn't get
2836 triggered if any of '!=()<>' are in the rest of the input line, to
2840 triggered if any of '!=()<>' are in the rest of the input line, to
2837 allow comparing callables. Thanks to Alex for the heads up.
2841 allow comparing callables. Thanks to Alex for the heads up.
2838
2842
2839 2003-01-07 Fernando Perez <fperez@colorado.edu>
2843 2003-01-07 Fernando Perez <fperez@colorado.edu>
2840
2844
2841 * IPython/genutils.py (page): fixed estimation of the number of
2845 * IPython/genutils.py (page): fixed estimation of the number of
2842 lines in a string to be paged to simply count newlines. This
2846 lines in a string to be paged to simply count newlines. This
2843 prevents over-guessing due to embedded escape sequences. A better
2847 prevents over-guessing due to embedded escape sequences. A better
2844 long-term solution would involve stripping out the control chars
2848 long-term solution would involve stripping out the control chars
2845 for the count, but it's potentially so expensive I just don't
2849 for the count, but it's potentially so expensive I just don't
2846 think it's worth doing.
2850 think it's worth doing.
2847
2851
2848 2002-12-19 *** Released version 0.2.14pre50
2852 2002-12-19 *** Released version 0.2.14pre50
2849
2853
2850 2002-12-19 Fernando Perez <fperez@colorado.edu>
2854 2002-12-19 Fernando Perez <fperez@colorado.edu>
2851
2855
2852 * tools/release (version): Changed release scripts to inform
2856 * tools/release (version): Changed release scripts to inform
2853 Andrea and build a NEWS file with a list of recent changes.
2857 Andrea and build a NEWS file with a list of recent changes.
2854
2858
2855 * IPython/ColorANSI.py (__all__): changed terminal detection
2859 * IPython/ColorANSI.py (__all__): changed terminal detection
2856 code. Seems to work better for xterms without breaking
2860 code. Seems to work better for xterms without breaking
2857 konsole. Will need more testing to determine if WinXP and Mac OSX
2861 konsole. Will need more testing to determine if WinXP and Mac OSX
2858 also work ok.
2862 also work ok.
2859
2863
2860 2002-12-18 *** Released version 0.2.14pre49
2864 2002-12-18 *** Released version 0.2.14pre49
2861
2865
2862 2002-12-18 Fernando Perez <fperez@colorado.edu>
2866 2002-12-18 Fernando Perez <fperez@colorado.edu>
2863
2867
2864 * Docs: added new info about Mac OSX, from Andrea.
2868 * Docs: added new info about Mac OSX, from Andrea.
2865
2869
2866 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2870 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2867 allow direct plotting of python strings whose format is the same
2871 allow direct plotting of python strings whose format is the same
2868 of gnuplot data files.
2872 of gnuplot data files.
2869
2873
2870 2002-12-16 Fernando Perez <fperez@colorado.edu>
2874 2002-12-16 Fernando Perez <fperez@colorado.edu>
2871
2875
2872 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2876 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2873 value of exit question to be acknowledged.
2877 value of exit question to be acknowledged.
2874
2878
2875 2002-12-03 Fernando Perez <fperez@colorado.edu>
2879 2002-12-03 Fernando Perez <fperez@colorado.edu>
2876
2880
2877 * IPython/ipmaker.py: removed generators, which had been added
2881 * IPython/ipmaker.py: removed generators, which had been added
2878 by mistake in an earlier debugging run. This was causing trouble
2882 by mistake in an earlier debugging run. This was causing trouble
2879 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2883 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2880 for pointing this out.
2884 for pointing this out.
2881
2885
2882 2002-11-17 Fernando Perez <fperez@colorado.edu>
2886 2002-11-17 Fernando Perez <fperez@colorado.edu>
2883
2887
2884 * Manual: updated the Gnuplot section.
2888 * Manual: updated the Gnuplot section.
2885
2889
2886 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2890 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2887 a much better split of what goes in Runtime and what goes in
2891 a much better split of what goes in Runtime and what goes in
2888 Interactive.
2892 Interactive.
2889
2893
2890 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2894 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2891 being imported from iplib.
2895 being imported from iplib.
2892
2896
2893 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2897 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2894 for command-passing. Now the global Gnuplot instance is called
2898 for command-passing. Now the global Gnuplot instance is called
2895 'gp' instead of 'g', which was really a far too fragile and
2899 'gp' instead of 'g', which was really a far too fragile and
2896 common name.
2900 common name.
2897
2901
2898 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2902 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2899 bounding boxes generated by Gnuplot for square plots.
2903 bounding boxes generated by Gnuplot for square plots.
2900
2904
2901 * IPython/genutils.py (popkey): new function added. I should
2905 * IPython/genutils.py (popkey): new function added. I should
2902 suggest this on c.l.py as a dict method, it seems useful.
2906 suggest this on c.l.py as a dict method, it seems useful.
2903
2907
2904 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2908 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2905 to transparently handle PostScript generation. MUCH better than
2909 to transparently handle PostScript generation. MUCH better than
2906 the previous plot_eps/replot_eps (which I removed now). The code
2910 the previous plot_eps/replot_eps (which I removed now). The code
2907 is also fairly clean and well documented now (including
2911 is also fairly clean and well documented now (including
2908 docstrings).
2912 docstrings).
2909
2913
2910 2002-11-13 Fernando Perez <fperez@colorado.edu>
2914 2002-11-13 Fernando Perez <fperez@colorado.edu>
2911
2915
2912 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2916 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2913 (inconsistent with options).
2917 (inconsistent with options).
2914
2918
2915 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2919 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2916 manually disabled, I don't know why. Fixed it.
2920 manually disabled, I don't know why. Fixed it.
2917 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2921 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2918 eps output.
2922 eps output.
2919
2923
2920 2002-11-12 Fernando Perez <fperez@colorado.edu>
2924 2002-11-12 Fernando Perez <fperez@colorado.edu>
2921
2925
2922 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2926 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2923 don't propagate up to caller. Fixes crash reported by François
2927 don't propagate up to caller. Fixes crash reported by François
2924 Pinard.
2928 Pinard.
2925
2929
2926 2002-11-09 Fernando Perez <fperez@colorado.edu>
2930 2002-11-09 Fernando Perez <fperez@colorado.edu>
2927
2931
2928 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2932 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2929 history file for new users.
2933 history file for new users.
2930 (make_IPython): fixed bug where initial install would leave the
2934 (make_IPython): fixed bug where initial install would leave the
2931 user running in the .ipython dir.
2935 user running in the .ipython dir.
2932 (make_IPython): fixed bug where config dir .ipython would be
2936 (make_IPython): fixed bug where config dir .ipython would be
2933 created regardless of the given -ipythondir option. Thanks to Cory
2937 created regardless of the given -ipythondir option. Thanks to Cory
2934 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2938 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2935
2939
2936 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2940 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2937 type confirmations. Will need to use it in all of IPython's code
2941 type confirmations. Will need to use it in all of IPython's code
2938 consistently.
2942 consistently.
2939
2943
2940 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2944 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2941 context to print 31 lines instead of the default 5. This will make
2945 context to print 31 lines instead of the default 5. This will make
2942 the crash reports extremely detailed in case the problem is in
2946 the crash reports extremely detailed in case the problem is in
2943 libraries I don't have access to.
2947 libraries I don't have access to.
2944
2948
2945 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2949 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2946 line of defense' code to still crash, but giving users fair
2950 line of defense' code to still crash, but giving users fair
2947 warning. I don't want internal errors to go unreported: if there's
2951 warning. I don't want internal errors to go unreported: if there's
2948 an internal problem, IPython should crash and generate a full
2952 an internal problem, IPython should crash and generate a full
2949 report.
2953 report.
2950
2954
2951 2002-11-08 Fernando Perez <fperez@colorado.edu>
2955 2002-11-08 Fernando Perez <fperez@colorado.edu>
2952
2956
2953 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2957 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2954 otherwise uncaught exceptions which can appear if people set
2958 otherwise uncaught exceptions which can appear if people set
2955 sys.stdout to something badly broken. Thanks to a crash report
2959 sys.stdout to something badly broken. Thanks to a crash report
2956 from henni-AT-mail.brainbot.com.
2960 from henni-AT-mail.brainbot.com.
2957
2961
2958 2002-11-04 Fernando Perez <fperez@colorado.edu>
2962 2002-11-04 Fernando Perez <fperez@colorado.edu>
2959
2963
2960 * IPython/iplib.py (InteractiveShell.interact): added
2964 * IPython/iplib.py (InteractiveShell.interact): added
2961 __IPYTHON__active to the builtins. It's a flag which goes on when
2965 __IPYTHON__active to the builtins. It's a flag which goes on when
2962 the interaction starts and goes off again when it stops. This
2966 the interaction starts and goes off again when it stops. This
2963 allows embedding code to detect being inside IPython. Before this
2967 allows embedding code to detect being inside IPython. Before this
2964 was done via __IPYTHON__, but that only shows that an IPython
2968 was done via __IPYTHON__, but that only shows that an IPython
2965 instance has been created.
2969 instance has been created.
2966
2970
2967 * IPython/Magic.py (Magic.magic_env): I realized that in a
2971 * IPython/Magic.py (Magic.magic_env): I realized that in a
2968 UserDict, instance.data holds the data as a normal dict. So I
2972 UserDict, instance.data holds the data as a normal dict. So I
2969 modified @env to return os.environ.data instead of rebuilding a
2973 modified @env to return os.environ.data instead of rebuilding a
2970 dict by hand.
2974 dict by hand.
2971
2975
2972 2002-11-02 Fernando Perez <fperez@colorado.edu>
2976 2002-11-02 Fernando Perez <fperez@colorado.edu>
2973
2977
2974 * IPython/genutils.py (warn): changed so that level 1 prints no
2978 * IPython/genutils.py (warn): changed so that level 1 prints no
2975 header. Level 2 is now the default (with 'WARNING' header, as
2979 header. Level 2 is now the default (with 'WARNING' header, as
2976 before). I think I tracked all places where changes were needed in
2980 before). I think I tracked all places where changes were needed in
2977 IPython, but outside code using the old level numbering may have
2981 IPython, but outside code using the old level numbering may have
2978 broken.
2982 broken.
2979
2983
2980 * IPython/iplib.py (InteractiveShell.runcode): added this to
2984 * IPython/iplib.py (InteractiveShell.runcode): added this to
2981 handle the tracebacks in SystemExit traps correctly. The previous
2985 handle the tracebacks in SystemExit traps correctly. The previous
2982 code (through interact) was printing more of the stack than
2986 code (through interact) was printing more of the stack than
2983 necessary, showing IPython internal code to the user.
2987 necessary, showing IPython internal code to the user.
2984
2988
2985 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2989 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2986 default. Now that the default at the confirmation prompt is yes,
2990 default. Now that the default at the confirmation prompt is yes,
2987 it's not so intrusive. François' argument that ipython sessions
2991 it's not so intrusive. François' argument that ipython sessions
2988 tend to be complex enough not to lose them from an accidental C-d,
2992 tend to be complex enough not to lose them from an accidental C-d,
2989 is a valid one.
2993 is a valid one.
2990
2994
2991 * IPython/iplib.py (InteractiveShell.interact): added a
2995 * IPython/iplib.py (InteractiveShell.interact): added a
2992 showtraceback() call to the SystemExit trap, and modified the exit
2996 showtraceback() call to the SystemExit trap, and modified the exit
2993 confirmation to have yes as the default.
2997 confirmation to have yes as the default.
2994
2998
2995 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2999 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2996 this file. It's been gone from the code for a long time, this was
3000 this file. It's been gone from the code for a long time, this was
2997 simply leftover junk.
3001 simply leftover junk.
2998
3002
2999 2002-11-01 Fernando Perez <fperez@colorado.edu>
3003 2002-11-01 Fernando Perez <fperez@colorado.edu>
3000
3004
3001 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3005 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3002 added. If set, IPython now traps EOF and asks for
3006 added. If set, IPython now traps EOF and asks for
3003 confirmation. After a request by François Pinard.
3007 confirmation. After a request by François Pinard.
3004
3008
3005 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3009 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3006 of @abort, and with a new (better) mechanism for handling the
3010 of @abort, and with a new (better) mechanism for handling the
3007 exceptions.
3011 exceptions.
3008
3012
3009 2002-10-27 Fernando Perez <fperez@colorado.edu>
3013 2002-10-27 Fernando Perez <fperez@colorado.edu>
3010
3014
3011 * IPython/usage.py (__doc__): updated the --help information and
3015 * IPython/usage.py (__doc__): updated the --help information and
3012 the ipythonrc file to indicate that -log generates
3016 the ipythonrc file to indicate that -log generates
3013 ./ipython.log. Also fixed the corresponding info in @logstart.
3017 ./ipython.log. Also fixed the corresponding info in @logstart.
3014 This and several other fixes in the manuals thanks to reports by
3018 This and several other fixes in the manuals thanks to reports by
3015 François Pinard <pinard-AT-iro.umontreal.ca>.
3019 François Pinard <pinard-AT-iro.umontreal.ca>.
3016
3020
3017 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3021 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3018 refer to @logstart (instead of @log, which doesn't exist).
3022 refer to @logstart (instead of @log, which doesn't exist).
3019
3023
3020 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3024 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3021 AttributeError crash. Thanks to Christopher Armstrong
3025 AttributeError crash. Thanks to Christopher Armstrong
3022 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3026 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3023 introduced recently (in 0.2.14pre37) with the fix to the eval
3027 introduced recently (in 0.2.14pre37) with the fix to the eval
3024 problem mentioned below.
3028 problem mentioned below.
3025
3029
3026 2002-10-17 Fernando Perez <fperez@colorado.edu>
3030 2002-10-17 Fernando Perez <fperez@colorado.edu>
3027
3031
3028 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3032 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3029 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3033 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3030
3034
3031 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3035 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3032 this function to fix a problem reported by Alex Schmolck. He saw
3036 this function to fix a problem reported by Alex Schmolck. He saw
3033 it with list comprehensions and generators, which were getting
3037 it with list comprehensions and generators, which were getting
3034 called twice. The real problem was an 'eval' call in testing for
3038 called twice. The real problem was an 'eval' call in testing for
3035 automagic which was evaluating the input line silently.
3039 automagic which was evaluating the input line silently.
3036
3040
3037 This is a potentially very nasty bug, if the input has side
3041 This is a potentially very nasty bug, if the input has side
3038 effects which must not be repeated. The code is much cleaner now,
3042 effects which must not be repeated. The code is much cleaner now,
3039 without any blanket 'except' left and with a regexp test for
3043 without any blanket 'except' left and with a regexp test for
3040 actual function names.
3044 actual function names.
3041
3045
3042 But an eval remains, which I'm not fully comfortable with. I just
3046 But an eval remains, which I'm not fully comfortable with. I just
3043 don't know how to find out if an expression could be a callable in
3047 don't know how to find out if an expression could be a callable in
3044 the user's namespace without doing an eval on the string. However
3048 the user's namespace without doing an eval on the string. However
3045 that string is now much more strictly checked so that no code
3049 that string is now much more strictly checked so that no code
3046 slips by, so the eval should only happen for things that can
3050 slips by, so the eval should only happen for things that can
3047 really be only function/method names.
3051 really be only function/method names.
3048
3052
3049 2002-10-15 Fernando Perez <fperez@colorado.edu>
3053 2002-10-15 Fernando Perez <fperez@colorado.edu>
3050
3054
3051 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3055 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3052 OSX information to main manual, removed README_Mac_OSX file from
3056 OSX information to main manual, removed README_Mac_OSX file from
3053 distribution. Also updated credits for recent additions.
3057 distribution. Also updated credits for recent additions.
3054
3058
3055 2002-10-10 Fernando Perez <fperez@colorado.edu>
3059 2002-10-10 Fernando Perez <fperez@colorado.edu>
3056
3060
3057 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3061 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3058 terminal-related issues. Many thanks to Andrea Riciputi
3062 terminal-related issues. Many thanks to Andrea Riciputi
3059 <andrea.riciputi-AT-libero.it> for writing it.
3063 <andrea.riciputi-AT-libero.it> for writing it.
3060
3064
3061 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3065 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3062 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3066 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3063
3067
3064 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3068 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3065 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3069 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3066 <syver-en-AT-online.no> who both submitted patches for this problem.
3070 <syver-en-AT-online.no> who both submitted patches for this problem.
3067
3071
3068 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3072 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3069 global embedding to make sure that things don't overwrite user
3073 global embedding to make sure that things don't overwrite user
3070 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3074 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3071
3075
3072 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3076 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3073 compatibility. Thanks to Hayden Callow
3077 compatibility. Thanks to Hayden Callow
3074 <h.callow-AT-elec.canterbury.ac.nz>
3078 <h.callow-AT-elec.canterbury.ac.nz>
3075
3079
3076 2002-10-04 Fernando Perez <fperez@colorado.edu>
3080 2002-10-04 Fernando Perez <fperez@colorado.edu>
3077
3081
3078 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3082 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3079 Gnuplot.File objects.
3083 Gnuplot.File objects.
3080
3084
3081 2002-07-23 Fernando Perez <fperez@colorado.edu>
3085 2002-07-23 Fernando Perez <fperez@colorado.edu>
3082
3086
3083 * IPython/genutils.py (timing): Added timings() and timing() for
3087 * IPython/genutils.py (timing): Added timings() and timing() for
3084 quick access to the most commonly needed data, the execution
3088 quick access to the most commonly needed data, the execution
3085 times. Old timing() renamed to timings_out().
3089 times. Old timing() renamed to timings_out().
3086
3090
3087 2002-07-18 Fernando Perez <fperez@colorado.edu>
3091 2002-07-18 Fernando Perez <fperez@colorado.edu>
3088
3092
3089 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3093 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3090 bug with nested instances disrupting the parent's tab completion.
3094 bug with nested instances disrupting the parent's tab completion.
3091
3095
3092 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3096 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3093 all_completions code to begin the emacs integration.
3097 all_completions code to begin the emacs integration.
3094
3098
3095 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3099 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3096 argument to allow titling individual arrays when plotting.
3100 argument to allow titling individual arrays when plotting.
3097
3101
3098 2002-07-15 Fernando Perez <fperez@colorado.edu>
3102 2002-07-15 Fernando Perez <fperez@colorado.edu>
3099
3103
3100 * setup.py (make_shortcut): changed to retrieve the value of
3104 * setup.py (make_shortcut): changed to retrieve the value of
3101 'Program Files' directory from the registry (this value changes in
3105 'Program Files' directory from the registry (this value changes in
3102 non-english versions of Windows). Thanks to Thomas Fanslau
3106 non-english versions of Windows). Thanks to Thomas Fanslau
3103 <tfanslau-AT-gmx.de> for the report.
3107 <tfanslau-AT-gmx.de> for the report.
3104
3108
3105 2002-07-10 Fernando Perez <fperez@colorado.edu>
3109 2002-07-10 Fernando Perez <fperez@colorado.edu>
3106
3110
3107 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3111 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3108 a bug in pdb, which crashes if a line with only whitespace is
3112 a bug in pdb, which crashes if a line with only whitespace is
3109 entered. Bug report submitted to sourceforge.
3113 entered. Bug report submitted to sourceforge.
3110
3114
3111 2002-07-09 Fernando Perez <fperez@colorado.edu>
3115 2002-07-09 Fernando Perez <fperez@colorado.edu>
3112
3116
3113 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3117 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3114 reporting exceptions (it's a bug in inspect.py, I just set a
3118 reporting exceptions (it's a bug in inspect.py, I just set a
3115 workaround).
3119 workaround).
3116
3120
3117 2002-07-08 Fernando Perez <fperez@colorado.edu>
3121 2002-07-08 Fernando Perez <fperez@colorado.edu>
3118
3122
3119 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3123 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3120 __IPYTHON__ in __builtins__ to show up in user_ns.
3124 __IPYTHON__ in __builtins__ to show up in user_ns.
3121
3125
3122 2002-07-03 Fernando Perez <fperez@colorado.edu>
3126 2002-07-03 Fernando Perez <fperez@colorado.edu>
3123
3127
3124 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3128 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3125 name from @gp_set_instance to @gp_set_default.
3129 name from @gp_set_instance to @gp_set_default.
3126
3130
3127 * IPython/ipmaker.py (make_IPython): default editor value set to
3131 * IPython/ipmaker.py (make_IPython): default editor value set to
3128 '0' (a string), to match the rc file. Otherwise will crash when
3132 '0' (a string), to match the rc file. Otherwise will crash when
3129 .strip() is called on it.
3133 .strip() is called on it.
3130
3134
3131
3135
3132 2002-06-28 Fernando Perez <fperez@colorado.edu>
3136 2002-06-28 Fernando Perez <fperez@colorado.edu>
3133
3137
3134 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3138 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3135 of files in current directory when a file is executed via
3139 of files in current directory when a file is executed via
3136 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3140 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3137
3141
3138 * setup.py (manfiles): fix for rpm builds, submitted by RA
3142 * setup.py (manfiles): fix for rpm builds, submitted by RA
3139 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3143 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3140
3144
3141 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3145 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3142 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3146 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3143 string!). A. Schmolck caught this one.
3147 string!). A. Schmolck caught this one.
3144
3148
3145 2002-06-27 Fernando Perez <fperez@colorado.edu>
3149 2002-06-27 Fernando Perez <fperez@colorado.edu>
3146
3150
3147 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3151 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3148 defined files at the cmd line. __name__ wasn't being set to
3152 defined files at the cmd line. __name__ wasn't being set to
3149 __main__.
3153 __main__.
3150
3154
3151 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3155 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3152 regular lists and tuples besides Numeric arrays.
3156 regular lists and tuples besides Numeric arrays.
3153
3157
3154 * IPython/Prompts.py (CachedOutput.__call__): Added output
3158 * IPython/Prompts.py (CachedOutput.__call__): Added output
3155 supression for input ending with ';'. Similar to Mathematica and
3159 supression for input ending with ';'. Similar to Mathematica and
3156 Matlab. The _* vars and Out[] list are still updated, just like
3160 Matlab. The _* vars and Out[] list are still updated, just like
3157 Mathematica behaves.
3161 Mathematica behaves.
3158
3162
3159 2002-06-25 Fernando Perez <fperez@colorado.edu>
3163 2002-06-25 Fernando Perez <fperez@colorado.edu>
3160
3164
3161 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3165 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3162 .ini extensions for profiels under Windows.
3166 .ini extensions for profiels under Windows.
3163
3167
3164 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3168 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3165 string form. Fix contributed by Alexander Schmolck
3169 string form. Fix contributed by Alexander Schmolck
3166 <a.schmolck-AT-gmx.net>
3170 <a.schmolck-AT-gmx.net>
3167
3171
3168 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3172 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3169 pre-configured Gnuplot instance.
3173 pre-configured Gnuplot instance.
3170
3174
3171 2002-06-21 Fernando Perez <fperez@colorado.edu>
3175 2002-06-21 Fernando Perez <fperez@colorado.edu>
3172
3176
3173 * IPython/numutils.py (exp_safe): new function, works around the
3177 * IPython/numutils.py (exp_safe): new function, works around the
3174 underflow problems in Numeric.
3178 underflow problems in Numeric.
3175 (log2): New fn. Safe log in base 2: returns exact integer answer
3179 (log2): New fn. Safe log in base 2: returns exact integer answer
3176 for exact integer powers of 2.
3180 for exact integer powers of 2.
3177
3181
3178 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3182 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3179 properly.
3183 properly.
3180
3184
3181 2002-06-20 Fernando Perez <fperez@colorado.edu>
3185 2002-06-20 Fernando Perez <fperez@colorado.edu>
3182
3186
3183 * IPython/genutils.py (timing): new function like
3187 * IPython/genutils.py (timing): new function like
3184 Mathematica's. Similar to time_test, but returns more info.
3188 Mathematica's. Similar to time_test, but returns more info.
3185
3189
3186 2002-06-18 Fernando Perez <fperez@colorado.edu>
3190 2002-06-18 Fernando Perez <fperez@colorado.edu>
3187
3191
3188 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3192 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3189 according to Mike Heeter's suggestions.
3193 according to Mike Heeter's suggestions.
3190
3194
3191 2002-06-16 Fernando Perez <fperez@colorado.edu>
3195 2002-06-16 Fernando Perez <fperez@colorado.edu>
3192
3196
3193 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3197 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3194 system. GnuplotMagic is gone as a user-directory option. New files
3198 system. GnuplotMagic is gone as a user-directory option. New files
3195 make it easier to use all the gnuplot stuff both from external
3199 make it easier to use all the gnuplot stuff both from external
3196 programs as well as from IPython. Had to rewrite part of
3200 programs as well as from IPython. Had to rewrite part of
3197 hardcopy() b/c of a strange bug: often the ps files simply don't
3201 hardcopy() b/c of a strange bug: often the ps files simply don't
3198 get created, and require a repeat of the command (often several
3202 get created, and require a repeat of the command (often several
3199 times).
3203 times).
3200
3204
3201 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3205 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3202 resolve output channel at call time, so that if sys.stderr has
3206 resolve output channel at call time, so that if sys.stderr has
3203 been redirected by user this gets honored.
3207 been redirected by user this gets honored.
3204
3208
3205 2002-06-13 Fernando Perez <fperez@colorado.edu>
3209 2002-06-13 Fernando Perez <fperez@colorado.edu>
3206
3210
3207 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3211 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3208 IPShell. Kept a copy with the old names to avoid breaking people's
3212 IPShell. Kept a copy with the old names to avoid breaking people's
3209 embedded code.
3213 embedded code.
3210
3214
3211 * IPython/ipython: simplified it to the bare minimum after
3215 * IPython/ipython: simplified it to the bare minimum after
3212 Holger's suggestions. Added info about how to use it in
3216 Holger's suggestions. Added info about how to use it in
3213 PYTHONSTARTUP.
3217 PYTHONSTARTUP.
3214
3218
3215 * IPython/Shell.py (IPythonShell): changed the options passing
3219 * IPython/Shell.py (IPythonShell): changed the options passing
3216 from a string with funky %s replacements to a straight list. Maybe
3220 from a string with funky %s replacements to a straight list. Maybe
3217 a bit more typing, but it follows sys.argv conventions, so there's
3221 a bit more typing, but it follows sys.argv conventions, so there's
3218 less special-casing to remember.
3222 less special-casing to remember.
3219
3223
3220 2002-06-12 Fernando Perez <fperez@colorado.edu>
3224 2002-06-12 Fernando Perez <fperez@colorado.edu>
3221
3225
3222 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3226 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3223 command. Thanks to a suggestion by Mike Heeter.
3227 command. Thanks to a suggestion by Mike Heeter.
3224 (Magic.magic_pfile): added behavior to look at filenames if given
3228 (Magic.magic_pfile): added behavior to look at filenames if given
3225 arg is not a defined object.
3229 arg is not a defined object.
3226 (Magic.magic_save): New @save function to save code snippets. Also
3230 (Magic.magic_save): New @save function to save code snippets. Also
3227 a Mike Heeter idea.
3231 a Mike Heeter idea.
3228
3232
3229 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3233 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3230 plot() and replot(). Much more convenient now, especially for
3234 plot() and replot(). Much more convenient now, especially for
3231 interactive use.
3235 interactive use.
3232
3236
3233 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3237 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3234 filenames.
3238 filenames.
3235
3239
3236 2002-06-02 Fernando Perez <fperez@colorado.edu>
3240 2002-06-02 Fernando Perez <fperez@colorado.edu>
3237
3241
3238 * IPython/Struct.py (Struct.__init__): modified to admit
3242 * IPython/Struct.py (Struct.__init__): modified to admit
3239 initialization via another struct.
3243 initialization via another struct.
3240
3244
3241 * IPython/genutils.py (SystemExec.__init__): New stateful
3245 * IPython/genutils.py (SystemExec.__init__): New stateful
3242 interface to xsys and bq. Useful for writing system scripts.
3246 interface to xsys and bq. Useful for writing system scripts.
3243
3247
3244 2002-05-30 Fernando Perez <fperez@colorado.edu>
3248 2002-05-30 Fernando Perez <fperez@colorado.edu>
3245
3249
3246 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3250 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3247 documents. This will make the user download smaller (it's getting
3251 documents. This will make the user download smaller (it's getting
3248 too big).
3252 too big).
3249
3253
3250 2002-05-29 Fernando Perez <fperez@colorado.edu>
3254 2002-05-29 Fernando Perez <fperez@colorado.edu>
3251
3255
3252 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3256 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3253 fix problems with shelve and pickle. Seems to work, but I don't
3257 fix problems with shelve and pickle. Seems to work, but I don't
3254 know if corner cases break it. Thanks to Mike Heeter
3258 know if corner cases break it. Thanks to Mike Heeter
3255 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3259 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3256
3260
3257 2002-05-24 Fernando Perez <fperez@colorado.edu>
3261 2002-05-24 Fernando Perez <fperez@colorado.edu>
3258
3262
3259 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3263 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3260 macros having broken.
3264 macros having broken.
3261
3265
3262 2002-05-21 Fernando Perez <fperez@colorado.edu>
3266 2002-05-21 Fernando Perez <fperez@colorado.edu>
3263
3267
3264 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3268 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3265 introduced logging bug: all history before logging started was
3269 introduced logging bug: all history before logging started was
3266 being written one character per line! This came from the redesign
3270 being written one character per line! This came from the redesign
3267 of the input history as a special list which slices to strings,
3271 of the input history as a special list which slices to strings,
3268 not to lists.
3272 not to lists.
3269
3273
3270 2002-05-20 Fernando Perez <fperez@colorado.edu>
3274 2002-05-20 Fernando Perez <fperez@colorado.edu>
3271
3275
3272 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3276 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3273 be an attribute of all classes in this module. The design of these
3277 be an attribute of all classes in this module. The design of these
3274 classes needs some serious overhauling.
3278 classes needs some serious overhauling.
3275
3279
3276 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3280 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3277 which was ignoring '_' in option names.
3281 which was ignoring '_' in option names.
3278
3282
3279 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3283 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3280 'Verbose_novars' to 'Context' and made it the new default. It's a
3284 'Verbose_novars' to 'Context' and made it the new default. It's a
3281 bit more readable and also safer than verbose.
3285 bit more readable and also safer than verbose.
3282
3286
3283 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3287 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3284 triple-quoted strings.
3288 triple-quoted strings.
3285
3289
3286 * IPython/OInspect.py (__all__): new module exposing the object
3290 * IPython/OInspect.py (__all__): new module exposing the object
3287 introspection facilities. Now the corresponding magics are dummy
3291 introspection facilities. Now the corresponding magics are dummy
3288 wrappers around this. Having this module will make it much easier
3292 wrappers around this. Having this module will make it much easier
3289 to put these functions into our modified pdb.
3293 to put these functions into our modified pdb.
3290 This new object inspector system uses the new colorizing module,
3294 This new object inspector system uses the new colorizing module,
3291 so source code and other things are nicely syntax highlighted.
3295 so source code and other things are nicely syntax highlighted.
3292
3296
3293 2002-05-18 Fernando Perez <fperez@colorado.edu>
3297 2002-05-18 Fernando Perez <fperez@colorado.edu>
3294
3298
3295 * IPython/ColorANSI.py: Split the coloring tools into a separate
3299 * IPython/ColorANSI.py: Split the coloring tools into a separate
3296 module so I can use them in other code easier (they were part of
3300 module so I can use them in other code easier (they were part of
3297 ultraTB).
3301 ultraTB).
3298
3302
3299 2002-05-17 Fernando Perez <fperez@colorado.edu>
3303 2002-05-17 Fernando Perez <fperez@colorado.edu>
3300
3304
3301 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3305 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3302 fixed it to set the global 'g' also to the called instance, as
3306 fixed it to set the global 'g' also to the called instance, as
3303 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3307 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3304 user's 'g' variables).
3308 user's 'g' variables).
3305
3309
3306 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3310 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3307 global variables (aliases to _ih,_oh) so that users which expect
3311 global variables (aliases to _ih,_oh) so that users which expect
3308 In[5] or Out[7] to work aren't unpleasantly surprised.
3312 In[5] or Out[7] to work aren't unpleasantly surprised.
3309 (InputList.__getslice__): new class to allow executing slices of
3313 (InputList.__getslice__): new class to allow executing slices of
3310 input history directly. Very simple class, complements the use of
3314 input history directly. Very simple class, complements the use of
3311 macros.
3315 macros.
3312
3316
3313 2002-05-16 Fernando Perez <fperez@colorado.edu>
3317 2002-05-16 Fernando Perez <fperez@colorado.edu>
3314
3318
3315 * setup.py (docdirbase): make doc directory be just doc/IPython
3319 * setup.py (docdirbase): make doc directory be just doc/IPython
3316 without version numbers, it will reduce clutter for users.
3320 without version numbers, it will reduce clutter for users.
3317
3321
3318 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3322 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3319 execfile call to prevent possible memory leak. See for details:
3323 execfile call to prevent possible memory leak. See for details:
3320 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3324 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3321
3325
3322 2002-05-15 Fernando Perez <fperez@colorado.edu>
3326 2002-05-15 Fernando Perez <fperez@colorado.edu>
3323
3327
3324 * IPython/Magic.py (Magic.magic_psource): made the object
3328 * IPython/Magic.py (Magic.magic_psource): made the object
3325 introspection names be more standard: pdoc, pdef, pfile and
3329 introspection names be more standard: pdoc, pdef, pfile and
3326 psource. They all print/page their output, and it makes
3330 psource. They all print/page their output, and it makes
3327 remembering them easier. Kept old names for compatibility as
3331 remembering them easier. Kept old names for compatibility as
3328 aliases.
3332 aliases.
3329
3333
3330 2002-05-14 Fernando Perez <fperez@colorado.edu>
3334 2002-05-14 Fernando Perez <fperez@colorado.edu>
3331
3335
3332 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3336 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3333 what the mouse problem was. The trick is to use gnuplot with temp
3337 what the mouse problem was. The trick is to use gnuplot with temp
3334 files and NOT with pipes (for data communication), because having
3338 files and NOT with pipes (for data communication), because having
3335 both pipes and the mouse on is bad news.
3339 both pipes and the mouse on is bad news.
3336
3340
3337 2002-05-13 Fernando Perez <fperez@colorado.edu>
3341 2002-05-13 Fernando Perez <fperez@colorado.edu>
3338
3342
3339 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3343 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3340 bug. Information would be reported about builtins even when
3344 bug. Information would be reported about builtins even when
3341 user-defined functions overrode them.
3345 user-defined functions overrode them.
3342
3346
3343 2002-05-11 Fernando Perez <fperez@colorado.edu>
3347 2002-05-11 Fernando Perez <fperez@colorado.edu>
3344
3348
3345 * IPython/__init__.py (__all__): removed FlexCompleter from
3349 * IPython/__init__.py (__all__): removed FlexCompleter from
3346 __all__ so that things don't fail in platforms without readline.
3350 __all__ so that things don't fail in platforms without readline.
3347
3351
3348 2002-05-10 Fernando Perez <fperez@colorado.edu>
3352 2002-05-10 Fernando Perez <fperez@colorado.edu>
3349
3353
3350 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3354 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3351 it requires Numeric, effectively making Numeric a dependency for
3355 it requires Numeric, effectively making Numeric a dependency for
3352 IPython.
3356 IPython.
3353
3357
3354 * Released 0.2.13
3358 * Released 0.2.13
3355
3359
3356 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3360 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3357 profiler interface. Now all the major options from the profiler
3361 profiler interface. Now all the major options from the profiler
3358 module are directly supported in IPython, both for single
3362 module are directly supported in IPython, both for single
3359 expressions (@prun) and for full programs (@run -p).
3363 expressions (@prun) and for full programs (@run -p).
3360
3364
3361 2002-05-09 Fernando Perez <fperez@colorado.edu>
3365 2002-05-09 Fernando Perez <fperez@colorado.edu>
3362
3366
3363 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3367 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3364 magic properly formatted for screen.
3368 magic properly formatted for screen.
3365
3369
3366 * setup.py (make_shortcut): Changed things to put pdf version in
3370 * setup.py (make_shortcut): Changed things to put pdf version in
3367 doc/ instead of doc/manual (had to change lyxport a bit).
3371 doc/ instead of doc/manual (had to change lyxport a bit).
3368
3372
3369 * IPython/Magic.py (Profile.string_stats): made profile runs go
3373 * IPython/Magic.py (Profile.string_stats): made profile runs go
3370 through pager (they are long and a pager allows searching, saving,
3374 through pager (they are long and a pager allows searching, saving,
3371 etc.)
3375 etc.)
3372
3376
3373 2002-05-08 Fernando Perez <fperez@colorado.edu>
3377 2002-05-08 Fernando Perez <fperez@colorado.edu>
3374
3378
3375 * Released 0.2.12
3379 * Released 0.2.12
3376
3380
3377 2002-05-06 Fernando Perez <fperez@colorado.edu>
3381 2002-05-06 Fernando Perez <fperez@colorado.edu>
3378
3382
3379 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3383 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3380 introduced); 'hist n1 n2' was broken.
3384 introduced); 'hist n1 n2' was broken.
3381 (Magic.magic_pdb): added optional on/off arguments to @pdb
3385 (Magic.magic_pdb): added optional on/off arguments to @pdb
3382 (Magic.magic_run): added option -i to @run, which executes code in
3386 (Magic.magic_run): added option -i to @run, which executes code in
3383 the IPython namespace instead of a clean one. Also added @irun as
3387 the IPython namespace instead of a clean one. Also added @irun as
3384 an alias to @run -i.
3388 an alias to @run -i.
3385
3389
3386 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3390 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3387 fixed (it didn't really do anything, the namespaces were wrong).
3391 fixed (it didn't really do anything, the namespaces were wrong).
3388
3392
3389 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3393 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3390
3394
3391 * IPython/__init__.py (__all__): Fixed package namespace, now
3395 * IPython/__init__.py (__all__): Fixed package namespace, now
3392 'import IPython' does give access to IPython.<all> as
3396 'import IPython' does give access to IPython.<all> as
3393 expected. Also renamed __release__ to Release.
3397 expected. Also renamed __release__ to Release.
3394
3398
3395 * IPython/Debugger.py (__license__): created new Pdb class which
3399 * IPython/Debugger.py (__license__): created new Pdb class which
3396 functions like a drop-in for the normal pdb.Pdb but does NOT
3400 functions like a drop-in for the normal pdb.Pdb but does NOT
3397 import readline by default. This way it doesn't muck up IPython's
3401 import readline by default. This way it doesn't muck up IPython's
3398 readline handling, and now tab-completion finally works in the
3402 readline handling, and now tab-completion finally works in the
3399 debugger -- sort of. It completes things globally visible, but the
3403 debugger -- sort of. It completes things globally visible, but the
3400 completer doesn't track the stack as pdb walks it. That's a bit
3404 completer doesn't track the stack as pdb walks it. That's a bit
3401 tricky, and I'll have to implement it later.
3405 tricky, and I'll have to implement it later.
3402
3406
3403 2002-05-05 Fernando Perez <fperez@colorado.edu>
3407 2002-05-05 Fernando Perez <fperez@colorado.edu>
3404
3408
3405 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3409 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3406 magic docstrings when printed via ? (explicit \'s were being
3410 magic docstrings when printed via ? (explicit \'s were being
3407 printed).
3411 printed).
3408
3412
3409 * IPython/ipmaker.py (make_IPython): fixed namespace
3413 * IPython/ipmaker.py (make_IPython): fixed namespace
3410 identification bug. Now variables loaded via logs or command-line
3414 identification bug. Now variables loaded via logs or command-line
3411 files are recognized in the interactive namespace by @who.
3415 files are recognized in the interactive namespace by @who.
3412
3416
3413 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3417 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3414 log replay system stemming from the string form of Structs.
3418 log replay system stemming from the string form of Structs.
3415
3419
3416 * IPython/Magic.py (Macro.__init__): improved macros to properly
3420 * IPython/Magic.py (Macro.__init__): improved macros to properly
3417 handle magic commands in them.
3421 handle magic commands in them.
3418 (Magic.magic_logstart): usernames are now expanded so 'logstart
3422 (Magic.magic_logstart): usernames are now expanded so 'logstart
3419 ~/mylog' now works.
3423 ~/mylog' now works.
3420
3424
3421 * IPython/iplib.py (complete): fixed bug where paths starting with
3425 * IPython/iplib.py (complete): fixed bug where paths starting with
3422 '/' would be completed as magic names.
3426 '/' would be completed as magic names.
3423
3427
3424 2002-05-04 Fernando Perez <fperez@colorado.edu>
3428 2002-05-04 Fernando Perez <fperez@colorado.edu>
3425
3429
3426 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3430 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3427 allow running full programs under the profiler's control.
3431 allow running full programs under the profiler's control.
3428
3432
3429 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3433 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3430 mode to report exceptions verbosely but without formatting
3434 mode to report exceptions verbosely but without formatting
3431 variables. This addresses the issue of ipython 'freezing' (it's
3435 variables. This addresses the issue of ipython 'freezing' (it's
3432 not frozen, but caught in an expensive formatting loop) when huge
3436 not frozen, but caught in an expensive formatting loop) when huge
3433 variables are in the context of an exception.
3437 variables are in the context of an exception.
3434 (VerboseTB.text): Added '--->' markers at line where exception was
3438 (VerboseTB.text): Added '--->' markers at line where exception was
3435 triggered. Much clearer to read, especially in NoColor modes.
3439 triggered. Much clearer to read, especially in NoColor modes.
3436
3440
3437 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3441 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3438 implemented in reverse when changing to the new parse_options().
3442 implemented in reverse when changing to the new parse_options().
3439
3443
3440 2002-05-03 Fernando Perez <fperez@colorado.edu>
3444 2002-05-03 Fernando Perez <fperez@colorado.edu>
3441
3445
3442 * IPython/Magic.py (Magic.parse_options): new function so that
3446 * IPython/Magic.py (Magic.parse_options): new function so that
3443 magics can parse options easier.
3447 magics can parse options easier.
3444 (Magic.magic_prun): new function similar to profile.run(),
3448 (Magic.magic_prun): new function similar to profile.run(),
3445 suggested by Chris Hart.
3449 suggested by Chris Hart.
3446 (Magic.magic_cd): fixed behavior so that it only changes if
3450 (Magic.magic_cd): fixed behavior so that it only changes if
3447 directory actually is in history.
3451 directory actually is in history.
3448
3452
3449 * IPython/usage.py (__doc__): added information about potential
3453 * IPython/usage.py (__doc__): added information about potential
3450 slowness of Verbose exception mode when there are huge data
3454 slowness of Verbose exception mode when there are huge data
3451 structures to be formatted (thanks to Archie Paulson).
3455 structures to be formatted (thanks to Archie Paulson).
3452
3456
3453 * IPython/ipmaker.py (make_IPython): Changed default logging
3457 * IPython/ipmaker.py (make_IPython): Changed default logging
3454 (when simply called with -log) to use curr_dir/ipython.log in
3458 (when simply called with -log) to use curr_dir/ipython.log in
3455 rotate mode. Fixed crash which was occuring with -log before
3459 rotate mode. Fixed crash which was occuring with -log before
3456 (thanks to Jim Boyle).
3460 (thanks to Jim Boyle).
3457
3461
3458 2002-05-01 Fernando Perez <fperez@colorado.edu>
3462 2002-05-01 Fernando Perez <fperez@colorado.edu>
3459
3463
3460 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3464 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3461 was nasty -- though somewhat of a corner case).
3465 was nasty -- though somewhat of a corner case).
3462
3466
3463 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3467 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3464 text (was a bug).
3468 text (was a bug).
3465
3469
3466 2002-04-30 Fernando Perez <fperez@colorado.edu>
3470 2002-04-30 Fernando Perez <fperez@colorado.edu>
3467
3471
3468 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3472 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3469 a print after ^D or ^C from the user so that the In[] prompt
3473 a print after ^D or ^C from the user so that the In[] prompt
3470 doesn't over-run the gnuplot one.
3474 doesn't over-run the gnuplot one.
3471
3475
3472 2002-04-29 Fernando Perez <fperez@colorado.edu>
3476 2002-04-29 Fernando Perez <fperez@colorado.edu>
3473
3477
3474 * Released 0.2.10
3478 * Released 0.2.10
3475
3479
3476 * IPython/__release__.py (version): get date dynamically.
3480 * IPython/__release__.py (version): get date dynamically.
3477
3481
3478 * Misc. documentation updates thanks to Arnd's comments. Also ran
3482 * Misc. documentation updates thanks to Arnd's comments. Also ran
3479 a full spellcheck on the manual (hadn't been done in a while).
3483 a full spellcheck on the manual (hadn't been done in a while).
3480
3484
3481 2002-04-27 Fernando Perez <fperez@colorado.edu>
3485 2002-04-27 Fernando Perez <fperez@colorado.edu>
3482
3486
3483 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3487 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3484 starting a log in mid-session would reset the input history list.
3488 starting a log in mid-session would reset the input history list.
3485
3489
3486 2002-04-26 Fernando Perez <fperez@colorado.edu>
3490 2002-04-26 Fernando Perez <fperez@colorado.edu>
3487
3491
3488 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3492 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3489 all files were being included in an update. Now anything in
3493 all files were being included in an update. Now anything in
3490 UserConfig that matches [A-Za-z]*.py will go (this excludes
3494 UserConfig that matches [A-Za-z]*.py will go (this excludes
3491 __init__.py)
3495 __init__.py)
3492
3496
3493 2002-04-25 Fernando Perez <fperez@colorado.edu>
3497 2002-04-25 Fernando Perez <fperez@colorado.edu>
3494
3498
3495 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3499 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3496 to __builtins__ so that any form of embedded or imported code can
3500 to __builtins__ so that any form of embedded or imported code can
3497 test for being inside IPython.
3501 test for being inside IPython.
3498
3502
3499 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3503 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3500 changed to GnuplotMagic because it's now an importable module,
3504 changed to GnuplotMagic because it's now an importable module,
3501 this makes the name follow that of the standard Gnuplot module.
3505 this makes the name follow that of the standard Gnuplot module.
3502 GnuplotMagic can now be loaded at any time in mid-session.
3506 GnuplotMagic can now be loaded at any time in mid-session.
3503
3507
3504 2002-04-24 Fernando Perez <fperez@colorado.edu>
3508 2002-04-24 Fernando Perez <fperez@colorado.edu>
3505
3509
3506 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3510 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3507 the globals (IPython has its own namespace) and the
3511 the globals (IPython has its own namespace) and the
3508 PhysicalQuantity stuff is much better anyway.
3512 PhysicalQuantity stuff is much better anyway.
3509
3513
3510 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3514 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3511 embedding example to standard user directory for
3515 embedding example to standard user directory for
3512 distribution. Also put it in the manual.
3516 distribution. Also put it in the manual.
3513
3517
3514 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3518 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3515 instance as first argument (so it doesn't rely on some obscure
3519 instance as first argument (so it doesn't rely on some obscure
3516 hidden global).
3520 hidden global).
3517
3521
3518 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3522 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3519 delimiters. While it prevents ().TAB from working, it allows
3523 delimiters. While it prevents ().TAB from working, it allows
3520 completions in open (... expressions. This is by far a more common
3524 completions in open (... expressions. This is by far a more common
3521 case.
3525 case.
3522
3526
3523 2002-04-23 Fernando Perez <fperez@colorado.edu>
3527 2002-04-23 Fernando Perez <fperez@colorado.edu>
3524
3528
3525 * IPython/Extensions/InterpreterPasteInput.py: new
3529 * IPython/Extensions/InterpreterPasteInput.py: new
3526 syntax-processing module for pasting lines with >>> or ... at the
3530 syntax-processing module for pasting lines with >>> or ... at the
3527 start.
3531 start.
3528
3532
3529 * IPython/Extensions/PhysicalQ_Interactive.py
3533 * IPython/Extensions/PhysicalQ_Interactive.py
3530 (PhysicalQuantityInteractive.__int__): fixed to work with either
3534 (PhysicalQuantityInteractive.__int__): fixed to work with either
3531 Numeric or math.
3535 Numeric or math.
3532
3536
3533 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3537 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3534 provided profiles. Now we have:
3538 provided profiles. Now we have:
3535 -math -> math module as * and cmath with its own namespace.
3539 -math -> math module as * and cmath with its own namespace.
3536 -numeric -> Numeric as *, plus gnuplot & grace
3540 -numeric -> Numeric as *, plus gnuplot & grace
3537 -physics -> same as before
3541 -physics -> same as before
3538
3542
3539 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3543 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3540 user-defined magics wouldn't be found by @magic if they were
3544 user-defined magics wouldn't be found by @magic if they were
3541 defined as class methods. Also cleaned up the namespace search
3545 defined as class methods. Also cleaned up the namespace search
3542 logic and the string building (to use %s instead of many repeated
3546 logic and the string building (to use %s instead of many repeated
3543 string adds).
3547 string adds).
3544
3548
3545 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3549 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3546 of user-defined magics to operate with class methods (cleaner, in
3550 of user-defined magics to operate with class methods (cleaner, in
3547 line with the gnuplot code).
3551 line with the gnuplot code).
3548
3552
3549 2002-04-22 Fernando Perez <fperez@colorado.edu>
3553 2002-04-22 Fernando Perez <fperez@colorado.edu>
3550
3554
3551 * setup.py: updated dependency list so that manual is updated when
3555 * setup.py: updated dependency list so that manual is updated when
3552 all included files change.
3556 all included files change.
3553
3557
3554 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3558 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3555 the delimiter removal option (the fix is ugly right now).
3559 the delimiter removal option (the fix is ugly right now).
3556
3560
3557 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3561 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3558 all of the math profile (quicker loading, no conflict between
3562 all of the math profile (quicker loading, no conflict between
3559 g-9.8 and g-gnuplot).
3563 g-9.8 and g-gnuplot).
3560
3564
3561 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3565 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3562 name of post-mortem files to IPython_crash_report.txt.
3566 name of post-mortem files to IPython_crash_report.txt.
3563
3567
3564 * Cleanup/update of the docs. Added all the new readline info and
3568 * Cleanup/update of the docs. Added all the new readline info and
3565 formatted all lists as 'real lists'.
3569 formatted all lists as 'real lists'.
3566
3570
3567 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3571 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3568 tab-completion options, since the full readline parse_and_bind is
3572 tab-completion options, since the full readline parse_and_bind is
3569 now accessible.
3573 now accessible.
3570
3574
3571 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3575 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3572 handling of readline options. Now users can specify any string to
3576 handling of readline options. Now users can specify any string to
3573 be passed to parse_and_bind(), as well as the delimiters to be
3577 be passed to parse_and_bind(), as well as the delimiters to be
3574 removed.
3578 removed.
3575 (InteractiveShell.__init__): Added __name__ to the global
3579 (InteractiveShell.__init__): Added __name__ to the global
3576 namespace so that things like Itpl which rely on its existence
3580 namespace so that things like Itpl which rely on its existence
3577 don't crash.
3581 don't crash.
3578 (InteractiveShell._prefilter): Defined the default with a _ so
3582 (InteractiveShell._prefilter): Defined the default with a _ so
3579 that prefilter() is easier to override, while the default one
3583 that prefilter() is easier to override, while the default one
3580 remains available.
3584 remains available.
3581
3585
3582 2002-04-18 Fernando Perez <fperez@colorado.edu>
3586 2002-04-18 Fernando Perez <fperez@colorado.edu>
3583
3587
3584 * Added information about pdb in the docs.
3588 * Added information about pdb in the docs.
3585
3589
3586 2002-04-17 Fernando Perez <fperez@colorado.edu>
3590 2002-04-17 Fernando Perez <fperez@colorado.edu>
3587
3591
3588 * IPython/ipmaker.py (make_IPython): added rc_override option to
3592 * IPython/ipmaker.py (make_IPython): added rc_override option to
3589 allow passing config options at creation time which may override
3593 allow passing config options at creation time which may override
3590 anything set in the config files or command line. This is
3594 anything set in the config files or command line. This is
3591 particularly useful for configuring embedded instances.
3595 particularly useful for configuring embedded instances.
3592
3596
3593 2002-04-15 Fernando Perez <fperez@colorado.edu>
3597 2002-04-15 Fernando Perez <fperez@colorado.edu>
3594
3598
3595 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3599 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3596 crash embedded instances because of the input cache falling out of
3600 crash embedded instances because of the input cache falling out of
3597 sync with the output counter.
3601 sync with the output counter.
3598
3602
3599 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3603 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3600 mode which calls pdb after an uncaught exception in IPython itself.
3604 mode which calls pdb after an uncaught exception in IPython itself.
3601
3605
3602 2002-04-14 Fernando Perez <fperez@colorado.edu>
3606 2002-04-14 Fernando Perez <fperez@colorado.edu>
3603
3607
3604 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3608 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3605 readline, fix it back after each call.
3609 readline, fix it back after each call.
3606
3610
3607 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3611 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3608 method to force all access via __call__(), which guarantees that
3612 method to force all access via __call__(), which guarantees that
3609 traceback references are properly deleted.
3613 traceback references are properly deleted.
3610
3614
3611 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3615 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3612 improve printing when pprint is in use.
3616 improve printing when pprint is in use.
3613
3617
3614 2002-04-13 Fernando Perez <fperez@colorado.edu>
3618 2002-04-13 Fernando Perez <fperez@colorado.edu>
3615
3619
3616 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3620 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3617 exceptions aren't caught anymore. If the user triggers one, he
3621 exceptions aren't caught anymore. If the user triggers one, he
3618 should know why he's doing it and it should go all the way up,
3622 should know why he's doing it and it should go all the way up,
3619 just like any other exception. So now @abort will fully kill the
3623 just like any other exception. So now @abort will fully kill the
3620 embedded interpreter and the embedding code (unless that happens
3624 embedded interpreter and the embedding code (unless that happens
3621 to catch SystemExit).
3625 to catch SystemExit).
3622
3626
3623 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3627 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3624 and a debugger() method to invoke the interactive pdb debugger
3628 and a debugger() method to invoke the interactive pdb debugger
3625 after printing exception information. Also added the corresponding
3629 after printing exception information. Also added the corresponding
3626 -pdb option and @pdb magic to control this feature, and updated
3630 -pdb option and @pdb magic to control this feature, and updated
3627 the docs. After a suggestion from Christopher Hart
3631 the docs. After a suggestion from Christopher Hart
3628 (hart-AT-caltech.edu).
3632 (hart-AT-caltech.edu).
3629
3633
3630 2002-04-12 Fernando Perez <fperez@colorado.edu>
3634 2002-04-12 Fernando Perez <fperez@colorado.edu>
3631
3635
3632 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3636 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3633 the exception handlers defined by the user (not the CrashHandler)
3637 the exception handlers defined by the user (not the CrashHandler)
3634 so that user exceptions don't trigger an ipython bug report.
3638 so that user exceptions don't trigger an ipython bug report.
3635
3639
3636 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3640 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3637 configurable (it should have always been so).
3641 configurable (it should have always been so).
3638
3642
3639 2002-03-26 Fernando Perez <fperez@colorado.edu>
3643 2002-03-26 Fernando Perez <fperez@colorado.edu>
3640
3644
3641 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3645 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3642 and there to fix embedding namespace issues. This should all be
3646 and there to fix embedding namespace issues. This should all be
3643 done in a more elegant way.
3647 done in a more elegant way.
3644
3648
3645 2002-03-25 Fernando Perez <fperez@colorado.edu>
3649 2002-03-25 Fernando Perez <fperez@colorado.edu>
3646
3650
3647 * IPython/genutils.py (get_home_dir): Try to make it work under
3651 * IPython/genutils.py (get_home_dir): Try to make it work under
3648 win9x also.
3652 win9x also.
3649
3653
3650 2002-03-20 Fernando Perez <fperez@colorado.edu>
3654 2002-03-20 Fernando Perez <fperez@colorado.edu>
3651
3655
3652 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3656 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3653 sys.displayhook untouched upon __init__.
3657 sys.displayhook untouched upon __init__.
3654
3658
3655 2002-03-19 Fernando Perez <fperez@colorado.edu>
3659 2002-03-19 Fernando Perez <fperez@colorado.edu>
3656
3660
3657 * Released 0.2.9 (for embedding bug, basically).
3661 * Released 0.2.9 (for embedding bug, basically).
3658
3662
3659 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3663 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3660 exceptions so that enclosing shell's state can be restored.
3664 exceptions so that enclosing shell's state can be restored.
3661
3665
3662 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3666 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3663 naming conventions in the .ipython/ dir.
3667 naming conventions in the .ipython/ dir.
3664
3668
3665 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3669 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3666 from delimiters list so filenames with - in them get expanded.
3670 from delimiters list so filenames with - in them get expanded.
3667
3671
3668 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3672 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3669 sys.displayhook not being properly restored after an embedded call.
3673 sys.displayhook not being properly restored after an embedded call.
3670
3674
3671 2002-03-18 Fernando Perez <fperez@colorado.edu>
3675 2002-03-18 Fernando Perez <fperez@colorado.edu>
3672
3676
3673 * Released 0.2.8
3677 * Released 0.2.8
3674
3678
3675 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3679 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3676 some files weren't being included in a -upgrade.
3680 some files weren't being included in a -upgrade.
3677 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3681 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3678 on' so that the first tab completes.
3682 on' so that the first tab completes.
3679 (InteractiveShell.handle_magic): fixed bug with spaces around
3683 (InteractiveShell.handle_magic): fixed bug with spaces around
3680 quotes breaking many magic commands.
3684 quotes breaking many magic commands.
3681
3685
3682 * setup.py: added note about ignoring the syntax error messages at
3686 * setup.py: added note about ignoring the syntax error messages at
3683 installation.
3687 installation.
3684
3688
3685 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3689 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3686 streamlining the gnuplot interface, now there's only one magic @gp.
3690 streamlining the gnuplot interface, now there's only one magic @gp.
3687
3691
3688 2002-03-17 Fernando Perez <fperez@colorado.edu>
3692 2002-03-17 Fernando Perez <fperez@colorado.edu>
3689
3693
3690 * IPython/UserConfig/magic_gnuplot.py: new name for the
3694 * IPython/UserConfig/magic_gnuplot.py: new name for the
3691 example-magic_pm.py file. Much enhanced system, now with a shell
3695 example-magic_pm.py file. Much enhanced system, now with a shell
3692 for communicating directly with gnuplot, one command at a time.
3696 for communicating directly with gnuplot, one command at a time.
3693
3697
3694 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3698 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3695 setting __name__=='__main__'.
3699 setting __name__=='__main__'.
3696
3700
3697 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3701 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3698 mini-shell for accessing gnuplot from inside ipython. Should
3702 mini-shell for accessing gnuplot from inside ipython. Should
3699 extend it later for grace access too. Inspired by Arnd's
3703 extend it later for grace access too. Inspired by Arnd's
3700 suggestion.
3704 suggestion.
3701
3705
3702 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3706 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3703 calling magic functions with () in their arguments. Thanks to Arnd
3707 calling magic functions with () in their arguments. Thanks to Arnd
3704 Baecker for pointing this to me.
3708 Baecker for pointing this to me.
3705
3709
3706 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3710 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3707 infinitely for integer or complex arrays (only worked with floats).
3711 infinitely for integer or complex arrays (only worked with floats).
3708
3712
3709 2002-03-16 Fernando Perez <fperez@colorado.edu>
3713 2002-03-16 Fernando Perez <fperez@colorado.edu>
3710
3714
3711 * setup.py: Merged setup and setup_windows into a single script
3715 * setup.py: Merged setup and setup_windows into a single script
3712 which properly handles things for windows users.
3716 which properly handles things for windows users.
3713
3717
3714 2002-03-15 Fernando Perez <fperez@colorado.edu>
3718 2002-03-15 Fernando Perez <fperez@colorado.edu>
3715
3719
3716 * Big change to the manual: now the magics are all automatically
3720 * Big change to the manual: now the magics are all automatically
3717 documented. This information is generated from their docstrings
3721 documented. This information is generated from their docstrings
3718 and put in a latex file included by the manual lyx file. This way
3722 and put in a latex file included by the manual lyx file. This way
3719 we get always up to date information for the magics. The manual
3723 we get always up to date information for the magics. The manual
3720 now also has proper version information, also auto-synced.
3724 now also has proper version information, also auto-synced.
3721
3725
3722 For this to work, an undocumented --magic_docstrings option was added.
3726 For this to work, an undocumented --magic_docstrings option was added.
3723
3727
3724 2002-03-13 Fernando Perez <fperez@colorado.edu>
3728 2002-03-13 Fernando Perez <fperez@colorado.edu>
3725
3729
3726 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3730 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3727 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3731 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3728
3732
3729 2002-03-12 Fernando Perez <fperez@colorado.edu>
3733 2002-03-12 Fernando Perez <fperez@colorado.edu>
3730
3734
3731 * IPython/ultraTB.py (TermColors): changed color escapes again to
3735 * IPython/ultraTB.py (TermColors): changed color escapes again to
3732 fix the (old, reintroduced) line-wrapping bug. Basically, if
3736 fix the (old, reintroduced) line-wrapping bug. Basically, if
3733 \001..\002 aren't given in the color escapes, lines get wrapped
3737 \001..\002 aren't given in the color escapes, lines get wrapped
3734 weirdly. But giving those screws up old xterms and emacs terms. So
3738 weirdly. But giving those screws up old xterms and emacs terms. So
3735 I added some logic for emacs terms to be ok, but I can't identify old
3739 I added some logic for emacs terms to be ok, but I can't identify old
3736 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3740 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3737
3741
3738 2002-03-10 Fernando Perez <fperez@colorado.edu>
3742 2002-03-10 Fernando Perez <fperez@colorado.edu>
3739
3743
3740 * IPython/usage.py (__doc__): Various documentation cleanups and
3744 * IPython/usage.py (__doc__): Various documentation cleanups and
3741 updates, both in usage docstrings and in the manual.
3745 updates, both in usage docstrings and in the manual.
3742
3746
3743 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3747 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3744 handling of caching. Set minimum acceptabe value for having a
3748 handling of caching. Set minimum acceptabe value for having a
3745 cache at 20 values.
3749 cache at 20 values.
3746
3750
3747 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3751 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3748 install_first_time function to a method, renamed it and added an
3752 install_first_time function to a method, renamed it and added an
3749 'upgrade' mode. Now people can update their config directory with
3753 'upgrade' mode. Now people can update their config directory with
3750 a simple command line switch (-upgrade, also new).
3754 a simple command line switch (-upgrade, also new).
3751
3755
3752 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3756 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3753 @file (convenient for automagic users under Python >= 2.2).
3757 @file (convenient for automagic users under Python >= 2.2).
3754 Removed @files (it seemed more like a plural than an abbrev. of
3758 Removed @files (it seemed more like a plural than an abbrev. of
3755 'file show').
3759 'file show').
3756
3760
3757 * IPython/iplib.py (install_first_time): Fixed crash if there were
3761 * IPython/iplib.py (install_first_time): Fixed crash if there were
3758 backup files ('~') in .ipython/ install directory.
3762 backup files ('~') in .ipython/ install directory.
3759
3763
3760 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3764 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3761 system. Things look fine, but these changes are fairly
3765 system. Things look fine, but these changes are fairly
3762 intrusive. Test them for a few days.
3766 intrusive. Test them for a few days.
3763
3767
3764 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3768 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3765 the prompts system. Now all in/out prompt strings are user
3769 the prompts system. Now all in/out prompt strings are user
3766 controllable. This is particularly useful for embedding, as one
3770 controllable. This is particularly useful for embedding, as one
3767 can tag embedded instances with particular prompts.
3771 can tag embedded instances with particular prompts.
3768
3772
3769 Also removed global use of sys.ps1/2, which now allows nested
3773 Also removed global use of sys.ps1/2, which now allows nested
3770 embeddings without any problems. Added command-line options for
3774 embeddings without any problems. Added command-line options for
3771 the prompt strings.
3775 the prompt strings.
3772
3776
3773 2002-03-08 Fernando Perez <fperez@colorado.edu>
3777 2002-03-08 Fernando Perez <fperez@colorado.edu>
3774
3778
3775 * IPython/UserConfig/example-embed-short.py (ipshell): added
3779 * IPython/UserConfig/example-embed-short.py (ipshell): added
3776 example file with the bare minimum code for embedding.
3780 example file with the bare minimum code for embedding.
3777
3781
3778 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3782 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3779 functionality for the embeddable shell to be activated/deactivated
3783 functionality for the embeddable shell to be activated/deactivated
3780 either globally or at each call.
3784 either globally or at each call.
3781
3785
3782 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3786 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3783 rewriting the prompt with '--->' for auto-inputs with proper
3787 rewriting the prompt with '--->' for auto-inputs with proper
3784 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3788 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3785 this is handled by the prompts class itself, as it should.
3789 this is handled by the prompts class itself, as it should.
3786
3790
3787 2002-03-05 Fernando Perez <fperez@colorado.edu>
3791 2002-03-05 Fernando Perez <fperez@colorado.edu>
3788
3792
3789 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3793 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3790 @logstart to avoid name clashes with the math log function.
3794 @logstart to avoid name clashes with the math log function.
3791
3795
3792 * Big updates to X/Emacs section of the manual.
3796 * Big updates to X/Emacs section of the manual.
3793
3797
3794 * Removed ipython_emacs. Milan explained to me how to pass
3798 * Removed ipython_emacs. Milan explained to me how to pass
3795 arguments to ipython through Emacs. Some day I'm going to end up
3799 arguments to ipython through Emacs. Some day I'm going to end up
3796 learning some lisp...
3800 learning some lisp...
3797
3801
3798 2002-03-04 Fernando Perez <fperez@colorado.edu>
3802 2002-03-04 Fernando Perez <fperez@colorado.edu>
3799
3803
3800 * IPython/ipython_emacs: Created script to be used as the
3804 * IPython/ipython_emacs: Created script to be used as the
3801 py-python-command Emacs variable so we can pass IPython
3805 py-python-command Emacs variable so we can pass IPython
3802 parameters. I can't figure out how to tell Emacs directly to pass
3806 parameters. I can't figure out how to tell Emacs directly to pass
3803 parameters to IPython, so a dummy shell script will do it.
3807 parameters to IPython, so a dummy shell script will do it.
3804
3808
3805 Other enhancements made for things to work better under Emacs'
3809 Other enhancements made for things to work better under Emacs'
3806 various types of terminals. Many thanks to Milan Zamazal
3810 various types of terminals. Many thanks to Milan Zamazal
3807 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3811 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3808
3812
3809 2002-03-01 Fernando Perez <fperez@colorado.edu>
3813 2002-03-01 Fernando Perez <fperez@colorado.edu>
3810
3814
3811 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3815 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3812 that loading of readline is now optional. This gives better
3816 that loading of readline is now optional. This gives better
3813 control to emacs users.
3817 control to emacs users.
3814
3818
3815 * IPython/ultraTB.py (__date__): Modified color escape sequences
3819 * IPython/ultraTB.py (__date__): Modified color escape sequences
3816 and now things work fine under xterm and in Emacs' term buffers
3820 and now things work fine under xterm and in Emacs' term buffers
3817 (though not shell ones). Well, in emacs you get colors, but all
3821 (though not shell ones). Well, in emacs you get colors, but all
3818 seem to be 'light' colors (no difference between dark and light
3822 seem to be 'light' colors (no difference between dark and light
3819 ones). But the garbage chars are gone, and also in xterms. It
3823 ones). But the garbage chars are gone, and also in xterms. It
3820 seems that now I'm using 'cleaner' ansi sequences.
3824 seems that now I'm using 'cleaner' ansi sequences.
3821
3825
3822 2002-02-21 Fernando Perez <fperez@colorado.edu>
3826 2002-02-21 Fernando Perez <fperez@colorado.edu>
3823
3827
3824 * Released 0.2.7 (mainly to publish the scoping fix).
3828 * Released 0.2.7 (mainly to publish the scoping fix).
3825
3829
3826 * IPython/Logger.py (Logger.logstate): added. A corresponding
3830 * IPython/Logger.py (Logger.logstate): added. A corresponding
3827 @logstate magic was created.
3831 @logstate magic was created.
3828
3832
3829 * IPython/Magic.py: fixed nested scoping problem under Python
3833 * IPython/Magic.py: fixed nested scoping problem under Python
3830 2.1.x (automagic wasn't working).
3834 2.1.x (automagic wasn't working).
3831
3835
3832 2002-02-20 Fernando Perez <fperez@colorado.edu>
3836 2002-02-20 Fernando Perez <fperez@colorado.edu>
3833
3837
3834 * Released 0.2.6.
3838 * Released 0.2.6.
3835
3839
3836 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3840 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3837 option so that logs can come out without any headers at all.
3841 option so that logs can come out without any headers at all.
3838
3842
3839 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3843 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3840 SciPy.
3844 SciPy.
3841
3845
3842 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3846 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3843 that embedded IPython calls don't require vars() to be explicitly
3847 that embedded IPython calls don't require vars() to be explicitly
3844 passed. Now they are extracted from the caller's frame (code
3848 passed. Now they are extracted from the caller's frame (code
3845 snatched from Eric Jones' weave). Added better documentation to
3849 snatched from Eric Jones' weave). Added better documentation to
3846 the section on embedding and the example file.
3850 the section on embedding and the example file.
3847
3851
3848 * IPython/genutils.py (page): Changed so that under emacs, it just
3852 * IPython/genutils.py (page): Changed so that under emacs, it just
3849 prints the string. You can then page up and down in the emacs
3853 prints the string. You can then page up and down in the emacs
3850 buffer itself. This is how the builtin help() works.
3854 buffer itself. This is how the builtin help() works.
3851
3855
3852 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3856 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3853 macro scoping: macros need to be executed in the user's namespace
3857 macro scoping: macros need to be executed in the user's namespace
3854 to work as if they had been typed by the user.
3858 to work as if they had been typed by the user.
3855
3859
3856 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3860 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3857 execute automatically (no need to type 'exec...'). They then
3861 execute automatically (no need to type 'exec...'). They then
3858 behave like 'true macros'. The printing system was also modified
3862 behave like 'true macros'. The printing system was also modified
3859 for this to work.
3863 for this to work.
3860
3864
3861 2002-02-19 Fernando Perez <fperez@colorado.edu>
3865 2002-02-19 Fernando Perez <fperez@colorado.edu>
3862
3866
3863 * IPython/genutils.py (page_file): new function for paging files
3867 * IPython/genutils.py (page_file): new function for paging files
3864 in an OS-independent way. Also necessary for file viewing to work
3868 in an OS-independent way. Also necessary for file viewing to work
3865 well inside Emacs buffers.
3869 well inside Emacs buffers.
3866 (page): Added checks for being in an emacs buffer.
3870 (page): Added checks for being in an emacs buffer.
3867 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3871 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3868 same bug in iplib.
3872 same bug in iplib.
3869
3873
3870 2002-02-18 Fernando Perez <fperez@colorado.edu>
3874 2002-02-18 Fernando Perez <fperez@colorado.edu>
3871
3875
3872 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3876 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3873 of readline so that IPython can work inside an Emacs buffer.
3877 of readline so that IPython can work inside an Emacs buffer.
3874
3878
3875 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3879 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3876 method signatures (they weren't really bugs, but it looks cleaner
3880 method signatures (they weren't really bugs, but it looks cleaner
3877 and keeps PyChecker happy).
3881 and keeps PyChecker happy).
3878
3882
3879 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3883 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3880 for implementing various user-defined hooks. Currently only
3884 for implementing various user-defined hooks. Currently only
3881 display is done.
3885 display is done.
3882
3886
3883 * IPython/Prompts.py (CachedOutput._display): changed display
3887 * IPython/Prompts.py (CachedOutput._display): changed display
3884 functions so that they can be dynamically changed by users easily.
3888 functions so that they can be dynamically changed by users easily.
3885
3889
3886 * IPython/Extensions/numeric_formats.py (num_display): added an
3890 * IPython/Extensions/numeric_formats.py (num_display): added an
3887 extension for printing NumPy arrays in flexible manners. It
3891 extension for printing NumPy arrays in flexible manners. It
3888 doesn't do anything yet, but all the structure is in
3892 doesn't do anything yet, but all the structure is in
3889 place. Ultimately the plan is to implement output format control
3893 place. Ultimately the plan is to implement output format control
3890 like in Octave.
3894 like in Octave.
3891
3895
3892 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3896 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3893 methods are found at run-time by all the automatic machinery.
3897 methods are found at run-time by all the automatic machinery.
3894
3898
3895 2002-02-17 Fernando Perez <fperez@colorado.edu>
3899 2002-02-17 Fernando Perez <fperez@colorado.edu>
3896
3900
3897 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3901 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3898 whole file a little.
3902 whole file a little.
3899
3903
3900 * ToDo: closed this document. Now there's a new_design.lyx
3904 * ToDo: closed this document. Now there's a new_design.lyx
3901 document for all new ideas. Added making a pdf of it for the
3905 document for all new ideas. Added making a pdf of it for the
3902 end-user distro.
3906 end-user distro.
3903
3907
3904 * IPython/Logger.py (Logger.switch_log): Created this to replace
3908 * IPython/Logger.py (Logger.switch_log): Created this to replace
3905 logon() and logoff(). It also fixes a nasty crash reported by
3909 logon() and logoff(). It also fixes a nasty crash reported by
3906 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3910 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3907
3911
3908 * IPython/iplib.py (complete): got auto-completion to work with
3912 * IPython/iplib.py (complete): got auto-completion to work with
3909 automagic (I had wanted this for a long time).
3913 automagic (I had wanted this for a long time).
3910
3914
3911 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3915 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3912 to @file, since file() is now a builtin and clashes with automagic
3916 to @file, since file() is now a builtin and clashes with automagic
3913 for @file.
3917 for @file.
3914
3918
3915 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3919 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3916 of this was previously in iplib, which had grown to more than 2000
3920 of this was previously in iplib, which had grown to more than 2000
3917 lines, way too long. No new functionality, but it makes managing
3921 lines, way too long. No new functionality, but it makes managing
3918 the code a bit easier.
3922 the code a bit easier.
3919
3923
3920 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3924 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3921 information to crash reports.
3925 information to crash reports.
3922
3926
3923 2002-02-12 Fernando Perez <fperez@colorado.edu>
3927 2002-02-12 Fernando Perez <fperez@colorado.edu>
3924
3928
3925 * Released 0.2.5.
3929 * Released 0.2.5.
3926
3930
3927 2002-02-11 Fernando Perez <fperez@colorado.edu>
3931 2002-02-11 Fernando Perez <fperez@colorado.edu>
3928
3932
3929 * Wrote a relatively complete Windows installer. It puts
3933 * Wrote a relatively complete Windows installer. It puts
3930 everything in place, creates Start Menu entries and fixes the
3934 everything in place, creates Start Menu entries and fixes the
3931 color issues. Nothing fancy, but it works.
3935 color issues. Nothing fancy, but it works.
3932
3936
3933 2002-02-10 Fernando Perez <fperez@colorado.edu>
3937 2002-02-10 Fernando Perez <fperez@colorado.edu>
3934
3938
3935 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3939 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3936 os.path.expanduser() call so that we can type @run ~/myfile.py and
3940 os.path.expanduser() call so that we can type @run ~/myfile.py and
3937 have thigs work as expected.
3941 have thigs work as expected.
3938
3942
3939 * IPython/genutils.py (page): fixed exception handling so things
3943 * IPython/genutils.py (page): fixed exception handling so things
3940 work both in Unix and Windows correctly. Quitting a pager triggers
3944 work both in Unix and Windows correctly. Quitting a pager triggers
3941 an IOError/broken pipe in Unix, and in windows not finding a pager
3945 an IOError/broken pipe in Unix, and in windows not finding a pager
3942 is also an IOError, so I had to actually look at the return value
3946 is also an IOError, so I had to actually look at the return value
3943 of the exception, not just the exception itself. Should be ok now.
3947 of the exception, not just the exception itself. Should be ok now.
3944
3948
3945 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3949 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3946 modified to allow case-insensitive color scheme changes.
3950 modified to allow case-insensitive color scheme changes.
3947
3951
3948 2002-02-09 Fernando Perez <fperez@colorado.edu>
3952 2002-02-09 Fernando Perez <fperez@colorado.edu>
3949
3953
3950 * IPython/genutils.py (native_line_ends): new function to leave
3954 * IPython/genutils.py (native_line_ends): new function to leave
3951 user config files with os-native line-endings.
3955 user config files with os-native line-endings.
3952
3956
3953 * README and manual updates.
3957 * README and manual updates.
3954
3958
3955 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3959 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3956 instead of StringType to catch Unicode strings.
3960 instead of StringType to catch Unicode strings.
3957
3961
3958 * IPython/genutils.py (filefind): fixed bug for paths with
3962 * IPython/genutils.py (filefind): fixed bug for paths with
3959 embedded spaces (very common in Windows).
3963 embedded spaces (very common in Windows).
3960
3964
3961 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3965 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3962 files under Windows, so that they get automatically associated
3966 files under Windows, so that they get automatically associated
3963 with a text editor. Windows makes it a pain to handle
3967 with a text editor. Windows makes it a pain to handle
3964 extension-less files.
3968 extension-less files.
3965
3969
3966 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3970 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3967 warning about readline only occur for Posix. In Windows there's no
3971 warning about readline only occur for Posix. In Windows there's no
3968 way to get readline, so why bother with the warning.
3972 way to get readline, so why bother with the warning.
3969
3973
3970 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3974 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3971 for __str__ instead of dir(self), since dir() changed in 2.2.
3975 for __str__ instead of dir(self), since dir() changed in 2.2.
3972
3976
3973 * Ported to Windows! Tested on XP, I suspect it should work fine
3977 * Ported to Windows! Tested on XP, I suspect it should work fine
3974 on NT/2000, but I don't think it will work on 98 et al. That
3978 on NT/2000, but I don't think it will work on 98 et al. That
3975 series of Windows is such a piece of junk anyway that I won't try
3979 series of Windows is such a piece of junk anyway that I won't try
3976 porting it there. The XP port was straightforward, showed a few
3980 porting it there. The XP port was straightforward, showed a few
3977 bugs here and there (fixed all), in particular some string
3981 bugs here and there (fixed all), in particular some string
3978 handling stuff which required considering Unicode strings (which
3982 handling stuff which required considering Unicode strings (which
3979 Windows uses). This is good, but hasn't been too tested :) No
3983 Windows uses). This is good, but hasn't been too tested :) No
3980 fancy installer yet, I'll put a note in the manual so people at
3984 fancy installer yet, I'll put a note in the manual so people at
3981 least make manually a shortcut.
3985 least make manually a shortcut.
3982
3986
3983 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3987 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3984 into a single one, "colors". This now controls both prompt and
3988 into a single one, "colors". This now controls both prompt and
3985 exception color schemes, and can be changed both at startup
3989 exception color schemes, and can be changed both at startup
3986 (either via command-line switches or via ipythonrc files) and at
3990 (either via command-line switches or via ipythonrc files) and at
3987 runtime, with @colors.
3991 runtime, with @colors.
3988 (Magic.magic_run): renamed @prun to @run and removed the old
3992 (Magic.magic_run): renamed @prun to @run and removed the old
3989 @run. The two were too similar to warrant keeping both.
3993 @run. The two were too similar to warrant keeping both.
3990
3994
3991 2002-02-03 Fernando Perez <fperez@colorado.edu>
3995 2002-02-03 Fernando Perez <fperez@colorado.edu>
3992
3996
3993 * IPython/iplib.py (install_first_time): Added comment on how to
3997 * IPython/iplib.py (install_first_time): Added comment on how to
3994 configure the color options for first-time users. Put a <return>
3998 configure the color options for first-time users. Put a <return>
3995 request at the end so that small-terminal users get a chance to
3999 request at the end so that small-terminal users get a chance to
3996 read the startup info.
4000 read the startup info.
3997
4001
3998 2002-01-23 Fernando Perez <fperez@colorado.edu>
4002 2002-01-23 Fernando Perez <fperez@colorado.edu>
3999
4003
4000 * IPython/iplib.py (CachedOutput.update): Changed output memory
4004 * IPython/iplib.py (CachedOutput.update): Changed output memory
4001 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4005 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4002 input history we still use _i. Did this b/c these variable are
4006 input history we still use _i. Did this b/c these variable are
4003 very commonly used in interactive work, so the less we need to
4007 very commonly used in interactive work, so the less we need to
4004 type the better off we are.
4008 type the better off we are.
4005 (Magic.magic_prun): updated @prun to better handle the namespaces
4009 (Magic.magic_prun): updated @prun to better handle the namespaces
4006 the file will run in, including a fix for __name__ not being set
4010 the file will run in, including a fix for __name__ not being set
4007 before.
4011 before.
4008
4012
4009 2002-01-20 Fernando Perez <fperez@colorado.edu>
4013 2002-01-20 Fernando Perez <fperez@colorado.edu>
4010
4014
4011 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4015 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4012 extra garbage for Python 2.2. Need to look more carefully into
4016 extra garbage for Python 2.2. Need to look more carefully into
4013 this later.
4017 this later.
4014
4018
4015 2002-01-19 Fernando Perez <fperez@colorado.edu>
4019 2002-01-19 Fernando Perez <fperez@colorado.edu>
4016
4020
4017 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4021 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4018 display SyntaxError exceptions properly formatted when they occur
4022 display SyntaxError exceptions properly formatted when they occur
4019 (they can be triggered by imported code).
4023 (they can be triggered by imported code).
4020
4024
4021 2002-01-18 Fernando Perez <fperez@colorado.edu>
4025 2002-01-18 Fernando Perez <fperez@colorado.edu>
4022
4026
4023 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4027 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4024 SyntaxError exceptions are reported nicely formatted, instead of
4028 SyntaxError exceptions are reported nicely formatted, instead of
4025 spitting out only offset information as before.
4029 spitting out only offset information as before.
4026 (Magic.magic_prun): Added the @prun function for executing
4030 (Magic.magic_prun): Added the @prun function for executing
4027 programs with command line args inside IPython.
4031 programs with command line args inside IPython.
4028
4032
4029 2002-01-16 Fernando Perez <fperez@colorado.edu>
4033 2002-01-16 Fernando Perez <fperez@colorado.edu>
4030
4034
4031 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4035 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4032 to *not* include the last item given in a range. This brings their
4036 to *not* include the last item given in a range. This brings their
4033 behavior in line with Python's slicing:
4037 behavior in line with Python's slicing:
4034 a[n1:n2] -> a[n1]...a[n2-1]
4038 a[n1:n2] -> a[n1]...a[n2-1]
4035 It may be a bit less convenient, but I prefer to stick to Python's
4039 It may be a bit less convenient, but I prefer to stick to Python's
4036 conventions *everywhere*, so users never have to wonder.
4040 conventions *everywhere*, so users never have to wonder.
4037 (Magic.magic_macro): Added @macro function to ease the creation of
4041 (Magic.magic_macro): Added @macro function to ease the creation of
4038 macros.
4042 macros.
4039
4043
4040 2002-01-05 Fernando Perez <fperez@colorado.edu>
4044 2002-01-05 Fernando Perez <fperez@colorado.edu>
4041
4045
4042 * Released 0.2.4.
4046 * Released 0.2.4.
4043
4047
4044 * IPython/iplib.py (Magic.magic_pdef):
4048 * IPython/iplib.py (Magic.magic_pdef):
4045 (InteractiveShell.safe_execfile): report magic lines and error
4049 (InteractiveShell.safe_execfile): report magic lines and error
4046 lines without line numbers so one can easily copy/paste them for
4050 lines without line numbers so one can easily copy/paste them for
4047 re-execution.
4051 re-execution.
4048
4052
4049 * Updated manual with recent changes.
4053 * Updated manual with recent changes.
4050
4054
4051 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4055 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4052 docstring printing when class? is called. Very handy for knowing
4056 docstring printing when class? is called. Very handy for knowing
4053 how to create class instances (as long as __init__ is well
4057 how to create class instances (as long as __init__ is well
4054 documented, of course :)
4058 documented, of course :)
4055 (Magic.magic_doc): print both class and constructor docstrings.
4059 (Magic.magic_doc): print both class and constructor docstrings.
4056 (Magic.magic_pdef): give constructor info if passed a class and
4060 (Magic.magic_pdef): give constructor info if passed a class and
4057 __call__ info for callable object instances.
4061 __call__ info for callable object instances.
4058
4062
4059 2002-01-04 Fernando Perez <fperez@colorado.edu>
4063 2002-01-04 Fernando Perez <fperez@colorado.edu>
4060
4064
4061 * Made deep_reload() off by default. It doesn't always work
4065 * Made deep_reload() off by default. It doesn't always work
4062 exactly as intended, so it's probably safer to have it off. It's
4066 exactly as intended, so it's probably safer to have it off. It's
4063 still available as dreload() anyway, so nothing is lost.
4067 still available as dreload() anyway, so nothing is lost.
4064
4068
4065 2002-01-02 Fernando Perez <fperez@colorado.edu>
4069 2002-01-02 Fernando Perez <fperez@colorado.edu>
4066
4070
4067 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4071 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4068 so I wanted an updated release).
4072 so I wanted an updated release).
4069
4073
4070 2001-12-27 Fernando Perez <fperez@colorado.edu>
4074 2001-12-27 Fernando Perez <fperez@colorado.edu>
4071
4075
4072 * IPython/iplib.py (InteractiveShell.interact): Added the original
4076 * IPython/iplib.py (InteractiveShell.interact): Added the original
4073 code from 'code.py' for this module in order to change the
4077 code from 'code.py' for this module in order to change the
4074 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4078 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4075 the history cache would break when the user hit Ctrl-C, and
4079 the history cache would break when the user hit Ctrl-C, and
4076 interact() offers no way to add any hooks to it.
4080 interact() offers no way to add any hooks to it.
4077
4081
4078 2001-12-23 Fernando Perez <fperez@colorado.edu>
4082 2001-12-23 Fernando Perez <fperez@colorado.edu>
4079
4083
4080 * setup.py: added check for 'MANIFEST' before trying to remove
4084 * setup.py: added check for 'MANIFEST' before trying to remove
4081 it. Thanks to Sean Reifschneider.
4085 it. Thanks to Sean Reifschneider.
4082
4086
4083 2001-12-22 Fernando Perez <fperez@colorado.edu>
4087 2001-12-22 Fernando Perez <fperez@colorado.edu>
4084
4088
4085 * Released 0.2.2.
4089 * Released 0.2.2.
4086
4090
4087 * Finished (reasonably) writing the manual. Later will add the
4091 * Finished (reasonably) writing the manual. Later will add the
4088 python-standard navigation stylesheets, but for the time being
4092 python-standard navigation stylesheets, but for the time being
4089 it's fairly complete. Distribution will include html and pdf
4093 it's fairly complete. Distribution will include html and pdf
4090 versions.
4094 versions.
4091
4095
4092 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4096 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4093 (MayaVi author).
4097 (MayaVi author).
4094
4098
4095 2001-12-21 Fernando Perez <fperez@colorado.edu>
4099 2001-12-21 Fernando Perez <fperez@colorado.edu>
4096
4100
4097 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4101 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4098 good public release, I think (with the manual and the distutils
4102 good public release, I think (with the manual and the distutils
4099 installer). The manual can use some work, but that can go
4103 installer). The manual can use some work, but that can go
4100 slowly. Otherwise I think it's quite nice for end users. Next
4104 slowly. Otherwise I think it's quite nice for end users. Next
4101 summer, rewrite the guts of it...
4105 summer, rewrite the guts of it...
4102
4106
4103 * Changed format of ipythonrc files to use whitespace as the
4107 * Changed format of ipythonrc files to use whitespace as the
4104 separator instead of an explicit '='. Cleaner.
4108 separator instead of an explicit '='. Cleaner.
4105
4109
4106 2001-12-20 Fernando Perez <fperez@colorado.edu>
4110 2001-12-20 Fernando Perez <fperez@colorado.edu>
4107
4111
4108 * Started a manual in LyX. For now it's just a quick merge of the
4112 * Started a manual in LyX. For now it's just a quick merge of the
4109 various internal docstrings and READMEs. Later it may grow into a
4113 various internal docstrings and READMEs. Later it may grow into a
4110 nice, full-blown manual.
4114 nice, full-blown manual.
4111
4115
4112 * Set up a distutils based installer. Installation should now be
4116 * Set up a distutils based installer. Installation should now be
4113 trivially simple for end-users.
4117 trivially simple for end-users.
4114
4118
4115 2001-12-11 Fernando Perez <fperez@colorado.edu>
4119 2001-12-11 Fernando Perez <fperez@colorado.edu>
4116
4120
4117 * Released 0.2.0. First public release, announced it at
4121 * Released 0.2.0. First public release, announced it at
4118 comp.lang.python. From now on, just bugfixes...
4122 comp.lang.python. From now on, just bugfixes...
4119
4123
4120 * Went through all the files, set copyright/license notices and
4124 * Went through all the files, set copyright/license notices and
4121 cleaned up things. Ready for release.
4125 cleaned up things. Ready for release.
4122
4126
4123 2001-12-10 Fernando Perez <fperez@colorado.edu>
4127 2001-12-10 Fernando Perez <fperez@colorado.edu>
4124
4128
4125 * Changed the first-time installer not to use tarfiles. It's more
4129 * Changed the first-time installer not to use tarfiles. It's more
4126 robust now and less unix-dependent. Also makes it easier for
4130 robust now and less unix-dependent. Also makes it easier for
4127 people to later upgrade versions.
4131 people to later upgrade versions.
4128
4132
4129 * Changed @exit to @abort to reflect the fact that it's pretty
4133 * Changed @exit to @abort to reflect the fact that it's pretty
4130 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4134 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4131 becomes significant only when IPyhton is embedded: in that case,
4135 becomes significant only when IPyhton is embedded: in that case,
4132 C-D closes IPython only, but @abort kills the enclosing program
4136 C-D closes IPython only, but @abort kills the enclosing program
4133 too (unless it had called IPython inside a try catching
4137 too (unless it had called IPython inside a try catching
4134 SystemExit).
4138 SystemExit).
4135
4139
4136 * Created Shell module which exposes the actuall IPython Shell
4140 * Created Shell module which exposes the actuall IPython Shell
4137 classes, currently the normal and the embeddable one. This at
4141 classes, currently the normal and the embeddable one. This at
4138 least offers a stable interface we won't need to change when
4142 least offers a stable interface we won't need to change when
4139 (later) the internals are rewritten. That rewrite will be confined
4143 (later) the internals are rewritten. That rewrite will be confined
4140 to iplib and ipmaker, but the Shell interface should remain as is.
4144 to iplib and ipmaker, but the Shell interface should remain as is.
4141
4145
4142 * Added embed module which offers an embeddable IPShell object,
4146 * Added embed module which offers an embeddable IPShell object,
4143 useful to fire up IPython *inside* a running program. Great for
4147 useful to fire up IPython *inside* a running program. Great for
4144 debugging or dynamical data analysis.
4148 debugging or dynamical data analysis.
4145
4149
4146 2001-12-08 Fernando Perez <fperez@colorado.edu>
4150 2001-12-08 Fernando Perez <fperez@colorado.edu>
4147
4151
4148 * Fixed small bug preventing seeing info from methods of defined
4152 * Fixed small bug preventing seeing info from methods of defined
4149 objects (incorrect namespace in _ofind()).
4153 objects (incorrect namespace in _ofind()).
4150
4154
4151 * Documentation cleanup. Moved the main usage docstrings to a
4155 * Documentation cleanup. Moved the main usage docstrings to a
4152 separate file, usage.py (cleaner to maintain, and hopefully in the
4156 separate file, usage.py (cleaner to maintain, and hopefully in the
4153 future some perlpod-like way of producing interactive, man and
4157 future some perlpod-like way of producing interactive, man and
4154 html docs out of it will be found).
4158 html docs out of it will be found).
4155
4159
4156 * Added @profile to see your profile at any time.
4160 * Added @profile to see your profile at any time.
4157
4161
4158 * Added @p as an alias for 'print'. It's especially convenient if
4162 * Added @p as an alias for 'print'. It's especially convenient if
4159 using automagic ('p x' prints x).
4163 using automagic ('p x' prints x).
4160
4164
4161 * Small cleanups and fixes after a pychecker run.
4165 * Small cleanups and fixes after a pychecker run.
4162
4166
4163 * Changed the @cd command to handle @cd - and @cd -<n> for
4167 * Changed the @cd command to handle @cd - and @cd -<n> for
4164 visiting any directory in _dh.
4168 visiting any directory in _dh.
4165
4169
4166 * Introduced _dh, a history of visited directories. @dhist prints
4170 * Introduced _dh, a history of visited directories. @dhist prints
4167 it out with numbers.
4171 it out with numbers.
4168
4172
4169 2001-12-07 Fernando Perez <fperez@colorado.edu>
4173 2001-12-07 Fernando Perez <fperez@colorado.edu>
4170
4174
4171 * Released 0.1.22
4175 * Released 0.1.22
4172
4176
4173 * Made initialization a bit more robust against invalid color
4177 * Made initialization a bit more robust against invalid color
4174 options in user input (exit, not traceback-crash).
4178 options in user input (exit, not traceback-crash).
4175
4179
4176 * Changed the bug crash reporter to write the report only in the
4180 * Changed the bug crash reporter to write the report only in the
4177 user's .ipython directory. That way IPython won't litter people's
4181 user's .ipython directory. That way IPython won't litter people's
4178 hard disks with crash files all over the place. Also print on
4182 hard disks with crash files all over the place. Also print on
4179 screen the necessary mail command.
4183 screen the necessary mail command.
4180
4184
4181 * With the new ultraTB, implemented LightBG color scheme for light
4185 * With the new ultraTB, implemented LightBG color scheme for light
4182 background terminals. A lot of people like white backgrounds, so I
4186 background terminals. A lot of people like white backgrounds, so I
4183 guess we should at least give them something readable.
4187 guess we should at least give them something readable.
4184
4188
4185 2001-12-06 Fernando Perez <fperez@colorado.edu>
4189 2001-12-06 Fernando Perez <fperez@colorado.edu>
4186
4190
4187 * Modified the structure of ultraTB. Now there's a proper class
4191 * Modified the structure of ultraTB. Now there's a proper class
4188 for tables of color schemes which allow adding schemes easily and
4192 for tables of color schemes which allow adding schemes easily and
4189 switching the active scheme without creating a new instance every
4193 switching the active scheme without creating a new instance every
4190 time (which was ridiculous). The syntax for creating new schemes
4194 time (which was ridiculous). The syntax for creating new schemes
4191 is also cleaner. I think ultraTB is finally done, with a clean
4195 is also cleaner. I think ultraTB is finally done, with a clean
4192 class structure. Names are also much cleaner (now there's proper
4196 class structure. Names are also much cleaner (now there's proper
4193 color tables, no need for every variable to also have 'color' in
4197 color tables, no need for every variable to also have 'color' in
4194 its name).
4198 its name).
4195
4199
4196 * Broke down genutils into separate files. Now genutils only
4200 * Broke down genutils into separate files. Now genutils only
4197 contains utility functions, and classes have been moved to their
4201 contains utility functions, and classes have been moved to their
4198 own files (they had enough independent functionality to warrant
4202 own files (they had enough independent functionality to warrant
4199 it): ConfigLoader, OutputTrap, Struct.
4203 it): ConfigLoader, OutputTrap, Struct.
4200
4204
4201 2001-12-05 Fernando Perez <fperez@colorado.edu>
4205 2001-12-05 Fernando Perez <fperez@colorado.edu>
4202
4206
4203 * IPython turns 21! Released version 0.1.21, as a candidate for
4207 * IPython turns 21! Released version 0.1.21, as a candidate for
4204 public consumption. If all goes well, release in a few days.
4208 public consumption. If all goes well, release in a few days.
4205
4209
4206 * Fixed path bug (files in Extensions/ directory wouldn't be found
4210 * Fixed path bug (files in Extensions/ directory wouldn't be found
4207 unless IPython/ was explicitly in sys.path).
4211 unless IPython/ was explicitly in sys.path).
4208
4212
4209 * Extended the FlexCompleter class as MagicCompleter to allow
4213 * Extended the FlexCompleter class as MagicCompleter to allow
4210 completion of @-starting lines.
4214 completion of @-starting lines.
4211
4215
4212 * Created __release__.py file as a central repository for release
4216 * Created __release__.py file as a central repository for release
4213 info that other files can read from.
4217 info that other files can read from.
4214
4218
4215 * Fixed small bug in logging: when logging was turned on in
4219 * Fixed small bug in logging: when logging was turned on in
4216 mid-session, old lines with special meanings (!@?) were being
4220 mid-session, old lines with special meanings (!@?) were being
4217 logged without the prepended comment, which is necessary since
4221 logged without the prepended comment, which is necessary since
4218 they are not truly valid python syntax. This should make session
4222 they are not truly valid python syntax. This should make session
4219 restores produce less errors.
4223 restores produce less errors.
4220
4224
4221 * The namespace cleanup forced me to make a FlexCompleter class
4225 * The namespace cleanup forced me to make a FlexCompleter class
4222 which is nothing but a ripoff of rlcompleter, but with selectable
4226 which is nothing but a ripoff of rlcompleter, but with selectable
4223 namespace (rlcompleter only works in __main__.__dict__). I'll try
4227 namespace (rlcompleter only works in __main__.__dict__). I'll try
4224 to submit a note to the authors to see if this change can be
4228 to submit a note to the authors to see if this change can be
4225 incorporated in future rlcompleter releases (Dec.6: done)
4229 incorporated in future rlcompleter releases (Dec.6: done)
4226
4230
4227 * More fixes to namespace handling. It was a mess! Now all
4231 * More fixes to namespace handling. It was a mess! Now all
4228 explicit references to __main__.__dict__ are gone (except when
4232 explicit references to __main__.__dict__ are gone (except when
4229 really needed) and everything is handled through the namespace
4233 really needed) and everything is handled through the namespace
4230 dicts in the IPython instance. We seem to be getting somewhere
4234 dicts in the IPython instance. We seem to be getting somewhere
4231 with this, finally...
4235 with this, finally...
4232
4236
4233 * Small documentation updates.
4237 * Small documentation updates.
4234
4238
4235 * Created the Extensions directory under IPython (with an
4239 * Created the Extensions directory under IPython (with an
4236 __init__.py). Put the PhysicalQ stuff there. This directory should
4240 __init__.py). Put the PhysicalQ stuff there. This directory should
4237 be used for all special-purpose extensions.
4241 be used for all special-purpose extensions.
4238
4242
4239 * File renaming:
4243 * File renaming:
4240 ipythonlib --> ipmaker
4244 ipythonlib --> ipmaker
4241 ipplib --> iplib
4245 ipplib --> iplib
4242 This makes a bit more sense in terms of what these files actually do.
4246 This makes a bit more sense in terms of what these files actually do.
4243
4247
4244 * Moved all the classes and functions in ipythonlib to ipplib, so
4248 * Moved all the classes and functions in ipythonlib to ipplib, so
4245 now ipythonlib only has make_IPython(). This will ease up its
4249 now ipythonlib only has make_IPython(). This will ease up its
4246 splitting in smaller functional chunks later.
4250 splitting in smaller functional chunks later.
4247
4251
4248 * Cleaned up (done, I think) output of @whos. Better column
4252 * Cleaned up (done, I think) output of @whos. Better column
4249 formatting, and now shows str(var) for as much as it can, which is
4253 formatting, and now shows str(var) for as much as it can, which is
4250 typically what one gets with a 'print var'.
4254 typically what one gets with a 'print var'.
4251
4255
4252 2001-12-04 Fernando Perez <fperez@colorado.edu>
4256 2001-12-04 Fernando Perez <fperez@colorado.edu>
4253
4257
4254 * Fixed namespace problems. Now builtin/IPyhton/user names get
4258 * Fixed namespace problems. Now builtin/IPyhton/user names get
4255 properly reported in their namespace. Internal namespace handling
4259 properly reported in their namespace. Internal namespace handling
4256 is finally getting decent (not perfect yet, but much better than
4260 is finally getting decent (not perfect yet, but much better than
4257 the ad-hoc mess we had).
4261 the ad-hoc mess we had).
4258
4262
4259 * Removed -exit option. If people just want to run a python
4263 * Removed -exit option. If people just want to run a python
4260 script, that's what the normal interpreter is for. Less
4264 script, that's what the normal interpreter is for. Less
4261 unnecessary options, less chances for bugs.
4265 unnecessary options, less chances for bugs.
4262
4266
4263 * Added a crash handler which generates a complete post-mortem if
4267 * Added a crash handler which generates a complete post-mortem if
4264 IPython crashes. This will help a lot in tracking bugs down the
4268 IPython crashes. This will help a lot in tracking bugs down the
4265 road.
4269 road.
4266
4270
4267 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4271 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4268 which were boud to functions being reassigned would bypass the
4272 which were boud to functions being reassigned would bypass the
4269 logger, breaking the sync of _il with the prompt counter. This
4273 logger, breaking the sync of _il with the prompt counter. This
4270 would then crash IPython later when a new line was logged.
4274 would then crash IPython later when a new line was logged.
4271
4275
4272 2001-12-02 Fernando Perez <fperez@colorado.edu>
4276 2001-12-02 Fernando Perez <fperez@colorado.edu>
4273
4277
4274 * Made IPython a package. This means people don't have to clutter
4278 * Made IPython a package. This means people don't have to clutter
4275 their sys.path with yet another directory. Changed the INSTALL
4279 their sys.path with yet another directory. Changed the INSTALL
4276 file accordingly.
4280 file accordingly.
4277
4281
4278 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4282 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4279 sorts its output (so @who shows it sorted) and @whos formats the
4283 sorts its output (so @who shows it sorted) and @whos formats the
4280 table according to the width of the first column. Nicer, easier to
4284 table according to the width of the first column. Nicer, easier to
4281 read. Todo: write a generic table_format() which takes a list of
4285 read. Todo: write a generic table_format() which takes a list of
4282 lists and prints it nicely formatted, with optional row/column
4286 lists and prints it nicely formatted, with optional row/column
4283 separators and proper padding and justification.
4287 separators and proper padding and justification.
4284
4288
4285 * Released 0.1.20
4289 * Released 0.1.20
4286
4290
4287 * Fixed bug in @log which would reverse the inputcache list (a
4291 * Fixed bug in @log which would reverse the inputcache list (a
4288 copy operation was missing).
4292 copy operation was missing).
4289
4293
4290 * Code cleanup. @config was changed to use page(). Better, since
4294 * Code cleanup. @config was changed to use page(). Better, since
4291 its output is always quite long.
4295 its output is always quite long.
4292
4296
4293 * Itpl is back as a dependency. I was having too many problems
4297 * Itpl is back as a dependency. I was having too many problems
4294 getting the parametric aliases to work reliably, and it's just
4298 getting the parametric aliases to work reliably, and it's just
4295 easier to code weird string operations with it than playing %()s
4299 easier to code weird string operations with it than playing %()s
4296 games. It's only ~6k, so I don't think it's too big a deal.
4300 games. It's only ~6k, so I don't think it's too big a deal.
4297
4301
4298 * Found (and fixed) a very nasty bug with history. !lines weren't
4302 * Found (and fixed) a very nasty bug with history. !lines weren't
4299 getting cached, and the out of sync caches would crash
4303 getting cached, and the out of sync caches would crash
4300 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4304 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4301 division of labor a bit better. Bug fixed, cleaner structure.
4305 division of labor a bit better. Bug fixed, cleaner structure.
4302
4306
4303 2001-12-01 Fernando Perez <fperez@colorado.edu>
4307 2001-12-01 Fernando Perez <fperez@colorado.edu>
4304
4308
4305 * Released 0.1.19
4309 * Released 0.1.19
4306
4310
4307 * Added option -n to @hist to prevent line number printing. Much
4311 * Added option -n to @hist to prevent line number printing. Much
4308 easier to copy/paste code this way.
4312 easier to copy/paste code this way.
4309
4313
4310 * Created global _il to hold the input list. Allows easy
4314 * Created global _il to hold the input list. Allows easy
4311 re-execution of blocks of code by slicing it (inspired by Janko's
4315 re-execution of blocks of code by slicing it (inspired by Janko's
4312 comment on 'macros').
4316 comment on 'macros').
4313
4317
4314 * Small fixes and doc updates.
4318 * Small fixes and doc updates.
4315
4319
4316 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4320 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4317 much too fragile with automagic. Handles properly multi-line
4321 much too fragile with automagic. Handles properly multi-line
4318 statements and takes parameters.
4322 statements and takes parameters.
4319
4323
4320 2001-11-30 Fernando Perez <fperez@colorado.edu>
4324 2001-11-30 Fernando Perez <fperez@colorado.edu>
4321
4325
4322 * Version 0.1.18 released.
4326 * Version 0.1.18 released.
4323
4327
4324 * Fixed nasty namespace bug in initial module imports.
4328 * Fixed nasty namespace bug in initial module imports.
4325
4329
4326 * Added copyright/license notes to all code files (except
4330 * Added copyright/license notes to all code files (except
4327 DPyGetOpt). For the time being, LGPL. That could change.
4331 DPyGetOpt). For the time being, LGPL. That could change.
4328
4332
4329 * Rewrote a much nicer README, updated INSTALL, cleaned up
4333 * Rewrote a much nicer README, updated INSTALL, cleaned up
4330 ipythonrc-* samples.
4334 ipythonrc-* samples.
4331
4335
4332 * Overall code/documentation cleanup. Basically ready for
4336 * Overall code/documentation cleanup. Basically ready for
4333 release. Only remaining thing: licence decision (LGPL?).
4337 release. Only remaining thing: licence decision (LGPL?).
4334
4338
4335 * Converted load_config to a class, ConfigLoader. Now recursion
4339 * Converted load_config to a class, ConfigLoader. Now recursion
4336 control is better organized. Doesn't include the same file twice.
4340 control is better organized. Doesn't include the same file twice.
4337
4341
4338 2001-11-29 Fernando Perez <fperez@colorado.edu>
4342 2001-11-29 Fernando Perez <fperez@colorado.edu>
4339
4343
4340 * Got input history working. Changed output history variables from
4344 * Got input history working. Changed output history variables from
4341 _p to _o so that _i is for input and _o for output. Just cleaner
4345 _p to _o so that _i is for input and _o for output. Just cleaner
4342 convention.
4346 convention.
4343
4347
4344 * Implemented parametric aliases. This pretty much allows the
4348 * Implemented parametric aliases. This pretty much allows the
4345 alias system to offer full-blown shell convenience, I think.
4349 alias system to offer full-blown shell convenience, I think.
4346
4350
4347 * Version 0.1.17 released, 0.1.18 opened.
4351 * Version 0.1.17 released, 0.1.18 opened.
4348
4352
4349 * dot_ipython/ipythonrc (alias): added documentation.
4353 * dot_ipython/ipythonrc (alias): added documentation.
4350 (xcolor): Fixed small bug (xcolors -> xcolor)
4354 (xcolor): Fixed small bug (xcolors -> xcolor)
4351
4355
4352 * Changed the alias system. Now alias is a magic command to define
4356 * Changed the alias system. Now alias is a magic command to define
4353 aliases just like the shell. Rationale: the builtin magics should
4357 aliases just like the shell. Rationale: the builtin magics should
4354 be there for things deeply connected to IPython's
4358 be there for things deeply connected to IPython's
4355 architecture. And this is a much lighter system for what I think
4359 architecture. And this is a much lighter system for what I think
4356 is the really important feature: allowing users to define quickly
4360 is the really important feature: allowing users to define quickly
4357 magics that will do shell things for them, so they can customize
4361 magics that will do shell things for them, so they can customize
4358 IPython easily to match their work habits. If someone is really
4362 IPython easily to match their work habits. If someone is really
4359 desperate to have another name for a builtin alias, they can
4363 desperate to have another name for a builtin alias, they can
4360 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4364 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4361 works.
4365 works.
4362
4366
4363 2001-11-28 Fernando Perez <fperez@colorado.edu>
4367 2001-11-28 Fernando Perez <fperez@colorado.edu>
4364
4368
4365 * Changed @file so that it opens the source file at the proper
4369 * Changed @file so that it opens the source file at the proper
4366 line. Since it uses less, if your EDITOR environment is
4370 line. Since it uses less, if your EDITOR environment is
4367 configured, typing v will immediately open your editor of choice
4371 configured, typing v will immediately open your editor of choice
4368 right at the line where the object is defined. Not as quick as
4372 right at the line where the object is defined. Not as quick as
4369 having a direct @edit command, but for all intents and purposes it
4373 having a direct @edit command, but for all intents and purposes it
4370 works. And I don't have to worry about writing @edit to deal with
4374 works. And I don't have to worry about writing @edit to deal with
4371 all the editors, less does that.
4375 all the editors, less does that.
4372
4376
4373 * Version 0.1.16 released, 0.1.17 opened.
4377 * Version 0.1.16 released, 0.1.17 opened.
4374
4378
4375 * Fixed some nasty bugs in the page/page_dumb combo that could
4379 * Fixed some nasty bugs in the page/page_dumb combo that could
4376 crash IPython.
4380 crash IPython.
4377
4381
4378 2001-11-27 Fernando Perez <fperez@colorado.edu>
4382 2001-11-27 Fernando Perez <fperez@colorado.edu>
4379
4383
4380 * Version 0.1.15 released, 0.1.16 opened.
4384 * Version 0.1.15 released, 0.1.16 opened.
4381
4385
4382 * Finally got ? and ?? to work for undefined things: now it's
4386 * Finally got ? and ?? to work for undefined things: now it's
4383 possible to type {}.get? and get information about the get method
4387 possible to type {}.get? and get information about the get method
4384 of dicts, or os.path? even if only os is defined (so technically
4388 of dicts, or os.path? even if only os is defined (so technically
4385 os.path isn't). Works at any level. For example, after import os,
4389 os.path isn't). Works at any level. For example, after import os,
4386 os?, os.path?, os.path.abspath? all work. This is great, took some
4390 os?, os.path?, os.path.abspath? all work. This is great, took some
4387 work in _ofind.
4391 work in _ofind.
4388
4392
4389 * Fixed more bugs with logging. The sanest way to do it was to add
4393 * Fixed more bugs with logging. The sanest way to do it was to add
4390 to @log a 'mode' parameter. Killed two in one shot (this mode
4394 to @log a 'mode' parameter. Killed two in one shot (this mode
4391 option was a request of Janko's). I think it's finally clean
4395 option was a request of Janko's). I think it's finally clean
4392 (famous last words).
4396 (famous last words).
4393
4397
4394 * Added a page_dumb() pager which does a decent job of paging on
4398 * Added a page_dumb() pager which does a decent job of paging on
4395 screen, if better things (like less) aren't available. One less
4399 screen, if better things (like less) aren't available. One less
4396 unix dependency (someday maybe somebody will port this to
4400 unix dependency (someday maybe somebody will port this to
4397 windows).
4401 windows).
4398
4402
4399 * Fixed problem in magic_log: would lock of logging out if log
4403 * Fixed problem in magic_log: would lock of logging out if log
4400 creation failed (because it would still think it had succeeded).
4404 creation failed (because it would still think it had succeeded).
4401
4405
4402 * Improved the page() function using curses to auto-detect screen
4406 * Improved the page() function using curses to auto-detect screen
4403 size. Now it can make a much better decision on whether to print
4407 size. Now it can make a much better decision on whether to print
4404 or page a string. Option screen_length was modified: a value 0
4408 or page a string. Option screen_length was modified: a value 0
4405 means auto-detect, and that's the default now.
4409 means auto-detect, and that's the default now.
4406
4410
4407 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4411 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4408 go out. I'll test it for a few days, then talk to Janko about
4412 go out. I'll test it for a few days, then talk to Janko about
4409 licences and announce it.
4413 licences and announce it.
4410
4414
4411 * Fixed the length of the auto-generated ---> prompt which appears
4415 * Fixed the length of the auto-generated ---> prompt which appears
4412 for auto-parens and auto-quotes. Getting this right isn't trivial,
4416 for auto-parens and auto-quotes. Getting this right isn't trivial,
4413 with all the color escapes, different prompt types and optional
4417 with all the color escapes, different prompt types and optional
4414 separators. But it seems to be working in all the combinations.
4418 separators. But it seems to be working in all the combinations.
4415
4419
4416 2001-11-26 Fernando Perez <fperez@colorado.edu>
4420 2001-11-26 Fernando Perez <fperez@colorado.edu>
4417
4421
4418 * Wrote a regexp filter to get option types from the option names
4422 * Wrote a regexp filter to get option types from the option names
4419 string. This eliminates the need to manually keep two duplicate
4423 string. This eliminates the need to manually keep two duplicate
4420 lists.
4424 lists.
4421
4425
4422 * Removed the unneeded check_option_names. Now options are handled
4426 * Removed the unneeded check_option_names. Now options are handled
4423 in a much saner manner and it's easy to visually check that things
4427 in a much saner manner and it's easy to visually check that things
4424 are ok.
4428 are ok.
4425
4429
4426 * Updated version numbers on all files I modified to carry a
4430 * Updated version numbers on all files I modified to carry a
4427 notice so Janko and Nathan have clear version markers.
4431 notice so Janko and Nathan have clear version markers.
4428
4432
4429 * Updated docstring for ultraTB with my changes. I should send
4433 * Updated docstring for ultraTB with my changes. I should send
4430 this to Nathan.
4434 this to Nathan.
4431
4435
4432 * Lots of small fixes. Ran everything through pychecker again.
4436 * Lots of small fixes. Ran everything through pychecker again.
4433
4437
4434 * Made loading of deep_reload an cmd line option. If it's not too
4438 * Made loading of deep_reload an cmd line option. If it's not too
4435 kosher, now people can just disable it. With -nodeep_reload it's
4439 kosher, now people can just disable it. With -nodeep_reload it's
4436 still available as dreload(), it just won't overwrite reload().
4440 still available as dreload(), it just won't overwrite reload().
4437
4441
4438 * Moved many options to the no| form (-opt and -noopt
4442 * Moved many options to the no| form (-opt and -noopt
4439 accepted). Cleaner.
4443 accepted). Cleaner.
4440
4444
4441 * Changed magic_log so that if called with no parameters, it uses
4445 * Changed magic_log so that if called with no parameters, it uses
4442 'rotate' mode. That way auto-generated logs aren't automatically
4446 'rotate' mode. That way auto-generated logs aren't automatically
4443 over-written. For normal logs, now a backup is made if it exists
4447 over-written. For normal logs, now a backup is made if it exists
4444 (only 1 level of backups). A new 'backup' mode was added to the
4448 (only 1 level of backups). A new 'backup' mode was added to the
4445 Logger class to support this. This was a request by Janko.
4449 Logger class to support this. This was a request by Janko.
4446
4450
4447 * Added @logoff/@logon to stop/restart an active log.
4451 * Added @logoff/@logon to stop/restart an active log.
4448
4452
4449 * Fixed a lot of bugs in log saving/replay. It was pretty
4453 * Fixed a lot of bugs in log saving/replay. It was pretty
4450 broken. Now special lines (!@,/) appear properly in the command
4454 broken. Now special lines (!@,/) appear properly in the command
4451 history after a log replay.
4455 history after a log replay.
4452
4456
4453 * Tried and failed to implement full session saving via pickle. My
4457 * Tried and failed to implement full session saving via pickle. My
4454 idea was to pickle __main__.__dict__, but modules can't be
4458 idea was to pickle __main__.__dict__, but modules can't be
4455 pickled. This would be a better alternative to replaying logs, but
4459 pickled. This would be a better alternative to replaying logs, but
4456 seems quite tricky to get to work. Changed -session to be called
4460 seems quite tricky to get to work. Changed -session to be called
4457 -logplay, which more accurately reflects what it does. And if we
4461 -logplay, which more accurately reflects what it does. And if we
4458 ever get real session saving working, -session is now available.
4462 ever get real session saving working, -session is now available.
4459
4463
4460 * Implemented color schemes for prompts also. As for tracebacks,
4464 * Implemented color schemes for prompts also. As for tracebacks,
4461 currently only NoColor and Linux are supported. But now the
4465 currently only NoColor and Linux are supported. But now the
4462 infrastructure is in place, based on a generic ColorScheme
4466 infrastructure is in place, based on a generic ColorScheme
4463 class. So writing and activating new schemes both for the prompts
4467 class. So writing and activating new schemes both for the prompts
4464 and the tracebacks should be straightforward.
4468 and the tracebacks should be straightforward.
4465
4469
4466 * Version 0.1.13 released, 0.1.14 opened.
4470 * Version 0.1.13 released, 0.1.14 opened.
4467
4471
4468 * Changed handling of options for output cache. Now counter is
4472 * Changed handling of options for output cache. Now counter is
4469 hardwired starting at 1 and one specifies the maximum number of
4473 hardwired starting at 1 and one specifies the maximum number of
4470 entries *in the outcache* (not the max prompt counter). This is
4474 entries *in the outcache* (not the max prompt counter). This is
4471 much better, since many statements won't increase the cache
4475 much better, since many statements won't increase the cache
4472 count. It also eliminated some confusing options, now there's only
4476 count. It also eliminated some confusing options, now there's only
4473 one: cache_size.
4477 one: cache_size.
4474
4478
4475 * Added 'alias' magic function and magic_alias option in the
4479 * Added 'alias' magic function and magic_alias option in the
4476 ipythonrc file. Now the user can easily define whatever names he
4480 ipythonrc file. Now the user can easily define whatever names he
4477 wants for the magic functions without having to play weird
4481 wants for the magic functions without having to play weird
4478 namespace games. This gives IPython a real shell-like feel.
4482 namespace games. This gives IPython a real shell-like feel.
4479
4483
4480 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4484 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4481 @ or not).
4485 @ or not).
4482
4486
4483 This was one of the last remaining 'visible' bugs (that I know
4487 This was one of the last remaining 'visible' bugs (that I know
4484 of). I think if I can clean up the session loading so it works
4488 of). I think if I can clean up the session loading so it works
4485 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4489 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4486 about licensing).
4490 about licensing).
4487
4491
4488 2001-11-25 Fernando Perez <fperez@colorado.edu>
4492 2001-11-25 Fernando Perez <fperez@colorado.edu>
4489
4493
4490 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4494 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4491 there's a cleaner distinction between what ? and ?? show.
4495 there's a cleaner distinction between what ? and ?? show.
4492
4496
4493 * Added screen_length option. Now the user can define his own
4497 * Added screen_length option. Now the user can define his own
4494 screen size for page() operations.
4498 screen size for page() operations.
4495
4499
4496 * Implemented magic shell-like functions with automatic code
4500 * Implemented magic shell-like functions with automatic code
4497 generation. Now adding another function is just a matter of adding
4501 generation. Now adding another function is just a matter of adding
4498 an entry to a dict, and the function is dynamically generated at
4502 an entry to a dict, and the function is dynamically generated at
4499 run-time. Python has some really cool features!
4503 run-time. Python has some really cool features!
4500
4504
4501 * Renamed many options to cleanup conventions a little. Now all
4505 * Renamed many options to cleanup conventions a little. Now all
4502 are lowercase, and only underscores where needed. Also in the code
4506 are lowercase, and only underscores where needed. Also in the code
4503 option name tables are clearer.
4507 option name tables are clearer.
4504
4508
4505 * Changed prompts a little. Now input is 'In [n]:' instead of
4509 * Changed prompts a little. Now input is 'In [n]:' instead of
4506 'In[n]:='. This allows it the numbers to be aligned with the
4510 'In[n]:='. This allows it the numbers to be aligned with the
4507 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4511 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4508 Python (it was a Mathematica thing). The '...' continuation prompt
4512 Python (it was a Mathematica thing). The '...' continuation prompt
4509 was also changed a little to align better.
4513 was also changed a little to align better.
4510
4514
4511 * Fixed bug when flushing output cache. Not all _p<n> variables
4515 * Fixed bug when flushing output cache. Not all _p<n> variables
4512 exist, so their deletion needs to be wrapped in a try:
4516 exist, so their deletion needs to be wrapped in a try:
4513
4517
4514 * Figured out how to properly use inspect.formatargspec() (it
4518 * Figured out how to properly use inspect.formatargspec() (it
4515 requires the args preceded by *). So I removed all the code from
4519 requires the args preceded by *). So I removed all the code from
4516 _get_pdef in Magic, which was just replicating that.
4520 _get_pdef in Magic, which was just replicating that.
4517
4521
4518 * Added test to prefilter to allow redefining magic function names
4522 * Added test to prefilter to allow redefining magic function names
4519 as variables. This is ok, since the @ form is always available,
4523 as variables. This is ok, since the @ form is always available,
4520 but whe should allow the user to define a variable called 'ls' if
4524 but whe should allow the user to define a variable called 'ls' if
4521 he needs it.
4525 he needs it.
4522
4526
4523 * Moved the ToDo information from README into a separate ToDo.
4527 * Moved the ToDo information from README into a separate ToDo.
4524
4528
4525 * General code cleanup and small bugfixes. I think it's close to a
4529 * General code cleanup and small bugfixes. I think it's close to a
4526 state where it can be released, obviously with a big 'beta'
4530 state where it can be released, obviously with a big 'beta'
4527 warning on it.
4531 warning on it.
4528
4532
4529 * Got the magic function split to work. Now all magics are defined
4533 * Got the magic function split to work. Now all magics are defined
4530 in a separate class. It just organizes things a bit, and now
4534 in a separate class. It just organizes things a bit, and now
4531 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4535 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4532 was too long).
4536 was too long).
4533
4537
4534 * Changed @clear to @reset to avoid potential confusions with
4538 * Changed @clear to @reset to avoid potential confusions with
4535 the shell command clear. Also renamed @cl to @clear, which does
4539 the shell command clear. Also renamed @cl to @clear, which does
4536 exactly what people expect it to from their shell experience.
4540 exactly what people expect it to from their shell experience.
4537
4541
4538 Added a check to the @reset command (since it's so
4542 Added a check to the @reset command (since it's so
4539 destructive, it's probably a good idea to ask for confirmation).
4543 destructive, it's probably a good idea to ask for confirmation).
4540 But now reset only works for full namespace resetting. Since the
4544 But now reset only works for full namespace resetting. Since the
4541 del keyword is already there for deleting a few specific
4545 del keyword is already there for deleting a few specific
4542 variables, I don't see the point of having a redundant magic
4546 variables, I don't see the point of having a redundant magic
4543 function for the same task.
4547 function for the same task.
4544
4548
4545 2001-11-24 Fernando Perez <fperez@colorado.edu>
4549 2001-11-24 Fernando Perez <fperez@colorado.edu>
4546
4550
4547 * Updated the builtin docs (esp. the ? ones).
4551 * Updated the builtin docs (esp. the ? ones).
4548
4552
4549 * Ran all the code through pychecker. Not terribly impressed with
4553 * Ran all the code through pychecker. Not terribly impressed with
4550 it: lots of spurious warnings and didn't really find anything of
4554 it: lots of spurious warnings and didn't really find anything of
4551 substance (just a few modules being imported and not used).
4555 substance (just a few modules being imported and not used).
4552
4556
4553 * Implemented the new ultraTB functionality into IPython. New
4557 * Implemented the new ultraTB functionality into IPython. New
4554 option: xcolors. This chooses color scheme. xmode now only selects
4558 option: xcolors. This chooses color scheme. xmode now only selects
4555 between Plain and Verbose. Better orthogonality.
4559 between Plain and Verbose. Better orthogonality.
4556
4560
4557 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4561 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4558 mode and color scheme for the exception handlers. Now it's
4562 mode and color scheme for the exception handlers. Now it's
4559 possible to have the verbose traceback with no coloring.
4563 possible to have the verbose traceback with no coloring.
4560
4564
4561 2001-11-23 Fernando Perez <fperez@colorado.edu>
4565 2001-11-23 Fernando Perez <fperez@colorado.edu>
4562
4566
4563 * Version 0.1.12 released, 0.1.13 opened.
4567 * Version 0.1.12 released, 0.1.13 opened.
4564
4568
4565 * Removed option to set auto-quote and auto-paren escapes by
4569 * Removed option to set auto-quote and auto-paren escapes by
4566 user. The chances of breaking valid syntax are just too high. If
4570 user. The chances of breaking valid syntax are just too high. If
4567 someone *really* wants, they can always dig into the code.
4571 someone *really* wants, they can always dig into the code.
4568
4572
4569 * Made prompt separators configurable.
4573 * Made prompt separators configurable.
4570
4574
4571 2001-11-22 Fernando Perez <fperez@colorado.edu>
4575 2001-11-22 Fernando Perez <fperez@colorado.edu>
4572
4576
4573 * Small bugfixes in many places.
4577 * Small bugfixes in many places.
4574
4578
4575 * Removed the MyCompleter class from ipplib. It seemed redundant
4579 * Removed the MyCompleter class from ipplib. It seemed redundant
4576 with the C-p,C-n history search functionality. Less code to
4580 with the C-p,C-n history search functionality. Less code to
4577 maintain.
4581 maintain.
4578
4582
4579 * Moved all the original ipython.py code into ipythonlib.py. Right
4583 * Moved all the original ipython.py code into ipythonlib.py. Right
4580 now it's just one big dump into a function called make_IPython, so
4584 now it's just one big dump into a function called make_IPython, so
4581 no real modularity has been gained. But at least it makes the
4585 no real modularity has been gained. But at least it makes the
4582 wrapper script tiny, and since ipythonlib is a module, it gets
4586 wrapper script tiny, and since ipythonlib is a module, it gets
4583 compiled and startup is much faster.
4587 compiled and startup is much faster.
4584
4588
4585 This is a reasobably 'deep' change, so we should test it for a
4589 This is a reasobably 'deep' change, so we should test it for a
4586 while without messing too much more with the code.
4590 while without messing too much more with the code.
4587
4591
4588 2001-11-21 Fernando Perez <fperez@colorado.edu>
4592 2001-11-21 Fernando Perez <fperez@colorado.edu>
4589
4593
4590 * Version 0.1.11 released, 0.1.12 opened for further work.
4594 * Version 0.1.11 released, 0.1.12 opened for further work.
4591
4595
4592 * Removed dependency on Itpl. It was only needed in one place. It
4596 * Removed dependency on Itpl. It was only needed in one place. It
4593 would be nice if this became part of python, though. It makes life
4597 would be nice if this became part of python, though. It makes life
4594 *a lot* easier in some cases.
4598 *a lot* easier in some cases.
4595
4599
4596 * Simplified the prefilter code a bit. Now all handlers are
4600 * Simplified the prefilter code a bit. Now all handlers are
4597 expected to explicitly return a value (at least a blank string).
4601 expected to explicitly return a value (at least a blank string).
4598
4602
4599 * Heavy edits in ipplib. Removed the help system altogether. Now
4603 * Heavy edits in ipplib. Removed the help system altogether. Now
4600 obj?/?? is used for inspecting objects, a magic @doc prints
4604 obj?/?? is used for inspecting objects, a magic @doc prints
4601 docstrings, and full-blown Python help is accessed via the 'help'
4605 docstrings, and full-blown Python help is accessed via the 'help'
4602 keyword. This cleans up a lot of code (less to maintain) and does
4606 keyword. This cleans up a lot of code (less to maintain) and does
4603 the job. Since 'help' is now a standard Python component, might as
4607 the job. Since 'help' is now a standard Python component, might as
4604 well use it and remove duplicate functionality.
4608 well use it and remove duplicate functionality.
4605
4609
4606 Also removed the option to use ipplib as a standalone program. By
4610 Also removed the option to use ipplib as a standalone program. By
4607 now it's too dependent on other parts of IPython to function alone.
4611 now it's too dependent on other parts of IPython to function alone.
4608
4612
4609 * Fixed bug in genutils.pager. It would crash if the pager was
4613 * Fixed bug in genutils.pager. It would crash if the pager was
4610 exited immediately after opening (broken pipe).
4614 exited immediately after opening (broken pipe).
4611
4615
4612 * Trimmed down the VerboseTB reporting a little. The header is
4616 * Trimmed down the VerboseTB reporting a little. The header is
4613 much shorter now and the repeated exception arguments at the end
4617 much shorter now and the repeated exception arguments at the end
4614 have been removed. For interactive use the old header seemed a bit
4618 have been removed. For interactive use the old header seemed a bit
4615 excessive.
4619 excessive.
4616
4620
4617 * Fixed small bug in output of @whos for variables with multi-word
4621 * Fixed small bug in output of @whos for variables with multi-word
4618 types (only first word was displayed).
4622 types (only first word was displayed).
4619
4623
4620 2001-11-17 Fernando Perez <fperez@colorado.edu>
4624 2001-11-17 Fernando Perez <fperez@colorado.edu>
4621
4625
4622 * Version 0.1.10 released, 0.1.11 opened for further work.
4626 * Version 0.1.10 released, 0.1.11 opened for further work.
4623
4627
4624 * Modified dirs and friends. dirs now *returns* the stack (not
4628 * Modified dirs and friends. dirs now *returns* the stack (not
4625 prints), so one can manipulate it as a variable. Convenient to
4629 prints), so one can manipulate it as a variable. Convenient to
4626 travel along many directories.
4630 travel along many directories.
4627
4631
4628 * Fixed bug in magic_pdef: would only work with functions with
4632 * Fixed bug in magic_pdef: would only work with functions with
4629 arguments with default values.
4633 arguments with default values.
4630
4634
4631 2001-11-14 Fernando Perez <fperez@colorado.edu>
4635 2001-11-14 Fernando Perez <fperez@colorado.edu>
4632
4636
4633 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4637 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4634 example with IPython. Various other minor fixes and cleanups.
4638 example with IPython. Various other minor fixes and cleanups.
4635
4639
4636 * Version 0.1.9 released, 0.1.10 opened for further work.
4640 * Version 0.1.9 released, 0.1.10 opened for further work.
4637
4641
4638 * Added sys.path to the list of directories searched in the
4642 * Added sys.path to the list of directories searched in the
4639 execfile= option. It used to be the current directory and the
4643 execfile= option. It used to be the current directory and the
4640 user's IPYTHONDIR only.
4644 user's IPYTHONDIR only.
4641
4645
4642 2001-11-13 Fernando Perez <fperez@colorado.edu>
4646 2001-11-13 Fernando Perez <fperez@colorado.edu>
4643
4647
4644 * Reinstated the raw_input/prefilter separation that Janko had
4648 * Reinstated the raw_input/prefilter separation that Janko had
4645 initially. This gives a more convenient setup for extending the
4649 initially. This gives a more convenient setup for extending the
4646 pre-processor from the outside: raw_input always gets a string,
4650 pre-processor from the outside: raw_input always gets a string,
4647 and prefilter has to process it. We can then redefine prefilter
4651 and prefilter has to process it. We can then redefine prefilter
4648 from the outside and implement extensions for special
4652 from the outside and implement extensions for special
4649 purposes.
4653 purposes.
4650
4654
4651 Today I got one for inputting PhysicalQuantity objects
4655 Today I got one for inputting PhysicalQuantity objects
4652 (from Scientific) without needing any function calls at
4656 (from Scientific) without needing any function calls at
4653 all. Extremely convenient, and it's all done as a user-level
4657 all. Extremely convenient, and it's all done as a user-level
4654 extension (no IPython code was touched). Now instead of:
4658 extension (no IPython code was touched). Now instead of:
4655 a = PhysicalQuantity(4.2,'m/s**2')
4659 a = PhysicalQuantity(4.2,'m/s**2')
4656 one can simply say
4660 one can simply say
4657 a = 4.2 m/s**2
4661 a = 4.2 m/s**2
4658 or even
4662 or even
4659 a = 4.2 m/s^2
4663 a = 4.2 m/s^2
4660
4664
4661 I use this, but it's also a proof of concept: IPython really is
4665 I use this, but it's also a proof of concept: IPython really is
4662 fully user-extensible, even at the level of the parsing of the
4666 fully user-extensible, even at the level of the parsing of the
4663 command line. It's not trivial, but it's perfectly doable.
4667 command line. It's not trivial, but it's perfectly doable.
4664
4668
4665 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4669 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4666 the problem of modules being loaded in the inverse order in which
4670 the problem of modules being loaded in the inverse order in which
4667 they were defined in
4671 they were defined in
4668
4672
4669 * Version 0.1.8 released, 0.1.9 opened for further work.
4673 * Version 0.1.8 released, 0.1.9 opened for further work.
4670
4674
4671 * Added magics pdef, source and file. They respectively show the
4675 * Added magics pdef, source and file. They respectively show the
4672 definition line ('prototype' in C), source code and full python
4676 definition line ('prototype' in C), source code and full python
4673 file for any callable object. The object inspector oinfo uses
4677 file for any callable object. The object inspector oinfo uses
4674 these to show the same information.
4678 these to show the same information.
4675
4679
4676 * Version 0.1.7 released, 0.1.8 opened for further work.
4680 * Version 0.1.7 released, 0.1.8 opened for further work.
4677
4681
4678 * Separated all the magic functions into a class called Magic. The
4682 * Separated all the magic functions into a class called Magic. The
4679 InteractiveShell class was becoming too big for Xemacs to handle
4683 InteractiveShell class was becoming too big for Xemacs to handle
4680 (de-indenting a line would lock it up for 10 seconds while it
4684 (de-indenting a line would lock it up for 10 seconds while it
4681 backtracked on the whole class!)
4685 backtracked on the whole class!)
4682
4686
4683 FIXME: didn't work. It can be done, but right now namespaces are
4687 FIXME: didn't work. It can be done, but right now namespaces are
4684 all messed up. Do it later (reverted it for now, so at least
4688 all messed up. Do it later (reverted it for now, so at least
4685 everything works as before).
4689 everything works as before).
4686
4690
4687 * Got the object introspection system (magic_oinfo) working! I
4691 * Got the object introspection system (magic_oinfo) working! I
4688 think this is pretty much ready for release to Janko, so he can
4692 think this is pretty much ready for release to Janko, so he can
4689 test it for a while and then announce it. Pretty much 100% of what
4693 test it for a while and then announce it. Pretty much 100% of what
4690 I wanted for the 'phase 1' release is ready. Happy, tired.
4694 I wanted for the 'phase 1' release is ready. Happy, tired.
4691
4695
4692 2001-11-12 Fernando Perez <fperez@colorado.edu>
4696 2001-11-12 Fernando Perez <fperez@colorado.edu>
4693
4697
4694 * Version 0.1.6 released, 0.1.7 opened for further work.
4698 * Version 0.1.6 released, 0.1.7 opened for further work.
4695
4699
4696 * Fixed bug in printing: it used to test for truth before
4700 * Fixed bug in printing: it used to test for truth before
4697 printing, so 0 wouldn't print. Now checks for None.
4701 printing, so 0 wouldn't print. Now checks for None.
4698
4702
4699 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4703 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4700 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4704 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4701 reaches by hand into the outputcache. Think of a better way to do
4705 reaches by hand into the outputcache. Think of a better way to do
4702 this later.
4706 this later.
4703
4707
4704 * Various small fixes thanks to Nathan's comments.
4708 * Various small fixes thanks to Nathan's comments.
4705
4709
4706 * Changed magic_pprint to magic_Pprint. This way it doesn't
4710 * Changed magic_pprint to magic_Pprint. This way it doesn't
4707 collide with pprint() and the name is consistent with the command
4711 collide with pprint() and the name is consistent with the command
4708 line option.
4712 line option.
4709
4713
4710 * Changed prompt counter behavior to be fully like
4714 * Changed prompt counter behavior to be fully like
4711 Mathematica's. That is, even input that doesn't return a result
4715 Mathematica's. That is, even input that doesn't return a result
4712 raises the prompt counter. The old behavior was kind of confusing
4716 raises the prompt counter. The old behavior was kind of confusing
4713 (getting the same prompt number several times if the operation
4717 (getting the same prompt number several times if the operation
4714 didn't return a result).
4718 didn't return a result).
4715
4719
4716 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4720 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4717
4721
4718 * Fixed -Classic mode (wasn't working anymore).
4722 * Fixed -Classic mode (wasn't working anymore).
4719
4723
4720 * Added colored prompts using Nathan's new code. Colors are
4724 * Added colored prompts using Nathan's new code. Colors are
4721 currently hardwired, they can be user-configurable. For
4725 currently hardwired, they can be user-configurable. For
4722 developers, they can be chosen in file ipythonlib.py, at the
4726 developers, they can be chosen in file ipythonlib.py, at the
4723 beginning of the CachedOutput class def.
4727 beginning of the CachedOutput class def.
4724
4728
4725 2001-11-11 Fernando Perez <fperez@colorado.edu>
4729 2001-11-11 Fernando Perez <fperez@colorado.edu>
4726
4730
4727 * Version 0.1.5 released, 0.1.6 opened for further work.
4731 * Version 0.1.5 released, 0.1.6 opened for further work.
4728
4732
4729 * Changed magic_env to *return* the environment as a dict (not to
4733 * Changed magic_env to *return* the environment as a dict (not to
4730 print it). This way it prints, but it can also be processed.
4734 print it). This way it prints, but it can also be processed.
4731
4735
4732 * Added Verbose exception reporting to interactive
4736 * Added Verbose exception reporting to interactive
4733 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4737 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4734 traceback. Had to make some changes to the ultraTB file. This is
4738 traceback. Had to make some changes to the ultraTB file. This is
4735 probably the last 'big' thing in my mental todo list. This ties
4739 probably the last 'big' thing in my mental todo list. This ties
4736 in with the next entry:
4740 in with the next entry:
4737
4741
4738 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4742 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4739 has to specify is Plain, Color or Verbose for all exception
4743 has to specify is Plain, Color or Verbose for all exception
4740 handling.
4744 handling.
4741
4745
4742 * Removed ShellServices option. All this can really be done via
4746 * Removed ShellServices option. All this can really be done via
4743 the magic system. It's easier to extend, cleaner and has automatic
4747 the magic system. It's easier to extend, cleaner and has automatic
4744 namespace protection and documentation.
4748 namespace protection and documentation.
4745
4749
4746 2001-11-09 Fernando Perez <fperez@colorado.edu>
4750 2001-11-09 Fernando Perez <fperez@colorado.edu>
4747
4751
4748 * Fixed bug in output cache flushing (missing parameter to
4752 * Fixed bug in output cache flushing (missing parameter to
4749 __init__). Other small bugs fixed (found using pychecker).
4753 __init__). Other small bugs fixed (found using pychecker).
4750
4754
4751 * Version 0.1.4 opened for bugfixing.
4755 * Version 0.1.4 opened for bugfixing.
4752
4756
4753 2001-11-07 Fernando Perez <fperez@colorado.edu>
4757 2001-11-07 Fernando Perez <fperez@colorado.edu>
4754
4758
4755 * Version 0.1.3 released, mainly because of the raw_input bug.
4759 * Version 0.1.3 released, mainly because of the raw_input bug.
4756
4760
4757 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4761 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4758 and when testing for whether things were callable, a call could
4762 and when testing for whether things were callable, a call could
4759 actually be made to certain functions. They would get called again
4763 actually be made to certain functions. They would get called again
4760 once 'really' executed, with a resulting double call. A disaster
4764 once 'really' executed, with a resulting double call. A disaster
4761 in many cases (list.reverse() would never work!).
4765 in many cases (list.reverse() would never work!).
4762
4766
4763 * Removed prefilter() function, moved its code to raw_input (which
4767 * Removed prefilter() function, moved its code to raw_input (which
4764 after all was just a near-empty caller for prefilter). This saves
4768 after all was just a near-empty caller for prefilter). This saves
4765 a function call on every prompt, and simplifies the class a tiny bit.
4769 a function call on every prompt, and simplifies the class a tiny bit.
4766
4770
4767 * Fix _ip to __ip name in magic example file.
4771 * Fix _ip to __ip name in magic example file.
4768
4772
4769 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4773 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4770 work with non-gnu versions of tar.
4774 work with non-gnu versions of tar.
4771
4775
4772 2001-11-06 Fernando Perez <fperez@colorado.edu>
4776 2001-11-06 Fernando Perez <fperez@colorado.edu>
4773
4777
4774 * Version 0.1.2. Just to keep track of the recent changes.
4778 * Version 0.1.2. Just to keep track of the recent changes.
4775
4779
4776 * Fixed nasty bug in output prompt routine. It used to check 'if
4780 * Fixed nasty bug in output prompt routine. It used to check 'if
4777 arg != None...'. Problem is, this fails if arg implements a
4781 arg != None...'. Problem is, this fails if arg implements a
4778 special comparison (__cmp__) which disallows comparing to
4782 special comparison (__cmp__) which disallows comparing to
4779 None. Found it when trying to use the PhysicalQuantity module from
4783 None. Found it when trying to use the PhysicalQuantity module from
4780 ScientificPython.
4784 ScientificPython.
4781
4785
4782 2001-11-05 Fernando Perez <fperez@colorado.edu>
4786 2001-11-05 Fernando Perez <fperez@colorado.edu>
4783
4787
4784 * Also added dirs. Now the pushd/popd/dirs family functions
4788 * Also added dirs. Now the pushd/popd/dirs family functions
4785 basically like the shell, with the added convenience of going home
4789 basically like the shell, with the added convenience of going home
4786 when called with no args.
4790 when called with no args.
4787
4791
4788 * pushd/popd slightly modified to mimic shell behavior more
4792 * pushd/popd slightly modified to mimic shell behavior more
4789 closely.
4793 closely.
4790
4794
4791 * Added env,pushd,popd from ShellServices as magic functions. I
4795 * Added env,pushd,popd from ShellServices as magic functions. I
4792 think the cleanest will be to port all desired functions from
4796 think the cleanest will be to port all desired functions from
4793 ShellServices as magics and remove ShellServices altogether. This
4797 ShellServices as magics and remove ShellServices altogether. This
4794 will provide a single, clean way of adding functionality
4798 will provide a single, clean way of adding functionality
4795 (shell-type or otherwise) to IP.
4799 (shell-type or otherwise) to IP.
4796
4800
4797 2001-11-04 Fernando Perez <fperez@colorado.edu>
4801 2001-11-04 Fernando Perez <fperez@colorado.edu>
4798
4802
4799 * Added .ipython/ directory to sys.path. This way users can keep
4803 * Added .ipython/ directory to sys.path. This way users can keep
4800 customizations there and access them via import.
4804 customizations there and access them via import.
4801
4805
4802 2001-11-03 Fernando Perez <fperez@colorado.edu>
4806 2001-11-03 Fernando Perez <fperez@colorado.edu>
4803
4807
4804 * Opened version 0.1.1 for new changes.
4808 * Opened version 0.1.1 for new changes.
4805
4809
4806 * Changed version number to 0.1.0: first 'public' release, sent to
4810 * Changed version number to 0.1.0: first 'public' release, sent to
4807 Nathan and Janko.
4811 Nathan and Janko.
4808
4812
4809 * Lots of small fixes and tweaks.
4813 * Lots of small fixes and tweaks.
4810
4814
4811 * Minor changes to whos format. Now strings are shown, snipped if
4815 * Minor changes to whos format. Now strings are shown, snipped if
4812 too long.
4816 too long.
4813
4817
4814 * Changed ShellServices to work on __main__ so they show up in @who
4818 * Changed ShellServices to work on __main__ so they show up in @who
4815
4819
4816 * Help also works with ? at the end of a line:
4820 * Help also works with ? at the end of a line:
4817 ?sin and sin?
4821 ?sin and sin?
4818 both produce the same effect. This is nice, as often I use the
4822 both produce the same effect. This is nice, as often I use the
4819 tab-complete to find the name of a method, but I used to then have
4823 tab-complete to find the name of a method, but I used to then have
4820 to go to the beginning of the line to put a ? if I wanted more
4824 to go to the beginning of the line to put a ? if I wanted more
4821 info. Now I can just add the ? and hit return. Convenient.
4825 info. Now I can just add the ? and hit return. Convenient.
4822
4826
4823 2001-11-02 Fernando Perez <fperez@colorado.edu>
4827 2001-11-02 Fernando Perez <fperez@colorado.edu>
4824
4828
4825 * Python version check (>=2.1) added.
4829 * Python version check (>=2.1) added.
4826
4830
4827 * Added LazyPython documentation. At this point the docs are quite
4831 * Added LazyPython documentation. At this point the docs are quite
4828 a mess. A cleanup is in order.
4832 a mess. A cleanup is in order.
4829
4833
4830 * Auto-installer created. For some bizarre reason, the zipfiles
4834 * Auto-installer created. For some bizarre reason, the zipfiles
4831 module isn't working on my system. So I made a tar version
4835 module isn't working on my system. So I made a tar version
4832 (hopefully the command line options in various systems won't kill
4836 (hopefully the command line options in various systems won't kill
4833 me).
4837 me).
4834
4838
4835 * Fixes to Struct in genutils. Now all dictionary-like methods are
4839 * Fixes to Struct in genutils. Now all dictionary-like methods are
4836 protected (reasonably).
4840 protected (reasonably).
4837
4841
4838 * Added pager function to genutils and changed ? to print usage
4842 * Added pager function to genutils and changed ? to print usage
4839 note through it (it was too long).
4843 note through it (it was too long).
4840
4844
4841 * Added the LazyPython functionality. Works great! I changed the
4845 * Added the LazyPython functionality. Works great! I changed the
4842 auto-quote escape to ';', it's on home row and next to '. But
4846 auto-quote escape to ';', it's on home row and next to '. But
4843 both auto-quote and auto-paren (still /) escapes are command-line
4847 both auto-quote and auto-paren (still /) escapes are command-line
4844 parameters.
4848 parameters.
4845
4849
4846
4850
4847 2001-11-01 Fernando Perez <fperez@colorado.edu>
4851 2001-11-01 Fernando Perez <fperez@colorado.edu>
4848
4852
4849 * Version changed to 0.0.7. Fairly large change: configuration now
4853 * Version changed to 0.0.7. Fairly large change: configuration now
4850 is all stored in a directory, by default .ipython. There, all
4854 is all stored in a directory, by default .ipython. There, all
4851 config files have normal looking names (not .names)
4855 config files have normal looking names (not .names)
4852
4856
4853 * Version 0.0.6 Released first to Lucas and Archie as a test
4857 * Version 0.0.6 Released first to Lucas and Archie as a test
4854 run. Since it's the first 'semi-public' release, change version to
4858 run. Since it's the first 'semi-public' release, change version to
4855 > 0.0.6 for any changes now.
4859 > 0.0.6 for any changes now.
4856
4860
4857 * Stuff I had put in the ipplib.py changelog:
4861 * Stuff I had put in the ipplib.py changelog:
4858
4862
4859 Changes to InteractiveShell:
4863 Changes to InteractiveShell:
4860
4864
4861 - Made the usage message a parameter.
4865 - Made the usage message a parameter.
4862
4866
4863 - Require the name of the shell variable to be given. It's a bit
4867 - Require the name of the shell variable to be given. It's a bit
4864 of a hack, but allows the name 'shell' not to be hardwire in the
4868 of a hack, but allows the name 'shell' not to be hardwire in the
4865 magic (@) handler, which is problematic b/c it requires
4869 magic (@) handler, which is problematic b/c it requires
4866 polluting the global namespace with 'shell'. This in turn is
4870 polluting the global namespace with 'shell'. This in turn is
4867 fragile: if a user redefines a variable called shell, things
4871 fragile: if a user redefines a variable called shell, things
4868 break.
4872 break.
4869
4873
4870 - magic @: all functions available through @ need to be defined
4874 - magic @: all functions available through @ need to be defined
4871 as magic_<name>, even though they can be called simply as
4875 as magic_<name>, even though they can be called simply as
4872 @<name>. This allows the special command @magic to gather
4876 @<name>. This allows the special command @magic to gather
4873 information automatically about all existing magic functions,
4877 information automatically about all existing magic functions,
4874 even if they are run-time user extensions, by parsing the shell
4878 even if they are run-time user extensions, by parsing the shell
4875 instance __dict__ looking for special magic_ names.
4879 instance __dict__ looking for special magic_ names.
4876
4880
4877 - mainloop: added *two* local namespace parameters. This allows
4881 - mainloop: added *two* local namespace parameters. This allows
4878 the class to differentiate between parameters which were there
4882 the class to differentiate between parameters which were there
4879 before and after command line initialization was processed. This
4883 before and after command line initialization was processed. This
4880 way, later @who can show things loaded at startup by the
4884 way, later @who can show things loaded at startup by the
4881 user. This trick was necessary to make session saving/reloading
4885 user. This trick was necessary to make session saving/reloading
4882 really work: ideally after saving/exiting/reloading a session,
4886 really work: ideally after saving/exiting/reloading a session,
4883 *everythin* should look the same, including the output of @who. I
4887 *everythin* should look the same, including the output of @who. I
4884 was only able to make this work with this double namespace
4888 was only able to make this work with this double namespace
4885 trick.
4889 trick.
4886
4890
4887 - added a header to the logfile which allows (almost) full
4891 - added a header to the logfile which allows (almost) full
4888 session restoring.
4892 session restoring.
4889
4893
4890 - prepend lines beginning with @ or !, with a and log
4894 - prepend lines beginning with @ or !, with a and log
4891 them. Why? !lines: may be useful to know what you did @lines:
4895 them. Why? !lines: may be useful to know what you did @lines:
4892 they may affect session state. So when restoring a session, at
4896 they may affect session state. So when restoring a session, at
4893 least inform the user of their presence. I couldn't quite get
4897 least inform the user of their presence. I couldn't quite get
4894 them to properly re-execute, but at least the user is warned.
4898 them to properly re-execute, but at least the user is warned.
4895
4899
4896 * Started ChangeLog.
4900 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now