##// END OF EJS Templates
- Added patches for better pydb and Emacs support....
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,497 +1,505 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 Pdb debugger class.
3 Pdb debugger class.
4
4
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
6 the command line completion of other programs which include this isn't
6 the command line completion of other programs which include this isn't
7 damaged.
7 damaged.
8
8
9 In the future, this class will be expanded with improvements over the standard
9 In the future, this class will be expanded with improvements over the standard
10 pdb.
10 pdb.
11
11
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
13 changes. Licensing should therefore be under the standard Python terms. For
13 changes. Licensing should therefore be under the standard Python terms. For
14 details on the PSF (Python Software Foundation) standard license, see:
14 details on the PSF (Python Software Foundation) standard license, see:
15
15
16 http://www.python.org/2.2.3/license.html
16 http://www.python.org/2.2.3/license.html
17
17
18 $Id: Debugger.py 2014 2007-01-05 10:36:58Z fperez $"""
18 $Id: Debugger.py 2154 2007-03-19 00:10:07Z fperez $"""
19
19
20 #*****************************************************************************
20 #*****************************************************************************
21 #
21 #
22 # Since this file is essentially a modified copy of the pdb module which is
22 # Since this file is essentially a modified copy of the pdb module which is
23 # part of the standard Python distribution, I assume that the proper procedure
23 # part of the standard Python distribution, I assume that the proper procedure
24 # is to maintain its copyright as belonging to the Python Software Foundation
24 # is to maintain its copyright as belonging to the Python Software Foundation
25 # (in addition to my own, for all new code).
25 # (in addition to my own, for all new code).
26 #
26 #
27 # Copyright (C) 2001 Python Software Foundation, www.python.org
27 # Copyright (C) 2001 Python Software Foundation, www.python.org
28 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
28 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
29 #
29 #
30 # Distributed under the terms of the BSD License. The full license is in
30 # Distributed under the terms of the BSD License. The full license is in
31 # the file COPYING, distributed as part of this software.
31 # the file COPYING, distributed as part of this software.
32 #
32 #
33 #*****************************************************************************
33 #*****************************************************************************
34
34
35 from IPython import Release
35 from IPython import Release
36 __author__ = '%s <%s>' % Release.authors['Fernando']
36 __author__ = '%s <%s>' % Release.authors['Fernando']
37 __license__ = 'Python'
37 __license__ = 'Python'
38
38
39 import bdb
39 import bdb
40 import cmd
40 import cmd
41 import linecache
41 import linecache
42 import os
42 import os
43 import sys
43 import sys
44
44
45 from IPython import PyColorize, ColorANSI, ipapi
45 from IPython import PyColorize, ColorANSI, ipapi
46 from IPython.genutils import Term
46 from IPython.genutils import Term
47 from IPython.excolors import ExceptionColors
47 from IPython.excolors import ExceptionColors
48
48
49 # See if we can use pydb.
49 # See if we can use pydb.
50 has_pydb = False
50 has_pydb = False
51 prompt = 'ipdb>'
51 prompt = 'ipdb> '
52 try:
52 try:
53 import pydb
53 import pydb
54 if hasattr(pydb.pydb, "runl"):
54 if hasattr(pydb.pydb, "runl"):
55 has_pydb = True
55 has_pydb = True
56 from pydb import Pdb as OldPdb
56 from pydb import Pdb as OldPdb
57 prompt = 'ipydb>'
58 except ImportError:
57 except ImportError:
59 pass
58 pass
60
59
61 if has_pydb:
60 if has_pydb:
62 from pydb import Pdb as OldPdb
61 from pydb import Pdb as OldPdb
62 prompt = 'ipydb> '
63 else:
63 else:
64 from pdb import Pdb as OldPdb
64 from pdb import Pdb as OldPdb
65
65
66 # Allow the set_trace code to operate outside of an ipython instance, even if
66 # Allow the set_trace code to operate outside of an ipython instance, even if
67 # it does so with some limitations. The rest of this support is implemented in
67 # it does so with some limitations. The rest of this support is implemented in
68 # the Tracer constructor.
68 # the Tracer constructor.
69 def BdbQuit_excepthook(et,ev,tb):
69 def BdbQuit_excepthook(et,ev,tb):
70 if et==bdb.BdbQuit:
70 if et==bdb.BdbQuit:
71 print 'Exiting Debugger.'
71 print 'Exiting Debugger.'
72 else:
72 else:
73 ehook.excepthook_ori(et,ev,tb)
73 ehook.excepthook_ori(et,ev,tb)
74
74
75 def BdbQuit_IPython_excepthook(self,et,ev,tb):
75 def BdbQuit_IPython_excepthook(self,et,ev,tb):
76 print 'Exiting Debugger.'
76 print 'Exiting Debugger.'
77
77
78 class Tracer(object):
78 class Tracer(object):
79 """Class for local debugging, similar to pdb.set_trace.
79 """Class for local debugging, similar to pdb.set_trace.
80
80
81 Instances of this class, when called, behave like pdb.set_trace, but
81 Instances of this class, when called, behave like pdb.set_trace, but
82 providing IPython's enhanced capabilities.
82 providing IPython's enhanced capabilities.
83
83
84 This is implemented as a class which must be initialized in your own code
84 This is implemented as a class which must be initialized in your own code
85 and not as a standalone function because we need to detect at runtime
85 and not as a standalone function because we need to detect at runtime
86 whether IPython is already active or not. That detection is done in the
86 whether IPython is already active or not. That detection is done in the
87 constructor, ensuring that this code plays nicely with a running IPython,
87 constructor, ensuring that this code plays nicely with a running IPython,
88 while functioning acceptably (though with limitations) if outside of it.
88 while functioning acceptably (though with limitations) if outside of it.
89 """
89 """
90
90
91 def __init__(self,colors=None):
91 def __init__(self,colors=None):
92 """Create a local debugger instance.
92 """Create a local debugger instance.
93
93
94 :Parameters:
94 :Parameters:
95
95
96 - `colors` (None): a string containing the name of the color scheme to
96 - `colors` (None): a string containing the name of the color scheme to
97 use, it must be one of IPython's valid color schemes. If not given, the
97 use, it must be one of IPython's valid color schemes. If not given, the
98 function will default to the current IPython scheme when running inside
98 function will default to the current IPython scheme when running inside
99 IPython, and to 'NoColor' otherwise.
99 IPython, and to 'NoColor' otherwise.
100
100
101 Usage example:
101 Usage example:
102
102
103 from IPython.Debugger import Tracer; debug_here = Tracer()
103 from IPython.Debugger import Tracer; debug_here = Tracer()
104
104
105 ... later in your code
105 ... later in your code
106 debug_here() # -> will open up the debugger at that point.
106 debug_here() # -> will open up the debugger at that point.
107
107
108 Once the debugger activates, you can use all of its regular commands to
108 Once the debugger activates, you can use all of its regular commands to
109 step through code, set breakpoints, etc. See the pdb documentation
109 step through code, set breakpoints, etc. See the pdb documentation
110 from the Python standard library for usage details.
110 from the Python standard library for usage details.
111 """
111 """
112
112
113 global __IPYTHON__
113 global __IPYTHON__
114 try:
114 try:
115 __IPYTHON__
115 __IPYTHON__
116 except NameError:
116 except NameError:
117 # Outside of ipython, we set our own exception hook manually
117 # Outside of ipython, we set our own exception hook manually
118 __IPYTHON__ = ipapi.get(True,False)
118 __IPYTHON__ = ipapi.get(True,False)
119 BdbQuit_excepthook.excepthook_ori = sys.excepthook
119 BdbQuit_excepthook.excepthook_ori = sys.excepthook
120 sys.excepthook = BdbQuit_excepthook
120 sys.excepthook = BdbQuit_excepthook
121 def_colors = 'NoColor'
121 def_colors = 'NoColor'
122 try:
122 try:
123 # Limited tab completion support
123 # Limited tab completion support
124 import rlcompleter,readline
124 import rlcompleter,readline
125 readline.parse_and_bind('tab: complete')
125 readline.parse_and_bind('tab: complete')
126 except ImportError:
126 except ImportError:
127 pass
127 pass
128 else:
128 else:
129 # In ipython, we use its custom exception handler mechanism
129 # In ipython, we use its custom exception handler mechanism
130 ip = ipapi.get()
130 ip = ipapi.get()
131 def_colors = ip.options.colors
131 def_colors = ip.options.colors
132 ip.set_custom_exc((bdb.BdbQuit,),BdbQuit_IPython_excepthook)
132 ip.set_custom_exc((bdb.BdbQuit,),BdbQuit_IPython_excepthook)
133
133
134 if colors is None:
134 if colors is None:
135 colors = def_colors
135 colors = def_colors
136 self.debugger = Pdb(colors)
136 self.debugger = Pdb(colors)
137
137
138 def __call__(self):
138 def __call__(self):
139 """Starts an interactive debugger at the point where called.
139 """Starts an interactive debugger at the point where called.
140
140
141 This is similar to the pdb.set_trace() function from the std lib, but
141 This is similar to the pdb.set_trace() function from the std lib, but
142 using IPython's enhanced debugger."""
142 using IPython's enhanced debugger."""
143
143
144 self.debugger.set_trace(sys._getframe().f_back)
144 self.debugger.set_trace(sys._getframe().f_back)
145
145
146 def decorate_fn_with_doc(new_fn, old_fn, additional_text=""):
146 def decorate_fn_with_doc(new_fn, old_fn, additional_text=""):
147 """Make new_fn have old_fn's doc string. This is particularly useful
147 """Make new_fn have old_fn's doc string. This is particularly useful
148 for the do_... commands that hook into the help system.
148 for the do_... commands that hook into the help system.
149 Adapted from from a comp.lang.python posting
149 Adapted from from a comp.lang.python posting
150 by Duncan Booth."""
150 by Duncan Booth."""
151 def wrapper(*args, **kw):
151 def wrapper(*args, **kw):
152 return new_fn(*args, **kw)
152 return new_fn(*args, **kw)
153 if old_fn.__doc__:
153 if old_fn.__doc__:
154 wrapper.__doc__ = old_fn.__doc__ + additional_text
154 wrapper.__doc__ = old_fn.__doc__ + additional_text
155 return wrapper
155 return wrapper
156
156
157 def _file_lines(fname):
157 def _file_lines(fname):
158 """Return the contents of a named file as a list of lines.
158 """Return the contents of a named file as a list of lines.
159
159
160 This function never raises an IOError exception: if the file can't be
160 This function never raises an IOError exception: if the file can't be
161 read, it simply returns an empty list."""
161 read, it simply returns an empty list."""
162
162
163 try:
163 try:
164 outfile = open(fname)
164 outfile = open(fname)
165 except IOError:
165 except IOError:
166 return []
166 return []
167 else:
167 else:
168 out = outfile.readlines()
168 out = outfile.readlines()
169 outfile.close()
169 outfile.close()
170 return out
170 return out
171
171
172 class Pdb(OldPdb):
172 class Pdb(OldPdb):
173 """Modified Pdb class, does not load readline."""
173 """Modified Pdb class, does not load readline."""
174
174
175 if sys.version[:3] >= '2.5' or has_pydb:
175 if sys.version[:3] >= '2.5' or has_pydb:
176 def __init__(self,color_scheme='NoColor',completekey=None,
176 def __init__(self,color_scheme='NoColor',completekey=None,
177 stdin=None, stdout=None):
177 stdin=None, stdout=None):
178
178
179 # Parent constructor:
179 # Parent constructor:
180 if has_pydb and completekey is None:
180 if has_pydb and completekey is None:
181 OldPdb.__init__(self,stdin=stdin,stdout=stdout)
181 OldPdb.__init__(self,stdin=stdin,stdout=Term.cout) #stdout)
182 else:
182 else:
183 OldPdb.__init__(self,completekey,stdin,stdout)
183 OldPdb.__init__(self,completekey,stdin,stdout)
184 self.prompt = prompt # The default prompt is '(Pdb)'
184
185 self.prompt = prompt # The default prompt is '(Pdb)'
185
186
186 # IPython changes...
187 # IPython changes...
187 self.is_pydb = has_pydb
188 self.is_pydb = has_pydb
188
189
189 if self.is_pydb:
190 if self.is_pydb:
190
191
191 # iplib.py's ipalias seems to want pdb's checkline
192 # iplib.py's ipalias seems to want pdb's checkline
192 # which located in pydb.fn
193 # which located in pydb.fn
193 import pydb.fns
194 import pydb.fns
194 self.checkline = lambda filename, lineno: \
195 self.checkline = lambda filename, lineno: \
195 pydb.fns.checkline(self, filename, lineno)
196 pydb.fns.checkline(self, filename, lineno)
196
197
197 self.curframe = None
198 self.curframe = None
198 self.do_restart = self.new_do_restart
199 self.do_restart = self.new_do_restart
199
200
200 self.old_all_completions = __IPYTHON__.Completer.all_completions
201 self.old_all_completions = __IPYTHON__.Completer.all_completions
201 __IPYTHON__.Completer.all_completions=self.all_completions
202 __IPYTHON__.Completer.all_completions=self.all_completions
202
203
203 self.do_list = decorate_fn_with_doc(self.list_command_pydb,
204 self.do_list = decorate_fn_with_doc(self.list_command_pydb,
204 OldPdb.do_list)
205 OldPdb.do_list)
205 self.do_l = self.do_list
206 self.do_l = self.do_list
206 self.do_frame = decorate_fn_with_doc(self.new_do_frame,
207 self.do_frame = decorate_fn_with_doc(self.new_do_frame,
207 OldPdb.do_frame)
208 OldPdb.do_frame)
208
209
209 self.aliases = {}
210 self.aliases = {}
210
211
211 # Create color table: we copy the default one from the traceback
212 # Create color table: we copy the default one from the traceback
212 # module and add a few attributes needed for debugging
213 # module and add a few attributes needed for debugging
213 self.color_scheme_table = ExceptionColors.copy()
214 self.color_scheme_table = ExceptionColors.copy()
214
215
215 # shorthands
216 # shorthands
216 C = ColorANSI.TermColors
217 C = ColorANSI.TermColors
217 cst = self.color_scheme_table
218 cst = self.color_scheme_table
218
219
219 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
220 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
220 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
221 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
221
222
222 cst['Linux'].colors.breakpoint_enabled = C.LightRed
223 cst['Linux'].colors.breakpoint_enabled = C.LightRed
223 cst['Linux'].colors.breakpoint_disabled = C.Red
224 cst['Linux'].colors.breakpoint_disabled = C.Red
224
225
225 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
226 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
226 cst['LightBG'].colors.breakpoint_disabled = C.Red
227 cst['LightBG'].colors.breakpoint_disabled = C.Red
227
228
228 self.set_colors(color_scheme)
229 self.set_colors(color_scheme)
229
230
230 else:
231 else:
231 # Ugly hack: for Python 2.3-2.4, we can't call the parent constructor,
232 # Ugly hack: for Python 2.3-2.4, we can't call the parent constructor,
232 # because it binds readline and breaks tab-completion. This means we
233 # because it binds readline and breaks tab-completion. This means we
233 # have to COPY the constructor here.
234 # have to COPY the constructor here.
234 def __init__(self,color_scheme='NoColor'):
235 def __init__(self,color_scheme='NoColor'):
235 bdb.Bdb.__init__(self)
236 bdb.Bdb.__init__(self)
236 cmd.Cmd.__init__(self,completekey=None) # don't load readline
237 cmd.Cmd.__init__(self,completekey=None) # don't load readline
237 self.prompt = 'ipdb> ' # The default prompt is '(Pdb)'
238 self.prompt = 'ipdb> ' # The default prompt is '(Pdb)'
238 self.aliases = {}
239 self.aliases = {}
239
240
240 # These two lines are part of the py2.4 constructor, let's put them
241 # These two lines are part of the py2.4 constructor, let's put them
241 # unconditionally here as they won't cause any problems in 2.3.
242 # unconditionally here as they won't cause any problems in 2.3.
242 self.mainpyfile = ''
243 self.mainpyfile = ''
243 self._wait_for_mainpyfile = 0
244 self._wait_for_mainpyfile = 0
244
245
245 # Read $HOME/.pdbrc and ./.pdbrc
246 # Read $HOME/.pdbrc and ./.pdbrc
246 try:
247 try:
247 self.rcLines = _file_lines(os.path.join(os.environ['HOME'],
248 self.rcLines = _file_lines(os.path.join(os.environ['HOME'],
248 ".pdbrc"))
249 ".pdbrc"))
249 except KeyError:
250 except KeyError:
250 self.rcLines = []
251 self.rcLines = []
251 self.rcLines.extend(_file_lines(".pdbrc"))
252 self.rcLines.extend(_file_lines(".pdbrc"))
252
253
253 # Create color table: we copy the default one from the traceback
254 # Create color table: we copy the default one from the traceback
254 # module and add a few attributes needed for debugging
255 # module and add a few attributes needed for debugging
255 ExceptionColors.set_active_scheme(color_scheme)
256 ExceptionColors.set_active_scheme(color_scheme)
256 self.color_scheme_table = ExceptionColors.copy()
257 self.color_scheme_table = ExceptionColors.copy()
257
258
258 # shorthands
259 # shorthands
259 C = ColorANSI.TermColors
260 C = ColorANSI.TermColors
260 cst = self.color_scheme_table
261 cst = self.color_scheme_table
261
262
262 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
263 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
263 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
264 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
264
265
265 cst['Linux'].colors.breakpoint_enabled = C.LightRed
266 cst['Linux'].colors.breakpoint_enabled = C.LightRed
266 cst['Linux'].colors.breakpoint_disabled = C.Red
267 cst['Linux'].colors.breakpoint_disabled = C.Red
267
268
268 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
269 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
269 cst['LightBG'].colors.breakpoint_disabled = C.Red
270 cst['LightBG'].colors.breakpoint_disabled = C.Red
270
271
271 self.set_colors(color_scheme)
272 self.set_colors(color_scheme)
272
273
273 def set_colors(self, scheme):
274 def set_colors(self, scheme):
274 """Shorthand access to the color table scheme selector method."""
275 """Shorthand access to the color table scheme selector method."""
275 self.color_scheme_table.set_active_scheme(scheme)
276 self.color_scheme_table.set_active_scheme(scheme)
276
277
277 def interaction(self, frame, traceback):
278 def interaction(self, frame, traceback):
278 __IPYTHON__.set_completer_frame(frame)
279 __IPYTHON__.set_completer_frame(frame)
279 OldPdb.interaction(self, frame, traceback)
280 OldPdb.interaction(self, frame, traceback)
280
281
281 def new_do_up(self, arg):
282 def new_do_up(self, arg):
282 OldPdb.do_up(self, arg)
283 OldPdb.do_up(self, arg)
283 __IPYTHON__.set_completer_frame(self.curframe)
284 __IPYTHON__.set_completer_frame(self.curframe)
284 do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up)
285 do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up)
285
286
286 def new_do_down(self, arg):
287 def new_do_down(self, arg):
287 OldPdb.do_down(self, arg)
288 OldPdb.do_down(self, arg)
288 __IPYTHON__.set_completer_frame(self.curframe)
289 __IPYTHON__.set_completer_frame(self.curframe)
289
290
290 do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down)
291 do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down)
291
292
292 def new_do_frame(self, arg):
293 def new_do_frame(self, arg):
293 OldPdb.do_frame(self, arg)
294 OldPdb.do_frame(self, arg)
294 __IPYTHON__.set_completer_frame(self.curframe)
295 __IPYTHON__.set_completer_frame(self.curframe)
295
296
296 def new_do_quit(self, arg):
297 def new_do_quit(self, arg):
297
298
298 if hasattr(self, 'old_all_completions'):
299 if hasattr(self, 'old_all_completions'):
299 __IPYTHON__.Completer.all_completions=self.old_all_completions
300 __IPYTHON__.Completer.all_completions=self.old_all_completions
300
301
301
302
302 return OldPdb.do_quit(self, arg)
303 return OldPdb.do_quit(self, arg)
303
304
304 do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
305 do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
305
306
306 def new_do_restart(self, arg):
307 def new_do_restart(self, arg):
307 """Restart command. In the context of ipython this is exactly the same
308 """Restart command. In the context of ipython this is exactly the same
308 thing as 'quit'."""
309 thing as 'quit'."""
309 self.msg("Restart doesn't make sense here. Using 'quit' instead.")
310 self.msg("Restart doesn't make sense here. Using 'quit' instead.")
310 return self.do_quit(arg)
311 return self.do_quit(arg)
311
312
312 def postloop(self):
313 def postloop(self):
313 __IPYTHON__.set_completer_frame(None)
314 __IPYTHON__.set_completer_frame(None)
314
315
315 def print_stack_trace(self):
316 def print_stack_trace(self):
316 try:
317 try:
317 for frame_lineno in self.stack:
318 for frame_lineno in self.stack:
318 self.print_stack_entry(frame_lineno, context = 5)
319 self.print_stack_entry(frame_lineno, context = 5)
319 except KeyboardInterrupt:
320 except KeyboardInterrupt:
320 pass
321 pass
321
322
322 def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
323 def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
323 context = 3):
324 context = 3):
324 frame, lineno = frame_lineno
325 #frame, lineno = frame_lineno
325 print >>Term.cout, self.format_stack_entry(frame_lineno, '', context)
326 print >>Term.cout, self.format_stack_entry(frame_lineno, '', context)
326
327
327 def format_stack_entry(self, frame_lineno, lprefix=': ', context = 3):
328 def format_stack_entry(self, frame_lineno, lprefix=': ', context = 3):
328 import linecache, repr
329 import linecache, repr
329
330
330 ret = []
331 ret = []
331
332
332 Colors = self.color_scheme_table.active_colors
333 Colors = self.color_scheme_table.active_colors
333 ColorsNormal = Colors.Normal
334 ColorsNormal = Colors.Normal
334 tpl_link = '%s%%s%s' % (Colors.filenameEm, ColorsNormal)
335 tpl_link = '%s%%s%s' % (Colors.filenameEm, ColorsNormal)
335 tpl_call = '%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
336 tpl_call = '%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
336 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
337 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
337 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
338 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
338 ColorsNormal)
339 ColorsNormal)
339
340
340 frame, lineno = frame_lineno
341 frame, lineno = frame_lineno
341
342
342 return_value = ''
343 return_value = ''
343 if '__return__' in frame.f_locals:
344 if '__return__' in frame.f_locals:
344 rv = frame.f_locals['__return__']
345 rv = frame.f_locals['__return__']
345 #return_value += '->'
346 #return_value += '->'
346 return_value += repr.repr(rv) + '\n'
347 return_value += repr.repr(rv) + '\n'
347 ret.append(return_value)
348 ret.append(return_value)
348
349
349 #s = filename + '(' + `lineno` + ')'
350 #s = filename + '(' + `lineno` + ')'
350 filename = self.canonic(frame.f_code.co_filename)
351 filename = self.canonic(frame.f_code.co_filename)
351 link = tpl_link % filename
352 link = tpl_link % filename
352
353
353 if frame.f_code.co_name:
354 if frame.f_code.co_name:
354 func = frame.f_code.co_name
355 func = frame.f_code.co_name
355 else:
356 else:
356 func = "<lambda>"
357 func = "<lambda>"
357
358
358 call = ''
359 call = ''
359 if func != '?':
360 if func != '?':
360 if '__args__' in frame.f_locals:
361 if '__args__' in frame.f_locals:
361 args = repr.repr(frame.f_locals['__args__'])
362 args = repr.repr(frame.f_locals['__args__'])
362 else:
363 else:
363 args = '()'
364 args = '()'
364 call = tpl_call % (func, args)
365 call = tpl_call % (func, args)
365
366
366 # The level info should be generated in the same format pdb uses, to
367 # The level info should be generated in the same format pdb uses, to
367 # avoid breaking the pdbtrack functionality of python-mode in *emacs.
368 # avoid breaking the pdbtrack functionality of python-mode in *emacs.
368 ret.append('> %s(%s)%s\n' % (link,lineno,call))
369 if frame is self.curframe:
370 ret.append('> ')
371 else:
372 ret.append(' ')
373 ret.append('%s(%s)%s\n' % (link,lineno,call))
369
374
370 start = lineno - 1 - context//2
375 start = lineno - 1 - context//2
371 lines = linecache.getlines(filename)
376 lines = linecache.getlines(filename)
372 start = max(start, 0)
377 start = max(start, 0)
373 start = min(start, len(lines) - context)
378 start = min(start, len(lines) - context)
374 lines = lines[start : start + context]
379 lines = lines[start : start + context]
375
380
376 for i,line in enumerate(lines):
381 for i,line in enumerate(lines):
377 show_arrow = (start + 1 + i == lineno)
382 show_arrow = (start + 1 + i == lineno)
378 ret.append(self.__format_line(tpl_line_em, filename,
383 linetpl = (frame is self.curframe or show_arrow) \
384 and tpl_line_em \
385 or tpl_line
386 ret.append(self.__format_line(linetpl, filename,
379 start + 1 + i, line,
387 start + 1 + i, line,
380 arrow = show_arrow) )
388 arrow = show_arrow) )
381
389
382 return ''.join(ret)
390 return ''.join(ret)
383
391
384 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
392 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
385 bp_mark = ""
393 bp_mark = ""
386 bp_mark_color = ""
394 bp_mark_color = ""
387
395
388 bp = None
396 bp = None
389 if lineno in self.get_file_breaks(filename):
397 if lineno in self.get_file_breaks(filename):
390 bps = self.get_breaks(filename, lineno)
398 bps = self.get_breaks(filename, lineno)
391 bp = bps[-1]
399 bp = bps[-1]
392
400
393 if bp:
401 if bp:
394 Colors = self.color_scheme_table.active_colors
402 Colors = self.color_scheme_table.active_colors
395 bp_mark = str(bp.number)
403 bp_mark = str(bp.number)
396 bp_mark_color = Colors.breakpoint_enabled
404 bp_mark_color = Colors.breakpoint_enabled
397 if not bp.enabled:
405 if not bp.enabled:
398 bp_mark_color = Colors.breakpoint_disabled
406 bp_mark_color = Colors.breakpoint_disabled
399
407
400 numbers_width = 7
408 numbers_width = 7
401 if arrow:
409 if arrow:
402 # This is the line with the error
410 # This is the line with the error
403 pad = numbers_width - len(str(lineno)) - len(bp_mark)
411 pad = numbers_width - len(str(lineno)) - len(bp_mark)
404 if pad >= 3:
412 if pad >= 3:
405 marker = '-'*(pad-3) + '-> '
413 marker = '-'*(pad-3) + '-> '
406 elif pad == 2:
414 elif pad == 2:
407 marker = '> '
415 marker = '> '
408 elif pad == 1:
416 elif pad == 1:
409 marker = '>'
417 marker = '>'
410 else:
418 else:
411 marker = ''
419 marker = ''
412 num = '%s%s' % (marker, str(lineno))
420 num = '%s%s' % (marker, str(lineno))
413 line = tpl_line % (bp_mark_color + bp_mark, num, line)
421 line = tpl_line % (bp_mark_color + bp_mark, num, line)
414 else:
422 else:
415 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
423 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
416 line = tpl_line % (bp_mark_color + bp_mark, num, line)
424 line = tpl_line % (bp_mark_color + bp_mark, num, line)
417
425
418 return line
426 return line
419
427
420 def list_command_pydb(self, arg):
428 def list_command_pydb(self, arg):
421 """List command to use if we have a newer pydb installed"""
429 """List command to use if we have a newer pydb installed"""
422 filename, first, last = OldPdb.parse_list_cmd(self, arg)
430 filename, first, last = OldPdb.parse_list_cmd(self, arg)
423 if filename is not None:
431 if filename is not None:
424 self.print_list_lines(filename, first, last)
432 self.print_list_lines(filename, first, last)
425
433
426 def print_list_lines(self, filename, first, last):
434 def print_list_lines(self, filename, first, last):
427 """The printing (as opposed to the parsing part of a 'list'
435 """The printing (as opposed to the parsing part of a 'list'
428 command."""
436 command."""
429 try:
437 try:
430 Colors = self.color_scheme_table.active_colors
438 Colors = self.color_scheme_table.active_colors
431 ColorsNormal = Colors.Normal
439 ColorsNormal = Colors.Normal
432 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
440 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
433 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
441 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
434 src = []
442 src = []
435 for lineno in range(first, last+1):
443 for lineno in range(first, last+1):
436 line = linecache.getline(filename, lineno)
444 line = linecache.getline(filename, lineno)
437 if not line:
445 if not line:
438 break
446 break
439
447
440 if lineno == self.curframe.f_lineno:
448 if lineno == self.curframe.f_lineno:
441 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
449 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
442 else:
450 else:
443 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
451 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
444
452
445 src.append(line)
453 src.append(line)
446 self.lineno = lineno
454 self.lineno = lineno
447
455
448 print >>Term.cout, ''.join(src)
456 print >>Term.cout, ''.join(src)
449
457
450 except KeyboardInterrupt:
458 except KeyboardInterrupt:
451 pass
459 pass
452
460
453 def do_list(self, arg):
461 def do_list(self, arg):
454 self.lastcmd = 'list'
462 self.lastcmd = 'list'
455 last = None
463 last = None
456 if arg:
464 if arg:
457 try:
465 try:
458 x = eval(arg, {}, {})
466 x = eval(arg, {}, {})
459 if type(x) == type(()):
467 if type(x) == type(()):
460 first, last = x
468 first, last = x
461 first = int(first)
469 first = int(first)
462 last = int(last)
470 last = int(last)
463 if last < first:
471 if last < first:
464 # Assume it's a count
472 # Assume it's a count
465 last = first + last
473 last = first + last
466 else:
474 else:
467 first = max(1, int(x) - 5)
475 first = max(1, int(x) - 5)
468 except:
476 except:
469 print '*** Error in argument:', `arg`
477 print '*** Error in argument:', `arg`
470 return
478 return
471 elif self.lineno is None:
479 elif self.lineno is None:
472 first = max(1, self.curframe.f_lineno - 5)
480 first = max(1, self.curframe.f_lineno - 5)
473 else:
481 else:
474 first = self.lineno + 1
482 first = self.lineno + 1
475 if last is None:
483 if last is None:
476 last = first + 10
484 last = first + 10
477 self.print_list_lines(self.curframe.f_code.co_filename, first, last)
485 self.print_list_lines(self.curframe.f_code.co_filename, first, last)
478
486
479 do_l = do_list
487 do_l = do_list
480
488
481 def do_pdef(self, arg):
489 def do_pdef(self, arg):
482 """The debugger interface to magic_pdef"""
490 """The debugger interface to magic_pdef"""
483 namespaces = [('Locals', self.curframe.f_locals),
491 namespaces = [('Locals', self.curframe.f_locals),
484 ('Globals', self.curframe.f_globals)]
492 ('Globals', self.curframe.f_globals)]
485 __IPYTHON__.magic_pdef(arg, namespaces=namespaces)
493 __IPYTHON__.magic_pdef(arg, namespaces=namespaces)
486
494
487 def do_pdoc(self, arg):
495 def do_pdoc(self, arg):
488 """The debugger interface to magic_pdoc"""
496 """The debugger interface to magic_pdoc"""
489 namespaces = [('Locals', self.curframe.f_locals),
497 namespaces = [('Locals', self.curframe.f_locals),
490 ('Globals', self.curframe.f_globals)]
498 ('Globals', self.curframe.f_globals)]
491 __IPYTHON__.magic_pdoc(arg, namespaces=namespaces)
499 __IPYTHON__.magic_pdoc(arg, namespaces=namespaces)
492
500
493 def do_pinfo(self, arg):
501 def do_pinfo(self, arg):
494 """The debugger equivalant of ?obj"""
502 """The debugger equivalant of ?obj"""
495 namespaces = [('Locals', self.curframe.f_locals),
503 namespaces = [('Locals', self.curframe.f_locals),
496 ('Globals', self.curframe.f_globals)]
504 ('Globals', self.curframe.f_globals)]
497 __IPYTHON__.magic_pinfo("pinfo %s" % arg, namespaces=namespaces)
505 __IPYTHON__.magic_pinfo("pinfo %s" % arg, namespaces=namespaces)
@@ -1,31 +1,31 b''
1 import inspect
1 import inspect
2 import IPython.ipapi
2 import IPython.ipapi
3 from IPython.genutils import arg_split
3 from IPython.genutils import arg_split
4 ip = IPython.ipapi.get()
4 ip = IPython.ipapi.get()
5
5
6 from IPython import Debugger
6 from IPython import Debugger
7
7
8 def call_pydb(self, args):
8 def call_pydb(self, args):
9 """Invoke pydb with the supplied parameters."""
9 """Invoke pydb with the supplied parameters."""
10 try:
10 try:
11 import pydb
11 import pydb
12 except ImportError:
12 except ImportError:
13 raise ImportError("pydb doesn't seem to be installed.")
13 raise ImportError("pydb doesn't seem to be installed.")
14
14
15 if not hasattr(pydb.pydb, "runv"):
15 if not hasattr(pydb.pydb, "runv"):
16 raise ImportError("You need pydb version 1.19 or later installed.")
16 raise ImportError("You need pydb version 1.19 or later installed.")
17
17
18 argl = arg_split(args)
18 argl = arg_split(args)
19 # print argl # dbg
19 # print argl # dbg
20 if len(inspect.getargspec(pydb.runv)[0]) == 2:
20 if len(inspect.getargspec(pydb.runv)[0]) == 2:
21 pdb = Debugger.Pdb()
21 pdb = Debugger.Pdb(color_scheme=self.rc.colors)
22 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl, pdb) )()
22 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl, pdb) )()
23 else:
23 else:
24 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl) )()
24 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl) )()
25
25
26
26
27 ip.expose_magic("pydb",call_pydb)
27 ip.expose_magic("pydb",call_pydb)
28
28
29
29
30
30
31
31
@@ -1,1752 +1,1756 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 General purpose utilities.
3 General purpose utilities.
4
4
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
6 these things are also convenient when working at the command line.
6 these things are also convenient when working at the command line.
7
7
8 $Id: genutils.py 2152 2007-03-18 20:13:35Z fperez $"""
8 $Id: genutils.py 2154 2007-03-19 00:10:07Z fperez $"""
9
9
10 #*****************************************************************************
10 #*****************************************************************************
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 #
12 #
13 # Distributed under the terms of the BSD License. The full license is in
13 # Distributed under the terms of the BSD License. The full license is in
14 # the file COPYING, distributed as part of this software.
14 # the file COPYING, distributed as part of this software.
15 #*****************************************************************************
15 #*****************************************************************************
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>' % Release.authors['Fernando']
18 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __license__ = Release.license
19 __license__ = Release.license
20
20
21 #****************************************************************************
21 #****************************************************************************
22 # required modules from the Python standard library
22 # required modules from the Python standard library
23 import __main__
23 import __main__
24 import commands
24 import commands
25 import os
25 import os
26 import re
26 import re
27 import shlex
27 import shlex
28 import shutil
28 import shutil
29 import sys
29 import sys
30 import tempfile
30 import tempfile
31 import time
31 import time
32 import types
32 import types
33 import warnings
33 import warnings
34
34
35 # Other IPython utilities
35 # Other IPython utilities
36 from IPython.Itpl import Itpl,itpl,printpl
36 from IPython.Itpl import Itpl,itpl,printpl
37 from IPython import DPyGetOpt
37 from IPython import DPyGetOpt
38 from path import path
38 from path import path
39 if os.name == "nt":
39 if os.name == "nt":
40 from IPython.winconsole import get_console_size
40 from IPython.winconsole import get_console_size
41
41
42 #****************************************************************************
42 #****************************************************************************
43 # Exceptions
43 # Exceptions
44 class Error(Exception):
44 class Error(Exception):
45 """Base class for exceptions in this module."""
45 """Base class for exceptions in this module."""
46 pass
46 pass
47
47
48 #----------------------------------------------------------------------------
48 #----------------------------------------------------------------------------
49 class IOStream:
49 class IOStream:
50 def __init__(self,stream,fallback):
50 def __init__(self,stream,fallback):
51 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
51 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
52 stream = fallback
52 stream = fallback
53 self.stream = stream
53 self.stream = stream
54 self._swrite = stream.write
54 self._swrite = stream.write
55 self.flush = stream.flush
55 self.flush = stream.flush
56
56
57 def write(self,data):
57 def write(self,data):
58 try:
58 try:
59 self._swrite(data)
59 self._swrite(data)
60 except:
60 except:
61 try:
61 try:
62 # print handles some unicode issues which may trip a plain
62 # print handles some unicode issues which may trip a plain
63 # write() call. Attempt to emulate write() by using a
63 # write() call. Attempt to emulate write() by using a
64 # trailing comma
64 # trailing comma
65 print >> self.stream, data,
65 print >> self.stream, data,
66 except:
66 except:
67 # if we get here, something is seriously broken.
67 # if we get here, something is seriously broken.
68 print >> sys.stderr, \
68 print >> sys.stderr, \
69 'ERROR - failed to write data to stream:', self.stream
69 'ERROR - failed to write data to stream:', self.stream
70
71 def close(self):
72 pass
73
70
74
71 class IOTerm:
75 class IOTerm:
72 """ Term holds the file or file-like objects for handling I/O operations.
76 """ Term holds the file or file-like objects for handling I/O operations.
73
77
74 These are normally just sys.stdin, sys.stdout and sys.stderr but for
78 These are normally just sys.stdin, sys.stdout and sys.stderr but for
75 Windows they can can replaced to allow editing the strings before they are
79 Windows they can can replaced to allow editing the strings before they are
76 displayed."""
80 displayed."""
77
81
78 # In the future, having IPython channel all its I/O operations through
82 # In the future, having IPython channel all its I/O operations through
79 # this class will make it easier to embed it into other environments which
83 # this class will make it easier to embed it into other environments which
80 # are not a normal terminal (such as a GUI-based shell)
84 # are not a normal terminal (such as a GUI-based shell)
81 def __init__(self,cin=None,cout=None,cerr=None):
85 def __init__(self,cin=None,cout=None,cerr=None):
82 self.cin = IOStream(cin,sys.stdin)
86 self.cin = IOStream(cin,sys.stdin)
83 self.cout = IOStream(cout,sys.stdout)
87 self.cout = IOStream(cout,sys.stdout)
84 self.cerr = IOStream(cerr,sys.stderr)
88 self.cerr = IOStream(cerr,sys.stderr)
85
89
86 # Global variable to be used for all I/O
90 # Global variable to be used for all I/O
87 Term = IOTerm()
91 Term = IOTerm()
88
92
89 import IPython.rlineimpl as readline
93 import IPython.rlineimpl as readline
90 # Remake Term to use the readline i/o facilities
94 # Remake Term to use the readline i/o facilities
91 if sys.platform == 'win32' and readline.have_readline:
95 if sys.platform == 'win32' and readline.have_readline:
92
96
93 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
97 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
94
98
95
99
96 #****************************************************************************
100 #****************************************************************************
97 # Generic warning/error printer, used by everything else
101 # Generic warning/error printer, used by everything else
98 def warn(msg,level=2,exit_val=1):
102 def warn(msg,level=2,exit_val=1):
99 """Standard warning printer. Gives formatting consistency.
103 """Standard warning printer. Gives formatting consistency.
100
104
101 Output is sent to Term.cerr (sys.stderr by default).
105 Output is sent to Term.cerr (sys.stderr by default).
102
106
103 Options:
107 Options:
104
108
105 -level(2): allows finer control:
109 -level(2): allows finer control:
106 0 -> Do nothing, dummy function.
110 0 -> Do nothing, dummy function.
107 1 -> Print message.
111 1 -> Print message.
108 2 -> Print 'WARNING:' + message. (Default level).
112 2 -> Print 'WARNING:' + message. (Default level).
109 3 -> Print 'ERROR:' + message.
113 3 -> Print 'ERROR:' + message.
110 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
114 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
111
115
112 -exit_val (1): exit value returned by sys.exit() for a level 4
116 -exit_val (1): exit value returned by sys.exit() for a level 4
113 warning. Ignored for all other levels."""
117 warning. Ignored for all other levels."""
114
118
115 if level>0:
119 if level>0:
116 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
120 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
117 print >> Term.cerr, '%s%s' % (header[level],msg)
121 print >> Term.cerr, '%s%s' % (header[level],msg)
118 if level == 4:
122 if level == 4:
119 print >> Term.cerr,'Exiting.\n'
123 print >> Term.cerr,'Exiting.\n'
120 sys.exit(exit_val)
124 sys.exit(exit_val)
121
125
122 def info(msg):
126 def info(msg):
123 """Equivalent to warn(msg,level=1)."""
127 """Equivalent to warn(msg,level=1)."""
124
128
125 warn(msg,level=1)
129 warn(msg,level=1)
126
130
127 def error(msg):
131 def error(msg):
128 """Equivalent to warn(msg,level=3)."""
132 """Equivalent to warn(msg,level=3)."""
129
133
130 warn(msg,level=3)
134 warn(msg,level=3)
131
135
132 def fatal(msg,exit_val=1):
136 def fatal(msg,exit_val=1):
133 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
137 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
134
138
135 warn(msg,exit_val=exit_val,level=4)
139 warn(msg,exit_val=exit_val,level=4)
136
140
137 #---------------------------------------------------------------------------
141 #---------------------------------------------------------------------------
138 # Debugging routines
142 # Debugging routines
139 #
143 #
140 def debugx(expr,pre_msg=''):
144 def debugx(expr,pre_msg=''):
141 """Print the value of an expression from the caller's frame.
145 """Print the value of an expression from the caller's frame.
142
146
143 Takes an expression, evaluates it in the caller's frame and prints both
147 Takes an expression, evaluates it in the caller's frame and prints both
144 the given expression and the resulting value (as well as a debug mark
148 the given expression and the resulting value (as well as a debug mark
145 indicating the name of the calling function. The input must be of a form
149 indicating the name of the calling function. The input must be of a form
146 suitable for eval().
150 suitable for eval().
147
151
148 An optional message can be passed, which will be prepended to the printed
152 An optional message can be passed, which will be prepended to the printed
149 expr->value pair."""
153 expr->value pair."""
150
154
151 cf = sys._getframe(1)
155 cf = sys._getframe(1)
152 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
156 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
153 eval(expr,cf.f_globals,cf.f_locals))
157 eval(expr,cf.f_globals,cf.f_locals))
154
158
155 # deactivate it by uncommenting the following line, which makes it a no-op
159 # deactivate it by uncommenting the following line, which makes it a no-op
156 #def debugx(expr,pre_msg=''): pass
160 #def debugx(expr,pre_msg=''): pass
157
161
158 #----------------------------------------------------------------------------
162 #----------------------------------------------------------------------------
159 StringTypes = types.StringTypes
163 StringTypes = types.StringTypes
160
164
161 # Basic timing functionality
165 # Basic timing functionality
162
166
163 # If possible (Unix), use the resource module instead of time.clock()
167 # If possible (Unix), use the resource module instead of time.clock()
164 try:
168 try:
165 import resource
169 import resource
166 def clocku():
170 def clocku():
167 """clocku() -> floating point number
171 """clocku() -> floating point number
168
172
169 Return the *USER* CPU time in seconds since the start of the process.
173 Return the *USER* CPU time in seconds since the start of the process.
170 This is done via a call to resource.getrusage, so it avoids the
174 This is done via a call to resource.getrusage, so it avoids the
171 wraparound problems in time.clock()."""
175 wraparound problems in time.clock()."""
172
176
173 return resource.getrusage(resource.RUSAGE_SELF)[0]
177 return resource.getrusage(resource.RUSAGE_SELF)[0]
174
178
175 def clocks():
179 def clocks():
176 """clocks() -> floating point number
180 """clocks() -> floating point number
177
181
178 Return the *SYSTEM* CPU time in seconds since the start of the process.
182 Return the *SYSTEM* CPU time in seconds since the start of the process.
179 This is done via a call to resource.getrusage, so it avoids the
183 This is done via a call to resource.getrusage, so it avoids the
180 wraparound problems in time.clock()."""
184 wraparound problems in time.clock()."""
181
185
182 return resource.getrusage(resource.RUSAGE_SELF)[1]
186 return resource.getrusage(resource.RUSAGE_SELF)[1]
183
187
184 def clock():
188 def clock():
185 """clock() -> floating point number
189 """clock() -> floating point number
186
190
187 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
191 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
188 the process. This is done via a call to resource.getrusage, so it
192 the process. This is done via a call to resource.getrusage, so it
189 avoids the wraparound problems in time.clock()."""
193 avoids the wraparound problems in time.clock()."""
190
194
191 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
195 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
192 return u+s
196 return u+s
193
197
194 def clock2():
198 def clock2():
195 """clock2() -> (t_user,t_system)
199 """clock2() -> (t_user,t_system)
196
200
197 Similar to clock(), but return a tuple of user/system times."""
201 Similar to clock(), but return a tuple of user/system times."""
198 return resource.getrusage(resource.RUSAGE_SELF)[:2]
202 return resource.getrusage(resource.RUSAGE_SELF)[:2]
199
203
200 except ImportError:
204 except ImportError:
201 # There is no distinction of user/system time under windows, so we just use
205 # There is no distinction of user/system time under windows, so we just use
202 # time.clock() for everything...
206 # time.clock() for everything...
203 clocku = clocks = clock = time.clock
207 clocku = clocks = clock = time.clock
204 def clock2():
208 def clock2():
205 """Under windows, system CPU time can't be measured.
209 """Under windows, system CPU time can't be measured.
206
210
207 This just returns clock() and zero."""
211 This just returns clock() and zero."""
208 return time.clock(),0.0
212 return time.clock(),0.0
209
213
210 def timings_out(reps,func,*args,**kw):
214 def timings_out(reps,func,*args,**kw):
211 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
215 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
212
216
213 Execute a function reps times, return a tuple with the elapsed total
217 Execute a function reps times, return a tuple with the elapsed total
214 CPU time in seconds, the time per call and the function's output.
218 CPU time in seconds, the time per call and the function's output.
215
219
216 Under Unix, the return value is the sum of user+system time consumed by
220 Under Unix, the return value is the sum of user+system time consumed by
217 the process, computed via the resource module. This prevents problems
221 the process, computed via the resource module. This prevents problems
218 related to the wraparound effect which the time.clock() function has.
222 related to the wraparound effect which the time.clock() function has.
219
223
220 Under Windows the return value is in wall clock seconds. See the
224 Under Windows the return value is in wall clock seconds. See the
221 documentation for the time module for more details."""
225 documentation for the time module for more details."""
222
226
223 reps = int(reps)
227 reps = int(reps)
224 assert reps >=1, 'reps must be >= 1'
228 assert reps >=1, 'reps must be >= 1'
225 if reps==1:
229 if reps==1:
226 start = clock()
230 start = clock()
227 out = func(*args,**kw)
231 out = func(*args,**kw)
228 tot_time = clock()-start
232 tot_time = clock()-start
229 else:
233 else:
230 rng = xrange(reps-1) # the last time is executed separately to store output
234 rng = xrange(reps-1) # the last time is executed separately to store output
231 start = clock()
235 start = clock()
232 for dummy in rng: func(*args,**kw)
236 for dummy in rng: func(*args,**kw)
233 out = func(*args,**kw) # one last time
237 out = func(*args,**kw) # one last time
234 tot_time = clock()-start
238 tot_time = clock()-start
235 av_time = tot_time / reps
239 av_time = tot_time / reps
236 return tot_time,av_time,out
240 return tot_time,av_time,out
237
241
238 def timings(reps,func,*args,**kw):
242 def timings(reps,func,*args,**kw):
239 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
243 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
240
244
241 Execute a function reps times, return a tuple with the elapsed total CPU
245 Execute a function reps times, return a tuple with the elapsed total CPU
242 time in seconds and the time per call. These are just the first two values
246 time in seconds and the time per call. These are just the first two values
243 in timings_out()."""
247 in timings_out()."""
244
248
245 return timings_out(reps,func,*args,**kw)[0:2]
249 return timings_out(reps,func,*args,**kw)[0:2]
246
250
247 def timing(func,*args,**kw):
251 def timing(func,*args,**kw):
248 """timing(func,*args,**kw) -> t_total
252 """timing(func,*args,**kw) -> t_total
249
253
250 Execute a function once, return the elapsed total CPU time in
254 Execute a function once, return the elapsed total CPU time in
251 seconds. This is just the first value in timings_out()."""
255 seconds. This is just the first value in timings_out()."""
252
256
253 return timings_out(1,func,*args,**kw)[0]
257 return timings_out(1,func,*args,**kw)[0]
254
258
255 #****************************************************************************
259 #****************************************************************************
256 # file and system
260 # file and system
257
261
258 def arg_split(s,posix=False):
262 def arg_split(s,posix=False):
259 """Split a command line's arguments in a shell-like manner.
263 """Split a command line's arguments in a shell-like manner.
260
264
261 This is a modified version of the standard library's shlex.split()
265 This is a modified version of the standard library's shlex.split()
262 function, but with a default of posix=False for splitting, so that quotes
266 function, but with a default of posix=False for splitting, so that quotes
263 in inputs are respected."""
267 in inputs are respected."""
264
268
265 lex = shlex.shlex(s, posix=posix)
269 lex = shlex.shlex(s, posix=posix)
266 lex.whitespace_split = True
270 lex.whitespace_split = True
267 return list(lex)
271 return list(lex)
268
272
269 def system(cmd,verbose=0,debug=0,header=''):
273 def system(cmd,verbose=0,debug=0,header=''):
270 """Execute a system command, return its exit status.
274 """Execute a system command, return its exit status.
271
275
272 Options:
276 Options:
273
277
274 - verbose (0): print the command to be executed.
278 - verbose (0): print the command to be executed.
275
279
276 - debug (0): only print, do not actually execute.
280 - debug (0): only print, do not actually execute.
277
281
278 - header (''): Header to print on screen prior to the executed command (it
282 - header (''): Header to print on screen prior to the executed command (it
279 is only prepended to the command, no newlines are added).
283 is only prepended to the command, no newlines are added).
280
284
281 Note: a stateful version of this function is available through the
285 Note: a stateful version of this function is available through the
282 SystemExec class."""
286 SystemExec class."""
283
287
284 stat = 0
288 stat = 0
285 if verbose or debug: print header+cmd
289 if verbose or debug: print header+cmd
286 sys.stdout.flush()
290 sys.stdout.flush()
287 if not debug: stat = os.system(cmd)
291 if not debug: stat = os.system(cmd)
288 return stat
292 return stat
289
293
290 # This function is used by ipython in a lot of places to make system calls.
294 # This function is used by ipython in a lot of places to make system calls.
291 # We need it to be slightly different under win32, due to the vagaries of
295 # We need it to be slightly different under win32, due to the vagaries of
292 # 'network shares'. A win32 override is below.
296 # 'network shares'. A win32 override is below.
293
297
294 def shell(cmd,verbose=0,debug=0,header=''):
298 def shell(cmd,verbose=0,debug=0,header=''):
295 """Execute a command in the system shell, always return None.
299 """Execute a command in the system shell, always return None.
296
300
297 Options:
301 Options:
298
302
299 - verbose (0): print the command to be executed.
303 - verbose (0): print the command to be executed.
300
304
301 - debug (0): only print, do not actually execute.
305 - debug (0): only print, do not actually execute.
302
306
303 - header (''): Header to print on screen prior to the executed command (it
307 - header (''): Header to print on screen prior to the executed command (it
304 is only prepended to the command, no newlines are added).
308 is only prepended to the command, no newlines are added).
305
309
306 Note: this is similar to genutils.system(), but it returns None so it can
310 Note: this is similar to genutils.system(), but it returns None so it can
307 be conveniently used in interactive loops without getting the return value
311 be conveniently used in interactive loops without getting the return value
308 (typically 0) printed many times."""
312 (typically 0) printed many times."""
309
313
310 stat = 0
314 stat = 0
311 if verbose or debug: print header+cmd
315 if verbose or debug: print header+cmd
312 # flush stdout so we don't mangle python's buffering
316 # flush stdout so we don't mangle python's buffering
313 sys.stdout.flush()
317 sys.stdout.flush()
314 if not debug:
318 if not debug:
315 os.system(cmd)
319 os.system(cmd)
316
320
317 # override shell() for win32 to deal with network shares
321 # override shell() for win32 to deal with network shares
318 if os.name in ('nt','dos'):
322 if os.name in ('nt','dos'):
319
323
320 shell_ori = shell
324 shell_ori = shell
321
325
322 def shell(cmd,verbose=0,debug=0,header=''):
326 def shell(cmd,verbose=0,debug=0,header=''):
323 if os.getcwd().startswith(r"\\"):
327 if os.getcwd().startswith(r"\\"):
324 path = os.getcwd()
328 path = os.getcwd()
325 # change to c drive (cannot be on UNC-share when issuing os.system,
329 # change to c drive (cannot be on UNC-share when issuing os.system,
326 # as cmd.exe cannot handle UNC addresses)
330 # as cmd.exe cannot handle UNC addresses)
327 os.chdir("c:")
331 os.chdir("c:")
328 # issue pushd to the UNC-share and then run the command
332 # issue pushd to the UNC-share and then run the command
329 try:
333 try:
330 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
334 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
331 finally:
335 finally:
332 os.chdir(path)
336 os.chdir(path)
333 else:
337 else:
334 shell_ori(cmd,verbose,debug,header)
338 shell_ori(cmd,verbose,debug,header)
335
339
336 shell.__doc__ = shell_ori.__doc__
340 shell.__doc__ = shell_ori.__doc__
337
341
338 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
342 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
339 """Dummy substitute for perl's backquotes.
343 """Dummy substitute for perl's backquotes.
340
344
341 Executes a command and returns the output.
345 Executes a command and returns the output.
342
346
343 Accepts the same arguments as system(), plus:
347 Accepts the same arguments as system(), plus:
344
348
345 - split(0): if true, the output is returned as a list split on newlines.
349 - split(0): if true, the output is returned as a list split on newlines.
346
350
347 Note: a stateful version of this function is available through the
351 Note: a stateful version of this function is available through the
348 SystemExec class.
352 SystemExec class.
349
353
350 This is pretty much deprecated and rarely used,
354 This is pretty much deprecated and rarely used,
351 genutils.getoutputerror may be what you need.
355 genutils.getoutputerror may be what you need.
352
356
353 """
357 """
354
358
355 if verbose or debug: print header+cmd
359 if verbose or debug: print header+cmd
356 if not debug:
360 if not debug:
357 output = os.popen(cmd).read()
361 output = os.popen(cmd).read()
358 # stipping last \n is here for backwards compat.
362 # stipping last \n is here for backwards compat.
359 if output.endswith('\n'):
363 if output.endswith('\n'):
360 output = output[:-1]
364 output = output[:-1]
361 if split:
365 if split:
362 return output.split('\n')
366 return output.split('\n')
363 else:
367 else:
364 return output
368 return output
365
369
366 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
370 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
367 """Return (standard output,standard error) of executing cmd in a shell.
371 """Return (standard output,standard error) of executing cmd in a shell.
368
372
369 Accepts the same arguments as system(), plus:
373 Accepts the same arguments as system(), plus:
370
374
371 - split(0): if true, each of stdout/err is returned as a list split on
375 - split(0): if true, each of stdout/err is returned as a list split on
372 newlines.
376 newlines.
373
377
374 Note: a stateful version of this function is available through the
378 Note: a stateful version of this function is available through the
375 SystemExec class."""
379 SystemExec class."""
376
380
377 if verbose or debug: print header+cmd
381 if verbose or debug: print header+cmd
378 if not cmd:
382 if not cmd:
379 if split:
383 if split:
380 return [],[]
384 return [],[]
381 else:
385 else:
382 return '',''
386 return '',''
383 if not debug:
387 if not debug:
384 pin,pout,perr = os.popen3(cmd)
388 pin,pout,perr = os.popen3(cmd)
385 tout = pout.read().rstrip()
389 tout = pout.read().rstrip()
386 terr = perr.read().rstrip()
390 terr = perr.read().rstrip()
387 pin.close()
391 pin.close()
388 pout.close()
392 pout.close()
389 perr.close()
393 perr.close()
390 if split:
394 if split:
391 return tout.split('\n'),terr.split('\n')
395 return tout.split('\n'),terr.split('\n')
392 else:
396 else:
393 return tout,terr
397 return tout,terr
394
398
395 # for compatibility with older naming conventions
399 # for compatibility with older naming conventions
396 xsys = system
400 xsys = system
397 bq = getoutput
401 bq = getoutput
398
402
399 class SystemExec:
403 class SystemExec:
400 """Access the system and getoutput functions through a stateful interface.
404 """Access the system and getoutput functions through a stateful interface.
401
405
402 Note: here we refer to the system and getoutput functions from this
406 Note: here we refer to the system and getoutput functions from this
403 library, not the ones from the standard python library.
407 library, not the ones from the standard python library.
404
408
405 This class offers the system and getoutput functions as methods, but the
409 This class offers the system and getoutput functions as methods, but the
406 verbose, debug and header parameters can be set for the instance (at
410 verbose, debug and header parameters can be set for the instance (at
407 creation time or later) so that they don't need to be specified on each
411 creation time or later) so that they don't need to be specified on each
408 call.
412 call.
409
413
410 For efficiency reasons, there's no way to override the parameters on a
414 For efficiency reasons, there's no way to override the parameters on a
411 per-call basis other than by setting instance attributes. If you need
415 per-call basis other than by setting instance attributes. If you need
412 local overrides, it's best to directly call system() or getoutput().
416 local overrides, it's best to directly call system() or getoutput().
413
417
414 The following names are provided as alternate options:
418 The following names are provided as alternate options:
415 - xsys: alias to system
419 - xsys: alias to system
416 - bq: alias to getoutput
420 - bq: alias to getoutput
417
421
418 An instance can then be created as:
422 An instance can then be created as:
419 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
423 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
420
424
421 And used as:
425 And used as:
422 >>> sysexec.xsys('pwd')
426 >>> sysexec.xsys('pwd')
423 >>> dirlist = sysexec.bq('ls -l')
427 >>> dirlist = sysexec.bq('ls -l')
424 """
428 """
425
429
426 def __init__(self,verbose=0,debug=0,header='',split=0):
430 def __init__(self,verbose=0,debug=0,header='',split=0):
427 """Specify the instance's values for verbose, debug and header."""
431 """Specify the instance's values for verbose, debug and header."""
428 setattr_list(self,'verbose debug header split')
432 setattr_list(self,'verbose debug header split')
429
433
430 def system(self,cmd):
434 def system(self,cmd):
431 """Stateful interface to system(), with the same keyword parameters."""
435 """Stateful interface to system(), with the same keyword parameters."""
432
436
433 system(cmd,self.verbose,self.debug,self.header)
437 system(cmd,self.verbose,self.debug,self.header)
434
438
435 def shell(self,cmd):
439 def shell(self,cmd):
436 """Stateful interface to shell(), with the same keyword parameters."""
440 """Stateful interface to shell(), with the same keyword parameters."""
437
441
438 shell(cmd,self.verbose,self.debug,self.header)
442 shell(cmd,self.verbose,self.debug,self.header)
439
443
440 xsys = system # alias
444 xsys = system # alias
441
445
442 def getoutput(self,cmd):
446 def getoutput(self,cmd):
443 """Stateful interface to getoutput()."""
447 """Stateful interface to getoutput()."""
444
448
445 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
449 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
446
450
447 def getoutputerror(self,cmd):
451 def getoutputerror(self,cmd):
448 """Stateful interface to getoutputerror()."""
452 """Stateful interface to getoutputerror()."""
449
453
450 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
454 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
451
455
452 bq = getoutput # alias
456 bq = getoutput # alias
453
457
454 #-----------------------------------------------------------------------------
458 #-----------------------------------------------------------------------------
455 def mutex_opts(dict,ex_op):
459 def mutex_opts(dict,ex_op):
456 """Check for presence of mutually exclusive keys in a dict.
460 """Check for presence of mutually exclusive keys in a dict.
457
461
458 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
462 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
459 for op1,op2 in ex_op:
463 for op1,op2 in ex_op:
460 if op1 in dict and op2 in dict:
464 if op1 in dict and op2 in dict:
461 raise ValueError,'\n*** ERROR in Arguments *** '\
465 raise ValueError,'\n*** ERROR in Arguments *** '\
462 'Options '+op1+' and '+op2+' are mutually exclusive.'
466 'Options '+op1+' and '+op2+' are mutually exclusive.'
463
467
464 #-----------------------------------------------------------------------------
468 #-----------------------------------------------------------------------------
465 def get_py_filename(name):
469 def get_py_filename(name):
466 """Return a valid python filename in the current directory.
470 """Return a valid python filename in the current directory.
467
471
468 If the given name is not a file, it adds '.py' and searches again.
472 If the given name is not a file, it adds '.py' and searches again.
469 Raises IOError with an informative message if the file isn't found."""
473 Raises IOError with an informative message if the file isn't found."""
470
474
471 name = os.path.expanduser(name)
475 name = os.path.expanduser(name)
472 if not os.path.isfile(name) and not name.endswith('.py'):
476 if not os.path.isfile(name) and not name.endswith('.py'):
473 name += '.py'
477 name += '.py'
474 if os.path.isfile(name):
478 if os.path.isfile(name):
475 return name
479 return name
476 else:
480 else:
477 raise IOError,'File `%s` not found.' % name
481 raise IOError,'File `%s` not found.' % name
478
482
479 #-----------------------------------------------------------------------------
483 #-----------------------------------------------------------------------------
480 def filefind(fname,alt_dirs = None):
484 def filefind(fname,alt_dirs = None):
481 """Return the given filename either in the current directory, if it
485 """Return the given filename either in the current directory, if it
482 exists, or in a specified list of directories.
486 exists, or in a specified list of directories.
483
487
484 ~ expansion is done on all file and directory names.
488 ~ expansion is done on all file and directory names.
485
489
486 Upon an unsuccessful search, raise an IOError exception."""
490 Upon an unsuccessful search, raise an IOError exception."""
487
491
488 if alt_dirs is None:
492 if alt_dirs is None:
489 try:
493 try:
490 alt_dirs = get_home_dir()
494 alt_dirs = get_home_dir()
491 except HomeDirError:
495 except HomeDirError:
492 alt_dirs = os.getcwd()
496 alt_dirs = os.getcwd()
493 search = [fname] + list_strings(alt_dirs)
497 search = [fname] + list_strings(alt_dirs)
494 search = map(os.path.expanduser,search)
498 search = map(os.path.expanduser,search)
495 #print 'search list for',fname,'list:',search # dbg
499 #print 'search list for',fname,'list:',search # dbg
496 fname = search[0]
500 fname = search[0]
497 if os.path.isfile(fname):
501 if os.path.isfile(fname):
498 return fname
502 return fname
499 for direc in search[1:]:
503 for direc in search[1:]:
500 testname = os.path.join(direc,fname)
504 testname = os.path.join(direc,fname)
501 #print 'testname',testname # dbg
505 #print 'testname',testname # dbg
502 if os.path.isfile(testname):
506 if os.path.isfile(testname):
503 return testname
507 return testname
504 raise IOError,'File' + `fname` + \
508 raise IOError,'File' + `fname` + \
505 ' not found in current or supplied directories:' + `alt_dirs`
509 ' not found in current or supplied directories:' + `alt_dirs`
506
510
507 #----------------------------------------------------------------------------
511 #----------------------------------------------------------------------------
508 def file_read(filename):
512 def file_read(filename):
509 """Read a file and close it. Returns the file source."""
513 """Read a file and close it. Returns the file source."""
510 fobj = open(filename,'r');
514 fobj = open(filename,'r');
511 source = fobj.read();
515 source = fobj.read();
512 fobj.close()
516 fobj.close()
513 return source
517 return source
514
518
515 def file_readlines(filename):
519 def file_readlines(filename):
516 """Read a file and close it. Returns the file source using readlines()."""
520 """Read a file and close it. Returns the file source using readlines()."""
517 fobj = open(filename,'r');
521 fobj = open(filename,'r');
518 lines = fobj.readlines();
522 lines = fobj.readlines();
519 fobj.close()
523 fobj.close()
520 return lines
524 return lines
521
525
522 #----------------------------------------------------------------------------
526 #----------------------------------------------------------------------------
523 def target_outdated(target,deps):
527 def target_outdated(target,deps):
524 """Determine whether a target is out of date.
528 """Determine whether a target is out of date.
525
529
526 target_outdated(target,deps) -> 1/0
530 target_outdated(target,deps) -> 1/0
527
531
528 deps: list of filenames which MUST exist.
532 deps: list of filenames which MUST exist.
529 target: single filename which may or may not exist.
533 target: single filename which may or may not exist.
530
534
531 If target doesn't exist or is older than any file listed in deps, return
535 If target doesn't exist or is older than any file listed in deps, return
532 true, otherwise return false.
536 true, otherwise return false.
533 """
537 """
534 try:
538 try:
535 target_time = os.path.getmtime(target)
539 target_time = os.path.getmtime(target)
536 except os.error:
540 except os.error:
537 return 1
541 return 1
538 for dep in deps:
542 for dep in deps:
539 dep_time = os.path.getmtime(dep)
543 dep_time = os.path.getmtime(dep)
540 if dep_time > target_time:
544 if dep_time > target_time:
541 #print "For target",target,"Dep failed:",dep # dbg
545 #print "For target",target,"Dep failed:",dep # dbg
542 #print "times (dep,tar):",dep_time,target_time # dbg
546 #print "times (dep,tar):",dep_time,target_time # dbg
543 return 1
547 return 1
544 return 0
548 return 0
545
549
546 #-----------------------------------------------------------------------------
550 #-----------------------------------------------------------------------------
547 def target_update(target,deps,cmd):
551 def target_update(target,deps,cmd):
548 """Update a target with a given command given a list of dependencies.
552 """Update a target with a given command given a list of dependencies.
549
553
550 target_update(target,deps,cmd) -> runs cmd if target is outdated.
554 target_update(target,deps,cmd) -> runs cmd if target is outdated.
551
555
552 This is just a wrapper around target_outdated() which calls the given
556 This is just a wrapper around target_outdated() which calls the given
553 command if target is outdated."""
557 command if target is outdated."""
554
558
555 if target_outdated(target,deps):
559 if target_outdated(target,deps):
556 xsys(cmd)
560 xsys(cmd)
557
561
558 #----------------------------------------------------------------------------
562 #----------------------------------------------------------------------------
559 def unquote_ends(istr):
563 def unquote_ends(istr):
560 """Remove a single pair of quotes from the endpoints of a string."""
564 """Remove a single pair of quotes from the endpoints of a string."""
561
565
562 if not istr:
566 if not istr:
563 return istr
567 return istr
564 if (istr[0]=="'" and istr[-1]=="'") or \
568 if (istr[0]=="'" and istr[-1]=="'") or \
565 (istr[0]=='"' and istr[-1]=='"'):
569 (istr[0]=='"' and istr[-1]=='"'):
566 return istr[1:-1]
570 return istr[1:-1]
567 else:
571 else:
568 return istr
572 return istr
569
573
570 #----------------------------------------------------------------------------
574 #----------------------------------------------------------------------------
571 def process_cmdline(argv,names=[],defaults={},usage=''):
575 def process_cmdline(argv,names=[],defaults={},usage=''):
572 """ Process command-line options and arguments.
576 """ Process command-line options and arguments.
573
577
574 Arguments:
578 Arguments:
575
579
576 - argv: list of arguments, typically sys.argv.
580 - argv: list of arguments, typically sys.argv.
577
581
578 - names: list of option names. See DPyGetOpt docs for details on options
582 - names: list of option names. See DPyGetOpt docs for details on options
579 syntax.
583 syntax.
580
584
581 - defaults: dict of default values.
585 - defaults: dict of default values.
582
586
583 - usage: optional usage notice to print if a wrong argument is passed.
587 - usage: optional usage notice to print if a wrong argument is passed.
584
588
585 Return a dict of options and a list of free arguments."""
589 Return a dict of options and a list of free arguments."""
586
590
587 getopt = DPyGetOpt.DPyGetOpt()
591 getopt = DPyGetOpt.DPyGetOpt()
588 getopt.setIgnoreCase(0)
592 getopt.setIgnoreCase(0)
589 getopt.parseConfiguration(names)
593 getopt.parseConfiguration(names)
590
594
591 try:
595 try:
592 getopt.processArguments(argv)
596 getopt.processArguments(argv)
593 except:
597 except:
594 print usage
598 print usage
595 warn(`sys.exc_value`,level=4)
599 warn(`sys.exc_value`,level=4)
596
600
597 defaults.update(getopt.optionValues)
601 defaults.update(getopt.optionValues)
598 args = getopt.freeValues
602 args = getopt.freeValues
599
603
600 return defaults,args
604 return defaults,args
601
605
602 #----------------------------------------------------------------------------
606 #----------------------------------------------------------------------------
603 def optstr2types(ostr):
607 def optstr2types(ostr):
604 """Convert a string of option names to a dict of type mappings.
608 """Convert a string of option names to a dict of type mappings.
605
609
606 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
610 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
607
611
608 This is used to get the types of all the options in a string formatted
612 This is used to get the types of all the options in a string formatted
609 with the conventions of DPyGetOpt. The 'type' None is used for options
613 with the conventions of DPyGetOpt. The 'type' None is used for options
610 which are strings (they need no further conversion). This function's main
614 which are strings (they need no further conversion). This function's main
611 use is to get a typemap for use with read_dict().
615 use is to get a typemap for use with read_dict().
612 """
616 """
613
617
614 typeconv = {None:'',int:'',float:''}
618 typeconv = {None:'',int:'',float:''}
615 typemap = {'s':None,'i':int,'f':float}
619 typemap = {'s':None,'i':int,'f':float}
616 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
620 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
617
621
618 for w in ostr.split():
622 for w in ostr.split():
619 oname,alias,otype = opt_re.match(w).groups()
623 oname,alias,otype = opt_re.match(w).groups()
620 if otype == '' or alias == '!': # simple switches are integers too
624 if otype == '' or alias == '!': # simple switches are integers too
621 otype = 'i'
625 otype = 'i'
622 typeconv[typemap[otype]] += oname + ' '
626 typeconv[typemap[otype]] += oname + ' '
623 return typeconv
627 return typeconv
624
628
625 #----------------------------------------------------------------------------
629 #----------------------------------------------------------------------------
626 def read_dict(filename,type_conv=None,**opt):
630 def read_dict(filename,type_conv=None,**opt):
627
631
628 """Read a dictionary of key=value pairs from an input file, optionally
632 """Read a dictionary of key=value pairs from an input file, optionally
629 performing conversions on the resulting values.
633 performing conversions on the resulting values.
630
634
631 read_dict(filename,type_conv,**opt) -> dict
635 read_dict(filename,type_conv,**opt) -> dict
632
636
633 Only one value per line is accepted, the format should be
637 Only one value per line is accepted, the format should be
634 # optional comments are ignored
638 # optional comments are ignored
635 key value\n
639 key value\n
636
640
637 Args:
641 Args:
638
642
639 - type_conv: A dictionary specifying which keys need to be converted to
643 - type_conv: A dictionary specifying which keys need to be converted to
640 which types. By default all keys are read as strings. This dictionary
644 which types. By default all keys are read as strings. This dictionary
641 should have as its keys valid conversion functions for strings
645 should have as its keys valid conversion functions for strings
642 (int,long,float,complex, or your own). The value for each key
646 (int,long,float,complex, or your own). The value for each key
643 (converter) should be a whitespace separated string containing the names
647 (converter) should be a whitespace separated string containing the names
644 of all the entries in the file to be converted using that function. For
648 of all the entries in the file to be converted using that function. For
645 keys to be left alone, use None as the conversion function (only needed
649 keys to be left alone, use None as the conversion function (only needed
646 with purge=1, see below).
650 with purge=1, see below).
647
651
648 - opt: dictionary with extra options as below (default in parens)
652 - opt: dictionary with extra options as below (default in parens)
649
653
650 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
654 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
651 of the dictionary to be returned. If purge is going to be used, the
655 of the dictionary to be returned. If purge is going to be used, the
652 set of keys to be left as strings also has to be explicitly specified
656 set of keys to be left as strings also has to be explicitly specified
653 using the (non-existent) conversion function None.
657 using the (non-existent) conversion function None.
654
658
655 fs(None): field separator. This is the key/value separator to be used
659 fs(None): field separator. This is the key/value separator to be used
656 when parsing the file. The None default means any whitespace [behavior
660 when parsing the file. The None default means any whitespace [behavior
657 of string.split()].
661 of string.split()].
658
662
659 strip(0): if 1, strip string values of leading/trailinig whitespace.
663 strip(0): if 1, strip string values of leading/trailinig whitespace.
660
664
661 warn(1): warning level if requested keys are not found in file.
665 warn(1): warning level if requested keys are not found in file.
662 - 0: silently ignore.
666 - 0: silently ignore.
663 - 1: inform but proceed.
667 - 1: inform but proceed.
664 - 2: raise KeyError exception.
668 - 2: raise KeyError exception.
665
669
666 no_empty(0): if 1, remove keys with whitespace strings as a value.
670 no_empty(0): if 1, remove keys with whitespace strings as a value.
667
671
668 unique([]): list of keys (or space separated string) which can't be
672 unique([]): list of keys (or space separated string) which can't be
669 repeated. If one such key is found in the file, each new instance
673 repeated. If one such key is found in the file, each new instance
670 overwrites the previous one. For keys not listed here, the behavior is
674 overwrites the previous one. For keys not listed here, the behavior is
671 to make a list of all appearances.
675 to make a list of all appearances.
672
676
673 Example:
677 Example:
674 If the input file test.ini has:
678 If the input file test.ini has:
675 i 3
679 i 3
676 x 4.5
680 x 4.5
677 y 5.5
681 y 5.5
678 s hi ho
682 s hi ho
679 Then:
683 Then:
680
684
681 >>> type_conv={int:'i',float:'x',None:'s'}
685 >>> type_conv={int:'i',float:'x',None:'s'}
682 >>> read_dict('test.ini')
686 >>> read_dict('test.ini')
683 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
687 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
684 >>> read_dict('test.ini',type_conv)
688 >>> read_dict('test.ini',type_conv)
685 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
689 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
686 >>> read_dict('test.ini',type_conv,purge=1)
690 >>> read_dict('test.ini',type_conv,purge=1)
687 {'i': 3, 's': 'hi ho', 'x': 4.5}
691 {'i': 3, 's': 'hi ho', 'x': 4.5}
688 """
692 """
689
693
690 # starting config
694 # starting config
691 opt.setdefault('purge',0)
695 opt.setdefault('purge',0)
692 opt.setdefault('fs',None) # field sep defaults to any whitespace
696 opt.setdefault('fs',None) # field sep defaults to any whitespace
693 opt.setdefault('strip',0)
697 opt.setdefault('strip',0)
694 opt.setdefault('warn',1)
698 opt.setdefault('warn',1)
695 opt.setdefault('no_empty',0)
699 opt.setdefault('no_empty',0)
696 opt.setdefault('unique','')
700 opt.setdefault('unique','')
697 if type(opt['unique']) in StringTypes:
701 if type(opt['unique']) in StringTypes:
698 unique_keys = qw(opt['unique'])
702 unique_keys = qw(opt['unique'])
699 elif type(opt['unique']) in (types.TupleType,types.ListType):
703 elif type(opt['unique']) in (types.TupleType,types.ListType):
700 unique_keys = opt['unique']
704 unique_keys = opt['unique']
701 else:
705 else:
702 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
706 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
703
707
704 dict = {}
708 dict = {}
705 # first read in table of values as strings
709 # first read in table of values as strings
706 file = open(filename,'r')
710 file = open(filename,'r')
707 for line in file.readlines():
711 for line in file.readlines():
708 line = line.strip()
712 line = line.strip()
709 if len(line) and line[0]=='#': continue
713 if len(line) and line[0]=='#': continue
710 if len(line)>0:
714 if len(line)>0:
711 lsplit = line.split(opt['fs'],1)
715 lsplit = line.split(opt['fs'],1)
712 try:
716 try:
713 key,val = lsplit
717 key,val = lsplit
714 except ValueError:
718 except ValueError:
715 key,val = lsplit[0],''
719 key,val = lsplit[0],''
716 key = key.strip()
720 key = key.strip()
717 if opt['strip']: val = val.strip()
721 if opt['strip']: val = val.strip()
718 if val == "''" or val == '""': val = ''
722 if val == "''" or val == '""': val = ''
719 if opt['no_empty'] and (val=='' or val.isspace()):
723 if opt['no_empty'] and (val=='' or val.isspace()):
720 continue
724 continue
721 # if a key is found more than once in the file, build a list
725 # if a key is found more than once in the file, build a list
722 # unless it's in the 'unique' list. In that case, last found in file
726 # unless it's in the 'unique' list. In that case, last found in file
723 # takes precedence. User beware.
727 # takes precedence. User beware.
724 try:
728 try:
725 if dict[key] and key in unique_keys:
729 if dict[key] and key in unique_keys:
726 dict[key] = val
730 dict[key] = val
727 elif type(dict[key]) is types.ListType:
731 elif type(dict[key]) is types.ListType:
728 dict[key].append(val)
732 dict[key].append(val)
729 else:
733 else:
730 dict[key] = [dict[key],val]
734 dict[key] = [dict[key],val]
731 except KeyError:
735 except KeyError:
732 dict[key] = val
736 dict[key] = val
733 # purge if requested
737 # purge if requested
734 if opt['purge']:
738 if opt['purge']:
735 accepted_keys = qwflat(type_conv.values())
739 accepted_keys = qwflat(type_conv.values())
736 for key in dict.keys():
740 for key in dict.keys():
737 if key in accepted_keys: continue
741 if key in accepted_keys: continue
738 del(dict[key])
742 del(dict[key])
739 # now convert if requested
743 # now convert if requested
740 if type_conv==None: return dict
744 if type_conv==None: return dict
741 conversions = type_conv.keys()
745 conversions = type_conv.keys()
742 try: conversions.remove(None)
746 try: conversions.remove(None)
743 except: pass
747 except: pass
744 for convert in conversions:
748 for convert in conversions:
745 for val in qw(type_conv[convert]):
749 for val in qw(type_conv[convert]):
746 try:
750 try:
747 dict[val] = convert(dict[val])
751 dict[val] = convert(dict[val])
748 except KeyError,e:
752 except KeyError,e:
749 if opt['warn'] == 0:
753 if opt['warn'] == 0:
750 pass
754 pass
751 elif opt['warn'] == 1:
755 elif opt['warn'] == 1:
752 print >>sys.stderr, 'Warning: key',val,\
756 print >>sys.stderr, 'Warning: key',val,\
753 'not found in file',filename
757 'not found in file',filename
754 elif opt['warn'] == 2:
758 elif opt['warn'] == 2:
755 raise KeyError,e
759 raise KeyError,e
756 else:
760 else:
757 raise ValueError,'Warning level must be 0,1 or 2'
761 raise ValueError,'Warning level must be 0,1 or 2'
758
762
759 return dict
763 return dict
760
764
761 #----------------------------------------------------------------------------
765 #----------------------------------------------------------------------------
762 def flag_calls(func):
766 def flag_calls(func):
763 """Wrap a function to detect and flag when it gets called.
767 """Wrap a function to detect and flag when it gets called.
764
768
765 This is a decorator which takes a function and wraps it in a function with
769 This is a decorator which takes a function and wraps it in a function with
766 a 'called' attribute. wrapper.called is initialized to False.
770 a 'called' attribute. wrapper.called is initialized to False.
767
771
768 The wrapper.called attribute is set to False right before each call to the
772 The wrapper.called attribute is set to False right before each call to the
769 wrapped function, so if the call fails it remains False. After the call
773 wrapped function, so if the call fails it remains False. After the call
770 completes, wrapper.called is set to True and the output is returned.
774 completes, wrapper.called is set to True and the output is returned.
771
775
772 Testing for truth in wrapper.called allows you to determine if a call to
776 Testing for truth in wrapper.called allows you to determine if a call to
773 func() was attempted and succeeded."""
777 func() was attempted and succeeded."""
774
778
775 def wrapper(*args,**kw):
779 def wrapper(*args,**kw):
776 wrapper.called = False
780 wrapper.called = False
777 out = func(*args,**kw)
781 out = func(*args,**kw)
778 wrapper.called = True
782 wrapper.called = True
779 return out
783 return out
780
784
781 wrapper.called = False
785 wrapper.called = False
782 wrapper.__doc__ = func.__doc__
786 wrapper.__doc__ = func.__doc__
783 return wrapper
787 return wrapper
784
788
785 #----------------------------------------------------------------------------
789 #----------------------------------------------------------------------------
786 class HomeDirError(Error):
790 class HomeDirError(Error):
787 pass
791 pass
788
792
789 def get_home_dir():
793 def get_home_dir():
790 """Return the closest possible equivalent to a 'home' directory.
794 """Return the closest possible equivalent to a 'home' directory.
791
795
792 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
796 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
793
797
794 Currently only Posix and NT are implemented, a HomeDirError exception is
798 Currently only Posix and NT are implemented, a HomeDirError exception is
795 raised for all other OSes. """
799 raised for all other OSes. """
796
800
797 isdir = os.path.isdir
801 isdir = os.path.isdir
798 env = os.environ
802 env = os.environ
799 try:
803 try:
800 homedir = env['HOME']
804 homedir = env['HOME']
801 if not isdir(homedir):
805 if not isdir(homedir):
802 # in case a user stuck some string which does NOT resolve to a
806 # in case a user stuck some string which does NOT resolve to a
803 # valid path, it's as good as if we hadn't foud it
807 # valid path, it's as good as if we hadn't foud it
804 raise KeyError
808 raise KeyError
805 return homedir
809 return homedir
806 except KeyError:
810 except KeyError:
807 if os.name == 'posix':
811 if os.name == 'posix':
808 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
812 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
809 elif os.name == 'nt':
813 elif os.name == 'nt':
810 # For some strange reason, win9x returns 'nt' for os.name.
814 # For some strange reason, win9x returns 'nt' for os.name.
811 try:
815 try:
812 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
816 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
813 if not isdir(homedir):
817 if not isdir(homedir):
814 homedir = os.path.join(env['USERPROFILE'])
818 homedir = os.path.join(env['USERPROFILE'])
815 if not isdir(homedir):
819 if not isdir(homedir):
816 raise HomeDirError
820 raise HomeDirError
817 return homedir
821 return homedir
818 except:
822 except:
819 try:
823 try:
820 # Use the registry to get the 'My Documents' folder.
824 # Use the registry to get the 'My Documents' folder.
821 import _winreg as wreg
825 import _winreg as wreg
822 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
826 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
823 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
827 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
824 homedir = wreg.QueryValueEx(key,'Personal')[0]
828 homedir = wreg.QueryValueEx(key,'Personal')[0]
825 key.Close()
829 key.Close()
826 if not isdir(homedir):
830 if not isdir(homedir):
827 e = ('Invalid "Personal" folder registry key '
831 e = ('Invalid "Personal" folder registry key '
828 'typically "My Documents".\n'
832 'typically "My Documents".\n'
829 'Value: %s\n'
833 'Value: %s\n'
830 'This is not a valid directory on your system.' %
834 'This is not a valid directory on your system.' %
831 homedir)
835 homedir)
832 raise HomeDirError(e)
836 raise HomeDirError(e)
833 return homedir
837 return homedir
834 except HomeDirError:
838 except HomeDirError:
835 raise
839 raise
836 except:
840 except:
837 return 'C:\\'
841 return 'C:\\'
838 elif os.name == 'dos':
842 elif os.name == 'dos':
839 # Desperate, may do absurd things in classic MacOS. May work under DOS.
843 # Desperate, may do absurd things in classic MacOS. May work under DOS.
840 return 'C:\\'
844 return 'C:\\'
841 else:
845 else:
842 raise HomeDirError,'support for your operating system not implemented.'
846 raise HomeDirError,'support for your operating system not implemented.'
843
847
844 #****************************************************************************
848 #****************************************************************************
845 # strings and text
849 # strings and text
846
850
847 class LSString(str):
851 class LSString(str):
848 """String derivative with a special access attributes.
852 """String derivative with a special access attributes.
849
853
850 These are normal strings, but with the special attributes:
854 These are normal strings, but with the special attributes:
851
855
852 .l (or .list) : value as list (split on newlines).
856 .l (or .list) : value as list (split on newlines).
853 .n (or .nlstr): original value (the string itself).
857 .n (or .nlstr): original value (the string itself).
854 .s (or .spstr): value as whitespace-separated string.
858 .s (or .spstr): value as whitespace-separated string.
855
859
856 Any values which require transformations are computed only once and
860 Any values which require transformations are computed only once and
857 cached.
861 cached.
858
862
859 Such strings are very useful to efficiently interact with the shell, which
863 Such strings are very useful to efficiently interact with the shell, which
860 typically only understands whitespace-separated options for commands."""
864 typically only understands whitespace-separated options for commands."""
861
865
862 def get_list(self):
866 def get_list(self):
863 try:
867 try:
864 return self.__list
868 return self.__list
865 except AttributeError:
869 except AttributeError:
866 self.__list = self.split('\n')
870 self.__list = self.split('\n')
867 return self.__list
871 return self.__list
868
872
869 l = list = property(get_list)
873 l = list = property(get_list)
870
874
871 def get_spstr(self):
875 def get_spstr(self):
872 try:
876 try:
873 return self.__spstr
877 return self.__spstr
874 except AttributeError:
878 except AttributeError:
875 self.__spstr = self.replace('\n',' ')
879 self.__spstr = self.replace('\n',' ')
876 return self.__spstr
880 return self.__spstr
877
881
878 s = spstr = property(get_spstr)
882 s = spstr = property(get_spstr)
879
883
880 def get_nlstr(self):
884 def get_nlstr(self):
881 return self
885 return self
882
886
883 n = nlstr = property(get_nlstr)
887 n = nlstr = property(get_nlstr)
884
888
885 def get_paths(self):
889 def get_paths(self):
886 try:
890 try:
887 return self.__paths
891 return self.__paths
888 except AttributeError:
892 except AttributeError:
889 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
893 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
890 return self.__paths
894 return self.__paths
891
895
892 p = paths = property(get_paths)
896 p = paths = property(get_paths)
893
897
894
898
895 #----------------------------------------------------------------------------
899 #----------------------------------------------------------------------------
896 class SList(list):
900 class SList(list):
897 """List derivative with a special access attributes.
901 """List derivative with a special access attributes.
898
902
899 These are normal lists, but with the special attributes:
903 These are normal lists, but with the special attributes:
900
904
901 .l (or .list) : value as list (the list itself).
905 .l (or .list) : value as list (the list itself).
902 .n (or .nlstr): value as a string, joined on newlines.
906 .n (or .nlstr): value as a string, joined on newlines.
903 .s (or .spstr): value as a string, joined on spaces.
907 .s (or .spstr): value as a string, joined on spaces.
904
908
905 Any values which require transformations are computed only once and
909 Any values which require transformations are computed only once and
906 cached."""
910 cached."""
907
911
908 def get_list(self):
912 def get_list(self):
909 return self
913 return self
910
914
911 l = list = property(get_list)
915 l = list = property(get_list)
912
916
913 def get_spstr(self):
917 def get_spstr(self):
914 try:
918 try:
915 return self.__spstr
919 return self.__spstr
916 except AttributeError:
920 except AttributeError:
917 self.__spstr = ' '.join(self)
921 self.__spstr = ' '.join(self)
918 return self.__spstr
922 return self.__spstr
919
923
920 s = spstr = property(get_spstr)
924 s = spstr = property(get_spstr)
921
925
922 def get_nlstr(self):
926 def get_nlstr(self):
923 try:
927 try:
924 return self.__nlstr
928 return self.__nlstr
925 except AttributeError:
929 except AttributeError:
926 self.__nlstr = '\n'.join(self)
930 self.__nlstr = '\n'.join(self)
927 return self.__nlstr
931 return self.__nlstr
928
932
929 n = nlstr = property(get_nlstr)
933 n = nlstr = property(get_nlstr)
930
934
931 def get_paths(self):
935 def get_paths(self):
932 try:
936 try:
933 return self.__paths
937 return self.__paths
934 except AttributeError:
938 except AttributeError:
935 self.__paths = [path(p) for p in self if os.path.exists(p)]
939 self.__paths = [path(p) for p in self if os.path.exists(p)]
936 return self.__paths
940 return self.__paths
937
941
938 p = paths = property(get_paths)
942 p = paths = property(get_paths)
939
943
940 #----------------------------------------------------------------------------
944 #----------------------------------------------------------------------------
941 def esc_quotes(strng):
945 def esc_quotes(strng):
942 """Return the input string with single and double quotes escaped out"""
946 """Return the input string with single and double quotes escaped out"""
943
947
944 return strng.replace('"','\\"').replace("'","\\'")
948 return strng.replace('"','\\"').replace("'","\\'")
945
949
946 #----------------------------------------------------------------------------
950 #----------------------------------------------------------------------------
947 def make_quoted_expr(s):
951 def make_quoted_expr(s):
948 """Return string s in appropriate quotes, using raw string if possible.
952 """Return string s in appropriate quotes, using raw string if possible.
949
953
950 Effectively this turns string: cd \ao\ao\
954 Effectively this turns string: cd \ao\ao\
951 to: r"cd \ao\ao\_"[:-1]
955 to: r"cd \ao\ao\_"[:-1]
952
956
953 Note the use of raw string and padding at the end to allow trailing backslash.
957 Note the use of raw string and padding at the end to allow trailing backslash.
954
958
955 """
959 """
956
960
957 tail = ''
961 tail = ''
958 tailpadding = ''
962 tailpadding = ''
959 raw = ''
963 raw = ''
960 if "\\" in s:
964 if "\\" in s:
961 raw = 'r'
965 raw = 'r'
962 if s.endswith('\\'):
966 if s.endswith('\\'):
963 tail = '[:-1]'
967 tail = '[:-1]'
964 tailpadding = '_'
968 tailpadding = '_'
965 if '"' not in s:
969 if '"' not in s:
966 quote = '"'
970 quote = '"'
967 elif "'" not in s:
971 elif "'" not in s:
968 quote = "'"
972 quote = "'"
969 elif '"""' not in s and not s.endswith('"'):
973 elif '"""' not in s and not s.endswith('"'):
970 quote = '"""'
974 quote = '"""'
971 elif "'''" not in s and not s.endswith("'"):
975 elif "'''" not in s and not s.endswith("'"):
972 quote = "'''"
976 quote = "'''"
973 else:
977 else:
974 # give up, backslash-escaped string will do
978 # give up, backslash-escaped string will do
975 return '"%s"' % esc_quotes(s)
979 return '"%s"' % esc_quotes(s)
976 res = itpl("$raw$quote$s$tailpadding$quote$tail")
980 res = itpl("$raw$quote$s$tailpadding$quote$tail")
977 return res
981 return res
978
982
979
983
980 #----------------------------------------------------------------------------
984 #----------------------------------------------------------------------------
981 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
985 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
982 """Take multiple lines of input.
986 """Take multiple lines of input.
983
987
984 A list with each line of input as a separate element is returned when a
988 A list with each line of input as a separate element is returned when a
985 termination string is entered (defaults to a single '.'). Input can also
989 termination string is entered (defaults to a single '.'). Input can also
986 terminate via EOF (^D in Unix, ^Z-RET in Windows).
990 terminate via EOF (^D in Unix, ^Z-RET in Windows).
987
991
988 Lines of input which end in \\ are joined into single entries (and a
992 Lines of input which end in \\ are joined into single entries (and a
989 secondary continuation prompt is issued as long as the user terminates
993 secondary continuation prompt is issued as long as the user terminates
990 lines with \\). This allows entering very long strings which are still
994 lines with \\). This allows entering very long strings which are still
991 meant to be treated as single entities.
995 meant to be treated as single entities.
992 """
996 """
993
997
994 try:
998 try:
995 if header:
999 if header:
996 header += '\n'
1000 header += '\n'
997 lines = [raw_input(header + ps1)]
1001 lines = [raw_input(header + ps1)]
998 except EOFError:
1002 except EOFError:
999 return []
1003 return []
1000 terminate = [terminate_str]
1004 terminate = [terminate_str]
1001 try:
1005 try:
1002 while lines[-1:] != terminate:
1006 while lines[-1:] != terminate:
1003 new_line = raw_input(ps1)
1007 new_line = raw_input(ps1)
1004 while new_line.endswith('\\'):
1008 while new_line.endswith('\\'):
1005 new_line = new_line[:-1] + raw_input(ps2)
1009 new_line = new_line[:-1] + raw_input(ps2)
1006 lines.append(new_line)
1010 lines.append(new_line)
1007
1011
1008 return lines[:-1] # don't return the termination command
1012 return lines[:-1] # don't return the termination command
1009 except EOFError:
1013 except EOFError:
1010 print
1014 print
1011 return lines
1015 return lines
1012
1016
1013 #----------------------------------------------------------------------------
1017 #----------------------------------------------------------------------------
1014 def raw_input_ext(prompt='', ps2='... '):
1018 def raw_input_ext(prompt='', ps2='... '):
1015 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1019 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1016
1020
1017 line = raw_input(prompt)
1021 line = raw_input(prompt)
1018 while line.endswith('\\'):
1022 while line.endswith('\\'):
1019 line = line[:-1] + raw_input(ps2)
1023 line = line[:-1] + raw_input(ps2)
1020 return line
1024 return line
1021
1025
1022 #----------------------------------------------------------------------------
1026 #----------------------------------------------------------------------------
1023 def ask_yes_no(prompt,default=None):
1027 def ask_yes_no(prompt,default=None):
1024 """Asks a question and returns an integer 1/0 (y/n) answer.
1028 """Asks a question and returns an integer 1/0 (y/n) answer.
1025
1029
1026 If default is given (one of 'y','n'), it is used if the user input is
1030 If default is given (one of 'y','n'), it is used if the user input is
1027 empty. Otherwise the question is repeated until an answer is given.
1031 empty. Otherwise the question is repeated until an answer is given.
1028
1032
1029 An EOF is treated as the default answer. If there is no default, an
1033 An EOF is treated as the default answer. If there is no default, an
1030 exception is raised to prevent infinite loops.
1034 exception is raised to prevent infinite loops.
1031
1035
1032 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1036 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1033
1037
1034 answers = {'y':True,'n':False,'yes':True,'no':False}
1038 answers = {'y':True,'n':False,'yes':True,'no':False}
1035 ans = None
1039 ans = None
1036 while ans not in answers.keys():
1040 while ans not in answers.keys():
1037 try:
1041 try:
1038 ans = raw_input(prompt+' ').lower()
1042 ans = raw_input(prompt+' ').lower()
1039 if not ans: # response was an empty string
1043 if not ans: # response was an empty string
1040 ans = default
1044 ans = default
1041 except KeyboardInterrupt:
1045 except KeyboardInterrupt:
1042 pass
1046 pass
1043 except EOFError:
1047 except EOFError:
1044 if default in answers.keys():
1048 if default in answers.keys():
1045 ans = default
1049 ans = default
1046 print
1050 print
1047 else:
1051 else:
1048 raise
1052 raise
1049
1053
1050 return answers[ans]
1054 return answers[ans]
1051
1055
1052 #----------------------------------------------------------------------------
1056 #----------------------------------------------------------------------------
1053 def marquee(txt='',width=78,mark='*'):
1057 def marquee(txt='',width=78,mark='*'):
1054 """Return the input string centered in a 'marquee'."""
1058 """Return the input string centered in a 'marquee'."""
1055 if not txt:
1059 if not txt:
1056 return (mark*width)[:width]
1060 return (mark*width)[:width]
1057 nmark = (width-len(txt)-2)/len(mark)/2
1061 nmark = (width-len(txt)-2)/len(mark)/2
1058 if nmark < 0: nmark =0
1062 if nmark < 0: nmark =0
1059 marks = mark*nmark
1063 marks = mark*nmark
1060 return '%s %s %s' % (marks,txt,marks)
1064 return '%s %s %s' % (marks,txt,marks)
1061
1065
1062 #----------------------------------------------------------------------------
1066 #----------------------------------------------------------------------------
1063 class EvalDict:
1067 class EvalDict:
1064 """
1068 """
1065 Emulate a dict which evaluates its contents in the caller's frame.
1069 Emulate a dict which evaluates its contents in the caller's frame.
1066
1070
1067 Usage:
1071 Usage:
1068 >>>number = 19
1072 >>>number = 19
1069 >>>text = "python"
1073 >>>text = "python"
1070 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1074 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1071 """
1075 """
1072
1076
1073 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1077 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1074 # modified (shorter) version of:
1078 # modified (shorter) version of:
1075 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1079 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1076 # Skip Montanaro (skip@pobox.com).
1080 # Skip Montanaro (skip@pobox.com).
1077
1081
1078 def __getitem__(self, name):
1082 def __getitem__(self, name):
1079 frame = sys._getframe(1)
1083 frame = sys._getframe(1)
1080 return eval(name, frame.f_globals, frame.f_locals)
1084 return eval(name, frame.f_globals, frame.f_locals)
1081
1085
1082 EvalString = EvalDict # for backwards compatibility
1086 EvalString = EvalDict # for backwards compatibility
1083 #----------------------------------------------------------------------------
1087 #----------------------------------------------------------------------------
1084 def qw(words,flat=0,sep=None,maxsplit=-1):
1088 def qw(words,flat=0,sep=None,maxsplit=-1):
1085 """Similar to Perl's qw() operator, but with some more options.
1089 """Similar to Perl's qw() operator, but with some more options.
1086
1090
1087 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1091 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1088
1092
1089 words can also be a list itself, and with flat=1, the output will be
1093 words can also be a list itself, and with flat=1, the output will be
1090 recursively flattened. Examples:
1094 recursively flattened. Examples:
1091
1095
1092 >>> qw('1 2')
1096 >>> qw('1 2')
1093 ['1', '2']
1097 ['1', '2']
1094 >>> qw(['a b','1 2',['m n','p q']])
1098 >>> qw(['a b','1 2',['m n','p q']])
1095 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1099 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1096 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1100 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1097 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1101 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1098
1102
1099 if type(words) in StringTypes:
1103 if type(words) in StringTypes:
1100 return [word.strip() for word in words.split(sep,maxsplit)
1104 return [word.strip() for word in words.split(sep,maxsplit)
1101 if word and not word.isspace() ]
1105 if word and not word.isspace() ]
1102 if flat:
1106 if flat:
1103 return flatten(map(qw,words,[1]*len(words)))
1107 return flatten(map(qw,words,[1]*len(words)))
1104 return map(qw,words)
1108 return map(qw,words)
1105
1109
1106 #----------------------------------------------------------------------------
1110 #----------------------------------------------------------------------------
1107 def qwflat(words,sep=None,maxsplit=-1):
1111 def qwflat(words,sep=None,maxsplit=-1):
1108 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1112 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1109 return qw(words,1,sep,maxsplit)
1113 return qw(words,1,sep,maxsplit)
1110
1114
1111 #----------------------------------------------------------------------------
1115 #----------------------------------------------------------------------------
1112 def qw_lol(indata):
1116 def qw_lol(indata):
1113 """qw_lol('a b') -> [['a','b']],
1117 """qw_lol('a b') -> [['a','b']],
1114 otherwise it's just a call to qw().
1118 otherwise it's just a call to qw().
1115
1119
1116 We need this to make sure the modules_some keys *always* end up as a
1120 We need this to make sure the modules_some keys *always* end up as a
1117 list of lists."""
1121 list of lists."""
1118
1122
1119 if type(indata) in StringTypes:
1123 if type(indata) in StringTypes:
1120 return [qw(indata)]
1124 return [qw(indata)]
1121 else:
1125 else:
1122 return qw(indata)
1126 return qw(indata)
1123
1127
1124 #-----------------------------------------------------------------------------
1128 #-----------------------------------------------------------------------------
1125 def list_strings(arg):
1129 def list_strings(arg):
1126 """Always return a list of strings, given a string or list of strings
1130 """Always return a list of strings, given a string or list of strings
1127 as input."""
1131 as input."""
1128
1132
1129 if type(arg) in StringTypes: return [arg]
1133 if type(arg) in StringTypes: return [arg]
1130 else: return arg
1134 else: return arg
1131
1135
1132 #----------------------------------------------------------------------------
1136 #----------------------------------------------------------------------------
1133 def grep(pat,list,case=1):
1137 def grep(pat,list,case=1):
1134 """Simple minded grep-like function.
1138 """Simple minded grep-like function.
1135 grep(pat,list) returns occurrences of pat in list, None on failure.
1139 grep(pat,list) returns occurrences of pat in list, None on failure.
1136
1140
1137 It only does simple string matching, with no support for regexps. Use the
1141 It only does simple string matching, with no support for regexps. Use the
1138 option case=0 for case-insensitive matching."""
1142 option case=0 for case-insensitive matching."""
1139
1143
1140 # This is pretty crude. At least it should implement copying only references
1144 # This is pretty crude. At least it should implement copying only references
1141 # to the original data in case it's big. Now it copies the data for output.
1145 # to the original data in case it's big. Now it copies the data for output.
1142 out=[]
1146 out=[]
1143 if case:
1147 if case:
1144 for term in list:
1148 for term in list:
1145 if term.find(pat)>-1: out.append(term)
1149 if term.find(pat)>-1: out.append(term)
1146 else:
1150 else:
1147 lpat=pat.lower()
1151 lpat=pat.lower()
1148 for term in list:
1152 for term in list:
1149 if term.lower().find(lpat)>-1: out.append(term)
1153 if term.lower().find(lpat)>-1: out.append(term)
1150
1154
1151 if len(out): return out
1155 if len(out): return out
1152 else: return None
1156 else: return None
1153
1157
1154 #----------------------------------------------------------------------------
1158 #----------------------------------------------------------------------------
1155 def dgrep(pat,*opts):
1159 def dgrep(pat,*opts):
1156 """Return grep() on dir()+dir(__builtins__).
1160 """Return grep() on dir()+dir(__builtins__).
1157
1161
1158 A very common use of grep() when working interactively."""
1162 A very common use of grep() when working interactively."""
1159
1163
1160 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1164 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1161
1165
1162 #----------------------------------------------------------------------------
1166 #----------------------------------------------------------------------------
1163 def idgrep(pat):
1167 def idgrep(pat):
1164 """Case-insensitive dgrep()"""
1168 """Case-insensitive dgrep()"""
1165
1169
1166 return dgrep(pat,0)
1170 return dgrep(pat,0)
1167
1171
1168 #----------------------------------------------------------------------------
1172 #----------------------------------------------------------------------------
1169 def igrep(pat,list):
1173 def igrep(pat,list):
1170 """Synonym for case-insensitive grep."""
1174 """Synonym for case-insensitive grep."""
1171
1175
1172 return grep(pat,list,case=0)
1176 return grep(pat,list,case=0)
1173
1177
1174 #----------------------------------------------------------------------------
1178 #----------------------------------------------------------------------------
1175 def indent(str,nspaces=4,ntabs=0):
1179 def indent(str,nspaces=4,ntabs=0):
1176 """Indent a string a given number of spaces or tabstops.
1180 """Indent a string a given number of spaces or tabstops.
1177
1181
1178 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1182 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1179 """
1183 """
1180 if str is None:
1184 if str is None:
1181 return
1185 return
1182 ind = '\t'*ntabs+' '*nspaces
1186 ind = '\t'*ntabs+' '*nspaces
1183 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1187 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1184 if outstr.endswith(os.linesep+ind):
1188 if outstr.endswith(os.linesep+ind):
1185 return outstr[:-len(ind)]
1189 return outstr[:-len(ind)]
1186 else:
1190 else:
1187 return outstr
1191 return outstr
1188
1192
1189 #-----------------------------------------------------------------------------
1193 #-----------------------------------------------------------------------------
1190 def native_line_ends(filename,backup=1):
1194 def native_line_ends(filename,backup=1):
1191 """Convert (in-place) a file to line-ends native to the current OS.
1195 """Convert (in-place) a file to line-ends native to the current OS.
1192
1196
1193 If the optional backup argument is given as false, no backup of the
1197 If the optional backup argument is given as false, no backup of the
1194 original file is left. """
1198 original file is left. """
1195
1199
1196 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1200 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1197
1201
1198 bak_filename = filename + backup_suffixes[os.name]
1202 bak_filename = filename + backup_suffixes[os.name]
1199
1203
1200 original = open(filename).read()
1204 original = open(filename).read()
1201 shutil.copy2(filename,bak_filename)
1205 shutil.copy2(filename,bak_filename)
1202 try:
1206 try:
1203 new = open(filename,'wb')
1207 new = open(filename,'wb')
1204 new.write(os.linesep.join(original.splitlines()))
1208 new.write(os.linesep.join(original.splitlines()))
1205 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1209 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1206 new.close()
1210 new.close()
1207 except:
1211 except:
1208 os.rename(bak_filename,filename)
1212 os.rename(bak_filename,filename)
1209 if not backup:
1213 if not backup:
1210 try:
1214 try:
1211 os.remove(bak_filename)
1215 os.remove(bak_filename)
1212 except:
1216 except:
1213 pass
1217 pass
1214
1218
1215 #----------------------------------------------------------------------------
1219 #----------------------------------------------------------------------------
1216 def get_pager_cmd(pager_cmd = None):
1220 def get_pager_cmd(pager_cmd = None):
1217 """Return a pager command.
1221 """Return a pager command.
1218
1222
1219 Makes some attempts at finding an OS-correct one."""
1223 Makes some attempts at finding an OS-correct one."""
1220
1224
1221 if os.name == 'posix':
1225 if os.name == 'posix':
1222 default_pager_cmd = 'less -r' # -r for color control sequences
1226 default_pager_cmd = 'less -r' # -r for color control sequences
1223 elif os.name in ['nt','dos']:
1227 elif os.name in ['nt','dos']:
1224 default_pager_cmd = 'type'
1228 default_pager_cmd = 'type'
1225
1229
1226 if pager_cmd is None:
1230 if pager_cmd is None:
1227 try:
1231 try:
1228 pager_cmd = os.environ['PAGER']
1232 pager_cmd = os.environ['PAGER']
1229 except:
1233 except:
1230 pager_cmd = default_pager_cmd
1234 pager_cmd = default_pager_cmd
1231 return pager_cmd
1235 return pager_cmd
1232
1236
1233 #-----------------------------------------------------------------------------
1237 #-----------------------------------------------------------------------------
1234 def get_pager_start(pager,start):
1238 def get_pager_start(pager,start):
1235 """Return the string for paging files with an offset.
1239 """Return the string for paging files with an offset.
1236
1240
1237 This is the '+N' argument which less and more (under Unix) accept.
1241 This is the '+N' argument which less and more (under Unix) accept.
1238 """
1242 """
1239
1243
1240 if pager in ['less','more']:
1244 if pager in ['less','more']:
1241 if start:
1245 if start:
1242 start_string = '+' + str(start)
1246 start_string = '+' + str(start)
1243 else:
1247 else:
1244 start_string = ''
1248 start_string = ''
1245 else:
1249 else:
1246 start_string = ''
1250 start_string = ''
1247 return start_string
1251 return start_string
1248
1252
1249 #----------------------------------------------------------------------------
1253 #----------------------------------------------------------------------------
1250 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1254 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1251 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1255 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1252 import msvcrt
1256 import msvcrt
1253 def page_more():
1257 def page_more():
1254 """ Smart pausing between pages
1258 """ Smart pausing between pages
1255
1259
1256 @return: True if need print more lines, False if quit
1260 @return: True if need print more lines, False if quit
1257 """
1261 """
1258 Term.cout.write('---Return to continue, q to quit--- ')
1262 Term.cout.write('---Return to continue, q to quit--- ')
1259 ans = msvcrt.getch()
1263 ans = msvcrt.getch()
1260 if ans in ("q", "Q"):
1264 if ans in ("q", "Q"):
1261 result = False
1265 result = False
1262 else:
1266 else:
1263 result = True
1267 result = True
1264 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1268 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1265 return result
1269 return result
1266 else:
1270 else:
1267 def page_more():
1271 def page_more():
1268 ans = raw_input('---Return to continue, q to quit--- ')
1272 ans = raw_input('---Return to continue, q to quit--- ')
1269 if ans.lower().startswith('q'):
1273 if ans.lower().startswith('q'):
1270 return False
1274 return False
1271 else:
1275 else:
1272 return True
1276 return True
1273
1277
1274 esc_re = re.compile(r"(\x1b[^m]+m)")
1278 esc_re = re.compile(r"(\x1b[^m]+m)")
1275
1279
1276 def page_dumb(strng,start=0,screen_lines=25):
1280 def page_dumb(strng,start=0,screen_lines=25):
1277 """Very dumb 'pager' in Python, for when nothing else works.
1281 """Very dumb 'pager' in Python, for when nothing else works.
1278
1282
1279 Only moves forward, same interface as page(), except for pager_cmd and
1283 Only moves forward, same interface as page(), except for pager_cmd and
1280 mode."""
1284 mode."""
1281
1285
1282 out_ln = strng.splitlines()[start:]
1286 out_ln = strng.splitlines()[start:]
1283 screens = chop(out_ln,screen_lines-1)
1287 screens = chop(out_ln,screen_lines-1)
1284 if len(screens) == 1:
1288 if len(screens) == 1:
1285 print >>Term.cout, os.linesep.join(screens[0])
1289 print >>Term.cout, os.linesep.join(screens[0])
1286 else:
1290 else:
1287 last_escape = ""
1291 last_escape = ""
1288 for scr in screens[0:-1]:
1292 for scr in screens[0:-1]:
1289 hunk = os.linesep.join(scr)
1293 hunk = os.linesep.join(scr)
1290 print >>Term.cout, last_escape + hunk
1294 print >>Term.cout, last_escape + hunk
1291 if not page_more():
1295 if not page_more():
1292 return
1296 return
1293 esc_list = esc_re.findall(hunk)
1297 esc_list = esc_re.findall(hunk)
1294 if len(esc_list) > 0:
1298 if len(esc_list) > 0:
1295 last_escape = esc_list[-1]
1299 last_escape = esc_list[-1]
1296 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1300 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1297
1301
1298 #----------------------------------------------------------------------------
1302 #----------------------------------------------------------------------------
1299 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1303 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1300 """Print a string, piping through a pager after a certain length.
1304 """Print a string, piping through a pager after a certain length.
1301
1305
1302 The screen_lines parameter specifies the number of *usable* lines of your
1306 The screen_lines parameter specifies the number of *usable* lines of your
1303 terminal screen (total lines minus lines you need to reserve to show other
1307 terminal screen (total lines minus lines you need to reserve to show other
1304 information).
1308 information).
1305
1309
1306 If you set screen_lines to a number <=0, page() will try to auto-determine
1310 If you set screen_lines to a number <=0, page() will try to auto-determine
1307 your screen size and will only use up to (screen_size+screen_lines) for
1311 your screen size and will only use up to (screen_size+screen_lines) for
1308 printing, paging after that. That is, if you want auto-detection but need
1312 printing, paging after that. That is, if you want auto-detection but need
1309 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1313 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1310 auto-detection without any lines reserved simply use screen_lines = 0.
1314 auto-detection without any lines reserved simply use screen_lines = 0.
1311
1315
1312 If a string won't fit in the allowed lines, it is sent through the
1316 If a string won't fit in the allowed lines, it is sent through the
1313 specified pager command. If none given, look for PAGER in the environment,
1317 specified pager command. If none given, look for PAGER in the environment,
1314 and ultimately default to less.
1318 and ultimately default to less.
1315
1319
1316 If no system pager works, the string is sent through a 'dumb pager'
1320 If no system pager works, the string is sent through a 'dumb pager'
1317 written in python, very simplistic.
1321 written in python, very simplistic.
1318 """
1322 """
1319
1323
1320 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1324 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1321 TERM = os.environ.get('TERM','dumb')
1325 TERM = os.environ.get('TERM','dumb')
1322 if TERM in ['dumb','emacs'] and os.name != 'nt':
1326 if TERM in ['dumb','emacs'] and os.name != 'nt':
1323 print strng
1327 print strng
1324 return
1328 return
1325 # chop off the topmost part of the string we don't want to see
1329 # chop off the topmost part of the string we don't want to see
1326 str_lines = strng.split(os.linesep)[start:]
1330 str_lines = strng.split(os.linesep)[start:]
1327 str_toprint = os.linesep.join(str_lines)
1331 str_toprint = os.linesep.join(str_lines)
1328 num_newlines = len(str_lines)
1332 num_newlines = len(str_lines)
1329 len_str = len(str_toprint)
1333 len_str = len(str_toprint)
1330
1334
1331 # Dumb heuristics to guesstimate number of on-screen lines the string
1335 # Dumb heuristics to guesstimate number of on-screen lines the string
1332 # takes. Very basic, but good enough for docstrings in reasonable
1336 # takes. Very basic, but good enough for docstrings in reasonable
1333 # terminals. If someone later feels like refining it, it's not hard.
1337 # terminals. If someone later feels like refining it, it's not hard.
1334 numlines = max(num_newlines,int(len_str/80)+1)
1338 numlines = max(num_newlines,int(len_str/80)+1)
1335
1339
1336 if os.name == "nt":
1340 if os.name == "nt":
1337 screen_lines_def = get_console_size(defaulty=25)[1]
1341 screen_lines_def = get_console_size(defaulty=25)[1]
1338 else:
1342 else:
1339 screen_lines_def = 25 # default value if we can't auto-determine
1343 screen_lines_def = 25 # default value if we can't auto-determine
1340
1344
1341 # auto-determine screen size
1345 # auto-determine screen size
1342 if screen_lines <= 0:
1346 if screen_lines <= 0:
1343 if TERM=='xterm':
1347 if TERM=='xterm':
1344 try:
1348 try:
1345 import curses
1349 import curses
1346 if hasattr(curses,'initscr'):
1350 if hasattr(curses,'initscr'):
1347 use_curses = 1
1351 use_curses = 1
1348 else:
1352 else:
1349 use_curses = 0
1353 use_curses = 0
1350 except ImportError:
1354 except ImportError:
1351 use_curses = 0
1355 use_curses = 0
1352 else:
1356 else:
1353 # curses causes problems on many terminals other than xterm.
1357 # curses causes problems on many terminals other than xterm.
1354 use_curses = 0
1358 use_curses = 0
1355 if use_curses:
1359 if use_curses:
1356 scr = curses.initscr()
1360 scr = curses.initscr()
1357 screen_lines_real,screen_cols = scr.getmaxyx()
1361 screen_lines_real,screen_cols = scr.getmaxyx()
1358 curses.endwin()
1362 curses.endwin()
1359 screen_lines += screen_lines_real
1363 screen_lines += screen_lines_real
1360 #print '***Screen size:',screen_lines_real,'lines x',\
1364 #print '***Screen size:',screen_lines_real,'lines x',\
1361 #screen_cols,'columns.' # dbg
1365 #screen_cols,'columns.' # dbg
1362 else:
1366 else:
1363 screen_lines += screen_lines_def
1367 screen_lines += screen_lines_def
1364
1368
1365 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1369 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1366 if numlines <= screen_lines :
1370 if numlines <= screen_lines :
1367 #print '*** normal print' # dbg
1371 #print '*** normal print' # dbg
1368 print >>Term.cout, str_toprint
1372 print >>Term.cout, str_toprint
1369 else:
1373 else:
1370 # Try to open pager and default to internal one if that fails.
1374 # Try to open pager and default to internal one if that fails.
1371 # All failure modes are tagged as 'retval=1', to match the return
1375 # All failure modes are tagged as 'retval=1', to match the return
1372 # value of a failed system command. If any intermediate attempt
1376 # value of a failed system command. If any intermediate attempt
1373 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1377 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1374 pager_cmd = get_pager_cmd(pager_cmd)
1378 pager_cmd = get_pager_cmd(pager_cmd)
1375 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1379 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1376 if os.name == 'nt':
1380 if os.name == 'nt':
1377 if pager_cmd.startswith('type'):
1381 if pager_cmd.startswith('type'):
1378 # The default WinXP 'type' command is failing on complex strings.
1382 # The default WinXP 'type' command is failing on complex strings.
1379 retval = 1
1383 retval = 1
1380 else:
1384 else:
1381 tmpname = tempfile.mktemp('.txt')
1385 tmpname = tempfile.mktemp('.txt')
1382 tmpfile = file(tmpname,'wt')
1386 tmpfile = file(tmpname,'wt')
1383 tmpfile.write(strng)
1387 tmpfile.write(strng)
1384 tmpfile.close()
1388 tmpfile.close()
1385 cmd = "%s < %s" % (pager_cmd,tmpname)
1389 cmd = "%s < %s" % (pager_cmd,tmpname)
1386 if os.system(cmd):
1390 if os.system(cmd):
1387 retval = 1
1391 retval = 1
1388 else:
1392 else:
1389 retval = None
1393 retval = None
1390 os.remove(tmpname)
1394 os.remove(tmpname)
1391 else:
1395 else:
1392 try:
1396 try:
1393 retval = None
1397 retval = None
1394 # if I use popen4, things hang. No idea why.
1398 # if I use popen4, things hang. No idea why.
1395 #pager,shell_out = os.popen4(pager_cmd)
1399 #pager,shell_out = os.popen4(pager_cmd)
1396 pager = os.popen(pager_cmd,'w')
1400 pager = os.popen(pager_cmd,'w')
1397 pager.write(strng)
1401 pager.write(strng)
1398 pager.close()
1402 pager.close()
1399 retval = pager.close() # success returns None
1403 retval = pager.close() # success returns None
1400 except IOError,msg: # broken pipe when user quits
1404 except IOError,msg: # broken pipe when user quits
1401 if msg.args == (32,'Broken pipe'):
1405 if msg.args == (32,'Broken pipe'):
1402 retval = None
1406 retval = None
1403 else:
1407 else:
1404 retval = 1
1408 retval = 1
1405 except OSError:
1409 except OSError:
1406 # Other strange problems, sometimes seen in Win2k/cygwin
1410 # Other strange problems, sometimes seen in Win2k/cygwin
1407 retval = 1
1411 retval = 1
1408 if retval is not None:
1412 if retval is not None:
1409 page_dumb(strng,screen_lines=screen_lines)
1413 page_dumb(strng,screen_lines=screen_lines)
1410
1414
1411 #----------------------------------------------------------------------------
1415 #----------------------------------------------------------------------------
1412 def page_file(fname,start = 0, pager_cmd = None):
1416 def page_file(fname,start = 0, pager_cmd = None):
1413 """Page a file, using an optional pager command and starting line.
1417 """Page a file, using an optional pager command and starting line.
1414 """
1418 """
1415
1419
1416 pager_cmd = get_pager_cmd(pager_cmd)
1420 pager_cmd = get_pager_cmd(pager_cmd)
1417 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1421 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1418
1422
1419 try:
1423 try:
1420 if os.environ['TERM'] in ['emacs','dumb']:
1424 if os.environ['TERM'] in ['emacs','dumb']:
1421 raise EnvironmentError
1425 raise EnvironmentError
1422 xsys(pager_cmd + ' ' + fname)
1426 xsys(pager_cmd + ' ' + fname)
1423 except:
1427 except:
1424 try:
1428 try:
1425 if start > 0:
1429 if start > 0:
1426 start -= 1
1430 start -= 1
1427 page(open(fname).read(),start)
1431 page(open(fname).read(),start)
1428 except:
1432 except:
1429 print 'Unable to show file',`fname`
1433 print 'Unable to show file',`fname`
1430
1434
1431 #----------------------------------------------------------------------------
1435 #----------------------------------------------------------------------------
1432 def snip_print(str,width = 75,print_full = 0,header = ''):
1436 def snip_print(str,width = 75,print_full = 0,header = ''):
1433 """Print a string snipping the midsection to fit in width.
1437 """Print a string snipping the midsection to fit in width.
1434
1438
1435 print_full: mode control:
1439 print_full: mode control:
1436 - 0: only snip long strings
1440 - 0: only snip long strings
1437 - 1: send to page() directly.
1441 - 1: send to page() directly.
1438 - 2: snip long strings and ask for full length viewing with page()
1442 - 2: snip long strings and ask for full length viewing with page()
1439 Return 1 if snipping was necessary, 0 otherwise."""
1443 Return 1 if snipping was necessary, 0 otherwise."""
1440
1444
1441 if print_full == 1:
1445 if print_full == 1:
1442 page(header+str)
1446 page(header+str)
1443 return 0
1447 return 0
1444
1448
1445 print header,
1449 print header,
1446 if len(str) < width:
1450 if len(str) < width:
1447 print str
1451 print str
1448 snip = 0
1452 snip = 0
1449 else:
1453 else:
1450 whalf = int((width -5)/2)
1454 whalf = int((width -5)/2)
1451 print str[:whalf] + ' <...> ' + str[-whalf:]
1455 print str[:whalf] + ' <...> ' + str[-whalf:]
1452 snip = 1
1456 snip = 1
1453 if snip and print_full == 2:
1457 if snip and print_full == 2:
1454 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1458 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1455 page(str)
1459 page(str)
1456 return snip
1460 return snip
1457
1461
1458 #****************************************************************************
1462 #****************************************************************************
1459 # lists, dicts and structures
1463 # lists, dicts and structures
1460
1464
1461 def belong(candidates,checklist):
1465 def belong(candidates,checklist):
1462 """Check whether a list of items appear in a given list of options.
1466 """Check whether a list of items appear in a given list of options.
1463
1467
1464 Returns a list of 1 and 0, one for each candidate given."""
1468 Returns a list of 1 and 0, one for each candidate given."""
1465
1469
1466 return [x in checklist for x in candidates]
1470 return [x in checklist for x in candidates]
1467
1471
1468 #----------------------------------------------------------------------------
1472 #----------------------------------------------------------------------------
1469 def uniq_stable(elems):
1473 def uniq_stable(elems):
1470 """uniq_stable(elems) -> list
1474 """uniq_stable(elems) -> list
1471
1475
1472 Return from an iterable, a list of all the unique elements in the input,
1476 Return from an iterable, a list of all the unique elements in the input,
1473 but maintaining the order in which they first appear.
1477 but maintaining the order in which they first appear.
1474
1478
1475 A naive solution to this problem which just makes a dictionary with the
1479 A naive solution to this problem which just makes a dictionary with the
1476 elements as keys fails to respect the stability condition, since
1480 elements as keys fails to respect the stability condition, since
1477 dictionaries are unsorted by nature.
1481 dictionaries are unsorted by nature.
1478
1482
1479 Note: All elements in the input must be valid dictionary keys for this
1483 Note: All elements in the input must be valid dictionary keys for this
1480 routine to work, as it internally uses a dictionary for efficiency
1484 routine to work, as it internally uses a dictionary for efficiency
1481 reasons."""
1485 reasons."""
1482
1486
1483 unique = []
1487 unique = []
1484 unique_dict = {}
1488 unique_dict = {}
1485 for nn in elems:
1489 for nn in elems:
1486 if nn not in unique_dict:
1490 if nn not in unique_dict:
1487 unique.append(nn)
1491 unique.append(nn)
1488 unique_dict[nn] = None
1492 unique_dict[nn] = None
1489 return unique
1493 return unique
1490
1494
1491 #----------------------------------------------------------------------------
1495 #----------------------------------------------------------------------------
1492 class NLprinter:
1496 class NLprinter:
1493 """Print an arbitrarily nested list, indicating index numbers.
1497 """Print an arbitrarily nested list, indicating index numbers.
1494
1498
1495 An instance of this class called nlprint is available and callable as a
1499 An instance of this class called nlprint is available and callable as a
1496 function.
1500 function.
1497
1501
1498 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1502 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1499 and using 'sep' to separate the index from the value. """
1503 and using 'sep' to separate the index from the value. """
1500
1504
1501 def __init__(self):
1505 def __init__(self):
1502 self.depth = 0
1506 self.depth = 0
1503
1507
1504 def __call__(self,lst,pos='',**kw):
1508 def __call__(self,lst,pos='',**kw):
1505 """Prints the nested list numbering levels."""
1509 """Prints the nested list numbering levels."""
1506 kw.setdefault('indent',' ')
1510 kw.setdefault('indent',' ')
1507 kw.setdefault('sep',': ')
1511 kw.setdefault('sep',': ')
1508 kw.setdefault('start',0)
1512 kw.setdefault('start',0)
1509 kw.setdefault('stop',len(lst))
1513 kw.setdefault('stop',len(lst))
1510 # we need to remove start and stop from kw so they don't propagate
1514 # we need to remove start and stop from kw so they don't propagate
1511 # into a recursive call for a nested list.
1515 # into a recursive call for a nested list.
1512 start = kw['start']; del kw['start']
1516 start = kw['start']; del kw['start']
1513 stop = kw['stop']; del kw['stop']
1517 stop = kw['stop']; del kw['stop']
1514 if self.depth == 0 and 'header' in kw.keys():
1518 if self.depth == 0 and 'header' in kw.keys():
1515 print kw['header']
1519 print kw['header']
1516
1520
1517 for idx in range(start,stop):
1521 for idx in range(start,stop):
1518 elem = lst[idx]
1522 elem = lst[idx]
1519 if type(elem)==type([]):
1523 if type(elem)==type([]):
1520 self.depth += 1
1524 self.depth += 1
1521 self.__call__(elem,itpl('$pos$idx,'),**kw)
1525 self.__call__(elem,itpl('$pos$idx,'),**kw)
1522 self.depth -= 1
1526 self.depth -= 1
1523 else:
1527 else:
1524 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1528 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1525
1529
1526 nlprint = NLprinter()
1530 nlprint = NLprinter()
1527 #----------------------------------------------------------------------------
1531 #----------------------------------------------------------------------------
1528 def all_belong(candidates,checklist):
1532 def all_belong(candidates,checklist):
1529 """Check whether a list of items ALL appear in a given list of options.
1533 """Check whether a list of items ALL appear in a given list of options.
1530
1534
1531 Returns a single 1 or 0 value."""
1535 Returns a single 1 or 0 value."""
1532
1536
1533 return 1-(0 in [x in checklist for x in candidates])
1537 return 1-(0 in [x in checklist for x in candidates])
1534
1538
1535 #----------------------------------------------------------------------------
1539 #----------------------------------------------------------------------------
1536 def sort_compare(lst1,lst2,inplace = 1):
1540 def sort_compare(lst1,lst2,inplace = 1):
1537 """Sort and compare two lists.
1541 """Sort and compare two lists.
1538
1542
1539 By default it does it in place, thus modifying the lists. Use inplace = 0
1543 By default it does it in place, thus modifying the lists. Use inplace = 0
1540 to avoid that (at the cost of temporary copy creation)."""
1544 to avoid that (at the cost of temporary copy creation)."""
1541 if not inplace:
1545 if not inplace:
1542 lst1 = lst1[:]
1546 lst1 = lst1[:]
1543 lst2 = lst2[:]
1547 lst2 = lst2[:]
1544 lst1.sort(); lst2.sort()
1548 lst1.sort(); lst2.sort()
1545 return lst1 == lst2
1549 return lst1 == lst2
1546
1550
1547 #----------------------------------------------------------------------------
1551 #----------------------------------------------------------------------------
1548 def mkdict(**kwargs):
1552 def mkdict(**kwargs):
1549 """Return a dict from a keyword list.
1553 """Return a dict from a keyword list.
1550
1554
1551 It's just syntactic sugar for making ditcionary creation more convenient:
1555 It's just syntactic sugar for making ditcionary creation more convenient:
1552 # the standard way
1556 # the standard way
1553 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1557 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1554 # a cleaner way
1558 # a cleaner way
1555 >>>data = dict(red=1, green=2, blue=3)
1559 >>>data = dict(red=1, green=2, blue=3)
1556
1560
1557 If you need more than this, look at the Struct() class."""
1561 If you need more than this, look at the Struct() class."""
1558
1562
1559 return kwargs
1563 return kwargs
1560
1564
1561 #----------------------------------------------------------------------------
1565 #----------------------------------------------------------------------------
1562 def list2dict(lst):
1566 def list2dict(lst):
1563 """Takes a list of (key,value) pairs and turns it into a dict."""
1567 """Takes a list of (key,value) pairs and turns it into a dict."""
1564
1568
1565 dic = {}
1569 dic = {}
1566 for k,v in lst: dic[k] = v
1570 for k,v in lst: dic[k] = v
1567 return dic
1571 return dic
1568
1572
1569 #----------------------------------------------------------------------------
1573 #----------------------------------------------------------------------------
1570 def list2dict2(lst,default=''):
1574 def list2dict2(lst,default=''):
1571 """Takes a list and turns it into a dict.
1575 """Takes a list and turns it into a dict.
1572 Much slower than list2dict, but more versatile. This version can take
1576 Much slower than list2dict, but more versatile. This version can take
1573 lists with sublists of arbitrary length (including sclars)."""
1577 lists with sublists of arbitrary length (including sclars)."""
1574
1578
1575 dic = {}
1579 dic = {}
1576 for elem in lst:
1580 for elem in lst:
1577 if type(elem) in (types.ListType,types.TupleType):
1581 if type(elem) in (types.ListType,types.TupleType):
1578 size = len(elem)
1582 size = len(elem)
1579 if size == 0:
1583 if size == 0:
1580 pass
1584 pass
1581 elif size == 1:
1585 elif size == 1:
1582 dic[elem] = default
1586 dic[elem] = default
1583 else:
1587 else:
1584 k,v = elem[0], elem[1:]
1588 k,v = elem[0], elem[1:]
1585 if len(v) == 1: v = v[0]
1589 if len(v) == 1: v = v[0]
1586 dic[k] = v
1590 dic[k] = v
1587 else:
1591 else:
1588 dic[elem] = default
1592 dic[elem] = default
1589 return dic
1593 return dic
1590
1594
1591 #----------------------------------------------------------------------------
1595 #----------------------------------------------------------------------------
1592 def flatten(seq):
1596 def flatten(seq):
1593 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1597 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1594
1598
1595 return [x for subseq in seq for x in subseq]
1599 return [x for subseq in seq for x in subseq]
1596
1600
1597 #----------------------------------------------------------------------------
1601 #----------------------------------------------------------------------------
1598 def get_slice(seq,start=0,stop=None,step=1):
1602 def get_slice(seq,start=0,stop=None,step=1):
1599 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1603 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1600 if stop == None:
1604 if stop == None:
1601 stop = len(seq)
1605 stop = len(seq)
1602 item = lambda i: seq[i]
1606 item = lambda i: seq[i]
1603 return map(item,xrange(start,stop,step))
1607 return map(item,xrange(start,stop,step))
1604
1608
1605 #----------------------------------------------------------------------------
1609 #----------------------------------------------------------------------------
1606 def chop(seq,size):
1610 def chop(seq,size):
1607 """Chop a sequence into chunks of the given size."""
1611 """Chop a sequence into chunks of the given size."""
1608 chunk = lambda i: seq[i:i+size]
1612 chunk = lambda i: seq[i:i+size]
1609 return map(chunk,xrange(0,len(seq),size))
1613 return map(chunk,xrange(0,len(seq),size))
1610
1614
1611 #----------------------------------------------------------------------------
1615 #----------------------------------------------------------------------------
1612 # with is a keyword as of python 2.5, so this function is renamed to withobj
1616 # with is a keyword as of python 2.5, so this function is renamed to withobj
1613 # from its old 'with' name.
1617 # from its old 'with' name.
1614 def with_obj(object, **args):
1618 def with_obj(object, **args):
1615 """Set multiple attributes for an object, similar to Pascal's with.
1619 """Set multiple attributes for an object, similar to Pascal's with.
1616
1620
1617 Example:
1621 Example:
1618 with_obj(jim,
1622 with_obj(jim,
1619 born = 1960,
1623 born = 1960,
1620 haircolour = 'Brown',
1624 haircolour = 'Brown',
1621 eyecolour = 'Green')
1625 eyecolour = 'Green')
1622
1626
1623 Credit: Greg Ewing, in
1627 Credit: Greg Ewing, in
1624 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1628 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1625
1629
1626 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1630 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1627 has become a keyword for Python 2.5, so we had to rename it."""
1631 has become a keyword for Python 2.5, so we had to rename it."""
1628
1632
1629 object.__dict__.update(args)
1633 object.__dict__.update(args)
1630
1634
1631 #----------------------------------------------------------------------------
1635 #----------------------------------------------------------------------------
1632 def setattr_list(obj,alist,nspace = None):
1636 def setattr_list(obj,alist,nspace = None):
1633 """Set a list of attributes for an object taken from a namespace.
1637 """Set a list of attributes for an object taken from a namespace.
1634
1638
1635 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1639 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1636 alist with their values taken from nspace, which must be a dict (something
1640 alist with their values taken from nspace, which must be a dict (something
1637 like locals() will often do) If nspace isn't given, locals() of the
1641 like locals() will often do) If nspace isn't given, locals() of the
1638 *caller* is used, so in most cases you can omit it.
1642 *caller* is used, so in most cases you can omit it.
1639
1643
1640 Note that alist can be given as a string, which will be automatically
1644 Note that alist can be given as a string, which will be automatically
1641 split into a list on whitespace. If given as a list, it must be a list of
1645 split into a list on whitespace. If given as a list, it must be a list of
1642 *strings* (the variable names themselves), not of variables."""
1646 *strings* (the variable names themselves), not of variables."""
1643
1647
1644 # this grabs the local variables from the *previous* call frame -- that is
1648 # this grabs the local variables from the *previous* call frame -- that is
1645 # the locals from the function that called setattr_list().
1649 # the locals from the function that called setattr_list().
1646 # - snipped from weave.inline()
1650 # - snipped from weave.inline()
1647 if nspace is None:
1651 if nspace is None:
1648 call_frame = sys._getframe().f_back
1652 call_frame = sys._getframe().f_back
1649 nspace = call_frame.f_locals
1653 nspace = call_frame.f_locals
1650
1654
1651 if type(alist) in StringTypes:
1655 if type(alist) in StringTypes:
1652 alist = alist.split()
1656 alist = alist.split()
1653 for attr in alist:
1657 for attr in alist:
1654 val = eval(attr,nspace)
1658 val = eval(attr,nspace)
1655 setattr(obj,attr,val)
1659 setattr(obj,attr,val)
1656
1660
1657 #----------------------------------------------------------------------------
1661 #----------------------------------------------------------------------------
1658 def getattr_list(obj,alist,*args):
1662 def getattr_list(obj,alist,*args):
1659 """getattr_list(obj,alist[, default]) -> attribute list.
1663 """getattr_list(obj,alist[, default]) -> attribute list.
1660
1664
1661 Get a list of named attributes for an object. When a default argument is
1665 Get a list of named attributes for an object. When a default argument is
1662 given, it is returned when the attribute doesn't exist; without it, an
1666 given, it is returned when the attribute doesn't exist; without it, an
1663 exception is raised in that case.
1667 exception is raised in that case.
1664
1668
1665 Note that alist can be given as a string, which will be automatically
1669 Note that alist can be given as a string, which will be automatically
1666 split into a list on whitespace. If given as a list, it must be a list of
1670 split into a list on whitespace. If given as a list, it must be a list of
1667 *strings* (the variable names themselves), not of variables."""
1671 *strings* (the variable names themselves), not of variables."""
1668
1672
1669 if type(alist) in StringTypes:
1673 if type(alist) in StringTypes:
1670 alist = alist.split()
1674 alist = alist.split()
1671 if args:
1675 if args:
1672 if len(args)==1:
1676 if len(args)==1:
1673 default = args[0]
1677 default = args[0]
1674 return map(lambda attr: getattr(obj,attr,default),alist)
1678 return map(lambda attr: getattr(obj,attr,default),alist)
1675 else:
1679 else:
1676 raise ValueError,'getattr_list() takes only one optional argument'
1680 raise ValueError,'getattr_list() takes only one optional argument'
1677 else:
1681 else:
1678 return map(lambda attr: getattr(obj,attr),alist)
1682 return map(lambda attr: getattr(obj,attr),alist)
1679
1683
1680 #----------------------------------------------------------------------------
1684 #----------------------------------------------------------------------------
1681 def map_method(method,object_list,*argseq,**kw):
1685 def map_method(method,object_list,*argseq,**kw):
1682 """map_method(method,object_list,*args,**kw) -> list
1686 """map_method(method,object_list,*args,**kw) -> list
1683
1687
1684 Return a list of the results of applying the methods to the items of the
1688 Return a list of the results of applying the methods to the items of the
1685 argument sequence(s). If more than one sequence is given, the method is
1689 argument sequence(s). If more than one sequence is given, the method is
1686 called with an argument list consisting of the corresponding item of each
1690 called with an argument list consisting of the corresponding item of each
1687 sequence. All sequences must be of the same length.
1691 sequence. All sequences must be of the same length.
1688
1692
1689 Keyword arguments are passed verbatim to all objects called.
1693 Keyword arguments are passed verbatim to all objects called.
1690
1694
1691 This is Python code, so it's not nearly as fast as the builtin map()."""
1695 This is Python code, so it's not nearly as fast as the builtin map()."""
1692
1696
1693 out_list = []
1697 out_list = []
1694 idx = 0
1698 idx = 0
1695 for object in object_list:
1699 for object in object_list:
1696 try:
1700 try:
1697 handler = getattr(object, method)
1701 handler = getattr(object, method)
1698 except AttributeError:
1702 except AttributeError:
1699 out_list.append(None)
1703 out_list.append(None)
1700 else:
1704 else:
1701 if argseq:
1705 if argseq:
1702 args = map(lambda lst:lst[idx],argseq)
1706 args = map(lambda lst:lst[idx],argseq)
1703 #print 'ob',object,'hand',handler,'ar',args # dbg
1707 #print 'ob',object,'hand',handler,'ar',args # dbg
1704 out_list.append(handler(args,**kw))
1708 out_list.append(handler(args,**kw))
1705 else:
1709 else:
1706 out_list.append(handler(**kw))
1710 out_list.append(handler(**kw))
1707 idx += 1
1711 idx += 1
1708 return out_list
1712 return out_list
1709
1713
1710 #----------------------------------------------------------------------------
1714 #----------------------------------------------------------------------------
1711 def import_fail_info(mod_name,fns=None):
1715 def import_fail_info(mod_name,fns=None):
1712 """Inform load failure for a module."""
1716 """Inform load failure for a module."""
1713
1717
1714 if fns == None:
1718 if fns == None:
1715 warn("Loading of %s failed.\n" % (mod_name,))
1719 warn("Loading of %s failed.\n" % (mod_name,))
1716 else:
1720 else:
1717 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1721 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1718
1722
1719 #----------------------------------------------------------------------------
1723 #----------------------------------------------------------------------------
1720 # Proposed popitem() extension, written as a method
1724 # Proposed popitem() extension, written as a method
1721
1725
1722
1726
1723 class NotGiven: pass
1727 class NotGiven: pass
1724
1728
1725 def popkey(dct,key,default=NotGiven):
1729 def popkey(dct,key,default=NotGiven):
1726 """Return dct[key] and delete dct[key].
1730 """Return dct[key] and delete dct[key].
1727
1731
1728 If default is given, return it if dct[key] doesn't exist, otherwise raise
1732 If default is given, return it if dct[key] doesn't exist, otherwise raise
1729 KeyError. """
1733 KeyError. """
1730
1734
1731 try:
1735 try:
1732 val = dct[key]
1736 val = dct[key]
1733 except KeyError:
1737 except KeyError:
1734 if default is NotGiven:
1738 if default is NotGiven:
1735 raise
1739 raise
1736 else:
1740 else:
1737 return default
1741 return default
1738 else:
1742 else:
1739 del dct[key]
1743 del dct[key]
1740 return val
1744 return val
1741
1745
1742 def wrap_deprecated(func, suggest = '<nothing>'):
1746 def wrap_deprecated(func, suggest = '<nothing>'):
1743 def newFunc(*args, **kwargs):
1747 def newFunc(*args, **kwargs):
1744 warnings.warn("Call to deprecated function %s, use %s instead" %
1748 warnings.warn("Call to deprecated function %s, use %s instead" %
1745 ( func.__name__, suggest),
1749 ( func.__name__, suggest),
1746 category=DeprecationWarning,
1750 category=DeprecationWarning,
1747 stacklevel = 2)
1751 stacklevel = 2)
1748 return func(*args, **kwargs)
1752 return func(*args, **kwargs)
1749 return newFunc
1753 return newFunc
1750
1754
1751 #*************************** end of file <genutils.py> **********************
1755 #*************************** end of file <genutils.py> **********************
1752
1756
@@ -1,6336 +1,6343 b''
1 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
1 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
2
2
3 * IPython/genutils.py (IOStream.close): small patch by
4 R. Bernstein for improved pydb support.
5
6 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
7 DaveS <davls@telus.net> to improve support of debugging under
8 NTEmacs, including improved pydb behavior.
9
3 * IPython/Magic.py (magic_prun): Fix saving of profile info for
10 * IPython/Magic.py (magic_prun): Fix saving of profile info for
4 Python 2.5, where the stats object API changed a little. Thanks
11 Python 2.5, where the stats object API changed a little. Thanks
5 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
12 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
6
13
7 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
14 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
8 Pernetty's patch to improve support for (X)Emacs under Win32.
15 Pernetty's patch to improve support for (X)Emacs under Win32.
9
16
10 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
17 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
11
18
12 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
19 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
13 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
20 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
14 a report by Nik Tautenhahn.
21 a report by Nik Tautenhahn.
15
22
16 2007-03-16 Walter Doerwald <walter@livinglogic.de>
23 2007-03-16 Walter Doerwald <walter@livinglogic.de>
17
24
18 * setup.py: Add the igrid help files to the list of data files
25 * setup.py: Add the igrid help files to the list of data files
19 to be installed alongside igrid.
26 to be installed alongside igrid.
20 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
27 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
21 Show the input object of the igrid browser as the window tile.
28 Show the input object of the igrid browser as the window tile.
22 Show the object the cursor is on in the statusbar.
29 Show the object the cursor is on in the statusbar.
23
30
24 2007-03-15 Ville Vainio <vivainio@gmail.com>
31 2007-03-15 Ville Vainio <vivainio@gmail.com>
25
32
26 * Extensions/ipy_stock_completers.py: Fixed exception
33 * Extensions/ipy_stock_completers.py: Fixed exception
27 on mismatching quotes in %run completer. Patch by
34 on mismatching quotes in %run completer. Patch by
28 J�rgen Stenarson. Closes #127.
35 J�rgen Stenarson. Closes #127.
29
36
30 2007-03-14 Ville Vainio <vivainio@gmail.com>
37 2007-03-14 Ville Vainio <vivainio@gmail.com>
31
38
32 * Extensions/ext_rehashdir.py: Do not do auto_alias
39 * Extensions/ext_rehashdir.py: Do not do auto_alias
33 in %rehashdir, it clobbers %store'd aliases.
40 in %rehashdir, it clobbers %store'd aliases.
34
41
35 * UserConfig/ipy_profile_sh.py: envpersist.py extension
42 * UserConfig/ipy_profile_sh.py: envpersist.py extension
36 (beefed up %env) imported for sh profile.
43 (beefed up %env) imported for sh profile.
37
44
38 2007-03-10 Walter Doerwald <walter@livinglogic.de>
45 2007-03-10 Walter Doerwald <walter@livinglogic.de>
39
46
40 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
47 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
41 as the default browser.
48 as the default browser.
42 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
49 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
43 As igrid displays all attributes it ever encounters, fetch() (which has
50 As igrid displays all attributes it ever encounters, fetch() (which has
44 been renamed to _fetch()) doesn't have to recalculate the display attributes
51 been renamed to _fetch()) doesn't have to recalculate the display attributes
45 every time a new item is fetched. This should speed up scrolling.
52 every time a new item is fetched. This should speed up scrolling.
46
53
47 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
54 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
48
55
49 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
56 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
50 Schmolck's recently reported tab-completion bug (my previous one
57 Schmolck's recently reported tab-completion bug (my previous one
51 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
58 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
52
59
53 2007-03-09 Walter Doerwald <walter@livinglogic.de>
60 2007-03-09 Walter Doerwald <walter@livinglogic.de>
54
61
55 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
62 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
56 Close help window if exiting igrid.
63 Close help window if exiting igrid.
57
64
58 2007-03-02 J�rgen Stenarson <jorgen.stenarson@bostream.nu>
65 2007-03-02 J�rgen Stenarson <jorgen.stenarson@bostream.nu>
59
66
60 * IPython/Extensions/ipy_defaults.py: Check if readline is available
67 * IPython/Extensions/ipy_defaults.py: Check if readline is available
61 before calling functions from readline.
68 before calling functions from readline.
62
69
63 2007-03-02 Walter Doerwald <walter@livinglogic.de>
70 2007-03-02 Walter Doerwald <walter@livinglogic.de>
64
71
65 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
72 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
66 igrid is a wxPython-based display object for ipipe. If your system has
73 igrid is a wxPython-based display object for ipipe. If your system has
67 wx installed igrid will be the default display. Without wx ipipe falls
74 wx installed igrid will be the default display. Without wx ipipe falls
68 back to ibrowse (which needs curses). If no curses is installed ipipe
75 back to ibrowse (which needs curses). If no curses is installed ipipe
69 falls back to idump.
76 falls back to idump.
70
77
71 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
78 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
72
79
73 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
80 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
74 my changes from yesterday, they introduced bugs. Will reactivate
81 my changes from yesterday, they introduced bugs. Will reactivate
75 once I get a correct solution, which will be much easier thanks to
82 once I get a correct solution, which will be much easier thanks to
76 Dan Milstein's new prefilter test suite.
83 Dan Milstein's new prefilter test suite.
77
84
78 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
85 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
79
86
80 * IPython/iplib.py (split_user_input): fix input splitting so we
87 * IPython/iplib.py (split_user_input): fix input splitting so we
81 don't attempt attribute accesses on things that can't possibly be
88 don't attempt attribute accesses on things that can't possibly be
82 valid Python attributes. After a bug report by Alex Schmolck.
89 valid Python attributes. After a bug report by Alex Schmolck.
83 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
90 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
84 %magic with explicit % prefix.
91 %magic with explicit % prefix.
85
92
86 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
93 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
87
94
88 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
95 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
89 avoid a DeprecationWarning from GTK.
96 avoid a DeprecationWarning from GTK.
90
97
91 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
98 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
92
99
93 * IPython/genutils.py (clock): I modified clock() to return total
100 * IPython/genutils.py (clock): I modified clock() to return total
94 time, user+system. This is a more commonly needed metric. I also
101 time, user+system. This is a more commonly needed metric. I also
95 introduced the new clocku/clocks to get only user/system time if
102 introduced the new clocku/clocks to get only user/system time if
96 one wants those instead.
103 one wants those instead.
97
104
98 ***WARNING: API CHANGE*** clock() used to return only user time,
105 ***WARNING: API CHANGE*** clock() used to return only user time,
99 so if you want exactly the same results as before, use clocku
106 so if you want exactly the same results as before, use clocku
100 instead.
107 instead.
101
108
102 2007-02-22 Ville Vainio <vivainio@gmail.com>
109 2007-02-22 Ville Vainio <vivainio@gmail.com>
103
110
104 * IPython/Extensions/ipy_p4.py: Extension for improved
111 * IPython/Extensions/ipy_p4.py: Extension for improved
105 p4 (perforce version control system) experience.
112 p4 (perforce version control system) experience.
106 Adds %p4 magic with p4 command completion and
113 Adds %p4 magic with p4 command completion and
107 automatic -G argument (marshall output as python dict)
114 automatic -G argument (marshall output as python dict)
108
115
109 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
116 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
110
117
111 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
118 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
112 stop marks.
119 stop marks.
113 (ClearingMixin): a simple mixin to easily make a Demo class clear
120 (ClearingMixin): a simple mixin to easily make a Demo class clear
114 the screen in between blocks and have empty marquees. The
121 the screen in between blocks and have empty marquees. The
115 ClearDemo and ClearIPDemo classes that use it are included.
122 ClearDemo and ClearIPDemo classes that use it are included.
116
123
117 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
124 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
118
125
119 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
126 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
120 protect against exceptions at Python shutdown time. Patch
127 protect against exceptions at Python shutdown time. Patch
121 sumbmitted to upstream.
128 sumbmitted to upstream.
122
129
123 2007-02-14 Walter Doerwald <walter@livinglogic.de>
130 2007-02-14 Walter Doerwald <walter@livinglogic.de>
124
131
125 * IPython/Extensions/ibrowse.py: If entering the first object level
132 * IPython/Extensions/ibrowse.py: If entering the first object level
126 (i.e. the object for which the browser has been started) fails,
133 (i.e. the object for which the browser has been started) fails,
127 now the error is raised directly (aborting the browser) instead of
134 now the error is raised directly (aborting the browser) instead of
128 running into an empty levels list later.
135 running into an empty levels list later.
129
136
130 2007-02-03 Walter Doerwald <walter@livinglogic.de>
137 2007-02-03 Walter Doerwald <walter@livinglogic.de>
131
138
132 * IPython/Extensions/ipipe.py: Add an xrepr implementation
139 * IPython/Extensions/ipipe.py: Add an xrepr implementation
133 for the noitem object.
140 for the noitem object.
134
141
135 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
142 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
136
143
137 * IPython/completer.py (Completer.attr_matches): Fix small
144 * IPython/completer.py (Completer.attr_matches): Fix small
138 tab-completion bug with Enthought Traits objects with units.
145 tab-completion bug with Enthought Traits objects with units.
139 Thanks to a bug report by Tom Denniston
146 Thanks to a bug report by Tom Denniston
140 <tom.denniston-AT-alum.dartmouth.org>.
147 <tom.denniston-AT-alum.dartmouth.org>.
141
148
142 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
149 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
143
150
144 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
151 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
145 bug where only .ipy or .py would be completed. Once the first
152 bug where only .ipy or .py would be completed. Once the first
146 argument to %run has been given, all completions are valid because
153 argument to %run has been given, all completions are valid because
147 they are the arguments to the script, which may well be non-python
154 they are the arguments to the script, which may well be non-python
148 filenames.
155 filenames.
149
156
150 * IPython/irunner.py (InteractiveRunner.run_source): major updates
157 * IPython/irunner.py (InteractiveRunner.run_source): major updates
151 to irunner to allow it to correctly support real doctesting of
158 to irunner to allow it to correctly support real doctesting of
152 out-of-process ipython code.
159 out-of-process ipython code.
153
160
154 * IPython/Magic.py (magic_cd): Make the setting of the terminal
161 * IPython/Magic.py (magic_cd): Make the setting of the terminal
155 title an option (-noterm_title) because it completely breaks
162 title an option (-noterm_title) because it completely breaks
156 doctesting.
163 doctesting.
157
164
158 * IPython/demo.py: fix IPythonDemo class that was not actually working.
165 * IPython/demo.py: fix IPythonDemo class that was not actually working.
159
166
160 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
167 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
161
168
162 * IPython/irunner.py (main): fix small bug where extensions were
169 * IPython/irunner.py (main): fix small bug where extensions were
163 not being correctly recognized.
170 not being correctly recognized.
164
171
165 2007-01-23 Walter Doerwald <walter@livinglogic.de>
172 2007-01-23 Walter Doerwald <walter@livinglogic.de>
166
173
167 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
174 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
168 a string containing a single line yields the string itself as the
175 a string containing a single line yields the string itself as the
169 only item.
176 only item.
170
177
171 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
178 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
172 object if it's the same as the one on the last level (This avoids
179 object if it's the same as the one on the last level (This avoids
173 infinite recursion for one line strings).
180 infinite recursion for one line strings).
174
181
175 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
182 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
176
183
177 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
184 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
178 all output streams before printing tracebacks. This ensures that
185 all output streams before printing tracebacks. This ensures that
179 user output doesn't end up interleaved with traceback output.
186 user output doesn't end up interleaved with traceback output.
180
187
181 2007-01-10 Ville Vainio <vivainio@gmail.com>
188 2007-01-10 Ville Vainio <vivainio@gmail.com>
182
189
183 * Extensions/envpersist.py: Turbocharged %env that remembers
190 * Extensions/envpersist.py: Turbocharged %env that remembers
184 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
191 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
185 "%env VISUAL=jed".
192 "%env VISUAL=jed".
186
193
187 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
194 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
188
195
189 * IPython/iplib.py (showtraceback): ensure that we correctly call
196 * IPython/iplib.py (showtraceback): ensure that we correctly call
190 custom handlers in all cases (some with pdb were slipping through,
197 custom handlers in all cases (some with pdb were slipping through,
191 but I'm not exactly sure why).
198 but I'm not exactly sure why).
192
199
193 * IPython/Debugger.py (Tracer.__init__): added new class to
200 * IPython/Debugger.py (Tracer.__init__): added new class to
194 support set_trace-like usage of IPython's enhanced debugger.
201 support set_trace-like usage of IPython's enhanced debugger.
195
202
196 2006-12-24 Ville Vainio <vivainio@gmail.com>
203 2006-12-24 Ville Vainio <vivainio@gmail.com>
197
204
198 * ipmaker.py: more informative message when ipy_user_conf
205 * ipmaker.py: more informative message when ipy_user_conf
199 import fails (suggest running %upgrade).
206 import fails (suggest running %upgrade).
200
207
201 * tools/run_ipy_in_profiler.py: Utility to see where
208 * tools/run_ipy_in_profiler.py: Utility to see where
202 the time during IPython startup is spent.
209 the time during IPython startup is spent.
203
210
204 2006-12-20 Ville Vainio <vivainio@gmail.com>
211 2006-12-20 Ville Vainio <vivainio@gmail.com>
205
212
206 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
213 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
207
214
208 * ipapi.py: Add new ipapi method, expand_alias.
215 * ipapi.py: Add new ipapi method, expand_alias.
209
216
210 * Release.py: Bump up version to 0.7.4.svn
217 * Release.py: Bump up version to 0.7.4.svn
211
218
212 2006-12-17 Ville Vainio <vivainio@gmail.com>
219 2006-12-17 Ville Vainio <vivainio@gmail.com>
213
220
214 * Extensions/jobctrl.py: Fixed &cmd arg arg...
221 * Extensions/jobctrl.py: Fixed &cmd arg arg...
215 to work properly on posix too
222 to work properly on posix too
216
223
217 * Release.py: Update revnum (version is still just 0.7.3).
224 * Release.py: Update revnum (version is still just 0.7.3).
218
225
219 2006-12-15 Ville Vainio <vivainio@gmail.com>
226 2006-12-15 Ville Vainio <vivainio@gmail.com>
220
227
221 * scripts/ipython_win_post_install: create ipython.py in
228 * scripts/ipython_win_post_install: create ipython.py in
222 prefix + "/scripts".
229 prefix + "/scripts".
223
230
224 * Release.py: Update version to 0.7.3.
231 * Release.py: Update version to 0.7.3.
225
232
226 2006-12-14 Ville Vainio <vivainio@gmail.com>
233 2006-12-14 Ville Vainio <vivainio@gmail.com>
227
234
228 * scripts/ipython_win_post_install: Overwrite old shortcuts
235 * scripts/ipython_win_post_install: Overwrite old shortcuts
229 if they already exist
236 if they already exist
230
237
231 * Release.py: release 0.7.3rc2
238 * Release.py: release 0.7.3rc2
232
239
233 2006-12-13 Ville Vainio <vivainio@gmail.com>
240 2006-12-13 Ville Vainio <vivainio@gmail.com>
234
241
235 * Branch and update Release.py for 0.7.3rc1
242 * Branch and update Release.py for 0.7.3rc1
236
243
237 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
244 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
238
245
239 * IPython/Shell.py (IPShellWX): update for current WX naming
246 * IPython/Shell.py (IPShellWX): update for current WX naming
240 conventions, to avoid a deprecation warning with current WX
247 conventions, to avoid a deprecation warning with current WX
241 versions. Thanks to a report by Danny Shevitz.
248 versions. Thanks to a report by Danny Shevitz.
242
249
243 2006-12-12 Ville Vainio <vivainio@gmail.com>
250 2006-12-12 Ville Vainio <vivainio@gmail.com>
244
251
245 * ipmaker.py: apply david cournapeau's patch to make
252 * ipmaker.py: apply david cournapeau's patch to make
246 import_some work properly even when ipythonrc does
253 import_some work properly even when ipythonrc does
247 import_some on empty list (it was an old bug!).
254 import_some on empty list (it was an old bug!).
248
255
249 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
256 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
250 Add deprecation note to ipythonrc and a url to wiki
257 Add deprecation note to ipythonrc and a url to wiki
251 in ipy_user_conf.py
258 in ipy_user_conf.py
252
259
253
260
254 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
261 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
255 as if it was typed on IPython command prompt, i.e.
262 as if it was typed on IPython command prompt, i.e.
256 as IPython script.
263 as IPython script.
257
264
258 * example-magic.py, magic_grepl.py: remove outdated examples
265 * example-magic.py, magic_grepl.py: remove outdated examples
259
266
260 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
267 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
261
268
262 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
269 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
263 is called before any exception has occurred.
270 is called before any exception has occurred.
264
271
265 2006-12-08 Ville Vainio <vivainio@gmail.com>
272 2006-12-08 Ville Vainio <vivainio@gmail.com>
266
273
267 * Extensions/ipy_stock_completers.py: fix cd completer
274 * Extensions/ipy_stock_completers.py: fix cd completer
268 to translate /'s to \'s again.
275 to translate /'s to \'s again.
269
276
270 * completer.py: prevent traceback on file completions w/
277 * completer.py: prevent traceback on file completions w/
271 backslash.
278 backslash.
272
279
273 * Release.py: Update release number to 0.7.3b3 for release
280 * Release.py: Update release number to 0.7.3b3 for release
274
281
275 2006-12-07 Ville Vainio <vivainio@gmail.com>
282 2006-12-07 Ville Vainio <vivainio@gmail.com>
276
283
277 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
284 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
278 while executing external code. Provides more shell-like behaviour
285 while executing external code. Provides more shell-like behaviour
279 and overall better response to ctrl + C / ctrl + break.
286 and overall better response to ctrl + C / ctrl + break.
280
287
281 * tools/make_tarball.py: new script to create tarball straight from svn
288 * tools/make_tarball.py: new script to create tarball straight from svn
282 (setup.py sdist doesn't work on win32).
289 (setup.py sdist doesn't work on win32).
283
290
284 * Extensions/ipy_stock_completers.py: fix cd completer to give up
291 * Extensions/ipy_stock_completers.py: fix cd completer to give up
285 on dirnames with spaces and use the default completer instead.
292 on dirnames with spaces and use the default completer instead.
286
293
287 * Revision.py: Change version to 0.7.3b2 for release.
294 * Revision.py: Change version to 0.7.3b2 for release.
288
295
289 2006-12-05 Ville Vainio <vivainio@gmail.com>
296 2006-12-05 Ville Vainio <vivainio@gmail.com>
290
297
291 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
298 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
292 pydb patch 4 (rm debug printing, py 2.5 checking)
299 pydb patch 4 (rm debug printing, py 2.5 checking)
293
300
294 2006-11-30 Walter Doerwald <walter@livinglogic.de>
301 2006-11-30 Walter Doerwald <walter@livinglogic.de>
295 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
302 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
296 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
303 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
297 "refreshfind" (mapped to "R") does the same but tries to go back to the same
304 "refreshfind" (mapped to "R") does the same but tries to go back to the same
298 object the cursor was on before the refresh. The command "markrange" is
305 object the cursor was on before the refresh. The command "markrange" is
299 mapped to "%" now.
306 mapped to "%" now.
300 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
307 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
301
308
302 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
309 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
303
310
304 * IPython/Magic.py (magic_debug): new %debug magic to activate the
311 * IPython/Magic.py (magic_debug): new %debug magic to activate the
305 interactive debugger on the last traceback, without having to call
312 interactive debugger on the last traceback, without having to call
306 %pdb and rerun your code. Made minor changes in various modules,
313 %pdb and rerun your code. Made minor changes in various modules,
307 should automatically recognize pydb if available.
314 should automatically recognize pydb if available.
308
315
309 2006-11-28 Ville Vainio <vivainio@gmail.com>
316 2006-11-28 Ville Vainio <vivainio@gmail.com>
310
317
311 * completer.py: If the text start with !, show file completions
318 * completer.py: If the text start with !, show file completions
312 properly. This helps when trying to complete command name
319 properly. This helps when trying to complete command name
313 for shell escapes.
320 for shell escapes.
314
321
315 2006-11-27 Ville Vainio <vivainio@gmail.com>
322 2006-11-27 Ville Vainio <vivainio@gmail.com>
316
323
317 * ipy_stock_completers.py: bzr completer submitted by Stefan van
324 * ipy_stock_completers.py: bzr completer submitted by Stefan van
318 der Walt. Clean up svn and hg completers by using a common
325 der Walt. Clean up svn and hg completers by using a common
319 vcs_completer.
326 vcs_completer.
320
327
321 2006-11-26 Ville Vainio <vivainio@gmail.com>
328 2006-11-26 Ville Vainio <vivainio@gmail.com>
322
329
323 * Remove ipconfig and %config; you should use _ip.options structure
330 * Remove ipconfig and %config; you should use _ip.options structure
324 directly instead!
331 directly instead!
325
332
326 * genutils.py: add wrap_deprecated function for deprecating callables
333 * genutils.py: add wrap_deprecated function for deprecating callables
327
334
328 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
335 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
329 _ip.system instead. ipalias is redundant.
336 _ip.system instead. ipalias is redundant.
330
337
331 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
338 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
332 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
339 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
333 explicit.
340 explicit.
334
341
335 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
342 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
336 completer. Try it by entering 'hg ' and pressing tab.
343 completer. Try it by entering 'hg ' and pressing tab.
337
344
338 * macro.py: Give Macro a useful __repr__ method
345 * macro.py: Give Macro a useful __repr__ method
339
346
340 * Magic.py: %whos abbreviates the typename of Macro for brevity.
347 * Magic.py: %whos abbreviates the typename of Macro for brevity.
341
348
342 2006-11-24 Walter Doerwald <walter@livinglogic.de>
349 2006-11-24 Walter Doerwald <walter@livinglogic.de>
343 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
350 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
344 we don't get a duplicate ipipe module, where registration of the xrepr
351 we don't get a duplicate ipipe module, where registration of the xrepr
345 implementation for Text is useless.
352 implementation for Text is useless.
346
353
347 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
354 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
348
355
349 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
356 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
350
357
351 2006-11-24 Ville Vainio <vivainio@gmail.com>
358 2006-11-24 Ville Vainio <vivainio@gmail.com>
352
359
353 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
360 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
354 try to use "cProfile" instead of the slower pure python
361 try to use "cProfile" instead of the slower pure python
355 "profile"
362 "profile"
356
363
357 2006-11-23 Ville Vainio <vivainio@gmail.com>
364 2006-11-23 Ville Vainio <vivainio@gmail.com>
358
365
359 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
366 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
360 Qt+IPython+Designer link in documentation.
367 Qt+IPython+Designer link in documentation.
361
368
362 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
369 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
363 correct Pdb object to %pydb.
370 correct Pdb object to %pydb.
364
371
365
372
366 2006-11-22 Walter Doerwald <walter@livinglogic.de>
373 2006-11-22 Walter Doerwald <walter@livinglogic.de>
367 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
374 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
368 generic xrepr(), otherwise the list implementation would kick in.
375 generic xrepr(), otherwise the list implementation would kick in.
369
376
370 2006-11-21 Ville Vainio <vivainio@gmail.com>
377 2006-11-21 Ville Vainio <vivainio@gmail.com>
371
378
372 * upgrade_dir.py: Now actually overwrites a nonmodified user file
379 * upgrade_dir.py: Now actually overwrites a nonmodified user file
373 with one from UserConfig.
380 with one from UserConfig.
374
381
375 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
382 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
376 it was missing which broke the sh profile.
383 it was missing which broke the sh profile.
377
384
378 * completer.py: file completer now uses explicit '/' instead
385 * completer.py: file completer now uses explicit '/' instead
379 of os.path.join, expansion of 'foo' was broken on win32
386 of os.path.join, expansion of 'foo' was broken on win32
380 if there was one directory with name 'foobar'.
387 if there was one directory with name 'foobar'.
381
388
382 * A bunch of patches from Kirill Smelkov:
389 * A bunch of patches from Kirill Smelkov:
383
390
384 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
391 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
385
392
386 * [patch 7/9] Implement %page -r (page in raw mode) -
393 * [patch 7/9] Implement %page -r (page in raw mode) -
387
394
388 * [patch 5/9] ScientificPython webpage has moved
395 * [patch 5/9] ScientificPython webpage has moved
389
396
390 * [patch 4/9] The manual mentions %ds, should be %dhist
397 * [patch 4/9] The manual mentions %ds, should be %dhist
391
398
392 * [patch 3/9] Kill old bits from %prun doc.
399 * [patch 3/9] Kill old bits from %prun doc.
393
400
394 * [patch 1/9] Fix typos here and there.
401 * [patch 1/9] Fix typos here and there.
395
402
396 2006-11-08 Ville Vainio <vivainio@gmail.com>
403 2006-11-08 Ville Vainio <vivainio@gmail.com>
397
404
398 * completer.py (attr_matches): catch all exceptions raised
405 * completer.py (attr_matches): catch all exceptions raised
399 by eval of expr with dots.
406 by eval of expr with dots.
400
407
401 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
408 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
402
409
403 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
410 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
404 input if it starts with whitespace. This allows you to paste
411 input if it starts with whitespace. This allows you to paste
405 indented input from any editor without manually having to type in
412 indented input from any editor without manually having to type in
406 the 'if 1:', which is convenient when working interactively.
413 the 'if 1:', which is convenient when working interactively.
407 Slightly modifed version of a patch by Bo Peng
414 Slightly modifed version of a patch by Bo Peng
408 <bpeng-AT-rice.edu>.
415 <bpeng-AT-rice.edu>.
409
416
410 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
417 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
411
418
412 * IPython/irunner.py (main): modified irunner so it automatically
419 * IPython/irunner.py (main): modified irunner so it automatically
413 recognizes the right runner to use based on the extension (.py for
420 recognizes the right runner to use based on the extension (.py for
414 python, .ipy for ipython and .sage for sage).
421 python, .ipy for ipython and .sage for sage).
415
422
416 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
423 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
417 visible in ipapi as ip.config(), to programatically control the
424 visible in ipapi as ip.config(), to programatically control the
418 internal rc object. There's an accompanying %config magic for
425 internal rc object. There's an accompanying %config magic for
419 interactive use, which has been enhanced to match the
426 interactive use, which has been enhanced to match the
420 funtionality in ipconfig.
427 funtionality in ipconfig.
421
428
422 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
429 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
423 so it's not just a toggle, it now takes an argument. Add support
430 so it's not just a toggle, it now takes an argument. Add support
424 for a customizable header when making system calls, as the new
431 for a customizable header when making system calls, as the new
425 system_header variable in the ipythonrc file.
432 system_header variable in the ipythonrc file.
426
433
427 2006-11-03 Walter Doerwald <walter@livinglogic.de>
434 2006-11-03 Walter Doerwald <walter@livinglogic.de>
428
435
429 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
436 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
430 generic functions (using Philip J. Eby's simplegeneric package).
437 generic functions (using Philip J. Eby's simplegeneric package).
431 This makes it possible to customize the display of third-party classes
438 This makes it possible to customize the display of third-party classes
432 without having to monkeypatch them. xiter() no longer supports a mode
439 without having to monkeypatch them. xiter() no longer supports a mode
433 argument and the XMode class has been removed. The same functionality can
440 argument and the XMode class has been removed. The same functionality can
434 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
441 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
435 One consequence of the switch to generic functions is that xrepr() and
442 One consequence of the switch to generic functions is that xrepr() and
436 xattrs() implementation must define the default value for the mode
443 xattrs() implementation must define the default value for the mode
437 argument themselves and xattrs() implementations must return real
444 argument themselves and xattrs() implementations must return real
438 descriptors.
445 descriptors.
439
446
440 * IPython/external: This new subpackage will contain all third-party
447 * IPython/external: This new subpackage will contain all third-party
441 packages that are bundled with IPython. (The first one is simplegeneric).
448 packages that are bundled with IPython. (The first one is simplegeneric).
442
449
443 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
450 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
444 directory which as been dropped in r1703.
451 directory which as been dropped in r1703.
445
452
446 * IPython/Extensions/ipipe.py (iless): Fixed.
453 * IPython/Extensions/ipipe.py (iless): Fixed.
447
454
448 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
455 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
449
456
450 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
457 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
451
458
452 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
459 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
453 handling in variable expansion so that shells and magics recognize
460 handling in variable expansion so that shells and magics recognize
454 function local scopes correctly. Bug reported by Brian.
461 function local scopes correctly. Bug reported by Brian.
455
462
456 * scripts/ipython: remove the very first entry in sys.path which
463 * scripts/ipython: remove the very first entry in sys.path which
457 Python auto-inserts for scripts, so that sys.path under IPython is
464 Python auto-inserts for scripts, so that sys.path under IPython is
458 as similar as possible to that under plain Python.
465 as similar as possible to that under plain Python.
459
466
460 * IPython/completer.py (IPCompleter.file_matches): Fix
467 * IPython/completer.py (IPCompleter.file_matches): Fix
461 tab-completion so that quotes are not closed unless the completion
468 tab-completion so that quotes are not closed unless the completion
462 is unambiguous. After a request by Stefan. Minor cleanups in
469 is unambiguous. After a request by Stefan. Minor cleanups in
463 ipy_stock_completers.
470 ipy_stock_completers.
464
471
465 2006-11-02 Ville Vainio <vivainio@gmail.com>
472 2006-11-02 Ville Vainio <vivainio@gmail.com>
466
473
467 * ipy_stock_completers.py: Add %run and %cd completers.
474 * ipy_stock_completers.py: Add %run and %cd completers.
468
475
469 * completer.py: Try running custom completer for both
476 * completer.py: Try running custom completer for both
470 "foo" and "%foo" if the command is just "foo". Ignore case
477 "foo" and "%foo" if the command is just "foo". Ignore case
471 when filtering possible completions.
478 when filtering possible completions.
472
479
473 * UserConfig/ipy_user_conf.py: install stock completers as default
480 * UserConfig/ipy_user_conf.py: install stock completers as default
474
481
475 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
482 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
476 simplified readline history save / restore through a wrapper
483 simplified readline history save / restore through a wrapper
477 function
484 function
478
485
479
486
480 2006-10-31 Ville Vainio <vivainio@gmail.com>
487 2006-10-31 Ville Vainio <vivainio@gmail.com>
481
488
482 * strdispatch.py, completer.py, ipy_stock_completers.py:
489 * strdispatch.py, completer.py, ipy_stock_completers.py:
483 Allow str_key ("command") in completer hooks. Implement
490 Allow str_key ("command") in completer hooks. Implement
484 trivial completer for 'import' (stdlib modules only). Rename
491 trivial completer for 'import' (stdlib modules only). Rename
485 ipy_linux_package_managers.py to ipy_stock_completers.py.
492 ipy_linux_package_managers.py to ipy_stock_completers.py.
486 SVN completer.
493 SVN completer.
487
494
488 * Extensions/ledit.py: %magic line editor for easily and
495 * Extensions/ledit.py: %magic line editor for easily and
489 incrementally manipulating lists of strings. The magic command
496 incrementally manipulating lists of strings. The magic command
490 name is %led.
497 name is %led.
491
498
492 2006-10-30 Ville Vainio <vivainio@gmail.com>
499 2006-10-30 Ville Vainio <vivainio@gmail.com>
493
500
494 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
501 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
495 Bernsteins's patches for pydb integration.
502 Bernsteins's patches for pydb integration.
496 http://bashdb.sourceforge.net/pydb/
503 http://bashdb.sourceforge.net/pydb/
497
504
498 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
505 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
499 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
506 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
500 custom completer hook to allow the users to implement their own
507 custom completer hook to allow the users to implement their own
501 completers. See ipy_linux_package_managers.py for example. The
508 completers. See ipy_linux_package_managers.py for example. The
502 hook name is 'complete_command'.
509 hook name is 'complete_command'.
503
510
504 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
511 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
505
512
506 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
513 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
507 Numeric leftovers.
514 Numeric leftovers.
508
515
509 * ipython.el (py-execute-region): apply Stefan's patch to fix
516 * ipython.el (py-execute-region): apply Stefan's patch to fix
510 garbled results if the python shell hasn't been previously started.
517 garbled results if the python shell hasn't been previously started.
511
518
512 * IPython/genutils.py (arg_split): moved to genutils, since it's a
519 * IPython/genutils.py (arg_split): moved to genutils, since it's a
513 pretty generic function and useful for other things.
520 pretty generic function and useful for other things.
514
521
515 * IPython/OInspect.py (getsource): Add customizable source
522 * IPython/OInspect.py (getsource): Add customizable source
516 extractor. After a request/patch form W. Stein (SAGE).
523 extractor. After a request/patch form W. Stein (SAGE).
517
524
518 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
525 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
519 window size to a more reasonable value from what pexpect does,
526 window size to a more reasonable value from what pexpect does,
520 since their choice causes wrapping bugs with long input lines.
527 since their choice causes wrapping bugs with long input lines.
521
528
522 2006-10-28 Ville Vainio <vivainio@gmail.com>
529 2006-10-28 Ville Vainio <vivainio@gmail.com>
523
530
524 * Magic.py (%run): Save and restore the readline history from
531 * Magic.py (%run): Save and restore the readline history from
525 file around %run commands to prevent side effects from
532 file around %run commands to prevent side effects from
526 %runned programs that might use readline (e.g. pydb).
533 %runned programs that might use readline (e.g. pydb).
527
534
528 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
535 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
529 invoking the pydb enhanced debugger.
536 invoking the pydb enhanced debugger.
530
537
531 2006-10-23 Walter Doerwald <walter@livinglogic.de>
538 2006-10-23 Walter Doerwald <walter@livinglogic.de>
532
539
533 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
540 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
534 call the base class method and propagate the return value to
541 call the base class method and propagate the return value to
535 ifile. This is now done by path itself.
542 ifile. This is now done by path itself.
536
543
537 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
544 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
538
545
539 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
546 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
540 api: set_crash_handler(), to expose the ability to change the
547 api: set_crash_handler(), to expose the ability to change the
541 internal crash handler.
548 internal crash handler.
542
549
543 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
550 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
544 the various parameters of the crash handler so that apps using
551 the various parameters of the crash handler so that apps using
545 IPython as their engine can customize crash handling. Ipmlemented
552 IPython as their engine can customize crash handling. Ipmlemented
546 at the request of SAGE.
553 at the request of SAGE.
547
554
548 2006-10-14 Ville Vainio <vivainio@gmail.com>
555 2006-10-14 Ville Vainio <vivainio@gmail.com>
549
556
550 * Magic.py, ipython.el: applied first "safe" part of Rocky
557 * Magic.py, ipython.el: applied first "safe" part of Rocky
551 Bernstein's patch set for pydb integration.
558 Bernstein's patch set for pydb integration.
552
559
553 * Magic.py (%unalias, %alias): %store'd aliases can now be
560 * Magic.py (%unalias, %alias): %store'd aliases can now be
554 removed with '%unalias'. %alias w/o args now shows most
561 removed with '%unalias'. %alias w/o args now shows most
555 interesting (stored / manually defined) aliases last
562 interesting (stored / manually defined) aliases last
556 where they catch the eye w/o scrolling.
563 where they catch the eye w/o scrolling.
557
564
558 * Magic.py (%rehashx), ext_rehashdir.py: files with
565 * Magic.py (%rehashx), ext_rehashdir.py: files with
559 'py' extension are always considered executable, even
566 'py' extension are always considered executable, even
560 when not in PATHEXT environment variable.
567 when not in PATHEXT environment variable.
561
568
562 2006-10-12 Ville Vainio <vivainio@gmail.com>
569 2006-10-12 Ville Vainio <vivainio@gmail.com>
563
570
564 * jobctrl.py: Add new "jobctrl" extension for spawning background
571 * jobctrl.py: Add new "jobctrl" extension for spawning background
565 processes with "&find /". 'import jobctrl' to try it out. Requires
572 processes with "&find /". 'import jobctrl' to try it out. Requires
566 'subprocess' module, standard in python 2.4+.
573 'subprocess' module, standard in python 2.4+.
567
574
568 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
575 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
569 so if foo -> bar and bar -> baz, then foo -> baz.
576 so if foo -> bar and bar -> baz, then foo -> baz.
570
577
571 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
578 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
572
579
573 * IPython/Magic.py (Magic.parse_options): add a new posix option
580 * IPython/Magic.py (Magic.parse_options): add a new posix option
574 to allow parsing of input args in magics that doesn't strip quotes
581 to allow parsing of input args in magics that doesn't strip quotes
575 (if posix=False). This also closes %timeit bug reported by
582 (if posix=False). This also closes %timeit bug reported by
576 Stefan.
583 Stefan.
577
584
578 2006-10-03 Ville Vainio <vivainio@gmail.com>
585 2006-10-03 Ville Vainio <vivainio@gmail.com>
579
586
580 * iplib.py (raw_input, interact): Return ValueError catching for
587 * iplib.py (raw_input, interact): Return ValueError catching for
581 raw_input. Fixes infinite loop for sys.stdin.close() or
588 raw_input. Fixes infinite loop for sys.stdin.close() or
582 sys.stdout.close().
589 sys.stdout.close().
583
590
584 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
591 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
585
592
586 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
593 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
587 to help in handling doctests. irunner is now pretty useful for
594 to help in handling doctests. irunner is now pretty useful for
588 running standalone scripts and simulate a full interactive session
595 running standalone scripts and simulate a full interactive session
589 in a format that can be then pasted as a doctest.
596 in a format that can be then pasted as a doctest.
590
597
591 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
598 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
592 on top of the default (useless) ones. This also fixes the nasty
599 on top of the default (useless) ones. This also fixes the nasty
593 way in which 2.5's Quitter() exits (reverted [1785]).
600 way in which 2.5's Quitter() exits (reverted [1785]).
594
601
595 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
602 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
596 2.5.
603 2.5.
597
604
598 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
605 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
599 color scheme is updated as well when color scheme is changed
606 color scheme is updated as well when color scheme is changed
600 interactively.
607 interactively.
601
608
602 2006-09-27 Ville Vainio <vivainio@gmail.com>
609 2006-09-27 Ville Vainio <vivainio@gmail.com>
603
610
604 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
611 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
605 infinite loop and just exit. It's a hack, but will do for a while.
612 infinite loop and just exit. It's a hack, but will do for a while.
606
613
607 2006-08-25 Walter Doerwald <walter@livinglogic.de>
614 2006-08-25 Walter Doerwald <walter@livinglogic.de>
608
615
609 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
616 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
610 the constructor, this makes it possible to get a list of only directories
617 the constructor, this makes it possible to get a list of only directories
611 or only files.
618 or only files.
612
619
613 2006-08-12 Ville Vainio <vivainio@gmail.com>
620 2006-08-12 Ville Vainio <vivainio@gmail.com>
614
621
615 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
622 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
616 they broke unittest
623 they broke unittest
617
624
618 2006-08-11 Ville Vainio <vivainio@gmail.com>
625 2006-08-11 Ville Vainio <vivainio@gmail.com>
619
626
620 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
627 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
621 by resolving issue properly, i.e. by inheriting FakeModule
628 by resolving issue properly, i.e. by inheriting FakeModule
622 from types.ModuleType. Pickling ipython interactive data
629 from types.ModuleType. Pickling ipython interactive data
623 should still work as usual (testing appreciated).
630 should still work as usual (testing appreciated).
624
631
625 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
632 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
626
633
627 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
634 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
628 running under python 2.3 with code from 2.4 to fix a bug with
635 running under python 2.3 with code from 2.4 to fix a bug with
629 help(). Reported by the Debian maintainers, Norbert Tretkowski
636 help(). Reported by the Debian maintainers, Norbert Tretkowski
630 <norbert-AT-tretkowski.de> and Alexandre Fayolle
637 <norbert-AT-tretkowski.de> and Alexandre Fayolle
631 <afayolle-AT-debian.org>.
638 <afayolle-AT-debian.org>.
632
639
633 2006-08-04 Walter Doerwald <walter@livinglogic.de>
640 2006-08-04 Walter Doerwald <walter@livinglogic.de>
634
641
635 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
642 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
636 (which was displaying "quit" twice).
643 (which was displaying "quit" twice).
637
644
638 2006-07-28 Walter Doerwald <walter@livinglogic.de>
645 2006-07-28 Walter Doerwald <walter@livinglogic.de>
639
646
640 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
647 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
641 the mode argument).
648 the mode argument).
642
649
643 2006-07-27 Walter Doerwald <walter@livinglogic.de>
650 2006-07-27 Walter Doerwald <walter@livinglogic.de>
644
651
645 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
652 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
646 not running under IPython.
653 not running under IPython.
647
654
648 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
655 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
649 and make it iterable (iterating over the attribute itself). Add two new
656 and make it iterable (iterating over the attribute itself). Add two new
650 magic strings for __xattrs__(): If the string starts with "-", the attribute
657 magic strings for __xattrs__(): If the string starts with "-", the attribute
651 will not be displayed in ibrowse's detail view (but it can still be
658 will not be displayed in ibrowse's detail view (but it can still be
652 iterated over). This makes it possible to add attributes that are large
659 iterated over). This makes it possible to add attributes that are large
653 lists or generator methods to the detail view. Replace magic attribute names
660 lists or generator methods to the detail view. Replace magic attribute names
654 and _attrname() and _getattr() with "descriptors": For each type of magic
661 and _attrname() and _getattr() with "descriptors": For each type of magic
655 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
662 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
656 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
663 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
657 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
664 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
658 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
665 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
659 are still supported.
666 are still supported.
660
667
661 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
668 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
662 fails in ibrowse.fetch(), the exception object is added as the last item
669 fails in ibrowse.fetch(), the exception object is added as the last item
663 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
670 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
664 a generator throws an exception midway through execution.
671 a generator throws an exception midway through execution.
665
672
666 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
673 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
667 encoding into methods.
674 encoding into methods.
668
675
669 2006-07-26 Ville Vainio <vivainio@gmail.com>
676 2006-07-26 Ville Vainio <vivainio@gmail.com>
670
677
671 * iplib.py: history now stores multiline input as single
678 * iplib.py: history now stores multiline input as single
672 history entries. Patch by Jorgen Cederlof.
679 history entries. Patch by Jorgen Cederlof.
673
680
674 2006-07-18 Walter Doerwald <walter@livinglogic.de>
681 2006-07-18 Walter Doerwald <walter@livinglogic.de>
675
682
676 * IPython/Extensions/ibrowse.py: Make cursor visible over
683 * IPython/Extensions/ibrowse.py: Make cursor visible over
677 non existing attributes.
684 non existing attributes.
678
685
679 2006-07-14 Walter Doerwald <walter@livinglogic.de>
686 2006-07-14 Walter Doerwald <walter@livinglogic.de>
680
687
681 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
688 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
682 error output of the running command doesn't mess up the screen.
689 error output of the running command doesn't mess up the screen.
683
690
684 2006-07-13 Walter Doerwald <walter@livinglogic.de>
691 2006-07-13 Walter Doerwald <walter@livinglogic.de>
685
692
686 * IPython/Extensions/ipipe.py (isort): Make isort usable without
693 * IPython/Extensions/ipipe.py (isort): Make isort usable without
687 argument. This sorts the items themselves.
694 argument. This sorts the items themselves.
688
695
689 2006-07-12 Walter Doerwald <walter@livinglogic.de>
696 2006-07-12 Walter Doerwald <walter@livinglogic.de>
690
697
691 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
698 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
692 Compile expression strings into code objects. This should speed
699 Compile expression strings into code objects. This should speed
693 up ifilter and friends somewhat.
700 up ifilter and friends somewhat.
694
701
695 2006-07-08 Ville Vainio <vivainio@gmail.com>
702 2006-07-08 Ville Vainio <vivainio@gmail.com>
696
703
697 * Magic.py: %cpaste now strips > from the beginning of lines
704 * Magic.py: %cpaste now strips > from the beginning of lines
698 to ease pasting quoted code from emails. Contributed by
705 to ease pasting quoted code from emails. Contributed by
699 Stefan van der Walt.
706 Stefan van der Walt.
700
707
701 2006-06-29 Ville Vainio <vivainio@gmail.com>
708 2006-06-29 Ville Vainio <vivainio@gmail.com>
702
709
703 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
710 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
704 mode, patch contributed by Darren Dale. NEEDS TESTING!
711 mode, patch contributed by Darren Dale. NEEDS TESTING!
705
712
706 2006-06-28 Walter Doerwald <walter@livinglogic.de>
713 2006-06-28 Walter Doerwald <walter@livinglogic.de>
707
714
708 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
715 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
709 a blue background. Fix fetching new display rows when the browser
716 a blue background. Fix fetching new display rows when the browser
710 scrolls more than a screenful (e.g. by using the goto command).
717 scrolls more than a screenful (e.g. by using the goto command).
711
718
712 2006-06-27 Ville Vainio <vivainio@gmail.com>
719 2006-06-27 Ville Vainio <vivainio@gmail.com>
713
720
714 * Magic.py (_inspect, _ofind) Apply David Huard's
721 * Magic.py (_inspect, _ofind) Apply David Huard's
715 patch for displaying the correct docstring for 'property'
722 patch for displaying the correct docstring for 'property'
716 attributes.
723 attributes.
717
724
718 2006-06-23 Walter Doerwald <walter@livinglogic.de>
725 2006-06-23 Walter Doerwald <walter@livinglogic.de>
719
726
720 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
727 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
721 commands into the methods implementing them.
728 commands into the methods implementing them.
722
729
723 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
730 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
724
731
725 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
732 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
726 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
733 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
727 autoindent support was authored by Jin Liu.
734 autoindent support was authored by Jin Liu.
728
735
729 2006-06-22 Walter Doerwald <walter@livinglogic.de>
736 2006-06-22 Walter Doerwald <walter@livinglogic.de>
730
737
731 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
738 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
732 for keymaps with a custom class that simplifies handling.
739 for keymaps with a custom class that simplifies handling.
733
740
734 2006-06-19 Walter Doerwald <walter@livinglogic.de>
741 2006-06-19 Walter Doerwald <walter@livinglogic.de>
735
742
736 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
743 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
737 resizing. This requires Python 2.5 to work.
744 resizing. This requires Python 2.5 to work.
738
745
739 2006-06-16 Walter Doerwald <walter@livinglogic.de>
746 2006-06-16 Walter Doerwald <walter@livinglogic.de>
740
747
741 * IPython/Extensions/ibrowse.py: Add two new commands to
748 * IPython/Extensions/ibrowse.py: Add two new commands to
742 ibrowse: "hideattr" (mapped to "h") hides the attribute under
749 ibrowse: "hideattr" (mapped to "h") hides the attribute under
743 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
750 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
744 attributes again. Remapped the help command to "?". Display
751 attributes again. Remapped the help command to "?". Display
745 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
752 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
746 as keys for the "home" and "end" commands. Add three new commands
753 as keys for the "home" and "end" commands. Add three new commands
747 to the input mode for "find" and friends: "delend" (CTRL-K)
754 to the input mode for "find" and friends: "delend" (CTRL-K)
748 deletes to the end of line. "incsearchup" searches upwards in the
755 deletes to the end of line. "incsearchup" searches upwards in the
749 command history for an input that starts with the text before the cursor.
756 command history for an input that starts with the text before the cursor.
750 "incsearchdown" does the same downwards. Removed a bogus mapping of
757 "incsearchdown" does the same downwards. Removed a bogus mapping of
751 the x key to "delete".
758 the x key to "delete".
752
759
753 2006-06-15 Ville Vainio <vivainio@gmail.com>
760 2006-06-15 Ville Vainio <vivainio@gmail.com>
754
761
755 * iplib.py, hooks.py: Added new generate_prompt hook that can be
762 * iplib.py, hooks.py: Added new generate_prompt hook that can be
756 used to create prompts dynamically, instead of the "old" way of
763 used to create prompts dynamically, instead of the "old" way of
757 assigning "magic" strings to prompt_in1 and prompt_in2. The old
764 assigning "magic" strings to prompt_in1 and prompt_in2. The old
758 way still works (it's invoked by the default hook), of course.
765 way still works (it's invoked by the default hook), of course.
759
766
760 * Prompts.py: added generate_output_prompt hook for altering output
767 * Prompts.py: added generate_output_prompt hook for altering output
761 prompt
768 prompt
762
769
763 * Release.py: Changed version string to 0.7.3.svn.
770 * Release.py: Changed version string to 0.7.3.svn.
764
771
765 2006-06-15 Walter Doerwald <walter@livinglogic.de>
772 2006-06-15 Walter Doerwald <walter@livinglogic.de>
766
773
767 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
774 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
768 the call to fetch() always tries to fetch enough data for at least one
775 the call to fetch() always tries to fetch enough data for at least one
769 full screen. This makes it possible to simply call moveto(0,0,True) in
776 full screen. This makes it possible to simply call moveto(0,0,True) in
770 the constructor. Fix typos and removed the obsolete goto attribute.
777 the constructor. Fix typos and removed the obsolete goto attribute.
771
778
772 2006-06-12 Ville Vainio <vivainio@gmail.com>
779 2006-06-12 Ville Vainio <vivainio@gmail.com>
773
780
774 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
781 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
775 allowing $variable interpolation within multiline statements,
782 allowing $variable interpolation within multiline statements,
776 though so far only with "sh" profile for a testing period.
783 though so far only with "sh" profile for a testing period.
777 The patch also enables splitting long commands with \ but it
784 The patch also enables splitting long commands with \ but it
778 doesn't work properly yet.
785 doesn't work properly yet.
779
786
780 2006-06-12 Walter Doerwald <walter@livinglogic.de>
787 2006-06-12 Walter Doerwald <walter@livinglogic.de>
781
788
782 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
789 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
783 input history and the position of the cursor in the input history for
790 input history and the position of the cursor in the input history for
784 the find, findbackwards and goto command.
791 the find, findbackwards and goto command.
785
792
786 2006-06-10 Walter Doerwald <walter@livinglogic.de>
793 2006-06-10 Walter Doerwald <walter@livinglogic.de>
787
794
788 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
795 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
789 implements the basic functionality of browser commands that require
796 implements the basic functionality of browser commands that require
790 input. Reimplement the goto, find and findbackwards commands as
797 input. Reimplement the goto, find and findbackwards commands as
791 subclasses of _CommandInput. Add an input history and keymaps to those
798 subclasses of _CommandInput. Add an input history and keymaps to those
792 commands. Add "\r" as a keyboard shortcut for the enterdefault and
799 commands. Add "\r" as a keyboard shortcut for the enterdefault and
793 execute commands.
800 execute commands.
794
801
795 2006-06-07 Ville Vainio <vivainio@gmail.com>
802 2006-06-07 Ville Vainio <vivainio@gmail.com>
796
803
797 * iplib.py: ipython mybatch.ipy exits ipython immediately after
804 * iplib.py: ipython mybatch.ipy exits ipython immediately after
798 running the batch files instead of leaving the session open.
805 running the batch files instead of leaving the session open.
799
806
800 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
807 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
801
808
802 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
809 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
803 the original fix was incomplete. Patch submitted by W. Maier.
810 the original fix was incomplete. Patch submitted by W. Maier.
804
811
805 2006-06-07 Ville Vainio <vivainio@gmail.com>
812 2006-06-07 Ville Vainio <vivainio@gmail.com>
806
813
807 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
814 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
808 Confirmation prompts can be supressed by 'quiet' option.
815 Confirmation prompts can be supressed by 'quiet' option.
809 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
816 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
810
817
811 2006-06-06 *** Released version 0.7.2
818 2006-06-06 *** Released version 0.7.2
812
819
813 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
820 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
814
821
815 * IPython/Release.py (version): Made 0.7.2 final for release.
822 * IPython/Release.py (version): Made 0.7.2 final for release.
816 Repo tagged and release cut.
823 Repo tagged and release cut.
817
824
818 2006-06-05 Ville Vainio <vivainio@gmail.com>
825 2006-06-05 Ville Vainio <vivainio@gmail.com>
819
826
820 * Magic.py (magic_rehashx): Honor no_alias list earlier in
827 * Magic.py (magic_rehashx): Honor no_alias list earlier in
821 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
828 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
822
829
823 * upgrade_dir.py: try import 'path' module a bit harder
830 * upgrade_dir.py: try import 'path' module a bit harder
824 (for %upgrade)
831 (for %upgrade)
825
832
826 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
833 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
827
834
828 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
835 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
829 instead of looping 20 times.
836 instead of looping 20 times.
830
837
831 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
838 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
832 correctly at initialization time. Bug reported by Krishna Mohan
839 correctly at initialization time. Bug reported by Krishna Mohan
833 Gundu <gkmohan-AT-gmail.com> on the user list.
840 Gundu <gkmohan-AT-gmail.com> on the user list.
834
841
835 * IPython/Release.py (version): Mark 0.7.2 version to start
842 * IPython/Release.py (version): Mark 0.7.2 version to start
836 testing for release on 06/06.
843 testing for release on 06/06.
837
844
838 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
845 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
839
846
840 * scripts/irunner: thin script interface so users don't have to
847 * scripts/irunner: thin script interface so users don't have to
841 find the module and call it as an executable, since modules rarely
848 find the module and call it as an executable, since modules rarely
842 live in people's PATH.
849 live in people's PATH.
843
850
844 * IPython/irunner.py (InteractiveRunner.__init__): added
851 * IPython/irunner.py (InteractiveRunner.__init__): added
845 delaybeforesend attribute to control delays with newer versions of
852 delaybeforesend attribute to control delays with newer versions of
846 pexpect. Thanks to detailed help from pexpect's author, Noah
853 pexpect. Thanks to detailed help from pexpect's author, Noah
847 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
854 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
848 correctly (it works in NoColor mode).
855 correctly (it works in NoColor mode).
849
856
850 * IPython/iplib.py (handle_normal): fix nasty crash reported on
857 * IPython/iplib.py (handle_normal): fix nasty crash reported on
851 SAGE list, from improper log() calls.
858 SAGE list, from improper log() calls.
852
859
853 2006-05-31 Ville Vainio <vivainio@gmail.com>
860 2006-05-31 Ville Vainio <vivainio@gmail.com>
854
861
855 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
862 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
856 with args in parens to work correctly with dirs that have spaces.
863 with args in parens to work correctly with dirs that have spaces.
857
864
858 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
865 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
859
866
860 * IPython/Logger.py (Logger.logstart): add option to log raw input
867 * IPython/Logger.py (Logger.logstart): add option to log raw input
861 instead of the processed one. A -r flag was added to the
868 instead of the processed one. A -r flag was added to the
862 %logstart magic used for controlling logging.
869 %logstart magic used for controlling logging.
863
870
864 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
871 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
865
872
866 * IPython/iplib.py (InteractiveShell.__init__): add check for the
873 * IPython/iplib.py (InteractiveShell.__init__): add check for the
867 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
874 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
868 recognize the option. After a bug report by Will Maier. This
875 recognize the option. After a bug report by Will Maier. This
869 closes #64 (will do it after confirmation from W. Maier).
876 closes #64 (will do it after confirmation from W. Maier).
870
877
871 * IPython/irunner.py: New module to run scripts as if manually
878 * IPython/irunner.py: New module to run scripts as if manually
872 typed into an interactive environment, based on pexpect. After a
879 typed into an interactive environment, based on pexpect. After a
873 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
880 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
874 ipython-user list. Simple unittests in the tests/ directory.
881 ipython-user list. Simple unittests in the tests/ directory.
875
882
876 * tools/release: add Will Maier, OpenBSD port maintainer, to
883 * tools/release: add Will Maier, OpenBSD port maintainer, to
877 recepients list. We are now officially part of the OpenBSD ports:
884 recepients list. We are now officially part of the OpenBSD ports:
878 http://www.openbsd.org/ports.html ! Many thanks to Will for the
885 http://www.openbsd.org/ports.html ! Many thanks to Will for the
879 work.
886 work.
880
887
881 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
888 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
882
889
883 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
890 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
884 so that it doesn't break tkinter apps.
891 so that it doesn't break tkinter apps.
885
892
886 * IPython/iplib.py (_prefilter): fix bug where aliases would
893 * IPython/iplib.py (_prefilter): fix bug where aliases would
887 shadow variables when autocall was fully off. Reported by SAGE
894 shadow variables when autocall was fully off. Reported by SAGE
888 author William Stein.
895 author William Stein.
889
896
890 * IPython/OInspect.py (Inspector.__init__): add a flag to control
897 * IPython/OInspect.py (Inspector.__init__): add a flag to control
891 at what detail level strings are computed when foo? is requested.
898 at what detail level strings are computed when foo? is requested.
892 This allows users to ask for example that the string form of an
899 This allows users to ask for example that the string form of an
893 object is only computed when foo?? is called, or even never, by
900 object is only computed when foo?? is called, or even never, by
894 setting the object_info_string_level >= 2 in the configuration
901 setting the object_info_string_level >= 2 in the configuration
895 file. This new option has been added and documented. After a
902 file. This new option has been added and documented. After a
896 request by SAGE to be able to control the printing of very large
903 request by SAGE to be able to control the printing of very large
897 objects more easily.
904 objects more easily.
898
905
899 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
906 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
900
907
901 * IPython/ipmaker.py (make_IPython): remove the ipython call path
908 * IPython/ipmaker.py (make_IPython): remove the ipython call path
902 from sys.argv, to be 100% consistent with how Python itself works
909 from sys.argv, to be 100% consistent with how Python itself works
903 (as seen for example with python -i file.py). After a bug report
910 (as seen for example with python -i file.py). After a bug report
904 by Jeffrey Collins.
911 by Jeffrey Collins.
905
912
906 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
913 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
907 nasty bug which was preventing custom namespaces with -pylab,
914 nasty bug which was preventing custom namespaces with -pylab,
908 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
915 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
909 compatibility (long gone from mpl).
916 compatibility (long gone from mpl).
910
917
911 * IPython/ipapi.py (make_session): name change: create->make. We
918 * IPython/ipapi.py (make_session): name change: create->make. We
912 use make in other places (ipmaker,...), it's shorter and easier to
919 use make in other places (ipmaker,...), it's shorter and easier to
913 type and say, etc. I'm trying to clean things before 0.7.2 so
920 type and say, etc. I'm trying to clean things before 0.7.2 so
914 that I can keep things stable wrt to ipapi in the chainsaw branch.
921 that I can keep things stable wrt to ipapi in the chainsaw branch.
915
922
916 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
923 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
917 python-mode recognizes our debugger mode. Add support for
924 python-mode recognizes our debugger mode. Add support for
918 autoindent inside (X)emacs. After a patch sent in by Jin Liu
925 autoindent inside (X)emacs. After a patch sent in by Jin Liu
919 <m.liu.jin-AT-gmail.com> originally written by
926 <m.liu.jin-AT-gmail.com> originally written by
920 doxgen-AT-newsmth.net (with minor modifications for xemacs
927 doxgen-AT-newsmth.net (with minor modifications for xemacs
921 compatibility)
928 compatibility)
922
929
923 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
930 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
924 tracebacks when walking the stack so that the stack tracking system
931 tracebacks when walking the stack so that the stack tracking system
925 in emacs' python-mode can identify the frames correctly.
932 in emacs' python-mode can identify the frames correctly.
926
933
927 * IPython/ipmaker.py (make_IPython): make the internal (and
934 * IPython/ipmaker.py (make_IPython): make the internal (and
928 default config) autoedit_syntax value false by default. Too many
935 default config) autoedit_syntax value false by default. Too many
929 users have complained to me (both on and off-list) about problems
936 users have complained to me (both on and off-list) about problems
930 with this option being on by default, so I'm making it default to
937 with this option being on by default, so I'm making it default to
931 off. It can still be enabled by anyone via the usual mechanisms.
938 off. It can still be enabled by anyone via the usual mechanisms.
932
939
933 * IPython/completer.py (Completer.attr_matches): add support for
940 * IPython/completer.py (Completer.attr_matches): add support for
934 PyCrust-style _getAttributeNames magic method. Patch contributed
941 PyCrust-style _getAttributeNames magic method. Patch contributed
935 by <mscott-AT-goldenspud.com>. Closes #50.
942 by <mscott-AT-goldenspud.com>. Closes #50.
936
943
937 * IPython/iplib.py (InteractiveShell.__init__): remove the
944 * IPython/iplib.py (InteractiveShell.__init__): remove the
938 deletion of exit/quit from __builtin__, which can break
945 deletion of exit/quit from __builtin__, which can break
939 third-party tools like the Zope debugging console. The
946 third-party tools like the Zope debugging console. The
940 %exit/%quit magics remain. In general, it's probably a good idea
947 %exit/%quit magics remain. In general, it's probably a good idea
941 not to delete anything from __builtin__, since we never know what
948 not to delete anything from __builtin__, since we never know what
942 that will break. In any case, python now (for 2.5) will support
949 that will break. In any case, python now (for 2.5) will support
943 'real' exit/quit, so this issue is moot. Closes #55.
950 'real' exit/quit, so this issue is moot. Closes #55.
944
951
945 * IPython/genutils.py (with_obj): rename the 'with' function to
952 * IPython/genutils.py (with_obj): rename the 'with' function to
946 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
953 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
947 becomes a language keyword. Closes #53.
954 becomes a language keyword. Closes #53.
948
955
949 * IPython/FakeModule.py (FakeModule.__init__): add a proper
956 * IPython/FakeModule.py (FakeModule.__init__): add a proper
950 __file__ attribute to this so it fools more things into thinking
957 __file__ attribute to this so it fools more things into thinking
951 it is a real module. Closes #59.
958 it is a real module. Closes #59.
952
959
953 * IPython/Magic.py (magic_edit): add -n option to open the editor
960 * IPython/Magic.py (magic_edit): add -n option to open the editor
954 at a specific line number. After a patch by Stefan van der Walt.
961 at a specific line number. After a patch by Stefan van der Walt.
955
962
956 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
963 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
957
964
958 * IPython/iplib.py (edit_syntax_error): fix crash when for some
965 * IPython/iplib.py (edit_syntax_error): fix crash when for some
959 reason the file could not be opened. After automatic crash
966 reason the file could not be opened. After automatic crash
960 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
967 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
961 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
968 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
962 (_should_recompile): Don't fire editor if using %bg, since there
969 (_should_recompile): Don't fire editor if using %bg, since there
963 is no file in the first place. From the same report as above.
970 is no file in the first place. From the same report as above.
964 (raw_input): protect against faulty third-party prefilters. After
971 (raw_input): protect against faulty third-party prefilters. After
965 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
972 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
966 while running under SAGE.
973 while running under SAGE.
967
974
968 2006-05-23 Ville Vainio <vivainio@gmail.com>
975 2006-05-23 Ville Vainio <vivainio@gmail.com>
969
976
970 * ipapi.py: Stripped down ip.to_user_ns() to work only as
977 * ipapi.py: Stripped down ip.to_user_ns() to work only as
971 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
978 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
972 now returns None (again), unless dummy is specifically allowed by
979 now returns None (again), unless dummy is specifically allowed by
973 ipapi.get(allow_dummy=True).
980 ipapi.get(allow_dummy=True).
974
981
975 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
982 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
976
983
977 * IPython: remove all 2.2-compatibility objects and hacks from
984 * IPython: remove all 2.2-compatibility objects and hacks from
978 everywhere, since we only support 2.3 at this point. Docs
985 everywhere, since we only support 2.3 at this point. Docs
979 updated.
986 updated.
980
987
981 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
988 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
982 Anything requiring extra validation can be turned into a Python
989 Anything requiring extra validation can be turned into a Python
983 property in the future. I used a property for the db one b/c
990 property in the future. I used a property for the db one b/c
984 there was a nasty circularity problem with the initialization
991 there was a nasty circularity problem with the initialization
985 order, which right now I don't have time to clean up.
992 order, which right now I don't have time to clean up.
986
993
987 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
994 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
988 another locking bug reported by Jorgen. I'm not 100% sure though,
995 another locking bug reported by Jorgen. I'm not 100% sure though,
989 so more testing is needed...
996 so more testing is needed...
990
997
991 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
998 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
992
999
993 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1000 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
994 local variables from any routine in user code (typically executed
1001 local variables from any routine in user code (typically executed
995 with %run) directly into the interactive namespace. Very useful
1002 with %run) directly into the interactive namespace. Very useful
996 when doing complex debugging.
1003 when doing complex debugging.
997 (IPythonNotRunning): Changed the default None object to a dummy
1004 (IPythonNotRunning): Changed the default None object to a dummy
998 whose attributes can be queried as well as called without
1005 whose attributes can be queried as well as called without
999 exploding, to ease writing code which works transparently both in
1006 exploding, to ease writing code which works transparently both in
1000 and out of ipython and uses some of this API.
1007 and out of ipython and uses some of this API.
1001
1008
1002 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1009 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1003
1010
1004 * IPython/hooks.py (result_display): Fix the fact that our display
1011 * IPython/hooks.py (result_display): Fix the fact that our display
1005 hook was using str() instead of repr(), as the default python
1012 hook was using str() instead of repr(), as the default python
1006 console does. This had gone unnoticed b/c it only happened if
1013 console does. This had gone unnoticed b/c it only happened if
1007 %Pprint was off, but the inconsistency was there.
1014 %Pprint was off, but the inconsistency was there.
1008
1015
1009 2006-05-15 Ville Vainio <vivainio@gmail.com>
1016 2006-05-15 Ville Vainio <vivainio@gmail.com>
1010
1017
1011 * Oinspect.py: Only show docstring for nonexisting/binary files
1018 * Oinspect.py: Only show docstring for nonexisting/binary files
1012 when doing object??, closing ticket #62
1019 when doing object??, closing ticket #62
1013
1020
1014 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1021 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1015
1022
1016 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1023 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1017 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1024 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1018 was being released in a routine which hadn't checked if it had
1025 was being released in a routine which hadn't checked if it had
1019 been the one to acquire it.
1026 been the one to acquire it.
1020
1027
1021 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1028 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1022
1029
1023 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1030 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1024
1031
1025 2006-04-11 Ville Vainio <vivainio@gmail.com>
1032 2006-04-11 Ville Vainio <vivainio@gmail.com>
1026
1033
1027 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1034 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1028 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1035 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1029 prefilters, allowing stuff like magics and aliases in the file.
1036 prefilters, allowing stuff like magics and aliases in the file.
1030
1037
1031 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1038 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1032 added. Supported now are "%clear in" and "%clear out" (clear input and
1039 added. Supported now are "%clear in" and "%clear out" (clear input and
1033 output history, respectively). Also fixed CachedOutput.flush to
1040 output history, respectively). Also fixed CachedOutput.flush to
1034 properly flush the output cache.
1041 properly flush the output cache.
1035
1042
1036 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1043 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1037 half-success (and fail explicitly).
1044 half-success (and fail explicitly).
1038
1045
1039 2006-03-28 Ville Vainio <vivainio@gmail.com>
1046 2006-03-28 Ville Vainio <vivainio@gmail.com>
1040
1047
1041 * iplib.py: Fix quoting of aliases so that only argless ones
1048 * iplib.py: Fix quoting of aliases so that only argless ones
1042 are quoted
1049 are quoted
1043
1050
1044 2006-03-28 Ville Vainio <vivainio@gmail.com>
1051 2006-03-28 Ville Vainio <vivainio@gmail.com>
1045
1052
1046 * iplib.py: Quote aliases with spaces in the name.
1053 * iplib.py: Quote aliases with spaces in the name.
1047 "c:\program files\blah\bin" is now legal alias target.
1054 "c:\program files\blah\bin" is now legal alias target.
1048
1055
1049 * ext_rehashdir.py: Space no longer allowed as arg
1056 * ext_rehashdir.py: Space no longer allowed as arg
1050 separator, since space is legal in path names.
1057 separator, since space is legal in path names.
1051
1058
1052 2006-03-16 Ville Vainio <vivainio@gmail.com>
1059 2006-03-16 Ville Vainio <vivainio@gmail.com>
1053
1060
1054 * upgrade_dir.py: Take path.py from Extensions, correcting
1061 * upgrade_dir.py: Take path.py from Extensions, correcting
1055 %upgrade magic
1062 %upgrade magic
1056
1063
1057 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1064 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1058
1065
1059 * hooks.py: Only enclose editor binary in quotes if legal and
1066 * hooks.py: Only enclose editor binary in quotes if legal and
1060 necessary (space in the name, and is an existing file). Fixes a bug
1067 necessary (space in the name, and is an existing file). Fixes a bug
1061 reported by Zachary Pincus.
1068 reported by Zachary Pincus.
1062
1069
1063 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1070 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1064
1071
1065 * Manual: thanks to a tip on proper color handling for Emacs, by
1072 * Manual: thanks to a tip on proper color handling for Emacs, by
1066 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1073 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1067
1074
1068 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1075 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1069 by applying the provided patch. Thanks to Liu Jin
1076 by applying the provided patch. Thanks to Liu Jin
1070 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1077 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1071 XEmacs/Linux, I'm trusting the submitter that it actually helps
1078 XEmacs/Linux, I'm trusting the submitter that it actually helps
1072 under win32/GNU Emacs. Will revisit if any problems are reported.
1079 under win32/GNU Emacs. Will revisit if any problems are reported.
1073
1080
1074 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1081 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1075
1082
1076 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1083 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1077 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1084 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1078
1085
1079 2006-03-12 Ville Vainio <vivainio@gmail.com>
1086 2006-03-12 Ville Vainio <vivainio@gmail.com>
1080
1087
1081 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1088 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1082 Torsten Marek.
1089 Torsten Marek.
1083
1090
1084 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1091 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1085
1092
1086 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1093 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1087 line ranges works again.
1094 line ranges works again.
1088
1095
1089 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1096 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1090
1097
1091 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1098 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1092 and friends, after a discussion with Zach Pincus on ipython-user.
1099 and friends, after a discussion with Zach Pincus on ipython-user.
1093 I'm not 100% sure, but after thinking about it quite a bit, it may
1100 I'm not 100% sure, but after thinking about it quite a bit, it may
1094 be OK. Testing with the multithreaded shells didn't reveal any
1101 be OK. Testing with the multithreaded shells didn't reveal any
1095 problems, but let's keep an eye out.
1102 problems, but let's keep an eye out.
1096
1103
1097 In the process, I fixed a few things which were calling
1104 In the process, I fixed a few things which were calling
1098 self.InteractiveTB() directly (like safe_execfile), which is a
1105 self.InteractiveTB() directly (like safe_execfile), which is a
1099 mistake: ALL exception reporting should be done by calling
1106 mistake: ALL exception reporting should be done by calling
1100 self.showtraceback(), which handles state and tab-completion and
1107 self.showtraceback(), which handles state and tab-completion and
1101 more.
1108 more.
1102
1109
1103 2006-03-01 Ville Vainio <vivainio@gmail.com>
1110 2006-03-01 Ville Vainio <vivainio@gmail.com>
1104
1111
1105 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1112 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1106 To use, do "from ipipe import *".
1113 To use, do "from ipipe import *".
1107
1114
1108 2006-02-24 Ville Vainio <vivainio@gmail.com>
1115 2006-02-24 Ville Vainio <vivainio@gmail.com>
1109
1116
1110 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1117 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1111 "cleanly" and safely than the older upgrade mechanism.
1118 "cleanly" and safely than the older upgrade mechanism.
1112
1119
1113 2006-02-21 Ville Vainio <vivainio@gmail.com>
1120 2006-02-21 Ville Vainio <vivainio@gmail.com>
1114
1121
1115 * Magic.py: %save works again.
1122 * Magic.py: %save works again.
1116
1123
1117 2006-02-15 Ville Vainio <vivainio@gmail.com>
1124 2006-02-15 Ville Vainio <vivainio@gmail.com>
1118
1125
1119 * Magic.py: %Pprint works again
1126 * Magic.py: %Pprint works again
1120
1127
1121 * Extensions/ipy_sane_defaults.py: Provide everything provided
1128 * Extensions/ipy_sane_defaults.py: Provide everything provided
1122 in default ipythonrc, to make it possible to have a completely empty
1129 in default ipythonrc, to make it possible to have a completely empty
1123 ipythonrc (and thus completely rc-file free configuration)
1130 ipythonrc (and thus completely rc-file free configuration)
1124
1131
1125 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1132 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1126
1133
1127 * IPython/hooks.py (editor): quote the call to the editor command,
1134 * IPython/hooks.py (editor): quote the call to the editor command,
1128 to allow commands with spaces in them. Problem noted by watching
1135 to allow commands with spaces in them. Problem noted by watching
1129 Ian Oswald's video about textpad under win32 at
1136 Ian Oswald's video about textpad under win32 at
1130 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1137 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1131
1138
1132 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1139 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1133 describing magics (we haven't used @ for a loong time).
1140 describing magics (we haven't used @ for a loong time).
1134
1141
1135 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1142 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1136 contributed by marienz to close
1143 contributed by marienz to close
1137 http://www.scipy.net/roundup/ipython/issue53.
1144 http://www.scipy.net/roundup/ipython/issue53.
1138
1145
1139 2006-02-10 Ville Vainio <vivainio@gmail.com>
1146 2006-02-10 Ville Vainio <vivainio@gmail.com>
1140
1147
1141 * genutils.py: getoutput now works in win32 too
1148 * genutils.py: getoutput now works in win32 too
1142
1149
1143 * completer.py: alias and magic completion only invoked
1150 * completer.py: alias and magic completion only invoked
1144 at the first "item" in the line, to avoid "cd %store"
1151 at the first "item" in the line, to avoid "cd %store"
1145 nonsense.
1152 nonsense.
1146
1153
1147 2006-02-09 Ville Vainio <vivainio@gmail.com>
1154 2006-02-09 Ville Vainio <vivainio@gmail.com>
1148
1155
1149 * test/*: Added a unit testing framework (finally).
1156 * test/*: Added a unit testing framework (finally).
1150 '%run runtests.py' to run test_*.
1157 '%run runtests.py' to run test_*.
1151
1158
1152 * ipapi.py: Exposed runlines and set_custom_exc
1159 * ipapi.py: Exposed runlines and set_custom_exc
1153
1160
1154 2006-02-07 Ville Vainio <vivainio@gmail.com>
1161 2006-02-07 Ville Vainio <vivainio@gmail.com>
1155
1162
1156 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1163 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1157 instead use "f(1 2)" as before.
1164 instead use "f(1 2)" as before.
1158
1165
1159 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1166 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1160
1167
1161 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1168 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1162 facilities, for demos processed by the IPython input filter
1169 facilities, for demos processed by the IPython input filter
1163 (IPythonDemo), and for running a script one-line-at-a-time as a
1170 (IPythonDemo), and for running a script one-line-at-a-time as a
1164 demo, both for pure Python (LineDemo) and for IPython-processed
1171 demo, both for pure Python (LineDemo) and for IPython-processed
1165 input (IPythonLineDemo). After a request by Dave Kohel, from the
1172 input (IPythonLineDemo). After a request by Dave Kohel, from the
1166 SAGE team.
1173 SAGE team.
1167 (Demo.edit): added an edit() method to the demo objects, to edit
1174 (Demo.edit): added an edit() method to the demo objects, to edit
1168 the in-memory copy of the last executed block.
1175 the in-memory copy of the last executed block.
1169
1176
1170 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1177 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1171 processing to %edit, %macro and %save. These commands can now be
1178 processing to %edit, %macro and %save. These commands can now be
1172 invoked on the unprocessed input as it was typed by the user
1179 invoked on the unprocessed input as it was typed by the user
1173 (without any prefilters applied). After requests by the SAGE team
1180 (without any prefilters applied). After requests by the SAGE team
1174 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1181 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1175
1182
1176 2006-02-01 Ville Vainio <vivainio@gmail.com>
1183 2006-02-01 Ville Vainio <vivainio@gmail.com>
1177
1184
1178 * setup.py, eggsetup.py: easy_install ipython==dev works
1185 * setup.py, eggsetup.py: easy_install ipython==dev works
1179 correctly now (on Linux)
1186 correctly now (on Linux)
1180
1187
1181 * ipy_user_conf,ipmaker: user config changes, removed spurious
1188 * ipy_user_conf,ipmaker: user config changes, removed spurious
1182 warnings
1189 warnings
1183
1190
1184 * iplib: if rc.banner is string, use it as is.
1191 * iplib: if rc.banner is string, use it as is.
1185
1192
1186 * Magic: %pycat accepts a string argument and pages it's contents.
1193 * Magic: %pycat accepts a string argument and pages it's contents.
1187
1194
1188
1195
1189 2006-01-30 Ville Vainio <vivainio@gmail.com>
1196 2006-01-30 Ville Vainio <vivainio@gmail.com>
1190
1197
1191 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1198 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1192 Now %store and bookmarks work through PickleShare, meaning that
1199 Now %store and bookmarks work through PickleShare, meaning that
1193 concurrent access is possible and all ipython sessions see the
1200 concurrent access is possible and all ipython sessions see the
1194 same database situation all the time, instead of snapshot of
1201 same database situation all the time, instead of snapshot of
1195 the situation when the session was started. Hence, %bookmark
1202 the situation when the session was started. Hence, %bookmark
1196 results are immediately accessible from othes sessions. The database
1203 results are immediately accessible from othes sessions. The database
1197 is also available for use by user extensions. See:
1204 is also available for use by user extensions. See:
1198 http://www.python.org/pypi/pickleshare
1205 http://www.python.org/pypi/pickleshare
1199
1206
1200 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1207 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1201
1208
1202 * aliases can now be %store'd
1209 * aliases can now be %store'd
1203
1210
1204 * path.py moved to Extensions so that pickleshare does not need
1211 * path.py moved to Extensions so that pickleshare does not need
1205 IPython-specific import. Extensions added to pythonpath right
1212 IPython-specific import. Extensions added to pythonpath right
1206 at __init__.
1213 at __init__.
1207
1214
1208 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1215 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1209 called with _ip.system and the pre-transformed command string.
1216 called with _ip.system and the pre-transformed command string.
1210
1217
1211 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1218 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1212
1219
1213 * IPython/iplib.py (interact): Fix that we were not catching
1220 * IPython/iplib.py (interact): Fix that we were not catching
1214 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1221 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1215 logic here had to change, but it's fixed now.
1222 logic here had to change, but it's fixed now.
1216
1223
1217 2006-01-29 Ville Vainio <vivainio@gmail.com>
1224 2006-01-29 Ville Vainio <vivainio@gmail.com>
1218
1225
1219 * iplib.py: Try to import pyreadline on Windows.
1226 * iplib.py: Try to import pyreadline on Windows.
1220
1227
1221 2006-01-27 Ville Vainio <vivainio@gmail.com>
1228 2006-01-27 Ville Vainio <vivainio@gmail.com>
1222
1229
1223 * iplib.py: Expose ipapi as _ip in builtin namespace.
1230 * iplib.py: Expose ipapi as _ip in builtin namespace.
1224 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1231 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1225 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1232 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1226 syntax now produce _ip.* variant of the commands.
1233 syntax now produce _ip.* variant of the commands.
1227
1234
1228 * "_ip.options().autoedit_syntax = 2" automatically throws
1235 * "_ip.options().autoedit_syntax = 2" automatically throws
1229 user to editor for syntax error correction without prompting.
1236 user to editor for syntax error correction without prompting.
1230
1237
1231 2006-01-27 Ville Vainio <vivainio@gmail.com>
1238 2006-01-27 Ville Vainio <vivainio@gmail.com>
1232
1239
1233 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1240 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1234 'ipython' at argv[0]) executed through command line.
1241 'ipython' at argv[0]) executed through command line.
1235 NOTE: this DEPRECATES calling ipython with multiple scripts
1242 NOTE: this DEPRECATES calling ipython with multiple scripts
1236 ("ipython a.py b.py c.py")
1243 ("ipython a.py b.py c.py")
1237
1244
1238 * iplib.py, hooks.py: Added configurable input prefilter,
1245 * iplib.py, hooks.py: Added configurable input prefilter,
1239 named 'input_prefilter'. See ext_rescapture.py for example
1246 named 'input_prefilter'. See ext_rescapture.py for example
1240 usage.
1247 usage.
1241
1248
1242 * ext_rescapture.py, Magic.py: Better system command output capture
1249 * ext_rescapture.py, Magic.py: Better system command output capture
1243 through 'var = !ls' (deprecates user-visible %sc). Same notation
1250 through 'var = !ls' (deprecates user-visible %sc). Same notation
1244 applies for magics, 'var = %alias' assigns alias list to var.
1251 applies for magics, 'var = %alias' assigns alias list to var.
1245
1252
1246 * ipapi.py: added meta() for accessing extension-usable data store.
1253 * ipapi.py: added meta() for accessing extension-usable data store.
1247
1254
1248 * iplib.py: added InteractiveShell.getapi(). New magics should be
1255 * iplib.py: added InteractiveShell.getapi(). New magics should be
1249 written doing self.getapi() instead of using the shell directly.
1256 written doing self.getapi() instead of using the shell directly.
1250
1257
1251 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1258 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1252 %store foo >> ~/myfoo.txt to store variables to files (in clean
1259 %store foo >> ~/myfoo.txt to store variables to files (in clean
1253 textual form, not a restorable pickle).
1260 textual form, not a restorable pickle).
1254
1261
1255 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1262 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1256
1263
1257 * usage.py, Magic.py: added %quickref
1264 * usage.py, Magic.py: added %quickref
1258
1265
1259 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1266 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1260
1267
1261 * GetoptErrors when invoking magics etc. with wrong args
1268 * GetoptErrors when invoking magics etc. with wrong args
1262 are now more helpful:
1269 are now more helpful:
1263 GetoptError: option -l not recognized (allowed: "qb" )
1270 GetoptError: option -l not recognized (allowed: "qb" )
1264
1271
1265 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1272 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1266
1273
1267 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1274 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1268 computationally intensive blocks don't appear to stall the demo.
1275 computationally intensive blocks don't appear to stall the demo.
1269
1276
1270 2006-01-24 Ville Vainio <vivainio@gmail.com>
1277 2006-01-24 Ville Vainio <vivainio@gmail.com>
1271
1278
1272 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1279 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1273 value to manipulate resulting history entry.
1280 value to manipulate resulting history entry.
1274
1281
1275 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1282 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1276 to instance methods of IPApi class, to make extending an embedded
1283 to instance methods of IPApi class, to make extending an embedded
1277 IPython feasible. See ext_rehashdir.py for example usage.
1284 IPython feasible. See ext_rehashdir.py for example usage.
1278
1285
1279 * Merged 1071-1076 from branches/0.7.1
1286 * Merged 1071-1076 from branches/0.7.1
1280
1287
1281
1288
1282 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1289 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1283
1290
1284 * tools/release (daystamp): Fix build tools to use the new
1291 * tools/release (daystamp): Fix build tools to use the new
1285 eggsetup.py script to build lightweight eggs.
1292 eggsetup.py script to build lightweight eggs.
1286
1293
1287 * Applied changesets 1062 and 1064 before 0.7.1 release.
1294 * Applied changesets 1062 and 1064 before 0.7.1 release.
1288
1295
1289 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1296 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1290 see the raw input history (without conversions like %ls ->
1297 see the raw input history (without conversions like %ls ->
1291 ipmagic("ls")). After a request from W. Stein, SAGE
1298 ipmagic("ls")). After a request from W. Stein, SAGE
1292 (http://modular.ucsd.edu/sage) developer. This information is
1299 (http://modular.ucsd.edu/sage) developer. This information is
1293 stored in the input_hist_raw attribute of the IPython instance, so
1300 stored in the input_hist_raw attribute of the IPython instance, so
1294 developers can access it if needed (it's an InputList instance).
1301 developers can access it if needed (it's an InputList instance).
1295
1302
1296 * Versionstring = 0.7.2.svn
1303 * Versionstring = 0.7.2.svn
1297
1304
1298 * eggsetup.py: A separate script for constructing eggs, creates
1305 * eggsetup.py: A separate script for constructing eggs, creates
1299 proper launch scripts even on Windows (an .exe file in
1306 proper launch scripts even on Windows (an .exe file in
1300 \python24\scripts).
1307 \python24\scripts).
1301
1308
1302 * ipapi.py: launch_new_instance, launch entry point needed for the
1309 * ipapi.py: launch_new_instance, launch entry point needed for the
1303 egg.
1310 egg.
1304
1311
1305 2006-01-23 Ville Vainio <vivainio@gmail.com>
1312 2006-01-23 Ville Vainio <vivainio@gmail.com>
1306
1313
1307 * Added %cpaste magic for pasting python code
1314 * Added %cpaste magic for pasting python code
1308
1315
1309 2006-01-22 Ville Vainio <vivainio@gmail.com>
1316 2006-01-22 Ville Vainio <vivainio@gmail.com>
1310
1317
1311 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1318 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1312
1319
1313 * Versionstring = 0.7.2.svn
1320 * Versionstring = 0.7.2.svn
1314
1321
1315 * eggsetup.py: A separate script for constructing eggs, creates
1322 * eggsetup.py: A separate script for constructing eggs, creates
1316 proper launch scripts even on Windows (an .exe file in
1323 proper launch scripts even on Windows (an .exe file in
1317 \python24\scripts).
1324 \python24\scripts).
1318
1325
1319 * ipapi.py: launch_new_instance, launch entry point needed for the
1326 * ipapi.py: launch_new_instance, launch entry point needed for the
1320 egg.
1327 egg.
1321
1328
1322 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1329 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1323
1330
1324 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1331 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1325 %pfile foo would print the file for foo even if it was a binary.
1332 %pfile foo would print the file for foo even if it was a binary.
1326 Now, extensions '.so' and '.dll' are skipped.
1333 Now, extensions '.so' and '.dll' are skipped.
1327
1334
1328 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1335 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1329 bug, where macros would fail in all threaded modes. I'm not 100%
1336 bug, where macros would fail in all threaded modes. I'm not 100%
1330 sure, so I'm going to put out an rc instead of making a release
1337 sure, so I'm going to put out an rc instead of making a release
1331 today, and wait for feedback for at least a few days.
1338 today, and wait for feedback for at least a few days.
1332
1339
1333 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1340 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1334 it...) the handling of pasting external code with autoindent on.
1341 it...) the handling of pasting external code with autoindent on.
1335 To get out of a multiline input, the rule will appear for most
1342 To get out of a multiline input, the rule will appear for most
1336 users unchanged: two blank lines or change the indent level
1343 users unchanged: two blank lines or change the indent level
1337 proposed by IPython. But there is a twist now: you can
1344 proposed by IPython. But there is a twist now: you can
1338 add/subtract only *one or two spaces*. If you add/subtract three
1345 add/subtract only *one or two spaces*. If you add/subtract three
1339 or more (unless you completely delete the line), IPython will
1346 or more (unless you completely delete the line), IPython will
1340 accept that line, and you'll need to enter a second one of pure
1347 accept that line, and you'll need to enter a second one of pure
1341 whitespace. I know it sounds complicated, but I can't find a
1348 whitespace. I know it sounds complicated, but I can't find a
1342 different solution that covers all the cases, with the right
1349 different solution that covers all the cases, with the right
1343 heuristics. Hopefully in actual use, nobody will really notice
1350 heuristics. Hopefully in actual use, nobody will really notice
1344 all these strange rules and things will 'just work'.
1351 all these strange rules and things will 'just work'.
1345
1352
1346 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1353 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1347
1354
1348 * IPython/iplib.py (interact): catch exceptions which can be
1355 * IPython/iplib.py (interact): catch exceptions which can be
1349 triggered asynchronously by signal handlers. Thanks to an
1356 triggered asynchronously by signal handlers. Thanks to an
1350 automatic crash report, submitted by Colin Kingsley
1357 automatic crash report, submitted by Colin Kingsley
1351 <tercel-AT-gentoo.org>.
1358 <tercel-AT-gentoo.org>.
1352
1359
1353 2006-01-20 Ville Vainio <vivainio@gmail.com>
1360 2006-01-20 Ville Vainio <vivainio@gmail.com>
1354
1361
1355 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1362 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1356 (%rehashdir, very useful, try it out) of how to extend ipython
1363 (%rehashdir, very useful, try it out) of how to extend ipython
1357 with new magics. Also added Extensions dir to pythonpath to make
1364 with new magics. Also added Extensions dir to pythonpath to make
1358 importing extensions easy.
1365 importing extensions easy.
1359
1366
1360 * %store now complains when trying to store interactively declared
1367 * %store now complains when trying to store interactively declared
1361 classes / instances of those classes.
1368 classes / instances of those classes.
1362
1369
1363 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1370 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1364 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1371 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1365 if they exist, and ipy_user_conf.py with some defaults is created for
1372 if they exist, and ipy_user_conf.py with some defaults is created for
1366 the user.
1373 the user.
1367
1374
1368 * Startup rehashing done by the config file, not InterpreterExec.
1375 * Startup rehashing done by the config file, not InterpreterExec.
1369 This means system commands are available even without selecting the
1376 This means system commands are available even without selecting the
1370 pysh profile. It's the sensible default after all.
1377 pysh profile. It's the sensible default after all.
1371
1378
1372 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1379 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1373
1380
1374 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1381 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1375 multiline code with autoindent on working. But I am really not
1382 multiline code with autoindent on working. But I am really not
1376 sure, so this needs more testing. Will commit a debug-enabled
1383 sure, so this needs more testing. Will commit a debug-enabled
1377 version for now, while I test it some more, so that Ville and
1384 version for now, while I test it some more, so that Ville and
1378 others may also catch any problems. Also made
1385 others may also catch any problems. Also made
1379 self.indent_current_str() a method, to ensure that there's no
1386 self.indent_current_str() a method, to ensure that there's no
1380 chance of the indent space count and the corresponding string
1387 chance of the indent space count and the corresponding string
1381 falling out of sync. All code needing the string should just call
1388 falling out of sync. All code needing the string should just call
1382 the method.
1389 the method.
1383
1390
1384 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1391 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1385
1392
1386 * IPython/Magic.py (magic_edit): fix check for when users don't
1393 * IPython/Magic.py (magic_edit): fix check for when users don't
1387 save their output files, the try/except was in the wrong section.
1394 save their output files, the try/except was in the wrong section.
1388
1395
1389 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1396 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1390
1397
1391 * IPython/Magic.py (magic_run): fix __file__ global missing from
1398 * IPython/Magic.py (magic_run): fix __file__ global missing from
1392 script's namespace when executed via %run. After a report by
1399 script's namespace when executed via %run. After a report by
1393 Vivian.
1400 Vivian.
1394
1401
1395 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1402 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1396 when using python 2.4. The parent constructor changed in 2.4, and
1403 when using python 2.4. The parent constructor changed in 2.4, and
1397 we need to track it directly (we can't call it, as it messes up
1404 we need to track it directly (we can't call it, as it messes up
1398 readline and tab-completion inside our pdb would stop working).
1405 readline and tab-completion inside our pdb would stop working).
1399 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1406 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1400
1407
1401 2006-01-16 Ville Vainio <vivainio@gmail.com>
1408 2006-01-16 Ville Vainio <vivainio@gmail.com>
1402
1409
1403 * Ipython/magic.py: Reverted back to old %edit functionality
1410 * Ipython/magic.py: Reverted back to old %edit functionality
1404 that returns file contents on exit.
1411 that returns file contents on exit.
1405
1412
1406 * IPython/path.py: Added Jason Orendorff's "path" module to
1413 * IPython/path.py: Added Jason Orendorff's "path" module to
1407 IPython tree, http://www.jorendorff.com/articles/python/path/.
1414 IPython tree, http://www.jorendorff.com/articles/python/path/.
1408 You can get path objects conveniently through %sc, and !!, e.g.:
1415 You can get path objects conveniently through %sc, and !!, e.g.:
1409 sc files=ls
1416 sc files=ls
1410 for p in files.paths: # or files.p
1417 for p in files.paths: # or files.p
1411 print p,p.mtime
1418 print p,p.mtime
1412
1419
1413 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1420 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1414 now work again without considering the exclusion regexp -
1421 now work again without considering the exclusion regexp -
1415 hence, things like ',foo my/path' turn to 'foo("my/path")'
1422 hence, things like ',foo my/path' turn to 'foo("my/path")'
1416 instead of syntax error.
1423 instead of syntax error.
1417
1424
1418
1425
1419 2006-01-14 Ville Vainio <vivainio@gmail.com>
1426 2006-01-14 Ville Vainio <vivainio@gmail.com>
1420
1427
1421 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1428 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1422 ipapi decorators for python 2.4 users, options() provides access to rc
1429 ipapi decorators for python 2.4 users, options() provides access to rc
1423 data.
1430 data.
1424
1431
1425 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1432 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1426 as path separators (even on Linux ;-). Space character after
1433 as path separators (even on Linux ;-). Space character after
1427 backslash (as yielded by tab completer) is still space;
1434 backslash (as yielded by tab completer) is still space;
1428 "%cd long\ name" works as expected.
1435 "%cd long\ name" works as expected.
1429
1436
1430 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1437 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1431 as "chain of command", with priority. API stays the same,
1438 as "chain of command", with priority. API stays the same,
1432 TryNext exception raised by a hook function signals that
1439 TryNext exception raised by a hook function signals that
1433 current hook failed and next hook should try handling it, as
1440 current hook failed and next hook should try handling it, as
1434 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
1441 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
1435 requested configurable display hook, which is now implemented.
1442 requested configurable display hook, which is now implemented.
1436
1443
1437 2006-01-13 Ville Vainio <vivainio@gmail.com>
1444 2006-01-13 Ville Vainio <vivainio@gmail.com>
1438
1445
1439 * IPython/platutils*.py: platform specific utility functions,
1446 * IPython/platutils*.py: platform specific utility functions,
1440 so far only set_term_title is implemented (change terminal
1447 so far only set_term_title is implemented (change terminal
1441 label in windowing systems). %cd now changes the title to
1448 label in windowing systems). %cd now changes the title to
1442 current dir.
1449 current dir.
1443
1450
1444 * IPython/Release.py: Added myself to "authors" list,
1451 * IPython/Release.py: Added myself to "authors" list,
1445 had to create new files.
1452 had to create new files.
1446
1453
1447 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1454 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1448 shell escape; not a known bug but had potential to be one in the
1455 shell escape; not a known bug but had potential to be one in the
1449 future.
1456 future.
1450
1457
1451 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1458 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1452 extension API for IPython! See the module for usage example. Fix
1459 extension API for IPython! See the module for usage example. Fix
1453 OInspect for docstring-less magic functions.
1460 OInspect for docstring-less magic functions.
1454
1461
1455
1462
1456 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1463 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1457
1464
1458 * IPython/iplib.py (raw_input): temporarily deactivate all
1465 * IPython/iplib.py (raw_input): temporarily deactivate all
1459 attempts at allowing pasting of code with autoindent on. It
1466 attempts at allowing pasting of code with autoindent on. It
1460 introduced bugs (reported by Prabhu) and I can't seem to find a
1467 introduced bugs (reported by Prabhu) and I can't seem to find a
1461 robust combination which works in all cases. Will have to revisit
1468 robust combination which works in all cases. Will have to revisit
1462 later.
1469 later.
1463
1470
1464 * IPython/genutils.py: remove isspace() function. We've dropped
1471 * IPython/genutils.py: remove isspace() function. We've dropped
1465 2.2 compatibility, so it's OK to use the string method.
1472 2.2 compatibility, so it's OK to use the string method.
1466
1473
1467 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1474 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1468
1475
1469 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1476 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1470 matching what NOT to autocall on, to include all python binary
1477 matching what NOT to autocall on, to include all python binary
1471 operators (including things like 'and', 'or', 'is' and 'in').
1478 operators (including things like 'and', 'or', 'is' and 'in').
1472 Prompted by a bug report on 'foo & bar', but I realized we had
1479 Prompted by a bug report on 'foo & bar', but I realized we had
1473 many more potential bug cases with other operators. The regexp is
1480 many more potential bug cases with other operators. The regexp is
1474 self.re_exclude_auto, it's fairly commented.
1481 self.re_exclude_auto, it's fairly commented.
1475
1482
1476 2006-01-12 Ville Vainio <vivainio@gmail.com>
1483 2006-01-12 Ville Vainio <vivainio@gmail.com>
1477
1484
1478 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1485 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1479 Prettified and hardened string/backslash quoting with ipsystem(),
1486 Prettified and hardened string/backslash quoting with ipsystem(),
1480 ipalias() and ipmagic(). Now even \ characters are passed to
1487 ipalias() and ipmagic(). Now even \ characters are passed to
1481 %magics, !shell escapes and aliases exactly as they are in the
1488 %magics, !shell escapes and aliases exactly as they are in the
1482 ipython command line. Should improve backslash experience,
1489 ipython command line. Should improve backslash experience,
1483 particularly in Windows (path delimiter for some commands that
1490 particularly in Windows (path delimiter for some commands that
1484 won't understand '/'), but Unix benefits as well (regexps). %cd
1491 won't understand '/'), but Unix benefits as well (regexps). %cd
1485 magic still doesn't support backslash path delimiters, though. Also
1492 magic still doesn't support backslash path delimiters, though. Also
1486 deleted all pretense of supporting multiline command strings in
1493 deleted all pretense of supporting multiline command strings in
1487 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1494 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1488
1495
1489 * doc/build_doc_instructions.txt added. Documentation on how to
1496 * doc/build_doc_instructions.txt added. Documentation on how to
1490 use doc/update_manual.py, added yesterday. Both files contributed
1497 use doc/update_manual.py, added yesterday. Both files contributed
1491 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1498 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1492 doc/*.sh for deprecation at a later date.
1499 doc/*.sh for deprecation at a later date.
1493
1500
1494 * /ipython.py Added ipython.py to root directory for
1501 * /ipython.py Added ipython.py to root directory for
1495 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1502 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1496 ipython.py) and development convenience (no need to keep doing
1503 ipython.py) and development convenience (no need to keep doing
1497 "setup.py install" between changes).
1504 "setup.py install" between changes).
1498
1505
1499 * Made ! and !! shell escapes work (again) in multiline expressions:
1506 * Made ! and !! shell escapes work (again) in multiline expressions:
1500 if 1:
1507 if 1:
1501 !ls
1508 !ls
1502 !!ls
1509 !!ls
1503
1510
1504 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1511 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1505
1512
1506 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1513 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1507 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1514 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1508 module in case-insensitive installation. Was causing crashes
1515 module in case-insensitive installation. Was causing crashes
1509 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1516 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1510
1517
1511 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1518 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1512 <marienz-AT-gentoo.org>, closes
1519 <marienz-AT-gentoo.org>, closes
1513 http://www.scipy.net/roundup/ipython/issue51.
1520 http://www.scipy.net/roundup/ipython/issue51.
1514
1521
1515 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1522 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1516
1523
1517 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1524 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1518 problem of excessive CPU usage under *nix and keyboard lag under
1525 problem of excessive CPU usage under *nix and keyboard lag under
1519 win32.
1526 win32.
1520
1527
1521 2006-01-10 *** Released version 0.7.0
1528 2006-01-10 *** Released version 0.7.0
1522
1529
1523 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1530 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1524
1531
1525 * IPython/Release.py (revision): tag version number to 0.7.0,
1532 * IPython/Release.py (revision): tag version number to 0.7.0,
1526 ready for release.
1533 ready for release.
1527
1534
1528 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1535 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1529 it informs the user of the name of the temp. file used. This can
1536 it informs the user of the name of the temp. file used. This can
1530 help if you decide later to reuse that same file, so you know
1537 help if you decide later to reuse that same file, so you know
1531 where to copy the info from.
1538 where to copy the info from.
1532
1539
1533 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1540 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1534
1541
1535 * setup_bdist_egg.py: little script to build an egg. Added
1542 * setup_bdist_egg.py: little script to build an egg. Added
1536 support in the release tools as well.
1543 support in the release tools as well.
1537
1544
1538 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1545 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1539
1546
1540 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1547 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1541 version selection (new -wxversion command line and ipythonrc
1548 version selection (new -wxversion command line and ipythonrc
1542 parameter). Patch contributed by Arnd Baecker
1549 parameter). Patch contributed by Arnd Baecker
1543 <arnd.baecker-AT-web.de>.
1550 <arnd.baecker-AT-web.de>.
1544
1551
1545 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1552 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1546 embedded instances, for variables defined at the interactive
1553 embedded instances, for variables defined at the interactive
1547 prompt of the embedded ipython. Reported by Arnd.
1554 prompt of the embedded ipython. Reported by Arnd.
1548
1555
1549 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1556 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1550 it can be used as a (stateful) toggle, or with a direct parameter.
1557 it can be used as a (stateful) toggle, or with a direct parameter.
1551
1558
1552 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1559 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1553 could be triggered in certain cases and cause the traceback
1560 could be triggered in certain cases and cause the traceback
1554 printer not to work.
1561 printer not to work.
1555
1562
1556 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1563 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1557
1564
1558 * IPython/iplib.py (_should_recompile): Small fix, closes
1565 * IPython/iplib.py (_should_recompile): Small fix, closes
1559 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1566 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1560
1567
1561 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1568 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1562
1569
1563 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1570 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1564 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1571 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1565 Moad for help with tracking it down.
1572 Moad for help with tracking it down.
1566
1573
1567 * IPython/iplib.py (handle_auto): fix autocall handling for
1574 * IPython/iplib.py (handle_auto): fix autocall handling for
1568 objects which support BOTH __getitem__ and __call__ (so that f [x]
1575 objects which support BOTH __getitem__ and __call__ (so that f [x]
1569 is left alone, instead of becoming f([x]) automatically).
1576 is left alone, instead of becoming f([x]) automatically).
1570
1577
1571 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1578 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1572 Ville's patch.
1579 Ville's patch.
1573
1580
1574 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1581 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1575
1582
1576 * IPython/iplib.py (handle_auto): changed autocall semantics to
1583 * IPython/iplib.py (handle_auto): changed autocall semantics to
1577 include 'smart' mode, where the autocall transformation is NOT
1584 include 'smart' mode, where the autocall transformation is NOT
1578 applied if there are no arguments on the line. This allows you to
1585 applied if there are no arguments on the line. This allows you to
1579 just type 'foo' if foo is a callable to see its internal form,
1586 just type 'foo' if foo is a callable to see its internal form,
1580 instead of having it called with no arguments (typically a
1587 instead of having it called with no arguments (typically a
1581 mistake). The old 'full' autocall still exists: for that, you
1588 mistake). The old 'full' autocall still exists: for that, you
1582 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1589 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1583
1590
1584 * IPython/completer.py (Completer.attr_matches): add
1591 * IPython/completer.py (Completer.attr_matches): add
1585 tab-completion support for Enthoughts' traits. After a report by
1592 tab-completion support for Enthoughts' traits. After a report by
1586 Arnd and a patch by Prabhu.
1593 Arnd and a patch by Prabhu.
1587
1594
1588 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1595 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1589
1596
1590 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1597 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1591 Schmolck's patch to fix inspect.getinnerframes().
1598 Schmolck's patch to fix inspect.getinnerframes().
1592
1599
1593 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1600 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1594 for embedded instances, regarding handling of namespaces and items
1601 for embedded instances, regarding handling of namespaces and items
1595 added to the __builtin__ one. Multiple embedded instances and
1602 added to the __builtin__ one. Multiple embedded instances and
1596 recursive embeddings should work better now (though I'm not sure
1603 recursive embeddings should work better now (though I'm not sure
1597 I've got all the corner cases fixed, that code is a bit of a brain
1604 I've got all the corner cases fixed, that code is a bit of a brain
1598 twister).
1605 twister).
1599
1606
1600 * IPython/Magic.py (magic_edit): added support to edit in-memory
1607 * IPython/Magic.py (magic_edit): added support to edit in-memory
1601 macros (automatically creates the necessary temp files). %edit
1608 macros (automatically creates the necessary temp files). %edit
1602 also doesn't return the file contents anymore, it's just noise.
1609 also doesn't return the file contents anymore, it's just noise.
1603
1610
1604 * IPython/completer.py (Completer.attr_matches): revert change to
1611 * IPython/completer.py (Completer.attr_matches): revert change to
1605 complete only on attributes listed in __all__. I realized it
1612 complete only on attributes listed in __all__. I realized it
1606 cripples the tab-completion system as a tool for exploring the
1613 cripples the tab-completion system as a tool for exploring the
1607 internals of unknown libraries (it renders any non-__all__
1614 internals of unknown libraries (it renders any non-__all__
1608 attribute off-limits). I got bit by this when trying to see
1615 attribute off-limits). I got bit by this when trying to see
1609 something inside the dis module.
1616 something inside the dis module.
1610
1617
1611 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1618 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1612
1619
1613 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1620 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1614 namespace for users and extension writers to hold data in. This
1621 namespace for users and extension writers to hold data in. This
1615 follows the discussion in
1622 follows the discussion in
1616 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1623 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1617
1624
1618 * IPython/completer.py (IPCompleter.complete): small patch to help
1625 * IPython/completer.py (IPCompleter.complete): small patch to help
1619 tab-completion under Emacs, after a suggestion by John Barnard
1626 tab-completion under Emacs, after a suggestion by John Barnard
1620 <barnarj-AT-ccf.org>.
1627 <barnarj-AT-ccf.org>.
1621
1628
1622 * IPython/Magic.py (Magic.extract_input_slices): added support for
1629 * IPython/Magic.py (Magic.extract_input_slices): added support for
1623 the slice notation in magics to use N-M to represent numbers N...M
1630 the slice notation in magics to use N-M to represent numbers N...M
1624 (closed endpoints). This is used by %macro and %save.
1631 (closed endpoints). This is used by %macro and %save.
1625
1632
1626 * IPython/completer.py (Completer.attr_matches): for modules which
1633 * IPython/completer.py (Completer.attr_matches): for modules which
1627 define __all__, complete only on those. After a patch by Jeffrey
1634 define __all__, complete only on those. After a patch by Jeffrey
1628 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1635 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1629 speed up this routine.
1636 speed up this routine.
1630
1637
1631 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1638 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1632 don't know if this is the end of it, but the behavior now is
1639 don't know if this is the end of it, but the behavior now is
1633 certainly much more correct. Note that coupled with macros,
1640 certainly much more correct. Note that coupled with macros,
1634 slightly surprising (at first) behavior may occur: a macro will in
1641 slightly surprising (at first) behavior may occur: a macro will in
1635 general expand to multiple lines of input, so upon exiting, the
1642 general expand to multiple lines of input, so upon exiting, the
1636 in/out counters will both be bumped by the corresponding amount
1643 in/out counters will both be bumped by the corresponding amount
1637 (as if the macro's contents had been typed interactively). Typing
1644 (as if the macro's contents had been typed interactively). Typing
1638 %hist will reveal the intermediate (silently processed) lines.
1645 %hist will reveal the intermediate (silently processed) lines.
1639
1646
1640 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1647 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1641 pickle to fail (%run was overwriting __main__ and not restoring
1648 pickle to fail (%run was overwriting __main__ and not restoring
1642 it, but pickle relies on __main__ to operate).
1649 it, but pickle relies on __main__ to operate).
1643
1650
1644 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1651 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1645 using properties, but forgot to make the main InteractiveShell
1652 using properties, but forgot to make the main InteractiveShell
1646 class a new-style class. Properties fail silently, and
1653 class a new-style class. Properties fail silently, and
1647 mysteriously, with old-style class (getters work, but
1654 mysteriously, with old-style class (getters work, but
1648 setters don't do anything).
1655 setters don't do anything).
1649
1656
1650 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1657 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1651
1658
1652 * IPython/Magic.py (magic_history): fix history reporting bug (I
1659 * IPython/Magic.py (magic_history): fix history reporting bug (I
1653 know some nasties are still there, I just can't seem to find a
1660 know some nasties are still there, I just can't seem to find a
1654 reproducible test case to track them down; the input history is
1661 reproducible test case to track them down; the input history is
1655 falling out of sync...)
1662 falling out of sync...)
1656
1663
1657 * IPython/iplib.py (handle_shell_escape): fix bug where both
1664 * IPython/iplib.py (handle_shell_escape): fix bug where both
1658 aliases and system accesses where broken for indented code (such
1665 aliases and system accesses where broken for indented code (such
1659 as loops).
1666 as loops).
1660
1667
1661 * IPython/genutils.py (shell): fix small but critical bug for
1668 * IPython/genutils.py (shell): fix small but critical bug for
1662 win32 system access.
1669 win32 system access.
1663
1670
1664 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1671 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1665
1672
1666 * IPython/iplib.py (showtraceback): remove use of the
1673 * IPython/iplib.py (showtraceback): remove use of the
1667 sys.last_{type/value/traceback} structures, which are non
1674 sys.last_{type/value/traceback} structures, which are non
1668 thread-safe.
1675 thread-safe.
1669 (_prefilter): change control flow to ensure that we NEVER
1676 (_prefilter): change control flow to ensure that we NEVER
1670 introspect objects when autocall is off. This will guarantee that
1677 introspect objects when autocall is off. This will guarantee that
1671 having an input line of the form 'x.y', where access to attribute
1678 having an input line of the form 'x.y', where access to attribute
1672 'y' has side effects, doesn't trigger the side effect TWICE. It
1679 'y' has side effects, doesn't trigger the side effect TWICE. It
1673 is important to note that, with autocall on, these side effects
1680 is important to note that, with autocall on, these side effects
1674 can still happen.
1681 can still happen.
1675 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1682 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1676 trio. IPython offers these three kinds of special calls which are
1683 trio. IPython offers these three kinds of special calls which are
1677 not python code, and it's a good thing to have their call method
1684 not python code, and it's a good thing to have their call method
1678 be accessible as pure python functions (not just special syntax at
1685 be accessible as pure python functions (not just special syntax at
1679 the command line). It gives us a better internal implementation
1686 the command line). It gives us a better internal implementation
1680 structure, as well as exposing these for user scripting more
1687 structure, as well as exposing these for user scripting more
1681 cleanly.
1688 cleanly.
1682
1689
1683 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1690 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1684 file. Now that they'll be more likely to be used with the
1691 file. Now that they'll be more likely to be used with the
1685 persistance system (%store), I want to make sure their module path
1692 persistance system (%store), I want to make sure their module path
1686 doesn't change in the future, so that we don't break things for
1693 doesn't change in the future, so that we don't break things for
1687 users' persisted data.
1694 users' persisted data.
1688
1695
1689 * IPython/iplib.py (autoindent_update): move indentation
1696 * IPython/iplib.py (autoindent_update): move indentation
1690 management into the _text_ processing loop, not the keyboard
1697 management into the _text_ processing loop, not the keyboard
1691 interactive one. This is necessary to correctly process non-typed
1698 interactive one. This is necessary to correctly process non-typed
1692 multiline input (such as macros).
1699 multiline input (such as macros).
1693
1700
1694 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1701 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1695 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1702 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1696 which was producing problems in the resulting manual.
1703 which was producing problems in the resulting manual.
1697 (magic_whos): improve reporting of instances (show their class,
1704 (magic_whos): improve reporting of instances (show their class,
1698 instead of simply printing 'instance' which isn't terribly
1705 instead of simply printing 'instance' which isn't terribly
1699 informative).
1706 informative).
1700
1707
1701 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1708 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1702 (minor mods) to support network shares under win32.
1709 (minor mods) to support network shares under win32.
1703
1710
1704 * IPython/winconsole.py (get_console_size): add new winconsole
1711 * IPython/winconsole.py (get_console_size): add new winconsole
1705 module and fixes to page_dumb() to improve its behavior under
1712 module and fixes to page_dumb() to improve its behavior under
1706 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1713 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1707
1714
1708 * IPython/Magic.py (Macro): simplified Macro class to just
1715 * IPython/Magic.py (Macro): simplified Macro class to just
1709 subclass list. We've had only 2.2 compatibility for a very long
1716 subclass list. We've had only 2.2 compatibility for a very long
1710 time, yet I was still avoiding subclassing the builtin types. No
1717 time, yet I was still avoiding subclassing the builtin types. No
1711 more (I'm also starting to use properties, though I won't shift to
1718 more (I'm also starting to use properties, though I won't shift to
1712 2.3-specific features quite yet).
1719 2.3-specific features quite yet).
1713 (magic_store): added Ville's patch for lightweight variable
1720 (magic_store): added Ville's patch for lightweight variable
1714 persistence, after a request on the user list by Matt Wilkie
1721 persistence, after a request on the user list by Matt Wilkie
1715 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1722 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1716 details.
1723 details.
1717
1724
1718 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1725 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1719 changed the default logfile name from 'ipython.log' to
1726 changed the default logfile name from 'ipython.log' to
1720 'ipython_log.py'. These logs are real python files, and now that
1727 'ipython_log.py'. These logs are real python files, and now that
1721 we have much better multiline support, people are more likely to
1728 we have much better multiline support, people are more likely to
1722 want to use them as such. Might as well name them correctly.
1729 want to use them as such. Might as well name them correctly.
1723
1730
1724 * IPython/Magic.py: substantial cleanup. While we can't stop
1731 * IPython/Magic.py: substantial cleanup. While we can't stop
1725 using magics as mixins, due to the existing customizations 'out
1732 using magics as mixins, due to the existing customizations 'out
1726 there' which rely on the mixin naming conventions, at least I
1733 there' which rely on the mixin naming conventions, at least I
1727 cleaned out all cross-class name usage. So once we are OK with
1734 cleaned out all cross-class name usage. So once we are OK with
1728 breaking compatibility, the two systems can be separated.
1735 breaking compatibility, the two systems can be separated.
1729
1736
1730 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1737 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1731 anymore, and the class is a fair bit less hideous as well. New
1738 anymore, and the class is a fair bit less hideous as well. New
1732 features were also introduced: timestamping of input, and logging
1739 features were also introduced: timestamping of input, and logging
1733 of output results. These are user-visible with the -t and -o
1740 of output results. These are user-visible with the -t and -o
1734 options to %logstart. Closes
1741 options to %logstart. Closes
1735 http://www.scipy.net/roundup/ipython/issue11 and a request by
1742 http://www.scipy.net/roundup/ipython/issue11 and a request by
1736 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1743 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1737
1744
1738 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1745 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1739
1746
1740 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1747 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1741 better handle backslashes in paths. See the thread 'More Windows
1748 better handle backslashes in paths. See the thread 'More Windows
1742 questions part 2 - \/ characters revisited' on the iypthon user
1749 questions part 2 - \/ characters revisited' on the iypthon user
1743 list:
1750 list:
1744 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1751 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1745
1752
1746 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1753 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1747
1754
1748 (InteractiveShell.__init__): change threaded shells to not use the
1755 (InteractiveShell.__init__): change threaded shells to not use the
1749 ipython crash handler. This was causing more problems than not,
1756 ipython crash handler. This was causing more problems than not,
1750 as exceptions in the main thread (GUI code, typically) would
1757 as exceptions in the main thread (GUI code, typically) would
1751 always show up as a 'crash', when they really weren't.
1758 always show up as a 'crash', when they really weren't.
1752
1759
1753 The colors and exception mode commands (%colors/%xmode) have been
1760 The colors and exception mode commands (%colors/%xmode) have been
1754 synchronized to also take this into account, so users can get
1761 synchronized to also take this into account, so users can get
1755 verbose exceptions for their threaded code as well. I also added
1762 verbose exceptions for their threaded code as well. I also added
1756 support for activating pdb inside this exception handler as well,
1763 support for activating pdb inside this exception handler as well,
1757 so now GUI authors can use IPython's enhanced pdb at runtime.
1764 so now GUI authors can use IPython's enhanced pdb at runtime.
1758
1765
1759 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1766 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1760 true by default, and add it to the shipped ipythonrc file. Since
1767 true by default, and add it to the shipped ipythonrc file. Since
1761 this asks the user before proceeding, I think it's OK to make it
1768 this asks the user before proceeding, I think it's OK to make it
1762 true by default.
1769 true by default.
1763
1770
1764 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1771 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1765 of the previous special-casing of input in the eval loop. I think
1772 of the previous special-casing of input in the eval loop. I think
1766 this is cleaner, as they really are commands and shouldn't have
1773 this is cleaner, as they really are commands and shouldn't have
1767 a special role in the middle of the core code.
1774 a special role in the middle of the core code.
1768
1775
1769 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1776 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1770
1777
1771 * IPython/iplib.py (edit_syntax_error): added support for
1778 * IPython/iplib.py (edit_syntax_error): added support for
1772 automatically reopening the editor if the file had a syntax error
1779 automatically reopening the editor if the file had a syntax error
1773 in it. Thanks to scottt who provided the patch at:
1780 in it. Thanks to scottt who provided the patch at:
1774 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1781 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1775 version committed).
1782 version committed).
1776
1783
1777 * IPython/iplib.py (handle_normal): add suport for multi-line
1784 * IPython/iplib.py (handle_normal): add suport for multi-line
1778 input with emtpy lines. This fixes
1785 input with emtpy lines. This fixes
1779 http://www.scipy.net/roundup/ipython/issue43 and a similar
1786 http://www.scipy.net/roundup/ipython/issue43 and a similar
1780 discussion on the user list.
1787 discussion on the user list.
1781
1788
1782 WARNING: a behavior change is necessarily introduced to support
1789 WARNING: a behavior change is necessarily introduced to support
1783 blank lines: now a single blank line with whitespace does NOT
1790 blank lines: now a single blank line with whitespace does NOT
1784 break the input loop, which means that when autoindent is on, by
1791 break the input loop, which means that when autoindent is on, by
1785 default hitting return on the next (indented) line does NOT exit.
1792 default hitting return on the next (indented) line does NOT exit.
1786
1793
1787 Instead, to exit a multiline input you can either have:
1794 Instead, to exit a multiline input you can either have:
1788
1795
1789 - TWO whitespace lines (just hit return again), or
1796 - TWO whitespace lines (just hit return again), or
1790 - a single whitespace line of a different length than provided
1797 - a single whitespace line of a different length than provided
1791 by the autoindent (add or remove a space).
1798 by the autoindent (add or remove a space).
1792
1799
1793 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1800 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1794 module to better organize all readline-related functionality.
1801 module to better organize all readline-related functionality.
1795 I've deleted FlexCompleter and put all completion clases here.
1802 I've deleted FlexCompleter and put all completion clases here.
1796
1803
1797 * IPython/iplib.py (raw_input): improve indentation management.
1804 * IPython/iplib.py (raw_input): improve indentation management.
1798 It is now possible to paste indented code with autoindent on, and
1805 It is now possible to paste indented code with autoindent on, and
1799 the code is interpreted correctly (though it still looks bad on
1806 the code is interpreted correctly (though it still looks bad on
1800 screen, due to the line-oriented nature of ipython).
1807 screen, due to the line-oriented nature of ipython).
1801 (MagicCompleter.complete): change behavior so that a TAB key on an
1808 (MagicCompleter.complete): change behavior so that a TAB key on an
1802 otherwise empty line actually inserts a tab, instead of completing
1809 otherwise empty line actually inserts a tab, instead of completing
1803 on the entire global namespace. This makes it easier to use the
1810 on the entire global namespace. This makes it easier to use the
1804 TAB key for indentation. After a request by Hans Meine
1811 TAB key for indentation. After a request by Hans Meine
1805 <hans_meine-AT-gmx.net>
1812 <hans_meine-AT-gmx.net>
1806 (_prefilter): add support so that typing plain 'exit' or 'quit'
1813 (_prefilter): add support so that typing plain 'exit' or 'quit'
1807 does a sensible thing. Originally I tried to deviate as little as
1814 does a sensible thing. Originally I tried to deviate as little as
1808 possible from the default python behavior, but even that one may
1815 possible from the default python behavior, but even that one may
1809 change in this direction (thread on python-dev to that effect).
1816 change in this direction (thread on python-dev to that effect).
1810 Regardless, ipython should do the right thing even if CPython's
1817 Regardless, ipython should do the right thing even if CPython's
1811 '>>>' prompt doesn't.
1818 '>>>' prompt doesn't.
1812 (InteractiveShell): removed subclassing code.InteractiveConsole
1819 (InteractiveShell): removed subclassing code.InteractiveConsole
1813 class. By now we'd overridden just about all of its methods: I've
1820 class. By now we'd overridden just about all of its methods: I've
1814 copied the remaining two over, and now ipython is a standalone
1821 copied the remaining two over, and now ipython is a standalone
1815 class. This will provide a clearer picture for the chainsaw
1822 class. This will provide a clearer picture for the chainsaw
1816 branch refactoring.
1823 branch refactoring.
1817
1824
1818 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1825 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1819
1826
1820 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1827 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1821 failures for objects which break when dir() is called on them.
1828 failures for objects which break when dir() is called on them.
1822
1829
1823 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1830 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1824 distinct local and global namespaces in the completer API. This
1831 distinct local and global namespaces in the completer API. This
1825 change allows us to properly handle completion with distinct
1832 change allows us to properly handle completion with distinct
1826 scopes, including in embedded instances (this had never really
1833 scopes, including in embedded instances (this had never really
1827 worked correctly).
1834 worked correctly).
1828
1835
1829 Note: this introduces a change in the constructor for
1836 Note: this introduces a change in the constructor for
1830 MagicCompleter, as a new global_namespace parameter is now the
1837 MagicCompleter, as a new global_namespace parameter is now the
1831 second argument (the others were bumped one position).
1838 second argument (the others were bumped one position).
1832
1839
1833 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1840 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1834
1841
1835 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1842 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1836 embedded instances (which can be done now thanks to Vivian's
1843 embedded instances (which can be done now thanks to Vivian's
1837 frame-handling fixes for pdb).
1844 frame-handling fixes for pdb).
1838 (InteractiveShell.__init__): Fix namespace handling problem in
1845 (InteractiveShell.__init__): Fix namespace handling problem in
1839 embedded instances. We were overwriting __main__ unconditionally,
1846 embedded instances. We were overwriting __main__ unconditionally,
1840 and this should only be done for 'full' (non-embedded) IPython;
1847 and this should only be done for 'full' (non-embedded) IPython;
1841 embedded instances must respect the caller's __main__. Thanks to
1848 embedded instances must respect the caller's __main__. Thanks to
1842 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1849 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1843
1850
1844 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1851 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1845
1852
1846 * setup.py: added download_url to setup(). This registers the
1853 * setup.py: added download_url to setup(). This registers the
1847 download address at PyPI, which is not only useful to humans
1854 download address at PyPI, which is not only useful to humans
1848 browsing the site, but is also picked up by setuptools (the Eggs
1855 browsing the site, but is also picked up by setuptools (the Eggs
1849 machinery). Thanks to Ville and R. Kern for the info/discussion
1856 machinery). Thanks to Ville and R. Kern for the info/discussion
1850 on this.
1857 on this.
1851
1858
1852 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1859 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1853
1860
1854 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1861 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1855 This brings a lot of nice functionality to the pdb mode, which now
1862 This brings a lot of nice functionality to the pdb mode, which now
1856 has tab-completion, syntax highlighting, and better stack handling
1863 has tab-completion, syntax highlighting, and better stack handling
1857 than before. Many thanks to Vivian De Smedt
1864 than before. Many thanks to Vivian De Smedt
1858 <vivian-AT-vdesmedt.com> for the original patches.
1865 <vivian-AT-vdesmedt.com> for the original patches.
1859
1866
1860 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1867 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1861
1868
1862 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1869 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1863 sequence to consistently accept the banner argument. The
1870 sequence to consistently accept the banner argument. The
1864 inconsistency was tripping SAGE, thanks to Gary Zablackis
1871 inconsistency was tripping SAGE, thanks to Gary Zablackis
1865 <gzabl-AT-yahoo.com> for the report.
1872 <gzabl-AT-yahoo.com> for the report.
1866
1873
1867 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1874 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1868
1875
1869 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1876 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1870 Fix bug where a naked 'alias' call in the ipythonrc file would
1877 Fix bug where a naked 'alias' call in the ipythonrc file would
1871 cause a crash. Bug reported by Jorgen Stenarson.
1878 cause a crash. Bug reported by Jorgen Stenarson.
1872
1879
1873 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1880 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1874
1881
1875 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1882 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1876 startup time.
1883 startup time.
1877
1884
1878 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1885 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1879 instances had introduced a bug with globals in normal code. Now
1886 instances had introduced a bug with globals in normal code. Now
1880 it's working in all cases.
1887 it's working in all cases.
1881
1888
1882 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1889 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1883 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1890 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1884 has been introduced to set the default case sensitivity of the
1891 has been introduced to set the default case sensitivity of the
1885 searches. Users can still select either mode at runtime on a
1892 searches. Users can still select either mode at runtime on a
1886 per-search basis.
1893 per-search basis.
1887
1894
1888 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1895 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1889
1896
1890 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1897 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1891 attributes in wildcard searches for subclasses. Modified version
1898 attributes in wildcard searches for subclasses. Modified version
1892 of a patch by Jorgen.
1899 of a patch by Jorgen.
1893
1900
1894 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1901 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1895
1902
1896 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1903 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1897 embedded instances. I added a user_global_ns attribute to the
1904 embedded instances. I added a user_global_ns attribute to the
1898 InteractiveShell class to handle this.
1905 InteractiveShell class to handle this.
1899
1906
1900 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1907 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1901
1908
1902 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1909 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1903 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1910 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1904 (reported under win32, but may happen also in other platforms).
1911 (reported under win32, but may happen also in other platforms).
1905 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1912 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1906
1913
1907 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1914 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1908
1915
1909 * IPython/Magic.py (magic_psearch): new support for wildcard
1916 * IPython/Magic.py (magic_psearch): new support for wildcard
1910 patterns. Now, typing ?a*b will list all names which begin with a
1917 patterns. Now, typing ?a*b will list all names which begin with a
1911 and end in b, for example. The %psearch magic has full
1918 and end in b, for example. The %psearch magic has full
1912 docstrings. Many thanks to Jörgen Stenarson
1919 docstrings. Many thanks to Jörgen Stenarson
1913 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1920 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1914 implementing this functionality.
1921 implementing this functionality.
1915
1922
1916 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1923 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1917
1924
1918 * Manual: fixed long-standing annoyance of double-dashes (as in
1925 * Manual: fixed long-standing annoyance of double-dashes (as in
1919 --prefix=~, for example) being stripped in the HTML version. This
1926 --prefix=~, for example) being stripped in the HTML version. This
1920 is a latex2html bug, but a workaround was provided. Many thanks
1927 is a latex2html bug, but a workaround was provided. Many thanks
1921 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1928 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1922 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1929 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1923 rolling. This seemingly small issue had tripped a number of users
1930 rolling. This seemingly small issue had tripped a number of users
1924 when first installing, so I'm glad to see it gone.
1931 when first installing, so I'm glad to see it gone.
1925
1932
1926 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1933 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1927
1934
1928 * IPython/Extensions/numeric_formats.py: fix missing import,
1935 * IPython/Extensions/numeric_formats.py: fix missing import,
1929 reported by Stephen Walton.
1936 reported by Stephen Walton.
1930
1937
1931 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1938 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1932
1939
1933 * IPython/demo.py: finish demo module, fully documented now.
1940 * IPython/demo.py: finish demo module, fully documented now.
1934
1941
1935 * IPython/genutils.py (file_read): simple little utility to read a
1942 * IPython/genutils.py (file_read): simple little utility to read a
1936 file and ensure it's closed afterwards.
1943 file and ensure it's closed afterwards.
1937
1944
1938 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1945 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1939
1946
1940 * IPython/demo.py (Demo.__init__): added support for individually
1947 * IPython/demo.py (Demo.__init__): added support for individually
1941 tagging blocks for automatic execution.
1948 tagging blocks for automatic execution.
1942
1949
1943 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1950 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1944 syntax-highlighted python sources, requested by John.
1951 syntax-highlighted python sources, requested by John.
1945
1952
1946 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1953 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1947
1954
1948 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1955 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1949 finishing.
1956 finishing.
1950
1957
1951 * IPython/genutils.py (shlex_split): moved from Magic to here,
1958 * IPython/genutils.py (shlex_split): moved from Magic to here,
1952 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1959 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1953
1960
1954 * IPython/demo.py (Demo.__init__): added support for silent
1961 * IPython/demo.py (Demo.__init__): added support for silent
1955 blocks, improved marks as regexps, docstrings written.
1962 blocks, improved marks as regexps, docstrings written.
1956 (Demo.__init__): better docstring, added support for sys.argv.
1963 (Demo.__init__): better docstring, added support for sys.argv.
1957
1964
1958 * IPython/genutils.py (marquee): little utility used by the demo
1965 * IPython/genutils.py (marquee): little utility used by the demo
1959 code, handy in general.
1966 code, handy in general.
1960
1967
1961 * IPython/demo.py (Demo.__init__): new class for interactive
1968 * IPython/demo.py (Demo.__init__): new class for interactive
1962 demos. Not documented yet, I just wrote it in a hurry for
1969 demos. Not documented yet, I just wrote it in a hurry for
1963 scipy'05. Will docstring later.
1970 scipy'05. Will docstring later.
1964
1971
1965 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1972 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1966
1973
1967 * IPython/Shell.py (sigint_handler): Drastic simplification which
1974 * IPython/Shell.py (sigint_handler): Drastic simplification which
1968 also seems to make Ctrl-C work correctly across threads! This is
1975 also seems to make Ctrl-C work correctly across threads! This is
1969 so simple, that I can't beleive I'd missed it before. Needs more
1976 so simple, that I can't beleive I'd missed it before. Needs more
1970 testing, though.
1977 testing, though.
1971 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1978 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1972 like this before...
1979 like this before...
1973
1980
1974 * IPython/genutils.py (get_home_dir): add protection against
1981 * IPython/genutils.py (get_home_dir): add protection against
1975 non-dirs in win32 registry.
1982 non-dirs in win32 registry.
1976
1983
1977 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1984 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1978 bug where dict was mutated while iterating (pysh crash).
1985 bug where dict was mutated while iterating (pysh crash).
1979
1986
1980 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1987 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1981
1988
1982 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1989 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1983 spurious newlines added by this routine. After a report by
1990 spurious newlines added by this routine. After a report by
1984 F. Mantegazza.
1991 F. Mantegazza.
1985
1992
1986 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1993 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1987
1994
1988 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1995 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1989 calls. These were a leftover from the GTK 1.x days, and can cause
1996 calls. These were a leftover from the GTK 1.x days, and can cause
1990 problems in certain cases (after a report by John Hunter).
1997 problems in certain cases (after a report by John Hunter).
1991
1998
1992 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1999 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1993 os.getcwd() fails at init time. Thanks to patch from David Remahl
2000 os.getcwd() fails at init time. Thanks to patch from David Remahl
1994 <chmod007-AT-mac.com>.
2001 <chmod007-AT-mac.com>.
1995 (InteractiveShell.__init__): prevent certain special magics from
2002 (InteractiveShell.__init__): prevent certain special magics from
1996 being shadowed by aliases. Closes
2003 being shadowed by aliases. Closes
1997 http://www.scipy.net/roundup/ipython/issue41.
2004 http://www.scipy.net/roundup/ipython/issue41.
1998
2005
1999 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2006 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2000
2007
2001 * IPython/iplib.py (InteractiveShell.complete): Added new
2008 * IPython/iplib.py (InteractiveShell.complete): Added new
2002 top-level completion method to expose the completion mechanism
2009 top-level completion method to expose the completion mechanism
2003 beyond readline-based environments.
2010 beyond readline-based environments.
2004
2011
2005 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2012 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2006
2013
2007 * tools/ipsvnc (svnversion): fix svnversion capture.
2014 * tools/ipsvnc (svnversion): fix svnversion capture.
2008
2015
2009 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2016 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2010 attribute to self, which was missing. Before, it was set by a
2017 attribute to self, which was missing. Before, it was set by a
2011 routine which in certain cases wasn't being called, so the
2018 routine which in certain cases wasn't being called, so the
2012 instance could end up missing the attribute. This caused a crash.
2019 instance could end up missing the attribute. This caused a crash.
2013 Closes http://www.scipy.net/roundup/ipython/issue40.
2020 Closes http://www.scipy.net/roundup/ipython/issue40.
2014
2021
2015 2005-08-16 Fernando Perez <fperez@colorado.edu>
2022 2005-08-16 Fernando Perez <fperez@colorado.edu>
2016
2023
2017 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2024 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2018 contains non-string attribute. Closes
2025 contains non-string attribute. Closes
2019 http://www.scipy.net/roundup/ipython/issue38.
2026 http://www.scipy.net/roundup/ipython/issue38.
2020
2027
2021 2005-08-14 Fernando Perez <fperez@colorado.edu>
2028 2005-08-14 Fernando Perez <fperez@colorado.edu>
2022
2029
2023 * tools/ipsvnc: Minor improvements, to add changeset info.
2030 * tools/ipsvnc: Minor improvements, to add changeset info.
2024
2031
2025 2005-08-12 Fernando Perez <fperez@colorado.edu>
2032 2005-08-12 Fernando Perez <fperez@colorado.edu>
2026
2033
2027 * IPython/iplib.py (runsource): remove self.code_to_run_src
2034 * IPython/iplib.py (runsource): remove self.code_to_run_src
2028 attribute. I realized this is nothing more than
2035 attribute. I realized this is nothing more than
2029 '\n'.join(self.buffer), and having the same data in two different
2036 '\n'.join(self.buffer), and having the same data in two different
2030 places is just asking for synchronization bugs. This may impact
2037 places is just asking for synchronization bugs. This may impact
2031 people who have custom exception handlers, so I need to warn
2038 people who have custom exception handlers, so I need to warn
2032 ipython-dev about it (F. Mantegazza may use them).
2039 ipython-dev about it (F. Mantegazza may use them).
2033
2040
2034 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2041 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2035
2042
2036 * IPython/genutils.py: fix 2.2 compatibility (generators)
2043 * IPython/genutils.py: fix 2.2 compatibility (generators)
2037
2044
2038 2005-07-18 Fernando Perez <fperez@colorado.edu>
2045 2005-07-18 Fernando Perez <fperez@colorado.edu>
2039
2046
2040 * IPython/genutils.py (get_home_dir): fix to help users with
2047 * IPython/genutils.py (get_home_dir): fix to help users with
2041 invalid $HOME under win32.
2048 invalid $HOME under win32.
2042
2049
2043 2005-07-17 Fernando Perez <fperez@colorado.edu>
2050 2005-07-17 Fernando Perez <fperez@colorado.edu>
2044
2051
2045 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2052 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2046 some old hacks and clean up a bit other routines; code should be
2053 some old hacks and clean up a bit other routines; code should be
2047 simpler and a bit faster.
2054 simpler and a bit faster.
2048
2055
2049 * IPython/iplib.py (interact): removed some last-resort attempts
2056 * IPython/iplib.py (interact): removed some last-resort attempts
2050 to survive broken stdout/stderr. That code was only making it
2057 to survive broken stdout/stderr. That code was only making it
2051 harder to abstract out the i/o (necessary for gui integration),
2058 harder to abstract out the i/o (necessary for gui integration),
2052 and the crashes it could prevent were extremely rare in practice
2059 and the crashes it could prevent were extremely rare in practice
2053 (besides being fully user-induced in a pretty violent manner).
2060 (besides being fully user-induced in a pretty violent manner).
2054
2061
2055 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2062 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2056 Nothing major yet, but the code is simpler to read; this should
2063 Nothing major yet, but the code is simpler to read; this should
2057 make it easier to do more serious modifications in the future.
2064 make it easier to do more serious modifications in the future.
2058
2065
2059 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2066 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2060 which broke in .15 (thanks to a report by Ville).
2067 which broke in .15 (thanks to a report by Ville).
2061
2068
2062 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2069 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2063 be quite correct, I know next to nothing about unicode). This
2070 be quite correct, I know next to nothing about unicode). This
2064 will allow unicode strings to be used in prompts, amongst other
2071 will allow unicode strings to be used in prompts, amongst other
2065 cases. It also will prevent ipython from crashing when unicode
2072 cases. It also will prevent ipython from crashing when unicode
2066 shows up unexpectedly in many places. If ascii encoding fails, we
2073 shows up unexpectedly in many places. If ascii encoding fails, we
2067 assume utf_8. Currently the encoding is not a user-visible
2074 assume utf_8. Currently the encoding is not a user-visible
2068 setting, though it could be made so if there is demand for it.
2075 setting, though it could be made so if there is demand for it.
2069
2076
2070 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2077 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2071
2078
2072 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2079 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2073
2080
2074 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2081 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2075
2082
2076 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2083 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2077 code can work transparently for 2.2/2.3.
2084 code can work transparently for 2.2/2.3.
2078
2085
2079 2005-07-16 Fernando Perez <fperez@colorado.edu>
2086 2005-07-16 Fernando Perez <fperez@colorado.edu>
2080
2087
2081 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2088 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2082 out of the color scheme table used for coloring exception
2089 out of the color scheme table used for coloring exception
2083 tracebacks. This allows user code to add new schemes at runtime.
2090 tracebacks. This allows user code to add new schemes at runtime.
2084 This is a minimally modified version of the patch at
2091 This is a minimally modified version of the patch at
2085 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2092 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2086 for the contribution.
2093 for the contribution.
2087
2094
2088 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2095 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2089 slightly modified version of the patch in
2096 slightly modified version of the patch in
2090 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2097 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2091 to remove the previous try/except solution (which was costlier).
2098 to remove the previous try/except solution (which was costlier).
2092 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2099 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2093
2100
2094 2005-06-08 Fernando Perez <fperez@colorado.edu>
2101 2005-06-08 Fernando Perez <fperez@colorado.edu>
2095
2102
2096 * IPython/iplib.py (write/write_err): Add methods to abstract all
2103 * IPython/iplib.py (write/write_err): Add methods to abstract all
2097 I/O a bit more.
2104 I/O a bit more.
2098
2105
2099 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2106 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2100 warning, reported by Aric Hagberg, fix by JD Hunter.
2107 warning, reported by Aric Hagberg, fix by JD Hunter.
2101
2108
2102 2005-06-02 *** Released version 0.6.15
2109 2005-06-02 *** Released version 0.6.15
2103
2110
2104 2005-06-01 Fernando Perez <fperez@colorado.edu>
2111 2005-06-01 Fernando Perez <fperez@colorado.edu>
2105
2112
2106 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2113 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2107 tab-completion of filenames within open-quoted strings. Note that
2114 tab-completion of filenames within open-quoted strings. Note that
2108 this requires that in ~/.ipython/ipythonrc, users change the
2115 this requires that in ~/.ipython/ipythonrc, users change the
2109 readline delimiters configuration to read:
2116 readline delimiters configuration to read:
2110
2117
2111 readline_remove_delims -/~
2118 readline_remove_delims -/~
2112
2119
2113
2120
2114 2005-05-31 *** Released version 0.6.14
2121 2005-05-31 *** Released version 0.6.14
2115
2122
2116 2005-05-29 Fernando Perez <fperez@colorado.edu>
2123 2005-05-29 Fernando Perez <fperez@colorado.edu>
2117
2124
2118 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2125 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2119 with files not on the filesystem. Reported by Eliyahu Sandler
2126 with files not on the filesystem. Reported by Eliyahu Sandler
2120 <eli@gondolin.net>
2127 <eli@gondolin.net>
2121
2128
2122 2005-05-22 Fernando Perez <fperez@colorado.edu>
2129 2005-05-22 Fernando Perez <fperez@colorado.edu>
2123
2130
2124 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2131 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2125 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2132 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2126
2133
2127 2005-05-19 Fernando Perez <fperez@colorado.edu>
2134 2005-05-19 Fernando Perez <fperez@colorado.edu>
2128
2135
2129 * IPython/iplib.py (safe_execfile): close a file which could be
2136 * IPython/iplib.py (safe_execfile): close a file which could be
2130 left open (causing problems in win32, which locks open files).
2137 left open (causing problems in win32, which locks open files).
2131 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2138 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2132
2139
2133 2005-05-18 Fernando Perez <fperez@colorado.edu>
2140 2005-05-18 Fernando Perez <fperez@colorado.edu>
2134
2141
2135 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2142 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2136 keyword arguments correctly to safe_execfile().
2143 keyword arguments correctly to safe_execfile().
2137
2144
2138 2005-05-13 Fernando Perez <fperez@colorado.edu>
2145 2005-05-13 Fernando Perez <fperez@colorado.edu>
2139
2146
2140 * ipython.1: Added info about Qt to manpage, and threads warning
2147 * ipython.1: Added info about Qt to manpage, and threads warning
2141 to usage page (invoked with --help).
2148 to usage page (invoked with --help).
2142
2149
2143 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2150 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2144 new matcher (it goes at the end of the priority list) to do
2151 new matcher (it goes at the end of the priority list) to do
2145 tab-completion on named function arguments. Submitted by George
2152 tab-completion on named function arguments. Submitted by George
2146 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2153 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2147 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2154 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2148 for more details.
2155 for more details.
2149
2156
2150 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2157 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2151 SystemExit exceptions in the script being run. Thanks to a report
2158 SystemExit exceptions in the script being run. Thanks to a report
2152 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2159 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2153 producing very annoying behavior when running unit tests.
2160 producing very annoying behavior when running unit tests.
2154
2161
2155 2005-05-12 Fernando Perez <fperez@colorado.edu>
2162 2005-05-12 Fernando Perez <fperez@colorado.edu>
2156
2163
2157 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2164 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2158 which I'd broken (again) due to a changed regexp. In the process,
2165 which I'd broken (again) due to a changed regexp. In the process,
2159 added ';' as an escape to auto-quote the whole line without
2166 added ';' as an escape to auto-quote the whole line without
2160 splitting its arguments. Thanks to a report by Jerry McRae
2167 splitting its arguments. Thanks to a report by Jerry McRae
2161 <qrs0xyc02-AT-sneakemail.com>.
2168 <qrs0xyc02-AT-sneakemail.com>.
2162
2169
2163 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2170 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2164 possible crashes caused by a TokenError. Reported by Ed Schofield
2171 possible crashes caused by a TokenError. Reported by Ed Schofield
2165 <schofield-AT-ftw.at>.
2172 <schofield-AT-ftw.at>.
2166
2173
2167 2005-05-06 Fernando Perez <fperez@colorado.edu>
2174 2005-05-06 Fernando Perez <fperez@colorado.edu>
2168
2175
2169 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2176 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2170
2177
2171 2005-04-29 Fernando Perez <fperez@colorado.edu>
2178 2005-04-29 Fernando Perez <fperez@colorado.edu>
2172
2179
2173 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2180 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2174 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2181 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2175 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2182 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2176 which provides support for Qt interactive usage (similar to the
2183 which provides support for Qt interactive usage (similar to the
2177 existing one for WX and GTK). This had been often requested.
2184 existing one for WX and GTK). This had been often requested.
2178
2185
2179 2005-04-14 *** Released version 0.6.13
2186 2005-04-14 *** Released version 0.6.13
2180
2187
2181 2005-04-08 Fernando Perez <fperez@colorado.edu>
2188 2005-04-08 Fernando Perez <fperez@colorado.edu>
2182
2189
2183 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2190 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2184 from _ofind, which gets called on almost every input line. Now,
2191 from _ofind, which gets called on almost every input line. Now,
2185 we only try to get docstrings if they are actually going to be
2192 we only try to get docstrings if they are actually going to be
2186 used (the overhead of fetching unnecessary docstrings can be
2193 used (the overhead of fetching unnecessary docstrings can be
2187 noticeable for certain objects, such as Pyro proxies).
2194 noticeable for certain objects, such as Pyro proxies).
2188
2195
2189 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2196 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2190 for completers. For some reason I had been passing them the state
2197 for completers. For some reason I had been passing them the state
2191 variable, which completers never actually need, and was in
2198 variable, which completers never actually need, and was in
2192 conflict with the rlcompleter API. Custom completers ONLY need to
2199 conflict with the rlcompleter API. Custom completers ONLY need to
2193 take the text parameter.
2200 take the text parameter.
2194
2201
2195 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2202 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2196 work correctly in pysh. I've also moved all the logic which used
2203 work correctly in pysh. I've also moved all the logic which used
2197 to be in pysh.py here, which will prevent problems with future
2204 to be in pysh.py here, which will prevent problems with future
2198 upgrades. However, this time I must warn users to update their
2205 upgrades. However, this time I must warn users to update their
2199 pysh profile to include the line
2206 pysh profile to include the line
2200
2207
2201 import_all IPython.Extensions.InterpreterExec
2208 import_all IPython.Extensions.InterpreterExec
2202
2209
2203 because otherwise things won't work for them. They MUST also
2210 because otherwise things won't work for them. They MUST also
2204 delete pysh.py and the line
2211 delete pysh.py and the line
2205
2212
2206 execfile pysh.py
2213 execfile pysh.py
2207
2214
2208 from their ipythonrc-pysh.
2215 from their ipythonrc-pysh.
2209
2216
2210 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2217 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2211 robust in the face of objects whose dir() returns non-strings
2218 robust in the face of objects whose dir() returns non-strings
2212 (which it shouldn't, but some broken libs like ITK do). Thanks to
2219 (which it shouldn't, but some broken libs like ITK do). Thanks to
2213 a patch by John Hunter (implemented differently, though). Also
2220 a patch by John Hunter (implemented differently, though). Also
2214 minor improvements by using .extend instead of + on lists.
2221 minor improvements by using .extend instead of + on lists.
2215
2222
2216 * pysh.py:
2223 * pysh.py:
2217
2224
2218 2005-04-06 Fernando Perez <fperez@colorado.edu>
2225 2005-04-06 Fernando Perez <fperez@colorado.edu>
2219
2226
2220 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2227 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2221 by default, so that all users benefit from it. Those who don't
2228 by default, so that all users benefit from it. Those who don't
2222 want it can still turn it off.
2229 want it can still turn it off.
2223
2230
2224 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2231 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2225 config file, I'd forgotten about this, so users were getting it
2232 config file, I'd forgotten about this, so users were getting it
2226 off by default.
2233 off by default.
2227
2234
2228 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2235 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2229 consistency. Now magics can be called in multiline statements,
2236 consistency. Now magics can be called in multiline statements,
2230 and python variables can be expanded in magic calls via $var.
2237 and python variables can be expanded in magic calls via $var.
2231 This makes the magic system behave just like aliases or !system
2238 This makes the magic system behave just like aliases or !system
2232 calls.
2239 calls.
2233
2240
2234 2005-03-28 Fernando Perez <fperez@colorado.edu>
2241 2005-03-28 Fernando Perez <fperez@colorado.edu>
2235
2242
2236 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2243 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2237 expensive string additions for building command. Add support for
2244 expensive string additions for building command. Add support for
2238 trailing ';' when autocall is used.
2245 trailing ';' when autocall is used.
2239
2246
2240 2005-03-26 Fernando Perez <fperez@colorado.edu>
2247 2005-03-26 Fernando Perez <fperez@colorado.edu>
2241
2248
2242 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2249 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2243 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2250 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2244 ipython.el robust against prompts with any number of spaces
2251 ipython.el robust against prompts with any number of spaces
2245 (including 0) after the ':' character.
2252 (including 0) after the ':' character.
2246
2253
2247 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2254 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2248 continuation prompt, which misled users to think the line was
2255 continuation prompt, which misled users to think the line was
2249 already indented. Closes debian Bug#300847, reported to me by
2256 already indented. Closes debian Bug#300847, reported to me by
2250 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2257 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2251
2258
2252 2005-03-23 Fernando Perez <fperez@colorado.edu>
2259 2005-03-23 Fernando Perez <fperez@colorado.edu>
2253
2260
2254 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2261 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2255 properly aligned if they have embedded newlines.
2262 properly aligned if they have embedded newlines.
2256
2263
2257 * IPython/iplib.py (runlines): Add a public method to expose
2264 * IPython/iplib.py (runlines): Add a public method to expose
2258 IPython's code execution machinery, so that users can run strings
2265 IPython's code execution machinery, so that users can run strings
2259 as if they had been typed at the prompt interactively.
2266 as if they had been typed at the prompt interactively.
2260 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2267 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2261 methods which can call the system shell, but with python variable
2268 methods which can call the system shell, but with python variable
2262 expansion. The three such methods are: __IPYTHON__.system,
2269 expansion. The three such methods are: __IPYTHON__.system,
2263 .getoutput and .getoutputerror. These need to be documented in a
2270 .getoutput and .getoutputerror. These need to be documented in a
2264 'public API' section (to be written) of the manual.
2271 'public API' section (to be written) of the manual.
2265
2272
2266 2005-03-20 Fernando Perez <fperez@colorado.edu>
2273 2005-03-20 Fernando Perez <fperez@colorado.edu>
2267
2274
2268 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2275 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2269 for custom exception handling. This is quite powerful, and it
2276 for custom exception handling. This is quite powerful, and it
2270 allows for user-installable exception handlers which can trap
2277 allows for user-installable exception handlers which can trap
2271 custom exceptions at runtime and treat them separately from
2278 custom exceptions at runtime and treat them separately from
2272 IPython's default mechanisms. At the request of Frédéric
2279 IPython's default mechanisms. At the request of Frédéric
2273 Mantegazza <mantegazza-AT-ill.fr>.
2280 Mantegazza <mantegazza-AT-ill.fr>.
2274 (InteractiveShell.set_custom_completer): public API function to
2281 (InteractiveShell.set_custom_completer): public API function to
2275 add new completers at runtime.
2282 add new completers at runtime.
2276
2283
2277 2005-03-19 Fernando Perez <fperez@colorado.edu>
2284 2005-03-19 Fernando Perez <fperez@colorado.edu>
2278
2285
2279 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2286 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2280 allow objects which provide their docstrings via non-standard
2287 allow objects which provide their docstrings via non-standard
2281 mechanisms (like Pyro proxies) to still be inspected by ipython's
2288 mechanisms (like Pyro proxies) to still be inspected by ipython's
2282 ? system.
2289 ? system.
2283
2290
2284 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2291 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2285 automatic capture system. I tried quite hard to make it work
2292 automatic capture system. I tried quite hard to make it work
2286 reliably, and simply failed. I tried many combinations with the
2293 reliably, and simply failed. I tried many combinations with the
2287 subprocess module, but eventually nothing worked in all needed
2294 subprocess module, but eventually nothing worked in all needed
2288 cases (not blocking stdin for the child, duplicating stdout
2295 cases (not blocking stdin for the child, duplicating stdout
2289 without blocking, etc). The new %sc/%sx still do capture to these
2296 without blocking, etc). The new %sc/%sx still do capture to these
2290 magical list/string objects which make shell use much more
2297 magical list/string objects which make shell use much more
2291 conveninent, so not all is lost.
2298 conveninent, so not all is lost.
2292
2299
2293 XXX - FIX MANUAL for the change above!
2300 XXX - FIX MANUAL for the change above!
2294
2301
2295 (runsource): I copied code.py's runsource() into ipython to modify
2302 (runsource): I copied code.py's runsource() into ipython to modify
2296 it a bit. Now the code object and source to be executed are
2303 it a bit. Now the code object and source to be executed are
2297 stored in ipython. This makes this info accessible to third-party
2304 stored in ipython. This makes this info accessible to third-party
2298 tools, like custom exception handlers. After a request by Frédéric
2305 tools, like custom exception handlers. After a request by Frédéric
2299 Mantegazza <mantegazza-AT-ill.fr>.
2306 Mantegazza <mantegazza-AT-ill.fr>.
2300
2307
2301 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2308 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2302 history-search via readline (like C-p/C-n). I'd wanted this for a
2309 history-search via readline (like C-p/C-n). I'd wanted this for a
2303 long time, but only recently found out how to do it. For users
2310 long time, but only recently found out how to do it. For users
2304 who already have their ipythonrc files made and want this, just
2311 who already have their ipythonrc files made and want this, just
2305 add:
2312 add:
2306
2313
2307 readline_parse_and_bind "\e[A": history-search-backward
2314 readline_parse_and_bind "\e[A": history-search-backward
2308 readline_parse_and_bind "\e[B": history-search-forward
2315 readline_parse_and_bind "\e[B": history-search-forward
2309
2316
2310 2005-03-18 Fernando Perez <fperez@colorado.edu>
2317 2005-03-18 Fernando Perez <fperez@colorado.edu>
2311
2318
2312 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2319 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2313 LSString and SList classes which allow transparent conversions
2320 LSString and SList classes which allow transparent conversions
2314 between list mode and whitespace-separated string.
2321 between list mode and whitespace-separated string.
2315 (magic_r): Fix recursion problem in %r.
2322 (magic_r): Fix recursion problem in %r.
2316
2323
2317 * IPython/genutils.py (LSString): New class to be used for
2324 * IPython/genutils.py (LSString): New class to be used for
2318 automatic storage of the results of all alias/system calls in _o
2325 automatic storage of the results of all alias/system calls in _o
2319 and _e (stdout/err). These provide a .l/.list attribute which
2326 and _e (stdout/err). These provide a .l/.list attribute which
2320 does automatic splitting on newlines. This means that for most
2327 does automatic splitting on newlines. This means that for most
2321 uses, you'll never need to do capturing of output with %sc/%sx
2328 uses, you'll never need to do capturing of output with %sc/%sx
2322 anymore, since ipython keeps this always done for you. Note that
2329 anymore, since ipython keeps this always done for you. Note that
2323 only the LAST results are stored, the _o/e variables are
2330 only the LAST results are stored, the _o/e variables are
2324 overwritten on each call. If you need to save their contents
2331 overwritten on each call. If you need to save their contents
2325 further, simply bind them to any other name.
2332 further, simply bind them to any other name.
2326
2333
2327 2005-03-17 Fernando Perez <fperez@colorado.edu>
2334 2005-03-17 Fernando Perez <fperez@colorado.edu>
2328
2335
2329 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2336 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2330 prompt namespace handling.
2337 prompt namespace handling.
2331
2338
2332 2005-03-16 Fernando Perez <fperez@colorado.edu>
2339 2005-03-16 Fernando Perez <fperez@colorado.edu>
2333
2340
2334 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2341 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2335 classic prompts to be '>>> ' (final space was missing, and it
2342 classic prompts to be '>>> ' (final space was missing, and it
2336 trips the emacs python mode).
2343 trips the emacs python mode).
2337 (BasePrompt.__str__): Added safe support for dynamic prompt
2344 (BasePrompt.__str__): Added safe support for dynamic prompt
2338 strings. Now you can set your prompt string to be '$x', and the
2345 strings. Now you can set your prompt string to be '$x', and the
2339 value of x will be printed from your interactive namespace. The
2346 value of x will be printed from your interactive namespace. The
2340 interpolation syntax includes the full Itpl support, so
2347 interpolation syntax includes the full Itpl support, so
2341 ${foo()+x+bar()} is a valid prompt string now, and the function
2348 ${foo()+x+bar()} is a valid prompt string now, and the function
2342 calls will be made at runtime.
2349 calls will be made at runtime.
2343
2350
2344 2005-03-15 Fernando Perez <fperez@colorado.edu>
2351 2005-03-15 Fernando Perez <fperez@colorado.edu>
2345
2352
2346 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2353 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2347 avoid name clashes in pylab. %hist still works, it just forwards
2354 avoid name clashes in pylab. %hist still works, it just forwards
2348 the call to %history.
2355 the call to %history.
2349
2356
2350 2005-03-02 *** Released version 0.6.12
2357 2005-03-02 *** Released version 0.6.12
2351
2358
2352 2005-03-02 Fernando Perez <fperez@colorado.edu>
2359 2005-03-02 Fernando Perez <fperez@colorado.edu>
2353
2360
2354 * IPython/iplib.py (handle_magic): log magic calls properly as
2361 * IPython/iplib.py (handle_magic): log magic calls properly as
2355 ipmagic() function calls.
2362 ipmagic() function calls.
2356
2363
2357 * IPython/Magic.py (magic_time): Improved %time to support
2364 * IPython/Magic.py (magic_time): Improved %time to support
2358 statements and provide wall-clock as well as CPU time.
2365 statements and provide wall-clock as well as CPU time.
2359
2366
2360 2005-02-27 Fernando Perez <fperez@colorado.edu>
2367 2005-02-27 Fernando Perez <fperez@colorado.edu>
2361
2368
2362 * IPython/hooks.py: New hooks module, to expose user-modifiable
2369 * IPython/hooks.py: New hooks module, to expose user-modifiable
2363 IPython functionality in a clean manner. For now only the editor
2370 IPython functionality in a clean manner. For now only the editor
2364 hook is actually written, and other thigns which I intend to turn
2371 hook is actually written, and other thigns which I intend to turn
2365 into proper hooks aren't yet there. The display and prefilter
2372 into proper hooks aren't yet there. The display and prefilter
2366 stuff, for example, should be hooks. But at least now the
2373 stuff, for example, should be hooks. But at least now the
2367 framework is in place, and the rest can be moved here with more
2374 framework is in place, and the rest can be moved here with more
2368 time later. IPython had had a .hooks variable for a long time for
2375 time later. IPython had had a .hooks variable for a long time for
2369 this purpose, but I'd never actually used it for anything.
2376 this purpose, but I'd never actually used it for anything.
2370
2377
2371 2005-02-26 Fernando Perez <fperez@colorado.edu>
2378 2005-02-26 Fernando Perez <fperez@colorado.edu>
2372
2379
2373 * IPython/ipmaker.py (make_IPython): make the default ipython
2380 * IPython/ipmaker.py (make_IPython): make the default ipython
2374 directory be called _ipython under win32, to follow more the
2381 directory be called _ipython under win32, to follow more the
2375 naming peculiarities of that platform (where buggy software like
2382 naming peculiarities of that platform (where buggy software like
2376 Visual Sourcesafe breaks with .named directories). Reported by
2383 Visual Sourcesafe breaks with .named directories). Reported by
2377 Ville Vainio.
2384 Ville Vainio.
2378
2385
2379 2005-02-23 Fernando Perez <fperez@colorado.edu>
2386 2005-02-23 Fernando Perez <fperez@colorado.edu>
2380
2387
2381 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2388 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2382 auto_aliases for win32 which were causing problems. Users can
2389 auto_aliases for win32 which were causing problems. Users can
2383 define the ones they personally like.
2390 define the ones they personally like.
2384
2391
2385 2005-02-21 Fernando Perez <fperez@colorado.edu>
2392 2005-02-21 Fernando Perez <fperez@colorado.edu>
2386
2393
2387 * IPython/Magic.py (magic_time): new magic to time execution of
2394 * IPython/Magic.py (magic_time): new magic to time execution of
2388 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2395 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2389
2396
2390 2005-02-19 Fernando Perez <fperez@colorado.edu>
2397 2005-02-19 Fernando Perez <fperez@colorado.edu>
2391
2398
2392 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2399 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2393 into keys (for prompts, for example).
2400 into keys (for prompts, for example).
2394
2401
2395 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2402 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2396 prompts in case users want them. This introduces a small behavior
2403 prompts in case users want them. This introduces a small behavior
2397 change: ipython does not automatically add a space to all prompts
2404 change: ipython does not automatically add a space to all prompts
2398 anymore. To get the old prompts with a space, users should add it
2405 anymore. To get the old prompts with a space, users should add it
2399 manually to their ipythonrc file, so for example prompt_in1 should
2406 manually to their ipythonrc file, so for example prompt_in1 should
2400 now read 'In [\#]: ' instead of 'In [\#]:'.
2407 now read 'In [\#]: ' instead of 'In [\#]:'.
2401 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2408 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2402 file) to control left-padding of secondary prompts.
2409 file) to control left-padding of secondary prompts.
2403
2410
2404 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2411 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2405 the profiler can't be imported. Fix for Debian, which removed
2412 the profiler can't be imported. Fix for Debian, which removed
2406 profile.py because of License issues. I applied a slightly
2413 profile.py because of License issues. I applied a slightly
2407 modified version of the original Debian patch at
2414 modified version of the original Debian patch at
2408 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2415 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2409
2416
2410 2005-02-17 Fernando Perez <fperez@colorado.edu>
2417 2005-02-17 Fernando Perez <fperez@colorado.edu>
2411
2418
2412 * IPython/genutils.py (native_line_ends): Fix bug which would
2419 * IPython/genutils.py (native_line_ends): Fix bug which would
2413 cause improper line-ends under win32 b/c I was not opening files
2420 cause improper line-ends under win32 b/c I was not opening files
2414 in binary mode. Bug report and fix thanks to Ville.
2421 in binary mode. Bug report and fix thanks to Ville.
2415
2422
2416 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2423 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2417 trying to catch spurious foo[1] autocalls. My fix actually broke
2424 trying to catch spurious foo[1] autocalls. My fix actually broke
2418 ',/' autoquote/call with explicit escape (bad regexp).
2425 ',/' autoquote/call with explicit escape (bad regexp).
2419
2426
2420 2005-02-15 *** Released version 0.6.11
2427 2005-02-15 *** Released version 0.6.11
2421
2428
2422 2005-02-14 Fernando Perez <fperez@colorado.edu>
2429 2005-02-14 Fernando Perez <fperez@colorado.edu>
2423
2430
2424 * IPython/background_jobs.py: New background job management
2431 * IPython/background_jobs.py: New background job management
2425 subsystem. This is implemented via a new set of classes, and
2432 subsystem. This is implemented via a new set of classes, and
2426 IPython now provides a builtin 'jobs' object for background job
2433 IPython now provides a builtin 'jobs' object for background job
2427 execution. A convenience %bg magic serves as a lightweight
2434 execution. A convenience %bg magic serves as a lightweight
2428 frontend for starting the more common type of calls. This was
2435 frontend for starting the more common type of calls. This was
2429 inspired by discussions with B. Granger and the BackgroundCommand
2436 inspired by discussions with B. Granger and the BackgroundCommand
2430 class described in the book Python Scripting for Computational
2437 class described in the book Python Scripting for Computational
2431 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2438 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2432 (although ultimately no code from this text was used, as IPython's
2439 (although ultimately no code from this text was used, as IPython's
2433 system is a separate implementation).
2440 system is a separate implementation).
2434
2441
2435 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2442 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2436 to control the completion of single/double underscore names
2443 to control the completion of single/double underscore names
2437 separately. As documented in the example ipytonrc file, the
2444 separately. As documented in the example ipytonrc file, the
2438 readline_omit__names variable can now be set to 2, to omit even
2445 readline_omit__names variable can now be set to 2, to omit even
2439 single underscore names. Thanks to a patch by Brian Wong
2446 single underscore names. Thanks to a patch by Brian Wong
2440 <BrianWong-AT-AirgoNetworks.Com>.
2447 <BrianWong-AT-AirgoNetworks.Com>.
2441 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2448 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2442 be autocalled as foo([1]) if foo were callable. A problem for
2449 be autocalled as foo([1]) if foo were callable. A problem for
2443 things which are both callable and implement __getitem__.
2450 things which are both callable and implement __getitem__.
2444 (init_readline): Fix autoindentation for win32. Thanks to a patch
2451 (init_readline): Fix autoindentation for win32. Thanks to a patch
2445 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2452 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2446
2453
2447 2005-02-12 Fernando Perez <fperez@colorado.edu>
2454 2005-02-12 Fernando Perez <fperez@colorado.edu>
2448
2455
2449 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2456 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2450 which I had written long ago to sort out user error messages which
2457 which I had written long ago to sort out user error messages which
2451 may occur during startup. This seemed like a good idea initially,
2458 may occur during startup. This seemed like a good idea initially,
2452 but it has proven a disaster in retrospect. I don't want to
2459 but it has proven a disaster in retrospect. I don't want to
2453 change much code for now, so my fix is to set the internal 'debug'
2460 change much code for now, so my fix is to set the internal 'debug'
2454 flag to true everywhere, whose only job was precisely to control
2461 flag to true everywhere, whose only job was precisely to control
2455 this subsystem. This closes issue 28 (as well as avoiding all
2462 this subsystem. This closes issue 28 (as well as avoiding all
2456 sorts of strange hangups which occur from time to time).
2463 sorts of strange hangups which occur from time to time).
2457
2464
2458 2005-02-07 Fernando Perez <fperez@colorado.edu>
2465 2005-02-07 Fernando Perez <fperez@colorado.edu>
2459
2466
2460 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2467 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2461 previous call produced a syntax error.
2468 previous call produced a syntax error.
2462
2469
2463 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2470 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2464 classes without constructor.
2471 classes without constructor.
2465
2472
2466 2005-02-06 Fernando Perez <fperez@colorado.edu>
2473 2005-02-06 Fernando Perez <fperez@colorado.edu>
2467
2474
2468 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2475 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2469 completions with the results of each matcher, so we return results
2476 completions with the results of each matcher, so we return results
2470 to the user from all namespaces. This breaks with ipython
2477 to the user from all namespaces. This breaks with ipython
2471 tradition, but I think it's a nicer behavior. Now you get all
2478 tradition, but I think it's a nicer behavior. Now you get all
2472 possible completions listed, from all possible namespaces (python,
2479 possible completions listed, from all possible namespaces (python,
2473 filesystem, magics...) After a request by John Hunter
2480 filesystem, magics...) After a request by John Hunter
2474 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2481 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2475
2482
2476 2005-02-05 Fernando Perez <fperez@colorado.edu>
2483 2005-02-05 Fernando Perez <fperez@colorado.edu>
2477
2484
2478 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2485 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2479 the call had quote characters in it (the quotes were stripped).
2486 the call had quote characters in it (the quotes were stripped).
2480
2487
2481 2005-01-31 Fernando Perez <fperez@colorado.edu>
2488 2005-01-31 Fernando Perez <fperez@colorado.edu>
2482
2489
2483 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2490 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2484 Itpl.itpl() to make the code more robust against psyco
2491 Itpl.itpl() to make the code more robust against psyco
2485 optimizations.
2492 optimizations.
2486
2493
2487 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2494 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2488 of causing an exception. Quicker, cleaner.
2495 of causing an exception. Quicker, cleaner.
2489
2496
2490 2005-01-28 Fernando Perez <fperez@colorado.edu>
2497 2005-01-28 Fernando Perez <fperez@colorado.edu>
2491
2498
2492 * scripts/ipython_win_post_install.py (install): hardcode
2499 * scripts/ipython_win_post_install.py (install): hardcode
2493 sys.prefix+'python.exe' as the executable path. It turns out that
2500 sys.prefix+'python.exe' as the executable path. It turns out that
2494 during the post-installation run, sys.executable resolves to the
2501 during the post-installation run, sys.executable resolves to the
2495 name of the binary installer! I should report this as a distutils
2502 name of the binary installer! I should report this as a distutils
2496 bug, I think. I updated the .10 release with this tiny fix, to
2503 bug, I think. I updated the .10 release with this tiny fix, to
2497 avoid annoying the lists further.
2504 avoid annoying the lists further.
2498
2505
2499 2005-01-27 *** Released version 0.6.10
2506 2005-01-27 *** Released version 0.6.10
2500
2507
2501 2005-01-27 Fernando Perez <fperez@colorado.edu>
2508 2005-01-27 Fernando Perez <fperez@colorado.edu>
2502
2509
2503 * IPython/numutils.py (norm): Added 'inf' as optional name for
2510 * IPython/numutils.py (norm): Added 'inf' as optional name for
2504 L-infinity norm, included references to mathworld.com for vector
2511 L-infinity norm, included references to mathworld.com for vector
2505 norm definitions.
2512 norm definitions.
2506 (amin/amax): added amin/amax for array min/max. Similar to what
2513 (amin/amax): added amin/amax for array min/max. Similar to what
2507 pylab ships with after the recent reorganization of names.
2514 pylab ships with after the recent reorganization of names.
2508 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2515 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2509
2516
2510 * ipython.el: committed Alex's recent fixes and improvements.
2517 * ipython.el: committed Alex's recent fixes and improvements.
2511 Tested with python-mode from CVS, and it looks excellent. Since
2518 Tested with python-mode from CVS, and it looks excellent. Since
2512 python-mode hasn't released anything in a while, I'm temporarily
2519 python-mode hasn't released anything in a while, I'm temporarily
2513 putting a copy of today's CVS (v 4.70) of python-mode in:
2520 putting a copy of today's CVS (v 4.70) of python-mode in:
2514 http://ipython.scipy.org/tmp/python-mode.el
2521 http://ipython.scipy.org/tmp/python-mode.el
2515
2522
2516 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2523 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2517 sys.executable for the executable name, instead of assuming it's
2524 sys.executable for the executable name, instead of assuming it's
2518 called 'python.exe' (the post-installer would have produced broken
2525 called 'python.exe' (the post-installer would have produced broken
2519 setups on systems with a differently named python binary).
2526 setups on systems with a differently named python binary).
2520
2527
2521 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2528 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2522 references to os.linesep, to make the code more
2529 references to os.linesep, to make the code more
2523 platform-independent. This is also part of the win32 coloring
2530 platform-independent. This is also part of the win32 coloring
2524 fixes.
2531 fixes.
2525
2532
2526 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2533 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2527 lines, which actually cause coloring bugs because the length of
2534 lines, which actually cause coloring bugs because the length of
2528 the line is very difficult to correctly compute with embedded
2535 the line is very difficult to correctly compute with embedded
2529 escapes. This was the source of all the coloring problems under
2536 escapes. This was the source of all the coloring problems under
2530 Win32. I think that _finally_, Win32 users have a properly
2537 Win32. I think that _finally_, Win32 users have a properly
2531 working ipython in all respects. This would never have happened
2538 working ipython in all respects. This would never have happened
2532 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2539 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2533
2540
2534 2005-01-26 *** Released version 0.6.9
2541 2005-01-26 *** Released version 0.6.9
2535
2542
2536 2005-01-25 Fernando Perez <fperez@colorado.edu>
2543 2005-01-25 Fernando Perez <fperez@colorado.edu>
2537
2544
2538 * setup.py: finally, we have a true Windows installer, thanks to
2545 * setup.py: finally, we have a true Windows installer, thanks to
2539 the excellent work of Viktor Ransmayr
2546 the excellent work of Viktor Ransmayr
2540 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2547 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2541 Windows users. The setup routine is quite a bit cleaner thanks to
2548 Windows users. The setup routine is quite a bit cleaner thanks to
2542 this, and the post-install script uses the proper functions to
2549 this, and the post-install script uses the proper functions to
2543 allow a clean de-installation using the standard Windows Control
2550 allow a clean de-installation using the standard Windows Control
2544 Panel.
2551 Panel.
2545
2552
2546 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2553 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2547 environment variable under all OSes (including win32) if
2554 environment variable under all OSes (including win32) if
2548 available. This will give consistency to win32 users who have set
2555 available. This will give consistency to win32 users who have set
2549 this variable for any reason. If os.environ['HOME'] fails, the
2556 this variable for any reason. If os.environ['HOME'] fails, the
2550 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2557 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2551
2558
2552 2005-01-24 Fernando Perez <fperez@colorado.edu>
2559 2005-01-24 Fernando Perez <fperez@colorado.edu>
2553
2560
2554 * IPython/numutils.py (empty_like): add empty_like(), similar to
2561 * IPython/numutils.py (empty_like): add empty_like(), similar to
2555 zeros_like() but taking advantage of the new empty() Numeric routine.
2562 zeros_like() but taking advantage of the new empty() Numeric routine.
2556
2563
2557 2005-01-23 *** Released version 0.6.8
2564 2005-01-23 *** Released version 0.6.8
2558
2565
2559 2005-01-22 Fernando Perez <fperez@colorado.edu>
2566 2005-01-22 Fernando Perez <fperez@colorado.edu>
2560
2567
2561 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2568 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2562 automatic show() calls. After discussing things with JDH, it
2569 automatic show() calls. After discussing things with JDH, it
2563 turns out there are too many corner cases where this can go wrong.
2570 turns out there are too many corner cases where this can go wrong.
2564 It's best not to try to be 'too smart', and simply have ipython
2571 It's best not to try to be 'too smart', and simply have ipython
2565 reproduce as much as possible the default behavior of a normal
2572 reproduce as much as possible the default behavior of a normal
2566 python shell.
2573 python shell.
2567
2574
2568 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2575 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2569 line-splitting regexp and _prefilter() to avoid calling getattr()
2576 line-splitting regexp and _prefilter() to avoid calling getattr()
2570 on assignments. This closes
2577 on assignments. This closes
2571 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2578 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2572 readline uses getattr(), so a simple <TAB> keypress is still
2579 readline uses getattr(), so a simple <TAB> keypress is still
2573 enough to trigger getattr() calls on an object.
2580 enough to trigger getattr() calls on an object.
2574
2581
2575 2005-01-21 Fernando Perez <fperez@colorado.edu>
2582 2005-01-21 Fernando Perez <fperez@colorado.edu>
2576
2583
2577 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2584 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2578 docstring under pylab so it doesn't mask the original.
2585 docstring under pylab so it doesn't mask the original.
2579
2586
2580 2005-01-21 *** Released version 0.6.7
2587 2005-01-21 *** Released version 0.6.7
2581
2588
2582 2005-01-21 Fernando Perez <fperez@colorado.edu>
2589 2005-01-21 Fernando Perez <fperez@colorado.edu>
2583
2590
2584 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2591 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2585 signal handling for win32 users in multithreaded mode.
2592 signal handling for win32 users in multithreaded mode.
2586
2593
2587 2005-01-17 Fernando Perez <fperez@colorado.edu>
2594 2005-01-17 Fernando Perez <fperez@colorado.edu>
2588
2595
2589 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2596 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2590 instances with no __init__. After a crash report by Norbert Nemec
2597 instances with no __init__. After a crash report by Norbert Nemec
2591 <Norbert-AT-nemec-online.de>.
2598 <Norbert-AT-nemec-online.de>.
2592
2599
2593 2005-01-14 Fernando Perez <fperez@colorado.edu>
2600 2005-01-14 Fernando Perez <fperez@colorado.edu>
2594
2601
2595 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2602 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2596 names for verbose exceptions, when multiple dotted names and the
2603 names for verbose exceptions, when multiple dotted names and the
2597 'parent' object were present on the same line.
2604 'parent' object were present on the same line.
2598
2605
2599 2005-01-11 Fernando Perez <fperez@colorado.edu>
2606 2005-01-11 Fernando Perez <fperez@colorado.edu>
2600
2607
2601 * IPython/genutils.py (flag_calls): new utility to trap and flag
2608 * IPython/genutils.py (flag_calls): new utility to trap and flag
2602 calls in functions. I need it to clean up matplotlib support.
2609 calls in functions. I need it to clean up matplotlib support.
2603 Also removed some deprecated code in genutils.
2610 Also removed some deprecated code in genutils.
2604
2611
2605 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2612 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2606 that matplotlib scripts called with %run, which don't call show()
2613 that matplotlib scripts called with %run, which don't call show()
2607 themselves, still have their plotting windows open.
2614 themselves, still have their plotting windows open.
2608
2615
2609 2005-01-05 Fernando Perez <fperez@colorado.edu>
2616 2005-01-05 Fernando Perez <fperez@colorado.edu>
2610
2617
2611 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2618 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2612 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2619 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2613
2620
2614 2004-12-19 Fernando Perez <fperez@colorado.edu>
2621 2004-12-19 Fernando Perez <fperez@colorado.edu>
2615
2622
2616 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2623 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2617 parent_runcode, which was an eyesore. The same result can be
2624 parent_runcode, which was an eyesore. The same result can be
2618 obtained with Python's regular superclass mechanisms.
2625 obtained with Python's regular superclass mechanisms.
2619
2626
2620 2004-12-17 Fernando Perez <fperez@colorado.edu>
2627 2004-12-17 Fernando Perez <fperez@colorado.edu>
2621
2628
2622 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2629 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2623 reported by Prabhu.
2630 reported by Prabhu.
2624 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2631 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2625 sys.stderr) instead of explicitly calling sys.stderr. This helps
2632 sys.stderr) instead of explicitly calling sys.stderr. This helps
2626 maintain our I/O abstractions clean, for future GUI embeddings.
2633 maintain our I/O abstractions clean, for future GUI embeddings.
2627
2634
2628 * IPython/genutils.py (info): added new utility for sys.stderr
2635 * IPython/genutils.py (info): added new utility for sys.stderr
2629 unified info message handling (thin wrapper around warn()).
2636 unified info message handling (thin wrapper around warn()).
2630
2637
2631 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2638 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2632 composite (dotted) names on verbose exceptions.
2639 composite (dotted) names on verbose exceptions.
2633 (VerboseTB.nullrepr): harden against another kind of errors which
2640 (VerboseTB.nullrepr): harden against another kind of errors which
2634 Python's inspect module can trigger, and which were crashing
2641 Python's inspect module can trigger, and which were crashing
2635 IPython. Thanks to a report by Marco Lombardi
2642 IPython. Thanks to a report by Marco Lombardi
2636 <mlombard-AT-ma010192.hq.eso.org>.
2643 <mlombard-AT-ma010192.hq.eso.org>.
2637
2644
2638 2004-12-13 *** Released version 0.6.6
2645 2004-12-13 *** Released version 0.6.6
2639
2646
2640 2004-12-12 Fernando Perez <fperez@colorado.edu>
2647 2004-12-12 Fernando Perez <fperez@colorado.edu>
2641
2648
2642 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2649 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2643 generated by pygtk upon initialization if it was built without
2650 generated by pygtk upon initialization if it was built without
2644 threads (for matplotlib users). After a crash reported by
2651 threads (for matplotlib users). After a crash reported by
2645 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2652 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2646
2653
2647 * IPython/ipmaker.py (make_IPython): fix small bug in the
2654 * IPython/ipmaker.py (make_IPython): fix small bug in the
2648 import_some parameter for multiple imports.
2655 import_some parameter for multiple imports.
2649
2656
2650 * IPython/iplib.py (ipmagic): simplified the interface of
2657 * IPython/iplib.py (ipmagic): simplified the interface of
2651 ipmagic() to take a single string argument, just as it would be
2658 ipmagic() to take a single string argument, just as it would be
2652 typed at the IPython cmd line.
2659 typed at the IPython cmd line.
2653 (ipalias): Added new ipalias() with an interface identical to
2660 (ipalias): Added new ipalias() with an interface identical to
2654 ipmagic(). This completes exposing a pure python interface to the
2661 ipmagic(). This completes exposing a pure python interface to the
2655 alias and magic system, which can be used in loops or more complex
2662 alias and magic system, which can be used in loops or more complex
2656 code where IPython's automatic line mangling is not active.
2663 code where IPython's automatic line mangling is not active.
2657
2664
2658 * IPython/genutils.py (timing): changed interface of timing to
2665 * IPython/genutils.py (timing): changed interface of timing to
2659 simply run code once, which is the most common case. timings()
2666 simply run code once, which is the most common case. timings()
2660 remains unchanged, for the cases where you want multiple runs.
2667 remains unchanged, for the cases where you want multiple runs.
2661
2668
2662 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2669 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2663 bug where Python2.2 crashes with exec'ing code which does not end
2670 bug where Python2.2 crashes with exec'ing code which does not end
2664 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2671 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2665 before.
2672 before.
2666
2673
2667 2004-12-10 Fernando Perez <fperez@colorado.edu>
2674 2004-12-10 Fernando Perez <fperez@colorado.edu>
2668
2675
2669 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2676 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2670 -t to -T, to accomodate the new -t flag in %run (the %run and
2677 -t to -T, to accomodate the new -t flag in %run (the %run and
2671 %prun options are kind of intermixed, and it's not easy to change
2678 %prun options are kind of intermixed, and it's not easy to change
2672 this with the limitations of python's getopt).
2679 this with the limitations of python's getopt).
2673
2680
2674 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2681 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2675 the execution of scripts. It's not as fine-tuned as timeit.py,
2682 the execution of scripts. It's not as fine-tuned as timeit.py,
2676 but it works from inside ipython (and under 2.2, which lacks
2683 but it works from inside ipython (and under 2.2, which lacks
2677 timeit.py). Optionally a number of runs > 1 can be given for
2684 timeit.py). Optionally a number of runs > 1 can be given for
2678 timing very short-running code.
2685 timing very short-running code.
2679
2686
2680 * IPython/genutils.py (uniq_stable): new routine which returns a
2687 * IPython/genutils.py (uniq_stable): new routine which returns a
2681 list of unique elements in any iterable, but in stable order of
2688 list of unique elements in any iterable, but in stable order of
2682 appearance. I needed this for the ultraTB fixes, and it's a handy
2689 appearance. I needed this for the ultraTB fixes, and it's a handy
2683 utility.
2690 utility.
2684
2691
2685 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2692 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2686 dotted names in Verbose exceptions. This had been broken since
2693 dotted names in Verbose exceptions. This had been broken since
2687 the very start, now x.y will properly be printed in a Verbose
2694 the very start, now x.y will properly be printed in a Verbose
2688 traceback, instead of x being shown and y appearing always as an
2695 traceback, instead of x being shown and y appearing always as an
2689 'undefined global'. Getting this to work was a bit tricky,
2696 'undefined global'. Getting this to work was a bit tricky,
2690 because by default python tokenizers are stateless. Saved by
2697 because by default python tokenizers are stateless. Saved by
2691 python's ability to easily add a bit of state to an arbitrary
2698 python's ability to easily add a bit of state to an arbitrary
2692 function (without needing to build a full-blown callable object).
2699 function (without needing to build a full-blown callable object).
2693
2700
2694 Also big cleanup of this code, which had horrendous runtime
2701 Also big cleanup of this code, which had horrendous runtime
2695 lookups of zillions of attributes for colorization. Moved all
2702 lookups of zillions of attributes for colorization. Moved all
2696 this code into a few templates, which make it cleaner and quicker.
2703 this code into a few templates, which make it cleaner and quicker.
2697
2704
2698 Printout quality was also improved for Verbose exceptions: one
2705 Printout quality was also improved for Verbose exceptions: one
2699 variable per line, and memory addresses are printed (this can be
2706 variable per line, and memory addresses are printed (this can be
2700 quite handy in nasty debugging situations, which is what Verbose
2707 quite handy in nasty debugging situations, which is what Verbose
2701 is for).
2708 is for).
2702
2709
2703 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2710 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2704 the command line as scripts to be loaded by embedded instances.
2711 the command line as scripts to be loaded by embedded instances.
2705 Doing so has the potential for an infinite recursion if there are
2712 Doing so has the potential for an infinite recursion if there are
2706 exceptions thrown in the process. This fixes a strange crash
2713 exceptions thrown in the process. This fixes a strange crash
2707 reported by Philippe MULLER <muller-AT-irit.fr>.
2714 reported by Philippe MULLER <muller-AT-irit.fr>.
2708
2715
2709 2004-12-09 Fernando Perez <fperez@colorado.edu>
2716 2004-12-09 Fernando Perez <fperez@colorado.edu>
2710
2717
2711 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2718 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2712 to reflect new names in matplotlib, which now expose the
2719 to reflect new names in matplotlib, which now expose the
2713 matlab-compatible interface via a pylab module instead of the
2720 matlab-compatible interface via a pylab module instead of the
2714 'matlab' name. The new code is backwards compatible, so users of
2721 'matlab' name. The new code is backwards compatible, so users of
2715 all matplotlib versions are OK. Patch by J. Hunter.
2722 all matplotlib versions are OK. Patch by J. Hunter.
2716
2723
2717 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2724 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2718 of __init__ docstrings for instances (class docstrings are already
2725 of __init__ docstrings for instances (class docstrings are already
2719 automatically printed). Instances with customized docstrings
2726 automatically printed). Instances with customized docstrings
2720 (indep. of the class) are also recognized and all 3 separate
2727 (indep. of the class) are also recognized and all 3 separate
2721 docstrings are printed (instance, class, constructor). After some
2728 docstrings are printed (instance, class, constructor). After some
2722 comments/suggestions by J. Hunter.
2729 comments/suggestions by J. Hunter.
2723
2730
2724 2004-12-05 Fernando Perez <fperez@colorado.edu>
2731 2004-12-05 Fernando Perez <fperez@colorado.edu>
2725
2732
2726 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2733 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2727 warnings when tab-completion fails and triggers an exception.
2734 warnings when tab-completion fails and triggers an exception.
2728
2735
2729 2004-12-03 Fernando Perez <fperez@colorado.edu>
2736 2004-12-03 Fernando Perez <fperez@colorado.edu>
2730
2737
2731 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2738 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2732 be triggered when using 'run -p'. An incorrect option flag was
2739 be triggered when using 'run -p'. An incorrect option flag was
2733 being set ('d' instead of 'D').
2740 being set ('d' instead of 'D').
2734 (manpage): fix missing escaped \- sign.
2741 (manpage): fix missing escaped \- sign.
2735
2742
2736 2004-11-30 *** Released version 0.6.5
2743 2004-11-30 *** Released version 0.6.5
2737
2744
2738 2004-11-30 Fernando Perez <fperez@colorado.edu>
2745 2004-11-30 Fernando Perez <fperez@colorado.edu>
2739
2746
2740 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2747 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2741 setting with -d option.
2748 setting with -d option.
2742
2749
2743 * setup.py (docfiles): Fix problem where the doc glob I was using
2750 * setup.py (docfiles): Fix problem where the doc glob I was using
2744 was COMPLETELY BROKEN. It was giving the right files by pure
2751 was COMPLETELY BROKEN. It was giving the right files by pure
2745 accident, but failed once I tried to include ipython.el. Note:
2752 accident, but failed once I tried to include ipython.el. Note:
2746 glob() does NOT allow you to do exclusion on multiple endings!
2753 glob() does NOT allow you to do exclusion on multiple endings!
2747
2754
2748 2004-11-29 Fernando Perez <fperez@colorado.edu>
2755 2004-11-29 Fernando Perez <fperez@colorado.edu>
2749
2756
2750 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2757 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2751 the manpage as the source. Better formatting & consistency.
2758 the manpage as the source. Better formatting & consistency.
2752
2759
2753 * IPython/Magic.py (magic_run): Added new -d option, to run
2760 * IPython/Magic.py (magic_run): Added new -d option, to run
2754 scripts under the control of the python pdb debugger. Note that
2761 scripts under the control of the python pdb debugger. Note that
2755 this required changing the %prun option -d to -D, to avoid a clash
2762 this required changing the %prun option -d to -D, to avoid a clash
2756 (since %run must pass options to %prun, and getopt is too dumb to
2763 (since %run must pass options to %prun, and getopt is too dumb to
2757 handle options with string values with embedded spaces). Thanks
2764 handle options with string values with embedded spaces). Thanks
2758 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2765 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2759 (magic_who_ls): added type matching to %who and %whos, so that one
2766 (magic_who_ls): added type matching to %who and %whos, so that one
2760 can filter their output to only include variables of certain
2767 can filter their output to only include variables of certain
2761 types. Another suggestion by Matthew.
2768 types. Another suggestion by Matthew.
2762 (magic_whos): Added memory summaries in kb and Mb for arrays.
2769 (magic_whos): Added memory summaries in kb and Mb for arrays.
2763 (magic_who): Improve formatting (break lines every 9 vars).
2770 (magic_who): Improve formatting (break lines every 9 vars).
2764
2771
2765 2004-11-28 Fernando Perez <fperez@colorado.edu>
2772 2004-11-28 Fernando Perez <fperez@colorado.edu>
2766
2773
2767 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2774 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2768 cache when empty lines were present.
2775 cache when empty lines were present.
2769
2776
2770 2004-11-24 Fernando Perez <fperez@colorado.edu>
2777 2004-11-24 Fernando Perez <fperez@colorado.edu>
2771
2778
2772 * IPython/usage.py (__doc__): document the re-activated threading
2779 * IPython/usage.py (__doc__): document the re-activated threading
2773 options for WX and GTK.
2780 options for WX and GTK.
2774
2781
2775 2004-11-23 Fernando Perez <fperez@colorado.edu>
2782 2004-11-23 Fernando Perez <fperez@colorado.edu>
2776
2783
2777 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2784 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2778 the -wthread and -gthread options, along with a new -tk one to try
2785 the -wthread and -gthread options, along with a new -tk one to try
2779 and coordinate Tk threading with wx/gtk. The tk support is very
2786 and coordinate Tk threading with wx/gtk. The tk support is very
2780 platform dependent, since it seems to require Tcl and Tk to be
2787 platform dependent, since it seems to require Tcl and Tk to be
2781 built with threads (Fedora1/2 appears NOT to have it, but in
2788 built with threads (Fedora1/2 appears NOT to have it, but in
2782 Prabhu's Debian boxes it works OK). But even with some Tk
2789 Prabhu's Debian boxes it works OK). But even with some Tk
2783 limitations, this is a great improvement.
2790 limitations, this is a great improvement.
2784
2791
2785 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2792 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2786 info in user prompts. Patch by Prabhu.
2793 info in user prompts. Patch by Prabhu.
2787
2794
2788 2004-11-18 Fernando Perez <fperez@colorado.edu>
2795 2004-11-18 Fernando Perez <fperez@colorado.edu>
2789
2796
2790 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2797 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2791 EOFErrors and bail, to avoid infinite loops if a non-terminating
2798 EOFErrors and bail, to avoid infinite loops if a non-terminating
2792 file is fed into ipython. Patch submitted in issue 19 by user,
2799 file is fed into ipython. Patch submitted in issue 19 by user,
2793 many thanks.
2800 many thanks.
2794
2801
2795 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2802 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2796 autoquote/parens in continuation prompts, which can cause lots of
2803 autoquote/parens in continuation prompts, which can cause lots of
2797 problems. Closes roundup issue 20.
2804 problems. Closes roundup issue 20.
2798
2805
2799 2004-11-17 Fernando Perez <fperez@colorado.edu>
2806 2004-11-17 Fernando Perez <fperez@colorado.edu>
2800
2807
2801 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2808 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2802 reported as debian bug #280505. I'm not sure my local changelog
2809 reported as debian bug #280505. I'm not sure my local changelog
2803 entry has the proper debian format (Jack?).
2810 entry has the proper debian format (Jack?).
2804
2811
2805 2004-11-08 *** Released version 0.6.4
2812 2004-11-08 *** Released version 0.6.4
2806
2813
2807 2004-11-08 Fernando Perez <fperez@colorado.edu>
2814 2004-11-08 Fernando Perez <fperez@colorado.edu>
2808
2815
2809 * IPython/iplib.py (init_readline): Fix exit message for Windows
2816 * IPython/iplib.py (init_readline): Fix exit message for Windows
2810 when readline is active. Thanks to a report by Eric Jones
2817 when readline is active. Thanks to a report by Eric Jones
2811 <eric-AT-enthought.com>.
2818 <eric-AT-enthought.com>.
2812
2819
2813 2004-11-07 Fernando Perez <fperez@colorado.edu>
2820 2004-11-07 Fernando Perez <fperez@colorado.edu>
2814
2821
2815 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2822 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2816 sometimes seen by win2k/cygwin users.
2823 sometimes seen by win2k/cygwin users.
2817
2824
2818 2004-11-06 Fernando Perez <fperez@colorado.edu>
2825 2004-11-06 Fernando Perez <fperez@colorado.edu>
2819
2826
2820 * IPython/iplib.py (interact): Change the handling of %Exit from
2827 * IPython/iplib.py (interact): Change the handling of %Exit from
2821 trying to propagate a SystemExit to an internal ipython flag.
2828 trying to propagate a SystemExit to an internal ipython flag.
2822 This is less elegant than using Python's exception mechanism, but
2829 This is less elegant than using Python's exception mechanism, but
2823 I can't get that to work reliably with threads, so under -pylab
2830 I can't get that to work reliably with threads, so under -pylab
2824 %Exit was hanging IPython. Cross-thread exception handling is
2831 %Exit was hanging IPython. Cross-thread exception handling is
2825 really a bitch. Thaks to a bug report by Stephen Walton
2832 really a bitch. Thaks to a bug report by Stephen Walton
2826 <stephen.walton-AT-csun.edu>.
2833 <stephen.walton-AT-csun.edu>.
2827
2834
2828 2004-11-04 Fernando Perez <fperez@colorado.edu>
2835 2004-11-04 Fernando Perez <fperez@colorado.edu>
2829
2836
2830 * IPython/iplib.py (raw_input_original): store a pointer to the
2837 * IPython/iplib.py (raw_input_original): store a pointer to the
2831 true raw_input to harden against code which can modify it
2838 true raw_input to harden against code which can modify it
2832 (wx.py.PyShell does this and would otherwise crash ipython).
2839 (wx.py.PyShell does this and would otherwise crash ipython).
2833 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2840 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2834
2841
2835 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2842 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2836 Ctrl-C problem, which does not mess up the input line.
2843 Ctrl-C problem, which does not mess up the input line.
2837
2844
2838 2004-11-03 Fernando Perez <fperez@colorado.edu>
2845 2004-11-03 Fernando Perez <fperez@colorado.edu>
2839
2846
2840 * IPython/Release.py: Changed licensing to BSD, in all files.
2847 * IPython/Release.py: Changed licensing to BSD, in all files.
2841 (name): lowercase name for tarball/RPM release.
2848 (name): lowercase name for tarball/RPM release.
2842
2849
2843 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2850 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2844 use throughout ipython.
2851 use throughout ipython.
2845
2852
2846 * IPython/Magic.py (Magic._ofind): Switch to using the new
2853 * IPython/Magic.py (Magic._ofind): Switch to using the new
2847 OInspect.getdoc() function.
2854 OInspect.getdoc() function.
2848
2855
2849 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2856 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2850 of the line currently being canceled via Ctrl-C. It's extremely
2857 of the line currently being canceled via Ctrl-C. It's extremely
2851 ugly, but I don't know how to do it better (the problem is one of
2858 ugly, but I don't know how to do it better (the problem is one of
2852 handling cross-thread exceptions).
2859 handling cross-thread exceptions).
2853
2860
2854 2004-10-28 Fernando Perez <fperez@colorado.edu>
2861 2004-10-28 Fernando Perez <fperez@colorado.edu>
2855
2862
2856 * IPython/Shell.py (signal_handler): add signal handlers to trap
2863 * IPython/Shell.py (signal_handler): add signal handlers to trap
2857 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2864 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2858 report by Francesc Alted.
2865 report by Francesc Alted.
2859
2866
2860 2004-10-21 Fernando Perez <fperez@colorado.edu>
2867 2004-10-21 Fernando Perez <fperez@colorado.edu>
2861
2868
2862 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2869 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2863 to % for pysh syntax extensions.
2870 to % for pysh syntax extensions.
2864
2871
2865 2004-10-09 Fernando Perez <fperez@colorado.edu>
2872 2004-10-09 Fernando Perez <fperez@colorado.edu>
2866
2873
2867 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2874 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2868 arrays to print a more useful summary, without calling str(arr).
2875 arrays to print a more useful summary, without calling str(arr).
2869 This avoids the problem of extremely lengthy computations which
2876 This avoids the problem of extremely lengthy computations which
2870 occur if arr is large, and appear to the user as a system lockup
2877 occur if arr is large, and appear to the user as a system lockup
2871 with 100% cpu activity. After a suggestion by Kristian Sandberg
2878 with 100% cpu activity. After a suggestion by Kristian Sandberg
2872 <Kristian.Sandberg@colorado.edu>.
2879 <Kristian.Sandberg@colorado.edu>.
2873 (Magic.__init__): fix bug in global magic escapes not being
2880 (Magic.__init__): fix bug in global magic escapes not being
2874 correctly set.
2881 correctly set.
2875
2882
2876 2004-10-08 Fernando Perez <fperez@colorado.edu>
2883 2004-10-08 Fernando Perez <fperez@colorado.edu>
2877
2884
2878 * IPython/Magic.py (__license__): change to absolute imports of
2885 * IPython/Magic.py (__license__): change to absolute imports of
2879 ipython's own internal packages, to start adapting to the absolute
2886 ipython's own internal packages, to start adapting to the absolute
2880 import requirement of PEP-328.
2887 import requirement of PEP-328.
2881
2888
2882 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2889 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2883 files, and standardize author/license marks through the Release
2890 files, and standardize author/license marks through the Release
2884 module instead of having per/file stuff (except for files with
2891 module instead of having per/file stuff (except for files with
2885 particular licenses, like the MIT/PSF-licensed codes).
2892 particular licenses, like the MIT/PSF-licensed codes).
2886
2893
2887 * IPython/Debugger.py: remove dead code for python 2.1
2894 * IPython/Debugger.py: remove dead code for python 2.1
2888
2895
2889 2004-10-04 Fernando Perez <fperez@colorado.edu>
2896 2004-10-04 Fernando Perez <fperez@colorado.edu>
2890
2897
2891 * IPython/iplib.py (ipmagic): New function for accessing magics
2898 * IPython/iplib.py (ipmagic): New function for accessing magics
2892 via a normal python function call.
2899 via a normal python function call.
2893
2900
2894 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2901 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2895 from '@' to '%', to accomodate the new @decorator syntax of python
2902 from '@' to '%', to accomodate the new @decorator syntax of python
2896 2.4.
2903 2.4.
2897
2904
2898 2004-09-29 Fernando Perez <fperez@colorado.edu>
2905 2004-09-29 Fernando Perez <fperez@colorado.edu>
2899
2906
2900 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2907 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2901 matplotlib.use to prevent running scripts which try to switch
2908 matplotlib.use to prevent running scripts which try to switch
2902 interactive backends from within ipython. This will just crash
2909 interactive backends from within ipython. This will just crash
2903 the python interpreter, so we can't allow it (but a detailed error
2910 the python interpreter, so we can't allow it (but a detailed error
2904 is given to the user).
2911 is given to the user).
2905
2912
2906 2004-09-28 Fernando Perez <fperez@colorado.edu>
2913 2004-09-28 Fernando Perez <fperez@colorado.edu>
2907
2914
2908 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2915 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2909 matplotlib-related fixes so that using @run with non-matplotlib
2916 matplotlib-related fixes so that using @run with non-matplotlib
2910 scripts doesn't pop up spurious plot windows. This requires
2917 scripts doesn't pop up spurious plot windows. This requires
2911 matplotlib >= 0.63, where I had to make some changes as well.
2918 matplotlib >= 0.63, where I had to make some changes as well.
2912
2919
2913 * IPython/ipmaker.py (make_IPython): update version requirement to
2920 * IPython/ipmaker.py (make_IPython): update version requirement to
2914 python 2.2.
2921 python 2.2.
2915
2922
2916 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2923 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2917 banner arg for embedded customization.
2924 banner arg for embedded customization.
2918
2925
2919 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2926 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2920 explicit uses of __IP as the IPython's instance name. Now things
2927 explicit uses of __IP as the IPython's instance name. Now things
2921 are properly handled via the shell.name value. The actual code
2928 are properly handled via the shell.name value. The actual code
2922 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2929 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2923 is much better than before. I'll clean things completely when the
2930 is much better than before. I'll clean things completely when the
2924 magic stuff gets a real overhaul.
2931 magic stuff gets a real overhaul.
2925
2932
2926 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2933 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2927 minor changes to debian dir.
2934 minor changes to debian dir.
2928
2935
2929 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2936 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2930 pointer to the shell itself in the interactive namespace even when
2937 pointer to the shell itself in the interactive namespace even when
2931 a user-supplied dict is provided. This is needed for embedding
2938 a user-supplied dict is provided. This is needed for embedding
2932 purposes (found by tests with Michel Sanner).
2939 purposes (found by tests with Michel Sanner).
2933
2940
2934 2004-09-27 Fernando Perez <fperez@colorado.edu>
2941 2004-09-27 Fernando Perez <fperez@colorado.edu>
2935
2942
2936 * IPython/UserConfig/ipythonrc: remove []{} from
2943 * IPython/UserConfig/ipythonrc: remove []{} from
2937 readline_remove_delims, so that things like [modname.<TAB> do
2944 readline_remove_delims, so that things like [modname.<TAB> do
2938 proper completion. This disables [].TAB, but that's a less common
2945 proper completion. This disables [].TAB, but that's a less common
2939 case than module names in list comprehensions, for example.
2946 case than module names in list comprehensions, for example.
2940 Thanks to a report by Andrea Riciputi.
2947 Thanks to a report by Andrea Riciputi.
2941
2948
2942 2004-09-09 Fernando Perez <fperez@colorado.edu>
2949 2004-09-09 Fernando Perez <fperez@colorado.edu>
2943
2950
2944 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2951 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2945 blocking problems in win32 and osx. Fix by John.
2952 blocking problems in win32 and osx. Fix by John.
2946
2953
2947 2004-09-08 Fernando Perez <fperez@colorado.edu>
2954 2004-09-08 Fernando Perez <fperez@colorado.edu>
2948
2955
2949 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2956 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2950 for Win32 and OSX. Fix by John Hunter.
2957 for Win32 and OSX. Fix by John Hunter.
2951
2958
2952 2004-08-30 *** Released version 0.6.3
2959 2004-08-30 *** Released version 0.6.3
2953
2960
2954 2004-08-30 Fernando Perez <fperez@colorado.edu>
2961 2004-08-30 Fernando Perez <fperez@colorado.edu>
2955
2962
2956 * setup.py (isfile): Add manpages to list of dependent files to be
2963 * setup.py (isfile): Add manpages to list of dependent files to be
2957 updated.
2964 updated.
2958
2965
2959 2004-08-27 Fernando Perez <fperez@colorado.edu>
2966 2004-08-27 Fernando Perez <fperez@colorado.edu>
2960
2967
2961 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2968 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2962 for now. They don't really work with standalone WX/GTK code
2969 for now. They don't really work with standalone WX/GTK code
2963 (though matplotlib IS working fine with both of those backends).
2970 (though matplotlib IS working fine with both of those backends).
2964 This will neeed much more testing. I disabled most things with
2971 This will neeed much more testing. I disabled most things with
2965 comments, so turning it back on later should be pretty easy.
2972 comments, so turning it back on later should be pretty easy.
2966
2973
2967 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2974 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2968 autocalling of expressions like r'foo', by modifying the line
2975 autocalling of expressions like r'foo', by modifying the line
2969 split regexp. Closes
2976 split regexp. Closes
2970 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2977 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2971 Riley <ipythonbugs-AT-sabi.net>.
2978 Riley <ipythonbugs-AT-sabi.net>.
2972 (InteractiveShell.mainloop): honor --nobanner with banner
2979 (InteractiveShell.mainloop): honor --nobanner with banner
2973 extensions.
2980 extensions.
2974
2981
2975 * IPython/Shell.py: Significant refactoring of all classes, so
2982 * IPython/Shell.py: Significant refactoring of all classes, so
2976 that we can really support ALL matplotlib backends and threading
2983 that we can really support ALL matplotlib backends and threading
2977 models (John spotted a bug with Tk which required this). Now we
2984 models (John spotted a bug with Tk which required this). Now we
2978 should support single-threaded, WX-threads and GTK-threads, both
2985 should support single-threaded, WX-threads and GTK-threads, both
2979 for generic code and for matplotlib.
2986 for generic code and for matplotlib.
2980
2987
2981 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2988 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2982 -pylab, to simplify things for users. Will also remove the pylab
2989 -pylab, to simplify things for users. Will also remove the pylab
2983 profile, since now all of matplotlib configuration is directly
2990 profile, since now all of matplotlib configuration is directly
2984 handled here. This also reduces startup time.
2991 handled here. This also reduces startup time.
2985
2992
2986 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2993 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2987 shell wasn't being correctly called. Also in IPShellWX.
2994 shell wasn't being correctly called. Also in IPShellWX.
2988
2995
2989 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2996 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2990 fine-tune banner.
2997 fine-tune banner.
2991
2998
2992 * IPython/numutils.py (spike): Deprecate these spike functions,
2999 * IPython/numutils.py (spike): Deprecate these spike functions,
2993 delete (long deprecated) gnuplot_exec handler.
3000 delete (long deprecated) gnuplot_exec handler.
2994
3001
2995 2004-08-26 Fernando Perez <fperez@colorado.edu>
3002 2004-08-26 Fernando Perez <fperez@colorado.edu>
2996
3003
2997 * ipython.1: Update for threading options, plus some others which
3004 * ipython.1: Update for threading options, plus some others which
2998 were missing.
3005 were missing.
2999
3006
3000 * IPython/ipmaker.py (__call__): Added -wthread option for
3007 * IPython/ipmaker.py (__call__): Added -wthread option for
3001 wxpython thread handling. Make sure threading options are only
3008 wxpython thread handling. Make sure threading options are only
3002 valid at the command line.
3009 valid at the command line.
3003
3010
3004 * scripts/ipython: moved shell selection into a factory function
3011 * scripts/ipython: moved shell selection into a factory function
3005 in Shell.py, to keep the starter script to a minimum.
3012 in Shell.py, to keep the starter script to a minimum.
3006
3013
3007 2004-08-25 Fernando Perez <fperez@colorado.edu>
3014 2004-08-25 Fernando Perez <fperez@colorado.edu>
3008
3015
3009 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3016 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3010 John. Along with some recent changes he made to matplotlib, the
3017 John. Along with some recent changes he made to matplotlib, the
3011 next versions of both systems should work very well together.
3018 next versions of both systems should work very well together.
3012
3019
3013 2004-08-24 Fernando Perez <fperez@colorado.edu>
3020 2004-08-24 Fernando Perez <fperez@colorado.edu>
3014
3021
3015 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3022 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3016 tried to switch the profiling to using hotshot, but I'm getting
3023 tried to switch the profiling to using hotshot, but I'm getting
3017 strange errors from prof.runctx() there. I may be misreading the
3024 strange errors from prof.runctx() there. I may be misreading the
3018 docs, but it looks weird. For now the profiling code will
3025 docs, but it looks weird. For now the profiling code will
3019 continue to use the standard profiler.
3026 continue to use the standard profiler.
3020
3027
3021 2004-08-23 Fernando Perez <fperez@colorado.edu>
3028 2004-08-23 Fernando Perez <fperez@colorado.edu>
3022
3029
3023 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3030 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3024 threaded shell, by John Hunter. It's not quite ready yet, but
3031 threaded shell, by John Hunter. It's not quite ready yet, but
3025 close.
3032 close.
3026
3033
3027 2004-08-22 Fernando Perez <fperez@colorado.edu>
3034 2004-08-22 Fernando Perez <fperez@colorado.edu>
3028
3035
3029 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3036 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3030 in Magic and ultraTB.
3037 in Magic and ultraTB.
3031
3038
3032 * ipython.1: document threading options in manpage.
3039 * ipython.1: document threading options in manpage.
3033
3040
3034 * scripts/ipython: Changed name of -thread option to -gthread,
3041 * scripts/ipython: Changed name of -thread option to -gthread,
3035 since this is GTK specific. I want to leave the door open for a
3042 since this is GTK specific. I want to leave the door open for a
3036 -wthread option for WX, which will most likely be necessary. This
3043 -wthread option for WX, which will most likely be necessary. This
3037 change affects usage and ipmaker as well.
3044 change affects usage and ipmaker as well.
3038
3045
3039 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3046 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3040 handle the matplotlib shell issues. Code by John Hunter
3047 handle the matplotlib shell issues. Code by John Hunter
3041 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3048 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3042 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3049 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3043 broken (and disabled for end users) for now, but it puts the
3050 broken (and disabled for end users) for now, but it puts the
3044 infrastructure in place.
3051 infrastructure in place.
3045
3052
3046 2004-08-21 Fernando Perez <fperez@colorado.edu>
3053 2004-08-21 Fernando Perez <fperez@colorado.edu>
3047
3054
3048 * ipythonrc-pylab: Add matplotlib support.
3055 * ipythonrc-pylab: Add matplotlib support.
3049
3056
3050 * matplotlib_config.py: new files for matplotlib support, part of
3057 * matplotlib_config.py: new files for matplotlib support, part of
3051 the pylab profile.
3058 the pylab profile.
3052
3059
3053 * IPython/usage.py (__doc__): documented the threading options.
3060 * IPython/usage.py (__doc__): documented the threading options.
3054
3061
3055 2004-08-20 Fernando Perez <fperez@colorado.edu>
3062 2004-08-20 Fernando Perez <fperez@colorado.edu>
3056
3063
3057 * ipython: Modified the main calling routine to handle the -thread
3064 * ipython: Modified the main calling routine to handle the -thread
3058 and -mpthread options. This needs to be done as a top-level hack,
3065 and -mpthread options. This needs to be done as a top-level hack,
3059 because it determines which class to instantiate for IPython
3066 because it determines which class to instantiate for IPython
3060 itself.
3067 itself.
3061
3068
3062 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3069 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3063 classes to support multithreaded GTK operation without blocking,
3070 classes to support multithreaded GTK operation without blocking,
3064 and matplotlib with all backends. This is a lot of still very
3071 and matplotlib with all backends. This is a lot of still very
3065 experimental code, and threads are tricky. So it may still have a
3072 experimental code, and threads are tricky. So it may still have a
3066 few rough edges... This code owes a lot to
3073 few rough edges... This code owes a lot to
3067 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3074 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3068 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3075 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3069 to John Hunter for all the matplotlib work.
3076 to John Hunter for all the matplotlib work.
3070
3077
3071 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3078 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3072 options for gtk thread and matplotlib support.
3079 options for gtk thread and matplotlib support.
3073
3080
3074 2004-08-16 Fernando Perez <fperez@colorado.edu>
3081 2004-08-16 Fernando Perez <fperez@colorado.edu>
3075
3082
3076 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3083 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3077 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3084 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3078 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3085 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3079
3086
3080 2004-08-11 Fernando Perez <fperez@colorado.edu>
3087 2004-08-11 Fernando Perez <fperez@colorado.edu>
3081
3088
3082 * setup.py (isfile): Fix build so documentation gets updated for
3089 * setup.py (isfile): Fix build so documentation gets updated for
3083 rpms (it was only done for .tgz builds).
3090 rpms (it was only done for .tgz builds).
3084
3091
3085 2004-08-10 Fernando Perez <fperez@colorado.edu>
3092 2004-08-10 Fernando Perez <fperez@colorado.edu>
3086
3093
3087 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3094 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3088
3095
3089 * iplib.py : Silence syntax error exceptions in tab-completion.
3096 * iplib.py : Silence syntax error exceptions in tab-completion.
3090
3097
3091 2004-08-05 Fernando Perez <fperez@colorado.edu>
3098 2004-08-05 Fernando Perez <fperez@colorado.edu>
3092
3099
3093 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3100 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3094 'color off' mark for continuation prompts. This was causing long
3101 'color off' mark for continuation prompts. This was causing long
3095 continuation lines to mis-wrap.
3102 continuation lines to mis-wrap.
3096
3103
3097 2004-08-01 Fernando Perez <fperez@colorado.edu>
3104 2004-08-01 Fernando Perez <fperez@colorado.edu>
3098
3105
3099 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3106 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3100 for building ipython to be a parameter. All this is necessary
3107 for building ipython to be a parameter. All this is necessary
3101 right now to have a multithreaded version, but this insane
3108 right now to have a multithreaded version, but this insane
3102 non-design will be cleaned up soon. For now, it's a hack that
3109 non-design will be cleaned up soon. For now, it's a hack that
3103 works.
3110 works.
3104
3111
3105 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3112 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3106 args in various places. No bugs so far, but it's a dangerous
3113 args in various places. No bugs so far, but it's a dangerous
3107 practice.
3114 practice.
3108
3115
3109 2004-07-31 Fernando Perez <fperez@colorado.edu>
3116 2004-07-31 Fernando Perez <fperez@colorado.edu>
3110
3117
3111 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3118 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3112 fix completion of files with dots in their names under most
3119 fix completion of files with dots in their names under most
3113 profiles (pysh was OK because the completion order is different).
3120 profiles (pysh was OK because the completion order is different).
3114
3121
3115 2004-07-27 Fernando Perez <fperez@colorado.edu>
3122 2004-07-27 Fernando Perez <fperez@colorado.edu>
3116
3123
3117 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3124 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3118 keywords manually, b/c the one in keyword.py was removed in python
3125 keywords manually, b/c the one in keyword.py was removed in python
3119 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3126 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3120 This is NOT a bug under python 2.3 and earlier.
3127 This is NOT a bug under python 2.3 and earlier.
3121
3128
3122 2004-07-26 Fernando Perez <fperez@colorado.edu>
3129 2004-07-26 Fernando Perez <fperez@colorado.edu>
3123
3130
3124 * IPython/ultraTB.py (VerboseTB.text): Add another
3131 * IPython/ultraTB.py (VerboseTB.text): Add another
3125 linecache.checkcache() call to try to prevent inspect.py from
3132 linecache.checkcache() call to try to prevent inspect.py from
3126 crashing under python 2.3. I think this fixes
3133 crashing under python 2.3. I think this fixes
3127 http://www.scipy.net/roundup/ipython/issue17.
3134 http://www.scipy.net/roundup/ipython/issue17.
3128
3135
3129 2004-07-26 *** Released version 0.6.2
3136 2004-07-26 *** Released version 0.6.2
3130
3137
3131 2004-07-26 Fernando Perez <fperez@colorado.edu>
3138 2004-07-26 Fernando Perez <fperez@colorado.edu>
3132
3139
3133 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3140 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3134 fail for any number.
3141 fail for any number.
3135 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3142 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3136 empty bookmarks.
3143 empty bookmarks.
3137
3144
3138 2004-07-26 *** Released version 0.6.1
3145 2004-07-26 *** Released version 0.6.1
3139
3146
3140 2004-07-26 Fernando Perez <fperez@colorado.edu>
3147 2004-07-26 Fernando Perez <fperez@colorado.edu>
3141
3148
3142 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3149 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3143
3150
3144 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3151 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3145 escaping '()[]{}' in filenames.
3152 escaping '()[]{}' in filenames.
3146
3153
3147 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3154 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3148 Python 2.2 users who lack a proper shlex.split.
3155 Python 2.2 users who lack a proper shlex.split.
3149
3156
3150 2004-07-19 Fernando Perez <fperez@colorado.edu>
3157 2004-07-19 Fernando Perez <fperez@colorado.edu>
3151
3158
3152 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3159 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3153 for reading readline's init file. I follow the normal chain:
3160 for reading readline's init file. I follow the normal chain:
3154 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3161 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3155 report by Mike Heeter. This closes
3162 report by Mike Heeter. This closes
3156 http://www.scipy.net/roundup/ipython/issue16.
3163 http://www.scipy.net/roundup/ipython/issue16.
3157
3164
3158 2004-07-18 Fernando Perez <fperez@colorado.edu>
3165 2004-07-18 Fernando Perez <fperez@colorado.edu>
3159
3166
3160 * IPython/iplib.py (__init__): Add better handling of '\' under
3167 * IPython/iplib.py (__init__): Add better handling of '\' under
3161 Win32 for filenames. After a patch by Ville.
3168 Win32 for filenames. After a patch by Ville.
3162
3169
3163 2004-07-17 Fernando Perez <fperez@colorado.edu>
3170 2004-07-17 Fernando Perez <fperez@colorado.edu>
3164
3171
3165 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3172 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3166 autocalling would be triggered for 'foo is bar' if foo is
3173 autocalling would be triggered for 'foo is bar' if foo is
3167 callable. I also cleaned up the autocall detection code to use a
3174 callable. I also cleaned up the autocall detection code to use a
3168 regexp, which is faster. Bug reported by Alexander Schmolck.
3175 regexp, which is faster. Bug reported by Alexander Schmolck.
3169
3176
3170 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3177 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3171 '?' in them would confuse the help system. Reported by Alex
3178 '?' in them would confuse the help system. Reported by Alex
3172 Schmolck.
3179 Schmolck.
3173
3180
3174 2004-07-16 Fernando Perez <fperez@colorado.edu>
3181 2004-07-16 Fernando Perez <fperez@colorado.edu>
3175
3182
3176 * IPython/GnuplotInteractive.py (__all__): added plot2.
3183 * IPython/GnuplotInteractive.py (__all__): added plot2.
3177
3184
3178 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3185 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3179 plotting dictionaries, lists or tuples of 1d arrays.
3186 plotting dictionaries, lists or tuples of 1d arrays.
3180
3187
3181 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3188 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3182 optimizations.
3189 optimizations.
3183
3190
3184 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3191 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3185 the information which was there from Janko's original IPP code:
3192 the information which was there from Janko's original IPP code:
3186
3193
3187 03.05.99 20:53 porto.ifm.uni-kiel.de
3194 03.05.99 20:53 porto.ifm.uni-kiel.de
3188 --Started changelog.
3195 --Started changelog.
3189 --make clear do what it say it does
3196 --make clear do what it say it does
3190 --added pretty output of lines from inputcache
3197 --added pretty output of lines from inputcache
3191 --Made Logger a mixin class, simplifies handling of switches
3198 --Made Logger a mixin class, simplifies handling of switches
3192 --Added own completer class. .string<TAB> expands to last history
3199 --Added own completer class. .string<TAB> expands to last history
3193 line which starts with string. The new expansion is also present
3200 line which starts with string. The new expansion is also present
3194 with Ctrl-r from the readline library. But this shows, who this
3201 with Ctrl-r from the readline library. But this shows, who this
3195 can be done for other cases.
3202 can be done for other cases.
3196 --Added convention that all shell functions should accept a
3203 --Added convention that all shell functions should accept a
3197 parameter_string This opens the door for different behaviour for
3204 parameter_string This opens the door for different behaviour for
3198 each function. @cd is a good example of this.
3205 each function. @cd is a good example of this.
3199
3206
3200 04.05.99 12:12 porto.ifm.uni-kiel.de
3207 04.05.99 12:12 porto.ifm.uni-kiel.de
3201 --added logfile rotation
3208 --added logfile rotation
3202 --added new mainloop method which freezes first the namespace
3209 --added new mainloop method which freezes first the namespace
3203
3210
3204 07.05.99 21:24 porto.ifm.uni-kiel.de
3211 07.05.99 21:24 porto.ifm.uni-kiel.de
3205 --added the docreader classes. Now there is a help system.
3212 --added the docreader classes. Now there is a help system.
3206 -This is only a first try. Currently it's not easy to put new
3213 -This is only a first try. Currently it's not easy to put new
3207 stuff in the indices. But this is the way to go. Info would be
3214 stuff in the indices. But this is the way to go. Info would be
3208 better, but HTML is every where and not everybody has an info
3215 better, but HTML is every where and not everybody has an info
3209 system installed and it's not so easy to change html-docs to info.
3216 system installed and it's not so easy to change html-docs to info.
3210 --added global logfile option
3217 --added global logfile option
3211 --there is now a hook for object inspection method pinfo needs to
3218 --there is now a hook for object inspection method pinfo needs to
3212 be provided for this. Can be reached by two '??'.
3219 be provided for this. Can be reached by two '??'.
3213
3220
3214 08.05.99 20:51 porto.ifm.uni-kiel.de
3221 08.05.99 20:51 porto.ifm.uni-kiel.de
3215 --added a README
3222 --added a README
3216 --bug in rc file. Something has changed so functions in the rc
3223 --bug in rc file. Something has changed so functions in the rc
3217 file need to reference the shell and not self. Not clear if it's a
3224 file need to reference the shell and not self. Not clear if it's a
3218 bug or feature.
3225 bug or feature.
3219 --changed rc file for new behavior
3226 --changed rc file for new behavior
3220
3227
3221 2004-07-15 Fernando Perez <fperez@colorado.edu>
3228 2004-07-15 Fernando Perez <fperez@colorado.edu>
3222
3229
3223 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3230 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3224 cache was falling out of sync in bizarre manners when multi-line
3231 cache was falling out of sync in bizarre manners when multi-line
3225 input was present. Minor optimizations and cleanup.
3232 input was present. Minor optimizations and cleanup.
3226
3233
3227 (Logger): Remove old Changelog info for cleanup. This is the
3234 (Logger): Remove old Changelog info for cleanup. This is the
3228 information which was there from Janko's original code:
3235 information which was there from Janko's original code:
3229
3236
3230 Changes to Logger: - made the default log filename a parameter
3237 Changes to Logger: - made the default log filename a parameter
3231
3238
3232 - put a check for lines beginning with !@? in log(). Needed
3239 - put a check for lines beginning with !@? in log(). Needed
3233 (even if the handlers properly log their lines) for mid-session
3240 (even if the handlers properly log their lines) for mid-session
3234 logging activation to work properly. Without this, lines logged
3241 logging activation to work properly. Without this, lines logged
3235 in mid session, which get read from the cache, would end up
3242 in mid session, which get read from the cache, would end up
3236 'bare' (with !@? in the open) in the log. Now they are caught
3243 'bare' (with !@? in the open) in the log. Now they are caught
3237 and prepended with a #.
3244 and prepended with a #.
3238
3245
3239 * IPython/iplib.py (InteractiveShell.init_readline): added check
3246 * IPython/iplib.py (InteractiveShell.init_readline): added check
3240 in case MagicCompleter fails to be defined, so we don't crash.
3247 in case MagicCompleter fails to be defined, so we don't crash.
3241
3248
3242 2004-07-13 Fernando Perez <fperez@colorado.edu>
3249 2004-07-13 Fernando Perez <fperez@colorado.edu>
3243
3250
3244 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3251 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3245 of EPS if the requested filename ends in '.eps'.
3252 of EPS if the requested filename ends in '.eps'.
3246
3253
3247 2004-07-04 Fernando Perez <fperez@colorado.edu>
3254 2004-07-04 Fernando Perez <fperez@colorado.edu>
3248
3255
3249 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3256 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3250 escaping of quotes when calling the shell.
3257 escaping of quotes when calling the shell.
3251
3258
3252 2004-07-02 Fernando Perez <fperez@colorado.edu>
3259 2004-07-02 Fernando Perez <fperez@colorado.edu>
3253
3260
3254 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3261 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3255 gettext not working because we were clobbering '_'. Fixes
3262 gettext not working because we were clobbering '_'. Fixes
3256 http://www.scipy.net/roundup/ipython/issue6.
3263 http://www.scipy.net/roundup/ipython/issue6.
3257
3264
3258 2004-07-01 Fernando Perez <fperez@colorado.edu>
3265 2004-07-01 Fernando Perez <fperez@colorado.edu>
3259
3266
3260 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3267 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3261 into @cd. Patch by Ville.
3268 into @cd. Patch by Ville.
3262
3269
3263 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3270 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3264 new function to store things after ipmaker runs. Patch by Ville.
3271 new function to store things after ipmaker runs. Patch by Ville.
3265 Eventually this will go away once ipmaker is removed and the class
3272 Eventually this will go away once ipmaker is removed and the class
3266 gets cleaned up, but for now it's ok. Key functionality here is
3273 gets cleaned up, but for now it's ok. Key functionality here is
3267 the addition of the persistent storage mechanism, a dict for
3274 the addition of the persistent storage mechanism, a dict for
3268 keeping data across sessions (for now just bookmarks, but more can
3275 keeping data across sessions (for now just bookmarks, but more can
3269 be implemented later).
3276 be implemented later).
3270
3277
3271 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3278 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3272 persistent across sections. Patch by Ville, I modified it
3279 persistent across sections. Patch by Ville, I modified it
3273 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3280 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3274 added a '-l' option to list all bookmarks.
3281 added a '-l' option to list all bookmarks.
3275
3282
3276 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3283 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3277 center for cleanup. Registered with atexit.register(). I moved
3284 center for cleanup. Registered with atexit.register(). I moved
3278 here the old exit_cleanup(). After a patch by Ville.
3285 here the old exit_cleanup(). After a patch by Ville.
3279
3286
3280 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3287 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3281 characters in the hacked shlex_split for python 2.2.
3288 characters in the hacked shlex_split for python 2.2.
3282
3289
3283 * IPython/iplib.py (file_matches): more fixes to filenames with
3290 * IPython/iplib.py (file_matches): more fixes to filenames with
3284 whitespace in them. It's not perfect, but limitations in python's
3291 whitespace in them. It's not perfect, but limitations in python's
3285 readline make it impossible to go further.
3292 readline make it impossible to go further.
3286
3293
3287 2004-06-29 Fernando Perez <fperez@colorado.edu>
3294 2004-06-29 Fernando Perez <fperez@colorado.edu>
3288
3295
3289 * IPython/iplib.py (file_matches): escape whitespace correctly in
3296 * IPython/iplib.py (file_matches): escape whitespace correctly in
3290 filename completions. Bug reported by Ville.
3297 filename completions. Bug reported by Ville.
3291
3298
3292 2004-06-28 Fernando Perez <fperez@colorado.edu>
3299 2004-06-28 Fernando Perez <fperez@colorado.edu>
3293
3300
3294 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3301 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3295 the history file will be called 'history-PROFNAME' (or just
3302 the history file will be called 'history-PROFNAME' (or just
3296 'history' if no profile is loaded). I was getting annoyed at
3303 'history' if no profile is loaded). I was getting annoyed at
3297 getting my Numerical work history clobbered by pysh sessions.
3304 getting my Numerical work history clobbered by pysh sessions.
3298
3305
3299 * IPython/iplib.py (InteractiveShell.__init__): Internal
3306 * IPython/iplib.py (InteractiveShell.__init__): Internal
3300 getoutputerror() function so that we can honor the system_verbose
3307 getoutputerror() function so that we can honor the system_verbose
3301 flag for _all_ system calls. I also added escaping of #
3308 flag for _all_ system calls. I also added escaping of #
3302 characters here to avoid confusing Itpl.
3309 characters here to avoid confusing Itpl.
3303
3310
3304 * IPython/Magic.py (shlex_split): removed call to shell in
3311 * IPython/Magic.py (shlex_split): removed call to shell in
3305 parse_options and replaced it with shlex.split(). The annoying
3312 parse_options and replaced it with shlex.split(). The annoying
3306 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3313 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3307 to backport it from 2.3, with several frail hacks (the shlex
3314 to backport it from 2.3, with several frail hacks (the shlex
3308 module is rather limited in 2.2). Thanks to a suggestion by Ville
3315 module is rather limited in 2.2). Thanks to a suggestion by Ville
3309 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3316 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3310 problem.
3317 problem.
3311
3318
3312 (Magic.magic_system_verbose): new toggle to print the actual
3319 (Magic.magic_system_verbose): new toggle to print the actual
3313 system calls made by ipython. Mainly for debugging purposes.
3320 system calls made by ipython. Mainly for debugging purposes.
3314
3321
3315 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3322 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3316 doesn't support persistence. Reported (and fix suggested) by
3323 doesn't support persistence. Reported (and fix suggested) by
3317 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3324 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3318
3325
3319 2004-06-26 Fernando Perez <fperez@colorado.edu>
3326 2004-06-26 Fernando Perez <fperez@colorado.edu>
3320
3327
3321 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3328 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3322 continue prompts.
3329 continue prompts.
3323
3330
3324 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3331 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3325 function (basically a big docstring) and a few more things here to
3332 function (basically a big docstring) and a few more things here to
3326 speedup startup. pysh.py is now very lightweight. We want because
3333 speedup startup. pysh.py is now very lightweight. We want because
3327 it gets execfile'd, while InterpreterExec gets imported, so
3334 it gets execfile'd, while InterpreterExec gets imported, so
3328 byte-compilation saves time.
3335 byte-compilation saves time.
3329
3336
3330 2004-06-25 Fernando Perez <fperez@colorado.edu>
3337 2004-06-25 Fernando Perez <fperez@colorado.edu>
3331
3338
3332 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3339 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3333 -NUM', which was recently broken.
3340 -NUM', which was recently broken.
3334
3341
3335 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3342 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3336 in multi-line input (but not !!, which doesn't make sense there).
3343 in multi-line input (but not !!, which doesn't make sense there).
3337
3344
3338 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3345 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3339 It's just too useful, and people can turn it off in the less
3346 It's just too useful, and people can turn it off in the less
3340 common cases where it's a problem.
3347 common cases where it's a problem.
3341
3348
3342 2004-06-24 Fernando Perez <fperez@colorado.edu>
3349 2004-06-24 Fernando Perez <fperez@colorado.edu>
3343
3350
3344 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3351 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3345 special syntaxes (like alias calling) is now allied in multi-line
3352 special syntaxes (like alias calling) is now allied in multi-line
3346 input. This is still _very_ experimental, but it's necessary for
3353 input. This is still _very_ experimental, but it's necessary for
3347 efficient shell usage combining python looping syntax with system
3354 efficient shell usage combining python looping syntax with system
3348 calls. For now it's restricted to aliases, I don't think it
3355 calls. For now it's restricted to aliases, I don't think it
3349 really even makes sense to have this for magics.
3356 really even makes sense to have this for magics.
3350
3357
3351 2004-06-23 Fernando Perez <fperez@colorado.edu>
3358 2004-06-23 Fernando Perez <fperez@colorado.edu>
3352
3359
3353 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3360 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3354 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3361 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3355
3362
3356 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3363 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3357 extensions under Windows (after code sent by Gary Bishop). The
3364 extensions under Windows (after code sent by Gary Bishop). The
3358 extensions considered 'executable' are stored in IPython's rc
3365 extensions considered 'executable' are stored in IPython's rc
3359 structure as win_exec_ext.
3366 structure as win_exec_ext.
3360
3367
3361 * IPython/genutils.py (shell): new function, like system() but
3368 * IPython/genutils.py (shell): new function, like system() but
3362 without return value. Very useful for interactive shell work.
3369 without return value. Very useful for interactive shell work.
3363
3370
3364 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3371 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3365 delete aliases.
3372 delete aliases.
3366
3373
3367 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3374 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3368 sure that the alias table doesn't contain python keywords.
3375 sure that the alias table doesn't contain python keywords.
3369
3376
3370 2004-06-21 Fernando Perez <fperez@colorado.edu>
3377 2004-06-21 Fernando Perez <fperez@colorado.edu>
3371
3378
3372 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3379 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3373 non-existent items are found in $PATH. Reported by Thorsten.
3380 non-existent items are found in $PATH. Reported by Thorsten.
3374
3381
3375 2004-06-20 Fernando Perez <fperez@colorado.edu>
3382 2004-06-20 Fernando Perez <fperez@colorado.edu>
3376
3383
3377 * IPython/iplib.py (complete): modified the completer so that the
3384 * IPython/iplib.py (complete): modified the completer so that the
3378 order of priorities can be easily changed at runtime.
3385 order of priorities can be easily changed at runtime.
3379
3386
3380 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3387 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3381 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3388 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3382
3389
3383 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3390 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3384 expand Python variables prepended with $ in all system calls. The
3391 expand Python variables prepended with $ in all system calls. The
3385 same was done to InteractiveShell.handle_shell_escape. Now all
3392 same was done to InteractiveShell.handle_shell_escape. Now all
3386 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3393 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3387 expansion of python variables and expressions according to the
3394 expansion of python variables and expressions according to the
3388 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3395 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3389
3396
3390 Though PEP-215 has been rejected, a similar (but simpler) one
3397 Though PEP-215 has been rejected, a similar (but simpler) one
3391 seems like it will go into Python 2.4, PEP-292 -
3398 seems like it will go into Python 2.4, PEP-292 -
3392 http://www.python.org/peps/pep-0292.html.
3399 http://www.python.org/peps/pep-0292.html.
3393
3400
3394 I'll keep the full syntax of PEP-215, since IPython has since the
3401 I'll keep the full syntax of PEP-215, since IPython has since the
3395 start used Ka-Ping Yee's reference implementation discussed there
3402 start used Ka-Ping Yee's reference implementation discussed there
3396 (Itpl), and I actually like the powerful semantics it offers.
3403 (Itpl), and I actually like the powerful semantics it offers.
3397
3404
3398 In order to access normal shell variables, the $ has to be escaped
3405 In order to access normal shell variables, the $ has to be escaped
3399 via an extra $. For example:
3406 via an extra $. For example:
3400
3407
3401 In [7]: PATH='a python variable'
3408 In [7]: PATH='a python variable'
3402
3409
3403 In [8]: !echo $PATH
3410 In [8]: !echo $PATH
3404 a python variable
3411 a python variable
3405
3412
3406 In [9]: !echo $$PATH
3413 In [9]: !echo $$PATH
3407 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3414 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3408
3415
3409 (Magic.parse_options): escape $ so the shell doesn't evaluate
3416 (Magic.parse_options): escape $ so the shell doesn't evaluate
3410 things prematurely.
3417 things prematurely.
3411
3418
3412 * IPython/iplib.py (InteractiveShell.call_alias): added the
3419 * IPython/iplib.py (InteractiveShell.call_alias): added the
3413 ability for aliases to expand python variables via $.
3420 ability for aliases to expand python variables via $.
3414
3421
3415 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3422 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3416 system, now there's a @rehash/@rehashx pair of magics. These work
3423 system, now there's a @rehash/@rehashx pair of magics. These work
3417 like the csh rehash command, and can be invoked at any time. They
3424 like the csh rehash command, and can be invoked at any time. They
3418 build a table of aliases to everything in the user's $PATH
3425 build a table of aliases to everything in the user's $PATH
3419 (@rehash uses everything, @rehashx is slower but only adds
3426 (@rehash uses everything, @rehashx is slower but only adds
3420 executable files). With this, the pysh.py-based shell profile can
3427 executable files). With this, the pysh.py-based shell profile can
3421 now simply call rehash upon startup, and full access to all
3428 now simply call rehash upon startup, and full access to all
3422 programs in the user's path is obtained.
3429 programs in the user's path is obtained.
3423
3430
3424 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3431 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3425 functionality is now fully in place. I removed the old dynamic
3432 functionality is now fully in place. I removed the old dynamic
3426 code generation based approach, in favor of a much lighter one
3433 code generation based approach, in favor of a much lighter one
3427 based on a simple dict. The advantage is that this allows me to
3434 based on a simple dict. The advantage is that this allows me to
3428 now have thousands of aliases with negligible cost (unthinkable
3435 now have thousands of aliases with negligible cost (unthinkable
3429 with the old system).
3436 with the old system).
3430
3437
3431 2004-06-19 Fernando Perez <fperez@colorado.edu>
3438 2004-06-19 Fernando Perez <fperez@colorado.edu>
3432
3439
3433 * IPython/iplib.py (__init__): extended MagicCompleter class to
3440 * IPython/iplib.py (__init__): extended MagicCompleter class to
3434 also complete (last in priority) on user aliases.
3441 also complete (last in priority) on user aliases.
3435
3442
3436 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3443 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3437 call to eval.
3444 call to eval.
3438 (ItplNS.__init__): Added a new class which functions like Itpl,
3445 (ItplNS.__init__): Added a new class which functions like Itpl,
3439 but allows configuring the namespace for the evaluation to occur
3446 but allows configuring the namespace for the evaluation to occur
3440 in.
3447 in.
3441
3448
3442 2004-06-18 Fernando Perez <fperez@colorado.edu>
3449 2004-06-18 Fernando Perez <fperez@colorado.edu>
3443
3450
3444 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3451 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3445 better message when 'exit' or 'quit' are typed (a common newbie
3452 better message when 'exit' or 'quit' are typed (a common newbie
3446 confusion).
3453 confusion).
3447
3454
3448 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3455 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3449 check for Windows users.
3456 check for Windows users.
3450
3457
3451 * IPython/iplib.py (InteractiveShell.user_setup): removed
3458 * IPython/iplib.py (InteractiveShell.user_setup): removed
3452 disabling of colors for Windows. I'll test at runtime and issue a
3459 disabling of colors for Windows. I'll test at runtime and issue a
3453 warning if Gary's readline isn't found, as to nudge users to
3460 warning if Gary's readline isn't found, as to nudge users to
3454 download it.
3461 download it.
3455
3462
3456 2004-06-16 Fernando Perez <fperez@colorado.edu>
3463 2004-06-16 Fernando Perez <fperez@colorado.edu>
3457
3464
3458 * IPython/genutils.py (Stream.__init__): changed to print errors
3465 * IPython/genutils.py (Stream.__init__): changed to print errors
3459 to sys.stderr. I had a circular dependency here. Now it's
3466 to sys.stderr. I had a circular dependency here. Now it's
3460 possible to run ipython as IDLE's shell (consider this pre-alpha,
3467 possible to run ipython as IDLE's shell (consider this pre-alpha,
3461 since true stdout things end up in the starting terminal instead
3468 since true stdout things end up in the starting terminal instead
3462 of IDLE's out).
3469 of IDLE's out).
3463
3470
3464 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3471 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3465 users who haven't # updated their prompt_in2 definitions. Remove
3472 users who haven't # updated their prompt_in2 definitions. Remove
3466 eventually.
3473 eventually.
3467 (multiple_replace): added credit to original ASPN recipe.
3474 (multiple_replace): added credit to original ASPN recipe.
3468
3475
3469 2004-06-15 Fernando Perez <fperez@colorado.edu>
3476 2004-06-15 Fernando Perez <fperez@colorado.edu>
3470
3477
3471 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3478 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3472 list of auto-defined aliases.
3479 list of auto-defined aliases.
3473
3480
3474 2004-06-13 Fernando Perez <fperez@colorado.edu>
3481 2004-06-13 Fernando Perez <fperez@colorado.edu>
3475
3482
3476 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3483 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3477 install was really requested (so setup.py can be used for other
3484 install was really requested (so setup.py can be used for other
3478 things under Windows).
3485 things under Windows).
3479
3486
3480 2004-06-10 Fernando Perez <fperez@colorado.edu>
3487 2004-06-10 Fernando Perez <fperez@colorado.edu>
3481
3488
3482 * IPython/Logger.py (Logger.create_log): Manually remove any old
3489 * IPython/Logger.py (Logger.create_log): Manually remove any old
3483 backup, since os.remove may fail under Windows. Fixes bug
3490 backup, since os.remove may fail under Windows. Fixes bug
3484 reported by Thorsten.
3491 reported by Thorsten.
3485
3492
3486 2004-06-09 Fernando Perez <fperez@colorado.edu>
3493 2004-06-09 Fernando Perez <fperez@colorado.edu>
3487
3494
3488 * examples/example-embed.py: fixed all references to %n (replaced
3495 * examples/example-embed.py: fixed all references to %n (replaced
3489 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3496 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3490 for all examples and the manual as well.
3497 for all examples and the manual as well.
3491
3498
3492 2004-06-08 Fernando Perez <fperez@colorado.edu>
3499 2004-06-08 Fernando Perez <fperez@colorado.edu>
3493
3500
3494 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3501 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3495 alignment and color management. All 3 prompt subsystems now
3502 alignment and color management. All 3 prompt subsystems now
3496 inherit from BasePrompt.
3503 inherit from BasePrompt.
3497
3504
3498 * tools/release: updates for windows installer build and tag rpms
3505 * tools/release: updates for windows installer build and tag rpms
3499 with python version (since paths are fixed).
3506 with python version (since paths are fixed).
3500
3507
3501 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3508 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3502 which will become eventually obsolete. Also fixed the default
3509 which will become eventually obsolete. Also fixed the default
3503 prompt_in2 to use \D, so at least new users start with the correct
3510 prompt_in2 to use \D, so at least new users start with the correct
3504 defaults.
3511 defaults.
3505 WARNING: Users with existing ipythonrc files will need to apply
3512 WARNING: Users with existing ipythonrc files will need to apply
3506 this fix manually!
3513 this fix manually!
3507
3514
3508 * setup.py: make windows installer (.exe). This is finally the
3515 * setup.py: make windows installer (.exe). This is finally the
3509 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3516 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3510 which I hadn't included because it required Python 2.3 (or recent
3517 which I hadn't included because it required Python 2.3 (or recent
3511 distutils).
3518 distutils).
3512
3519
3513 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3520 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3514 usage of new '\D' escape.
3521 usage of new '\D' escape.
3515
3522
3516 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3523 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3517 lacks os.getuid())
3524 lacks os.getuid())
3518 (CachedOutput.set_colors): Added the ability to turn coloring
3525 (CachedOutput.set_colors): Added the ability to turn coloring
3519 on/off with @colors even for manually defined prompt colors. It
3526 on/off with @colors even for manually defined prompt colors. It
3520 uses a nasty global, but it works safely and via the generic color
3527 uses a nasty global, but it works safely and via the generic color
3521 handling mechanism.
3528 handling mechanism.
3522 (Prompt2.__init__): Introduced new escape '\D' for continuation
3529 (Prompt2.__init__): Introduced new escape '\D' for continuation
3523 prompts. It represents the counter ('\#') as dots.
3530 prompts. It represents the counter ('\#') as dots.
3524 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3531 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3525 need to update their ipythonrc files and replace '%n' with '\D' in
3532 need to update their ipythonrc files and replace '%n' with '\D' in
3526 their prompt_in2 settings everywhere. Sorry, but there's
3533 their prompt_in2 settings everywhere. Sorry, but there's
3527 otherwise no clean way to get all prompts to properly align. The
3534 otherwise no clean way to get all prompts to properly align. The
3528 ipythonrc shipped with IPython has been updated.
3535 ipythonrc shipped with IPython has been updated.
3529
3536
3530 2004-06-07 Fernando Perez <fperez@colorado.edu>
3537 2004-06-07 Fernando Perez <fperez@colorado.edu>
3531
3538
3532 * setup.py (isfile): Pass local_icons option to latex2html, so the
3539 * setup.py (isfile): Pass local_icons option to latex2html, so the
3533 resulting HTML file is self-contained. Thanks to
3540 resulting HTML file is self-contained. Thanks to
3534 dryice-AT-liu.com.cn for the tip.
3541 dryice-AT-liu.com.cn for the tip.
3535
3542
3536 * pysh.py: I created a new profile 'shell', which implements a
3543 * pysh.py: I created a new profile 'shell', which implements a
3537 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3544 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3538 system shell, nor will it become one anytime soon. It's mainly
3545 system shell, nor will it become one anytime soon. It's mainly
3539 meant to illustrate the use of the new flexible bash-like prompts.
3546 meant to illustrate the use of the new flexible bash-like prompts.
3540 I guess it could be used by hardy souls for true shell management,
3547 I guess it could be used by hardy souls for true shell management,
3541 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3548 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3542 profile. This uses the InterpreterExec extension provided by
3549 profile. This uses the InterpreterExec extension provided by
3543 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3550 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3544
3551
3545 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3552 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3546 auto-align itself with the length of the previous input prompt
3553 auto-align itself with the length of the previous input prompt
3547 (taking into account the invisible color escapes).
3554 (taking into account the invisible color escapes).
3548 (CachedOutput.__init__): Large restructuring of this class. Now
3555 (CachedOutput.__init__): Large restructuring of this class. Now
3549 all three prompts (primary1, primary2, output) are proper objects,
3556 all three prompts (primary1, primary2, output) are proper objects,
3550 managed by the 'parent' CachedOutput class. The code is still a
3557 managed by the 'parent' CachedOutput class. The code is still a
3551 bit hackish (all prompts share state via a pointer to the cache),
3558 bit hackish (all prompts share state via a pointer to the cache),
3552 but it's overall far cleaner than before.
3559 but it's overall far cleaner than before.
3553
3560
3554 * IPython/genutils.py (getoutputerror): modified to add verbose,
3561 * IPython/genutils.py (getoutputerror): modified to add verbose,
3555 debug and header options. This makes the interface of all getout*
3562 debug and header options. This makes the interface of all getout*
3556 functions uniform.
3563 functions uniform.
3557 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3564 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3558
3565
3559 * IPython/Magic.py (Magic.default_option): added a function to
3566 * IPython/Magic.py (Magic.default_option): added a function to
3560 allow registering default options for any magic command. This
3567 allow registering default options for any magic command. This
3561 makes it easy to have profiles which customize the magics globally
3568 makes it easy to have profiles which customize the magics globally
3562 for a certain use. The values set through this function are
3569 for a certain use. The values set through this function are
3563 picked up by the parse_options() method, which all magics should
3570 picked up by the parse_options() method, which all magics should
3564 use to parse their options.
3571 use to parse their options.
3565
3572
3566 * IPython/genutils.py (warn): modified the warnings framework to
3573 * IPython/genutils.py (warn): modified the warnings framework to
3567 use the Term I/O class. I'm trying to slowly unify all of
3574 use the Term I/O class. I'm trying to slowly unify all of
3568 IPython's I/O operations to pass through Term.
3575 IPython's I/O operations to pass through Term.
3569
3576
3570 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3577 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3571 the secondary prompt to correctly match the length of the primary
3578 the secondary prompt to correctly match the length of the primary
3572 one for any prompt. Now multi-line code will properly line up
3579 one for any prompt. Now multi-line code will properly line up
3573 even for path dependent prompts, such as the new ones available
3580 even for path dependent prompts, such as the new ones available
3574 via the prompt_specials.
3581 via the prompt_specials.
3575
3582
3576 2004-06-06 Fernando Perez <fperez@colorado.edu>
3583 2004-06-06 Fernando Perez <fperez@colorado.edu>
3577
3584
3578 * IPython/Prompts.py (prompt_specials): Added the ability to have
3585 * IPython/Prompts.py (prompt_specials): Added the ability to have
3579 bash-like special sequences in the prompts, which get
3586 bash-like special sequences in the prompts, which get
3580 automatically expanded. Things like hostname, current working
3587 automatically expanded. Things like hostname, current working
3581 directory and username are implemented already, but it's easy to
3588 directory and username are implemented already, but it's easy to
3582 add more in the future. Thanks to a patch by W.J. van der Laan
3589 add more in the future. Thanks to a patch by W.J. van der Laan
3583 <gnufnork-AT-hetdigitalegat.nl>
3590 <gnufnork-AT-hetdigitalegat.nl>
3584 (prompt_specials): Added color support for prompt strings, so
3591 (prompt_specials): Added color support for prompt strings, so
3585 users can define arbitrary color setups for their prompts.
3592 users can define arbitrary color setups for their prompts.
3586
3593
3587 2004-06-05 Fernando Perez <fperez@colorado.edu>
3594 2004-06-05 Fernando Perez <fperez@colorado.edu>
3588
3595
3589 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3596 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3590 code to load Gary Bishop's readline and configure it
3597 code to load Gary Bishop's readline and configure it
3591 automatically. Thanks to Gary for help on this.
3598 automatically. Thanks to Gary for help on this.
3592
3599
3593 2004-06-01 Fernando Perez <fperez@colorado.edu>
3600 2004-06-01 Fernando Perez <fperez@colorado.edu>
3594
3601
3595 * IPython/Logger.py (Logger.create_log): fix bug for logging
3602 * IPython/Logger.py (Logger.create_log): fix bug for logging
3596 with no filename (previous fix was incomplete).
3603 with no filename (previous fix was incomplete).
3597
3604
3598 2004-05-25 Fernando Perez <fperez@colorado.edu>
3605 2004-05-25 Fernando Perez <fperez@colorado.edu>
3599
3606
3600 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3607 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3601 parens would get passed to the shell.
3608 parens would get passed to the shell.
3602
3609
3603 2004-05-20 Fernando Perez <fperez@colorado.edu>
3610 2004-05-20 Fernando Perez <fperez@colorado.edu>
3604
3611
3605 * IPython/Magic.py (Magic.magic_prun): changed default profile
3612 * IPython/Magic.py (Magic.magic_prun): changed default profile
3606 sort order to 'time' (the more common profiling need).
3613 sort order to 'time' (the more common profiling need).
3607
3614
3608 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3615 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3609 so that source code shown is guaranteed in sync with the file on
3616 so that source code shown is guaranteed in sync with the file on
3610 disk (also changed in psource). Similar fix to the one for
3617 disk (also changed in psource). Similar fix to the one for
3611 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3618 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3612 <yann.ledu-AT-noos.fr>.
3619 <yann.ledu-AT-noos.fr>.
3613
3620
3614 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3621 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3615 with a single option would not be correctly parsed. Closes
3622 with a single option would not be correctly parsed. Closes
3616 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3623 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3617 introduced in 0.6.0 (on 2004-05-06).
3624 introduced in 0.6.0 (on 2004-05-06).
3618
3625
3619 2004-05-13 *** Released version 0.6.0
3626 2004-05-13 *** Released version 0.6.0
3620
3627
3621 2004-05-13 Fernando Perez <fperez@colorado.edu>
3628 2004-05-13 Fernando Perez <fperez@colorado.edu>
3622
3629
3623 * debian/: Added debian/ directory to CVS, so that debian support
3630 * debian/: Added debian/ directory to CVS, so that debian support
3624 is publicly accessible. The debian package is maintained by Jack
3631 is publicly accessible. The debian package is maintained by Jack
3625 Moffit <jack-AT-xiph.org>.
3632 Moffit <jack-AT-xiph.org>.
3626
3633
3627 * Documentation: included the notes about an ipython-based system
3634 * Documentation: included the notes about an ipython-based system
3628 shell (the hypothetical 'pysh') into the new_design.pdf document,
3635 shell (the hypothetical 'pysh') into the new_design.pdf document,
3629 so that these ideas get distributed to users along with the
3636 so that these ideas get distributed to users along with the
3630 official documentation.
3637 official documentation.
3631
3638
3632 2004-05-10 Fernando Perez <fperez@colorado.edu>
3639 2004-05-10 Fernando Perez <fperez@colorado.edu>
3633
3640
3634 * IPython/Logger.py (Logger.create_log): fix recently introduced
3641 * IPython/Logger.py (Logger.create_log): fix recently introduced
3635 bug (misindented line) where logstart would fail when not given an
3642 bug (misindented line) where logstart would fail when not given an
3636 explicit filename.
3643 explicit filename.
3637
3644
3638 2004-05-09 Fernando Perez <fperez@colorado.edu>
3645 2004-05-09 Fernando Perez <fperez@colorado.edu>
3639
3646
3640 * IPython/Magic.py (Magic.parse_options): skip system call when
3647 * IPython/Magic.py (Magic.parse_options): skip system call when
3641 there are no options to look for. Faster, cleaner for the common
3648 there are no options to look for. Faster, cleaner for the common
3642 case.
3649 case.
3643
3650
3644 * Documentation: many updates to the manual: describing Windows
3651 * Documentation: many updates to the manual: describing Windows
3645 support better, Gnuplot updates, credits, misc small stuff. Also
3652 support better, Gnuplot updates, credits, misc small stuff. Also
3646 updated the new_design doc a bit.
3653 updated the new_design doc a bit.
3647
3654
3648 2004-05-06 *** Released version 0.6.0.rc1
3655 2004-05-06 *** Released version 0.6.0.rc1
3649
3656
3650 2004-05-06 Fernando Perez <fperez@colorado.edu>
3657 2004-05-06 Fernando Perez <fperez@colorado.edu>
3651
3658
3652 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3659 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3653 operations to use the vastly more efficient list/''.join() method.
3660 operations to use the vastly more efficient list/''.join() method.
3654 (FormattedTB.text): Fix
3661 (FormattedTB.text): Fix
3655 http://www.scipy.net/roundup/ipython/issue12 - exception source
3662 http://www.scipy.net/roundup/ipython/issue12 - exception source
3656 extract not updated after reload. Thanks to Mike Salib
3663 extract not updated after reload. Thanks to Mike Salib
3657 <msalib-AT-mit.edu> for pinning the source of the problem.
3664 <msalib-AT-mit.edu> for pinning the source of the problem.
3658 Fortunately, the solution works inside ipython and doesn't require
3665 Fortunately, the solution works inside ipython and doesn't require
3659 any changes to python proper.
3666 any changes to python proper.
3660
3667
3661 * IPython/Magic.py (Magic.parse_options): Improved to process the
3668 * IPython/Magic.py (Magic.parse_options): Improved to process the
3662 argument list as a true shell would (by actually using the
3669 argument list as a true shell would (by actually using the
3663 underlying system shell). This way, all @magics automatically get
3670 underlying system shell). This way, all @magics automatically get
3664 shell expansion for variables. Thanks to a comment by Alex
3671 shell expansion for variables. Thanks to a comment by Alex
3665 Schmolck.
3672 Schmolck.
3666
3673
3667 2004-04-04 Fernando Perez <fperez@colorado.edu>
3674 2004-04-04 Fernando Perez <fperez@colorado.edu>
3668
3675
3669 * IPython/iplib.py (InteractiveShell.interact): Added a special
3676 * IPython/iplib.py (InteractiveShell.interact): Added a special
3670 trap for a debugger quit exception, which is basically impossible
3677 trap for a debugger quit exception, which is basically impossible
3671 to handle by normal mechanisms, given what pdb does to the stack.
3678 to handle by normal mechanisms, given what pdb does to the stack.
3672 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3679 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3673
3680
3674 2004-04-03 Fernando Perez <fperez@colorado.edu>
3681 2004-04-03 Fernando Perez <fperez@colorado.edu>
3675
3682
3676 * IPython/genutils.py (Term): Standardized the names of the Term
3683 * IPython/genutils.py (Term): Standardized the names of the Term
3677 class streams to cin/cout/cerr, following C++ naming conventions
3684 class streams to cin/cout/cerr, following C++ naming conventions
3678 (I can't use in/out/err because 'in' is not a valid attribute
3685 (I can't use in/out/err because 'in' is not a valid attribute
3679 name).
3686 name).
3680
3687
3681 * IPython/iplib.py (InteractiveShell.interact): don't increment
3688 * IPython/iplib.py (InteractiveShell.interact): don't increment
3682 the prompt if there's no user input. By Daniel 'Dang' Griffith
3689 the prompt if there's no user input. By Daniel 'Dang' Griffith
3683 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3690 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3684 Francois Pinard.
3691 Francois Pinard.
3685
3692
3686 2004-04-02 Fernando Perez <fperez@colorado.edu>
3693 2004-04-02 Fernando Perez <fperez@colorado.edu>
3687
3694
3688 * IPython/genutils.py (Stream.__init__): Modified to survive at
3695 * IPython/genutils.py (Stream.__init__): Modified to survive at
3689 least importing in contexts where stdin/out/err aren't true file
3696 least importing in contexts where stdin/out/err aren't true file
3690 objects, such as PyCrust (they lack fileno() and mode). However,
3697 objects, such as PyCrust (they lack fileno() and mode). However,
3691 the recovery facilities which rely on these things existing will
3698 the recovery facilities which rely on these things existing will
3692 not work.
3699 not work.
3693
3700
3694 2004-04-01 Fernando Perez <fperez@colorado.edu>
3701 2004-04-01 Fernando Perez <fperez@colorado.edu>
3695
3702
3696 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3703 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3697 use the new getoutputerror() function, so it properly
3704 use the new getoutputerror() function, so it properly
3698 distinguishes stdout/err.
3705 distinguishes stdout/err.
3699
3706
3700 * IPython/genutils.py (getoutputerror): added a function to
3707 * IPython/genutils.py (getoutputerror): added a function to
3701 capture separately the standard output and error of a command.
3708 capture separately the standard output and error of a command.
3702 After a comment from dang on the mailing lists. This code is
3709 After a comment from dang on the mailing lists. This code is
3703 basically a modified version of commands.getstatusoutput(), from
3710 basically a modified version of commands.getstatusoutput(), from
3704 the standard library.
3711 the standard library.
3705
3712
3706 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3713 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3707 '!!' as a special syntax (shorthand) to access @sx.
3714 '!!' as a special syntax (shorthand) to access @sx.
3708
3715
3709 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3716 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3710 command and return its output as a list split on '\n'.
3717 command and return its output as a list split on '\n'.
3711
3718
3712 2004-03-31 Fernando Perez <fperez@colorado.edu>
3719 2004-03-31 Fernando Perez <fperez@colorado.edu>
3713
3720
3714 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3721 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3715 method to dictionaries used as FakeModule instances if they lack
3722 method to dictionaries used as FakeModule instances if they lack
3716 it. At least pydoc in python2.3 breaks for runtime-defined
3723 it. At least pydoc in python2.3 breaks for runtime-defined
3717 functions without this hack. At some point I need to _really_
3724 functions without this hack. At some point I need to _really_
3718 understand what FakeModule is doing, because it's a gross hack.
3725 understand what FakeModule is doing, because it's a gross hack.
3719 But it solves Arnd's problem for now...
3726 But it solves Arnd's problem for now...
3720
3727
3721 2004-02-27 Fernando Perez <fperez@colorado.edu>
3728 2004-02-27 Fernando Perez <fperez@colorado.edu>
3722
3729
3723 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3730 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3724 mode would behave erratically. Also increased the number of
3731 mode would behave erratically. Also increased the number of
3725 possible logs in rotate mod to 999. Thanks to Rod Holland
3732 possible logs in rotate mod to 999. Thanks to Rod Holland
3726 <rhh@StructureLABS.com> for the report and fixes.
3733 <rhh@StructureLABS.com> for the report and fixes.
3727
3734
3728 2004-02-26 Fernando Perez <fperez@colorado.edu>
3735 2004-02-26 Fernando Perez <fperez@colorado.edu>
3729
3736
3730 * IPython/genutils.py (page): Check that the curses module really
3737 * IPython/genutils.py (page): Check that the curses module really
3731 has the initscr attribute before trying to use it. For some
3738 has the initscr attribute before trying to use it. For some
3732 reason, the Solaris curses module is missing this. I think this
3739 reason, the Solaris curses module is missing this. I think this
3733 should be considered a Solaris python bug, but I'm not sure.
3740 should be considered a Solaris python bug, but I'm not sure.
3734
3741
3735 2004-01-17 Fernando Perez <fperez@colorado.edu>
3742 2004-01-17 Fernando Perez <fperez@colorado.edu>
3736
3743
3737 * IPython/genutils.py (Stream.__init__): Changes to try to make
3744 * IPython/genutils.py (Stream.__init__): Changes to try to make
3738 ipython robust against stdin/out/err being closed by the user.
3745 ipython robust against stdin/out/err being closed by the user.
3739 This is 'user error' (and blocks a normal python session, at least
3746 This is 'user error' (and blocks a normal python session, at least
3740 the stdout case). However, Ipython should be able to survive such
3747 the stdout case). However, Ipython should be able to survive such
3741 instances of abuse as gracefully as possible. To simplify the
3748 instances of abuse as gracefully as possible. To simplify the
3742 coding and maintain compatibility with Gary Bishop's Term
3749 coding and maintain compatibility with Gary Bishop's Term
3743 contributions, I've made use of classmethods for this. I think
3750 contributions, I've made use of classmethods for this. I think
3744 this introduces a dependency on python 2.2.
3751 this introduces a dependency on python 2.2.
3745
3752
3746 2004-01-13 Fernando Perez <fperez@colorado.edu>
3753 2004-01-13 Fernando Perez <fperez@colorado.edu>
3747
3754
3748 * IPython/numutils.py (exp_safe): simplified the code a bit and
3755 * IPython/numutils.py (exp_safe): simplified the code a bit and
3749 removed the need for importing the kinds module altogether.
3756 removed the need for importing the kinds module altogether.
3750
3757
3751 2004-01-06 Fernando Perez <fperez@colorado.edu>
3758 2004-01-06 Fernando Perez <fperez@colorado.edu>
3752
3759
3753 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3760 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3754 a magic function instead, after some community feedback. No
3761 a magic function instead, after some community feedback. No
3755 special syntax will exist for it, but its name is deliberately
3762 special syntax will exist for it, but its name is deliberately
3756 very short.
3763 very short.
3757
3764
3758 2003-12-20 Fernando Perez <fperez@colorado.edu>
3765 2003-12-20 Fernando Perez <fperez@colorado.edu>
3759
3766
3760 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3767 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3761 new functionality, to automagically assign the result of a shell
3768 new functionality, to automagically assign the result of a shell
3762 command to a variable. I'll solicit some community feedback on
3769 command to a variable. I'll solicit some community feedback on
3763 this before making it permanent.
3770 this before making it permanent.
3764
3771
3765 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3772 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3766 requested about callables for which inspect couldn't obtain a
3773 requested about callables for which inspect couldn't obtain a
3767 proper argspec. Thanks to a crash report sent by Etienne
3774 proper argspec. Thanks to a crash report sent by Etienne
3768 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3775 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3769
3776
3770 2003-12-09 Fernando Perez <fperez@colorado.edu>
3777 2003-12-09 Fernando Perez <fperez@colorado.edu>
3771
3778
3772 * IPython/genutils.py (page): patch for the pager to work across
3779 * IPython/genutils.py (page): patch for the pager to work across
3773 various versions of Windows. By Gary Bishop.
3780 various versions of Windows. By Gary Bishop.
3774
3781
3775 2003-12-04 Fernando Perez <fperez@colorado.edu>
3782 2003-12-04 Fernando Perez <fperez@colorado.edu>
3776
3783
3777 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3784 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3778 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3785 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3779 While I tested this and it looks ok, there may still be corner
3786 While I tested this and it looks ok, there may still be corner
3780 cases I've missed.
3787 cases I've missed.
3781
3788
3782 2003-12-01 Fernando Perez <fperez@colorado.edu>
3789 2003-12-01 Fernando Perez <fperez@colorado.edu>
3783
3790
3784 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3791 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3785 where a line like 'p,q=1,2' would fail because the automagic
3792 where a line like 'p,q=1,2' would fail because the automagic
3786 system would be triggered for @p.
3793 system would be triggered for @p.
3787
3794
3788 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3795 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3789 cleanups, code unmodified.
3796 cleanups, code unmodified.
3790
3797
3791 * IPython/genutils.py (Term): added a class for IPython to handle
3798 * IPython/genutils.py (Term): added a class for IPython to handle
3792 output. In most cases it will just be a proxy for stdout/err, but
3799 output. In most cases it will just be a proxy for stdout/err, but
3793 having this allows modifications to be made for some platforms,
3800 having this allows modifications to be made for some platforms,
3794 such as handling color escapes under Windows. All of this code
3801 such as handling color escapes under Windows. All of this code
3795 was contributed by Gary Bishop, with minor modifications by me.
3802 was contributed by Gary Bishop, with minor modifications by me.
3796 The actual changes affect many files.
3803 The actual changes affect many files.
3797
3804
3798 2003-11-30 Fernando Perez <fperez@colorado.edu>
3805 2003-11-30 Fernando Perez <fperez@colorado.edu>
3799
3806
3800 * IPython/iplib.py (file_matches): new completion code, courtesy
3807 * IPython/iplib.py (file_matches): new completion code, courtesy
3801 of Jeff Collins. This enables filename completion again under
3808 of Jeff Collins. This enables filename completion again under
3802 python 2.3, which disabled it at the C level.
3809 python 2.3, which disabled it at the C level.
3803
3810
3804 2003-11-11 Fernando Perez <fperez@colorado.edu>
3811 2003-11-11 Fernando Perez <fperez@colorado.edu>
3805
3812
3806 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3813 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3807 for Numeric.array(map(...)), but often convenient.
3814 for Numeric.array(map(...)), but often convenient.
3808
3815
3809 2003-11-05 Fernando Perez <fperez@colorado.edu>
3816 2003-11-05 Fernando Perez <fperez@colorado.edu>
3810
3817
3811 * IPython/numutils.py (frange): Changed a call from int() to
3818 * IPython/numutils.py (frange): Changed a call from int() to
3812 int(round()) to prevent a problem reported with arange() in the
3819 int(round()) to prevent a problem reported with arange() in the
3813 numpy list.
3820 numpy list.
3814
3821
3815 2003-10-06 Fernando Perez <fperez@colorado.edu>
3822 2003-10-06 Fernando Perez <fperez@colorado.edu>
3816
3823
3817 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3824 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3818 prevent crashes if sys lacks an argv attribute (it happens with
3825 prevent crashes if sys lacks an argv attribute (it happens with
3819 embedded interpreters which build a bare-bones sys module).
3826 embedded interpreters which build a bare-bones sys module).
3820 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3827 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3821
3828
3822 2003-09-24 Fernando Perez <fperez@colorado.edu>
3829 2003-09-24 Fernando Perez <fperez@colorado.edu>
3823
3830
3824 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3831 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3825 to protect against poorly written user objects where __getattr__
3832 to protect against poorly written user objects where __getattr__
3826 raises exceptions other than AttributeError. Thanks to a bug
3833 raises exceptions other than AttributeError. Thanks to a bug
3827 report by Oliver Sander <osander-AT-gmx.de>.
3834 report by Oliver Sander <osander-AT-gmx.de>.
3828
3835
3829 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3836 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3830 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3837 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3831
3838
3832 2003-09-09 Fernando Perez <fperez@colorado.edu>
3839 2003-09-09 Fernando Perez <fperez@colorado.edu>
3833
3840
3834 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3841 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3835 unpacking a list whith a callable as first element would
3842 unpacking a list whith a callable as first element would
3836 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3843 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3837 Collins.
3844 Collins.
3838
3845
3839 2003-08-25 *** Released version 0.5.0
3846 2003-08-25 *** Released version 0.5.0
3840
3847
3841 2003-08-22 Fernando Perez <fperez@colorado.edu>
3848 2003-08-22 Fernando Perez <fperez@colorado.edu>
3842
3849
3843 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3850 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3844 improperly defined user exceptions. Thanks to feedback from Mark
3851 improperly defined user exceptions. Thanks to feedback from Mark
3845 Russell <mrussell-AT-verio.net>.
3852 Russell <mrussell-AT-verio.net>.
3846
3853
3847 2003-08-20 Fernando Perez <fperez@colorado.edu>
3854 2003-08-20 Fernando Perez <fperez@colorado.edu>
3848
3855
3849 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3856 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3850 printing so that it would print multi-line string forms starting
3857 printing so that it would print multi-line string forms starting
3851 with a new line. This way the formatting is better respected for
3858 with a new line. This way the formatting is better respected for
3852 objects which work hard to make nice string forms.
3859 objects which work hard to make nice string forms.
3853
3860
3854 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3861 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3855 autocall would overtake data access for objects with both
3862 autocall would overtake data access for objects with both
3856 __getitem__ and __call__.
3863 __getitem__ and __call__.
3857
3864
3858 2003-08-19 *** Released version 0.5.0-rc1
3865 2003-08-19 *** Released version 0.5.0-rc1
3859
3866
3860 2003-08-19 Fernando Perez <fperez@colorado.edu>
3867 2003-08-19 Fernando Perez <fperez@colorado.edu>
3861
3868
3862 * IPython/deep_reload.py (load_tail): single tiny change here
3869 * IPython/deep_reload.py (load_tail): single tiny change here
3863 seems to fix the long-standing bug of dreload() failing to work
3870 seems to fix the long-standing bug of dreload() failing to work
3864 for dotted names. But this module is pretty tricky, so I may have
3871 for dotted names. But this module is pretty tricky, so I may have
3865 missed some subtlety. Needs more testing!.
3872 missed some subtlety. Needs more testing!.
3866
3873
3867 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3874 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3868 exceptions which have badly implemented __str__ methods.
3875 exceptions which have badly implemented __str__ methods.
3869 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3876 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3870 which I've been getting reports about from Python 2.3 users. I
3877 which I've been getting reports about from Python 2.3 users. I
3871 wish I had a simple test case to reproduce the problem, so I could
3878 wish I had a simple test case to reproduce the problem, so I could
3872 either write a cleaner workaround or file a bug report if
3879 either write a cleaner workaround or file a bug report if
3873 necessary.
3880 necessary.
3874
3881
3875 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3882 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3876 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3883 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3877 a bug report by Tjabo Kloppenburg.
3884 a bug report by Tjabo Kloppenburg.
3878
3885
3879 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3886 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3880 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3887 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3881 seems rather unstable. Thanks to a bug report by Tjabo
3888 seems rather unstable. Thanks to a bug report by Tjabo
3882 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3889 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3883
3890
3884 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3891 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3885 this out soon because of the critical fixes in the inner loop for
3892 this out soon because of the critical fixes in the inner loop for
3886 generators.
3893 generators.
3887
3894
3888 * IPython/Magic.py (Magic.getargspec): removed. This (and
3895 * IPython/Magic.py (Magic.getargspec): removed. This (and
3889 _get_def) have been obsoleted by OInspect for a long time, I
3896 _get_def) have been obsoleted by OInspect for a long time, I
3890 hadn't noticed that they were dead code.
3897 hadn't noticed that they were dead code.
3891 (Magic._ofind): restored _ofind functionality for a few literals
3898 (Magic._ofind): restored _ofind functionality for a few literals
3892 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3899 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3893 for things like "hello".capitalize?, since that would require a
3900 for things like "hello".capitalize?, since that would require a
3894 potentially dangerous eval() again.
3901 potentially dangerous eval() again.
3895
3902
3896 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3903 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3897 logic a bit more to clean up the escapes handling and minimize the
3904 logic a bit more to clean up the escapes handling and minimize the
3898 use of _ofind to only necessary cases. The interactive 'feel' of
3905 use of _ofind to only necessary cases. The interactive 'feel' of
3899 IPython should have improved quite a bit with the changes in
3906 IPython should have improved quite a bit with the changes in
3900 _prefilter and _ofind (besides being far safer than before).
3907 _prefilter and _ofind (besides being far safer than before).
3901
3908
3902 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3909 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3903 obscure, never reported). Edit would fail to find the object to
3910 obscure, never reported). Edit would fail to find the object to
3904 edit under some circumstances.
3911 edit under some circumstances.
3905 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3912 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3906 which were causing double-calling of generators. Those eval calls
3913 which were causing double-calling of generators. Those eval calls
3907 were _very_ dangerous, since code with side effects could be
3914 were _very_ dangerous, since code with side effects could be
3908 triggered. As they say, 'eval is evil'... These were the
3915 triggered. As they say, 'eval is evil'... These were the
3909 nastiest evals in IPython. Besides, _ofind is now far simpler,
3916 nastiest evals in IPython. Besides, _ofind is now far simpler,
3910 and it should also be quite a bit faster. Its use of inspect is
3917 and it should also be quite a bit faster. Its use of inspect is
3911 also safer, so perhaps some of the inspect-related crashes I've
3918 also safer, so perhaps some of the inspect-related crashes I've
3912 seen lately with Python 2.3 might be taken care of. That will
3919 seen lately with Python 2.3 might be taken care of. That will
3913 need more testing.
3920 need more testing.
3914
3921
3915 2003-08-17 Fernando Perez <fperez@colorado.edu>
3922 2003-08-17 Fernando Perez <fperez@colorado.edu>
3916
3923
3917 * IPython/iplib.py (InteractiveShell._prefilter): significant
3924 * IPython/iplib.py (InteractiveShell._prefilter): significant
3918 simplifications to the logic for handling user escapes. Faster
3925 simplifications to the logic for handling user escapes. Faster
3919 and simpler code.
3926 and simpler code.
3920
3927
3921 2003-08-14 Fernando Perez <fperez@colorado.edu>
3928 2003-08-14 Fernando Perez <fperez@colorado.edu>
3922
3929
3923 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3930 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3924 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3931 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3925 but it should be quite a bit faster. And the recursive version
3932 but it should be quite a bit faster. And the recursive version
3926 generated O(log N) intermediate storage for all rank>1 arrays,
3933 generated O(log N) intermediate storage for all rank>1 arrays,
3927 even if they were contiguous.
3934 even if they were contiguous.
3928 (l1norm): Added this function.
3935 (l1norm): Added this function.
3929 (norm): Added this function for arbitrary norms (including
3936 (norm): Added this function for arbitrary norms (including
3930 l-infinity). l1 and l2 are still special cases for convenience
3937 l-infinity). l1 and l2 are still special cases for convenience
3931 and speed.
3938 and speed.
3932
3939
3933 2003-08-03 Fernando Perez <fperez@colorado.edu>
3940 2003-08-03 Fernando Perez <fperez@colorado.edu>
3934
3941
3935 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3942 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3936 exceptions, which now raise PendingDeprecationWarnings in Python
3943 exceptions, which now raise PendingDeprecationWarnings in Python
3937 2.3. There were some in Magic and some in Gnuplot2.
3944 2.3. There were some in Magic and some in Gnuplot2.
3938
3945
3939 2003-06-30 Fernando Perez <fperez@colorado.edu>
3946 2003-06-30 Fernando Perez <fperez@colorado.edu>
3940
3947
3941 * IPython/genutils.py (page): modified to call curses only for
3948 * IPython/genutils.py (page): modified to call curses only for
3942 terminals where TERM=='xterm'. After problems under many other
3949 terminals where TERM=='xterm'. After problems under many other
3943 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3950 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3944
3951
3945 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3952 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3946 would be triggered when readline was absent. This was just an old
3953 would be triggered when readline was absent. This was just an old
3947 debugging statement I'd forgotten to take out.
3954 debugging statement I'd forgotten to take out.
3948
3955
3949 2003-06-20 Fernando Perez <fperez@colorado.edu>
3956 2003-06-20 Fernando Perez <fperez@colorado.edu>
3950
3957
3951 * IPython/genutils.py (clock): modified to return only user time
3958 * IPython/genutils.py (clock): modified to return only user time
3952 (not counting system time), after a discussion on scipy. While
3959 (not counting system time), after a discussion on scipy. While
3953 system time may be a useful quantity occasionally, it may much
3960 system time may be a useful quantity occasionally, it may much
3954 more easily be skewed by occasional swapping or other similar
3961 more easily be skewed by occasional swapping or other similar
3955 activity.
3962 activity.
3956
3963
3957 2003-06-05 Fernando Perez <fperez@colorado.edu>
3964 2003-06-05 Fernando Perez <fperez@colorado.edu>
3958
3965
3959 * IPython/numutils.py (identity): new function, for building
3966 * IPython/numutils.py (identity): new function, for building
3960 arbitrary rank Kronecker deltas (mostly backwards compatible with
3967 arbitrary rank Kronecker deltas (mostly backwards compatible with
3961 Numeric.identity)
3968 Numeric.identity)
3962
3969
3963 2003-06-03 Fernando Perez <fperez@colorado.edu>
3970 2003-06-03 Fernando Perez <fperez@colorado.edu>
3964
3971
3965 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3972 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3966 arguments passed to magics with spaces, to allow trailing '\' to
3973 arguments passed to magics with spaces, to allow trailing '\' to
3967 work normally (mainly for Windows users).
3974 work normally (mainly for Windows users).
3968
3975
3969 2003-05-29 Fernando Perez <fperez@colorado.edu>
3976 2003-05-29 Fernando Perez <fperez@colorado.edu>
3970
3977
3971 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3978 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3972 instead of pydoc.help. This fixes a bizarre behavior where
3979 instead of pydoc.help. This fixes a bizarre behavior where
3973 printing '%s' % locals() would trigger the help system. Now
3980 printing '%s' % locals() would trigger the help system. Now
3974 ipython behaves like normal python does.
3981 ipython behaves like normal python does.
3975
3982
3976 Note that if one does 'from pydoc import help', the bizarre
3983 Note that if one does 'from pydoc import help', the bizarre
3977 behavior returns, but this will also happen in normal python, so
3984 behavior returns, but this will also happen in normal python, so
3978 it's not an ipython bug anymore (it has to do with how pydoc.help
3985 it's not an ipython bug anymore (it has to do with how pydoc.help
3979 is implemented).
3986 is implemented).
3980
3987
3981 2003-05-22 Fernando Perez <fperez@colorado.edu>
3988 2003-05-22 Fernando Perez <fperez@colorado.edu>
3982
3989
3983 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3990 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3984 return [] instead of None when nothing matches, also match to end
3991 return [] instead of None when nothing matches, also match to end
3985 of line. Patch by Gary Bishop.
3992 of line. Patch by Gary Bishop.
3986
3993
3987 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3994 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3988 protection as before, for files passed on the command line. This
3995 protection as before, for files passed on the command line. This
3989 prevents the CrashHandler from kicking in if user files call into
3996 prevents the CrashHandler from kicking in if user files call into
3990 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3997 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3991 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3998 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3992
3999
3993 2003-05-20 *** Released version 0.4.0
4000 2003-05-20 *** Released version 0.4.0
3994
4001
3995 2003-05-20 Fernando Perez <fperez@colorado.edu>
4002 2003-05-20 Fernando Perez <fperez@colorado.edu>
3996
4003
3997 * setup.py: added support for manpages. It's a bit hackish b/c of
4004 * setup.py: added support for manpages. It's a bit hackish b/c of
3998 a bug in the way the bdist_rpm distutils target handles gzipped
4005 a bug in the way the bdist_rpm distutils target handles gzipped
3999 manpages, but it works. After a patch by Jack.
4006 manpages, but it works. After a patch by Jack.
4000
4007
4001 2003-05-19 Fernando Perez <fperez@colorado.edu>
4008 2003-05-19 Fernando Perez <fperez@colorado.edu>
4002
4009
4003 * IPython/numutils.py: added a mockup of the kinds module, since
4010 * IPython/numutils.py: added a mockup of the kinds module, since
4004 it was recently removed from Numeric. This way, numutils will
4011 it was recently removed from Numeric. This way, numutils will
4005 work for all users even if they are missing kinds.
4012 work for all users even if they are missing kinds.
4006
4013
4007 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4014 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4008 failure, which can occur with SWIG-wrapped extensions. After a
4015 failure, which can occur with SWIG-wrapped extensions. After a
4009 crash report from Prabhu.
4016 crash report from Prabhu.
4010
4017
4011 2003-05-16 Fernando Perez <fperez@colorado.edu>
4018 2003-05-16 Fernando Perez <fperez@colorado.edu>
4012
4019
4013 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4020 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4014 protect ipython from user code which may call directly
4021 protect ipython from user code which may call directly
4015 sys.excepthook (this looks like an ipython crash to the user, even
4022 sys.excepthook (this looks like an ipython crash to the user, even
4016 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4023 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4017 This is especially important to help users of WxWindows, but may
4024 This is especially important to help users of WxWindows, but may
4018 also be useful in other cases.
4025 also be useful in other cases.
4019
4026
4020 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4027 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4021 an optional tb_offset to be specified, and to preserve exception
4028 an optional tb_offset to be specified, and to preserve exception
4022 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4029 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4023
4030
4024 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4031 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4025
4032
4026 2003-05-15 Fernando Perez <fperez@colorado.edu>
4033 2003-05-15 Fernando Perez <fperez@colorado.edu>
4027
4034
4028 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4035 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4029 installing for a new user under Windows.
4036 installing for a new user under Windows.
4030
4037
4031 2003-05-12 Fernando Perez <fperez@colorado.edu>
4038 2003-05-12 Fernando Perez <fperez@colorado.edu>
4032
4039
4033 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4040 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4034 handler for Emacs comint-based lines. Currently it doesn't do
4041 handler for Emacs comint-based lines. Currently it doesn't do
4035 much (but importantly, it doesn't update the history cache). In
4042 much (but importantly, it doesn't update the history cache). In
4036 the future it may be expanded if Alex needs more functionality
4043 the future it may be expanded if Alex needs more functionality
4037 there.
4044 there.
4038
4045
4039 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4046 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4040 info to crash reports.
4047 info to crash reports.
4041
4048
4042 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4049 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4043 just like Python's -c. Also fixed crash with invalid -color
4050 just like Python's -c. Also fixed crash with invalid -color
4044 option value at startup. Thanks to Will French
4051 option value at startup. Thanks to Will French
4045 <wfrench-AT-bestweb.net> for the bug report.
4052 <wfrench-AT-bestweb.net> for the bug report.
4046
4053
4047 2003-05-09 Fernando Perez <fperez@colorado.edu>
4054 2003-05-09 Fernando Perez <fperez@colorado.edu>
4048
4055
4049 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4056 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4050 to EvalDict (it's a mapping, after all) and simplified its code
4057 to EvalDict (it's a mapping, after all) and simplified its code
4051 quite a bit, after a nice discussion on c.l.py where Gustavo
4058 quite a bit, after a nice discussion on c.l.py where Gustavo
4052 Córdova <gcordova-AT-sismex.com> suggested the new version.
4059 Córdova <gcordova-AT-sismex.com> suggested the new version.
4053
4060
4054 2003-04-30 Fernando Perez <fperez@colorado.edu>
4061 2003-04-30 Fernando Perez <fperez@colorado.edu>
4055
4062
4056 * IPython/genutils.py (timings_out): modified it to reduce its
4063 * IPython/genutils.py (timings_out): modified it to reduce its
4057 overhead in the common reps==1 case.
4064 overhead in the common reps==1 case.
4058
4065
4059 2003-04-29 Fernando Perez <fperez@colorado.edu>
4066 2003-04-29 Fernando Perez <fperez@colorado.edu>
4060
4067
4061 * IPython/genutils.py (timings_out): Modified to use the resource
4068 * IPython/genutils.py (timings_out): Modified to use the resource
4062 module, which avoids the wraparound problems of time.clock().
4069 module, which avoids the wraparound problems of time.clock().
4063
4070
4064 2003-04-17 *** Released version 0.2.15pre4
4071 2003-04-17 *** Released version 0.2.15pre4
4065
4072
4066 2003-04-17 Fernando Perez <fperez@colorado.edu>
4073 2003-04-17 Fernando Perez <fperez@colorado.edu>
4067
4074
4068 * setup.py (scriptfiles): Split windows-specific stuff over to a
4075 * setup.py (scriptfiles): Split windows-specific stuff over to a
4069 separate file, in an attempt to have a Windows GUI installer.
4076 separate file, in an attempt to have a Windows GUI installer.
4070 That didn't work, but part of the groundwork is done.
4077 That didn't work, but part of the groundwork is done.
4071
4078
4072 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4079 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4073 indent/unindent with 4 spaces. Particularly useful in combination
4080 indent/unindent with 4 spaces. Particularly useful in combination
4074 with the new auto-indent option.
4081 with the new auto-indent option.
4075
4082
4076 2003-04-16 Fernando Perez <fperez@colorado.edu>
4083 2003-04-16 Fernando Perez <fperez@colorado.edu>
4077
4084
4078 * IPython/Magic.py: various replacements of self.rc for
4085 * IPython/Magic.py: various replacements of self.rc for
4079 self.shell.rc. A lot more remains to be done to fully disentangle
4086 self.shell.rc. A lot more remains to be done to fully disentangle
4080 this class from the main Shell class.
4087 this class from the main Shell class.
4081
4088
4082 * IPython/GnuplotRuntime.py: added checks for mouse support so
4089 * IPython/GnuplotRuntime.py: added checks for mouse support so
4083 that we don't try to enable it if the current gnuplot doesn't
4090 that we don't try to enable it if the current gnuplot doesn't
4084 really support it. Also added checks so that we don't try to
4091 really support it. Also added checks so that we don't try to
4085 enable persist under Windows (where Gnuplot doesn't recognize the
4092 enable persist under Windows (where Gnuplot doesn't recognize the
4086 option).
4093 option).
4087
4094
4088 * IPython/iplib.py (InteractiveShell.interact): Added optional
4095 * IPython/iplib.py (InteractiveShell.interact): Added optional
4089 auto-indenting code, after a patch by King C. Shu
4096 auto-indenting code, after a patch by King C. Shu
4090 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4097 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4091 get along well with pasting indented code. If I ever figure out
4098 get along well with pasting indented code. If I ever figure out
4092 how to make that part go well, it will become on by default.
4099 how to make that part go well, it will become on by default.
4093
4100
4094 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4101 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4095 crash ipython if there was an unmatched '%' in the user's prompt
4102 crash ipython if there was an unmatched '%' in the user's prompt
4096 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4103 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4097
4104
4098 * IPython/iplib.py (InteractiveShell.interact): removed the
4105 * IPython/iplib.py (InteractiveShell.interact): removed the
4099 ability to ask the user whether he wants to crash or not at the
4106 ability to ask the user whether he wants to crash or not at the
4100 'last line' exception handler. Calling functions at that point
4107 'last line' exception handler. Calling functions at that point
4101 changes the stack, and the error reports would have incorrect
4108 changes the stack, and the error reports would have incorrect
4102 tracebacks.
4109 tracebacks.
4103
4110
4104 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4111 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4105 pass through a peger a pretty-printed form of any object. After a
4112 pass through a peger a pretty-printed form of any object. After a
4106 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4113 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4107
4114
4108 2003-04-14 Fernando Perez <fperez@colorado.edu>
4115 2003-04-14 Fernando Perez <fperez@colorado.edu>
4109
4116
4110 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4117 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4111 all files in ~ would be modified at first install (instead of
4118 all files in ~ would be modified at first install (instead of
4112 ~/.ipython). This could be potentially disastrous, as the
4119 ~/.ipython). This could be potentially disastrous, as the
4113 modification (make line-endings native) could damage binary files.
4120 modification (make line-endings native) could damage binary files.
4114
4121
4115 2003-04-10 Fernando Perez <fperez@colorado.edu>
4122 2003-04-10 Fernando Perez <fperez@colorado.edu>
4116
4123
4117 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4124 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4118 handle only lines which are invalid python. This now means that
4125 handle only lines which are invalid python. This now means that
4119 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4126 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4120 for the bug report.
4127 for the bug report.
4121
4128
4122 2003-04-01 Fernando Perez <fperez@colorado.edu>
4129 2003-04-01 Fernando Perez <fperez@colorado.edu>
4123
4130
4124 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4131 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4125 where failing to set sys.last_traceback would crash pdb.pm().
4132 where failing to set sys.last_traceback would crash pdb.pm().
4126 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4133 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4127 report.
4134 report.
4128
4135
4129 2003-03-25 Fernando Perez <fperez@colorado.edu>
4136 2003-03-25 Fernando Perez <fperez@colorado.edu>
4130
4137
4131 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4138 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4132 before printing it (it had a lot of spurious blank lines at the
4139 before printing it (it had a lot of spurious blank lines at the
4133 end).
4140 end).
4134
4141
4135 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4142 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4136 output would be sent 21 times! Obviously people don't use this
4143 output would be sent 21 times! Obviously people don't use this
4137 too often, or I would have heard about it.
4144 too often, or I would have heard about it.
4138
4145
4139 2003-03-24 Fernando Perez <fperez@colorado.edu>
4146 2003-03-24 Fernando Perez <fperez@colorado.edu>
4140
4147
4141 * setup.py (scriptfiles): renamed the data_files parameter from
4148 * setup.py (scriptfiles): renamed the data_files parameter from
4142 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4149 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4143 for the patch.
4150 for the patch.
4144
4151
4145 2003-03-20 Fernando Perez <fperez@colorado.edu>
4152 2003-03-20 Fernando Perez <fperez@colorado.edu>
4146
4153
4147 * IPython/genutils.py (error): added error() and fatal()
4154 * IPython/genutils.py (error): added error() and fatal()
4148 functions.
4155 functions.
4149
4156
4150 2003-03-18 *** Released version 0.2.15pre3
4157 2003-03-18 *** Released version 0.2.15pre3
4151
4158
4152 2003-03-18 Fernando Perez <fperez@colorado.edu>
4159 2003-03-18 Fernando Perez <fperez@colorado.edu>
4153
4160
4154 * setupext/install_data_ext.py
4161 * setupext/install_data_ext.py
4155 (install_data_ext.initialize_options): Class contributed by Jack
4162 (install_data_ext.initialize_options): Class contributed by Jack
4156 Moffit for fixing the old distutils hack. He is sending this to
4163 Moffit for fixing the old distutils hack. He is sending this to
4157 the distutils folks so in the future we may not need it as a
4164 the distutils folks so in the future we may not need it as a
4158 private fix.
4165 private fix.
4159
4166
4160 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4167 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4161 changes for Debian packaging. See his patch for full details.
4168 changes for Debian packaging. See his patch for full details.
4162 The old distutils hack of making the ipythonrc* files carry a
4169 The old distutils hack of making the ipythonrc* files carry a
4163 bogus .py extension is gone, at last. Examples were moved to a
4170 bogus .py extension is gone, at last. Examples were moved to a
4164 separate subdir under doc/, and the separate executable scripts
4171 separate subdir under doc/, and the separate executable scripts
4165 now live in their own directory. Overall a great cleanup. The
4172 now live in their own directory. Overall a great cleanup. The
4166 manual was updated to use the new files, and setup.py has been
4173 manual was updated to use the new files, and setup.py has been
4167 fixed for this setup.
4174 fixed for this setup.
4168
4175
4169 * IPython/PyColorize.py (Parser.usage): made non-executable and
4176 * IPython/PyColorize.py (Parser.usage): made non-executable and
4170 created a pycolor wrapper around it to be included as a script.
4177 created a pycolor wrapper around it to be included as a script.
4171
4178
4172 2003-03-12 *** Released version 0.2.15pre2
4179 2003-03-12 *** Released version 0.2.15pre2
4173
4180
4174 2003-03-12 Fernando Perez <fperez@colorado.edu>
4181 2003-03-12 Fernando Perez <fperez@colorado.edu>
4175
4182
4176 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4183 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4177 long-standing problem with garbage characters in some terminals.
4184 long-standing problem with garbage characters in some terminals.
4178 The issue was really that the \001 and \002 escapes must _only_ be
4185 The issue was really that the \001 and \002 escapes must _only_ be
4179 passed to input prompts (which call readline), but _never_ to
4186 passed to input prompts (which call readline), but _never_ to
4180 normal text to be printed on screen. I changed ColorANSI to have
4187 normal text to be printed on screen. I changed ColorANSI to have
4181 two classes: TermColors and InputTermColors, each with the
4188 two classes: TermColors and InputTermColors, each with the
4182 appropriate escapes for input prompts or normal text. The code in
4189 appropriate escapes for input prompts or normal text. The code in
4183 Prompts.py got slightly more complicated, but this very old and
4190 Prompts.py got slightly more complicated, but this very old and
4184 annoying bug is finally fixed.
4191 annoying bug is finally fixed.
4185
4192
4186 All the credit for nailing down the real origin of this problem
4193 All the credit for nailing down the real origin of this problem
4187 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4194 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4188 *Many* thanks to him for spending quite a bit of effort on this.
4195 *Many* thanks to him for spending quite a bit of effort on this.
4189
4196
4190 2003-03-05 *** Released version 0.2.15pre1
4197 2003-03-05 *** Released version 0.2.15pre1
4191
4198
4192 2003-03-03 Fernando Perez <fperez@colorado.edu>
4199 2003-03-03 Fernando Perez <fperez@colorado.edu>
4193
4200
4194 * IPython/FakeModule.py: Moved the former _FakeModule to a
4201 * IPython/FakeModule.py: Moved the former _FakeModule to a
4195 separate file, because it's also needed by Magic (to fix a similar
4202 separate file, because it's also needed by Magic (to fix a similar
4196 pickle-related issue in @run).
4203 pickle-related issue in @run).
4197
4204
4198 2003-03-02 Fernando Perez <fperez@colorado.edu>
4205 2003-03-02 Fernando Perez <fperez@colorado.edu>
4199
4206
4200 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4207 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4201 the autocall option at runtime.
4208 the autocall option at runtime.
4202 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4209 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4203 across Magic.py to start separating Magic from InteractiveShell.
4210 across Magic.py to start separating Magic from InteractiveShell.
4204 (Magic._ofind): Fixed to return proper namespace for dotted
4211 (Magic._ofind): Fixed to return proper namespace for dotted
4205 names. Before, a dotted name would always return 'not currently
4212 names. Before, a dotted name would always return 'not currently
4206 defined', because it would find the 'parent'. s.x would be found,
4213 defined', because it would find the 'parent'. s.x would be found,
4207 but since 'x' isn't defined by itself, it would get confused.
4214 but since 'x' isn't defined by itself, it would get confused.
4208 (Magic.magic_run): Fixed pickling problems reported by Ralf
4215 (Magic.magic_run): Fixed pickling problems reported by Ralf
4209 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4216 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4210 that I'd used when Mike Heeter reported similar issues at the
4217 that I'd used when Mike Heeter reported similar issues at the
4211 top-level, but now for @run. It boils down to injecting the
4218 top-level, but now for @run. It boils down to injecting the
4212 namespace where code is being executed with something that looks
4219 namespace where code is being executed with something that looks
4213 enough like a module to fool pickle.dump(). Since a pickle stores
4220 enough like a module to fool pickle.dump(). Since a pickle stores
4214 a named reference to the importing module, we need this for
4221 a named reference to the importing module, we need this for
4215 pickles to save something sensible.
4222 pickles to save something sensible.
4216
4223
4217 * IPython/ipmaker.py (make_IPython): added an autocall option.
4224 * IPython/ipmaker.py (make_IPython): added an autocall option.
4218
4225
4219 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4226 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4220 the auto-eval code. Now autocalling is an option, and the code is
4227 the auto-eval code. Now autocalling is an option, and the code is
4221 also vastly safer. There is no more eval() involved at all.
4228 also vastly safer. There is no more eval() involved at all.
4222
4229
4223 2003-03-01 Fernando Perez <fperez@colorado.edu>
4230 2003-03-01 Fernando Perez <fperez@colorado.edu>
4224
4231
4225 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4232 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4226 dict with named keys instead of a tuple.
4233 dict with named keys instead of a tuple.
4227
4234
4228 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4235 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4229
4236
4230 * setup.py (make_shortcut): Fixed message about directories
4237 * setup.py (make_shortcut): Fixed message about directories
4231 created during Windows installation (the directories were ok, just
4238 created during Windows installation (the directories were ok, just
4232 the printed message was misleading). Thanks to Chris Liechti
4239 the printed message was misleading). Thanks to Chris Liechti
4233 <cliechti-AT-gmx.net> for the heads up.
4240 <cliechti-AT-gmx.net> for the heads up.
4234
4241
4235 2003-02-21 Fernando Perez <fperez@colorado.edu>
4242 2003-02-21 Fernando Perez <fperez@colorado.edu>
4236
4243
4237 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4244 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4238 of ValueError exception when checking for auto-execution. This
4245 of ValueError exception when checking for auto-execution. This
4239 one is raised by things like Numeric arrays arr.flat when the
4246 one is raised by things like Numeric arrays arr.flat when the
4240 array is non-contiguous.
4247 array is non-contiguous.
4241
4248
4242 2003-01-31 Fernando Perez <fperez@colorado.edu>
4249 2003-01-31 Fernando Perez <fperez@colorado.edu>
4243
4250
4244 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4251 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4245 not return any value at all (even though the command would get
4252 not return any value at all (even though the command would get
4246 executed).
4253 executed).
4247 (xsys): Flush stdout right after printing the command to ensure
4254 (xsys): Flush stdout right after printing the command to ensure
4248 proper ordering of commands and command output in the total
4255 proper ordering of commands and command output in the total
4249 output.
4256 output.
4250 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4257 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4251 system/getoutput as defaults. The old ones are kept for
4258 system/getoutput as defaults. The old ones are kept for
4252 compatibility reasons, so no code which uses this library needs
4259 compatibility reasons, so no code which uses this library needs
4253 changing.
4260 changing.
4254
4261
4255 2003-01-27 *** Released version 0.2.14
4262 2003-01-27 *** Released version 0.2.14
4256
4263
4257 2003-01-25 Fernando Perez <fperez@colorado.edu>
4264 2003-01-25 Fernando Perez <fperez@colorado.edu>
4258
4265
4259 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4266 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4260 functions defined in previous edit sessions could not be re-edited
4267 functions defined in previous edit sessions could not be re-edited
4261 (because the temp files were immediately removed). Now temp files
4268 (because the temp files were immediately removed). Now temp files
4262 are removed only at IPython's exit.
4269 are removed only at IPython's exit.
4263 (Magic.magic_run): Improved @run to perform shell-like expansions
4270 (Magic.magic_run): Improved @run to perform shell-like expansions
4264 on its arguments (~users and $VARS). With this, @run becomes more
4271 on its arguments (~users and $VARS). With this, @run becomes more
4265 like a normal command-line.
4272 like a normal command-line.
4266
4273
4267 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4274 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4268 bugs related to embedding and cleaned up that code. A fairly
4275 bugs related to embedding and cleaned up that code. A fairly
4269 important one was the impossibility to access the global namespace
4276 important one was the impossibility to access the global namespace
4270 through the embedded IPython (only local variables were visible).
4277 through the embedded IPython (only local variables were visible).
4271
4278
4272 2003-01-14 Fernando Perez <fperez@colorado.edu>
4279 2003-01-14 Fernando Perez <fperez@colorado.edu>
4273
4280
4274 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4281 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4275 auto-calling to be a bit more conservative. Now it doesn't get
4282 auto-calling to be a bit more conservative. Now it doesn't get
4276 triggered if any of '!=()<>' are in the rest of the input line, to
4283 triggered if any of '!=()<>' are in the rest of the input line, to
4277 allow comparing callables. Thanks to Alex for the heads up.
4284 allow comparing callables. Thanks to Alex for the heads up.
4278
4285
4279 2003-01-07 Fernando Perez <fperez@colorado.edu>
4286 2003-01-07 Fernando Perez <fperez@colorado.edu>
4280
4287
4281 * IPython/genutils.py (page): fixed estimation of the number of
4288 * IPython/genutils.py (page): fixed estimation of the number of
4282 lines in a string to be paged to simply count newlines. This
4289 lines in a string to be paged to simply count newlines. This
4283 prevents over-guessing due to embedded escape sequences. A better
4290 prevents over-guessing due to embedded escape sequences. A better
4284 long-term solution would involve stripping out the control chars
4291 long-term solution would involve stripping out the control chars
4285 for the count, but it's potentially so expensive I just don't
4292 for the count, but it's potentially so expensive I just don't
4286 think it's worth doing.
4293 think it's worth doing.
4287
4294
4288 2002-12-19 *** Released version 0.2.14pre50
4295 2002-12-19 *** Released version 0.2.14pre50
4289
4296
4290 2002-12-19 Fernando Perez <fperez@colorado.edu>
4297 2002-12-19 Fernando Perez <fperez@colorado.edu>
4291
4298
4292 * tools/release (version): Changed release scripts to inform
4299 * tools/release (version): Changed release scripts to inform
4293 Andrea and build a NEWS file with a list of recent changes.
4300 Andrea and build a NEWS file with a list of recent changes.
4294
4301
4295 * IPython/ColorANSI.py (__all__): changed terminal detection
4302 * IPython/ColorANSI.py (__all__): changed terminal detection
4296 code. Seems to work better for xterms without breaking
4303 code. Seems to work better for xterms without breaking
4297 konsole. Will need more testing to determine if WinXP and Mac OSX
4304 konsole. Will need more testing to determine if WinXP and Mac OSX
4298 also work ok.
4305 also work ok.
4299
4306
4300 2002-12-18 *** Released version 0.2.14pre49
4307 2002-12-18 *** Released version 0.2.14pre49
4301
4308
4302 2002-12-18 Fernando Perez <fperez@colorado.edu>
4309 2002-12-18 Fernando Perez <fperez@colorado.edu>
4303
4310
4304 * Docs: added new info about Mac OSX, from Andrea.
4311 * Docs: added new info about Mac OSX, from Andrea.
4305
4312
4306 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4313 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4307 allow direct plotting of python strings whose format is the same
4314 allow direct plotting of python strings whose format is the same
4308 of gnuplot data files.
4315 of gnuplot data files.
4309
4316
4310 2002-12-16 Fernando Perez <fperez@colorado.edu>
4317 2002-12-16 Fernando Perez <fperez@colorado.edu>
4311
4318
4312 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4319 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4313 value of exit question to be acknowledged.
4320 value of exit question to be acknowledged.
4314
4321
4315 2002-12-03 Fernando Perez <fperez@colorado.edu>
4322 2002-12-03 Fernando Perez <fperez@colorado.edu>
4316
4323
4317 * IPython/ipmaker.py: removed generators, which had been added
4324 * IPython/ipmaker.py: removed generators, which had been added
4318 by mistake in an earlier debugging run. This was causing trouble
4325 by mistake in an earlier debugging run. This was causing trouble
4319 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4326 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4320 for pointing this out.
4327 for pointing this out.
4321
4328
4322 2002-11-17 Fernando Perez <fperez@colorado.edu>
4329 2002-11-17 Fernando Perez <fperez@colorado.edu>
4323
4330
4324 * Manual: updated the Gnuplot section.
4331 * Manual: updated the Gnuplot section.
4325
4332
4326 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4333 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4327 a much better split of what goes in Runtime and what goes in
4334 a much better split of what goes in Runtime and what goes in
4328 Interactive.
4335 Interactive.
4329
4336
4330 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4337 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4331 being imported from iplib.
4338 being imported from iplib.
4332
4339
4333 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4340 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4334 for command-passing. Now the global Gnuplot instance is called
4341 for command-passing. Now the global Gnuplot instance is called
4335 'gp' instead of 'g', which was really a far too fragile and
4342 'gp' instead of 'g', which was really a far too fragile and
4336 common name.
4343 common name.
4337
4344
4338 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4345 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4339 bounding boxes generated by Gnuplot for square plots.
4346 bounding boxes generated by Gnuplot for square plots.
4340
4347
4341 * IPython/genutils.py (popkey): new function added. I should
4348 * IPython/genutils.py (popkey): new function added. I should
4342 suggest this on c.l.py as a dict method, it seems useful.
4349 suggest this on c.l.py as a dict method, it seems useful.
4343
4350
4344 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4351 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4345 to transparently handle PostScript generation. MUCH better than
4352 to transparently handle PostScript generation. MUCH better than
4346 the previous plot_eps/replot_eps (which I removed now). The code
4353 the previous plot_eps/replot_eps (which I removed now). The code
4347 is also fairly clean and well documented now (including
4354 is also fairly clean and well documented now (including
4348 docstrings).
4355 docstrings).
4349
4356
4350 2002-11-13 Fernando Perez <fperez@colorado.edu>
4357 2002-11-13 Fernando Perez <fperez@colorado.edu>
4351
4358
4352 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4359 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4353 (inconsistent with options).
4360 (inconsistent with options).
4354
4361
4355 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4362 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4356 manually disabled, I don't know why. Fixed it.
4363 manually disabled, I don't know why. Fixed it.
4357 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4364 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4358 eps output.
4365 eps output.
4359
4366
4360 2002-11-12 Fernando Perez <fperez@colorado.edu>
4367 2002-11-12 Fernando Perez <fperez@colorado.edu>
4361
4368
4362 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4369 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4363 don't propagate up to caller. Fixes crash reported by François
4370 don't propagate up to caller. Fixes crash reported by François
4364 Pinard.
4371 Pinard.
4365
4372
4366 2002-11-09 Fernando Perez <fperez@colorado.edu>
4373 2002-11-09 Fernando Perez <fperez@colorado.edu>
4367
4374
4368 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4375 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4369 history file for new users.
4376 history file for new users.
4370 (make_IPython): fixed bug where initial install would leave the
4377 (make_IPython): fixed bug where initial install would leave the
4371 user running in the .ipython dir.
4378 user running in the .ipython dir.
4372 (make_IPython): fixed bug where config dir .ipython would be
4379 (make_IPython): fixed bug where config dir .ipython would be
4373 created regardless of the given -ipythondir option. Thanks to Cory
4380 created regardless of the given -ipythondir option. Thanks to Cory
4374 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4381 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4375
4382
4376 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4383 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4377 type confirmations. Will need to use it in all of IPython's code
4384 type confirmations. Will need to use it in all of IPython's code
4378 consistently.
4385 consistently.
4379
4386
4380 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4387 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4381 context to print 31 lines instead of the default 5. This will make
4388 context to print 31 lines instead of the default 5. This will make
4382 the crash reports extremely detailed in case the problem is in
4389 the crash reports extremely detailed in case the problem is in
4383 libraries I don't have access to.
4390 libraries I don't have access to.
4384
4391
4385 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4392 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4386 line of defense' code to still crash, but giving users fair
4393 line of defense' code to still crash, but giving users fair
4387 warning. I don't want internal errors to go unreported: if there's
4394 warning. I don't want internal errors to go unreported: if there's
4388 an internal problem, IPython should crash and generate a full
4395 an internal problem, IPython should crash and generate a full
4389 report.
4396 report.
4390
4397
4391 2002-11-08 Fernando Perez <fperez@colorado.edu>
4398 2002-11-08 Fernando Perez <fperez@colorado.edu>
4392
4399
4393 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4400 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4394 otherwise uncaught exceptions which can appear if people set
4401 otherwise uncaught exceptions which can appear if people set
4395 sys.stdout to something badly broken. Thanks to a crash report
4402 sys.stdout to something badly broken. Thanks to a crash report
4396 from henni-AT-mail.brainbot.com.
4403 from henni-AT-mail.brainbot.com.
4397
4404
4398 2002-11-04 Fernando Perez <fperez@colorado.edu>
4405 2002-11-04 Fernando Perez <fperez@colorado.edu>
4399
4406
4400 * IPython/iplib.py (InteractiveShell.interact): added
4407 * IPython/iplib.py (InteractiveShell.interact): added
4401 __IPYTHON__active to the builtins. It's a flag which goes on when
4408 __IPYTHON__active to the builtins. It's a flag which goes on when
4402 the interaction starts and goes off again when it stops. This
4409 the interaction starts and goes off again when it stops. This
4403 allows embedding code to detect being inside IPython. Before this
4410 allows embedding code to detect being inside IPython. Before this
4404 was done via __IPYTHON__, but that only shows that an IPython
4411 was done via __IPYTHON__, but that only shows that an IPython
4405 instance has been created.
4412 instance has been created.
4406
4413
4407 * IPython/Magic.py (Magic.magic_env): I realized that in a
4414 * IPython/Magic.py (Magic.magic_env): I realized that in a
4408 UserDict, instance.data holds the data as a normal dict. So I
4415 UserDict, instance.data holds the data as a normal dict. So I
4409 modified @env to return os.environ.data instead of rebuilding a
4416 modified @env to return os.environ.data instead of rebuilding a
4410 dict by hand.
4417 dict by hand.
4411
4418
4412 2002-11-02 Fernando Perez <fperez@colorado.edu>
4419 2002-11-02 Fernando Perez <fperez@colorado.edu>
4413
4420
4414 * IPython/genutils.py (warn): changed so that level 1 prints no
4421 * IPython/genutils.py (warn): changed so that level 1 prints no
4415 header. Level 2 is now the default (with 'WARNING' header, as
4422 header. Level 2 is now the default (with 'WARNING' header, as
4416 before). I think I tracked all places where changes were needed in
4423 before). I think I tracked all places where changes were needed in
4417 IPython, but outside code using the old level numbering may have
4424 IPython, but outside code using the old level numbering may have
4418 broken.
4425 broken.
4419
4426
4420 * IPython/iplib.py (InteractiveShell.runcode): added this to
4427 * IPython/iplib.py (InteractiveShell.runcode): added this to
4421 handle the tracebacks in SystemExit traps correctly. The previous
4428 handle the tracebacks in SystemExit traps correctly. The previous
4422 code (through interact) was printing more of the stack than
4429 code (through interact) was printing more of the stack than
4423 necessary, showing IPython internal code to the user.
4430 necessary, showing IPython internal code to the user.
4424
4431
4425 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4432 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4426 default. Now that the default at the confirmation prompt is yes,
4433 default. Now that the default at the confirmation prompt is yes,
4427 it's not so intrusive. François' argument that ipython sessions
4434 it's not so intrusive. François' argument that ipython sessions
4428 tend to be complex enough not to lose them from an accidental C-d,
4435 tend to be complex enough not to lose them from an accidental C-d,
4429 is a valid one.
4436 is a valid one.
4430
4437
4431 * IPython/iplib.py (InteractiveShell.interact): added a
4438 * IPython/iplib.py (InteractiveShell.interact): added a
4432 showtraceback() call to the SystemExit trap, and modified the exit
4439 showtraceback() call to the SystemExit trap, and modified the exit
4433 confirmation to have yes as the default.
4440 confirmation to have yes as the default.
4434
4441
4435 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4442 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4436 this file. It's been gone from the code for a long time, this was
4443 this file. It's been gone from the code for a long time, this was
4437 simply leftover junk.
4444 simply leftover junk.
4438
4445
4439 2002-11-01 Fernando Perez <fperez@colorado.edu>
4446 2002-11-01 Fernando Perez <fperez@colorado.edu>
4440
4447
4441 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4448 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4442 added. If set, IPython now traps EOF and asks for
4449 added. If set, IPython now traps EOF and asks for
4443 confirmation. After a request by François Pinard.
4450 confirmation. After a request by François Pinard.
4444
4451
4445 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4452 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4446 of @abort, and with a new (better) mechanism for handling the
4453 of @abort, and with a new (better) mechanism for handling the
4447 exceptions.
4454 exceptions.
4448
4455
4449 2002-10-27 Fernando Perez <fperez@colorado.edu>
4456 2002-10-27 Fernando Perez <fperez@colorado.edu>
4450
4457
4451 * IPython/usage.py (__doc__): updated the --help information and
4458 * IPython/usage.py (__doc__): updated the --help information and
4452 the ipythonrc file to indicate that -log generates
4459 the ipythonrc file to indicate that -log generates
4453 ./ipython.log. Also fixed the corresponding info in @logstart.
4460 ./ipython.log. Also fixed the corresponding info in @logstart.
4454 This and several other fixes in the manuals thanks to reports by
4461 This and several other fixes in the manuals thanks to reports by
4455 François Pinard <pinard-AT-iro.umontreal.ca>.
4462 François Pinard <pinard-AT-iro.umontreal.ca>.
4456
4463
4457 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4464 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4458 refer to @logstart (instead of @log, which doesn't exist).
4465 refer to @logstart (instead of @log, which doesn't exist).
4459
4466
4460 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4467 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4461 AttributeError crash. Thanks to Christopher Armstrong
4468 AttributeError crash. Thanks to Christopher Armstrong
4462 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4469 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4463 introduced recently (in 0.2.14pre37) with the fix to the eval
4470 introduced recently (in 0.2.14pre37) with the fix to the eval
4464 problem mentioned below.
4471 problem mentioned below.
4465
4472
4466 2002-10-17 Fernando Perez <fperez@colorado.edu>
4473 2002-10-17 Fernando Perez <fperez@colorado.edu>
4467
4474
4468 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4475 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4469 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4476 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4470
4477
4471 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4478 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4472 this function to fix a problem reported by Alex Schmolck. He saw
4479 this function to fix a problem reported by Alex Schmolck. He saw
4473 it with list comprehensions and generators, which were getting
4480 it with list comprehensions and generators, which were getting
4474 called twice. The real problem was an 'eval' call in testing for
4481 called twice. The real problem was an 'eval' call in testing for
4475 automagic which was evaluating the input line silently.
4482 automagic which was evaluating the input line silently.
4476
4483
4477 This is a potentially very nasty bug, if the input has side
4484 This is a potentially very nasty bug, if the input has side
4478 effects which must not be repeated. The code is much cleaner now,
4485 effects which must not be repeated. The code is much cleaner now,
4479 without any blanket 'except' left and with a regexp test for
4486 without any blanket 'except' left and with a regexp test for
4480 actual function names.
4487 actual function names.
4481
4488
4482 But an eval remains, which I'm not fully comfortable with. I just
4489 But an eval remains, which I'm not fully comfortable with. I just
4483 don't know how to find out if an expression could be a callable in
4490 don't know how to find out if an expression could be a callable in
4484 the user's namespace without doing an eval on the string. However
4491 the user's namespace without doing an eval on the string. However
4485 that string is now much more strictly checked so that no code
4492 that string is now much more strictly checked so that no code
4486 slips by, so the eval should only happen for things that can
4493 slips by, so the eval should only happen for things that can
4487 really be only function/method names.
4494 really be only function/method names.
4488
4495
4489 2002-10-15 Fernando Perez <fperez@colorado.edu>
4496 2002-10-15 Fernando Perez <fperez@colorado.edu>
4490
4497
4491 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4498 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4492 OSX information to main manual, removed README_Mac_OSX file from
4499 OSX information to main manual, removed README_Mac_OSX file from
4493 distribution. Also updated credits for recent additions.
4500 distribution. Also updated credits for recent additions.
4494
4501
4495 2002-10-10 Fernando Perez <fperez@colorado.edu>
4502 2002-10-10 Fernando Perez <fperez@colorado.edu>
4496
4503
4497 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4504 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4498 terminal-related issues. Many thanks to Andrea Riciputi
4505 terminal-related issues. Many thanks to Andrea Riciputi
4499 <andrea.riciputi-AT-libero.it> for writing it.
4506 <andrea.riciputi-AT-libero.it> for writing it.
4500
4507
4501 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4508 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4502 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4509 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4503
4510
4504 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4511 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4505 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4512 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4506 <syver-en-AT-online.no> who both submitted patches for this problem.
4513 <syver-en-AT-online.no> who both submitted patches for this problem.
4507
4514
4508 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4515 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4509 global embedding to make sure that things don't overwrite user
4516 global embedding to make sure that things don't overwrite user
4510 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4517 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4511
4518
4512 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4519 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4513 compatibility. Thanks to Hayden Callow
4520 compatibility. Thanks to Hayden Callow
4514 <h.callow-AT-elec.canterbury.ac.nz>
4521 <h.callow-AT-elec.canterbury.ac.nz>
4515
4522
4516 2002-10-04 Fernando Perez <fperez@colorado.edu>
4523 2002-10-04 Fernando Perez <fperez@colorado.edu>
4517
4524
4518 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4525 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4519 Gnuplot.File objects.
4526 Gnuplot.File objects.
4520
4527
4521 2002-07-23 Fernando Perez <fperez@colorado.edu>
4528 2002-07-23 Fernando Perez <fperez@colorado.edu>
4522
4529
4523 * IPython/genutils.py (timing): Added timings() and timing() for
4530 * IPython/genutils.py (timing): Added timings() and timing() for
4524 quick access to the most commonly needed data, the execution
4531 quick access to the most commonly needed data, the execution
4525 times. Old timing() renamed to timings_out().
4532 times. Old timing() renamed to timings_out().
4526
4533
4527 2002-07-18 Fernando Perez <fperez@colorado.edu>
4534 2002-07-18 Fernando Perez <fperez@colorado.edu>
4528
4535
4529 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4536 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4530 bug with nested instances disrupting the parent's tab completion.
4537 bug with nested instances disrupting the parent's tab completion.
4531
4538
4532 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4539 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4533 all_completions code to begin the emacs integration.
4540 all_completions code to begin the emacs integration.
4534
4541
4535 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4542 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4536 argument to allow titling individual arrays when plotting.
4543 argument to allow titling individual arrays when plotting.
4537
4544
4538 2002-07-15 Fernando Perez <fperez@colorado.edu>
4545 2002-07-15 Fernando Perez <fperez@colorado.edu>
4539
4546
4540 * setup.py (make_shortcut): changed to retrieve the value of
4547 * setup.py (make_shortcut): changed to retrieve the value of
4541 'Program Files' directory from the registry (this value changes in
4548 'Program Files' directory from the registry (this value changes in
4542 non-english versions of Windows). Thanks to Thomas Fanslau
4549 non-english versions of Windows). Thanks to Thomas Fanslau
4543 <tfanslau-AT-gmx.de> for the report.
4550 <tfanslau-AT-gmx.de> for the report.
4544
4551
4545 2002-07-10 Fernando Perez <fperez@colorado.edu>
4552 2002-07-10 Fernando Perez <fperez@colorado.edu>
4546
4553
4547 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4554 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4548 a bug in pdb, which crashes if a line with only whitespace is
4555 a bug in pdb, which crashes if a line with only whitespace is
4549 entered. Bug report submitted to sourceforge.
4556 entered. Bug report submitted to sourceforge.
4550
4557
4551 2002-07-09 Fernando Perez <fperez@colorado.edu>
4558 2002-07-09 Fernando Perez <fperez@colorado.edu>
4552
4559
4553 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4560 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4554 reporting exceptions (it's a bug in inspect.py, I just set a
4561 reporting exceptions (it's a bug in inspect.py, I just set a
4555 workaround).
4562 workaround).
4556
4563
4557 2002-07-08 Fernando Perez <fperez@colorado.edu>
4564 2002-07-08 Fernando Perez <fperez@colorado.edu>
4558
4565
4559 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4566 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4560 __IPYTHON__ in __builtins__ to show up in user_ns.
4567 __IPYTHON__ in __builtins__ to show up in user_ns.
4561
4568
4562 2002-07-03 Fernando Perez <fperez@colorado.edu>
4569 2002-07-03 Fernando Perez <fperez@colorado.edu>
4563
4570
4564 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4571 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4565 name from @gp_set_instance to @gp_set_default.
4572 name from @gp_set_instance to @gp_set_default.
4566
4573
4567 * IPython/ipmaker.py (make_IPython): default editor value set to
4574 * IPython/ipmaker.py (make_IPython): default editor value set to
4568 '0' (a string), to match the rc file. Otherwise will crash when
4575 '0' (a string), to match the rc file. Otherwise will crash when
4569 .strip() is called on it.
4576 .strip() is called on it.
4570
4577
4571
4578
4572 2002-06-28 Fernando Perez <fperez@colorado.edu>
4579 2002-06-28 Fernando Perez <fperez@colorado.edu>
4573
4580
4574 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4581 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4575 of files in current directory when a file is executed via
4582 of files in current directory when a file is executed via
4576 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4583 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4577
4584
4578 * setup.py (manfiles): fix for rpm builds, submitted by RA
4585 * setup.py (manfiles): fix for rpm builds, submitted by RA
4579 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4586 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4580
4587
4581 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4588 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4582 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4589 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4583 string!). A. Schmolck caught this one.
4590 string!). A. Schmolck caught this one.
4584
4591
4585 2002-06-27 Fernando Perez <fperez@colorado.edu>
4592 2002-06-27 Fernando Perez <fperez@colorado.edu>
4586
4593
4587 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4594 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4588 defined files at the cmd line. __name__ wasn't being set to
4595 defined files at the cmd line. __name__ wasn't being set to
4589 __main__.
4596 __main__.
4590
4597
4591 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4598 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4592 regular lists and tuples besides Numeric arrays.
4599 regular lists and tuples besides Numeric arrays.
4593
4600
4594 * IPython/Prompts.py (CachedOutput.__call__): Added output
4601 * IPython/Prompts.py (CachedOutput.__call__): Added output
4595 supression for input ending with ';'. Similar to Mathematica and
4602 supression for input ending with ';'. Similar to Mathematica and
4596 Matlab. The _* vars and Out[] list are still updated, just like
4603 Matlab. The _* vars and Out[] list are still updated, just like
4597 Mathematica behaves.
4604 Mathematica behaves.
4598
4605
4599 2002-06-25 Fernando Perez <fperez@colorado.edu>
4606 2002-06-25 Fernando Perez <fperez@colorado.edu>
4600
4607
4601 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4608 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4602 .ini extensions for profiels under Windows.
4609 .ini extensions for profiels under Windows.
4603
4610
4604 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4611 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4605 string form. Fix contributed by Alexander Schmolck
4612 string form. Fix contributed by Alexander Schmolck
4606 <a.schmolck-AT-gmx.net>
4613 <a.schmolck-AT-gmx.net>
4607
4614
4608 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4615 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4609 pre-configured Gnuplot instance.
4616 pre-configured Gnuplot instance.
4610
4617
4611 2002-06-21 Fernando Perez <fperez@colorado.edu>
4618 2002-06-21 Fernando Perez <fperez@colorado.edu>
4612
4619
4613 * IPython/numutils.py (exp_safe): new function, works around the
4620 * IPython/numutils.py (exp_safe): new function, works around the
4614 underflow problems in Numeric.
4621 underflow problems in Numeric.
4615 (log2): New fn. Safe log in base 2: returns exact integer answer
4622 (log2): New fn. Safe log in base 2: returns exact integer answer
4616 for exact integer powers of 2.
4623 for exact integer powers of 2.
4617
4624
4618 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4625 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4619 properly.
4626 properly.
4620
4627
4621 2002-06-20 Fernando Perez <fperez@colorado.edu>
4628 2002-06-20 Fernando Perez <fperez@colorado.edu>
4622
4629
4623 * IPython/genutils.py (timing): new function like
4630 * IPython/genutils.py (timing): new function like
4624 Mathematica's. Similar to time_test, but returns more info.
4631 Mathematica's. Similar to time_test, but returns more info.
4625
4632
4626 2002-06-18 Fernando Perez <fperez@colorado.edu>
4633 2002-06-18 Fernando Perez <fperez@colorado.edu>
4627
4634
4628 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4635 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4629 according to Mike Heeter's suggestions.
4636 according to Mike Heeter's suggestions.
4630
4637
4631 2002-06-16 Fernando Perez <fperez@colorado.edu>
4638 2002-06-16 Fernando Perez <fperez@colorado.edu>
4632
4639
4633 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4640 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4634 system. GnuplotMagic is gone as a user-directory option. New files
4641 system. GnuplotMagic is gone as a user-directory option. New files
4635 make it easier to use all the gnuplot stuff both from external
4642 make it easier to use all the gnuplot stuff both from external
4636 programs as well as from IPython. Had to rewrite part of
4643 programs as well as from IPython. Had to rewrite part of
4637 hardcopy() b/c of a strange bug: often the ps files simply don't
4644 hardcopy() b/c of a strange bug: often the ps files simply don't
4638 get created, and require a repeat of the command (often several
4645 get created, and require a repeat of the command (often several
4639 times).
4646 times).
4640
4647
4641 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4648 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4642 resolve output channel at call time, so that if sys.stderr has
4649 resolve output channel at call time, so that if sys.stderr has
4643 been redirected by user this gets honored.
4650 been redirected by user this gets honored.
4644
4651
4645 2002-06-13 Fernando Perez <fperez@colorado.edu>
4652 2002-06-13 Fernando Perez <fperez@colorado.edu>
4646
4653
4647 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4654 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4648 IPShell. Kept a copy with the old names to avoid breaking people's
4655 IPShell. Kept a copy with the old names to avoid breaking people's
4649 embedded code.
4656 embedded code.
4650
4657
4651 * IPython/ipython: simplified it to the bare minimum after
4658 * IPython/ipython: simplified it to the bare minimum after
4652 Holger's suggestions. Added info about how to use it in
4659 Holger's suggestions. Added info about how to use it in
4653 PYTHONSTARTUP.
4660 PYTHONSTARTUP.
4654
4661
4655 * IPython/Shell.py (IPythonShell): changed the options passing
4662 * IPython/Shell.py (IPythonShell): changed the options passing
4656 from a string with funky %s replacements to a straight list. Maybe
4663 from a string with funky %s replacements to a straight list. Maybe
4657 a bit more typing, but it follows sys.argv conventions, so there's
4664 a bit more typing, but it follows sys.argv conventions, so there's
4658 less special-casing to remember.
4665 less special-casing to remember.
4659
4666
4660 2002-06-12 Fernando Perez <fperez@colorado.edu>
4667 2002-06-12 Fernando Perez <fperez@colorado.edu>
4661
4668
4662 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4669 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4663 command. Thanks to a suggestion by Mike Heeter.
4670 command. Thanks to a suggestion by Mike Heeter.
4664 (Magic.magic_pfile): added behavior to look at filenames if given
4671 (Magic.magic_pfile): added behavior to look at filenames if given
4665 arg is not a defined object.
4672 arg is not a defined object.
4666 (Magic.magic_save): New @save function to save code snippets. Also
4673 (Magic.magic_save): New @save function to save code snippets. Also
4667 a Mike Heeter idea.
4674 a Mike Heeter idea.
4668
4675
4669 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4676 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4670 plot() and replot(). Much more convenient now, especially for
4677 plot() and replot(). Much more convenient now, especially for
4671 interactive use.
4678 interactive use.
4672
4679
4673 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4680 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4674 filenames.
4681 filenames.
4675
4682
4676 2002-06-02 Fernando Perez <fperez@colorado.edu>
4683 2002-06-02 Fernando Perez <fperez@colorado.edu>
4677
4684
4678 * IPython/Struct.py (Struct.__init__): modified to admit
4685 * IPython/Struct.py (Struct.__init__): modified to admit
4679 initialization via another struct.
4686 initialization via another struct.
4680
4687
4681 * IPython/genutils.py (SystemExec.__init__): New stateful
4688 * IPython/genutils.py (SystemExec.__init__): New stateful
4682 interface to xsys and bq. Useful for writing system scripts.
4689 interface to xsys and bq. Useful for writing system scripts.
4683
4690
4684 2002-05-30 Fernando Perez <fperez@colorado.edu>
4691 2002-05-30 Fernando Perez <fperez@colorado.edu>
4685
4692
4686 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4693 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4687 documents. This will make the user download smaller (it's getting
4694 documents. This will make the user download smaller (it's getting
4688 too big).
4695 too big).
4689
4696
4690 2002-05-29 Fernando Perez <fperez@colorado.edu>
4697 2002-05-29 Fernando Perez <fperez@colorado.edu>
4691
4698
4692 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4699 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4693 fix problems with shelve and pickle. Seems to work, but I don't
4700 fix problems with shelve and pickle. Seems to work, but I don't
4694 know if corner cases break it. Thanks to Mike Heeter
4701 know if corner cases break it. Thanks to Mike Heeter
4695 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4702 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4696
4703
4697 2002-05-24 Fernando Perez <fperez@colorado.edu>
4704 2002-05-24 Fernando Perez <fperez@colorado.edu>
4698
4705
4699 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4706 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4700 macros having broken.
4707 macros having broken.
4701
4708
4702 2002-05-21 Fernando Perez <fperez@colorado.edu>
4709 2002-05-21 Fernando Perez <fperez@colorado.edu>
4703
4710
4704 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4711 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4705 introduced logging bug: all history before logging started was
4712 introduced logging bug: all history before logging started was
4706 being written one character per line! This came from the redesign
4713 being written one character per line! This came from the redesign
4707 of the input history as a special list which slices to strings,
4714 of the input history as a special list which slices to strings,
4708 not to lists.
4715 not to lists.
4709
4716
4710 2002-05-20 Fernando Perez <fperez@colorado.edu>
4717 2002-05-20 Fernando Perez <fperez@colorado.edu>
4711
4718
4712 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4719 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4713 be an attribute of all classes in this module. The design of these
4720 be an attribute of all classes in this module. The design of these
4714 classes needs some serious overhauling.
4721 classes needs some serious overhauling.
4715
4722
4716 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4723 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4717 which was ignoring '_' in option names.
4724 which was ignoring '_' in option names.
4718
4725
4719 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4726 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4720 'Verbose_novars' to 'Context' and made it the new default. It's a
4727 'Verbose_novars' to 'Context' and made it the new default. It's a
4721 bit more readable and also safer than verbose.
4728 bit more readable and also safer than verbose.
4722
4729
4723 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4730 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4724 triple-quoted strings.
4731 triple-quoted strings.
4725
4732
4726 * IPython/OInspect.py (__all__): new module exposing the object
4733 * IPython/OInspect.py (__all__): new module exposing the object
4727 introspection facilities. Now the corresponding magics are dummy
4734 introspection facilities. Now the corresponding magics are dummy
4728 wrappers around this. Having this module will make it much easier
4735 wrappers around this. Having this module will make it much easier
4729 to put these functions into our modified pdb.
4736 to put these functions into our modified pdb.
4730 This new object inspector system uses the new colorizing module,
4737 This new object inspector system uses the new colorizing module,
4731 so source code and other things are nicely syntax highlighted.
4738 so source code and other things are nicely syntax highlighted.
4732
4739
4733 2002-05-18 Fernando Perez <fperez@colorado.edu>
4740 2002-05-18 Fernando Perez <fperez@colorado.edu>
4734
4741
4735 * IPython/ColorANSI.py: Split the coloring tools into a separate
4742 * IPython/ColorANSI.py: Split the coloring tools into a separate
4736 module so I can use them in other code easier (they were part of
4743 module so I can use them in other code easier (they were part of
4737 ultraTB).
4744 ultraTB).
4738
4745
4739 2002-05-17 Fernando Perez <fperez@colorado.edu>
4746 2002-05-17 Fernando Perez <fperez@colorado.edu>
4740
4747
4741 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4748 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4742 fixed it to set the global 'g' also to the called instance, as
4749 fixed it to set the global 'g' also to the called instance, as
4743 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4750 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4744 user's 'g' variables).
4751 user's 'g' variables).
4745
4752
4746 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4753 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4747 global variables (aliases to _ih,_oh) so that users which expect
4754 global variables (aliases to _ih,_oh) so that users which expect
4748 In[5] or Out[7] to work aren't unpleasantly surprised.
4755 In[5] or Out[7] to work aren't unpleasantly surprised.
4749 (InputList.__getslice__): new class to allow executing slices of
4756 (InputList.__getslice__): new class to allow executing slices of
4750 input history directly. Very simple class, complements the use of
4757 input history directly. Very simple class, complements the use of
4751 macros.
4758 macros.
4752
4759
4753 2002-05-16 Fernando Perez <fperez@colorado.edu>
4760 2002-05-16 Fernando Perez <fperez@colorado.edu>
4754
4761
4755 * setup.py (docdirbase): make doc directory be just doc/IPython
4762 * setup.py (docdirbase): make doc directory be just doc/IPython
4756 without version numbers, it will reduce clutter for users.
4763 without version numbers, it will reduce clutter for users.
4757
4764
4758 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4765 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4759 execfile call to prevent possible memory leak. See for details:
4766 execfile call to prevent possible memory leak. See for details:
4760 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4767 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4761
4768
4762 2002-05-15 Fernando Perez <fperez@colorado.edu>
4769 2002-05-15 Fernando Perez <fperez@colorado.edu>
4763
4770
4764 * IPython/Magic.py (Magic.magic_psource): made the object
4771 * IPython/Magic.py (Magic.magic_psource): made the object
4765 introspection names be more standard: pdoc, pdef, pfile and
4772 introspection names be more standard: pdoc, pdef, pfile and
4766 psource. They all print/page their output, and it makes
4773 psource. They all print/page their output, and it makes
4767 remembering them easier. Kept old names for compatibility as
4774 remembering them easier. Kept old names for compatibility as
4768 aliases.
4775 aliases.
4769
4776
4770 2002-05-14 Fernando Perez <fperez@colorado.edu>
4777 2002-05-14 Fernando Perez <fperez@colorado.edu>
4771
4778
4772 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4779 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4773 what the mouse problem was. The trick is to use gnuplot with temp
4780 what the mouse problem was. The trick is to use gnuplot with temp
4774 files and NOT with pipes (for data communication), because having
4781 files and NOT with pipes (for data communication), because having
4775 both pipes and the mouse on is bad news.
4782 both pipes and the mouse on is bad news.
4776
4783
4777 2002-05-13 Fernando Perez <fperez@colorado.edu>
4784 2002-05-13 Fernando Perez <fperez@colorado.edu>
4778
4785
4779 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4786 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4780 bug. Information would be reported about builtins even when
4787 bug. Information would be reported about builtins even when
4781 user-defined functions overrode them.
4788 user-defined functions overrode them.
4782
4789
4783 2002-05-11 Fernando Perez <fperez@colorado.edu>
4790 2002-05-11 Fernando Perez <fperez@colorado.edu>
4784
4791
4785 * IPython/__init__.py (__all__): removed FlexCompleter from
4792 * IPython/__init__.py (__all__): removed FlexCompleter from
4786 __all__ so that things don't fail in platforms without readline.
4793 __all__ so that things don't fail in platforms without readline.
4787
4794
4788 2002-05-10 Fernando Perez <fperez@colorado.edu>
4795 2002-05-10 Fernando Perez <fperez@colorado.edu>
4789
4796
4790 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4797 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4791 it requires Numeric, effectively making Numeric a dependency for
4798 it requires Numeric, effectively making Numeric a dependency for
4792 IPython.
4799 IPython.
4793
4800
4794 * Released 0.2.13
4801 * Released 0.2.13
4795
4802
4796 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4803 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4797 profiler interface. Now all the major options from the profiler
4804 profiler interface. Now all the major options from the profiler
4798 module are directly supported in IPython, both for single
4805 module are directly supported in IPython, both for single
4799 expressions (@prun) and for full programs (@run -p).
4806 expressions (@prun) and for full programs (@run -p).
4800
4807
4801 2002-05-09 Fernando Perez <fperez@colorado.edu>
4808 2002-05-09 Fernando Perez <fperez@colorado.edu>
4802
4809
4803 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4810 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4804 magic properly formatted for screen.
4811 magic properly formatted for screen.
4805
4812
4806 * setup.py (make_shortcut): Changed things to put pdf version in
4813 * setup.py (make_shortcut): Changed things to put pdf version in
4807 doc/ instead of doc/manual (had to change lyxport a bit).
4814 doc/ instead of doc/manual (had to change lyxport a bit).
4808
4815
4809 * IPython/Magic.py (Profile.string_stats): made profile runs go
4816 * IPython/Magic.py (Profile.string_stats): made profile runs go
4810 through pager (they are long and a pager allows searching, saving,
4817 through pager (they are long and a pager allows searching, saving,
4811 etc.)
4818 etc.)
4812
4819
4813 2002-05-08 Fernando Perez <fperez@colorado.edu>
4820 2002-05-08 Fernando Perez <fperez@colorado.edu>
4814
4821
4815 * Released 0.2.12
4822 * Released 0.2.12
4816
4823
4817 2002-05-06 Fernando Perez <fperez@colorado.edu>
4824 2002-05-06 Fernando Perez <fperez@colorado.edu>
4818
4825
4819 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4826 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4820 introduced); 'hist n1 n2' was broken.
4827 introduced); 'hist n1 n2' was broken.
4821 (Magic.magic_pdb): added optional on/off arguments to @pdb
4828 (Magic.magic_pdb): added optional on/off arguments to @pdb
4822 (Magic.magic_run): added option -i to @run, which executes code in
4829 (Magic.magic_run): added option -i to @run, which executes code in
4823 the IPython namespace instead of a clean one. Also added @irun as
4830 the IPython namespace instead of a clean one. Also added @irun as
4824 an alias to @run -i.
4831 an alias to @run -i.
4825
4832
4826 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4833 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4827 fixed (it didn't really do anything, the namespaces were wrong).
4834 fixed (it didn't really do anything, the namespaces were wrong).
4828
4835
4829 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4836 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4830
4837
4831 * IPython/__init__.py (__all__): Fixed package namespace, now
4838 * IPython/__init__.py (__all__): Fixed package namespace, now
4832 'import IPython' does give access to IPython.<all> as
4839 'import IPython' does give access to IPython.<all> as
4833 expected. Also renamed __release__ to Release.
4840 expected. Also renamed __release__ to Release.
4834
4841
4835 * IPython/Debugger.py (__license__): created new Pdb class which
4842 * IPython/Debugger.py (__license__): created new Pdb class which
4836 functions like a drop-in for the normal pdb.Pdb but does NOT
4843 functions like a drop-in for the normal pdb.Pdb but does NOT
4837 import readline by default. This way it doesn't muck up IPython's
4844 import readline by default. This way it doesn't muck up IPython's
4838 readline handling, and now tab-completion finally works in the
4845 readline handling, and now tab-completion finally works in the
4839 debugger -- sort of. It completes things globally visible, but the
4846 debugger -- sort of. It completes things globally visible, but the
4840 completer doesn't track the stack as pdb walks it. That's a bit
4847 completer doesn't track the stack as pdb walks it. That's a bit
4841 tricky, and I'll have to implement it later.
4848 tricky, and I'll have to implement it later.
4842
4849
4843 2002-05-05 Fernando Perez <fperez@colorado.edu>
4850 2002-05-05 Fernando Perez <fperez@colorado.edu>
4844
4851
4845 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4852 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4846 magic docstrings when printed via ? (explicit \'s were being
4853 magic docstrings when printed via ? (explicit \'s were being
4847 printed).
4854 printed).
4848
4855
4849 * IPython/ipmaker.py (make_IPython): fixed namespace
4856 * IPython/ipmaker.py (make_IPython): fixed namespace
4850 identification bug. Now variables loaded via logs or command-line
4857 identification bug. Now variables loaded via logs or command-line
4851 files are recognized in the interactive namespace by @who.
4858 files are recognized in the interactive namespace by @who.
4852
4859
4853 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4860 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4854 log replay system stemming from the string form of Structs.
4861 log replay system stemming from the string form of Structs.
4855
4862
4856 * IPython/Magic.py (Macro.__init__): improved macros to properly
4863 * IPython/Magic.py (Macro.__init__): improved macros to properly
4857 handle magic commands in them.
4864 handle magic commands in them.
4858 (Magic.magic_logstart): usernames are now expanded so 'logstart
4865 (Magic.magic_logstart): usernames are now expanded so 'logstart
4859 ~/mylog' now works.
4866 ~/mylog' now works.
4860
4867
4861 * IPython/iplib.py (complete): fixed bug where paths starting with
4868 * IPython/iplib.py (complete): fixed bug where paths starting with
4862 '/' would be completed as magic names.
4869 '/' would be completed as magic names.
4863
4870
4864 2002-05-04 Fernando Perez <fperez@colorado.edu>
4871 2002-05-04 Fernando Perez <fperez@colorado.edu>
4865
4872
4866 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4873 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4867 allow running full programs under the profiler's control.
4874 allow running full programs under the profiler's control.
4868
4875
4869 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4876 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4870 mode to report exceptions verbosely but without formatting
4877 mode to report exceptions verbosely but without formatting
4871 variables. This addresses the issue of ipython 'freezing' (it's
4878 variables. This addresses the issue of ipython 'freezing' (it's
4872 not frozen, but caught in an expensive formatting loop) when huge
4879 not frozen, but caught in an expensive formatting loop) when huge
4873 variables are in the context of an exception.
4880 variables are in the context of an exception.
4874 (VerboseTB.text): Added '--->' markers at line where exception was
4881 (VerboseTB.text): Added '--->' markers at line where exception was
4875 triggered. Much clearer to read, especially in NoColor modes.
4882 triggered. Much clearer to read, especially in NoColor modes.
4876
4883
4877 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4884 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4878 implemented in reverse when changing to the new parse_options().
4885 implemented in reverse when changing to the new parse_options().
4879
4886
4880 2002-05-03 Fernando Perez <fperez@colorado.edu>
4887 2002-05-03 Fernando Perez <fperez@colorado.edu>
4881
4888
4882 * IPython/Magic.py (Magic.parse_options): new function so that
4889 * IPython/Magic.py (Magic.parse_options): new function so that
4883 magics can parse options easier.
4890 magics can parse options easier.
4884 (Magic.magic_prun): new function similar to profile.run(),
4891 (Magic.magic_prun): new function similar to profile.run(),
4885 suggested by Chris Hart.
4892 suggested by Chris Hart.
4886 (Magic.magic_cd): fixed behavior so that it only changes if
4893 (Magic.magic_cd): fixed behavior so that it only changes if
4887 directory actually is in history.
4894 directory actually is in history.
4888
4895
4889 * IPython/usage.py (__doc__): added information about potential
4896 * IPython/usage.py (__doc__): added information about potential
4890 slowness of Verbose exception mode when there are huge data
4897 slowness of Verbose exception mode when there are huge data
4891 structures to be formatted (thanks to Archie Paulson).
4898 structures to be formatted (thanks to Archie Paulson).
4892
4899
4893 * IPython/ipmaker.py (make_IPython): Changed default logging
4900 * IPython/ipmaker.py (make_IPython): Changed default logging
4894 (when simply called with -log) to use curr_dir/ipython.log in
4901 (when simply called with -log) to use curr_dir/ipython.log in
4895 rotate mode. Fixed crash which was occuring with -log before
4902 rotate mode. Fixed crash which was occuring with -log before
4896 (thanks to Jim Boyle).
4903 (thanks to Jim Boyle).
4897
4904
4898 2002-05-01 Fernando Perez <fperez@colorado.edu>
4905 2002-05-01 Fernando Perez <fperez@colorado.edu>
4899
4906
4900 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4907 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4901 was nasty -- though somewhat of a corner case).
4908 was nasty -- though somewhat of a corner case).
4902
4909
4903 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4910 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4904 text (was a bug).
4911 text (was a bug).
4905
4912
4906 2002-04-30 Fernando Perez <fperez@colorado.edu>
4913 2002-04-30 Fernando Perez <fperez@colorado.edu>
4907
4914
4908 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4915 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4909 a print after ^D or ^C from the user so that the In[] prompt
4916 a print after ^D or ^C from the user so that the In[] prompt
4910 doesn't over-run the gnuplot one.
4917 doesn't over-run the gnuplot one.
4911
4918
4912 2002-04-29 Fernando Perez <fperez@colorado.edu>
4919 2002-04-29 Fernando Perez <fperez@colorado.edu>
4913
4920
4914 * Released 0.2.10
4921 * Released 0.2.10
4915
4922
4916 * IPython/__release__.py (version): get date dynamically.
4923 * IPython/__release__.py (version): get date dynamically.
4917
4924
4918 * Misc. documentation updates thanks to Arnd's comments. Also ran
4925 * Misc. documentation updates thanks to Arnd's comments. Also ran
4919 a full spellcheck on the manual (hadn't been done in a while).
4926 a full spellcheck on the manual (hadn't been done in a while).
4920
4927
4921 2002-04-27 Fernando Perez <fperez@colorado.edu>
4928 2002-04-27 Fernando Perez <fperez@colorado.edu>
4922
4929
4923 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4930 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4924 starting a log in mid-session would reset the input history list.
4931 starting a log in mid-session would reset the input history list.
4925
4932
4926 2002-04-26 Fernando Perez <fperez@colorado.edu>
4933 2002-04-26 Fernando Perez <fperez@colorado.edu>
4927
4934
4928 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4935 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4929 all files were being included in an update. Now anything in
4936 all files were being included in an update. Now anything in
4930 UserConfig that matches [A-Za-z]*.py will go (this excludes
4937 UserConfig that matches [A-Za-z]*.py will go (this excludes
4931 __init__.py)
4938 __init__.py)
4932
4939
4933 2002-04-25 Fernando Perez <fperez@colorado.edu>
4940 2002-04-25 Fernando Perez <fperez@colorado.edu>
4934
4941
4935 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4942 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4936 to __builtins__ so that any form of embedded or imported code can
4943 to __builtins__ so that any form of embedded or imported code can
4937 test for being inside IPython.
4944 test for being inside IPython.
4938
4945
4939 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4946 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4940 changed to GnuplotMagic because it's now an importable module,
4947 changed to GnuplotMagic because it's now an importable module,
4941 this makes the name follow that of the standard Gnuplot module.
4948 this makes the name follow that of the standard Gnuplot module.
4942 GnuplotMagic can now be loaded at any time in mid-session.
4949 GnuplotMagic can now be loaded at any time in mid-session.
4943
4950
4944 2002-04-24 Fernando Perez <fperez@colorado.edu>
4951 2002-04-24 Fernando Perez <fperez@colorado.edu>
4945
4952
4946 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4953 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4947 the globals (IPython has its own namespace) and the
4954 the globals (IPython has its own namespace) and the
4948 PhysicalQuantity stuff is much better anyway.
4955 PhysicalQuantity stuff is much better anyway.
4949
4956
4950 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4957 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4951 embedding example to standard user directory for
4958 embedding example to standard user directory for
4952 distribution. Also put it in the manual.
4959 distribution. Also put it in the manual.
4953
4960
4954 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4961 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4955 instance as first argument (so it doesn't rely on some obscure
4962 instance as first argument (so it doesn't rely on some obscure
4956 hidden global).
4963 hidden global).
4957
4964
4958 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4965 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4959 delimiters. While it prevents ().TAB from working, it allows
4966 delimiters. While it prevents ().TAB from working, it allows
4960 completions in open (... expressions. This is by far a more common
4967 completions in open (... expressions. This is by far a more common
4961 case.
4968 case.
4962
4969
4963 2002-04-23 Fernando Perez <fperez@colorado.edu>
4970 2002-04-23 Fernando Perez <fperez@colorado.edu>
4964
4971
4965 * IPython/Extensions/InterpreterPasteInput.py: new
4972 * IPython/Extensions/InterpreterPasteInput.py: new
4966 syntax-processing module for pasting lines with >>> or ... at the
4973 syntax-processing module for pasting lines with >>> or ... at the
4967 start.
4974 start.
4968
4975
4969 * IPython/Extensions/PhysicalQ_Interactive.py
4976 * IPython/Extensions/PhysicalQ_Interactive.py
4970 (PhysicalQuantityInteractive.__int__): fixed to work with either
4977 (PhysicalQuantityInteractive.__int__): fixed to work with either
4971 Numeric or math.
4978 Numeric or math.
4972
4979
4973 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4980 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4974 provided profiles. Now we have:
4981 provided profiles. Now we have:
4975 -math -> math module as * and cmath with its own namespace.
4982 -math -> math module as * and cmath with its own namespace.
4976 -numeric -> Numeric as *, plus gnuplot & grace
4983 -numeric -> Numeric as *, plus gnuplot & grace
4977 -physics -> same as before
4984 -physics -> same as before
4978
4985
4979 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4986 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4980 user-defined magics wouldn't be found by @magic if they were
4987 user-defined magics wouldn't be found by @magic if they were
4981 defined as class methods. Also cleaned up the namespace search
4988 defined as class methods. Also cleaned up the namespace search
4982 logic and the string building (to use %s instead of many repeated
4989 logic and the string building (to use %s instead of many repeated
4983 string adds).
4990 string adds).
4984
4991
4985 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4992 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4986 of user-defined magics to operate with class methods (cleaner, in
4993 of user-defined magics to operate with class methods (cleaner, in
4987 line with the gnuplot code).
4994 line with the gnuplot code).
4988
4995
4989 2002-04-22 Fernando Perez <fperez@colorado.edu>
4996 2002-04-22 Fernando Perez <fperez@colorado.edu>
4990
4997
4991 * setup.py: updated dependency list so that manual is updated when
4998 * setup.py: updated dependency list so that manual is updated when
4992 all included files change.
4999 all included files change.
4993
5000
4994 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5001 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4995 the delimiter removal option (the fix is ugly right now).
5002 the delimiter removal option (the fix is ugly right now).
4996
5003
4997 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5004 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4998 all of the math profile (quicker loading, no conflict between
5005 all of the math profile (quicker loading, no conflict between
4999 g-9.8 and g-gnuplot).
5006 g-9.8 and g-gnuplot).
5000
5007
5001 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5008 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5002 name of post-mortem files to IPython_crash_report.txt.
5009 name of post-mortem files to IPython_crash_report.txt.
5003
5010
5004 * Cleanup/update of the docs. Added all the new readline info and
5011 * Cleanup/update of the docs. Added all the new readline info and
5005 formatted all lists as 'real lists'.
5012 formatted all lists as 'real lists'.
5006
5013
5007 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5014 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5008 tab-completion options, since the full readline parse_and_bind is
5015 tab-completion options, since the full readline parse_and_bind is
5009 now accessible.
5016 now accessible.
5010
5017
5011 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5018 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5012 handling of readline options. Now users can specify any string to
5019 handling of readline options. Now users can specify any string to
5013 be passed to parse_and_bind(), as well as the delimiters to be
5020 be passed to parse_and_bind(), as well as the delimiters to be
5014 removed.
5021 removed.
5015 (InteractiveShell.__init__): Added __name__ to the global
5022 (InteractiveShell.__init__): Added __name__ to the global
5016 namespace so that things like Itpl which rely on its existence
5023 namespace so that things like Itpl which rely on its existence
5017 don't crash.
5024 don't crash.
5018 (InteractiveShell._prefilter): Defined the default with a _ so
5025 (InteractiveShell._prefilter): Defined the default with a _ so
5019 that prefilter() is easier to override, while the default one
5026 that prefilter() is easier to override, while the default one
5020 remains available.
5027 remains available.
5021
5028
5022 2002-04-18 Fernando Perez <fperez@colorado.edu>
5029 2002-04-18 Fernando Perez <fperez@colorado.edu>
5023
5030
5024 * Added information about pdb in the docs.
5031 * Added information about pdb in the docs.
5025
5032
5026 2002-04-17 Fernando Perez <fperez@colorado.edu>
5033 2002-04-17 Fernando Perez <fperez@colorado.edu>
5027
5034
5028 * IPython/ipmaker.py (make_IPython): added rc_override option to
5035 * IPython/ipmaker.py (make_IPython): added rc_override option to
5029 allow passing config options at creation time which may override
5036 allow passing config options at creation time which may override
5030 anything set in the config files or command line. This is
5037 anything set in the config files or command line. This is
5031 particularly useful for configuring embedded instances.
5038 particularly useful for configuring embedded instances.
5032
5039
5033 2002-04-15 Fernando Perez <fperez@colorado.edu>
5040 2002-04-15 Fernando Perez <fperez@colorado.edu>
5034
5041
5035 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5042 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5036 crash embedded instances because of the input cache falling out of
5043 crash embedded instances because of the input cache falling out of
5037 sync with the output counter.
5044 sync with the output counter.
5038
5045
5039 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5046 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5040 mode which calls pdb after an uncaught exception in IPython itself.
5047 mode which calls pdb after an uncaught exception in IPython itself.
5041
5048
5042 2002-04-14 Fernando Perez <fperez@colorado.edu>
5049 2002-04-14 Fernando Perez <fperez@colorado.edu>
5043
5050
5044 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5051 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5045 readline, fix it back after each call.
5052 readline, fix it back after each call.
5046
5053
5047 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5054 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5048 method to force all access via __call__(), which guarantees that
5055 method to force all access via __call__(), which guarantees that
5049 traceback references are properly deleted.
5056 traceback references are properly deleted.
5050
5057
5051 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5058 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5052 improve printing when pprint is in use.
5059 improve printing when pprint is in use.
5053
5060
5054 2002-04-13 Fernando Perez <fperez@colorado.edu>
5061 2002-04-13 Fernando Perez <fperez@colorado.edu>
5055
5062
5056 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5063 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5057 exceptions aren't caught anymore. If the user triggers one, he
5064 exceptions aren't caught anymore. If the user triggers one, he
5058 should know why he's doing it and it should go all the way up,
5065 should know why he's doing it and it should go all the way up,
5059 just like any other exception. So now @abort will fully kill the
5066 just like any other exception. So now @abort will fully kill the
5060 embedded interpreter and the embedding code (unless that happens
5067 embedded interpreter and the embedding code (unless that happens
5061 to catch SystemExit).
5068 to catch SystemExit).
5062
5069
5063 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5070 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5064 and a debugger() method to invoke the interactive pdb debugger
5071 and a debugger() method to invoke the interactive pdb debugger
5065 after printing exception information. Also added the corresponding
5072 after printing exception information. Also added the corresponding
5066 -pdb option and @pdb magic to control this feature, and updated
5073 -pdb option and @pdb magic to control this feature, and updated
5067 the docs. After a suggestion from Christopher Hart
5074 the docs. After a suggestion from Christopher Hart
5068 (hart-AT-caltech.edu).
5075 (hart-AT-caltech.edu).
5069
5076
5070 2002-04-12 Fernando Perez <fperez@colorado.edu>
5077 2002-04-12 Fernando Perez <fperez@colorado.edu>
5071
5078
5072 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5079 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5073 the exception handlers defined by the user (not the CrashHandler)
5080 the exception handlers defined by the user (not the CrashHandler)
5074 so that user exceptions don't trigger an ipython bug report.
5081 so that user exceptions don't trigger an ipython bug report.
5075
5082
5076 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5083 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5077 configurable (it should have always been so).
5084 configurable (it should have always been so).
5078
5085
5079 2002-03-26 Fernando Perez <fperez@colorado.edu>
5086 2002-03-26 Fernando Perez <fperez@colorado.edu>
5080
5087
5081 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5088 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5082 and there to fix embedding namespace issues. This should all be
5089 and there to fix embedding namespace issues. This should all be
5083 done in a more elegant way.
5090 done in a more elegant way.
5084
5091
5085 2002-03-25 Fernando Perez <fperez@colorado.edu>
5092 2002-03-25 Fernando Perez <fperez@colorado.edu>
5086
5093
5087 * IPython/genutils.py (get_home_dir): Try to make it work under
5094 * IPython/genutils.py (get_home_dir): Try to make it work under
5088 win9x also.
5095 win9x also.
5089
5096
5090 2002-03-20 Fernando Perez <fperez@colorado.edu>
5097 2002-03-20 Fernando Perez <fperez@colorado.edu>
5091
5098
5092 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5099 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5093 sys.displayhook untouched upon __init__.
5100 sys.displayhook untouched upon __init__.
5094
5101
5095 2002-03-19 Fernando Perez <fperez@colorado.edu>
5102 2002-03-19 Fernando Perez <fperez@colorado.edu>
5096
5103
5097 * Released 0.2.9 (for embedding bug, basically).
5104 * Released 0.2.9 (for embedding bug, basically).
5098
5105
5099 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5106 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5100 exceptions so that enclosing shell's state can be restored.
5107 exceptions so that enclosing shell's state can be restored.
5101
5108
5102 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5109 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5103 naming conventions in the .ipython/ dir.
5110 naming conventions in the .ipython/ dir.
5104
5111
5105 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5112 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5106 from delimiters list so filenames with - in them get expanded.
5113 from delimiters list so filenames with - in them get expanded.
5107
5114
5108 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5115 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5109 sys.displayhook not being properly restored after an embedded call.
5116 sys.displayhook not being properly restored after an embedded call.
5110
5117
5111 2002-03-18 Fernando Perez <fperez@colorado.edu>
5118 2002-03-18 Fernando Perez <fperez@colorado.edu>
5112
5119
5113 * Released 0.2.8
5120 * Released 0.2.8
5114
5121
5115 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5122 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5116 some files weren't being included in a -upgrade.
5123 some files weren't being included in a -upgrade.
5117 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5124 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5118 on' so that the first tab completes.
5125 on' so that the first tab completes.
5119 (InteractiveShell.handle_magic): fixed bug with spaces around
5126 (InteractiveShell.handle_magic): fixed bug with spaces around
5120 quotes breaking many magic commands.
5127 quotes breaking many magic commands.
5121
5128
5122 * setup.py: added note about ignoring the syntax error messages at
5129 * setup.py: added note about ignoring the syntax error messages at
5123 installation.
5130 installation.
5124
5131
5125 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5132 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5126 streamlining the gnuplot interface, now there's only one magic @gp.
5133 streamlining the gnuplot interface, now there's only one magic @gp.
5127
5134
5128 2002-03-17 Fernando Perez <fperez@colorado.edu>
5135 2002-03-17 Fernando Perez <fperez@colorado.edu>
5129
5136
5130 * IPython/UserConfig/magic_gnuplot.py: new name for the
5137 * IPython/UserConfig/magic_gnuplot.py: new name for the
5131 example-magic_pm.py file. Much enhanced system, now with a shell
5138 example-magic_pm.py file. Much enhanced system, now with a shell
5132 for communicating directly with gnuplot, one command at a time.
5139 for communicating directly with gnuplot, one command at a time.
5133
5140
5134 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5141 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5135 setting __name__=='__main__'.
5142 setting __name__=='__main__'.
5136
5143
5137 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5144 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5138 mini-shell for accessing gnuplot from inside ipython. Should
5145 mini-shell for accessing gnuplot from inside ipython. Should
5139 extend it later for grace access too. Inspired by Arnd's
5146 extend it later for grace access too. Inspired by Arnd's
5140 suggestion.
5147 suggestion.
5141
5148
5142 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5149 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5143 calling magic functions with () in their arguments. Thanks to Arnd
5150 calling magic functions with () in their arguments. Thanks to Arnd
5144 Baecker for pointing this to me.
5151 Baecker for pointing this to me.
5145
5152
5146 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5153 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5147 infinitely for integer or complex arrays (only worked with floats).
5154 infinitely for integer or complex arrays (only worked with floats).
5148
5155
5149 2002-03-16 Fernando Perez <fperez@colorado.edu>
5156 2002-03-16 Fernando Perez <fperez@colorado.edu>
5150
5157
5151 * setup.py: Merged setup and setup_windows into a single script
5158 * setup.py: Merged setup and setup_windows into a single script
5152 which properly handles things for windows users.
5159 which properly handles things for windows users.
5153
5160
5154 2002-03-15 Fernando Perez <fperez@colorado.edu>
5161 2002-03-15 Fernando Perez <fperez@colorado.edu>
5155
5162
5156 * Big change to the manual: now the magics are all automatically
5163 * Big change to the manual: now the magics are all automatically
5157 documented. This information is generated from their docstrings
5164 documented. This information is generated from their docstrings
5158 and put in a latex file included by the manual lyx file. This way
5165 and put in a latex file included by the manual lyx file. This way
5159 we get always up to date information for the magics. The manual
5166 we get always up to date information for the magics. The manual
5160 now also has proper version information, also auto-synced.
5167 now also has proper version information, also auto-synced.
5161
5168
5162 For this to work, an undocumented --magic_docstrings option was added.
5169 For this to work, an undocumented --magic_docstrings option was added.
5163
5170
5164 2002-03-13 Fernando Perez <fperez@colorado.edu>
5171 2002-03-13 Fernando Perez <fperez@colorado.edu>
5165
5172
5166 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5173 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5167 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5174 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5168
5175
5169 2002-03-12 Fernando Perez <fperez@colorado.edu>
5176 2002-03-12 Fernando Perez <fperez@colorado.edu>
5170
5177
5171 * IPython/ultraTB.py (TermColors): changed color escapes again to
5178 * IPython/ultraTB.py (TermColors): changed color escapes again to
5172 fix the (old, reintroduced) line-wrapping bug. Basically, if
5179 fix the (old, reintroduced) line-wrapping bug. Basically, if
5173 \001..\002 aren't given in the color escapes, lines get wrapped
5180 \001..\002 aren't given in the color escapes, lines get wrapped
5174 weirdly. But giving those screws up old xterms and emacs terms. So
5181 weirdly. But giving those screws up old xterms and emacs terms. So
5175 I added some logic for emacs terms to be ok, but I can't identify old
5182 I added some logic for emacs terms to be ok, but I can't identify old
5176 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5183 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5177
5184
5178 2002-03-10 Fernando Perez <fperez@colorado.edu>
5185 2002-03-10 Fernando Perez <fperez@colorado.edu>
5179
5186
5180 * IPython/usage.py (__doc__): Various documentation cleanups and
5187 * IPython/usage.py (__doc__): Various documentation cleanups and
5181 updates, both in usage docstrings and in the manual.
5188 updates, both in usage docstrings and in the manual.
5182
5189
5183 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5190 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5184 handling of caching. Set minimum acceptabe value for having a
5191 handling of caching. Set minimum acceptabe value for having a
5185 cache at 20 values.
5192 cache at 20 values.
5186
5193
5187 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5194 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5188 install_first_time function to a method, renamed it and added an
5195 install_first_time function to a method, renamed it and added an
5189 'upgrade' mode. Now people can update their config directory with
5196 'upgrade' mode. Now people can update their config directory with
5190 a simple command line switch (-upgrade, also new).
5197 a simple command line switch (-upgrade, also new).
5191
5198
5192 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5199 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5193 @file (convenient for automagic users under Python >= 2.2).
5200 @file (convenient for automagic users under Python >= 2.2).
5194 Removed @files (it seemed more like a plural than an abbrev. of
5201 Removed @files (it seemed more like a plural than an abbrev. of
5195 'file show').
5202 'file show').
5196
5203
5197 * IPython/iplib.py (install_first_time): Fixed crash if there were
5204 * IPython/iplib.py (install_first_time): Fixed crash if there were
5198 backup files ('~') in .ipython/ install directory.
5205 backup files ('~') in .ipython/ install directory.
5199
5206
5200 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5207 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5201 system. Things look fine, but these changes are fairly
5208 system. Things look fine, but these changes are fairly
5202 intrusive. Test them for a few days.
5209 intrusive. Test them for a few days.
5203
5210
5204 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5211 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5205 the prompts system. Now all in/out prompt strings are user
5212 the prompts system. Now all in/out prompt strings are user
5206 controllable. This is particularly useful for embedding, as one
5213 controllable. This is particularly useful for embedding, as one
5207 can tag embedded instances with particular prompts.
5214 can tag embedded instances with particular prompts.
5208
5215
5209 Also removed global use of sys.ps1/2, which now allows nested
5216 Also removed global use of sys.ps1/2, which now allows nested
5210 embeddings without any problems. Added command-line options for
5217 embeddings without any problems. Added command-line options for
5211 the prompt strings.
5218 the prompt strings.
5212
5219
5213 2002-03-08 Fernando Perez <fperez@colorado.edu>
5220 2002-03-08 Fernando Perez <fperez@colorado.edu>
5214
5221
5215 * IPython/UserConfig/example-embed-short.py (ipshell): added
5222 * IPython/UserConfig/example-embed-short.py (ipshell): added
5216 example file with the bare minimum code for embedding.
5223 example file with the bare minimum code for embedding.
5217
5224
5218 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5225 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5219 functionality for the embeddable shell to be activated/deactivated
5226 functionality for the embeddable shell to be activated/deactivated
5220 either globally or at each call.
5227 either globally or at each call.
5221
5228
5222 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5229 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5223 rewriting the prompt with '--->' for auto-inputs with proper
5230 rewriting the prompt with '--->' for auto-inputs with proper
5224 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5231 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5225 this is handled by the prompts class itself, as it should.
5232 this is handled by the prompts class itself, as it should.
5226
5233
5227 2002-03-05 Fernando Perez <fperez@colorado.edu>
5234 2002-03-05 Fernando Perez <fperez@colorado.edu>
5228
5235
5229 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5236 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5230 @logstart to avoid name clashes with the math log function.
5237 @logstart to avoid name clashes with the math log function.
5231
5238
5232 * Big updates to X/Emacs section of the manual.
5239 * Big updates to X/Emacs section of the manual.
5233
5240
5234 * Removed ipython_emacs. Milan explained to me how to pass
5241 * Removed ipython_emacs. Milan explained to me how to pass
5235 arguments to ipython through Emacs. Some day I'm going to end up
5242 arguments to ipython through Emacs. Some day I'm going to end up
5236 learning some lisp...
5243 learning some lisp...
5237
5244
5238 2002-03-04 Fernando Perez <fperez@colorado.edu>
5245 2002-03-04 Fernando Perez <fperez@colorado.edu>
5239
5246
5240 * IPython/ipython_emacs: Created script to be used as the
5247 * IPython/ipython_emacs: Created script to be used as the
5241 py-python-command Emacs variable so we can pass IPython
5248 py-python-command Emacs variable so we can pass IPython
5242 parameters. I can't figure out how to tell Emacs directly to pass
5249 parameters. I can't figure out how to tell Emacs directly to pass
5243 parameters to IPython, so a dummy shell script will do it.
5250 parameters to IPython, so a dummy shell script will do it.
5244
5251
5245 Other enhancements made for things to work better under Emacs'
5252 Other enhancements made for things to work better under Emacs'
5246 various types of terminals. Many thanks to Milan Zamazal
5253 various types of terminals. Many thanks to Milan Zamazal
5247 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5254 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5248
5255
5249 2002-03-01 Fernando Perez <fperez@colorado.edu>
5256 2002-03-01 Fernando Perez <fperez@colorado.edu>
5250
5257
5251 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5258 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5252 that loading of readline is now optional. This gives better
5259 that loading of readline is now optional. This gives better
5253 control to emacs users.
5260 control to emacs users.
5254
5261
5255 * IPython/ultraTB.py (__date__): Modified color escape sequences
5262 * IPython/ultraTB.py (__date__): Modified color escape sequences
5256 and now things work fine under xterm and in Emacs' term buffers
5263 and now things work fine under xterm and in Emacs' term buffers
5257 (though not shell ones). Well, in emacs you get colors, but all
5264 (though not shell ones). Well, in emacs you get colors, but all
5258 seem to be 'light' colors (no difference between dark and light
5265 seem to be 'light' colors (no difference between dark and light
5259 ones). But the garbage chars are gone, and also in xterms. It
5266 ones). But the garbage chars are gone, and also in xterms. It
5260 seems that now I'm using 'cleaner' ansi sequences.
5267 seems that now I'm using 'cleaner' ansi sequences.
5261
5268
5262 2002-02-21 Fernando Perez <fperez@colorado.edu>
5269 2002-02-21 Fernando Perez <fperez@colorado.edu>
5263
5270
5264 * Released 0.2.7 (mainly to publish the scoping fix).
5271 * Released 0.2.7 (mainly to publish the scoping fix).
5265
5272
5266 * IPython/Logger.py (Logger.logstate): added. A corresponding
5273 * IPython/Logger.py (Logger.logstate): added. A corresponding
5267 @logstate magic was created.
5274 @logstate magic was created.
5268
5275
5269 * IPython/Magic.py: fixed nested scoping problem under Python
5276 * IPython/Magic.py: fixed nested scoping problem under Python
5270 2.1.x (automagic wasn't working).
5277 2.1.x (automagic wasn't working).
5271
5278
5272 2002-02-20 Fernando Perez <fperez@colorado.edu>
5279 2002-02-20 Fernando Perez <fperez@colorado.edu>
5273
5280
5274 * Released 0.2.6.
5281 * Released 0.2.6.
5275
5282
5276 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5283 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5277 option so that logs can come out without any headers at all.
5284 option so that logs can come out without any headers at all.
5278
5285
5279 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5286 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5280 SciPy.
5287 SciPy.
5281
5288
5282 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5289 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5283 that embedded IPython calls don't require vars() to be explicitly
5290 that embedded IPython calls don't require vars() to be explicitly
5284 passed. Now they are extracted from the caller's frame (code
5291 passed. Now they are extracted from the caller's frame (code
5285 snatched from Eric Jones' weave). Added better documentation to
5292 snatched from Eric Jones' weave). Added better documentation to
5286 the section on embedding and the example file.
5293 the section on embedding and the example file.
5287
5294
5288 * IPython/genutils.py (page): Changed so that under emacs, it just
5295 * IPython/genutils.py (page): Changed so that under emacs, it just
5289 prints the string. You can then page up and down in the emacs
5296 prints the string. You can then page up and down in the emacs
5290 buffer itself. This is how the builtin help() works.
5297 buffer itself. This is how the builtin help() works.
5291
5298
5292 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5299 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5293 macro scoping: macros need to be executed in the user's namespace
5300 macro scoping: macros need to be executed in the user's namespace
5294 to work as if they had been typed by the user.
5301 to work as if they had been typed by the user.
5295
5302
5296 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5303 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5297 execute automatically (no need to type 'exec...'). They then
5304 execute automatically (no need to type 'exec...'). They then
5298 behave like 'true macros'. The printing system was also modified
5305 behave like 'true macros'. The printing system was also modified
5299 for this to work.
5306 for this to work.
5300
5307
5301 2002-02-19 Fernando Perez <fperez@colorado.edu>
5308 2002-02-19 Fernando Perez <fperez@colorado.edu>
5302
5309
5303 * IPython/genutils.py (page_file): new function for paging files
5310 * IPython/genutils.py (page_file): new function for paging files
5304 in an OS-independent way. Also necessary for file viewing to work
5311 in an OS-independent way. Also necessary for file viewing to work
5305 well inside Emacs buffers.
5312 well inside Emacs buffers.
5306 (page): Added checks for being in an emacs buffer.
5313 (page): Added checks for being in an emacs buffer.
5307 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5314 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5308 same bug in iplib.
5315 same bug in iplib.
5309
5316
5310 2002-02-18 Fernando Perez <fperez@colorado.edu>
5317 2002-02-18 Fernando Perez <fperez@colorado.edu>
5311
5318
5312 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5319 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5313 of readline so that IPython can work inside an Emacs buffer.
5320 of readline so that IPython can work inside an Emacs buffer.
5314
5321
5315 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5322 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5316 method signatures (they weren't really bugs, but it looks cleaner
5323 method signatures (they weren't really bugs, but it looks cleaner
5317 and keeps PyChecker happy).
5324 and keeps PyChecker happy).
5318
5325
5319 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5326 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5320 for implementing various user-defined hooks. Currently only
5327 for implementing various user-defined hooks. Currently only
5321 display is done.
5328 display is done.
5322
5329
5323 * IPython/Prompts.py (CachedOutput._display): changed display
5330 * IPython/Prompts.py (CachedOutput._display): changed display
5324 functions so that they can be dynamically changed by users easily.
5331 functions so that they can be dynamically changed by users easily.
5325
5332
5326 * IPython/Extensions/numeric_formats.py (num_display): added an
5333 * IPython/Extensions/numeric_formats.py (num_display): added an
5327 extension for printing NumPy arrays in flexible manners. It
5334 extension for printing NumPy arrays in flexible manners. It
5328 doesn't do anything yet, but all the structure is in
5335 doesn't do anything yet, but all the structure is in
5329 place. Ultimately the plan is to implement output format control
5336 place. Ultimately the plan is to implement output format control
5330 like in Octave.
5337 like in Octave.
5331
5338
5332 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5339 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5333 methods are found at run-time by all the automatic machinery.
5340 methods are found at run-time by all the automatic machinery.
5334
5341
5335 2002-02-17 Fernando Perez <fperez@colorado.edu>
5342 2002-02-17 Fernando Perez <fperez@colorado.edu>
5336
5343
5337 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5344 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5338 whole file a little.
5345 whole file a little.
5339
5346
5340 * ToDo: closed this document. Now there's a new_design.lyx
5347 * ToDo: closed this document. Now there's a new_design.lyx
5341 document for all new ideas. Added making a pdf of it for the
5348 document for all new ideas. Added making a pdf of it for the
5342 end-user distro.
5349 end-user distro.
5343
5350
5344 * IPython/Logger.py (Logger.switch_log): Created this to replace
5351 * IPython/Logger.py (Logger.switch_log): Created this to replace
5345 logon() and logoff(). It also fixes a nasty crash reported by
5352 logon() and logoff(). It also fixes a nasty crash reported by
5346 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5353 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5347
5354
5348 * IPython/iplib.py (complete): got auto-completion to work with
5355 * IPython/iplib.py (complete): got auto-completion to work with
5349 automagic (I had wanted this for a long time).
5356 automagic (I had wanted this for a long time).
5350
5357
5351 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5358 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5352 to @file, since file() is now a builtin and clashes with automagic
5359 to @file, since file() is now a builtin and clashes with automagic
5353 for @file.
5360 for @file.
5354
5361
5355 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5362 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5356 of this was previously in iplib, which had grown to more than 2000
5363 of this was previously in iplib, which had grown to more than 2000
5357 lines, way too long. No new functionality, but it makes managing
5364 lines, way too long. No new functionality, but it makes managing
5358 the code a bit easier.
5365 the code a bit easier.
5359
5366
5360 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5367 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5361 information to crash reports.
5368 information to crash reports.
5362
5369
5363 2002-02-12 Fernando Perez <fperez@colorado.edu>
5370 2002-02-12 Fernando Perez <fperez@colorado.edu>
5364
5371
5365 * Released 0.2.5.
5372 * Released 0.2.5.
5366
5373
5367 2002-02-11 Fernando Perez <fperez@colorado.edu>
5374 2002-02-11 Fernando Perez <fperez@colorado.edu>
5368
5375
5369 * Wrote a relatively complete Windows installer. It puts
5376 * Wrote a relatively complete Windows installer. It puts
5370 everything in place, creates Start Menu entries and fixes the
5377 everything in place, creates Start Menu entries and fixes the
5371 color issues. Nothing fancy, but it works.
5378 color issues. Nothing fancy, but it works.
5372
5379
5373 2002-02-10 Fernando Perez <fperez@colorado.edu>
5380 2002-02-10 Fernando Perez <fperez@colorado.edu>
5374
5381
5375 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5382 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5376 os.path.expanduser() call so that we can type @run ~/myfile.py and
5383 os.path.expanduser() call so that we can type @run ~/myfile.py and
5377 have thigs work as expected.
5384 have thigs work as expected.
5378
5385
5379 * IPython/genutils.py (page): fixed exception handling so things
5386 * IPython/genutils.py (page): fixed exception handling so things
5380 work both in Unix and Windows correctly. Quitting a pager triggers
5387 work both in Unix and Windows correctly. Quitting a pager triggers
5381 an IOError/broken pipe in Unix, and in windows not finding a pager
5388 an IOError/broken pipe in Unix, and in windows not finding a pager
5382 is also an IOError, so I had to actually look at the return value
5389 is also an IOError, so I had to actually look at the return value
5383 of the exception, not just the exception itself. Should be ok now.
5390 of the exception, not just the exception itself. Should be ok now.
5384
5391
5385 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5392 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5386 modified to allow case-insensitive color scheme changes.
5393 modified to allow case-insensitive color scheme changes.
5387
5394
5388 2002-02-09 Fernando Perez <fperez@colorado.edu>
5395 2002-02-09 Fernando Perez <fperez@colorado.edu>
5389
5396
5390 * IPython/genutils.py (native_line_ends): new function to leave
5397 * IPython/genutils.py (native_line_ends): new function to leave
5391 user config files with os-native line-endings.
5398 user config files with os-native line-endings.
5392
5399
5393 * README and manual updates.
5400 * README and manual updates.
5394
5401
5395 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5402 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5396 instead of StringType to catch Unicode strings.
5403 instead of StringType to catch Unicode strings.
5397
5404
5398 * IPython/genutils.py (filefind): fixed bug for paths with
5405 * IPython/genutils.py (filefind): fixed bug for paths with
5399 embedded spaces (very common in Windows).
5406 embedded spaces (very common in Windows).
5400
5407
5401 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5408 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5402 files under Windows, so that they get automatically associated
5409 files under Windows, so that they get automatically associated
5403 with a text editor. Windows makes it a pain to handle
5410 with a text editor. Windows makes it a pain to handle
5404 extension-less files.
5411 extension-less files.
5405
5412
5406 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5413 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5407 warning about readline only occur for Posix. In Windows there's no
5414 warning about readline only occur for Posix. In Windows there's no
5408 way to get readline, so why bother with the warning.
5415 way to get readline, so why bother with the warning.
5409
5416
5410 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5417 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5411 for __str__ instead of dir(self), since dir() changed in 2.2.
5418 for __str__ instead of dir(self), since dir() changed in 2.2.
5412
5419
5413 * Ported to Windows! Tested on XP, I suspect it should work fine
5420 * Ported to Windows! Tested on XP, I suspect it should work fine
5414 on NT/2000, but I don't think it will work on 98 et al. That
5421 on NT/2000, but I don't think it will work on 98 et al. That
5415 series of Windows is such a piece of junk anyway that I won't try
5422 series of Windows is such a piece of junk anyway that I won't try
5416 porting it there. The XP port was straightforward, showed a few
5423 porting it there. The XP port was straightforward, showed a few
5417 bugs here and there (fixed all), in particular some string
5424 bugs here and there (fixed all), in particular some string
5418 handling stuff which required considering Unicode strings (which
5425 handling stuff which required considering Unicode strings (which
5419 Windows uses). This is good, but hasn't been too tested :) No
5426 Windows uses). This is good, but hasn't been too tested :) No
5420 fancy installer yet, I'll put a note in the manual so people at
5427 fancy installer yet, I'll put a note in the manual so people at
5421 least make manually a shortcut.
5428 least make manually a shortcut.
5422
5429
5423 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5430 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5424 into a single one, "colors". This now controls both prompt and
5431 into a single one, "colors". This now controls both prompt and
5425 exception color schemes, and can be changed both at startup
5432 exception color schemes, and can be changed both at startup
5426 (either via command-line switches or via ipythonrc files) and at
5433 (either via command-line switches or via ipythonrc files) and at
5427 runtime, with @colors.
5434 runtime, with @colors.
5428 (Magic.magic_run): renamed @prun to @run and removed the old
5435 (Magic.magic_run): renamed @prun to @run and removed the old
5429 @run. The two were too similar to warrant keeping both.
5436 @run. The two were too similar to warrant keeping both.
5430
5437
5431 2002-02-03 Fernando Perez <fperez@colorado.edu>
5438 2002-02-03 Fernando Perez <fperez@colorado.edu>
5432
5439
5433 * IPython/iplib.py (install_first_time): Added comment on how to
5440 * IPython/iplib.py (install_first_time): Added comment on how to
5434 configure the color options for first-time users. Put a <return>
5441 configure the color options for first-time users. Put a <return>
5435 request at the end so that small-terminal users get a chance to
5442 request at the end so that small-terminal users get a chance to
5436 read the startup info.
5443 read the startup info.
5437
5444
5438 2002-01-23 Fernando Perez <fperez@colorado.edu>
5445 2002-01-23 Fernando Perez <fperez@colorado.edu>
5439
5446
5440 * IPython/iplib.py (CachedOutput.update): Changed output memory
5447 * IPython/iplib.py (CachedOutput.update): Changed output memory
5441 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5448 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5442 input history we still use _i. Did this b/c these variable are
5449 input history we still use _i. Did this b/c these variable are
5443 very commonly used in interactive work, so the less we need to
5450 very commonly used in interactive work, so the less we need to
5444 type the better off we are.
5451 type the better off we are.
5445 (Magic.magic_prun): updated @prun to better handle the namespaces
5452 (Magic.magic_prun): updated @prun to better handle the namespaces
5446 the file will run in, including a fix for __name__ not being set
5453 the file will run in, including a fix for __name__ not being set
5447 before.
5454 before.
5448
5455
5449 2002-01-20 Fernando Perez <fperez@colorado.edu>
5456 2002-01-20 Fernando Perez <fperez@colorado.edu>
5450
5457
5451 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5458 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5452 extra garbage for Python 2.2. Need to look more carefully into
5459 extra garbage for Python 2.2. Need to look more carefully into
5453 this later.
5460 this later.
5454
5461
5455 2002-01-19 Fernando Perez <fperez@colorado.edu>
5462 2002-01-19 Fernando Perez <fperez@colorado.edu>
5456
5463
5457 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5464 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5458 display SyntaxError exceptions properly formatted when they occur
5465 display SyntaxError exceptions properly formatted when they occur
5459 (they can be triggered by imported code).
5466 (they can be triggered by imported code).
5460
5467
5461 2002-01-18 Fernando Perez <fperez@colorado.edu>
5468 2002-01-18 Fernando Perez <fperez@colorado.edu>
5462
5469
5463 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5470 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5464 SyntaxError exceptions are reported nicely formatted, instead of
5471 SyntaxError exceptions are reported nicely formatted, instead of
5465 spitting out only offset information as before.
5472 spitting out only offset information as before.
5466 (Magic.magic_prun): Added the @prun function for executing
5473 (Magic.magic_prun): Added the @prun function for executing
5467 programs with command line args inside IPython.
5474 programs with command line args inside IPython.
5468
5475
5469 2002-01-16 Fernando Perez <fperez@colorado.edu>
5476 2002-01-16 Fernando Perez <fperez@colorado.edu>
5470
5477
5471 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5478 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5472 to *not* include the last item given in a range. This brings their
5479 to *not* include the last item given in a range. This brings their
5473 behavior in line with Python's slicing:
5480 behavior in line with Python's slicing:
5474 a[n1:n2] -> a[n1]...a[n2-1]
5481 a[n1:n2] -> a[n1]...a[n2-1]
5475 It may be a bit less convenient, but I prefer to stick to Python's
5482 It may be a bit less convenient, but I prefer to stick to Python's
5476 conventions *everywhere*, so users never have to wonder.
5483 conventions *everywhere*, so users never have to wonder.
5477 (Magic.magic_macro): Added @macro function to ease the creation of
5484 (Magic.magic_macro): Added @macro function to ease the creation of
5478 macros.
5485 macros.
5479
5486
5480 2002-01-05 Fernando Perez <fperez@colorado.edu>
5487 2002-01-05 Fernando Perez <fperez@colorado.edu>
5481
5488
5482 * Released 0.2.4.
5489 * Released 0.2.4.
5483
5490
5484 * IPython/iplib.py (Magic.magic_pdef):
5491 * IPython/iplib.py (Magic.magic_pdef):
5485 (InteractiveShell.safe_execfile): report magic lines and error
5492 (InteractiveShell.safe_execfile): report magic lines and error
5486 lines without line numbers so one can easily copy/paste them for
5493 lines without line numbers so one can easily copy/paste them for
5487 re-execution.
5494 re-execution.
5488
5495
5489 * Updated manual with recent changes.
5496 * Updated manual with recent changes.
5490
5497
5491 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5498 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5492 docstring printing when class? is called. Very handy for knowing
5499 docstring printing when class? is called. Very handy for knowing
5493 how to create class instances (as long as __init__ is well
5500 how to create class instances (as long as __init__ is well
5494 documented, of course :)
5501 documented, of course :)
5495 (Magic.magic_doc): print both class and constructor docstrings.
5502 (Magic.magic_doc): print both class and constructor docstrings.
5496 (Magic.magic_pdef): give constructor info if passed a class and
5503 (Magic.magic_pdef): give constructor info if passed a class and
5497 __call__ info for callable object instances.
5504 __call__ info for callable object instances.
5498
5505
5499 2002-01-04 Fernando Perez <fperez@colorado.edu>
5506 2002-01-04 Fernando Perez <fperez@colorado.edu>
5500
5507
5501 * Made deep_reload() off by default. It doesn't always work
5508 * Made deep_reload() off by default. It doesn't always work
5502 exactly as intended, so it's probably safer to have it off. It's
5509 exactly as intended, so it's probably safer to have it off. It's
5503 still available as dreload() anyway, so nothing is lost.
5510 still available as dreload() anyway, so nothing is lost.
5504
5511
5505 2002-01-02 Fernando Perez <fperez@colorado.edu>
5512 2002-01-02 Fernando Perez <fperez@colorado.edu>
5506
5513
5507 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5514 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5508 so I wanted an updated release).
5515 so I wanted an updated release).
5509
5516
5510 2001-12-27 Fernando Perez <fperez@colorado.edu>
5517 2001-12-27 Fernando Perez <fperez@colorado.edu>
5511
5518
5512 * IPython/iplib.py (InteractiveShell.interact): Added the original
5519 * IPython/iplib.py (InteractiveShell.interact): Added the original
5513 code from 'code.py' for this module in order to change the
5520 code from 'code.py' for this module in order to change the
5514 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5521 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5515 the history cache would break when the user hit Ctrl-C, and
5522 the history cache would break when the user hit Ctrl-C, and
5516 interact() offers no way to add any hooks to it.
5523 interact() offers no way to add any hooks to it.
5517
5524
5518 2001-12-23 Fernando Perez <fperez@colorado.edu>
5525 2001-12-23 Fernando Perez <fperez@colorado.edu>
5519
5526
5520 * setup.py: added check for 'MANIFEST' before trying to remove
5527 * setup.py: added check for 'MANIFEST' before trying to remove
5521 it. Thanks to Sean Reifschneider.
5528 it. Thanks to Sean Reifschneider.
5522
5529
5523 2001-12-22 Fernando Perez <fperez@colorado.edu>
5530 2001-12-22 Fernando Perez <fperez@colorado.edu>
5524
5531
5525 * Released 0.2.2.
5532 * Released 0.2.2.
5526
5533
5527 * Finished (reasonably) writing the manual. Later will add the
5534 * Finished (reasonably) writing the manual. Later will add the
5528 python-standard navigation stylesheets, but for the time being
5535 python-standard navigation stylesheets, but for the time being
5529 it's fairly complete. Distribution will include html and pdf
5536 it's fairly complete. Distribution will include html and pdf
5530 versions.
5537 versions.
5531
5538
5532 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5539 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5533 (MayaVi author).
5540 (MayaVi author).
5534
5541
5535 2001-12-21 Fernando Perez <fperez@colorado.edu>
5542 2001-12-21 Fernando Perez <fperez@colorado.edu>
5536
5543
5537 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5544 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5538 good public release, I think (with the manual and the distutils
5545 good public release, I think (with the manual and the distutils
5539 installer). The manual can use some work, but that can go
5546 installer). The manual can use some work, but that can go
5540 slowly. Otherwise I think it's quite nice for end users. Next
5547 slowly. Otherwise I think it's quite nice for end users. Next
5541 summer, rewrite the guts of it...
5548 summer, rewrite the guts of it...
5542
5549
5543 * Changed format of ipythonrc files to use whitespace as the
5550 * Changed format of ipythonrc files to use whitespace as the
5544 separator instead of an explicit '='. Cleaner.
5551 separator instead of an explicit '='. Cleaner.
5545
5552
5546 2001-12-20 Fernando Perez <fperez@colorado.edu>
5553 2001-12-20 Fernando Perez <fperez@colorado.edu>
5547
5554
5548 * Started a manual in LyX. For now it's just a quick merge of the
5555 * Started a manual in LyX. For now it's just a quick merge of the
5549 various internal docstrings and READMEs. Later it may grow into a
5556 various internal docstrings and READMEs. Later it may grow into a
5550 nice, full-blown manual.
5557 nice, full-blown manual.
5551
5558
5552 * Set up a distutils based installer. Installation should now be
5559 * Set up a distutils based installer. Installation should now be
5553 trivially simple for end-users.
5560 trivially simple for end-users.
5554
5561
5555 2001-12-11 Fernando Perez <fperez@colorado.edu>
5562 2001-12-11 Fernando Perez <fperez@colorado.edu>
5556
5563
5557 * Released 0.2.0. First public release, announced it at
5564 * Released 0.2.0. First public release, announced it at
5558 comp.lang.python. From now on, just bugfixes...
5565 comp.lang.python. From now on, just bugfixes...
5559
5566
5560 * Went through all the files, set copyright/license notices and
5567 * Went through all the files, set copyright/license notices and
5561 cleaned up things. Ready for release.
5568 cleaned up things. Ready for release.
5562
5569
5563 2001-12-10 Fernando Perez <fperez@colorado.edu>
5570 2001-12-10 Fernando Perez <fperez@colorado.edu>
5564
5571
5565 * Changed the first-time installer not to use tarfiles. It's more
5572 * Changed the first-time installer not to use tarfiles. It's more
5566 robust now and less unix-dependent. Also makes it easier for
5573 robust now and less unix-dependent. Also makes it easier for
5567 people to later upgrade versions.
5574 people to later upgrade versions.
5568
5575
5569 * Changed @exit to @abort to reflect the fact that it's pretty
5576 * Changed @exit to @abort to reflect the fact that it's pretty
5570 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5577 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5571 becomes significant only when IPyhton is embedded: in that case,
5578 becomes significant only when IPyhton is embedded: in that case,
5572 C-D closes IPython only, but @abort kills the enclosing program
5579 C-D closes IPython only, but @abort kills the enclosing program
5573 too (unless it had called IPython inside a try catching
5580 too (unless it had called IPython inside a try catching
5574 SystemExit).
5581 SystemExit).
5575
5582
5576 * Created Shell module which exposes the actuall IPython Shell
5583 * Created Shell module which exposes the actuall IPython Shell
5577 classes, currently the normal and the embeddable one. This at
5584 classes, currently the normal and the embeddable one. This at
5578 least offers a stable interface we won't need to change when
5585 least offers a stable interface we won't need to change when
5579 (later) the internals are rewritten. That rewrite will be confined
5586 (later) the internals are rewritten. That rewrite will be confined
5580 to iplib and ipmaker, but the Shell interface should remain as is.
5587 to iplib and ipmaker, but the Shell interface should remain as is.
5581
5588
5582 * Added embed module which offers an embeddable IPShell object,
5589 * Added embed module which offers an embeddable IPShell object,
5583 useful to fire up IPython *inside* a running program. Great for
5590 useful to fire up IPython *inside* a running program. Great for
5584 debugging or dynamical data analysis.
5591 debugging or dynamical data analysis.
5585
5592
5586 2001-12-08 Fernando Perez <fperez@colorado.edu>
5593 2001-12-08 Fernando Perez <fperez@colorado.edu>
5587
5594
5588 * Fixed small bug preventing seeing info from methods of defined
5595 * Fixed small bug preventing seeing info from methods of defined
5589 objects (incorrect namespace in _ofind()).
5596 objects (incorrect namespace in _ofind()).
5590
5597
5591 * Documentation cleanup. Moved the main usage docstrings to a
5598 * Documentation cleanup. Moved the main usage docstrings to a
5592 separate file, usage.py (cleaner to maintain, and hopefully in the
5599 separate file, usage.py (cleaner to maintain, and hopefully in the
5593 future some perlpod-like way of producing interactive, man and
5600 future some perlpod-like way of producing interactive, man and
5594 html docs out of it will be found).
5601 html docs out of it will be found).
5595
5602
5596 * Added @profile to see your profile at any time.
5603 * Added @profile to see your profile at any time.
5597
5604
5598 * Added @p as an alias for 'print'. It's especially convenient if
5605 * Added @p as an alias for 'print'. It's especially convenient if
5599 using automagic ('p x' prints x).
5606 using automagic ('p x' prints x).
5600
5607
5601 * Small cleanups and fixes after a pychecker run.
5608 * Small cleanups and fixes after a pychecker run.
5602
5609
5603 * Changed the @cd command to handle @cd - and @cd -<n> for
5610 * Changed the @cd command to handle @cd - and @cd -<n> for
5604 visiting any directory in _dh.
5611 visiting any directory in _dh.
5605
5612
5606 * Introduced _dh, a history of visited directories. @dhist prints
5613 * Introduced _dh, a history of visited directories. @dhist prints
5607 it out with numbers.
5614 it out with numbers.
5608
5615
5609 2001-12-07 Fernando Perez <fperez@colorado.edu>
5616 2001-12-07 Fernando Perez <fperez@colorado.edu>
5610
5617
5611 * Released 0.1.22
5618 * Released 0.1.22
5612
5619
5613 * Made initialization a bit more robust against invalid color
5620 * Made initialization a bit more robust against invalid color
5614 options in user input (exit, not traceback-crash).
5621 options in user input (exit, not traceback-crash).
5615
5622
5616 * Changed the bug crash reporter to write the report only in the
5623 * Changed the bug crash reporter to write the report only in the
5617 user's .ipython directory. That way IPython won't litter people's
5624 user's .ipython directory. That way IPython won't litter people's
5618 hard disks with crash files all over the place. Also print on
5625 hard disks with crash files all over the place. Also print on
5619 screen the necessary mail command.
5626 screen the necessary mail command.
5620
5627
5621 * With the new ultraTB, implemented LightBG color scheme for light
5628 * With the new ultraTB, implemented LightBG color scheme for light
5622 background terminals. A lot of people like white backgrounds, so I
5629 background terminals. A lot of people like white backgrounds, so I
5623 guess we should at least give them something readable.
5630 guess we should at least give them something readable.
5624
5631
5625 2001-12-06 Fernando Perez <fperez@colorado.edu>
5632 2001-12-06 Fernando Perez <fperez@colorado.edu>
5626
5633
5627 * Modified the structure of ultraTB. Now there's a proper class
5634 * Modified the structure of ultraTB. Now there's a proper class
5628 for tables of color schemes which allow adding schemes easily and
5635 for tables of color schemes which allow adding schemes easily and
5629 switching the active scheme without creating a new instance every
5636 switching the active scheme without creating a new instance every
5630 time (which was ridiculous). The syntax for creating new schemes
5637 time (which was ridiculous). The syntax for creating new schemes
5631 is also cleaner. I think ultraTB is finally done, with a clean
5638 is also cleaner. I think ultraTB is finally done, with a clean
5632 class structure. Names are also much cleaner (now there's proper
5639 class structure. Names are also much cleaner (now there's proper
5633 color tables, no need for every variable to also have 'color' in
5640 color tables, no need for every variable to also have 'color' in
5634 its name).
5641 its name).
5635
5642
5636 * Broke down genutils into separate files. Now genutils only
5643 * Broke down genutils into separate files. Now genutils only
5637 contains utility functions, and classes have been moved to their
5644 contains utility functions, and classes have been moved to their
5638 own files (they had enough independent functionality to warrant
5645 own files (they had enough independent functionality to warrant
5639 it): ConfigLoader, OutputTrap, Struct.
5646 it): ConfigLoader, OutputTrap, Struct.
5640
5647
5641 2001-12-05 Fernando Perez <fperez@colorado.edu>
5648 2001-12-05 Fernando Perez <fperez@colorado.edu>
5642
5649
5643 * IPython turns 21! Released version 0.1.21, as a candidate for
5650 * IPython turns 21! Released version 0.1.21, as a candidate for
5644 public consumption. If all goes well, release in a few days.
5651 public consumption. If all goes well, release in a few days.
5645
5652
5646 * Fixed path bug (files in Extensions/ directory wouldn't be found
5653 * Fixed path bug (files in Extensions/ directory wouldn't be found
5647 unless IPython/ was explicitly in sys.path).
5654 unless IPython/ was explicitly in sys.path).
5648
5655
5649 * Extended the FlexCompleter class as MagicCompleter to allow
5656 * Extended the FlexCompleter class as MagicCompleter to allow
5650 completion of @-starting lines.
5657 completion of @-starting lines.
5651
5658
5652 * Created __release__.py file as a central repository for release
5659 * Created __release__.py file as a central repository for release
5653 info that other files can read from.
5660 info that other files can read from.
5654
5661
5655 * Fixed small bug in logging: when logging was turned on in
5662 * Fixed small bug in logging: when logging was turned on in
5656 mid-session, old lines with special meanings (!@?) were being
5663 mid-session, old lines with special meanings (!@?) were being
5657 logged without the prepended comment, which is necessary since
5664 logged without the prepended comment, which is necessary since
5658 they are not truly valid python syntax. This should make session
5665 they are not truly valid python syntax. This should make session
5659 restores produce less errors.
5666 restores produce less errors.
5660
5667
5661 * The namespace cleanup forced me to make a FlexCompleter class
5668 * The namespace cleanup forced me to make a FlexCompleter class
5662 which is nothing but a ripoff of rlcompleter, but with selectable
5669 which is nothing but a ripoff of rlcompleter, but with selectable
5663 namespace (rlcompleter only works in __main__.__dict__). I'll try
5670 namespace (rlcompleter only works in __main__.__dict__). I'll try
5664 to submit a note to the authors to see if this change can be
5671 to submit a note to the authors to see if this change can be
5665 incorporated in future rlcompleter releases (Dec.6: done)
5672 incorporated in future rlcompleter releases (Dec.6: done)
5666
5673
5667 * More fixes to namespace handling. It was a mess! Now all
5674 * More fixes to namespace handling. It was a mess! Now all
5668 explicit references to __main__.__dict__ are gone (except when
5675 explicit references to __main__.__dict__ are gone (except when
5669 really needed) and everything is handled through the namespace
5676 really needed) and everything is handled through the namespace
5670 dicts in the IPython instance. We seem to be getting somewhere
5677 dicts in the IPython instance. We seem to be getting somewhere
5671 with this, finally...
5678 with this, finally...
5672
5679
5673 * Small documentation updates.
5680 * Small documentation updates.
5674
5681
5675 * Created the Extensions directory under IPython (with an
5682 * Created the Extensions directory under IPython (with an
5676 __init__.py). Put the PhysicalQ stuff there. This directory should
5683 __init__.py). Put the PhysicalQ stuff there. This directory should
5677 be used for all special-purpose extensions.
5684 be used for all special-purpose extensions.
5678
5685
5679 * File renaming:
5686 * File renaming:
5680 ipythonlib --> ipmaker
5687 ipythonlib --> ipmaker
5681 ipplib --> iplib
5688 ipplib --> iplib
5682 This makes a bit more sense in terms of what these files actually do.
5689 This makes a bit more sense in terms of what these files actually do.
5683
5690
5684 * Moved all the classes and functions in ipythonlib to ipplib, so
5691 * Moved all the classes and functions in ipythonlib to ipplib, so
5685 now ipythonlib only has make_IPython(). This will ease up its
5692 now ipythonlib only has make_IPython(). This will ease up its
5686 splitting in smaller functional chunks later.
5693 splitting in smaller functional chunks later.
5687
5694
5688 * Cleaned up (done, I think) output of @whos. Better column
5695 * Cleaned up (done, I think) output of @whos. Better column
5689 formatting, and now shows str(var) for as much as it can, which is
5696 formatting, and now shows str(var) for as much as it can, which is
5690 typically what one gets with a 'print var'.
5697 typically what one gets with a 'print var'.
5691
5698
5692 2001-12-04 Fernando Perez <fperez@colorado.edu>
5699 2001-12-04 Fernando Perez <fperez@colorado.edu>
5693
5700
5694 * Fixed namespace problems. Now builtin/IPyhton/user names get
5701 * Fixed namespace problems. Now builtin/IPyhton/user names get
5695 properly reported in their namespace. Internal namespace handling
5702 properly reported in their namespace. Internal namespace handling
5696 is finally getting decent (not perfect yet, but much better than
5703 is finally getting decent (not perfect yet, but much better than
5697 the ad-hoc mess we had).
5704 the ad-hoc mess we had).
5698
5705
5699 * Removed -exit option. If people just want to run a python
5706 * Removed -exit option. If people just want to run a python
5700 script, that's what the normal interpreter is for. Less
5707 script, that's what the normal interpreter is for. Less
5701 unnecessary options, less chances for bugs.
5708 unnecessary options, less chances for bugs.
5702
5709
5703 * Added a crash handler which generates a complete post-mortem if
5710 * Added a crash handler which generates a complete post-mortem if
5704 IPython crashes. This will help a lot in tracking bugs down the
5711 IPython crashes. This will help a lot in tracking bugs down the
5705 road.
5712 road.
5706
5713
5707 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5714 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5708 which were boud to functions being reassigned would bypass the
5715 which were boud to functions being reassigned would bypass the
5709 logger, breaking the sync of _il with the prompt counter. This
5716 logger, breaking the sync of _il with the prompt counter. This
5710 would then crash IPython later when a new line was logged.
5717 would then crash IPython later when a new line was logged.
5711
5718
5712 2001-12-02 Fernando Perez <fperez@colorado.edu>
5719 2001-12-02 Fernando Perez <fperez@colorado.edu>
5713
5720
5714 * Made IPython a package. This means people don't have to clutter
5721 * Made IPython a package. This means people don't have to clutter
5715 their sys.path with yet another directory. Changed the INSTALL
5722 their sys.path with yet another directory. Changed the INSTALL
5716 file accordingly.
5723 file accordingly.
5717
5724
5718 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5725 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5719 sorts its output (so @who shows it sorted) and @whos formats the
5726 sorts its output (so @who shows it sorted) and @whos formats the
5720 table according to the width of the first column. Nicer, easier to
5727 table according to the width of the first column. Nicer, easier to
5721 read. Todo: write a generic table_format() which takes a list of
5728 read. Todo: write a generic table_format() which takes a list of
5722 lists and prints it nicely formatted, with optional row/column
5729 lists and prints it nicely formatted, with optional row/column
5723 separators and proper padding and justification.
5730 separators and proper padding and justification.
5724
5731
5725 * Released 0.1.20
5732 * Released 0.1.20
5726
5733
5727 * Fixed bug in @log which would reverse the inputcache list (a
5734 * Fixed bug in @log which would reverse the inputcache list (a
5728 copy operation was missing).
5735 copy operation was missing).
5729
5736
5730 * Code cleanup. @config was changed to use page(). Better, since
5737 * Code cleanup. @config was changed to use page(). Better, since
5731 its output is always quite long.
5738 its output is always quite long.
5732
5739
5733 * Itpl is back as a dependency. I was having too many problems
5740 * Itpl is back as a dependency. I was having too many problems
5734 getting the parametric aliases to work reliably, and it's just
5741 getting the parametric aliases to work reliably, and it's just
5735 easier to code weird string operations with it than playing %()s
5742 easier to code weird string operations with it than playing %()s
5736 games. It's only ~6k, so I don't think it's too big a deal.
5743 games. It's only ~6k, so I don't think it's too big a deal.
5737
5744
5738 * Found (and fixed) a very nasty bug with history. !lines weren't
5745 * Found (and fixed) a very nasty bug with history. !lines weren't
5739 getting cached, and the out of sync caches would crash
5746 getting cached, and the out of sync caches would crash
5740 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5747 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5741 division of labor a bit better. Bug fixed, cleaner structure.
5748 division of labor a bit better. Bug fixed, cleaner structure.
5742
5749
5743 2001-12-01 Fernando Perez <fperez@colorado.edu>
5750 2001-12-01 Fernando Perez <fperez@colorado.edu>
5744
5751
5745 * Released 0.1.19
5752 * Released 0.1.19
5746
5753
5747 * Added option -n to @hist to prevent line number printing. Much
5754 * Added option -n to @hist to prevent line number printing. Much
5748 easier to copy/paste code this way.
5755 easier to copy/paste code this way.
5749
5756
5750 * Created global _il to hold the input list. Allows easy
5757 * Created global _il to hold the input list. Allows easy
5751 re-execution of blocks of code by slicing it (inspired by Janko's
5758 re-execution of blocks of code by slicing it (inspired by Janko's
5752 comment on 'macros').
5759 comment on 'macros').
5753
5760
5754 * Small fixes and doc updates.
5761 * Small fixes and doc updates.
5755
5762
5756 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5763 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5757 much too fragile with automagic. Handles properly multi-line
5764 much too fragile with automagic. Handles properly multi-line
5758 statements and takes parameters.
5765 statements and takes parameters.
5759
5766
5760 2001-11-30 Fernando Perez <fperez@colorado.edu>
5767 2001-11-30 Fernando Perez <fperez@colorado.edu>
5761
5768
5762 * Version 0.1.18 released.
5769 * Version 0.1.18 released.
5763
5770
5764 * Fixed nasty namespace bug in initial module imports.
5771 * Fixed nasty namespace bug in initial module imports.
5765
5772
5766 * Added copyright/license notes to all code files (except
5773 * Added copyright/license notes to all code files (except
5767 DPyGetOpt). For the time being, LGPL. That could change.
5774 DPyGetOpt). For the time being, LGPL. That could change.
5768
5775
5769 * Rewrote a much nicer README, updated INSTALL, cleaned up
5776 * Rewrote a much nicer README, updated INSTALL, cleaned up
5770 ipythonrc-* samples.
5777 ipythonrc-* samples.
5771
5778
5772 * Overall code/documentation cleanup. Basically ready for
5779 * Overall code/documentation cleanup. Basically ready for
5773 release. Only remaining thing: licence decision (LGPL?).
5780 release. Only remaining thing: licence decision (LGPL?).
5774
5781
5775 * Converted load_config to a class, ConfigLoader. Now recursion
5782 * Converted load_config to a class, ConfigLoader. Now recursion
5776 control is better organized. Doesn't include the same file twice.
5783 control is better organized. Doesn't include the same file twice.
5777
5784
5778 2001-11-29 Fernando Perez <fperez@colorado.edu>
5785 2001-11-29 Fernando Perez <fperez@colorado.edu>
5779
5786
5780 * Got input history working. Changed output history variables from
5787 * Got input history working. Changed output history variables from
5781 _p to _o so that _i is for input and _o for output. Just cleaner
5788 _p to _o so that _i is for input and _o for output. Just cleaner
5782 convention.
5789 convention.
5783
5790
5784 * Implemented parametric aliases. This pretty much allows the
5791 * Implemented parametric aliases. This pretty much allows the
5785 alias system to offer full-blown shell convenience, I think.
5792 alias system to offer full-blown shell convenience, I think.
5786
5793
5787 * Version 0.1.17 released, 0.1.18 opened.
5794 * Version 0.1.17 released, 0.1.18 opened.
5788
5795
5789 * dot_ipython/ipythonrc (alias): added documentation.
5796 * dot_ipython/ipythonrc (alias): added documentation.
5790 (xcolor): Fixed small bug (xcolors -> xcolor)
5797 (xcolor): Fixed small bug (xcolors -> xcolor)
5791
5798
5792 * Changed the alias system. Now alias is a magic command to define
5799 * Changed the alias system. Now alias is a magic command to define
5793 aliases just like the shell. Rationale: the builtin magics should
5800 aliases just like the shell. Rationale: the builtin magics should
5794 be there for things deeply connected to IPython's
5801 be there for things deeply connected to IPython's
5795 architecture. And this is a much lighter system for what I think
5802 architecture. And this is a much lighter system for what I think
5796 is the really important feature: allowing users to define quickly
5803 is the really important feature: allowing users to define quickly
5797 magics that will do shell things for them, so they can customize
5804 magics that will do shell things for them, so they can customize
5798 IPython easily to match their work habits. If someone is really
5805 IPython easily to match their work habits. If someone is really
5799 desperate to have another name for a builtin alias, they can
5806 desperate to have another name for a builtin alias, they can
5800 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5807 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5801 works.
5808 works.
5802
5809
5803 2001-11-28 Fernando Perez <fperez@colorado.edu>
5810 2001-11-28 Fernando Perez <fperez@colorado.edu>
5804
5811
5805 * Changed @file so that it opens the source file at the proper
5812 * Changed @file so that it opens the source file at the proper
5806 line. Since it uses less, if your EDITOR environment is
5813 line. Since it uses less, if your EDITOR environment is
5807 configured, typing v will immediately open your editor of choice
5814 configured, typing v will immediately open your editor of choice
5808 right at the line where the object is defined. Not as quick as
5815 right at the line where the object is defined. Not as quick as
5809 having a direct @edit command, but for all intents and purposes it
5816 having a direct @edit command, but for all intents and purposes it
5810 works. And I don't have to worry about writing @edit to deal with
5817 works. And I don't have to worry about writing @edit to deal with
5811 all the editors, less does that.
5818 all the editors, less does that.
5812
5819
5813 * Version 0.1.16 released, 0.1.17 opened.
5820 * Version 0.1.16 released, 0.1.17 opened.
5814
5821
5815 * Fixed some nasty bugs in the page/page_dumb combo that could
5822 * Fixed some nasty bugs in the page/page_dumb combo that could
5816 crash IPython.
5823 crash IPython.
5817
5824
5818 2001-11-27 Fernando Perez <fperez@colorado.edu>
5825 2001-11-27 Fernando Perez <fperez@colorado.edu>
5819
5826
5820 * Version 0.1.15 released, 0.1.16 opened.
5827 * Version 0.1.15 released, 0.1.16 opened.
5821
5828
5822 * Finally got ? and ?? to work for undefined things: now it's
5829 * Finally got ? and ?? to work for undefined things: now it's
5823 possible to type {}.get? and get information about the get method
5830 possible to type {}.get? and get information about the get method
5824 of dicts, or os.path? even if only os is defined (so technically
5831 of dicts, or os.path? even if only os is defined (so technically
5825 os.path isn't). Works at any level. For example, after import os,
5832 os.path isn't). Works at any level. For example, after import os,
5826 os?, os.path?, os.path.abspath? all work. This is great, took some
5833 os?, os.path?, os.path.abspath? all work. This is great, took some
5827 work in _ofind.
5834 work in _ofind.
5828
5835
5829 * Fixed more bugs with logging. The sanest way to do it was to add
5836 * Fixed more bugs with logging. The sanest way to do it was to add
5830 to @log a 'mode' parameter. Killed two in one shot (this mode
5837 to @log a 'mode' parameter. Killed two in one shot (this mode
5831 option was a request of Janko's). I think it's finally clean
5838 option was a request of Janko's). I think it's finally clean
5832 (famous last words).
5839 (famous last words).
5833
5840
5834 * Added a page_dumb() pager which does a decent job of paging on
5841 * Added a page_dumb() pager which does a decent job of paging on
5835 screen, if better things (like less) aren't available. One less
5842 screen, if better things (like less) aren't available. One less
5836 unix dependency (someday maybe somebody will port this to
5843 unix dependency (someday maybe somebody will port this to
5837 windows).
5844 windows).
5838
5845
5839 * Fixed problem in magic_log: would lock of logging out if log
5846 * Fixed problem in magic_log: would lock of logging out if log
5840 creation failed (because it would still think it had succeeded).
5847 creation failed (because it would still think it had succeeded).
5841
5848
5842 * Improved the page() function using curses to auto-detect screen
5849 * Improved the page() function using curses to auto-detect screen
5843 size. Now it can make a much better decision on whether to print
5850 size. Now it can make a much better decision on whether to print
5844 or page a string. Option screen_length was modified: a value 0
5851 or page a string. Option screen_length was modified: a value 0
5845 means auto-detect, and that's the default now.
5852 means auto-detect, and that's the default now.
5846
5853
5847 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5854 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5848 go out. I'll test it for a few days, then talk to Janko about
5855 go out. I'll test it for a few days, then talk to Janko about
5849 licences and announce it.
5856 licences and announce it.
5850
5857
5851 * Fixed the length of the auto-generated ---> prompt which appears
5858 * Fixed the length of the auto-generated ---> prompt which appears
5852 for auto-parens and auto-quotes. Getting this right isn't trivial,
5859 for auto-parens and auto-quotes. Getting this right isn't trivial,
5853 with all the color escapes, different prompt types and optional
5860 with all the color escapes, different prompt types and optional
5854 separators. But it seems to be working in all the combinations.
5861 separators. But it seems to be working in all the combinations.
5855
5862
5856 2001-11-26 Fernando Perez <fperez@colorado.edu>
5863 2001-11-26 Fernando Perez <fperez@colorado.edu>
5857
5864
5858 * Wrote a regexp filter to get option types from the option names
5865 * Wrote a regexp filter to get option types from the option names
5859 string. This eliminates the need to manually keep two duplicate
5866 string. This eliminates the need to manually keep two duplicate
5860 lists.
5867 lists.
5861
5868
5862 * Removed the unneeded check_option_names. Now options are handled
5869 * Removed the unneeded check_option_names. Now options are handled
5863 in a much saner manner and it's easy to visually check that things
5870 in a much saner manner and it's easy to visually check that things
5864 are ok.
5871 are ok.
5865
5872
5866 * Updated version numbers on all files I modified to carry a
5873 * Updated version numbers on all files I modified to carry a
5867 notice so Janko and Nathan have clear version markers.
5874 notice so Janko and Nathan have clear version markers.
5868
5875
5869 * Updated docstring for ultraTB with my changes. I should send
5876 * Updated docstring for ultraTB with my changes. I should send
5870 this to Nathan.
5877 this to Nathan.
5871
5878
5872 * Lots of small fixes. Ran everything through pychecker again.
5879 * Lots of small fixes. Ran everything through pychecker again.
5873
5880
5874 * Made loading of deep_reload an cmd line option. If it's not too
5881 * Made loading of deep_reload an cmd line option. If it's not too
5875 kosher, now people can just disable it. With -nodeep_reload it's
5882 kosher, now people can just disable it. With -nodeep_reload it's
5876 still available as dreload(), it just won't overwrite reload().
5883 still available as dreload(), it just won't overwrite reload().
5877
5884
5878 * Moved many options to the no| form (-opt and -noopt
5885 * Moved many options to the no| form (-opt and -noopt
5879 accepted). Cleaner.
5886 accepted). Cleaner.
5880
5887
5881 * Changed magic_log so that if called with no parameters, it uses
5888 * Changed magic_log so that if called with no parameters, it uses
5882 'rotate' mode. That way auto-generated logs aren't automatically
5889 'rotate' mode. That way auto-generated logs aren't automatically
5883 over-written. For normal logs, now a backup is made if it exists
5890 over-written. For normal logs, now a backup is made if it exists
5884 (only 1 level of backups). A new 'backup' mode was added to the
5891 (only 1 level of backups). A new 'backup' mode was added to the
5885 Logger class to support this. This was a request by Janko.
5892 Logger class to support this. This was a request by Janko.
5886
5893
5887 * Added @logoff/@logon to stop/restart an active log.
5894 * Added @logoff/@logon to stop/restart an active log.
5888
5895
5889 * Fixed a lot of bugs in log saving/replay. It was pretty
5896 * Fixed a lot of bugs in log saving/replay. It was pretty
5890 broken. Now special lines (!@,/) appear properly in the command
5897 broken. Now special lines (!@,/) appear properly in the command
5891 history after a log replay.
5898 history after a log replay.
5892
5899
5893 * Tried and failed to implement full session saving via pickle. My
5900 * Tried and failed to implement full session saving via pickle. My
5894 idea was to pickle __main__.__dict__, but modules can't be
5901 idea was to pickle __main__.__dict__, but modules can't be
5895 pickled. This would be a better alternative to replaying logs, but
5902 pickled. This would be a better alternative to replaying logs, but
5896 seems quite tricky to get to work. Changed -session to be called
5903 seems quite tricky to get to work. Changed -session to be called
5897 -logplay, which more accurately reflects what it does. And if we
5904 -logplay, which more accurately reflects what it does. And if we
5898 ever get real session saving working, -session is now available.
5905 ever get real session saving working, -session is now available.
5899
5906
5900 * Implemented color schemes for prompts also. As for tracebacks,
5907 * Implemented color schemes for prompts also. As for tracebacks,
5901 currently only NoColor and Linux are supported. But now the
5908 currently only NoColor and Linux are supported. But now the
5902 infrastructure is in place, based on a generic ColorScheme
5909 infrastructure is in place, based on a generic ColorScheme
5903 class. So writing and activating new schemes both for the prompts
5910 class. So writing and activating new schemes both for the prompts
5904 and the tracebacks should be straightforward.
5911 and the tracebacks should be straightforward.
5905
5912
5906 * Version 0.1.13 released, 0.1.14 opened.
5913 * Version 0.1.13 released, 0.1.14 opened.
5907
5914
5908 * Changed handling of options for output cache. Now counter is
5915 * Changed handling of options for output cache. Now counter is
5909 hardwired starting at 1 and one specifies the maximum number of
5916 hardwired starting at 1 and one specifies the maximum number of
5910 entries *in the outcache* (not the max prompt counter). This is
5917 entries *in the outcache* (not the max prompt counter). This is
5911 much better, since many statements won't increase the cache
5918 much better, since many statements won't increase the cache
5912 count. It also eliminated some confusing options, now there's only
5919 count. It also eliminated some confusing options, now there's only
5913 one: cache_size.
5920 one: cache_size.
5914
5921
5915 * Added 'alias' magic function and magic_alias option in the
5922 * Added 'alias' magic function and magic_alias option in the
5916 ipythonrc file. Now the user can easily define whatever names he
5923 ipythonrc file. Now the user can easily define whatever names he
5917 wants for the magic functions without having to play weird
5924 wants for the magic functions without having to play weird
5918 namespace games. This gives IPython a real shell-like feel.
5925 namespace games. This gives IPython a real shell-like feel.
5919
5926
5920 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5927 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5921 @ or not).
5928 @ or not).
5922
5929
5923 This was one of the last remaining 'visible' bugs (that I know
5930 This was one of the last remaining 'visible' bugs (that I know
5924 of). I think if I can clean up the session loading so it works
5931 of). I think if I can clean up the session loading so it works
5925 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5932 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5926 about licensing).
5933 about licensing).
5927
5934
5928 2001-11-25 Fernando Perez <fperez@colorado.edu>
5935 2001-11-25 Fernando Perez <fperez@colorado.edu>
5929
5936
5930 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5937 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5931 there's a cleaner distinction between what ? and ?? show.
5938 there's a cleaner distinction between what ? and ?? show.
5932
5939
5933 * Added screen_length option. Now the user can define his own
5940 * Added screen_length option. Now the user can define his own
5934 screen size for page() operations.
5941 screen size for page() operations.
5935
5942
5936 * Implemented magic shell-like functions with automatic code
5943 * Implemented magic shell-like functions with automatic code
5937 generation. Now adding another function is just a matter of adding
5944 generation. Now adding another function is just a matter of adding
5938 an entry to a dict, and the function is dynamically generated at
5945 an entry to a dict, and the function is dynamically generated at
5939 run-time. Python has some really cool features!
5946 run-time. Python has some really cool features!
5940
5947
5941 * Renamed many options to cleanup conventions a little. Now all
5948 * Renamed many options to cleanup conventions a little. Now all
5942 are lowercase, and only underscores where needed. Also in the code
5949 are lowercase, and only underscores where needed. Also in the code
5943 option name tables are clearer.
5950 option name tables are clearer.
5944
5951
5945 * Changed prompts a little. Now input is 'In [n]:' instead of
5952 * Changed prompts a little. Now input is 'In [n]:' instead of
5946 'In[n]:='. This allows it the numbers to be aligned with the
5953 'In[n]:='. This allows it the numbers to be aligned with the
5947 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5954 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5948 Python (it was a Mathematica thing). The '...' continuation prompt
5955 Python (it was a Mathematica thing). The '...' continuation prompt
5949 was also changed a little to align better.
5956 was also changed a little to align better.
5950
5957
5951 * Fixed bug when flushing output cache. Not all _p<n> variables
5958 * Fixed bug when flushing output cache. Not all _p<n> variables
5952 exist, so their deletion needs to be wrapped in a try:
5959 exist, so their deletion needs to be wrapped in a try:
5953
5960
5954 * Figured out how to properly use inspect.formatargspec() (it
5961 * Figured out how to properly use inspect.formatargspec() (it
5955 requires the args preceded by *). So I removed all the code from
5962 requires the args preceded by *). So I removed all the code from
5956 _get_pdef in Magic, which was just replicating that.
5963 _get_pdef in Magic, which was just replicating that.
5957
5964
5958 * Added test to prefilter to allow redefining magic function names
5965 * Added test to prefilter to allow redefining magic function names
5959 as variables. This is ok, since the @ form is always available,
5966 as variables. This is ok, since the @ form is always available,
5960 but whe should allow the user to define a variable called 'ls' if
5967 but whe should allow the user to define a variable called 'ls' if
5961 he needs it.
5968 he needs it.
5962
5969
5963 * Moved the ToDo information from README into a separate ToDo.
5970 * Moved the ToDo information from README into a separate ToDo.
5964
5971
5965 * General code cleanup and small bugfixes. I think it's close to a
5972 * General code cleanup and small bugfixes. I think it's close to a
5966 state where it can be released, obviously with a big 'beta'
5973 state where it can be released, obviously with a big 'beta'
5967 warning on it.
5974 warning on it.
5968
5975
5969 * Got the magic function split to work. Now all magics are defined
5976 * Got the magic function split to work. Now all magics are defined
5970 in a separate class. It just organizes things a bit, and now
5977 in a separate class. It just organizes things a bit, and now
5971 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5978 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5972 was too long).
5979 was too long).
5973
5980
5974 * Changed @clear to @reset to avoid potential confusions with
5981 * Changed @clear to @reset to avoid potential confusions with
5975 the shell command clear. Also renamed @cl to @clear, which does
5982 the shell command clear. Also renamed @cl to @clear, which does
5976 exactly what people expect it to from their shell experience.
5983 exactly what people expect it to from their shell experience.
5977
5984
5978 Added a check to the @reset command (since it's so
5985 Added a check to the @reset command (since it's so
5979 destructive, it's probably a good idea to ask for confirmation).
5986 destructive, it's probably a good idea to ask for confirmation).
5980 But now reset only works for full namespace resetting. Since the
5987 But now reset only works for full namespace resetting. Since the
5981 del keyword is already there for deleting a few specific
5988 del keyword is already there for deleting a few specific
5982 variables, I don't see the point of having a redundant magic
5989 variables, I don't see the point of having a redundant magic
5983 function for the same task.
5990 function for the same task.
5984
5991
5985 2001-11-24 Fernando Perez <fperez@colorado.edu>
5992 2001-11-24 Fernando Perez <fperez@colorado.edu>
5986
5993
5987 * Updated the builtin docs (esp. the ? ones).
5994 * Updated the builtin docs (esp. the ? ones).
5988
5995
5989 * Ran all the code through pychecker. Not terribly impressed with
5996 * Ran all the code through pychecker. Not terribly impressed with
5990 it: lots of spurious warnings and didn't really find anything of
5997 it: lots of spurious warnings and didn't really find anything of
5991 substance (just a few modules being imported and not used).
5998 substance (just a few modules being imported and not used).
5992
5999
5993 * Implemented the new ultraTB functionality into IPython. New
6000 * Implemented the new ultraTB functionality into IPython. New
5994 option: xcolors. This chooses color scheme. xmode now only selects
6001 option: xcolors. This chooses color scheme. xmode now only selects
5995 between Plain and Verbose. Better orthogonality.
6002 between Plain and Verbose. Better orthogonality.
5996
6003
5997 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6004 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5998 mode and color scheme for the exception handlers. Now it's
6005 mode and color scheme for the exception handlers. Now it's
5999 possible to have the verbose traceback with no coloring.
6006 possible to have the verbose traceback with no coloring.
6000
6007
6001 2001-11-23 Fernando Perez <fperez@colorado.edu>
6008 2001-11-23 Fernando Perez <fperez@colorado.edu>
6002
6009
6003 * Version 0.1.12 released, 0.1.13 opened.
6010 * Version 0.1.12 released, 0.1.13 opened.
6004
6011
6005 * Removed option to set auto-quote and auto-paren escapes by
6012 * Removed option to set auto-quote and auto-paren escapes by
6006 user. The chances of breaking valid syntax are just too high. If
6013 user. The chances of breaking valid syntax are just too high. If
6007 someone *really* wants, they can always dig into the code.
6014 someone *really* wants, they can always dig into the code.
6008
6015
6009 * Made prompt separators configurable.
6016 * Made prompt separators configurable.
6010
6017
6011 2001-11-22 Fernando Perez <fperez@colorado.edu>
6018 2001-11-22 Fernando Perez <fperez@colorado.edu>
6012
6019
6013 * Small bugfixes in many places.
6020 * Small bugfixes in many places.
6014
6021
6015 * Removed the MyCompleter class from ipplib. It seemed redundant
6022 * Removed the MyCompleter class from ipplib. It seemed redundant
6016 with the C-p,C-n history search functionality. Less code to
6023 with the C-p,C-n history search functionality. Less code to
6017 maintain.
6024 maintain.
6018
6025
6019 * Moved all the original ipython.py code into ipythonlib.py. Right
6026 * Moved all the original ipython.py code into ipythonlib.py. Right
6020 now it's just one big dump into a function called make_IPython, so
6027 now it's just one big dump into a function called make_IPython, so
6021 no real modularity has been gained. But at least it makes the
6028 no real modularity has been gained. But at least it makes the
6022 wrapper script tiny, and since ipythonlib is a module, it gets
6029 wrapper script tiny, and since ipythonlib is a module, it gets
6023 compiled and startup is much faster.
6030 compiled and startup is much faster.
6024
6031
6025 This is a reasobably 'deep' change, so we should test it for a
6032 This is a reasobably 'deep' change, so we should test it for a
6026 while without messing too much more with the code.
6033 while without messing too much more with the code.
6027
6034
6028 2001-11-21 Fernando Perez <fperez@colorado.edu>
6035 2001-11-21 Fernando Perez <fperez@colorado.edu>
6029
6036
6030 * Version 0.1.11 released, 0.1.12 opened for further work.
6037 * Version 0.1.11 released, 0.1.12 opened for further work.
6031
6038
6032 * Removed dependency on Itpl. It was only needed in one place. It
6039 * Removed dependency on Itpl. It was only needed in one place. It
6033 would be nice if this became part of python, though. It makes life
6040 would be nice if this became part of python, though. It makes life
6034 *a lot* easier in some cases.
6041 *a lot* easier in some cases.
6035
6042
6036 * Simplified the prefilter code a bit. Now all handlers are
6043 * Simplified the prefilter code a bit. Now all handlers are
6037 expected to explicitly return a value (at least a blank string).
6044 expected to explicitly return a value (at least a blank string).
6038
6045
6039 * Heavy edits in ipplib. Removed the help system altogether. Now
6046 * Heavy edits in ipplib. Removed the help system altogether. Now
6040 obj?/?? is used for inspecting objects, a magic @doc prints
6047 obj?/?? is used for inspecting objects, a magic @doc prints
6041 docstrings, and full-blown Python help is accessed via the 'help'
6048 docstrings, and full-blown Python help is accessed via the 'help'
6042 keyword. This cleans up a lot of code (less to maintain) and does
6049 keyword. This cleans up a lot of code (less to maintain) and does
6043 the job. Since 'help' is now a standard Python component, might as
6050 the job. Since 'help' is now a standard Python component, might as
6044 well use it and remove duplicate functionality.
6051 well use it and remove duplicate functionality.
6045
6052
6046 Also removed the option to use ipplib as a standalone program. By
6053 Also removed the option to use ipplib as a standalone program. By
6047 now it's too dependent on other parts of IPython to function alone.
6054 now it's too dependent on other parts of IPython to function alone.
6048
6055
6049 * Fixed bug in genutils.pager. It would crash if the pager was
6056 * Fixed bug in genutils.pager. It would crash if the pager was
6050 exited immediately after opening (broken pipe).
6057 exited immediately after opening (broken pipe).
6051
6058
6052 * Trimmed down the VerboseTB reporting a little. The header is
6059 * Trimmed down the VerboseTB reporting a little. The header is
6053 much shorter now and the repeated exception arguments at the end
6060 much shorter now and the repeated exception arguments at the end
6054 have been removed. For interactive use the old header seemed a bit
6061 have been removed. For interactive use the old header seemed a bit
6055 excessive.
6062 excessive.
6056
6063
6057 * Fixed small bug in output of @whos for variables with multi-word
6064 * Fixed small bug in output of @whos for variables with multi-word
6058 types (only first word was displayed).
6065 types (only first word was displayed).
6059
6066
6060 2001-11-17 Fernando Perez <fperez@colorado.edu>
6067 2001-11-17 Fernando Perez <fperez@colorado.edu>
6061
6068
6062 * Version 0.1.10 released, 0.1.11 opened for further work.
6069 * Version 0.1.10 released, 0.1.11 opened for further work.
6063
6070
6064 * Modified dirs and friends. dirs now *returns* the stack (not
6071 * Modified dirs and friends. dirs now *returns* the stack (not
6065 prints), so one can manipulate it as a variable. Convenient to
6072 prints), so one can manipulate it as a variable. Convenient to
6066 travel along many directories.
6073 travel along many directories.
6067
6074
6068 * Fixed bug in magic_pdef: would only work with functions with
6075 * Fixed bug in magic_pdef: would only work with functions with
6069 arguments with default values.
6076 arguments with default values.
6070
6077
6071 2001-11-14 Fernando Perez <fperez@colorado.edu>
6078 2001-11-14 Fernando Perez <fperez@colorado.edu>
6072
6079
6073 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6080 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6074 example with IPython. Various other minor fixes and cleanups.
6081 example with IPython. Various other minor fixes and cleanups.
6075
6082
6076 * Version 0.1.9 released, 0.1.10 opened for further work.
6083 * Version 0.1.9 released, 0.1.10 opened for further work.
6077
6084
6078 * Added sys.path to the list of directories searched in the
6085 * Added sys.path to the list of directories searched in the
6079 execfile= option. It used to be the current directory and the
6086 execfile= option. It used to be the current directory and the
6080 user's IPYTHONDIR only.
6087 user's IPYTHONDIR only.
6081
6088
6082 2001-11-13 Fernando Perez <fperez@colorado.edu>
6089 2001-11-13 Fernando Perez <fperez@colorado.edu>
6083
6090
6084 * Reinstated the raw_input/prefilter separation that Janko had
6091 * Reinstated the raw_input/prefilter separation that Janko had
6085 initially. This gives a more convenient setup for extending the
6092 initially. This gives a more convenient setup for extending the
6086 pre-processor from the outside: raw_input always gets a string,
6093 pre-processor from the outside: raw_input always gets a string,
6087 and prefilter has to process it. We can then redefine prefilter
6094 and prefilter has to process it. We can then redefine prefilter
6088 from the outside and implement extensions for special
6095 from the outside and implement extensions for special
6089 purposes.
6096 purposes.
6090
6097
6091 Today I got one for inputting PhysicalQuantity objects
6098 Today I got one for inputting PhysicalQuantity objects
6092 (from Scientific) without needing any function calls at
6099 (from Scientific) without needing any function calls at
6093 all. Extremely convenient, and it's all done as a user-level
6100 all. Extremely convenient, and it's all done as a user-level
6094 extension (no IPython code was touched). Now instead of:
6101 extension (no IPython code was touched). Now instead of:
6095 a = PhysicalQuantity(4.2,'m/s**2')
6102 a = PhysicalQuantity(4.2,'m/s**2')
6096 one can simply say
6103 one can simply say
6097 a = 4.2 m/s**2
6104 a = 4.2 m/s**2
6098 or even
6105 or even
6099 a = 4.2 m/s^2
6106 a = 4.2 m/s^2
6100
6107
6101 I use this, but it's also a proof of concept: IPython really is
6108 I use this, but it's also a proof of concept: IPython really is
6102 fully user-extensible, even at the level of the parsing of the
6109 fully user-extensible, even at the level of the parsing of the
6103 command line. It's not trivial, but it's perfectly doable.
6110 command line. It's not trivial, but it's perfectly doable.
6104
6111
6105 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6112 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6106 the problem of modules being loaded in the inverse order in which
6113 the problem of modules being loaded in the inverse order in which
6107 they were defined in
6114 they were defined in
6108
6115
6109 * Version 0.1.8 released, 0.1.9 opened for further work.
6116 * Version 0.1.8 released, 0.1.9 opened for further work.
6110
6117
6111 * Added magics pdef, source and file. They respectively show the
6118 * Added magics pdef, source and file. They respectively show the
6112 definition line ('prototype' in C), source code and full python
6119 definition line ('prototype' in C), source code and full python
6113 file for any callable object. The object inspector oinfo uses
6120 file for any callable object. The object inspector oinfo uses
6114 these to show the same information.
6121 these to show the same information.
6115
6122
6116 * Version 0.1.7 released, 0.1.8 opened for further work.
6123 * Version 0.1.7 released, 0.1.8 opened for further work.
6117
6124
6118 * Separated all the magic functions into a class called Magic. The
6125 * Separated all the magic functions into a class called Magic. The
6119 InteractiveShell class was becoming too big for Xemacs to handle
6126 InteractiveShell class was becoming too big for Xemacs to handle
6120 (de-indenting a line would lock it up for 10 seconds while it
6127 (de-indenting a line would lock it up for 10 seconds while it
6121 backtracked on the whole class!)
6128 backtracked on the whole class!)
6122
6129
6123 FIXME: didn't work. It can be done, but right now namespaces are
6130 FIXME: didn't work. It can be done, but right now namespaces are
6124 all messed up. Do it later (reverted it for now, so at least
6131 all messed up. Do it later (reverted it for now, so at least
6125 everything works as before).
6132 everything works as before).
6126
6133
6127 * Got the object introspection system (magic_oinfo) working! I
6134 * Got the object introspection system (magic_oinfo) working! I
6128 think this is pretty much ready for release to Janko, so he can
6135 think this is pretty much ready for release to Janko, so he can
6129 test it for a while and then announce it. Pretty much 100% of what
6136 test it for a while and then announce it. Pretty much 100% of what
6130 I wanted for the 'phase 1' release is ready. Happy, tired.
6137 I wanted for the 'phase 1' release is ready. Happy, tired.
6131
6138
6132 2001-11-12 Fernando Perez <fperez@colorado.edu>
6139 2001-11-12 Fernando Perez <fperez@colorado.edu>
6133
6140
6134 * Version 0.1.6 released, 0.1.7 opened for further work.
6141 * Version 0.1.6 released, 0.1.7 opened for further work.
6135
6142
6136 * Fixed bug in printing: it used to test for truth before
6143 * Fixed bug in printing: it used to test for truth before
6137 printing, so 0 wouldn't print. Now checks for None.
6144 printing, so 0 wouldn't print. Now checks for None.
6138
6145
6139 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6146 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6140 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6147 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6141 reaches by hand into the outputcache. Think of a better way to do
6148 reaches by hand into the outputcache. Think of a better way to do
6142 this later.
6149 this later.
6143
6150
6144 * Various small fixes thanks to Nathan's comments.
6151 * Various small fixes thanks to Nathan's comments.
6145
6152
6146 * Changed magic_pprint to magic_Pprint. This way it doesn't
6153 * Changed magic_pprint to magic_Pprint. This way it doesn't
6147 collide with pprint() and the name is consistent with the command
6154 collide with pprint() and the name is consistent with the command
6148 line option.
6155 line option.
6149
6156
6150 * Changed prompt counter behavior to be fully like
6157 * Changed prompt counter behavior to be fully like
6151 Mathematica's. That is, even input that doesn't return a result
6158 Mathematica's. That is, even input that doesn't return a result
6152 raises the prompt counter. The old behavior was kind of confusing
6159 raises the prompt counter. The old behavior was kind of confusing
6153 (getting the same prompt number several times if the operation
6160 (getting the same prompt number several times if the operation
6154 didn't return a result).
6161 didn't return a result).
6155
6162
6156 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6163 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6157
6164
6158 * Fixed -Classic mode (wasn't working anymore).
6165 * Fixed -Classic mode (wasn't working anymore).
6159
6166
6160 * Added colored prompts using Nathan's new code. Colors are
6167 * Added colored prompts using Nathan's new code. Colors are
6161 currently hardwired, they can be user-configurable. For
6168 currently hardwired, they can be user-configurable. For
6162 developers, they can be chosen in file ipythonlib.py, at the
6169 developers, they can be chosen in file ipythonlib.py, at the
6163 beginning of the CachedOutput class def.
6170 beginning of the CachedOutput class def.
6164
6171
6165 2001-11-11 Fernando Perez <fperez@colorado.edu>
6172 2001-11-11 Fernando Perez <fperez@colorado.edu>
6166
6173
6167 * Version 0.1.5 released, 0.1.6 opened for further work.
6174 * Version 0.1.5 released, 0.1.6 opened for further work.
6168
6175
6169 * Changed magic_env to *return* the environment as a dict (not to
6176 * Changed magic_env to *return* the environment as a dict (not to
6170 print it). This way it prints, but it can also be processed.
6177 print it). This way it prints, but it can also be processed.
6171
6178
6172 * Added Verbose exception reporting to interactive
6179 * Added Verbose exception reporting to interactive
6173 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6180 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6174 traceback. Had to make some changes to the ultraTB file. This is
6181 traceback. Had to make some changes to the ultraTB file. This is
6175 probably the last 'big' thing in my mental todo list. This ties
6182 probably the last 'big' thing in my mental todo list. This ties
6176 in with the next entry:
6183 in with the next entry:
6177
6184
6178 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6185 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6179 has to specify is Plain, Color or Verbose for all exception
6186 has to specify is Plain, Color or Verbose for all exception
6180 handling.
6187 handling.
6181
6188
6182 * Removed ShellServices option. All this can really be done via
6189 * Removed ShellServices option. All this can really be done via
6183 the magic system. It's easier to extend, cleaner and has automatic
6190 the magic system. It's easier to extend, cleaner and has automatic
6184 namespace protection and documentation.
6191 namespace protection and documentation.
6185
6192
6186 2001-11-09 Fernando Perez <fperez@colorado.edu>
6193 2001-11-09 Fernando Perez <fperez@colorado.edu>
6187
6194
6188 * Fixed bug in output cache flushing (missing parameter to
6195 * Fixed bug in output cache flushing (missing parameter to
6189 __init__). Other small bugs fixed (found using pychecker).
6196 __init__). Other small bugs fixed (found using pychecker).
6190
6197
6191 * Version 0.1.4 opened for bugfixing.
6198 * Version 0.1.4 opened for bugfixing.
6192
6199
6193 2001-11-07 Fernando Perez <fperez@colorado.edu>
6200 2001-11-07 Fernando Perez <fperez@colorado.edu>
6194
6201
6195 * Version 0.1.3 released, mainly because of the raw_input bug.
6202 * Version 0.1.3 released, mainly because of the raw_input bug.
6196
6203
6197 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6204 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6198 and when testing for whether things were callable, a call could
6205 and when testing for whether things were callable, a call could
6199 actually be made to certain functions. They would get called again
6206 actually be made to certain functions. They would get called again
6200 once 'really' executed, with a resulting double call. A disaster
6207 once 'really' executed, with a resulting double call. A disaster
6201 in many cases (list.reverse() would never work!).
6208 in many cases (list.reverse() would never work!).
6202
6209
6203 * Removed prefilter() function, moved its code to raw_input (which
6210 * Removed prefilter() function, moved its code to raw_input (which
6204 after all was just a near-empty caller for prefilter). This saves
6211 after all was just a near-empty caller for prefilter). This saves
6205 a function call on every prompt, and simplifies the class a tiny bit.
6212 a function call on every prompt, and simplifies the class a tiny bit.
6206
6213
6207 * Fix _ip to __ip name in magic example file.
6214 * Fix _ip to __ip name in magic example file.
6208
6215
6209 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6216 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6210 work with non-gnu versions of tar.
6217 work with non-gnu versions of tar.
6211
6218
6212 2001-11-06 Fernando Perez <fperez@colorado.edu>
6219 2001-11-06 Fernando Perez <fperez@colorado.edu>
6213
6220
6214 * Version 0.1.2. Just to keep track of the recent changes.
6221 * Version 0.1.2. Just to keep track of the recent changes.
6215
6222
6216 * Fixed nasty bug in output prompt routine. It used to check 'if
6223 * Fixed nasty bug in output prompt routine. It used to check 'if
6217 arg != None...'. Problem is, this fails if arg implements a
6224 arg != None...'. Problem is, this fails if arg implements a
6218 special comparison (__cmp__) which disallows comparing to
6225 special comparison (__cmp__) which disallows comparing to
6219 None. Found it when trying to use the PhysicalQuantity module from
6226 None. Found it when trying to use the PhysicalQuantity module from
6220 ScientificPython.
6227 ScientificPython.
6221
6228
6222 2001-11-05 Fernando Perez <fperez@colorado.edu>
6229 2001-11-05 Fernando Perez <fperez@colorado.edu>
6223
6230
6224 * Also added dirs. Now the pushd/popd/dirs family functions
6231 * Also added dirs. Now the pushd/popd/dirs family functions
6225 basically like the shell, with the added convenience of going home
6232 basically like the shell, with the added convenience of going home
6226 when called with no args.
6233 when called with no args.
6227
6234
6228 * pushd/popd slightly modified to mimic shell behavior more
6235 * pushd/popd slightly modified to mimic shell behavior more
6229 closely.
6236 closely.
6230
6237
6231 * Added env,pushd,popd from ShellServices as magic functions. I
6238 * Added env,pushd,popd from ShellServices as magic functions. I
6232 think the cleanest will be to port all desired functions from
6239 think the cleanest will be to port all desired functions from
6233 ShellServices as magics and remove ShellServices altogether. This
6240 ShellServices as magics and remove ShellServices altogether. This
6234 will provide a single, clean way of adding functionality
6241 will provide a single, clean way of adding functionality
6235 (shell-type or otherwise) to IP.
6242 (shell-type or otherwise) to IP.
6236
6243
6237 2001-11-04 Fernando Perez <fperez@colorado.edu>
6244 2001-11-04 Fernando Perez <fperez@colorado.edu>
6238
6245
6239 * Added .ipython/ directory to sys.path. This way users can keep
6246 * Added .ipython/ directory to sys.path. This way users can keep
6240 customizations there and access them via import.
6247 customizations there and access them via import.
6241
6248
6242 2001-11-03 Fernando Perez <fperez@colorado.edu>
6249 2001-11-03 Fernando Perez <fperez@colorado.edu>
6243
6250
6244 * Opened version 0.1.1 for new changes.
6251 * Opened version 0.1.1 for new changes.
6245
6252
6246 * Changed version number to 0.1.0: first 'public' release, sent to
6253 * Changed version number to 0.1.0: first 'public' release, sent to
6247 Nathan and Janko.
6254 Nathan and Janko.
6248
6255
6249 * Lots of small fixes and tweaks.
6256 * Lots of small fixes and tweaks.
6250
6257
6251 * Minor changes to whos format. Now strings are shown, snipped if
6258 * Minor changes to whos format. Now strings are shown, snipped if
6252 too long.
6259 too long.
6253
6260
6254 * Changed ShellServices to work on __main__ so they show up in @who
6261 * Changed ShellServices to work on __main__ so they show up in @who
6255
6262
6256 * Help also works with ? at the end of a line:
6263 * Help also works with ? at the end of a line:
6257 ?sin and sin?
6264 ?sin and sin?
6258 both produce the same effect. This is nice, as often I use the
6265 both produce the same effect. This is nice, as often I use the
6259 tab-complete to find the name of a method, but I used to then have
6266 tab-complete to find the name of a method, but I used to then have
6260 to go to the beginning of the line to put a ? if I wanted more
6267 to go to the beginning of the line to put a ? if I wanted more
6261 info. Now I can just add the ? and hit return. Convenient.
6268 info. Now I can just add the ? and hit return. Convenient.
6262
6269
6263 2001-11-02 Fernando Perez <fperez@colorado.edu>
6270 2001-11-02 Fernando Perez <fperez@colorado.edu>
6264
6271
6265 * Python version check (>=2.1) added.
6272 * Python version check (>=2.1) added.
6266
6273
6267 * Added LazyPython documentation. At this point the docs are quite
6274 * Added LazyPython documentation. At this point the docs are quite
6268 a mess. A cleanup is in order.
6275 a mess. A cleanup is in order.
6269
6276
6270 * Auto-installer created. For some bizarre reason, the zipfiles
6277 * Auto-installer created. For some bizarre reason, the zipfiles
6271 module isn't working on my system. So I made a tar version
6278 module isn't working on my system. So I made a tar version
6272 (hopefully the command line options in various systems won't kill
6279 (hopefully the command line options in various systems won't kill
6273 me).
6280 me).
6274
6281
6275 * Fixes to Struct in genutils. Now all dictionary-like methods are
6282 * Fixes to Struct in genutils. Now all dictionary-like methods are
6276 protected (reasonably).
6283 protected (reasonably).
6277
6284
6278 * Added pager function to genutils and changed ? to print usage
6285 * Added pager function to genutils and changed ? to print usage
6279 note through it (it was too long).
6286 note through it (it was too long).
6280
6287
6281 * Added the LazyPython functionality. Works great! I changed the
6288 * Added the LazyPython functionality. Works great! I changed the
6282 auto-quote escape to ';', it's on home row and next to '. But
6289 auto-quote escape to ';', it's on home row and next to '. But
6283 both auto-quote and auto-paren (still /) escapes are command-line
6290 both auto-quote and auto-paren (still /) escapes are command-line
6284 parameters.
6291 parameters.
6285
6292
6286
6293
6287 2001-11-01 Fernando Perez <fperez@colorado.edu>
6294 2001-11-01 Fernando Perez <fperez@colorado.edu>
6288
6295
6289 * Version changed to 0.0.7. Fairly large change: configuration now
6296 * Version changed to 0.0.7. Fairly large change: configuration now
6290 is all stored in a directory, by default .ipython. There, all
6297 is all stored in a directory, by default .ipython. There, all
6291 config files have normal looking names (not .names)
6298 config files have normal looking names (not .names)
6292
6299
6293 * Version 0.0.6 Released first to Lucas and Archie as a test
6300 * Version 0.0.6 Released first to Lucas and Archie as a test
6294 run. Since it's the first 'semi-public' release, change version to
6301 run. Since it's the first 'semi-public' release, change version to
6295 > 0.0.6 for any changes now.
6302 > 0.0.6 for any changes now.
6296
6303
6297 * Stuff I had put in the ipplib.py changelog:
6304 * Stuff I had put in the ipplib.py changelog:
6298
6305
6299 Changes to InteractiveShell:
6306 Changes to InteractiveShell:
6300
6307
6301 - Made the usage message a parameter.
6308 - Made the usage message a parameter.
6302
6309
6303 - Require the name of the shell variable to be given. It's a bit
6310 - Require the name of the shell variable to be given. It's a bit
6304 of a hack, but allows the name 'shell' not to be hardwired in the
6311 of a hack, but allows the name 'shell' not to be hardwired in the
6305 magic (@) handler, which is problematic b/c it requires
6312 magic (@) handler, which is problematic b/c it requires
6306 polluting the global namespace with 'shell'. This in turn is
6313 polluting the global namespace with 'shell'. This in turn is
6307 fragile: if a user redefines a variable called shell, things
6314 fragile: if a user redefines a variable called shell, things
6308 break.
6315 break.
6309
6316
6310 - magic @: all functions available through @ need to be defined
6317 - magic @: all functions available through @ need to be defined
6311 as magic_<name>, even though they can be called simply as
6318 as magic_<name>, even though they can be called simply as
6312 @<name>. This allows the special command @magic to gather
6319 @<name>. This allows the special command @magic to gather
6313 information automatically about all existing magic functions,
6320 information automatically about all existing magic functions,
6314 even if they are run-time user extensions, by parsing the shell
6321 even if they are run-time user extensions, by parsing the shell
6315 instance __dict__ looking for special magic_ names.
6322 instance __dict__ looking for special magic_ names.
6316
6323
6317 - mainloop: added *two* local namespace parameters. This allows
6324 - mainloop: added *two* local namespace parameters. This allows
6318 the class to differentiate between parameters which were there
6325 the class to differentiate between parameters which were there
6319 before and after command line initialization was processed. This
6326 before and after command line initialization was processed. This
6320 way, later @who can show things loaded at startup by the
6327 way, later @who can show things loaded at startup by the
6321 user. This trick was necessary to make session saving/reloading
6328 user. This trick was necessary to make session saving/reloading
6322 really work: ideally after saving/exiting/reloading a session,
6329 really work: ideally after saving/exiting/reloading a session,
6323 *everything* should look the same, including the output of @who. I
6330 *everything* should look the same, including the output of @who. I
6324 was only able to make this work with this double namespace
6331 was only able to make this work with this double namespace
6325 trick.
6332 trick.
6326
6333
6327 - added a header to the logfile which allows (almost) full
6334 - added a header to the logfile which allows (almost) full
6328 session restoring.
6335 session restoring.
6329
6336
6330 - prepend lines beginning with @ or !, with a and log
6337 - prepend lines beginning with @ or !, with a and log
6331 them. Why? !lines: may be useful to know what you did @lines:
6338 them. Why? !lines: may be useful to know what you did @lines:
6332 they may affect session state. So when restoring a session, at
6339 they may affect session state. So when restoring a session, at
6333 least inform the user of their presence. I couldn't quite get
6340 least inform the user of their presence. I couldn't quite get
6334 them to properly re-execute, but at least the user is warned.
6341 them to properly re-execute, but at least the user is warned.
6335
6342
6336 * Started ChangeLog.
6343 * Started ChangeLog.
@@ -1,479 +1,480 b''
1 ;;; ipython.el --- Adds support for IPython to python-mode.el
1 ;;; ipython.el --- Adds support for IPython to python-mode.el
2
2
3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
4 ;; Author: Alexander Schmolck
4 ;; Author: Alexander Schmolck
5 ;; Keywords: ipython python languages oop
5 ;; Keywords: ipython python languages oop
6 ;; URL: http://ipython.scipy.org
6 ;; URL: http://ipython.scipy.org
7 ;; Compatibility: Emacs21, XEmacs21
7 ;; Compatibility: Emacs21, XEmacs21
8 ;; FIXME: #$@! INPUT RING
8 ;; FIXME: #$@! INPUT RING
9 (defconst ipython-version "$Revision: 1851 $"
9 (defconst ipython-version "$Revision: 2154 $"
10 "VC version number.")
10 "VC version number.")
11
11
12 ;;; Commentary
12 ;;; Commentary
13 ;; This library makes all the functionality python-mode has when running with
13 ;; This library makes all the functionality python-mode has when running with
14 ;; the normal python-interpreter available for ipython, too. It also enables a
14 ;; the normal python-interpreter available for ipython, too. It also enables a
15 ;; persistent py-shell command history across sessions (if you exit python
15 ;; persistent py-shell command history across sessions (if you exit python
16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
17 ;; can be used to convert bits of a ipython session into something that can be
17 ;; can be used to convert bits of a ipython session into something that can be
18 ;; used for doctests. To install, put this file somewhere in your emacs
18 ;; used for doctests. To install, put this file somewhere in your emacs
19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
20 ;; line only needed if the default (``"ipython"``) is wrong)::
20 ;; line only needed if the default (``"ipython"``) is wrong)::
21 ;;
21 ;;
22 ;; (setq ipython-command "/SOME-PATH/ipython")
22 ;; (setq ipython-command "/SOME-PATH/ipython")
23 ;; (require 'ipython)
23 ;; (require 'ipython)
24 ;;
24 ;;
25 ;; Ipython will be set as the default python shell, but only if the ipython
25 ;; Ipython will be set as the default python shell, but only if the ipython
26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
27 ;; is also enabled (experimental feature!). Please also note that all the
27 ;; is also enabled (experimental feature!). Please also note that all the
28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
29 ;; (i)python, so importing readline etc. will have 0 effect.
29 ;; (i)python, so importing readline etc. will have 0 effect.
30 ;;
30 ;;
31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
32 ;; (or the default keybinding ``C-c C-!``).
32 ;; (or the default keybinding ``C-c C-!``).
33 ;;
33 ;;
34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
35 ;; will work fine for most cases, doing certain things (like the
35 ;; will work fine for most cases, doing certain things (like the
36 ;; autocompletion and a decent scheme to switch between python interpreters)
36 ;; autocompletion and a decent scheme to switch between python interpreters)
37 ;; properly will also require changes to ipython that will likely have to wait
37 ;; properly will also require changes to ipython that will likely have to wait
38 ;; for a larger rewrite scheduled some time in the future.
38 ;; for a larger rewrite scheduled some time in the future.
39 ;;
39 ;;
40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
41 ;;
41 ;;
42 ;; Further note that I don't know whether this runs under windows or not and
42 ;; Further note that I don't know whether this runs under windows or not and
43 ;; that if it doesn't I can't really help much, not being afflicted myself.
43 ;; that if it doesn't I can't really help much, not being afflicted myself.
44 ;;
44 ;;
45 ;;
45 ;;
46 ;; Hints for effective usage
46 ;; Hints for effective usage
47 ;; -------------------------
47 ;; -------------------------
48 ;;
48 ;;
49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
53 ;; inspect the live objects in each stack frames and to jump to the
53 ;; inspect the live objects in each stack frames and to jump to the
54 ;; corresponding sourcecode locations as you walk up and down the stack trace
54 ;; corresponding sourcecode locations as you walk up and down the stack trace
55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
56 ;; to jump to the corresponding source code locations).
56 ;; to jump to the corresponding source code locations).
57 ;;
57 ;;
58 ;; - emacs gives you much more powerful commandline editing and output searching
58 ;; - emacs gives you much more powerful commandline editing and output searching
59 ;; capabilities than ipython-standalone -- isearch is your friend if you
59 ;; capabilities than ipython-standalone -- isearch is your friend if you
60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
61 ;;
61 ;;
62 ;; - This is not really specific to ipython, but for more convenient history
62 ;; - This is not really specific to ipython, but for more convenient history
63 ;; access you might want to add something like the following to *the beggining*
63 ;; access you might want to add something like the following to *the beggining*
64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
66 ;;
66 ;;
67 ;; (require 'comint)
67 ;; (require 'comint)
68 ;; (define-key comint-mode-map [(meta p)]
68 ;; (define-key comint-mode-map [(meta p)]
69 ;; 'comint-previous-matching-input-from-input)
69 ;; 'comint-previous-matching-input-from-input)
70 ;; (define-key comint-mode-map [(meta n)]
70 ;; (define-key comint-mode-map [(meta n)]
71 ;; 'comint-next-matching-input-from-input)
71 ;; 'comint-next-matching-input-from-input)
72 ;; (define-key comint-mode-map [(control meta n)]
72 ;; (define-key comint-mode-map [(control meta n)]
73 ;; 'comint-next-input)
73 ;; 'comint-next-input)
74 ;; (define-key comint-mode-map [(control meta p)]
74 ;; (define-key comint-mode-map [(control meta p)]
75 ;; 'comint-previous-input)
75 ;; 'comint-previous-input)
76 ;;
76 ;;
77 ;; - Be aware that if you customize py-python-command previously, this value
77 ;; - Be aware that if you customize py-python-command previously, this value
78 ;; will override what ipython.el does (because loading the customization
78 ;; will override what ipython.el does (because loading the customization
79 ;; variables comes later).
79 ;; variables comes later).
80 ;;
80 ;;
81 ;; Please send comments and feedback to the ipython-list
81 ;; Please send comments and feedback to the ipython-list
82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
83 ;; answer them (it helps if you specify your emacs version, OS etc;
83 ;; answer them (it helps if you specify your emacs version, OS etc;
84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
85 ;; speed up things further).
85 ;; speed up things further).
86 ;;
86 ;;
87 ;; Footnotes:
87 ;; Footnotes:
88 ;;
88 ;;
89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
90 ;; you; if required you can also add a new directory. So assuming that
90 ;; you; if required you can also add a new directory. So assuming that
91 ;; ipython.el resides in ~/el/, put this in your emacs:
91 ;; ipython.el resides in ~/el/, put this in your emacs:
92 ;;
92 ;;
93 ;;
93 ;;
94 ;; (add-to-list 'load-path "~/el")
94 ;; (add-to-list 'load-path "~/el")
95 ;; (setq ipython-command "/some-path/ipython")
95 ;; (setq ipython-command "/some-path/ipython")
96 ;; (require 'ipython)
96 ;; (require 'ipython)
97 ;;
97 ;;
98 ;;
98 ;;
99 ;;
99 ;;
100 ;;
100 ;;
101 ;; TODO:
101 ;; TODO:
102 ;; - do autocompletion properly
102 ;; - do autocompletion properly
103 ;; - implement a proper switching between python interpreters
103 ;; - implement a proper switching between python interpreters
104 ;;
104 ;;
105 ;; BUGS:
105 ;; BUGS:
106 ;; - neither::
106 ;; - neither::
107 ;;
107 ;;
108 ;; (py-shell "-c print 'FOOBAR'")
108 ;; (py-shell "-c print 'FOOBAR'")
109 ;;
109 ;;
110 ;; nor::
110 ;; nor::
111 ;;
111 ;;
112 ;; (let ((py-python-command-args (append py-python-command-args
112 ;; (let ((py-python-command-args (append py-python-command-args
113 ;; '("-c" "print 'FOOBAR'"))))
113 ;; '("-c" "print 'FOOBAR'"))))
114 ;; (py-shell))
114 ;; (py-shell))
115 ;;
115 ;;
116 ;; seem to print anything as they should
116 ;; seem to print anything as they should
117 ;;
117 ;;
118 ;; - look into init priority issues with `py-python-command' (if it's set
118 ;; - look into init priority issues with `py-python-command' (if it's set
119 ;; via custom)
119 ;; via custom)
120
120
121
121
122 ;;; Code
122 ;;; Code
123 (require 'cl)
123 (require 'cl)
124 (require 'shell)
124 (require 'shell)
125 (require 'executable)
125 (require 'executable)
126 (require 'ansi-color)
126 (require 'ansi-color)
127
127
128 (defcustom ipython-command "ipython"
128 (defcustom ipython-command "ipython"
129 "*Shell command used to start ipython."
129 "*Shell command used to start ipython."
130 :type 'string
130 :type 'string
131 :group 'python)
131 :group 'python)
132
132
133 ;; Users can set this to nil
133 ;; Users can set this to nil
134 (defvar py-shell-initial-switch-buffers t
134 (defvar py-shell-initial-switch-buffers t
135 "If nil, don't switch to the *Python* buffer on the first call to
135 "If nil, don't switch to the *Python* buffer on the first call to
136 `py-shell'.")
136 `py-shell'.")
137
137
138 (defvar ipython-backup-of-py-python-command nil
138 (defvar ipython-backup-of-py-python-command nil
139 "HACK")
139 "HACK")
140
140
141
141
142 (defvar ipython-de-input-prompt-regexp "\\(?:
142 (defvar ipython-de-input-prompt-regexp "\\(?:
143 In \\[[0-9]+\\]: *.*
143 In \\[[0-9]+\\]: *.*
144 ----+> \\(.*
144 ----+> \\(.*
145 \\)[\n]?\\)\\|\\(?:
145 \\)[\n]?\\)\\|\\(?:
146 In \\[[0-9]+\\]: *\\(.*
146 In \\[[0-9]+\\]: *\\(.*
147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
148 \\)"
148 \\)"
149 "A regular expression to match the IPython input prompt and the python
149 "A regular expression to match the IPython input prompt and the python
150 command after it. The first match group is for a command that is rewritten,
150 command after it. The first match group is for a command that is rewritten,
151 the second for a 'normal' command, and the third for a multiline command.")
151 the second for a 'normal' command, and the third for a multiline command.")
152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
153 "A regular expression to match the output prompt of IPython.")
153 "A regular expression to match the output prompt of IPython.")
154
154
155
155
156 (if (not (executable-find ipython-command))
156 (if (not (executable-find ipython-command))
157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
158 ipython-command))
158 ipython-command))
159 ;; XXX load python-mode, so that we can screw around with its variables
159 ;; XXX load python-mode, so that we can screw around with its variables
160 ;; this has the disadvantage that python-mode is loaded even if no
160 ;; this has the disadvantage that python-mode is loaded even if no
161 ;; python-file is ever edited etc. but it means that `py-shell' works
161 ;; python-file is ever edited etc. but it means that `py-shell' works
162 ;; without loading a python-file first. Obviously screwing around with
162 ;; without loading a python-file first. Obviously screwing around with
163 ;; python-mode's variables like this is a mess, but well.
163 ;; python-mode's variables like this is a mess, but well.
164 (require 'python-mode)
164 (require 'python-mode)
165 ;; turn on ansi colors for ipython and activate completion
165 ;; turn on ansi colors for ipython and activate completion
166 (defun ipython-shell-hook ()
166 (defun ipython-shell-hook ()
167 ;; the following is to synchronize dir-changes
167 ;; the following is to synchronize dir-changes
168 (make-local-variable 'shell-dirstack)
168 (make-local-variable 'shell-dirstack)
169 (setq shell-dirstack nil)
169 (setq shell-dirstack nil)
170 (make-local-variable 'shell-last-dir)
170 (make-local-variable 'shell-last-dir)
171 (setq shell-last-dir nil)
171 (setq shell-last-dir nil)
172 (make-local-variable 'shell-dirtrackp)
172 (make-local-variable 'shell-dirtrackp)
173 (setq shell-dirtrackp t)
173 (setq shell-dirtrackp t)
174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
175
175
176 (ansi-color-for-comint-mode-on)
176 (ansi-color-for-comint-mode-on)
177 (define-key py-shell-map [tab] 'ipython-complete)
177 (define-key py-shell-map [tab] 'ipython-complete)
178 ;;XXX this is really just a cheap hack, it only completes symbols in the
178 ;;XXX this is really just a cheap hack, it only completes symbols in the
179 ;;interactive session -- useful nonetheless.
179 ;;interactive session -- useful nonetheless.
180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
181
181
182 )
182 )
183 (add-hook 'py-shell-hook 'ipython-shell-hook)
183 (add-hook 'py-shell-hook 'ipython-shell-hook)
184 ;; Regular expression that describes tracebacks for IPython in context and
184 ;; Regular expression that describes tracebacks for IPython in context and
185 ;; verbose mode.
185 ;; verbose mode.
186
186
187 ;;Adapt python-mode settings for ipython.
187 ;;Adapt python-mode settings for ipython.
188 ;; (this works for %xmode 'verbose' or 'context')
188 ;; (this works for %xmode 'verbose' or 'context')
189
189
190 ;; XXX putative regexps for syntax errors; unfortunately the
190 ;; XXX putative regexps for syntax errors; unfortunately the
191 ;; current python-mode traceback-line-re scheme is too primitive,
191 ;; current python-mode traceback-line-re scheme is too primitive,
192 ;; so it's either matching syntax errors, *or* everything else
192 ;; so it's either matching syntax errors, *or* everything else
193 ;; (XXX: should ask Fernando for a change)
193 ;; (XXX: should ask Fernando for a change)
194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
196
196
197 (setq py-traceback-line-re
197 (setq py-traceback-line-re
198 "\\(^[^\t ].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\) +")
198 "\\(^[^\t >].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\)+")
199
199
200
200 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
201 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
201 ;;instead of '(Pdb)'
202 ;;instead of '(Pdb)'
202 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]y?db[>)]+ ")
203 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]y?db[>)]+ ")
203 (setq py-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
204 (setq pydb-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
204
205
205 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
206 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
206 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
207 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
207 ;; select a suitable color-scheme
208 ;; select a suitable color-scheme
208 (unless (member "-colors" py-python-command-args)
209 (unless (member "-colors" py-python-command-args)
209 (setq py-python-command-args
210 (setq py-python-command-args
210 (nconc py-python-command-args
211 (nconc py-python-command-args
211 (list "-colors"
212 (list "-colors"
212 (cond
213 (cond
213 ((eq frame-background-mode 'dark)
214 ((eq frame-background-mode 'dark)
214 "DarkBG")
215 "DarkBG")
215 ((eq frame-background-mode 'light)
216 ((eq frame-background-mode 'light)
216 "LightBG")
217 "LightBG")
217 (t ; default (backg-mode isn't always set by XEmacs)
218 (t ; default (backg-mode isn't always set by XEmacs)
218 "LightBG"))))))
219 "LightBG"))))))
219 (unless (equal ipython-backup-of-py-python-command py-python-command)
220 (unless (equal ipython-backup-of-py-python-command py-python-command)
220 (setq ipython-backup-of-py-python-command py-python-command))
221 (setq ipython-backup-of-py-python-command py-python-command))
221 (setq py-python-command ipython-command))
222 (setq py-python-command ipython-command))
222
223
223
224
224 ;; MODIFY py-shell so that it loads the editing history
225 ;; MODIFY py-shell so that it loads the editing history
225 (defadvice py-shell (around py-shell-with-history)
226 (defadvice py-shell (around py-shell-with-history)
226 "Add persistent command-history support (in
227 "Add persistent command-history support (in
227 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
228 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
228 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
229 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
229 buffer already exists."
230 buffer already exists."
230 (if (comint-check-proc "*Python*")
231 (if (comint-check-proc "*Python*")
231 ad-do-it
232 ad-do-it
232 (setq comint-input-ring-file-name
233 (setq comint-input-ring-file-name
233 (if (string-equal py-python-command ipython-command)
234 (if (string-equal py-python-command ipython-command)
234 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
235 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
235 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
236 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
236 (comint-read-input-ring t)
237 (comint-read-input-ring t)
237 (let ((buf (current-buffer)))
238 (let ((buf (current-buffer)))
238 ad-do-it
239 ad-do-it
239 (unless py-shell-initial-switch-buffers
240 (unless py-shell-initial-switch-buffers
240 (switch-to-buffer-other-window buf)))))
241 (switch-to-buffer-other-window buf)))))
241 (ad-activate 'py-shell)
242 (ad-activate 'py-shell)
242 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
243 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
243 ;; "HACK: test that ipython is already running before executing something.
244 ;; "HACK: test that ipython is already running before executing something.
244 ;; Doing this properly seems not worth the bother (unless people actually
245 ;; Doing this properly seems not worth the bother (unless people actually
245 ;; request it)."
246 ;; request it)."
246 ;; (unless (comint-check-proc "*Python*")
247 ;; (unless (comint-check-proc "*Python*")
247 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
248 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
248 ;; (ad-activate 'py-execute-region)
249 ;; (ad-activate 'py-execute-region)
249
250
250 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
251 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
251 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
252 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
252 to python instead of ipython."
253 to python instead of ipython."
253 (let ((py-which-shell (if (and (comint-check-proc "*Python*") (not async))
254 (let ((py-which-shell (if (and (comint-check-proc "*Python*") (not async))
254 py-python-command
255 py-python-command
255 ipython-backup-of-py-python-command)))
256 ipython-backup-of-py-python-command)))
256 ad-do-it))
257 ad-do-it))
257 (ad-activate 'py-execute-region)
258 (ad-activate 'py-execute-region)
258
259
259 (defun ipython-to-doctest (start end)
260 (defun ipython-to-doctest (start end)
260 "Transform a cut-and-pasted bit from an IPython session into something that
261 "Transform a cut-and-pasted bit from an IPython session into something that
261 looks like it came from a normal interactive python session, so that it can
262 looks like it came from a normal interactive python session, so that it can
262 be used in doctests. Example:
263 be used in doctests. Example:
263
264
264
265
265 In [1]: import sys
266 In [1]: import sys
266
267
267 In [2]: sys.stdout.write 'Hi!\n'
268 In [2]: sys.stdout.write 'Hi!\n'
268 ------> sys.stdout.write ('Hi!\n')
269 ------> sys.stdout.write ('Hi!\n')
269 Hi!
270 Hi!
270
271
271 In [3]: 3 + 4
272 In [3]: 3 + 4
272 Out[3]: 7
273 Out[3]: 7
273
274
274 gets converted to:
275 gets converted to:
275
276
276 >>> import sys
277 >>> import sys
277 >>> sys.stdout.write ('Hi!\n')
278 >>> sys.stdout.write ('Hi!\n')
278 Hi!
279 Hi!
279 >>> 3 + 4
280 >>> 3 + 4
280 7
281 7
281
282
282 "
283 "
283 (interactive "*r\n")
284 (interactive "*r\n")
284 ;(message (format "###DEBUG s:%de:%d" start end))
285 ;(message (format "###DEBUG s:%de:%d" start end))
285 (save-excursion
286 (save-excursion
286 (save-match-data
287 (save-match-data
287 ;; replace ``In [3]: bla`` with ``>>> bla`` and
288 ;; replace ``In [3]: bla`` with ``>>> bla`` and
288 ;; ``... : bla`` with ``... bla``
289 ;; ``... : bla`` with ``... bla``
289 (goto-char start)
290 (goto-char start)
290 (while (re-search-forward ipython-de-input-prompt-regexp end t)
291 (while (re-search-forward ipython-de-input-prompt-regexp end t)
291 ;(message "finding 1")
292 ;(message "finding 1")
292 (cond ((match-string 3) ;continued
293 (cond ((match-string 3) ;continued
293 (replace-match "... \\3" t nil))
294 (replace-match "... \\3" t nil))
294 (t
295 (t
295 (replace-match ">>> \\1\\2" t nil))))
296 (replace-match ">>> \\1\\2" t nil))))
296 ;; replace ``
297 ;; replace ``
297 (goto-char start)
298 (goto-char start)
298 (while (re-search-forward ipython-de-output-prompt-regexp end t)
299 (while (re-search-forward ipython-de-output-prompt-regexp end t)
299 (replace-match "" t nil)))))
300 (replace-match "" t nil)))))
300
301
301 (defvar ipython-completion-command-string
302 (defvar ipython-completion-command-string
302 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
303 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
303 "The string send to ipython to query for all possible completions")
304 "The string send to ipython to query for all possible completions")
304
305
305
306
306 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
307 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
307 ;; following wonderful hack to work around this case
308 ;; following wonderful hack to work around this case
308 (if (featurep 'xemacs)
309 (if (featurep 'xemacs)
309 ;;xemacs
310 ;;xemacs
310 (defun ipython-complete ()
311 (defun ipython-complete ()
311 "Try to complete the python symbol before point. Only knows about the stuff
312 "Try to complete the python symbol before point. Only knows about the stuff
312 in the current *Python* session."
313 in the current *Python* session."
313 (interactive)
314 (interactive)
314 (let* ((ugly-return nil)
315 (let* ((ugly-return nil)
315 (sep ";")
316 (sep ";")
316 (python-process (or (get-buffer-process (current-buffer))
317 (python-process (or (get-buffer-process (current-buffer))
317 ;XXX hack for .py buffers
318 ;XXX hack for .py buffers
318 (get-process py-which-bufname)))
319 (get-process py-which-bufname)))
319 ;; XXX currently we go backwards to find the beginning of an
320 ;; XXX currently we go backwards to find the beginning of an
320 ;; expression part; a more powerful approach in the future might be
321 ;; expression part; a more powerful approach in the future might be
321 ;; to let ipython have the complete line, so that context can be used
322 ;; to let ipython have the complete line, so that context can be used
322 ;; to do things like filename completion etc.
323 ;; to do things like filename completion etc.
323 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
324 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
324 (point)))
325 (point)))
325 (end (point))
326 (end (point))
326 (pattern (buffer-substring-no-properties beg end))
327 (pattern (buffer-substring-no-properties beg end))
327 (completions nil)
328 (completions nil)
328 (completion-table nil)
329 (completion-table nil)
329 completion
330 completion
330 (comint-output-filter-functions
331 (comint-output-filter-functions
331 (append comint-output-filter-functions
332 (append comint-output-filter-functions
332 '(ansi-color-filter-apply
333 '(ansi-color-filter-apply
333 (lambda (string)
334 (lambda (string)
334 ;(message (format "DEBUG filtering: %s" string))
335 ;(message (format "DEBUG filtering: %s" string))
335 (setq ugly-return (concat ugly-return string))
336 (setq ugly-return (concat ugly-return string))
336 (delete-region comint-last-output-start
337 (delete-region comint-last-output-start
337 (process-mark (get-buffer-process (current-buffer)))))))))
338 (process-mark (get-buffer-process (current-buffer)))))))))
338 ;(message (format "#DEBUG pattern: '%s'" pattern))
339 ;(message (format "#DEBUG pattern: '%s'" pattern))
339 (process-send-string python-process
340 (process-send-string python-process
340 (format ipython-completion-command-string pattern))
341 (format ipython-completion-command-string pattern))
341 (accept-process-output python-process)
342 (accept-process-output python-process)
342 ;(message (format "DEBUG return: %s" ugly-return))
343 ;(message (format "DEBUG return: %s" ugly-return))
343 (setq completions
344 (setq completions
344 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
345 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
345 (setq completion-table (loop for str in completions
346 (setq completion-table (loop for str in completions
346 collect (list str nil)))
347 collect (list str nil)))
347 (setq completion (try-completion pattern completion-table))
348 (setq completion (try-completion pattern completion-table))
348 (cond ((eq completion t))
349 (cond ((eq completion t))
349 ((null completion)
350 ((null completion)
350 (message "Can't find completion for \"%s\"" pattern)
351 (message "Can't find completion for \"%s\"" pattern)
351 (ding))
352 (ding))
352 ((not (string= pattern completion))
353 ((not (string= pattern completion))
353 (delete-region beg end)
354 (delete-region beg end)
354 (insert completion))
355 (insert completion))
355 (t
356 (t
356 (message "Making completion list...")
357 (message "Making completion list...")
357 (with-output-to-temp-buffer "*Python Completions*"
358 (with-output-to-temp-buffer "*Python Completions*"
358 (display-completion-list (all-completions pattern completion-table)))
359 (display-completion-list (all-completions pattern completion-table)))
359 (message "Making completion list...%s" "done")))))
360 (message "Making completion list...%s" "done")))))
360 ;; emacs
361 ;; emacs
361 (defun ipython-complete ()
362 (defun ipython-complete ()
362 "Try to complete the python symbol before point. Only knows about the stuff
363 "Try to complete the python symbol before point. Only knows about the stuff
363 in the current *Python* session."
364 in the current *Python* session."
364 (interactive)
365 (interactive)
365 (let* ((ugly-return nil)
366 (let* ((ugly-return nil)
366 (sep ";")
367 (sep ";")
367 (python-process (or (get-buffer-process (current-buffer))
368 (python-process (or (get-buffer-process (current-buffer))
368 ;XXX hack for .py buffers
369 ;XXX hack for .py buffers
369 (get-process py-which-bufname)))
370 (get-process py-which-bufname)))
370 ;; XXX currently we go backwards to find the beginning of an
371 ;; XXX currently we go backwards to find the beginning of an
371 ;; expression part; a more powerful approach in the future might be
372 ;; expression part; a more powerful approach in the future might be
372 ;; to let ipython have the complete line, so that context can be used
373 ;; to let ipython have the complete line, so that context can be used
373 ;; to do things like filename completion etc.
374 ;; to do things like filename completion etc.
374 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
375 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
375 (point)))
376 (point)))
376 (end (point))
377 (end (point))
377 (pattern (buffer-substring-no-properties beg end))
378 (pattern (buffer-substring-no-properties beg end))
378 (completions nil)
379 (completions nil)
379 (completion-table nil)
380 (completion-table nil)
380 completion
381 completion
381 (comint-preoutput-filter-functions
382 (comint-preoutput-filter-functions
382 (append comint-preoutput-filter-functions
383 (append comint-preoutput-filter-functions
383 '(ansi-color-filter-apply
384 '(ansi-color-filter-apply
384 (lambda (string)
385 (lambda (string)
385 (setq ugly-return (concat ugly-return string))
386 (setq ugly-return (concat ugly-return string))
386 "")))))
387 "")))))
387 (process-send-string python-process
388 (process-send-string python-process
388 (format ipython-completion-command-string pattern))
389 (format ipython-completion-command-string pattern))
389 (accept-process-output python-process)
390 (accept-process-output python-process)
390 (setq completions
391 (setq completions
391 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
392 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
392 ;(message (format "DEBUG completions: %S" completions))
393 ;(message (format "DEBUG completions: %S" completions))
393 (setq completion-table (loop for str in completions
394 (setq completion-table (loop for str in completions
394 collect (list str nil)))
395 collect (list str nil)))
395 (setq completion (try-completion pattern completion-table))
396 (setq completion (try-completion pattern completion-table))
396 (cond ((eq completion t))
397 (cond ((eq completion t))
397 ((null completion)
398 ((null completion)
398 (message "Can't find completion for \"%s\"" pattern)
399 (message "Can't find completion for \"%s\"" pattern)
399 (ding))
400 (ding))
400 ((not (string= pattern completion))
401 ((not (string= pattern completion))
401 (delete-region beg end)
402 (delete-region beg end)
402 (insert completion))
403 (insert completion))
403 (t
404 (t
404 (message "Making completion list...")
405 (message "Making completion list...")
405 (with-output-to-temp-buffer "*IPython Completions*"
406 (with-output-to-temp-buffer "*IPython Completions*"
406 (display-completion-list (all-completions pattern completion-table)))
407 (display-completion-list (all-completions pattern completion-table)))
407 (message "Making completion list...%s" "done")))))
408 (message "Making completion list...%s" "done")))))
408 )
409 )
409
410
410 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
411 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
411 ;;; originally written by doxgen@newsmth.net
412 ;;; originally written by doxgen@newsmth.net
412 ;;; Minor modifications by fperez for xemacs compatibility.
413 ;;; Minor modifications by fperez for xemacs compatibility.
413
414
414 (defvar ipython-autoindent t
415 (defvar ipython-autoindent t
415 "If non-nil, enable autoindent for IPython shell through python-mode.")
416 "If non-nil, enable autoindent for IPython shell through python-mode.")
416
417
417 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
418 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
418 "Temporary buffer for indenting multiline statement.")
419 "Temporary buffer for indenting multiline statement.")
419
420
420 (defun ipython-get-indenting-buffer ()
421 (defun ipython-get-indenting-buffer ()
421 "Return a temporary buffer set in python-mode. Create one if necessary."
422 "Return a temporary buffer set in python-mode. Create one if necessary."
422 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
423 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
423 (set-buffer buf)
424 (set-buffer buf)
424 (unless (eq major-mode 'python-mode)
425 (unless (eq major-mode 'python-mode)
425 (python-mode))
426 (python-mode))
426 buf))
427 buf))
427
428
428 (defvar ipython-indentation-string nil
429 (defvar ipython-indentation-string nil
429 "Indentation for the next line in a multiline statement.")
430 "Indentation for the next line in a multiline statement.")
430
431
431 (defun ipython-send-and-indent ()
432 (defun ipython-send-and-indent ()
432 "Send the current line to IPython, and calculate the indentation for
433 "Send the current line to IPython, and calculate the indentation for
433 the next line."
434 the next line."
434 (interactive)
435 (interactive)
435 (if ipython-autoindent
436 (if ipython-autoindent
436 (let ((line (buffer-substring (point-at-bol) (point)))
437 (let ((line (buffer-substring (point-at-bol) (point)))
437 (after-prompt1)
438 (after-prompt1)
438 (after-prompt2))
439 (after-prompt2))
439 (save-excursion
440 (save-excursion
440 (comint-bol t)
441 (comint-bol t)
441 (if (looking-at py-shell-input-prompt-1-regexp)
442 (if (looking-at py-shell-input-prompt-1-regexp)
442 (setq after-prompt1 t)
443 (setq after-prompt1 t)
443 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
444 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
444 (with-current-buffer (ipython-get-indenting-buffer)
445 (with-current-buffer (ipython-get-indenting-buffer)
445 (when after-prompt1
446 (when after-prompt1
446 (erase-buffer))
447 (erase-buffer))
447 (when (or after-prompt1 after-prompt2)
448 (when (or after-prompt1 after-prompt2)
448 (delete-region (point-at-bol) (point))
449 (delete-region (point-at-bol) (point))
449 (insert line)
450 (insert line)
450 (newline-and-indent))))))
451 (newline-and-indent))))))
451 ;; send input line to ipython interpreter
452 ;; send input line to ipython interpreter
452 (comint-send-input))
453 (comint-send-input))
453
454
454 (defun ipython-indentation-hook (string)
455 (defun ipython-indentation-hook (string)
455 "Insert indentation string if py-shell-input-prompt-2-regexp
456 "Insert indentation string if py-shell-input-prompt-2-regexp
456 matches last process output."
457 matches last process output."
457 (let* ((start-marker (or comint-last-output-start
458 (let* ((start-marker (or comint-last-output-start
458 (point-min-marker)))
459 (point-min-marker)))
459 (end-marker (process-mark (get-buffer-process (current-buffer))))
460 (end-marker (process-mark (get-buffer-process (current-buffer))))
460 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
461 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
461 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
462 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
462 (when (and (string-match py-shell-input-prompt-2-regexp text)
463 (when (and (string-match py-shell-input-prompt-2-regexp text)
463 (not (string-match "\n$" text)))
464 (not (string-match "\n$" text)))
464 (with-current-buffer (ipython-get-indenting-buffer)
465 (with-current-buffer (ipython-get-indenting-buffer)
465 (setq ipython-indentation-string
466 (setq ipython-indentation-string
466 (buffer-substring (point-at-bol) (point))))
467 (buffer-substring (point-at-bol) (point))))
467 (goto-char end-marker)
468 (goto-char end-marker)
468 (insert ipython-indentation-string)
469 (insert ipython-indentation-string)
469 (setq ipython-indentation-string nil))))
470 (setq ipython-indentation-string nil))))
470
471
471 (add-hook 'py-shell-hook
472 (add-hook 'py-shell-hook
472 (lambda ()
473 (lambda ()
473 (add-hook 'comint-output-filter-functions
474 (add-hook 'comint-output-filter-functions
474 'ipython-indentation-hook)))
475 'ipython-indentation-hook)))
475
476
476 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
477 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
477 ;;; / end autoindent support
478 ;;; / end autoindent support
478
479
479 (provide 'ipython)
480 (provide 'ipython)
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now