##// END OF EJS Templates
make_quoted_expr no longer uses itpl (fix e.g. mkdir auml unicode problems)
vivainio -
Show More
@@ -1,1947 +1,1947 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 2763 2007-09-14 06:35:44Z fperez $"""
8 $Id: genutils.py 2767 2007-09-18 17:26:52Z vivainio $"""
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 doctest
25 import doctest
26 import os
26 import os
27 import re
27 import re
28 import shlex
28 import shlex
29 import shutil
29 import shutil
30 import sys
30 import sys
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import types
33 import types
34 import warnings
34 import warnings
35
35
36 # Other IPython utilities
36 # Other IPython utilities
37 import IPython
37 import IPython
38 from IPython.Itpl import Itpl,itpl,printpl
38 from IPython.Itpl import Itpl,itpl,printpl
39 from IPython import DPyGetOpt, platutils
39 from IPython import DPyGetOpt, platutils
40 from IPython.generics import result_display
40 from IPython.generics import result_display
41 from path import path
41 from path import path
42 if os.name == "nt":
42 if os.name == "nt":
43 from IPython.winconsole import get_console_size
43 from IPython.winconsole import get_console_size
44
44
45 #****************************************************************************
45 #****************************************************************************
46 # Exceptions
46 # Exceptions
47 class Error(Exception):
47 class Error(Exception):
48 """Base class for exceptions in this module."""
48 """Base class for exceptions in this module."""
49 pass
49 pass
50
50
51 #----------------------------------------------------------------------------
51 #----------------------------------------------------------------------------
52 class IOStream:
52 class IOStream:
53 def __init__(self,stream,fallback):
53 def __init__(self,stream,fallback):
54 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
54 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
55 stream = fallback
55 stream = fallback
56 self.stream = stream
56 self.stream = stream
57 self._swrite = stream.write
57 self._swrite = stream.write
58 self.flush = stream.flush
58 self.flush = stream.flush
59
59
60 def write(self,data):
60 def write(self,data):
61 try:
61 try:
62 self._swrite(data)
62 self._swrite(data)
63 except:
63 except:
64 try:
64 try:
65 # print handles some unicode issues which may trip a plain
65 # print handles some unicode issues which may trip a plain
66 # write() call. Attempt to emulate write() by using a
66 # write() call. Attempt to emulate write() by using a
67 # trailing comma
67 # trailing comma
68 print >> self.stream, data,
68 print >> self.stream, data,
69 except:
69 except:
70 # if we get here, something is seriously broken.
70 # if we get here, something is seriously broken.
71 print >> sys.stderr, \
71 print >> sys.stderr, \
72 'ERROR - failed to write data to stream:', self.stream
72 'ERROR - failed to write data to stream:', self.stream
73
73
74 def close(self):
74 def close(self):
75 pass
75 pass
76
76
77
77
78 class IOTerm:
78 class IOTerm:
79 """ Term holds the file or file-like objects for handling I/O operations.
79 """ Term holds the file or file-like objects for handling I/O operations.
80
80
81 These are normally just sys.stdin, sys.stdout and sys.stderr but for
81 These are normally just sys.stdin, sys.stdout and sys.stderr but for
82 Windows they can can replaced to allow editing the strings before they are
82 Windows they can can replaced to allow editing the strings before they are
83 displayed."""
83 displayed."""
84
84
85 # In the future, having IPython channel all its I/O operations through
85 # In the future, having IPython channel all its I/O operations through
86 # this class will make it easier to embed it into other environments which
86 # this class will make it easier to embed it into other environments which
87 # are not a normal terminal (such as a GUI-based shell)
87 # are not a normal terminal (such as a GUI-based shell)
88 def __init__(self,cin=None,cout=None,cerr=None):
88 def __init__(self,cin=None,cout=None,cerr=None):
89 self.cin = IOStream(cin,sys.stdin)
89 self.cin = IOStream(cin,sys.stdin)
90 self.cout = IOStream(cout,sys.stdout)
90 self.cout = IOStream(cout,sys.stdout)
91 self.cerr = IOStream(cerr,sys.stderr)
91 self.cerr = IOStream(cerr,sys.stderr)
92
92
93 # Global variable to be used for all I/O
93 # Global variable to be used for all I/O
94 Term = IOTerm()
94 Term = IOTerm()
95
95
96 import IPython.rlineimpl as readline
96 import IPython.rlineimpl as readline
97 # Remake Term to use the readline i/o facilities
97 # Remake Term to use the readline i/o facilities
98 if sys.platform == 'win32' and readline.have_readline:
98 if sys.platform == 'win32' and readline.have_readline:
99
99
100 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
100 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
101
101
102
102
103 #****************************************************************************
103 #****************************************************************************
104 # Generic warning/error printer, used by everything else
104 # Generic warning/error printer, used by everything else
105 def warn(msg,level=2,exit_val=1):
105 def warn(msg,level=2,exit_val=1):
106 """Standard warning printer. Gives formatting consistency.
106 """Standard warning printer. Gives formatting consistency.
107
107
108 Output is sent to Term.cerr (sys.stderr by default).
108 Output is sent to Term.cerr (sys.stderr by default).
109
109
110 Options:
110 Options:
111
111
112 -level(2): allows finer control:
112 -level(2): allows finer control:
113 0 -> Do nothing, dummy function.
113 0 -> Do nothing, dummy function.
114 1 -> Print message.
114 1 -> Print message.
115 2 -> Print 'WARNING:' + message. (Default level).
115 2 -> Print 'WARNING:' + message. (Default level).
116 3 -> Print 'ERROR:' + message.
116 3 -> Print 'ERROR:' + message.
117 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
117 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
118
118
119 -exit_val (1): exit value returned by sys.exit() for a level 4
119 -exit_val (1): exit value returned by sys.exit() for a level 4
120 warning. Ignored for all other levels."""
120 warning. Ignored for all other levels."""
121
121
122 if level>0:
122 if level>0:
123 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
123 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
124 print >> Term.cerr, '%s%s' % (header[level],msg)
124 print >> Term.cerr, '%s%s' % (header[level],msg)
125 if level == 4:
125 if level == 4:
126 print >> Term.cerr,'Exiting.\n'
126 print >> Term.cerr,'Exiting.\n'
127 sys.exit(exit_val)
127 sys.exit(exit_val)
128
128
129 def info(msg):
129 def info(msg):
130 """Equivalent to warn(msg,level=1)."""
130 """Equivalent to warn(msg,level=1)."""
131
131
132 warn(msg,level=1)
132 warn(msg,level=1)
133
133
134 def error(msg):
134 def error(msg):
135 """Equivalent to warn(msg,level=3)."""
135 """Equivalent to warn(msg,level=3)."""
136
136
137 warn(msg,level=3)
137 warn(msg,level=3)
138
138
139 def fatal(msg,exit_val=1):
139 def fatal(msg,exit_val=1):
140 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
140 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
141
141
142 warn(msg,exit_val=exit_val,level=4)
142 warn(msg,exit_val=exit_val,level=4)
143
143
144 #---------------------------------------------------------------------------
144 #---------------------------------------------------------------------------
145 # Debugging routines
145 # Debugging routines
146 #
146 #
147 def debugx(expr,pre_msg=''):
147 def debugx(expr,pre_msg=''):
148 """Print the value of an expression from the caller's frame.
148 """Print the value of an expression from the caller's frame.
149
149
150 Takes an expression, evaluates it in the caller's frame and prints both
150 Takes an expression, evaluates it in the caller's frame and prints both
151 the given expression and the resulting value (as well as a debug mark
151 the given expression and the resulting value (as well as a debug mark
152 indicating the name of the calling function. The input must be of a form
152 indicating the name of the calling function. The input must be of a form
153 suitable for eval().
153 suitable for eval().
154
154
155 An optional message can be passed, which will be prepended to the printed
155 An optional message can be passed, which will be prepended to the printed
156 expr->value pair."""
156 expr->value pair."""
157
157
158 cf = sys._getframe(1)
158 cf = sys._getframe(1)
159 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
159 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
160 eval(expr,cf.f_globals,cf.f_locals))
160 eval(expr,cf.f_globals,cf.f_locals))
161
161
162 # deactivate it by uncommenting the following line, which makes it a no-op
162 # deactivate it by uncommenting the following line, which makes it a no-op
163 #def debugx(expr,pre_msg=''): pass
163 #def debugx(expr,pre_msg=''): pass
164
164
165 #----------------------------------------------------------------------------
165 #----------------------------------------------------------------------------
166 StringTypes = types.StringTypes
166 StringTypes = types.StringTypes
167
167
168 # Basic timing functionality
168 # Basic timing functionality
169
169
170 # If possible (Unix), use the resource module instead of time.clock()
170 # If possible (Unix), use the resource module instead of time.clock()
171 try:
171 try:
172 import resource
172 import resource
173 def clocku():
173 def clocku():
174 """clocku() -> floating point number
174 """clocku() -> floating point number
175
175
176 Return the *USER* CPU time in seconds since the start of the process.
176 Return the *USER* CPU time in seconds since the start of the process.
177 This is done via a call to resource.getrusage, so it avoids the
177 This is done via a call to resource.getrusage, so it avoids the
178 wraparound problems in time.clock()."""
178 wraparound problems in time.clock()."""
179
179
180 return resource.getrusage(resource.RUSAGE_SELF)[0]
180 return resource.getrusage(resource.RUSAGE_SELF)[0]
181
181
182 def clocks():
182 def clocks():
183 """clocks() -> floating point number
183 """clocks() -> floating point number
184
184
185 Return the *SYSTEM* CPU time in seconds since the start of the process.
185 Return the *SYSTEM* CPU time in seconds since the start of the process.
186 This is done via a call to resource.getrusage, so it avoids the
186 This is done via a call to resource.getrusage, so it avoids the
187 wraparound problems in time.clock()."""
187 wraparound problems in time.clock()."""
188
188
189 return resource.getrusage(resource.RUSAGE_SELF)[1]
189 return resource.getrusage(resource.RUSAGE_SELF)[1]
190
190
191 def clock():
191 def clock():
192 """clock() -> floating point number
192 """clock() -> floating point number
193
193
194 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
194 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
195 the process. This is done via a call to resource.getrusage, so it
195 the process. This is done via a call to resource.getrusage, so it
196 avoids the wraparound problems in time.clock()."""
196 avoids the wraparound problems in time.clock()."""
197
197
198 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
198 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
199 return u+s
199 return u+s
200
200
201 def clock2():
201 def clock2():
202 """clock2() -> (t_user,t_system)
202 """clock2() -> (t_user,t_system)
203
203
204 Similar to clock(), but return a tuple of user/system times."""
204 Similar to clock(), but return a tuple of user/system times."""
205 return resource.getrusage(resource.RUSAGE_SELF)[:2]
205 return resource.getrusage(resource.RUSAGE_SELF)[:2]
206
206
207 except ImportError:
207 except ImportError:
208 # There is no distinction of user/system time under windows, so we just use
208 # There is no distinction of user/system time under windows, so we just use
209 # time.clock() for everything...
209 # time.clock() for everything...
210 clocku = clocks = clock = time.clock
210 clocku = clocks = clock = time.clock
211 def clock2():
211 def clock2():
212 """Under windows, system CPU time can't be measured.
212 """Under windows, system CPU time can't be measured.
213
213
214 This just returns clock() and zero."""
214 This just returns clock() and zero."""
215 return time.clock(),0.0
215 return time.clock(),0.0
216
216
217 def timings_out(reps,func,*args,**kw):
217 def timings_out(reps,func,*args,**kw):
218 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
218 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
219
219
220 Execute a function reps times, return a tuple with the elapsed total
220 Execute a function reps times, return a tuple with the elapsed total
221 CPU time in seconds, the time per call and the function's output.
221 CPU time in seconds, the time per call and the function's output.
222
222
223 Under Unix, the return value is the sum of user+system time consumed by
223 Under Unix, the return value is the sum of user+system time consumed by
224 the process, computed via the resource module. This prevents problems
224 the process, computed via the resource module. This prevents problems
225 related to the wraparound effect which the time.clock() function has.
225 related to the wraparound effect which the time.clock() function has.
226
226
227 Under Windows the return value is in wall clock seconds. See the
227 Under Windows the return value is in wall clock seconds. See the
228 documentation for the time module for more details."""
228 documentation for the time module for more details."""
229
229
230 reps = int(reps)
230 reps = int(reps)
231 assert reps >=1, 'reps must be >= 1'
231 assert reps >=1, 'reps must be >= 1'
232 if reps==1:
232 if reps==1:
233 start = clock()
233 start = clock()
234 out = func(*args,**kw)
234 out = func(*args,**kw)
235 tot_time = clock()-start
235 tot_time = clock()-start
236 else:
236 else:
237 rng = xrange(reps-1) # the last time is executed separately to store output
237 rng = xrange(reps-1) # the last time is executed separately to store output
238 start = clock()
238 start = clock()
239 for dummy in rng: func(*args,**kw)
239 for dummy in rng: func(*args,**kw)
240 out = func(*args,**kw) # one last time
240 out = func(*args,**kw) # one last time
241 tot_time = clock()-start
241 tot_time = clock()-start
242 av_time = tot_time / reps
242 av_time = tot_time / reps
243 return tot_time,av_time,out
243 return tot_time,av_time,out
244
244
245 def timings(reps,func,*args,**kw):
245 def timings(reps,func,*args,**kw):
246 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
246 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
247
247
248 Execute a function reps times, return a tuple with the elapsed total CPU
248 Execute a function reps times, return a tuple with the elapsed total CPU
249 time in seconds and the time per call. These are just the first two values
249 time in seconds and the time per call. These are just the first two values
250 in timings_out()."""
250 in timings_out()."""
251
251
252 return timings_out(reps,func,*args,**kw)[0:2]
252 return timings_out(reps,func,*args,**kw)[0:2]
253
253
254 def timing(func,*args,**kw):
254 def timing(func,*args,**kw):
255 """timing(func,*args,**kw) -> t_total
255 """timing(func,*args,**kw) -> t_total
256
256
257 Execute a function once, return the elapsed total CPU time in
257 Execute a function once, return the elapsed total CPU time in
258 seconds. This is just the first value in timings_out()."""
258 seconds. This is just the first value in timings_out()."""
259
259
260 return timings_out(1,func,*args,**kw)[0]
260 return timings_out(1,func,*args,**kw)[0]
261
261
262 #****************************************************************************
262 #****************************************************************************
263 # file and system
263 # file and system
264
264
265 def arg_split(s,posix=False):
265 def arg_split(s,posix=False):
266 """Split a command line's arguments in a shell-like manner.
266 """Split a command line's arguments in a shell-like manner.
267
267
268 This is a modified version of the standard library's shlex.split()
268 This is a modified version of the standard library's shlex.split()
269 function, but with a default of posix=False for splitting, so that quotes
269 function, but with a default of posix=False for splitting, so that quotes
270 in inputs are respected."""
270 in inputs are respected."""
271
271
272 # XXX - there may be unicode-related problems here!!! I'm not sure that
272 # XXX - there may be unicode-related problems here!!! I'm not sure that
273 # shlex is truly unicode-safe, so it might be necessary to do
273 # shlex is truly unicode-safe, so it might be necessary to do
274 #
274 #
275 # s = s.encode(sys.stdin.encoding)
275 # s = s.encode(sys.stdin.encoding)
276 #
276 #
277 # first, to ensure that shlex gets a normal string. Input from anyone who
277 # first, to ensure that shlex gets a normal string. Input from anyone who
278 # knows more about unicode and shlex than I would be good to have here...
278 # knows more about unicode and shlex than I would be good to have here...
279 lex = shlex.shlex(s, posix=posix)
279 lex = shlex.shlex(s, posix=posix)
280 lex.whitespace_split = True
280 lex.whitespace_split = True
281 return list(lex)
281 return list(lex)
282
282
283 def system(cmd,verbose=0,debug=0,header=''):
283 def system(cmd,verbose=0,debug=0,header=''):
284 """Execute a system command, return its exit status.
284 """Execute a system command, return its exit status.
285
285
286 Options:
286 Options:
287
287
288 - verbose (0): print the command to be executed.
288 - verbose (0): print the command to be executed.
289
289
290 - debug (0): only print, do not actually execute.
290 - debug (0): only print, do not actually execute.
291
291
292 - header (''): Header to print on screen prior to the executed command (it
292 - header (''): Header to print on screen prior to the executed command (it
293 is only prepended to the command, no newlines are added).
293 is only prepended to the command, no newlines are added).
294
294
295 Note: a stateful version of this function is available through the
295 Note: a stateful version of this function is available through the
296 SystemExec class."""
296 SystemExec class."""
297
297
298 stat = 0
298 stat = 0
299 if verbose or debug: print header+cmd
299 if verbose or debug: print header+cmd
300 sys.stdout.flush()
300 sys.stdout.flush()
301 if not debug: stat = os.system(cmd)
301 if not debug: stat = os.system(cmd)
302 return stat
302 return stat
303
303
304 def abbrev_cwd():
304 def abbrev_cwd():
305 """ Return abbreviated version of cwd, e.g. d:mydir """
305 """ Return abbreviated version of cwd, e.g. d:mydir """
306 cwd = os.getcwd()
306 cwd = os.getcwd()
307 drivepart = ''
307 drivepart = ''
308 if sys.platform == 'win32':
308 if sys.platform == 'win32':
309 if len(cwd) < 4:
309 if len(cwd) < 4:
310 return cwd
310 return cwd
311 drivepart = os.path.splitdrive(cwd)[0]
311 drivepart = os.path.splitdrive(cwd)[0]
312 return (drivepart + (
312 return (drivepart + (
313 cwd == '/' and '/' or \
313 cwd == '/' and '/' or \
314 os.path.basename(cwd)))
314 os.path.basename(cwd)))
315
315
316
316
317 # This function is used by ipython in a lot of places to make system calls.
317 # This function is used by ipython in a lot of places to make system calls.
318 # We need it to be slightly different under win32, due to the vagaries of
318 # We need it to be slightly different under win32, due to the vagaries of
319 # 'network shares'. A win32 override is below.
319 # 'network shares'. A win32 override is below.
320
320
321 def shell(cmd,verbose=0,debug=0,header=''):
321 def shell(cmd,verbose=0,debug=0,header=''):
322 """Execute a command in the system shell, always return None.
322 """Execute a command in the system shell, always return None.
323
323
324 Options:
324 Options:
325
325
326 - verbose (0): print the command to be executed.
326 - verbose (0): print the command to be executed.
327
327
328 - debug (0): only print, do not actually execute.
328 - debug (0): only print, do not actually execute.
329
329
330 - header (''): Header to print on screen prior to the executed command (it
330 - header (''): Header to print on screen prior to the executed command (it
331 is only prepended to the command, no newlines are added).
331 is only prepended to the command, no newlines are added).
332
332
333 Note: this is similar to genutils.system(), but it returns None so it can
333 Note: this is similar to genutils.system(), but it returns None so it can
334 be conveniently used in interactive loops without getting the return value
334 be conveniently used in interactive loops without getting the return value
335 (typically 0) printed many times."""
335 (typically 0) printed many times."""
336
336
337 stat = 0
337 stat = 0
338 if verbose or debug: print header+cmd
338 if verbose or debug: print header+cmd
339 # flush stdout so we don't mangle python's buffering
339 # flush stdout so we don't mangle python's buffering
340 sys.stdout.flush()
340 sys.stdout.flush()
341
341
342 if not debug:
342 if not debug:
343 platutils.set_term_title("IPy " + cmd)
343 platutils.set_term_title("IPy " + cmd)
344 os.system(cmd)
344 os.system(cmd)
345 platutils.set_term_title("IPy " + abbrev_cwd())
345 platutils.set_term_title("IPy " + abbrev_cwd())
346
346
347 # override shell() for win32 to deal with network shares
347 # override shell() for win32 to deal with network shares
348 if os.name in ('nt','dos'):
348 if os.name in ('nt','dos'):
349
349
350 shell_ori = shell
350 shell_ori = shell
351
351
352 def shell(cmd,verbose=0,debug=0,header=''):
352 def shell(cmd,verbose=0,debug=0,header=''):
353 if os.getcwd().startswith(r"\\"):
353 if os.getcwd().startswith(r"\\"):
354 path = os.getcwd()
354 path = os.getcwd()
355 # change to c drive (cannot be on UNC-share when issuing os.system,
355 # change to c drive (cannot be on UNC-share when issuing os.system,
356 # as cmd.exe cannot handle UNC addresses)
356 # as cmd.exe cannot handle UNC addresses)
357 os.chdir("c:")
357 os.chdir("c:")
358 # issue pushd to the UNC-share and then run the command
358 # issue pushd to the UNC-share and then run the command
359 try:
359 try:
360 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
360 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
361 finally:
361 finally:
362 os.chdir(path)
362 os.chdir(path)
363 else:
363 else:
364 shell_ori(cmd,verbose,debug,header)
364 shell_ori(cmd,verbose,debug,header)
365
365
366 shell.__doc__ = shell_ori.__doc__
366 shell.__doc__ = shell_ori.__doc__
367
367
368 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
368 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
369 """Dummy substitute for perl's backquotes.
369 """Dummy substitute for perl's backquotes.
370
370
371 Executes a command and returns the output.
371 Executes a command and returns the output.
372
372
373 Accepts the same arguments as system(), plus:
373 Accepts the same arguments as system(), plus:
374
374
375 - split(0): if true, the output is returned as a list split on newlines.
375 - split(0): if true, the output is returned as a list split on newlines.
376
376
377 Note: a stateful version of this function is available through the
377 Note: a stateful version of this function is available through the
378 SystemExec class.
378 SystemExec class.
379
379
380 This is pretty much deprecated and rarely used,
380 This is pretty much deprecated and rarely used,
381 genutils.getoutputerror may be what you need.
381 genutils.getoutputerror may be what you need.
382
382
383 """
383 """
384
384
385 if verbose or debug: print header+cmd
385 if verbose or debug: print header+cmd
386 if not debug:
386 if not debug:
387 output = os.popen(cmd).read()
387 output = os.popen(cmd).read()
388 # stipping last \n is here for backwards compat.
388 # stipping last \n is here for backwards compat.
389 if output.endswith('\n'):
389 if output.endswith('\n'):
390 output = output[:-1]
390 output = output[:-1]
391 if split:
391 if split:
392 return output.split('\n')
392 return output.split('\n')
393 else:
393 else:
394 return output
394 return output
395
395
396 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
396 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
397 """Return (standard output,standard error) of executing cmd in a shell.
397 """Return (standard output,standard error) of executing cmd in a shell.
398
398
399 Accepts the same arguments as system(), plus:
399 Accepts the same arguments as system(), plus:
400
400
401 - split(0): if true, each of stdout/err is returned as a list split on
401 - split(0): if true, each of stdout/err is returned as a list split on
402 newlines.
402 newlines.
403
403
404 Note: a stateful version of this function is available through the
404 Note: a stateful version of this function is available through the
405 SystemExec class."""
405 SystemExec class."""
406
406
407 if verbose or debug: print header+cmd
407 if verbose or debug: print header+cmd
408 if not cmd:
408 if not cmd:
409 if split:
409 if split:
410 return [],[]
410 return [],[]
411 else:
411 else:
412 return '',''
412 return '',''
413 if not debug:
413 if not debug:
414 pin,pout,perr = os.popen3(cmd)
414 pin,pout,perr = os.popen3(cmd)
415 tout = pout.read().rstrip()
415 tout = pout.read().rstrip()
416 terr = perr.read().rstrip()
416 terr = perr.read().rstrip()
417 pin.close()
417 pin.close()
418 pout.close()
418 pout.close()
419 perr.close()
419 perr.close()
420 if split:
420 if split:
421 return tout.split('\n'),terr.split('\n')
421 return tout.split('\n'),terr.split('\n')
422 else:
422 else:
423 return tout,terr
423 return tout,terr
424
424
425 # for compatibility with older naming conventions
425 # for compatibility with older naming conventions
426 xsys = system
426 xsys = system
427 bq = getoutput
427 bq = getoutput
428
428
429 class SystemExec:
429 class SystemExec:
430 """Access the system and getoutput functions through a stateful interface.
430 """Access the system and getoutput functions through a stateful interface.
431
431
432 Note: here we refer to the system and getoutput functions from this
432 Note: here we refer to the system and getoutput functions from this
433 library, not the ones from the standard python library.
433 library, not the ones from the standard python library.
434
434
435 This class offers the system and getoutput functions as methods, but the
435 This class offers the system and getoutput functions as methods, but the
436 verbose, debug and header parameters can be set for the instance (at
436 verbose, debug and header parameters can be set for the instance (at
437 creation time or later) so that they don't need to be specified on each
437 creation time or later) so that they don't need to be specified on each
438 call.
438 call.
439
439
440 For efficiency reasons, there's no way to override the parameters on a
440 For efficiency reasons, there's no way to override the parameters on a
441 per-call basis other than by setting instance attributes. If you need
441 per-call basis other than by setting instance attributes. If you need
442 local overrides, it's best to directly call system() or getoutput().
442 local overrides, it's best to directly call system() or getoutput().
443
443
444 The following names are provided as alternate options:
444 The following names are provided as alternate options:
445 - xsys: alias to system
445 - xsys: alias to system
446 - bq: alias to getoutput
446 - bq: alias to getoutput
447
447
448 An instance can then be created as:
448 An instance can then be created as:
449 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
449 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
450
450
451 And used as:
451 And used as:
452 >>> sysexec.xsys('pwd')
452 >>> sysexec.xsys('pwd')
453 >>> dirlist = sysexec.bq('ls -l')
453 >>> dirlist = sysexec.bq('ls -l')
454 """
454 """
455
455
456 def __init__(self,verbose=0,debug=0,header='',split=0):
456 def __init__(self,verbose=0,debug=0,header='',split=0):
457 """Specify the instance's values for verbose, debug and header."""
457 """Specify the instance's values for verbose, debug and header."""
458 setattr_list(self,'verbose debug header split')
458 setattr_list(self,'verbose debug header split')
459
459
460 def system(self,cmd):
460 def system(self,cmd):
461 """Stateful interface to system(), with the same keyword parameters."""
461 """Stateful interface to system(), with the same keyword parameters."""
462
462
463 system(cmd,self.verbose,self.debug,self.header)
463 system(cmd,self.verbose,self.debug,self.header)
464
464
465 def shell(self,cmd):
465 def shell(self,cmd):
466 """Stateful interface to shell(), with the same keyword parameters."""
466 """Stateful interface to shell(), with the same keyword parameters."""
467
467
468 shell(cmd,self.verbose,self.debug,self.header)
468 shell(cmd,self.verbose,self.debug,self.header)
469
469
470 xsys = system # alias
470 xsys = system # alias
471
471
472 def getoutput(self,cmd):
472 def getoutput(self,cmd):
473 """Stateful interface to getoutput()."""
473 """Stateful interface to getoutput()."""
474
474
475 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
475 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
476
476
477 def getoutputerror(self,cmd):
477 def getoutputerror(self,cmd):
478 """Stateful interface to getoutputerror()."""
478 """Stateful interface to getoutputerror()."""
479
479
480 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
480 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
481
481
482 bq = getoutput # alias
482 bq = getoutput # alias
483
483
484 #-----------------------------------------------------------------------------
484 #-----------------------------------------------------------------------------
485 def mutex_opts(dict,ex_op):
485 def mutex_opts(dict,ex_op):
486 """Check for presence of mutually exclusive keys in a dict.
486 """Check for presence of mutually exclusive keys in a dict.
487
487
488 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
488 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
489 for op1,op2 in ex_op:
489 for op1,op2 in ex_op:
490 if op1 in dict and op2 in dict:
490 if op1 in dict and op2 in dict:
491 raise ValueError,'\n*** ERROR in Arguments *** '\
491 raise ValueError,'\n*** ERROR in Arguments *** '\
492 'Options '+op1+' and '+op2+' are mutually exclusive.'
492 'Options '+op1+' and '+op2+' are mutually exclusive.'
493
493
494 #-----------------------------------------------------------------------------
494 #-----------------------------------------------------------------------------
495 def get_py_filename(name):
495 def get_py_filename(name):
496 """Return a valid python filename in the current directory.
496 """Return a valid python filename in the current directory.
497
497
498 If the given name is not a file, it adds '.py' and searches again.
498 If the given name is not a file, it adds '.py' and searches again.
499 Raises IOError with an informative message if the file isn't found."""
499 Raises IOError with an informative message if the file isn't found."""
500
500
501 name = os.path.expanduser(name)
501 name = os.path.expanduser(name)
502 if not os.path.isfile(name) and not name.endswith('.py'):
502 if not os.path.isfile(name) and not name.endswith('.py'):
503 name += '.py'
503 name += '.py'
504 if os.path.isfile(name):
504 if os.path.isfile(name):
505 return name
505 return name
506 else:
506 else:
507 raise IOError,'File `%s` not found.' % name
507 raise IOError,'File `%s` not found.' % name
508
508
509 #-----------------------------------------------------------------------------
509 #-----------------------------------------------------------------------------
510 def filefind(fname,alt_dirs = None):
510 def filefind(fname,alt_dirs = None):
511 """Return the given filename either in the current directory, if it
511 """Return the given filename either in the current directory, if it
512 exists, or in a specified list of directories.
512 exists, or in a specified list of directories.
513
513
514 ~ expansion is done on all file and directory names.
514 ~ expansion is done on all file and directory names.
515
515
516 Upon an unsuccessful search, raise an IOError exception."""
516 Upon an unsuccessful search, raise an IOError exception."""
517
517
518 if alt_dirs is None:
518 if alt_dirs is None:
519 try:
519 try:
520 alt_dirs = get_home_dir()
520 alt_dirs = get_home_dir()
521 except HomeDirError:
521 except HomeDirError:
522 alt_dirs = os.getcwd()
522 alt_dirs = os.getcwd()
523 search = [fname] + list_strings(alt_dirs)
523 search = [fname] + list_strings(alt_dirs)
524 search = map(os.path.expanduser,search)
524 search = map(os.path.expanduser,search)
525 #print 'search list for',fname,'list:',search # dbg
525 #print 'search list for',fname,'list:',search # dbg
526 fname = search[0]
526 fname = search[0]
527 if os.path.isfile(fname):
527 if os.path.isfile(fname):
528 return fname
528 return fname
529 for direc in search[1:]:
529 for direc in search[1:]:
530 testname = os.path.join(direc,fname)
530 testname = os.path.join(direc,fname)
531 #print 'testname',testname # dbg
531 #print 'testname',testname # dbg
532 if os.path.isfile(testname):
532 if os.path.isfile(testname):
533 return testname
533 return testname
534 raise IOError,'File' + `fname` + \
534 raise IOError,'File' + `fname` + \
535 ' not found in current or supplied directories:' + `alt_dirs`
535 ' not found in current or supplied directories:' + `alt_dirs`
536
536
537 #----------------------------------------------------------------------------
537 #----------------------------------------------------------------------------
538 def file_read(filename):
538 def file_read(filename):
539 """Read a file and close it. Returns the file source."""
539 """Read a file and close it. Returns the file source."""
540 fobj = open(filename,'r');
540 fobj = open(filename,'r');
541 source = fobj.read();
541 source = fobj.read();
542 fobj.close()
542 fobj.close()
543 return source
543 return source
544
544
545 def file_readlines(filename):
545 def file_readlines(filename):
546 """Read a file and close it. Returns the file source using readlines()."""
546 """Read a file and close it. Returns the file source using readlines()."""
547 fobj = open(filename,'r');
547 fobj = open(filename,'r');
548 lines = fobj.readlines();
548 lines = fobj.readlines();
549 fobj.close()
549 fobj.close()
550 return lines
550 return lines
551
551
552 #----------------------------------------------------------------------------
552 #----------------------------------------------------------------------------
553 def target_outdated(target,deps):
553 def target_outdated(target,deps):
554 """Determine whether a target is out of date.
554 """Determine whether a target is out of date.
555
555
556 target_outdated(target,deps) -> 1/0
556 target_outdated(target,deps) -> 1/0
557
557
558 deps: list of filenames which MUST exist.
558 deps: list of filenames which MUST exist.
559 target: single filename which may or may not exist.
559 target: single filename which may or may not exist.
560
560
561 If target doesn't exist or is older than any file listed in deps, return
561 If target doesn't exist or is older than any file listed in deps, return
562 true, otherwise return false.
562 true, otherwise return false.
563 """
563 """
564 try:
564 try:
565 target_time = os.path.getmtime(target)
565 target_time = os.path.getmtime(target)
566 except os.error:
566 except os.error:
567 return 1
567 return 1
568 for dep in deps:
568 for dep in deps:
569 dep_time = os.path.getmtime(dep)
569 dep_time = os.path.getmtime(dep)
570 if dep_time > target_time:
570 if dep_time > target_time:
571 #print "For target",target,"Dep failed:",dep # dbg
571 #print "For target",target,"Dep failed:",dep # dbg
572 #print "times (dep,tar):",dep_time,target_time # dbg
572 #print "times (dep,tar):",dep_time,target_time # dbg
573 return 1
573 return 1
574 return 0
574 return 0
575
575
576 #-----------------------------------------------------------------------------
576 #-----------------------------------------------------------------------------
577 def target_update(target,deps,cmd):
577 def target_update(target,deps,cmd):
578 """Update a target with a given command given a list of dependencies.
578 """Update a target with a given command given a list of dependencies.
579
579
580 target_update(target,deps,cmd) -> runs cmd if target is outdated.
580 target_update(target,deps,cmd) -> runs cmd if target is outdated.
581
581
582 This is just a wrapper around target_outdated() which calls the given
582 This is just a wrapper around target_outdated() which calls the given
583 command if target is outdated."""
583 command if target is outdated."""
584
584
585 if target_outdated(target,deps):
585 if target_outdated(target,deps):
586 xsys(cmd)
586 xsys(cmd)
587
587
588 #----------------------------------------------------------------------------
588 #----------------------------------------------------------------------------
589 def unquote_ends(istr):
589 def unquote_ends(istr):
590 """Remove a single pair of quotes from the endpoints of a string."""
590 """Remove a single pair of quotes from the endpoints of a string."""
591
591
592 if not istr:
592 if not istr:
593 return istr
593 return istr
594 if (istr[0]=="'" and istr[-1]=="'") or \
594 if (istr[0]=="'" and istr[-1]=="'") or \
595 (istr[0]=='"' and istr[-1]=='"'):
595 (istr[0]=='"' and istr[-1]=='"'):
596 return istr[1:-1]
596 return istr[1:-1]
597 else:
597 else:
598 return istr
598 return istr
599
599
600 #----------------------------------------------------------------------------
600 #----------------------------------------------------------------------------
601 def process_cmdline(argv,names=[],defaults={},usage=''):
601 def process_cmdline(argv,names=[],defaults={},usage=''):
602 """ Process command-line options and arguments.
602 """ Process command-line options and arguments.
603
603
604 Arguments:
604 Arguments:
605
605
606 - argv: list of arguments, typically sys.argv.
606 - argv: list of arguments, typically sys.argv.
607
607
608 - names: list of option names. See DPyGetOpt docs for details on options
608 - names: list of option names. See DPyGetOpt docs for details on options
609 syntax.
609 syntax.
610
610
611 - defaults: dict of default values.
611 - defaults: dict of default values.
612
612
613 - usage: optional usage notice to print if a wrong argument is passed.
613 - usage: optional usage notice to print if a wrong argument is passed.
614
614
615 Return a dict of options and a list of free arguments."""
615 Return a dict of options and a list of free arguments."""
616
616
617 getopt = DPyGetOpt.DPyGetOpt()
617 getopt = DPyGetOpt.DPyGetOpt()
618 getopt.setIgnoreCase(0)
618 getopt.setIgnoreCase(0)
619 getopt.parseConfiguration(names)
619 getopt.parseConfiguration(names)
620
620
621 try:
621 try:
622 getopt.processArguments(argv)
622 getopt.processArguments(argv)
623 except:
623 except:
624 print usage
624 print usage
625 warn(`sys.exc_value`,level=4)
625 warn(`sys.exc_value`,level=4)
626
626
627 defaults.update(getopt.optionValues)
627 defaults.update(getopt.optionValues)
628 args = getopt.freeValues
628 args = getopt.freeValues
629
629
630 return defaults,args
630 return defaults,args
631
631
632 #----------------------------------------------------------------------------
632 #----------------------------------------------------------------------------
633 def optstr2types(ostr):
633 def optstr2types(ostr):
634 """Convert a string of option names to a dict of type mappings.
634 """Convert a string of option names to a dict of type mappings.
635
635
636 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
636 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
637
637
638 This is used to get the types of all the options in a string formatted
638 This is used to get the types of all the options in a string formatted
639 with the conventions of DPyGetOpt. The 'type' None is used for options
639 with the conventions of DPyGetOpt. The 'type' None is used for options
640 which are strings (they need no further conversion). This function's main
640 which are strings (they need no further conversion). This function's main
641 use is to get a typemap for use with read_dict().
641 use is to get a typemap for use with read_dict().
642 """
642 """
643
643
644 typeconv = {None:'',int:'',float:''}
644 typeconv = {None:'',int:'',float:''}
645 typemap = {'s':None,'i':int,'f':float}
645 typemap = {'s':None,'i':int,'f':float}
646 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
646 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
647
647
648 for w in ostr.split():
648 for w in ostr.split():
649 oname,alias,otype = opt_re.match(w).groups()
649 oname,alias,otype = opt_re.match(w).groups()
650 if otype == '' or alias == '!': # simple switches are integers too
650 if otype == '' or alias == '!': # simple switches are integers too
651 otype = 'i'
651 otype = 'i'
652 typeconv[typemap[otype]] += oname + ' '
652 typeconv[typemap[otype]] += oname + ' '
653 return typeconv
653 return typeconv
654
654
655 #----------------------------------------------------------------------------
655 #----------------------------------------------------------------------------
656 def read_dict(filename,type_conv=None,**opt):
656 def read_dict(filename,type_conv=None,**opt):
657
657
658 """Read a dictionary of key=value pairs from an input file, optionally
658 """Read a dictionary of key=value pairs from an input file, optionally
659 performing conversions on the resulting values.
659 performing conversions on the resulting values.
660
660
661 read_dict(filename,type_conv,**opt) -> dict
661 read_dict(filename,type_conv,**opt) -> dict
662
662
663 Only one value per line is accepted, the format should be
663 Only one value per line is accepted, the format should be
664 # optional comments are ignored
664 # optional comments are ignored
665 key value\n
665 key value\n
666
666
667 Args:
667 Args:
668
668
669 - type_conv: A dictionary specifying which keys need to be converted to
669 - type_conv: A dictionary specifying which keys need to be converted to
670 which types. By default all keys are read as strings. This dictionary
670 which types. By default all keys are read as strings. This dictionary
671 should have as its keys valid conversion functions for strings
671 should have as its keys valid conversion functions for strings
672 (int,long,float,complex, or your own). The value for each key
672 (int,long,float,complex, or your own). The value for each key
673 (converter) should be a whitespace separated string containing the names
673 (converter) should be a whitespace separated string containing the names
674 of all the entries in the file to be converted using that function. For
674 of all the entries in the file to be converted using that function. For
675 keys to be left alone, use None as the conversion function (only needed
675 keys to be left alone, use None as the conversion function (only needed
676 with purge=1, see below).
676 with purge=1, see below).
677
677
678 - opt: dictionary with extra options as below (default in parens)
678 - opt: dictionary with extra options as below (default in parens)
679
679
680 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
680 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
681 of the dictionary to be returned. If purge is going to be used, the
681 of the dictionary to be returned. If purge is going to be used, the
682 set of keys to be left as strings also has to be explicitly specified
682 set of keys to be left as strings also has to be explicitly specified
683 using the (non-existent) conversion function None.
683 using the (non-existent) conversion function None.
684
684
685 fs(None): field separator. This is the key/value separator to be used
685 fs(None): field separator. This is the key/value separator to be used
686 when parsing the file. The None default means any whitespace [behavior
686 when parsing the file. The None default means any whitespace [behavior
687 of string.split()].
687 of string.split()].
688
688
689 strip(0): if 1, strip string values of leading/trailinig whitespace.
689 strip(0): if 1, strip string values of leading/trailinig whitespace.
690
690
691 warn(1): warning level if requested keys are not found in file.
691 warn(1): warning level if requested keys are not found in file.
692 - 0: silently ignore.
692 - 0: silently ignore.
693 - 1: inform but proceed.
693 - 1: inform but proceed.
694 - 2: raise KeyError exception.
694 - 2: raise KeyError exception.
695
695
696 no_empty(0): if 1, remove keys with whitespace strings as a value.
696 no_empty(0): if 1, remove keys with whitespace strings as a value.
697
697
698 unique([]): list of keys (or space separated string) which can't be
698 unique([]): list of keys (or space separated string) which can't be
699 repeated. If one such key is found in the file, each new instance
699 repeated. If one such key is found in the file, each new instance
700 overwrites the previous one. For keys not listed here, the behavior is
700 overwrites the previous one. For keys not listed here, the behavior is
701 to make a list of all appearances.
701 to make a list of all appearances.
702
702
703 Example:
703 Example:
704 If the input file test.ini has:
704 If the input file test.ini has:
705 i 3
705 i 3
706 x 4.5
706 x 4.5
707 y 5.5
707 y 5.5
708 s hi ho
708 s hi ho
709 Then:
709 Then:
710
710
711 >>> type_conv={int:'i',float:'x',None:'s'}
711 >>> type_conv={int:'i',float:'x',None:'s'}
712 >>> read_dict('test.ini')
712 >>> read_dict('test.ini')
713 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
713 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
714 >>> read_dict('test.ini',type_conv)
714 >>> read_dict('test.ini',type_conv)
715 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
715 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
716 >>> read_dict('test.ini',type_conv,purge=1)
716 >>> read_dict('test.ini',type_conv,purge=1)
717 {'i': 3, 's': 'hi ho', 'x': 4.5}
717 {'i': 3, 's': 'hi ho', 'x': 4.5}
718 """
718 """
719
719
720 # starting config
720 # starting config
721 opt.setdefault('purge',0)
721 opt.setdefault('purge',0)
722 opt.setdefault('fs',None) # field sep defaults to any whitespace
722 opt.setdefault('fs',None) # field sep defaults to any whitespace
723 opt.setdefault('strip',0)
723 opt.setdefault('strip',0)
724 opt.setdefault('warn',1)
724 opt.setdefault('warn',1)
725 opt.setdefault('no_empty',0)
725 opt.setdefault('no_empty',0)
726 opt.setdefault('unique','')
726 opt.setdefault('unique','')
727 if type(opt['unique']) in StringTypes:
727 if type(opt['unique']) in StringTypes:
728 unique_keys = qw(opt['unique'])
728 unique_keys = qw(opt['unique'])
729 elif type(opt['unique']) in (types.TupleType,types.ListType):
729 elif type(opt['unique']) in (types.TupleType,types.ListType):
730 unique_keys = opt['unique']
730 unique_keys = opt['unique']
731 else:
731 else:
732 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
732 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
733
733
734 dict = {}
734 dict = {}
735 # first read in table of values as strings
735 # first read in table of values as strings
736 file = open(filename,'r')
736 file = open(filename,'r')
737 for line in file.readlines():
737 for line in file.readlines():
738 line = line.strip()
738 line = line.strip()
739 if len(line) and line[0]=='#': continue
739 if len(line) and line[0]=='#': continue
740 if len(line)>0:
740 if len(line)>0:
741 lsplit = line.split(opt['fs'],1)
741 lsplit = line.split(opt['fs'],1)
742 try:
742 try:
743 key,val = lsplit
743 key,val = lsplit
744 except ValueError:
744 except ValueError:
745 key,val = lsplit[0],''
745 key,val = lsplit[0],''
746 key = key.strip()
746 key = key.strip()
747 if opt['strip']: val = val.strip()
747 if opt['strip']: val = val.strip()
748 if val == "''" or val == '""': val = ''
748 if val == "''" or val == '""': val = ''
749 if opt['no_empty'] and (val=='' or val.isspace()):
749 if opt['no_empty'] and (val=='' or val.isspace()):
750 continue
750 continue
751 # if a key is found more than once in the file, build a list
751 # if a key is found more than once in the file, build a list
752 # unless it's in the 'unique' list. In that case, last found in file
752 # unless it's in the 'unique' list. In that case, last found in file
753 # takes precedence. User beware.
753 # takes precedence. User beware.
754 try:
754 try:
755 if dict[key] and key in unique_keys:
755 if dict[key] and key in unique_keys:
756 dict[key] = val
756 dict[key] = val
757 elif type(dict[key]) is types.ListType:
757 elif type(dict[key]) is types.ListType:
758 dict[key].append(val)
758 dict[key].append(val)
759 else:
759 else:
760 dict[key] = [dict[key],val]
760 dict[key] = [dict[key],val]
761 except KeyError:
761 except KeyError:
762 dict[key] = val
762 dict[key] = val
763 # purge if requested
763 # purge if requested
764 if opt['purge']:
764 if opt['purge']:
765 accepted_keys = qwflat(type_conv.values())
765 accepted_keys = qwflat(type_conv.values())
766 for key in dict.keys():
766 for key in dict.keys():
767 if key in accepted_keys: continue
767 if key in accepted_keys: continue
768 del(dict[key])
768 del(dict[key])
769 # now convert if requested
769 # now convert if requested
770 if type_conv==None: return dict
770 if type_conv==None: return dict
771 conversions = type_conv.keys()
771 conversions = type_conv.keys()
772 try: conversions.remove(None)
772 try: conversions.remove(None)
773 except: pass
773 except: pass
774 for convert in conversions:
774 for convert in conversions:
775 for val in qw(type_conv[convert]):
775 for val in qw(type_conv[convert]):
776 try:
776 try:
777 dict[val] = convert(dict[val])
777 dict[val] = convert(dict[val])
778 except KeyError,e:
778 except KeyError,e:
779 if opt['warn'] == 0:
779 if opt['warn'] == 0:
780 pass
780 pass
781 elif opt['warn'] == 1:
781 elif opt['warn'] == 1:
782 print >>sys.stderr, 'Warning: key',val,\
782 print >>sys.stderr, 'Warning: key',val,\
783 'not found in file',filename
783 'not found in file',filename
784 elif opt['warn'] == 2:
784 elif opt['warn'] == 2:
785 raise KeyError,e
785 raise KeyError,e
786 else:
786 else:
787 raise ValueError,'Warning level must be 0,1 or 2'
787 raise ValueError,'Warning level must be 0,1 or 2'
788
788
789 return dict
789 return dict
790
790
791 #----------------------------------------------------------------------------
791 #----------------------------------------------------------------------------
792 def flag_calls(func):
792 def flag_calls(func):
793 """Wrap a function to detect and flag when it gets called.
793 """Wrap a function to detect and flag when it gets called.
794
794
795 This is a decorator which takes a function and wraps it in a function with
795 This is a decorator which takes a function and wraps it in a function with
796 a 'called' attribute. wrapper.called is initialized to False.
796 a 'called' attribute. wrapper.called is initialized to False.
797
797
798 The wrapper.called attribute is set to False right before each call to the
798 The wrapper.called attribute is set to False right before each call to the
799 wrapped function, so if the call fails it remains False. After the call
799 wrapped function, so if the call fails it remains False. After the call
800 completes, wrapper.called is set to True and the output is returned.
800 completes, wrapper.called is set to True and the output is returned.
801
801
802 Testing for truth in wrapper.called allows you to determine if a call to
802 Testing for truth in wrapper.called allows you to determine if a call to
803 func() was attempted and succeeded."""
803 func() was attempted and succeeded."""
804
804
805 def wrapper(*args,**kw):
805 def wrapper(*args,**kw):
806 wrapper.called = False
806 wrapper.called = False
807 out = func(*args,**kw)
807 out = func(*args,**kw)
808 wrapper.called = True
808 wrapper.called = True
809 return out
809 return out
810
810
811 wrapper.called = False
811 wrapper.called = False
812 wrapper.__doc__ = func.__doc__
812 wrapper.__doc__ = func.__doc__
813 return wrapper
813 return wrapper
814
814
815 #----------------------------------------------------------------------------
815 #----------------------------------------------------------------------------
816 def dhook_wrap(func,*a,**k):
816 def dhook_wrap(func,*a,**k):
817 """Wrap a function call in a sys.displayhook controller.
817 """Wrap a function call in a sys.displayhook controller.
818
818
819 Returns a wrapper around func which calls func, with all its arguments and
819 Returns a wrapper around func which calls func, with all its arguments and
820 keywords unmodified, using the default sys.displayhook. Since IPython
820 keywords unmodified, using the default sys.displayhook. Since IPython
821 modifies sys.displayhook, it breaks the behavior of certain systems that
821 modifies sys.displayhook, it breaks the behavior of certain systems that
822 rely on the default behavior, notably doctest.
822 rely on the default behavior, notably doctest.
823 """
823 """
824
824
825 def f(*a,**k):
825 def f(*a,**k):
826
826
827 dhook_s = sys.displayhook
827 dhook_s = sys.displayhook
828 sys.displayhook = sys.__displayhook__
828 sys.displayhook = sys.__displayhook__
829 try:
829 try:
830 out = func(*a,**k)
830 out = func(*a,**k)
831 finally:
831 finally:
832 sys.displayhook = dhook_s
832 sys.displayhook = dhook_s
833
833
834 return out
834 return out
835
835
836 f.__doc__ = func.__doc__
836 f.__doc__ = func.__doc__
837 return f
837 return f
838
838
839 #----------------------------------------------------------------------------
839 #----------------------------------------------------------------------------
840 def doctest_reload():
840 def doctest_reload():
841 """Properly reload doctest to reuse it interactively.
841 """Properly reload doctest to reuse it interactively.
842
842
843 This routine:
843 This routine:
844
844
845 - reloads doctest
845 - reloads doctest
846
846
847 - resets its global 'master' attribute to None, so that multiple uses of
847 - resets its global 'master' attribute to None, so that multiple uses of
848 the module interactively don't produce cumulative reports.
848 the module interactively don't produce cumulative reports.
849
849
850 - Monkeypatches its core test runner method to protect it from IPython's
850 - Monkeypatches its core test runner method to protect it from IPython's
851 modified displayhook. Doctest expects the default displayhook behavior
851 modified displayhook. Doctest expects the default displayhook behavior
852 deep down, so our modification breaks it completely. For this reason, a
852 deep down, so our modification breaks it completely. For this reason, a
853 hard monkeypatch seems like a reasonable solution rather than asking
853 hard monkeypatch seems like a reasonable solution rather than asking
854 users to manually use a different doctest runner when under IPython."""
854 users to manually use a different doctest runner when under IPython."""
855
855
856 import doctest
856 import doctest
857 reload(doctest)
857 reload(doctest)
858 doctest.master=None
858 doctest.master=None
859
859
860 try:
860 try:
861 doctest.DocTestRunner
861 doctest.DocTestRunner
862 except AttributeError:
862 except AttributeError:
863 # This is only for python 2.3 compatibility, remove once we move to
863 # This is only for python 2.3 compatibility, remove once we move to
864 # 2.4 only.
864 # 2.4 only.
865 pass
865 pass
866 else:
866 else:
867 doctest.DocTestRunner.run = dhook_wrap(doctest.DocTestRunner.run)
867 doctest.DocTestRunner.run = dhook_wrap(doctest.DocTestRunner.run)
868
868
869 #----------------------------------------------------------------------------
869 #----------------------------------------------------------------------------
870 class HomeDirError(Error):
870 class HomeDirError(Error):
871 pass
871 pass
872
872
873 def get_home_dir():
873 def get_home_dir():
874 """Return the closest possible equivalent to a 'home' directory.
874 """Return the closest possible equivalent to a 'home' directory.
875
875
876 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
876 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
877
877
878 Currently only Posix and NT are implemented, a HomeDirError exception is
878 Currently only Posix and NT are implemented, a HomeDirError exception is
879 raised for all other OSes. """
879 raised for all other OSes. """
880
880
881 isdir = os.path.isdir
881 isdir = os.path.isdir
882 env = os.environ
882 env = os.environ
883
883
884 # first, check py2exe distribution root directory for _ipython.
884 # first, check py2exe distribution root directory for _ipython.
885 # This overrides all. Normally does not exist.
885 # This overrides all. Normally does not exist.
886
886
887 if '\\library.zip\\' in IPython.__file__.lower():
887 if '\\library.zip\\' in IPython.__file__.lower():
888 root, rest = IPython.__file__.lower().split('library.zip')
888 root, rest = IPython.__file__.lower().split('library.zip')
889 if isdir(root + '_ipython'):
889 if isdir(root + '_ipython'):
890 os.environ["IPYKITROOT"] = root.rstrip('\\')
890 os.environ["IPYKITROOT"] = root.rstrip('\\')
891 return root
891 return root
892
892
893 try:
893 try:
894 homedir = env['HOME']
894 homedir = env['HOME']
895 if not isdir(homedir):
895 if not isdir(homedir):
896 # in case a user stuck some string which does NOT resolve to a
896 # in case a user stuck some string which does NOT resolve to a
897 # valid path, it's as good as if we hadn't foud it
897 # valid path, it's as good as if we hadn't foud it
898 raise KeyError
898 raise KeyError
899 return homedir
899 return homedir
900 except KeyError:
900 except KeyError:
901 if os.name == 'posix':
901 if os.name == 'posix':
902 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
902 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
903 elif os.name == 'nt':
903 elif os.name == 'nt':
904 # For some strange reason, win9x returns 'nt' for os.name.
904 # For some strange reason, win9x returns 'nt' for os.name.
905 try:
905 try:
906 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
906 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
907 if not isdir(homedir):
907 if not isdir(homedir):
908 homedir = os.path.join(env['USERPROFILE'])
908 homedir = os.path.join(env['USERPROFILE'])
909 if not isdir(homedir):
909 if not isdir(homedir):
910 raise HomeDirError
910 raise HomeDirError
911 return homedir
911 return homedir
912 except:
912 except:
913 try:
913 try:
914 # Use the registry to get the 'My Documents' folder.
914 # Use the registry to get the 'My Documents' folder.
915 import _winreg as wreg
915 import _winreg as wreg
916 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
916 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
917 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
917 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
918 homedir = wreg.QueryValueEx(key,'Personal')[0]
918 homedir = wreg.QueryValueEx(key,'Personal')[0]
919 key.Close()
919 key.Close()
920 if not isdir(homedir):
920 if not isdir(homedir):
921 e = ('Invalid "Personal" folder registry key '
921 e = ('Invalid "Personal" folder registry key '
922 'typically "My Documents".\n'
922 'typically "My Documents".\n'
923 'Value: %s\n'
923 'Value: %s\n'
924 'This is not a valid directory on your system.' %
924 'This is not a valid directory on your system.' %
925 homedir)
925 homedir)
926 raise HomeDirError(e)
926 raise HomeDirError(e)
927 return homedir
927 return homedir
928 except HomeDirError:
928 except HomeDirError:
929 raise
929 raise
930 except:
930 except:
931 return 'C:\\'
931 return 'C:\\'
932 elif os.name == 'dos':
932 elif os.name == 'dos':
933 # Desperate, may do absurd things in classic MacOS. May work under DOS.
933 # Desperate, may do absurd things in classic MacOS. May work under DOS.
934 return 'C:\\'
934 return 'C:\\'
935 else:
935 else:
936 raise HomeDirError,'support for your operating system not implemented.'
936 raise HomeDirError,'support for your operating system not implemented.'
937
937
938 #****************************************************************************
938 #****************************************************************************
939 # strings and text
939 # strings and text
940
940
941 class LSString(str):
941 class LSString(str):
942 """String derivative with a special access attributes.
942 """String derivative with a special access attributes.
943
943
944 These are normal strings, but with the special attributes:
944 These are normal strings, but with the special attributes:
945
945
946 .l (or .list) : value as list (split on newlines).
946 .l (or .list) : value as list (split on newlines).
947 .n (or .nlstr): original value (the string itself).
947 .n (or .nlstr): original value (the string itself).
948 .s (or .spstr): value as whitespace-separated string.
948 .s (or .spstr): value as whitespace-separated string.
949 .p (or .paths): list of path objects
949 .p (or .paths): list of path objects
950
950
951 Any values which require transformations are computed only once and
951 Any values which require transformations are computed only once and
952 cached.
952 cached.
953
953
954 Such strings are very useful to efficiently interact with the shell, which
954 Such strings are very useful to efficiently interact with the shell, which
955 typically only understands whitespace-separated options for commands."""
955 typically only understands whitespace-separated options for commands."""
956
956
957 def get_list(self):
957 def get_list(self):
958 try:
958 try:
959 return self.__list
959 return self.__list
960 except AttributeError:
960 except AttributeError:
961 self.__list = self.split('\n')
961 self.__list = self.split('\n')
962 return self.__list
962 return self.__list
963
963
964 l = list = property(get_list)
964 l = list = property(get_list)
965
965
966 def get_spstr(self):
966 def get_spstr(self):
967 try:
967 try:
968 return self.__spstr
968 return self.__spstr
969 except AttributeError:
969 except AttributeError:
970 self.__spstr = self.replace('\n',' ')
970 self.__spstr = self.replace('\n',' ')
971 return self.__spstr
971 return self.__spstr
972
972
973 s = spstr = property(get_spstr)
973 s = spstr = property(get_spstr)
974
974
975 def get_nlstr(self):
975 def get_nlstr(self):
976 return self
976 return self
977
977
978 n = nlstr = property(get_nlstr)
978 n = nlstr = property(get_nlstr)
979
979
980 def get_paths(self):
980 def get_paths(self):
981 try:
981 try:
982 return self.__paths
982 return self.__paths
983 except AttributeError:
983 except AttributeError:
984 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
984 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
985 return self.__paths
985 return self.__paths
986
986
987 p = paths = property(get_paths)
987 p = paths = property(get_paths)
988
988
989 def print_lsstring(arg):
989 def print_lsstring(arg):
990 """ Prettier (non-repr-like) and more informative printer for LSString """
990 """ Prettier (non-repr-like) and more informative printer for LSString """
991 print "LSString (.p, .n, .l, .s available). Value:"
991 print "LSString (.p, .n, .l, .s available). Value:"
992 print arg
992 print arg
993
993
994 print_lsstring = result_display.when_type(LSString)(print_lsstring)
994 print_lsstring = result_display.when_type(LSString)(print_lsstring)
995
995
996 #----------------------------------------------------------------------------
996 #----------------------------------------------------------------------------
997 class SList(list):
997 class SList(list):
998 """List derivative with a special access attributes.
998 """List derivative with a special access attributes.
999
999
1000 These are normal lists, but with the special attributes:
1000 These are normal lists, but with the special attributes:
1001
1001
1002 .l (or .list) : value as list (the list itself).
1002 .l (or .list) : value as list (the list itself).
1003 .n (or .nlstr): value as a string, joined on newlines.
1003 .n (or .nlstr): value as a string, joined on newlines.
1004 .s (or .spstr): value as a string, joined on spaces.
1004 .s (or .spstr): value as a string, joined on spaces.
1005 .p (or .paths): list of path objects
1005 .p (or .paths): list of path objects
1006
1006
1007 Any values which require transformations are computed only once and
1007 Any values which require transformations are computed only once and
1008 cached."""
1008 cached."""
1009
1009
1010 def get_list(self):
1010 def get_list(self):
1011 return self
1011 return self
1012
1012
1013 l = list = property(get_list)
1013 l = list = property(get_list)
1014
1014
1015 def get_spstr(self):
1015 def get_spstr(self):
1016 try:
1016 try:
1017 return self.__spstr
1017 return self.__spstr
1018 except AttributeError:
1018 except AttributeError:
1019 self.__spstr = ' '.join(self)
1019 self.__spstr = ' '.join(self)
1020 return self.__spstr
1020 return self.__spstr
1021
1021
1022 s = spstr = property(get_spstr)
1022 s = spstr = property(get_spstr)
1023
1023
1024 def get_nlstr(self):
1024 def get_nlstr(self):
1025 try:
1025 try:
1026 return self.__nlstr
1026 return self.__nlstr
1027 except AttributeError:
1027 except AttributeError:
1028 self.__nlstr = '\n'.join(self)
1028 self.__nlstr = '\n'.join(self)
1029 return self.__nlstr
1029 return self.__nlstr
1030
1030
1031 n = nlstr = property(get_nlstr)
1031 n = nlstr = property(get_nlstr)
1032
1032
1033 def get_paths(self):
1033 def get_paths(self):
1034 try:
1034 try:
1035 return self.__paths
1035 return self.__paths
1036 except AttributeError:
1036 except AttributeError:
1037 self.__paths = [path(p) for p in self if os.path.exists(p)]
1037 self.__paths = [path(p) for p in self if os.path.exists(p)]
1038 return self.__paths
1038 return self.__paths
1039
1039
1040 p = paths = property(get_paths)
1040 p = paths = property(get_paths)
1041
1041
1042 def grep(self, pattern, prune = False):
1042 def grep(self, pattern, prune = False):
1043 """ Return all strings matching 'pattern' (a regex or callable)
1043 """ Return all strings matching 'pattern' (a regex or callable)
1044
1044
1045 This is case-insensitive. If prune is true, return all items
1045 This is case-insensitive. If prune is true, return all items
1046 NOT matching the pattern.
1046 NOT matching the pattern.
1047
1047
1048 Examples::
1048 Examples::
1049
1049
1050 a.grep( lambda x: x.startswith('C') )
1050 a.grep( lambda x: x.startswith('C') )
1051 a.grep('Cha.*log', prune=1)
1051 a.grep('Cha.*log', prune=1)
1052 """
1052 """
1053 if isinstance(pattern, basestring):
1053 if isinstance(pattern, basestring):
1054 pred = lambda x : re.search(pattern, x, re.IGNORECASE)
1054 pred = lambda x : re.search(pattern, x, re.IGNORECASE)
1055 else:
1055 else:
1056 pred = pattern
1056 pred = pattern
1057 if not prune:
1057 if not prune:
1058 return SList([el for el in self if pred(el)])
1058 return SList([el for el in self if pred(el)])
1059 else:
1059 else:
1060 return SList([el for el in self if not pred(el)])
1060 return SList([el for el in self if not pred(el)])
1061
1061
1062 def print_slist(arg):
1062 def print_slist(arg):
1063 """ Prettier (non-repr-like) and more informative printer for SList """
1063 """ Prettier (non-repr-like) and more informative printer for SList """
1064 print "SList (.p, .n, .l, .s, .grep() available). Value:"
1064 print "SList (.p, .n, .l, .s, .grep() available). Value:"
1065 nlprint(arg)
1065 nlprint(arg)
1066
1066
1067 print_slist = result_display.when_type(SList)(print_slist)
1067 print_slist = result_display.when_type(SList)(print_slist)
1068
1068
1069
1069
1070
1070
1071 #----------------------------------------------------------------------------
1071 #----------------------------------------------------------------------------
1072 def esc_quotes(strng):
1072 def esc_quotes(strng):
1073 """Return the input string with single and double quotes escaped out"""
1073 """Return the input string with single and double quotes escaped out"""
1074
1074
1075 return strng.replace('"','\\"').replace("'","\\'")
1075 return strng.replace('"','\\"').replace("'","\\'")
1076
1076
1077 #----------------------------------------------------------------------------
1077 #----------------------------------------------------------------------------
1078 def make_quoted_expr(s):
1078 def make_quoted_expr(s):
1079 """Return string s in appropriate quotes, using raw string if possible.
1079 """Return string s in appropriate quotes, using raw string if possible.
1080
1080
1081 Effectively this turns string: cd \ao\ao\
1081 Effectively this turns string: cd \ao\ao\
1082 to: r"cd \ao\ao\_"[:-1]
1082 to: r"cd \ao\ao\_"[:-1]
1083
1083
1084 Note the use of raw string and padding at the end to allow trailing backslash.
1084 Note the use of raw string and padding at the end to allow trailing backslash.
1085
1085
1086 """
1086 """
1087
1087
1088 tail = ''
1088 tail = ''
1089 tailpadding = ''
1089 tailpadding = ''
1090 raw = ''
1090 raw = ''
1091 if "\\" in s:
1091 if "\\" in s:
1092 raw = 'r'
1092 raw = 'r'
1093 if s.endswith('\\'):
1093 if s.endswith('\\'):
1094 tail = '[:-1]'
1094 tail = '[:-1]'
1095 tailpadding = '_'
1095 tailpadding = '_'
1096 if '"' not in s:
1096 if '"' not in s:
1097 quote = '"'
1097 quote = '"'
1098 elif "'" not in s:
1098 elif "'" not in s:
1099 quote = "'"
1099 quote = "'"
1100 elif '"""' not in s and not s.endswith('"'):
1100 elif '"""' not in s and not s.endswith('"'):
1101 quote = '"""'
1101 quote = '"""'
1102 elif "'''" not in s and not s.endswith("'"):
1102 elif "'''" not in s and not s.endswith("'"):
1103 quote = "'''"
1103 quote = "'''"
1104 else:
1104 else:
1105 # give up, backslash-escaped string will do
1105 # give up, backslash-escaped string will do
1106 return '"%s"' % esc_quotes(s)
1106 return '"%s"' % esc_quotes(s)
1107 res = itpl("$raw$quote$s$tailpadding$quote$tail")
1107 res = raw + quote + s + tailpadding + quote + tail
1108 return res
1108 return res
1109
1109
1110
1110
1111 #----------------------------------------------------------------------------
1111 #----------------------------------------------------------------------------
1112 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
1112 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
1113 """Take multiple lines of input.
1113 """Take multiple lines of input.
1114
1114
1115 A list with each line of input as a separate element is returned when a
1115 A list with each line of input as a separate element is returned when a
1116 termination string is entered (defaults to a single '.'). Input can also
1116 termination string is entered (defaults to a single '.'). Input can also
1117 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1117 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1118
1118
1119 Lines of input which end in \\ are joined into single entries (and a
1119 Lines of input which end in \\ are joined into single entries (and a
1120 secondary continuation prompt is issued as long as the user terminates
1120 secondary continuation prompt is issued as long as the user terminates
1121 lines with \\). This allows entering very long strings which are still
1121 lines with \\). This allows entering very long strings which are still
1122 meant to be treated as single entities.
1122 meant to be treated as single entities.
1123 """
1123 """
1124
1124
1125 try:
1125 try:
1126 if header:
1126 if header:
1127 header += '\n'
1127 header += '\n'
1128 lines = [raw_input(header + ps1)]
1128 lines = [raw_input(header + ps1)]
1129 except EOFError:
1129 except EOFError:
1130 return []
1130 return []
1131 terminate = [terminate_str]
1131 terminate = [terminate_str]
1132 try:
1132 try:
1133 while lines[-1:] != terminate:
1133 while lines[-1:] != terminate:
1134 new_line = raw_input(ps1)
1134 new_line = raw_input(ps1)
1135 while new_line.endswith('\\'):
1135 while new_line.endswith('\\'):
1136 new_line = new_line[:-1] + raw_input(ps2)
1136 new_line = new_line[:-1] + raw_input(ps2)
1137 lines.append(new_line)
1137 lines.append(new_line)
1138
1138
1139 return lines[:-1] # don't return the termination command
1139 return lines[:-1] # don't return the termination command
1140 except EOFError:
1140 except EOFError:
1141 print
1141 print
1142 return lines
1142 return lines
1143
1143
1144 #----------------------------------------------------------------------------
1144 #----------------------------------------------------------------------------
1145 def raw_input_ext(prompt='', ps2='... '):
1145 def raw_input_ext(prompt='', ps2='... '):
1146 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1146 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1147
1147
1148 line = raw_input(prompt)
1148 line = raw_input(prompt)
1149 while line.endswith('\\'):
1149 while line.endswith('\\'):
1150 line = line[:-1] + raw_input(ps2)
1150 line = line[:-1] + raw_input(ps2)
1151 return line
1151 return line
1152
1152
1153 #----------------------------------------------------------------------------
1153 #----------------------------------------------------------------------------
1154 def ask_yes_no(prompt,default=None):
1154 def ask_yes_no(prompt,default=None):
1155 """Asks a question and returns a boolean (y/n) answer.
1155 """Asks a question and returns a boolean (y/n) answer.
1156
1156
1157 If default is given (one of 'y','n'), it is used if the user input is
1157 If default is given (one of 'y','n'), it is used if the user input is
1158 empty. Otherwise the question is repeated until an answer is given.
1158 empty. Otherwise the question is repeated until an answer is given.
1159
1159
1160 An EOF is treated as the default answer. If there is no default, an
1160 An EOF is treated as the default answer. If there is no default, an
1161 exception is raised to prevent infinite loops.
1161 exception is raised to prevent infinite loops.
1162
1162
1163 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1163 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1164
1164
1165 answers = {'y':True,'n':False,'yes':True,'no':False}
1165 answers = {'y':True,'n':False,'yes':True,'no':False}
1166 ans = None
1166 ans = None
1167 while ans not in answers.keys():
1167 while ans not in answers.keys():
1168 try:
1168 try:
1169 ans = raw_input(prompt+' ').lower()
1169 ans = raw_input(prompt+' ').lower()
1170 if not ans: # response was an empty string
1170 if not ans: # response was an empty string
1171 ans = default
1171 ans = default
1172 except KeyboardInterrupt:
1172 except KeyboardInterrupt:
1173 pass
1173 pass
1174 except EOFError:
1174 except EOFError:
1175 if default in answers.keys():
1175 if default in answers.keys():
1176 ans = default
1176 ans = default
1177 print
1177 print
1178 else:
1178 else:
1179 raise
1179 raise
1180
1180
1181 return answers[ans]
1181 return answers[ans]
1182
1182
1183 #----------------------------------------------------------------------------
1183 #----------------------------------------------------------------------------
1184 def marquee(txt='',width=78,mark='*'):
1184 def marquee(txt='',width=78,mark='*'):
1185 """Return the input string centered in a 'marquee'."""
1185 """Return the input string centered in a 'marquee'."""
1186 if not txt:
1186 if not txt:
1187 return (mark*width)[:width]
1187 return (mark*width)[:width]
1188 nmark = (width-len(txt)-2)/len(mark)/2
1188 nmark = (width-len(txt)-2)/len(mark)/2
1189 if nmark < 0: nmark =0
1189 if nmark < 0: nmark =0
1190 marks = mark*nmark
1190 marks = mark*nmark
1191 return '%s %s %s' % (marks,txt,marks)
1191 return '%s %s %s' % (marks,txt,marks)
1192
1192
1193 #----------------------------------------------------------------------------
1193 #----------------------------------------------------------------------------
1194 class EvalDict:
1194 class EvalDict:
1195 """
1195 """
1196 Emulate a dict which evaluates its contents in the caller's frame.
1196 Emulate a dict which evaluates its contents in the caller's frame.
1197
1197
1198 Usage:
1198 Usage:
1199 >>>number = 19
1199 >>>number = 19
1200 >>>text = "python"
1200 >>>text = "python"
1201 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1201 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1202 """
1202 """
1203
1203
1204 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1204 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1205 # modified (shorter) version of:
1205 # modified (shorter) version of:
1206 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1206 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1207 # Skip Montanaro (skip@pobox.com).
1207 # Skip Montanaro (skip@pobox.com).
1208
1208
1209 def __getitem__(self, name):
1209 def __getitem__(self, name):
1210 frame = sys._getframe(1)
1210 frame = sys._getframe(1)
1211 return eval(name, frame.f_globals, frame.f_locals)
1211 return eval(name, frame.f_globals, frame.f_locals)
1212
1212
1213 EvalString = EvalDict # for backwards compatibility
1213 EvalString = EvalDict # for backwards compatibility
1214 #----------------------------------------------------------------------------
1214 #----------------------------------------------------------------------------
1215 def qw(words,flat=0,sep=None,maxsplit=-1):
1215 def qw(words,flat=0,sep=None,maxsplit=-1):
1216 """Similar to Perl's qw() operator, but with some more options.
1216 """Similar to Perl's qw() operator, but with some more options.
1217
1217
1218 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1218 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1219
1219
1220 words can also be a list itself, and with flat=1, the output will be
1220 words can also be a list itself, and with flat=1, the output will be
1221 recursively flattened. Examples:
1221 recursively flattened. Examples:
1222
1222
1223 >>> qw('1 2')
1223 >>> qw('1 2')
1224 ['1', '2']
1224 ['1', '2']
1225 >>> qw(['a b','1 2',['m n','p q']])
1225 >>> qw(['a b','1 2',['m n','p q']])
1226 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1226 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1227 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1227 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1228 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1228 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1229
1229
1230 if type(words) in StringTypes:
1230 if type(words) in StringTypes:
1231 return [word.strip() for word in words.split(sep,maxsplit)
1231 return [word.strip() for word in words.split(sep,maxsplit)
1232 if word and not word.isspace() ]
1232 if word and not word.isspace() ]
1233 if flat:
1233 if flat:
1234 return flatten(map(qw,words,[1]*len(words)))
1234 return flatten(map(qw,words,[1]*len(words)))
1235 return map(qw,words)
1235 return map(qw,words)
1236
1236
1237 #----------------------------------------------------------------------------
1237 #----------------------------------------------------------------------------
1238 def qwflat(words,sep=None,maxsplit=-1):
1238 def qwflat(words,sep=None,maxsplit=-1):
1239 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1239 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1240 return qw(words,1,sep,maxsplit)
1240 return qw(words,1,sep,maxsplit)
1241
1241
1242 #----------------------------------------------------------------------------
1242 #----------------------------------------------------------------------------
1243 def qw_lol(indata):
1243 def qw_lol(indata):
1244 """qw_lol('a b') -> [['a','b']],
1244 """qw_lol('a b') -> [['a','b']],
1245 otherwise it's just a call to qw().
1245 otherwise it's just a call to qw().
1246
1246
1247 We need this to make sure the modules_some keys *always* end up as a
1247 We need this to make sure the modules_some keys *always* end up as a
1248 list of lists."""
1248 list of lists."""
1249
1249
1250 if type(indata) in StringTypes:
1250 if type(indata) in StringTypes:
1251 return [qw(indata)]
1251 return [qw(indata)]
1252 else:
1252 else:
1253 return qw(indata)
1253 return qw(indata)
1254
1254
1255 #-----------------------------------------------------------------------------
1255 #-----------------------------------------------------------------------------
1256 def list_strings(arg):
1256 def list_strings(arg):
1257 """Always return a list of strings, given a string or list of strings
1257 """Always return a list of strings, given a string or list of strings
1258 as input."""
1258 as input."""
1259
1259
1260 if type(arg) in StringTypes: return [arg]
1260 if type(arg) in StringTypes: return [arg]
1261 else: return arg
1261 else: return arg
1262
1262
1263 #----------------------------------------------------------------------------
1263 #----------------------------------------------------------------------------
1264 def grep(pat,list,case=1):
1264 def grep(pat,list,case=1):
1265 """Simple minded grep-like function.
1265 """Simple minded grep-like function.
1266 grep(pat,list) returns occurrences of pat in list, None on failure.
1266 grep(pat,list) returns occurrences of pat in list, None on failure.
1267
1267
1268 It only does simple string matching, with no support for regexps. Use the
1268 It only does simple string matching, with no support for regexps. Use the
1269 option case=0 for case-insensitive matching."""
1269 option case=0 for case-insensitive matching."""
1270
1270
1271 # This is pretty crude. At least it should implement copying only references
1271 # This is pretty crude. At least it should implement copying only references
1272 # to the original data in case it's big. Now it copies the data for output.
1272 # to the original data in case it's big. Now it copies the data for output.
1273 out=[]
1273 out=[]
1274 if case:
1274 if case:
1275 for term in list:
1275 for term in list:
1276 if term.find(pat)>-1: out.append(term)
1276 if term.find(pat)>-1: out.append(term)
1277 else:
1277 else:
1278 lpat=pat.lower()
1278 lpat=pat.lower()
1279 for term in list:
1279 for term in list:
1280 if term.lower().find(lpat)>-1: out.append(term)
1280 if term.lower().find(lpat)>-1: out.append(term)
1281
1281
1282 if len(out): return out
1282 if len(out): return out
1283 else: return None
1283 else: return None
1284
1284
1285 #----------------------------------------------------------------------------
1285 #----------------------------------------------------------------------------
1286 def dgrep(pat,*opts):
1286 def dgrep(pat,*opts):
1287 """Return grep() on dir()+dir(__builtins__).
1287 """Return grep() on dir()+dir(__builtins__).
1288
1288
1289 A very common use of grep() when working interactively."""
1289 A very common use of grep() when working interactively."""
1290
1290
1291 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1291 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1292
1292
1293 #----------------------------------------------------------------------------
1293 #----------------------------------------------------------------------------
1294 def idgrep(pat):
1294 def idgrep(pat):
1295 """Case-insensitive dgrep()"""
1295 """Case-insensitive dgrep()"""
1296
1296
1297 return dgrep(pat,0)
1297 return dgrep(pat,0)
1298
1298
1299 #----------------------------------------------------------------------------
1299 #----------------------------------------------------------------------------
1300 def igrep(pat,list):
1300 def igrep(pat,list):
1301 """Synonym for case-insensitive grep."""
1301 """Synonym for case-insensitive grep."""
1302
1302
1303 return grep(pat,list,case=0)
1303 return grep(pat,list,case=0)
1304
1304
1305 #----------------------------------------------------------------------------
1305 #----------------------------------------------------------------------------
1306 def indent(str,nspaces=4,ntabs=0):
1306 def indent(str,nspaces=4,ntabs=0):
1307 """Indent a string a given number of spaces or tabstops.
1307 """Indent a string a given number of spaces or tabstops.
1308
1308
1309 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1309 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1310 """
1310 """
1311 if str is None:
1311 if str is None:
1312 return
1312 return
1313 ind = '\t'*ntabs+' '*nspaces
1313 ind = '\t'*ntabs+' '*nspaces
1314 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1314 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1315 if outstr.endswith(os.linesep+ind):
1315 if outstr.endswith(os.linesep+ind):
1316 return outstr[:-len(ind)]
1316 return outstr[:-len(ind)]
1317 else:
1317 else:
1318 return outstr
1318 return outstr
1319
1319
1320 #-----------------------------------------------------------------------------
1320 #-----------------------------------------------------------------------------
1321 def native_line_ends(filename,backup=1):
1321 def native_line_ends(filename,backup=1):
1322 """Convert (in-place) a file to line-ends native to the current OS.
1322 """Convert (in-place) a file to line-ends native to the current OS.
1323
1323
1324 If the optional backup argument is given as false, no backup of the
1324 If the optional backup argument is given as false, no backup of the
1325 original file is left. """
1325 original file is left. """
1326
1326
1327 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1327 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1328
1328
1329 bak_filename = filename + backup_suffixes[os.name]
1329 bak_filename = filename + backup_suffixes[os.name]
1330
1330
1331 original = open(filename).read()
1331 original = open(filename).read()
1332 shutil.copy2(filename,bak_filename)
1332 shutil.copy2(filename,bak_filename)
1333 try:
1333 try:
1334 new = open(filename,'wb')
1334 new = open(filename,'wb')
1335 new.write(os.linesep.join(original.splitlines()))
1335 new.write(os.linesep.join(original.splitlines()))
1336 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1336 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1337 new.close()
1337 new.close()
1338 except:
1338 except:
1339 os.rename(bak_filename,filename)
1339 os.rename(bak_filename,filename)
1340 if not backup:
1340 if not backup:
1341 try:
1341 try:
1342 os.remove(bak_filename)
1342 os.remove(bak_filename)
1343 except:
1343 except:
1344 pass
1344 pass
1345
1345
1346 #----------------------------------------------------------------------------
1346 #----------------------------------------------------------------------------
1347 def get_pager_cmd(pager_cmd = None):
1347 def get_pager_cmd(pager_cmd = None):
1348 """Return a pager command.
1348 """Return a pager command.
1349
1349
1350 Makes some attempts at finding an OS-correct one."""
1350 Makes some attempts at finding an OS-correct one."""
1351
1351
1352 if os.name == 'posix':
1352 if os.name == 'posix':
1353 default_pager_cmd = 'less -r' # -r for color control sequences
1353 default_pager_cmd = 'less -r' # -r for color control sequences
1354 elif os.name in ['nt','dos']:
1354 elif os.name in ['nt','dos']:
1355 default_pager_cmd = 'type'
1355 default_pager_cmd = 'type'
1356
1356
1357 if pager_cmd is None:
1357 if pager_cmd is None:
1358 try:
1358 try:
1359 pager_cmd = os.environ['PAGER']
1359 pager_cmd = os.environ['PAGER']
1360 except:
1360 except:
1361 pager_cmd = default_pager_cmd
1361 pager_cmd = default_pager_cmd
1362 return pager_cmd
1362 return pager_cmd
1363
1363
1364 #-----------------------------------------------------------------------------
1364 #-----------------------------------------------------------------------------
1365 def get_pager_start(pager,start):
1365 def get_pager_start(pager,start):
1366 """Return the string for paging files with an offset.
1366 """Return the string for paging files with an offset.
1367
1367
1368 This is the '+N' argument which less and more (under Unix) accept.
1368 This is the '+N' argument which less and more (under Unix) accept.
1369 """
1369 """
1370
1370
1371 if pager in ['less','more']:
1371 if pager in ['less','more']:
1372 if start:
1372 if start:
1373 start_string = '+' + str(start)
1373 start_string = '+' + str(start)
1374 else:
1374 else:
1375 start_string = ''
1375 start_string = ''
1376 else:
1376 else:
1377 start_string = ''
1377 start_string = ''
1378 return start_string
1378 return start_string
1379
1379
1380 #----------------------------------------------------------------------------
1380 #----------------------------------------------------------------------------
1381 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1381 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1382 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1382 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1383 import msvcrt
1383 import msvcrt
1384 def page_more():
1384 def page_more():
1385 """ Smart pausing between pages
1385 """ Smart pausing between pages
1386
1386
1387 @return: True if need print more lines, False if quit
1387 @return: True if need print more lines, False if quit
1388 """
1388 """
1389 Term.cout.write('---Return to continue, q to quit--- ')
1389 Term.cout.write('---Return to continue, q to quit--- ')
1390 ans = msvcrt.getch()
1390 ans = msvcrt.getch()
1391 if ans in ("q", "Q"):
1391 if ans in ("q", "Q"):
1392 result = False
1392 result = False
1393 else:
1393 else:
1394 result = True
1394 result = True
1395 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1395 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1396 return result
1396 return result
1397 else:
1397 else:
1398 def page_more():
1398 def page_more():
1399 ans = raw_input('---Return to continue, q to quit--- ')
1399 ans = raw_input('---Return to continue, q to quit--- ')
1400 if ans.lower().startswith('q'):
1400 if ans.lower().startswith('q'):
1401 return False
1401 return False
1402 else:
1402 else:
1403 return True
1403 return True
1404
1404
1405 esc_re = re.compile(r"(\x1b[^m]+m)")
1405 esc_re = re.compile(r"(\x1b[^m]+m)")
1406
1406
1407 def page_dumb(strng,start=0,screen_lines=25):
1407 def page_dumb(strng,start=0,screen_lines=25):
1408 """Very dumb 'pager' in Python, for when nothing else works.
1408 """Very dumb 'pager' in Python, for when nothing else works.
1409
1409
1410 Only moves forward, same interface as page(), except for pager_cmd and
1410 Only moves forward, same interface as page(), except for pager_cmd and
1411 mode."""
1411 mode."""
1412
1412
1413 out_ln = strng.splitlines()[start:]
1413 out_ln = strng.splitlines()[start:]
1414 screens = chop(out_ln,screen_lines-1)
1414 screens = chop(out_ln,screen_lines-1)
1415 if len(screens) == 1:
1415 if len(screens) == 1:
1416 print >>Term.cout, os.linesep.join(screens[0])
1416 print >>Term.cout, os.linesep.join(screens[0])
1417 else:
1417 else:
1418 last_escape = ""
1418 last_escape = ""
1419 for scr in screens[0:-1]:
1419 for scr in screens[0:-1]:
1420 hunk = os.linesep.join(scr)
1420 hunk = os.linesep.join(scr)
1421 print >>Term.cout, last_escape + hunk
1421 print >>Term.cout, last_escape + hunk
1422 if not page_more():
1422 if not page_more():
1423 return
1423 return
1424 esc_list = esc_re.findall(hunk)
1424 esc_list = esc_re.findall(hunk)
1425 if len(esc_list) > 0:
1425 if len(esc_list) > 0:
1426 last_escape = esc_list[-1]
1426 last_escape = esc_list[-1]
1427 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1427 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1428
1428
1429 #----------------------------------------------------------------------------
1429 #----------------------------------------------------------------------------
1430 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1430 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1431 """Print a string, piping through a pager after a certain length.
1431 """Print a string, piping through a pager after a certain length.
1432
1432
1433 The screen_lines parameter specifies the number of *usable* lines of your
1433 The screen_lines parameter specifies the number of *usable* lines of your
1434 terminal screen (total lines minus lines you need to reserve to show other
1434 terminal screen (total lines minus lines you need to reserve to show other
1435 information).
1435 information).
1436
1436
1437 If you set screen_lines to a number <=0, page() will try to auto-determine
1437 If you set screen_lines to a number <=0, page() will try to auto-determine
1438 your screen size and will only use up to (screen_size+screen_lines) for
1438 your screen size and will only use up to (screen_size+screen_lines) for
1439 printing, paging after that. That is, if you want auto-detection but need
1439 printing, paging after that. That is, if you want auto-detection but need
1440 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1440 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1441 auto-detection without any lines reserved simply use screen_lines = 0.
1441 auto-detection without any lines reserved simply use screen_lines = 0.
1442
1442
1443 If a string won't fit in the allowed lines, it is sent through the
1443 If a string won't fit in the allowed lines, it is sent through the
1444 specified pager command. If none given, look for PAGER in the environment,
1444 specified pager command. If none given, look for PAGER in the environment,
1445 and ultimately default to less.
1445 and ultimately default to less.
1446
1446
1447 If no system pager works, the string is sent through a 'dumb pager'
1447 If no system pager works, the string is sent through a 'dumb pager'
1448 written in python, very simplistic.
1448 written in python, very simplistic.
1449 """
1449 """
1450
1450
1451 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1451 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1452 TERM = os.environ.get('TERM','dumb')
1452 TERM = os.environ.get('TERM','dumb')
1453 if TERM in ['dumb','emacs'] and os.name != 'nt':
1453 if TERM in ['dumb','emacs'] and os.name != 'nt':
1454 print strng
1454 print strng
1455 return
1455 return
1456 # chop off the topmost part of the string we don't want to see
1456 # chop off the topmost part of the string we don't want to see
1457 str_lines = strng.split(os.linesep)[start:]
1457 str_lines = strng.split(os.linesep)[start:]
1458 str_toprint = os.linesep.join(str_lines)
1458 str_toprint = os.linesep.join(str_lines)
1459 num_newlines = len(str_lines)
1459 num_newlines = len(str_lines)
1460 len_str = len(str_toprint)
1460 len_str = len(str_toprint)
1461
1461
1462 # Dumb heuristics to guesstimate number of on-screen lines the string
1462 # Dumb heuristics to guesstimate number of on-screen lines the string
1463 # takes. Very basic, but good enough for docstrings in reasonable
1463 # takes. Very basic, but good enough for docstrings in reasonable
1464 # terminals. If someone later feels like refining it, it's not hard.
1464 # terminals. If someone later feels like refining it, it's not hard.
1465 numlines = max(num_newlines,int(len_str/80)+1)
1465 numlines = max(num_newlines,int(len_str/80)+1)
1466
1466
1467 if os.name == "nt":
1467 if os.name == "nt":
1468 screen_lines_def = get_console_size(defaulty=25)[1]
1468 screen_lines_def = get_console_size(defaulty=25)[1]
1469 else:
1469 else:
1470 screen_lines_def = 25 # default value if we can't auto-determine
1470 screen_lines_def = 25 # default value if we can't auto-determine
1471
1471
1472 # auto-determine screen size
1472 # auto-determine screen size
1473 if screen_lines <= 0:
1473 if screen_lines <= 0:
1474 if TERM=='xterm':
1474 if TERM=='xterm':
1475 try:
1475 try:
1476 import curses
1476 import curses
1477 if hasattr(curses,'initscr'):
1477 if hasattr(curses,'initscr'):
1478 use_curses = 1
1478 use_curses = 1
1479 else:
1479 else:
1480 use_curses = 0
1480 use_curses = 0
1481 except ImportError:
1481 except ImportError:
1482 use_curses = 0
1482 use_curses = 0
1483 else:
1483 else:
1484 # curses causes problems on many terminals other than xterm.
1484 # curses causes problems on many terminals other than xterm.
1485 use_curses = 0
1485 use_curses = 0
1486 if use_curses:
1486 if use_curses:
1487 scr = curses.initscr()
1487 scr = curses.initscr()
1488 screen_lines_real,screen_cols = scr.getmaxyx()
1488 screen_lines_real,screen_cols = scr.getmaxyx()
1489 curses.endwin()
1489 curses.endwin()
1490 screen_lines += screen_lines_real
1490 screen_lines += screen_lines_real
1491 #print '***Screen size:',screen_lines_real,'lines x',\
1491 #print '***Screen size:',screen_lines_real,'lines x',\
1492 #screen_cols,'columns.' # dbg
1492 #screen_cols,'columns.' # dbg
1493 else:
1493 else:
1494 screen_lines += screen_lines_def
1494 screen_lines += screen_lines_def
1495
1495
1496 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1496 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1497 if numlines <= screen_lines :
1497 if numlines <= screen_lines :
1498 #print '*** normal print' # dbg
1498 #print '*** normal print' # dbg
1499 print >>Term.cout, str_toprint
1499 print >>Term.cout, str_toprint
1500 else:
1500 else:
1501 # Try to open pager and default to internal one if that fails.
1501 # Try to open pager and default to internal one if that fails.
1502 # All failure modes are tagged as 'retval=1', to match the return
1502 # All failure modes are tagged as 'retval=1', to match the return
1503 # value of a failed system command. If any intermediate attempt
1503 # value of a failed system command. If any intermediate attempt
1504 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1504 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1505 pager_cmd = get_pager_cmd(pager_cmd)
1505 pager_cmd = get_pager_cmd(pager_cmd)
1506 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1506 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1507 if os.name == 'nt':
1507 if os.name == 'nt':
1508 if pager_cmd.startswith('type'):
1508 if pager_cmd.startswith('type'):
1509 # The default WinXP 'type' command is failing on complex strings.
1509 # The default WinXP 'type' command is failing on complex strings.
1510 retval = 1
1510 retval = 1
1511 else:
1511 else:
1512 tmpname = tempfile.mktemp('.txt')
1512 tmpname = tempfile.mktemp('.txt')
1513 tmpfile = file(tmpname,'wt')
1513 tmpfile = file(tmpname,'wt')
1514 tmpfile.write(strng)
1514 tmpfile.write(strng)
1515 tmpfile.close()
1515 tmpfile.close()
1516 cmd = "%s < %s" % (pager_cmd,tmpname)
1516 cmd = "%s < %s" % (pager_cmd,tmpname)
1517 if os.system(cmd):
1517 if os.system(cmd):
1518 retval = 1
1518 retval = 1
1519 else:
1519 else:
1520 retval = None
1520 retval = None
1521 os.remove(tmpname)
1521 os.remove(tmpname)
1522 else:
1522 else:
1523 try:
1523 try:
1524 retval = None
1524 retval = None
1525 # if I use popen4, things hang. No idea why.
1525 # if I use popen4, things hang. No idea why.
1526 #pager,shell_out = os.popen4(pager_cmd)
1526 #pager,shell_out = os.popen4(pager_cmd)
1527 pager = os.popen(pager_cmd,'w')
1527 pager = os.popen(pager_cmd,'w')
1528 pager.write(strng)
1528 pager.write(strng)
1529 pager.close()
1529 pager.close()
1530 retval = pager.close() # success returns None
1530 retval = pager.close() # success returns None
1531 except IOError,msg: # broken pipe when user quits
1531 except IOError,msg: # broken pipe when user quits
1532 if msg.args == (32,'Broken pipe'):
1532 if msg.args == (32,'Broken pipe'):
1533 retval = None
1533 retval = None
1534 else:
1534 else:
1535 retval = 1
1535 retval = 1
1536 except OSError:
1536 except OSError:
1537 # Other strange problems, sometimes seen in Win2k/cygwin
1537 # Other strange problems, sometimes seen in Win2k/cygwin
1538 retval = 1
1538 retval = 1
1539 if retval is not None:
1539 if retval is not None:
1540 page_dumb(strng,screen_lines=screen_lines)
1540 page_dumb(strng,screen_lines=screen_lines)
1541
1541
1542 #----------------------------------------------------------------------------
1542 #----------------------------------------------------------------------------
1543 def page_file(fname,start = 0, pager_cmd = None):
1543 def page_file(fname,start = 0, pager_cmd = None):
1544 """Page a file, using an optional pager command and starting line.
1544 """Page a file, using an optional pager command and starting line.
1545 """
1545 """
1546
1546
1547 pager_cmd = get_pager_cmd(pager_cmd)
1547 pager_cmd = get_pager_cmd(pager_cmd)
1548 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1548 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1549
1549
1550 try:
1550 try:
1551 if os.environ['TERM'] in ['emacs','dumb']:
1551 if os.environ['TERM'] in ['emacs','dumb']:
1552 raise EnvironmentError
1552 raise EnvironmentError
1553 xsys(pager_cmd + ' ' + fname)
1553 xsys(pager_cmd + ' ' + fname)
1554 except:
1554 except:
1555 try:
1555 try:
1556 if start > 0:
1556 if start > 0:
1557 start -= 1
1557 start -= 1
1558 page(open(fname).read(),start)
1558 page(open(fname).read(),start)
1559 except:
1559 except:
1560 print 'Unable to show file',`fname`
1560 print 'Unable to show file',`fname`
1561
1561
1562 #----------------------------------------------------------------------------
1562 #----------------------------------------------------------------------------
1563 def snip_print(str,width = 75,print_full = 0,header = ''):
1563 def snip_print(str,width = 75,print_full = 0,header = ''):
1564 """Print a string snipping the midsection to fit in width.
1564 """Print a string snipping the midsection to fit in width.
1565
1565
1566 print_full: mode control:
1566 print_full: mode control:
1567 - 0: only snip long strings
1567 - 0: only snip long strings
1568 - 1: send to page() directly.
1568 - 1: send to page() directly.
1569 - 2: snip long strings and ask for full length viewing with page()
1569 - 2: snip long strings and ask for full length viewing with page()
1570 Return 1 if snipping was necessary, 0 otherwise."""
1570 Return 1 if snipping was necessary, 0 otherwise."""
1571
1571
1572 if print_full == 1:
1572 if print_full == 1:
1573 page(header+str)
1573 page(header+str)
1574 return 0
1574 return 0
1575
1575
1576 print header,
1576 print header,
1577 if len(str) < width:
1577 if len(str) < width:
1578 print str
1578 print str
1579 snip = 0
1579 snip = 0
1580 else:
1580 else:
1581 whalf = int((width -5)/2)
1581 whalf = int((width -5)/2)
1582 print str[:whalf] + ' <...> ' + str[-whalf:]
1582 print str[:whalf] + ' <...> ' + str[-whalf:]
1583 snip = 1
1583 snip = 1
1584 if snip and print_full == 2:
1584 if snip and print_full == 2:
1585 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1585 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1586 page(str)
1586 page(str)
1587 return snip
1587 return snip
1588
1588
1589 #****************************************************************************
1589 #****************************************************************************
1590 # lists, dicts and structures
1590 # lists, dicts and structures
1591
1591
1592 def belong(candidates,checklist):
1592 def belong(candidates,checklist):
1593 """Check whether a list of items appear in a given list of options.
1593 """Check whether a list of items appear in a given list of options.
1594
1594
1595 Returns a list of 1 and 0, one for each candidate given."""
1595 Returns a list of 1 and 0, one for each candidate given."""
1596
1596
1597 return [x in checklist for x in candidates]
1597 return [x in checklist for x in candidates]
1598
1598
1599 #----------------------------------------------------------------------------
1599 #----------------------------------------------------------------------------
1600 def uniq_stable(elems):
1600 def uniq_stable(elems):
1601 """uniq_stable(elems) -> list
1601 """uniq_stable(elems) -> list
1602
1602
1603 Return from an iterable, a list of all the unique elements in the input,
1603 Return from an iterable, a list of all the unique elements in the input,
1604 but maintaining the order in which they first appear.
1604 but maintaining the order in which they first appear.
1605
1605
1606 A naive solution to this problem which just makes a dictionary with the
1606 A naive solution to this problem which just makes a dictionary with the
1607 elements as keys fails to respect the stability condition, since
1607 elements as keys fails to respect the stability condition, since
1608 dictionaries are unsorted by nature.
1608 dictionaries are unsorted by nature.
1609
1609
1610 Note: All elements in the input must be valid dictionary keys for this
1610 Note: All elements in the input must be valid dictionary keys for this
1611 routine to work, as it internally uses a dictionary for efficiency
1611 routine to work, as it internally uses a dictionary for efficiency
1612 reasons."""
1612 reasons."""
1613
1613
1614 unique = []
1614 unique = []
1615 unique_dict = {}
1615 unique_dict = {}
1616 for nn in elems:
1616 for nn in elems:
1617 if nn not in unique_dict:
1617 if nn not in unique_dict:
1618 unique.append(nn)
1618 unique.append(nn)
1619 unique_dict[nn] = None
1619 unique_dict[nn] = None
1620 return unique
1620 return unique
1621
1621
1622 #----------------------------------------------------------------------------
1622 #----------------------------------------------------------------------------
1623 class NLprinter:
1623 class NLprinter:
1624 """Print an arbitrarily nested list, indicating index numbers.
1624 """Print an arbitrarily nested list, indicating index numbers.
1625
1625
1626 An instance of this class called nlprint is available and callable as a
1626 An instance of this class called nlprint is available and callable as a
1627 function.
1627 function.
1628
1628
1629 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1629 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1630 and using 'sep' to separate the index from the value. """
1630 and using 'sep' to separate the index from the value. """
1631
1631
1632 def __init__(self):
1632 def __init__(self):
1633 self.depth = 0
1633 self.depth = 0
1634
1634
1635 def __call__(self,lst,pos='',**kw):
1635 def __call__(self,lst,pos='',**kw):
1636 """Prints the nested list numbering levels."""
1636 """Prints the nested list numbering levels."""
1637 kw.setdefault('indent',' ')
1637 kw.setdefault('indent',' ')
1638 kw.setdefault('sep',': ')
1638 kw.setdefault('sep',': ')
1639 kw.setdefault('start',0)
1639 kw.setdefault('start',0)
1640 kw.setdefault('stop',len(lst))
1640 kw.setdefault('stop',len(lst))
1641 # we need to remove start and stop from kw so they don't propagate
1641 # we need to remove start and stop from kw so they don't propagate
1642 # into a recursive call for a nested list.
1642 # into a recursive call for a nested list.
1643 start = kw['start']; del kw['start']
1643 start = kw['start']; del kw['start']
1644 stop = kw['stop']; del kw['stop']
1644 stop = kw['stop']; del kw['stop']
1645 if self.depth == 0 and 'header' in kw.keys():
1645 if self.depth == 0 and 'header' in kw.keys():
1646 print kw['header']
1646 print kw['header']
1647
1647
1648 for idx in range(start,stop):
1648 for idx in range(start,stop):
1649 elem = lst[idx]
1649 elem = lst[idx]
1650 if type(elem)==type([]):
1650 if type(elem)==type([]):
1651 self.depth += 1
1651 self.depth += 1
1652 self.__call__(elem,itpl('$pos$idx,'),**kw)
1652 self.__call__(elem,itpl('$pos$idx,'),**kw)
1653 self.depth -= 1
1653 self.depth -= 1
1654 else:
1654 else:
1655 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1655 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1656
1656
1657 nlprint = NLprinter()
1657 nlprint = NLprinter()
1658 #----------------------------------------------------------------------------
1658 #----------------------------------------------------------------------------
1659 def all_belong(candidates,checklist):
1659 def all_belong(candidates,checklist):
1660 """Check whether a list of items ALL appear in a given list of options.
1660 """Check whether a list of items ALL appear in a given list of options.
1661
1661
1662 Returns a single 1 or 0 value."""
1662 Returns a single 1 or 0 value."""
1663
1663
1664 return 1-(0 in [x in checklist for x in candidates])
1664 return 1-(0 in [x in checklist for x in candidates])
1665
1665
1666 #----------------------------------------------------------------------------
1666 #----------------------------------------------------------------------------
1667 def sort_compare(lst1,lst2,inplace = 1):
1667 def sort_compare(lst1,lst2,inplace = 1):
1668 """Sort and compare two lists.
1668 """Sort and compare two lists.
1669
1669
1670 By default it does it in place, thus modifying the lists. Use inplace = 0
1670 By default it does it in place, thus modifying the lists. Use inplace = 0
1671 to avoid that (at the cost of temporary copy creation)."""
1671 to avoid that (at the cost of temporary copy creation)."""
1672 if not inplace:
1672 if not inplace:
1673 lst1 = lst1[:]
1673 lst1 = lst1[:]
1674 lst2 = lst2[:]
1674 lst2 = lst2[:]
1675 lst1.sort(); lst2.sort()
1675 lst1.sort(); lst2.sort()
1676 return lst1 == lst2
1676 return lst1 == lst2
1677
1677
1678 #----------------------------------------------------------------------------
1678 #----------------------------------------------------------------------------
1679 def mkdict(**kwargs):
1679 def mkdict(**kwargs):
1680 """Return a dict from a keyword list.
1680 """Return a dict from a keyword list.
1681
1681
1682 It's just syntactic sugar for making ditcionary creation more convenient:
1682 It's just syntactic sugar for making ditcionary creation more convenient:
1683 # the standard way
1683 # the standard way
1684 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1684 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1685 # a cleaner way
1685 # a cleaner way
1686 >>>data = dict(red=1, green=2, blue=3)
1686 >>>data = dict(red=1, green=2, blue=3)
1687
1687
1688 If you need more than this, look at the Struct() class."""
1688 If you need more than this, look at the Struct() class."""
1689
1689
1690 return kwargs
1690 return kwargs
1691
1691
1692 #----------------------------------------------------------------------------
1692 #----------------------------------------------------------------------------
1693 def list2dict(lst):
1693 def list2dict(lst):
1694 """Takes a list of (key,value) pairs and turns it into a dict."""
1694 """Takes a list of (key,value) pairs and turns it into a dict."""
1695
1695
1696 dic = {}
1696 dic = {}
1697 for k,v in lst: dic[k] = v
1697 for k,v in lst: dic[k] = v
1698 return dic
1698 return dic
1699
1699
1700 #----------------------------------------------------------------------------
1700 #----------------------------------------------------------------------------
1701 def list2dict2(lst,default=''):
1701 def list2dict2(lst,default=''):
1702 """Takes a list and turns it into a dict.
1702 """Takes a list and turns it into a dict.
1703 Much slower than list2dict, but more versatile. This version can take
1703 Much slower than list2dict, but more versatile. This version can take
1704 lists with sublists of arbitrary length (including sclars)."""
1704 lists with sublists of arbitrary length (including sclars)."""
1705
1705
1706 dic = {}
1706 dic = {}
1707 for elem in lst:
1707 for elem in lst:
1708 if type(elem) in (types.ListType,types.TupleType):
1708 if type(elem) in (types.ListType,types.TupleType):
1709 size = len(elem)
1709 size = len(elem)
1710 if size == 0:
1710 if size == 0:
1711 pass
1711 pass
1712 elif size == 1:
1712 elif size == 1:
1713 dic[elem] = default
1713 dic[elem] = default
1714 else:
1714 else:
1715 k,v = elem[0], elem[1:]
1715 k,v = elem[0], elem[1:]
1716 if len(v) == 1: v = v[0]
1716 if len(v) == 1: v = v[0]
1717 dic[k] = v
1717 dic[k] = v
1718 else:
1718 else:
1719 dic[elem] = default
1719 dic[elem] = default
1720 return dic
1720 return dic
1721
1721
1722 #----------------------------------------------------------------------------
1722 #----------------------------------------------------------------------------
1723 def flatten(seq):
1723 def flatten(seq):
1724 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1724 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1725
1725
1726 return [x for subseq in seq for x in subseq]
1726 return [x for subseq in seq for x in subseq]
1727
1727
1728 #----------------------------------------------------------------------------
1728 #----------------------------------------------------------------------------
1729 def get_slice(seq,start=0,stop=None,step=1):
1729 def get_slice(seq,start=0,stop=None,step=1):
1730 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1730 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1731 if stop == None:
1731 if stop == None:
1732 stop = len(seq)
1732 stop = len(seq)
1733 item = lambda i: seq[i]
1733 item = lambda i: seq[i]
1734 return map(item,xrange(start,stop,step))
1734 return map(item,xrange(start,stop,step))
1735
1735
1736 #----------------------------------------------------------------------------
1736 #----------------------------------------------------------------------------
1737 def chop(seq,size):
1737 def chop(seq,size):
1738 """Chop a sequence into chunks of the given size."""
1738 """Chop a sequence into chunks of the given size."""
1739 chunk = lambda i: seq[i:i+size]
1739 chunk = lambda i: seq[i:i+size]
1740 return map(chunk,xrange(0,len(seq),size))
1740 return map(chunk,xrange(0,len(seq),size))
1741
1741
1742 #----------------------------------------------------------------------------
1742 #----------------------------------------------------------------------------
1743 # with is a keyword as of python 2.5, so this function is renamed to withobj
1743 # with is a keyword as of python 2.5, so this function is renamed to withobj
1744 # from its old 'with' name.
1744 # from its old 'with' name.
1745 def with_obj(object, **args):
1745 def with_obj(object, **args):
1746 """Set multiple attributes for an object, similar to Pascal's with.
1746 """Set multiple attributes for an object, similar to Pascal's with.
1747
1747
1748 Example:
1748 Example:
1749 with_obj(jim,
1749 with_obj(jim,
1750 born = 1960,
1750 born = 1960,
1751 haircolour = 'Brown',
1751 haircolour = 'Brown',
1752 eyecolour = 'Green')
1752 eyecolour = 'Green')
1753
1753
1754 Credit: Greg Ewing, in
1754 Credit: Greg Ewing, in
1755 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1755 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1756
1756
1757 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1757 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1758 has become a keyword for Python 2.5, so we had to rename it."""
1758 has become a keyword for Python 2.5, so we had to rename it."""
1759
1759
1760 object.__dict__.update(args)
1760 object.__dict__.update(args)
1761
1761
1762 #----------------------------------------------------------------------------
1762 #----------------------------------------------------------------------------
1763 def setattr_list(obj,alist,nspace = None):
1763 def setattr_list(obj,alist,nspace = None):
1764 """Set a list of attributes for an object taken from a namespace.
1764 """Set a list of attributes for an object taken from a namespace.
1765
1765
1766 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1766 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1767 alist with their values taken from nspace, which must be a dict (something
1767 alist with their values taken from nspace, which must be a dict (something
1768 like locals() will often do) If nspace isn't given, locals() of the
1768 like locals() will often do) If nspace isn't given, locals() of the
1769 *caller* is used, so in most cases you can omit it.
1769 *caller* is used, so in most cases you can omit it.
1770
1770
1771 Note that alist can be given as a string, which will be automatically
1771 Note that alist can be given as a string, which will be automatically
1772 split into a list on whitespace. If given as a list, it must be a list of
1772 split into a list on whitespace. If given as a list, it must be a list of
1773 *strings* (the variable names themselves), not of variables."""
1773 *strings* (the variable names themselves), not of variables."""
1774
1774
1775 # this grabs the local variables from the *previous* call frame -- that is
1775 # this grabs the local variables from the *previous* call frame -- that is
1776 # the locals from the function that called setattr_list().
1776 # the locals from the function that called setattr_list().
1777 # - snipped from weave.inline()
1777 # - snipped from weave.inline()
1778 if nspace is None:
1778 if nspace is None:
1779 call_frame = sys._getframe().f_back
1779 call_frame = sys._getframe().f_back
1780 nspace = call_frame.f_locals
1780 nspace = call_frame.f_locals
1781
1781
1782 if type(alist) in StringTypes:
1782 if type(alist) in StringTypes:
1783 alist = alist.split()
1783 alist = alist.split()
1784 for attr in alist:
1784 for attr in alist:
1785 val = eval(attr,nspace)
1785 val = eval(attr,nspace)
1786 setattr(obj,attr,val)
1786 setattr(obj,attr,val)
1787
1787
1788 #----------------------------------------------------------------------------
1788 #----------------------------------------------------------------------------
1789 def getattr_list(obj,alist,*args):
1789 def getattr_list(obj,alist,*args):
1790 """getattr_list(obj,alist[, default]) -> attribute list.
1790 """getattr_list(obj,alist[, default]) -> attribute list.
1791
1791
1792 Get a list of named attributes for an object. When a default argument is
1792 Get a list of named attributes for an object. When a default argument is
1793 given, it is returned when the attribute doesn't exist; without it, an
1793 given, it is returned when the attribute doesn't exist; without it, an
1794 exception is raised in that case.
1794 exception is raised in that case.
1795
1795
1796 Note that alist can be given as a string, which will be automatically
1796 Note that alist can be given as a string, which will be automatically
1797 split into a list on whitespace. If given as a list, it must be a list of
1797 split into a list on whitespace. If given as a list, it must be a list of
1798 *strings* (the variable names themselves), not of variables."""
1798 *strings* (the variable names themselves), not of variables."""
1799
1799
1800 if type(alist) in StringTypes:
1800 if type(alist) in StringTypes:
1801 alist = alist.split()
1801 alist = alist.split()
1802 if args:
1802 if args:
1803 if len(args)==1:
1803 if len(args)==1:
1804 default = args[0]
1804 default = args[0]
1805 return map(lambda attr: getattr(obj,attr,default),alist)
1805 return map(lambda attr: getattr(obj,attr,default),alist)
1806 else:
1806 else:
1807 raise ValueError,'getattr_list() takes only one optional argument'
1807 raise ValueError,'getattr_list() takes only one optional argument'
1808 else:
1808 else:
1809 return map(lambda attr: getattr(obj,attr),alist)
1809 return map(lambda attr: getattr(obj,attr),alist)
1810
1810
1811 #----------------------------------------------------------------------------
1811 #----------------------------------------------------------------------------
1812 def map_method(method,object_list,*argseq,**kw):
1812 def map_method(method,object_list,*argseq,**kw):
1813 """map_method(method,object_list,*args,**kw) -> list
1813 """map_method(method,object_list,*args,**kw) -> list
1814
1814
1815 Return a list of the results of applying the methods to the items of the
1815 Return a list of the results of applying the methods to the items of the
1816 argument sequence(s). If more than one sequence is given, the method is
1816 argument sequence(s). If more than one sequence is given, the method is
1817 called with an argument list consisting of the corresponding item of each
1817 called with an argument list consisting of the corresponding item of each
1818 sequence. All sequences must be of the same length.
1818 sequence. All sequences must be of the same length.
1819
1819
1820 Keyword arguments are passed verbatim to all objects called.
1820 Keyword arguments are passed verbatim to all objects called.
1821
1821
1822 This is Python code, so it's not nearly as fast as the builtin map()."""
1822 This is Python code, so it's not nearly as fast as the builtin map()."""
1823
1823
1824 out_list = []
1824 out_list = []
1825 idx = 0
1825 idx = 0
1826 for object in object_list:
1826 for object in object_list:
1827 try:
1827 try:
1828 handler = getattr(object, method)
1828 handler = getattr(object, method)
1829 except AttributeError:
1829 except AttributeError:
1830 out_list.append(None)
1830 out_list.append(None)
1831 else:
1831 else:
1832 if argseq:
1832 if argseq:
1833 args = map(lambda lst:lst[idx],argseq)
1833 args = map(lambda lst:lst[idx],argseq)
1834 #print 'ob',object,'hand',handler,'ar',args # dbg
1834 #print 'ob',object,'hand',handler,'ar',args # dbg
1835 out_list.append(handler(args,**kw))
1835 out_list.append(handler(args,**kw))
1836 else:
1836 else:
1837 out_list.append(handler(**kw))
1837 out_list.append(handler(**kw))
1838 idx += 1
1838 idx += 1
1839 return out_list
1839 return out_list
1840
1840
1841 #----------------------------------------------------------------------------
1841 #----------------------------------------------------------------------------
1842 def get_class_members(cls):
1842 def get_class_members(cls):
1843 ret = dir(cls)
1843 ret = dir(cls)
1844 if hasattr(cls,'__bases__'):
1844 if hasattr(cls,'__bases__'):
1845 for base in cls.__bases__:
1845 for base in cls.__bases__:
1846 ret.extend(get_class_members(base))
1846 ret.extend(get_class_members(base))
1847 return ret
1847 return ret
1848
1848
1849 #----------------------------------------------------------------------------
1849 #----------------------------------------------------------------------------
1850 def dir2(obj):
1850 def dir2(obj):
1851 """dir2(obj) -> list of strings
1851 """dir2(obj) -> list of strings
1852
1852
1853 Extended version of the Python builtin dir(), which does a few extra
1853 Extended version of the Python builtin dir(), which does a few extra
1854 checks, and supports common objects with unusual internals that confuse
1854 checks, and supports common objects with unusual internals that confuse
1855 dir(), such as Traits and PyCrust.
1855 dir(), such as Traits and PyCrust.
1856
1856
1857 This version is guaranteed to return only a list of true strings, whereas
1857 This version is guaranteed to return only a list of true strings, whereas
1858 dir() returns anything that objects inject into themselves, even if they
1858 dir() returns anything that objects inject into themselves, even if they
1859 are later not really valid for attribute access (many extension libraries
1859 are later not really valid for attribute access (many extension libraries
1860 have such bugs).
1860 have such bugs).
1861 """
1861 """
1862
1862
1863 # Start building the attribute list via dir(), and then complete it
1863 # Start building the attribute list via dir(), and then complete it
1864 # with a few extra special-purpose calls.
1864 # with a few extra special-purpose calls.
1865 words = dir(obj)
1865 words = dir(obj)
1866
1866
1867 if hasattr(obj,'__class__'):
1867 if hasattr(obj,'__class__'):
1868 words.append('__class__')
1868 words.append('__class__')
1869 words.extend(get_class_members(obj.__class__))
1869 words.extend(get_class_members(obj.__class__))
1870 #if '__base__' in words: 1/0
1870 #if '__base__' in words: 1/0
1871
1871
1872 # Some libraries (such as traits) may introduce duplicates, we want to
1872 # Some libraries (such as traits) may introduce duplicates, we want to
1873 # track and clean this up if it happens
1873 # track and clean this up if it happens
1874 may_have_dupes = False
1874 may_have_dupes = False
1875
1875
1876 # this is the 'dir' function for objects with Enthought's traits
1876 # this is the 'dir' function for objects with Enthought's traits
1877 if hasattr(obj, 'trait_names'):
1877 if hasattr(obj, 'trait_names'):
1878 try:
1878 try:
1879 words.extend(obj.trait_names())
1879 words.extend(obj.trait_names())
1880 may_have_dupes = True
1880 may_have_dupes = True
1881 except TypeError:
1881 except TypeError:
1882 # This will happen if `obj` is a class and not an instance.
1882 # This will happen if `obj` is a class and not an instance.
1883 pass
1883 pass
1884
1884
1885 # Support for PyCrust-style _getAttributeNames magic method.
1885 # Support for PyCrust-style _getAttributeNames magic method.
1886 if hasattr(obj, '_getAttributeNames'):
1886 if hasattr(obj, '_getAttributeNames'):
1887 try:
1887 try:
1888 words.extend(obj._getAttributeNames())
1888 words.extend(obj._getAttributeNames())
1889 may_have_dupes = True
1889 may_have_dupes = True
1890 except TypeError:
1890 except TypeError:
1891 # `obj` is a class and not an instance. Ignore
1891 # `obj` is a class and not an instance. Ignore
1892 # this error.
1892 # this error.
1893 pass
1893 pass
1894
1894
1895 if may_have_dupes:
1895 if may_have_dupes:
1896 # eliminate possible duplicates, as some traits may also
1896 # eliminate possible duplicates, as some traits may also
1897 # appear as normal attributes in the dir() call.
1897 # appear as normal attributes in the dir() call.
1898 words = list(set(words))
1898 words = list(set(words))
1899 words.sort()
1899 words.sort()
1900
1900
1901 # filter out non-string attributes which may be stuffed by dir() calls
1901 # filter out non-string attributes which may be stuffed by dir() calls
1902 # and poor coding in third-party modules
1902 # and poor coding in third-party modules
1903 return [w for w in words if isinstance(w, basestring)]
1903 return [w for w in words if isinstance(w, basestring)]
1904
1904
1905 #----------------------------------------------------------------------------
1905 #----------------------------------------------------------------------------
1906 def import_fail_info(mod_name,fns=None):
1906 def import_fail_info(mod_name,fns=None):
1907 """Inform load failure for a module."""
1907 """Inform load failure for a module."""
1908
1908
1909 if fns == None:
1909 if fns == None:
1910 warn("Loading of %s failed.\n" % (mod_name,))
1910 warn("Loading of %s failed.\n" % (mod_name,))
1911 else:
1911 else:
1912 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1912 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1913
1913
1914 #----------------------------------------------------------------------------
1914 #----------------------------------------------------------------------------
1915 # Proposed popitem() extension, written as a method
1915 # Proposed popitem() extension, written as a method
1916
1916
1917
1917
1918 class NotGiven: pass
1918 class NotGiven: pass
1919
1919
1920 def popkey(dct,key,default=NotGiven):
1920 def popkey(dct,key,default=NotGiven):
1921 """Return dct[key] and delete dct[key].
1921 """Return dct[key] and delete dct[key].
1922
1922
1923 If default is given, return it if dct[key] doesn't exist, otherwise raise
1923 If default is given, return it if dct[key] doesn't exist, otherwise raise
1924 KeyError. """
1924 KeyError. """
1925
1925
1926 try:
1926 try:
1927 val = dct[key]
1927 val = dct[key]
1928 except KeyError:
1928 except KeyError:
1929 if default is NotGiven:
1929 if default is NotGiven:
1930 raise
1930 raise
1931 else:
1931 else:
1932 return default
1932 return default
1933 else:
1933 else:
1934 del dct[key]
1934 del dct[key]
1935 return val
1935 return val
1936
1936
1937 def wrap_deprecated(func, suggest = '<nothing>'):
1937 def wrap_deprecated(func, suggest = '<nothing>'):
1938 def newFunc(*args, **kwargs):
1938 def newFunc(*args, **kwargs):
1939 warnings.warn("Call to deprecated function %s, use %s instead" %
1939 warnings.warn("Call to deprecated function %s, use %s instead" %
1940 ( func.__name__, suggest),
1940 ( func.__name__, suggest),
1941 category=DeprecationWarning,
1941 category=DeprecationWarning,
1942 stacklevel = 2)
1942 stacklevel = 2)
1943 return func(*args, **kwargs)
1943 return func(*args, **kwargs)
1944 return newFunc
1944 return newFunc
1945
1945
1946 #*************************** end of file <genutils.py> **********************
1946 #*************************** end of file <genutils.py> **********************
1947
1947
@@ -1,7185 +1,7191 b''
1 2007-09-18 Ville Vainio <vivainio@gmail.com>
2
3 * genutils.py(make_quoted_expr): Do not use Itpl, it does
4 not support unicode at the moment. Fixes (many) magic calls with
5 special characters.
6
1 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
7 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
2
8
3 * IPython/genutils.py (doctest_reload): expose the doctest
9 * IPython/genutils.py (doctest_reload): expose the doctest
4 reloader to the user so that people can easily reset doctest while
10 reloader to the user so that people can easily reset doctest while
5 using it interactively. Fixes a problem reported by Jorgen.
11 using it interactively. Fixes a problem reported by Jorgen.
6
12
7 * IPython/iplib.py (InteractiveShell.__init__): protect the
13 * IPython/iplib.py (InteractiveShell.__init__): protect the
8 FakeModule instances used for __main__ in %run calls from
14 FakeModule instances used for __main__ in %run calls from
9 deletion, so that user code defined in them isn't left with
15 deletion, so that user code defined in them isn't left with
10 dangling references due to the Python module deletion machinery.
16 dangling references due to the Python module deletion machinery.
11 This should fix the problems reported by Darren.
17 This should fix the problems reported by Darren.
12
18
13 2007-09-10 Darren Dale <dd55@cornell.edu>
19 2007-09-10 Darren Dale <dd55@cornell.edu>
14
20
15 * Cleanup of IPShellQt and IPShellQt4
21 * Cleanup of IPShellQt and IPShellQt4
16
22
17 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
23 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
18
24
19 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
25 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
20 doctest support.
26 doctest support.
21
27
22 * IPython/iplib.py (safe_execfile): minor docstring improvements.
28 * IPython/iplib.py (safe_execfile): minor docstring improvements.
23
29
24 2007-09-08 Ville Vainio <vivainio@gmail.com>
30 2007-09-08 Ville Vainio <vivainio@gmail.com>
25
31
26 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
32 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
27 directory, not the target directory.
33 directory, not the target directory.
28
34
29 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
35 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
30 exception that won't print the tracebacks. Switched many magics to
36 exception that won't print the tracebacks. Switched many magics to
31 raise them on error situations, also GetoptError is not printed
37 raise them on error situations, also GetoptError is not printed
32 anymore.
38 anymore.
33
39
34 2007-09-07 Ville Vainio <vivainio@gmail.com>
40 2007-09-07 Ville Vainio <vivainio@gmail.com>
35
41
36 * iplib.py: do not auto-alias "dir", it screws up other dir auto
42 * iplib.py: do not auto-alias "dir", it screws up other dir auto
37 aliases.
43 aliases.
38
44
39 * genutils.py: SList.grep() implemented.
45 * genutils.py: SList.grep() implemented.
40
46
41 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
47 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
42 for easy "out of the box" setup of several common editors, so that
48 for easy "out of the box" setup of several common editors, so that
43 e.g. '%edit os.path.isfile' will jump to the correct line
49 e.g. '%edit os.path.isfile' will jump to the correct line
44 automatically. Contributions for command lines of your favourite
50 automatically. Contributions for command lines of your favourite
45 editors welcome.
51 editors welcome.
46
52
47 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
53 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
48
54
49 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
55 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
50 preventing source display in certain cases. In reality I think
56 preventing source display in certain cases. In reality I think
51 the problem is with Ubuntu's Python build, but this change works
57 the problem is with Ubuntu's Python build, but this change works
52 around the issue in some cases (not in all, unfortunately). I'd
58 around the issue in some cases (not in all, unfortunately). I'd
53 filed a Python bug on this with more details, but in the change of
59 filed a Python bug on this with more details, but in the change of
54 bug trackers it seems to have been lost.
60 bug trackers it seems to have been lost.
55
61
56 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
62 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
57 not the same, it's not self-documenting, doesn't allow range
63 not the same, it's not self-documenting, doesn't allow range
58 selection, and sorts alphabetically instead of numerically.
64 selection, and sorts alphabetically instead of numerically.
59 (magic_r): restore %r. No, "up + enter. One char magic" is not
65 (magic_r): restore %r. No, "up + enter. One char magic" is not
60 the same thing, since %r takes parameters to allow fast retrieval
66 the same thing, since %r takes parameters to allow fast retrieval
61 of old commands. I've received emails from users who use this a
67 of old commands. I've received emails from users who use this a
62 LOT, so it stays.
68 LOT, so it stays.
63 (magic_automagic): restore %automagic. "use _ip.option.automagic"
69 (magic_automagic): restore %automagic. "use _ip.option.automagic"
64 is not a valid replacement b/c it doesn't provide an complete
70 is not a valid replacement b/c it doesn't provide an complete
65 explanation (which the automagic docstring does).
71 explanation (which the automagic docstring does).
66 (magic_autocall): restore %autocall, with improved docstring.
72 (magic_autocall): restore %autocall, with improved docstring.
67 Same argument as for others, "use _ip.options.autocall" is not a
73 Same argument as for others, "use _ip.options.autocall" is not a
68 valid replacement.
74 valid replacement.
69 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
75 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
70 tutorials and online docs.
76 tutorials and online docs.
71
77
72 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
78 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
73
79
74 * IPython/usage.py (quick_reference): mention magics in quickref,
80 * IPython/usage.py (quick_reference): mention magics in quickref,
75 modified main banner to mention %quickref.
81 modified main banner to mention %quickref.
76
82
77 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
83 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
78
84
79 2007-09-06 Ville Vainio <vivainio@gmail.com>
85 2007-09-06 Ville Vainio <vivainio@gmail.com>
80
86
81 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
87 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
82 Callable aliases now pass the _ip as first arg. This breaks
88 Callable aliases now pass the _ip as first arg. This breaks
83 compatibility with earlier 0.8.2.svn series! (though they should
89 compatibility with earlier 0.8.2.svn series! (though they should
84 not have been in use yet outside these few extensions)
90 not have been in use yet outside these few extensions)
85
91
86 2007-09-05 Ville Vainio <vivainio@gmail.com>
92 2007-09-05 Ville Vainio <vivainio@gmail.com>
87
93
88 * external/mglob.py: expand('dirname') => ['dirname'], instead
94 * external/mglob.py: expand('dirname') => ['dirname'], instead
89 of ['dirname/foo','dirname/bar', ...].
95 of ['dirname/foo','dirname/bar', ...].
90
96
91 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
97 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
92 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
98 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
93 is useful for others as well).
99 is useful for others as well).
94
100
95 * iplib.py: on callable aliases (as opposed to old style aliases),
101 * iplib.py: on callable aliases (as opposed to old style aliases),
96 do var_expand() immediately, and use make_quoted_expr instead
102 do var_expand() immediately, and use make_quoted_expr instead
97 of hardcoded r"""
103 of hardcoded r"""
98
104
99 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
105 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
100 if not available load ipy_fsops.py for cp, mv, etc. replacements
106 if not available load ipy_fsops.py for cp, mv, etc. replacements
101
107
102 * OInspect.py, ipy_which.py: improve %which and obj? for callable
108 * OInspect.py, ipy_which.py: improve %which and obj? for callable
103 aliases
109 aliases
104
110
105 2007-09-04 Ville Vainio <vivainio@gmail.com>
111 2007-09-04 Ville Vainio <vivainio@gmail.com>
106
112
107 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
113 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
108 Relicensed under BSD with the authors approval.
114 Relicensed under BSD with the authors approval.
109
115
110 * ipmaker.py, usage.py: Remove %magic from default banner, improve
116 * ipmaker.py, usage.py: Remove %magic from default banner, improve
111 %quickref
117 %quickref
112
118
113 2007-09-03 Ville Vainio <vivainio@gmail.com>
119 2007-09-03 Ville Vainio <vivainio@gmail.com>
114
120
115 * Magic.py: %time now passes expression through prefilter,
121 * Magic.py: %time now passes expression through prefilter,
116 allowing IPython syntax.
122 allowing IPython syntax.
117
123
118 2007-09-01 Ville Vainio <vivainio@gmail.com>
124 2007-09-01 Ville Vainio <vivainio@gmail.com>
119
125
120 * ipmaker.py: Always show full traceback when newstyle config fails
126 * ipmaker.py: Always show full traceback when newstyle config fails
121
127
122 2007-08-27 Ville Vainio <vivainio@gmail.com>
128 2007-08-27 Ville Vainio <vivainio@gmail.com>
123
129
124 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
130 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
125
131
126 2007-08-26 Ville Vainio <vivainio@gmail.com>
132 2007-08-26 Ville Vainio <vivainio@gmail.com>
127
133
128 * ipmaker.py: Command line args have the highest priority again
134 * ipmaker.py: Command line args have the highest priority again
129
135
130 * iplib.py, ipmaker.py: -i command line argument now behaves as in
136 * iplib.py, ipmaker.py: -i command line argument now behaves as in
131 normal python, i.e. leaves the IPython session running after -c
137 normal python, i.e. leaves the IPython session running after -c
132 command or running a batch file from command line.
138 command or running a batch file from command line.
133
139
134 2007-08-22 Ville Vainio <vivainio@gmail.com>
140 2007-08-22 Ville Vainio <vivainio@gmail.com>
135
141
136 * iplib.py: no extra empty (last) line in raw hist w/ multiline
142 * iplib.py: no extra empty (last) line in raw hist w/ multiline
137 statements
143 statements
138
144
139 * logger.py: Fix bug where blank lines in history were not
145 * logger.py: Fix bug where blank lines in history were not
140 added until AFTER adding the current line; translated and raw
146 added until AFTER adding the current line; translated and raw
141 history should finally be in sync with prompt now.
147 history should finally be in sync with prompt now.
142
148
143 * ipy_completers.py: quick_completer now makes it easy to create
149 * ipy_completers.py: quick_completer now makes it easy to create
144 trivial custom completers
150 trivial custom completers
145
151
146 * clearcmd.py: shadow history compression & erasing, fixed input hist
152 * clearcmd.py: shadow history compression & erasing, fixed input hist
147 clearing.
153 clearing.
148
154
149 * envpersist.py, history.py: %env (sh profile only), %hist completers
155 * envpersist.py, history.py: %env (sh profile only), %hist completers
150
156
151 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
157 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
152 term title now include the drive letter, and always use / instead of
158 term title now include the drive letter, and always use / instead of
153 os.sep (as per recommended approach for win32 ipython in general).
159 os.sep (as per recommended approach for win32 ipython in general).
154
160
155 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
161 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
156 plain python scripts from ipykit command line by running
162 plain python scripts from ipykit command line by running
157 "py myscript.py", even w/o installed python.
163 "py myscript.py", even w/o installed python.
158
164
159 2007-08-21 Ville Vainio <vivainio@gmail.com>
165 2007-08-21 Ville Vainio <vivainio@gmail.com>
160
166
161 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
167 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
162 (for backwards compatibility)
168 (for backwards compatibility)
163
169
164 * history.py: switch back to %hist -t from %hist -r as default.
170 * history.py: switch back to %hist -t from %hist -r as default.
165 At least until raw history is fixed for good.
171 At least until raw history is fixed for good.
166
172
167 2007-08-20 Ville Vainio <vivainio@gmail.com>
173 2007-08-20 Ville Vainio <vivainio@gmail.com>
168
174
169 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
175 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
170 locate alias redeclarations etc. Also, avoid handling
176 locate alias redeclarations etc. Also, avoid handling
171 _ip.IP.alias_table directly, prefer using _ip.defalias.
177 _ip.IP.alias_table directly, prefer using _ip.defalias.
172
178
173
179
174 2007-08-15 Ville Vainio <vivainio@gmail.com>
180 2007-08-15 Ville Vainio <vivainio@gmail.com>
175
181
176 * prefilter.py: ! is now always served first
182 * prefilter.py: ! is now always served first
177
183
178 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
184 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
179
185
180 * IPython/iplib.py (safe_execfile): fix the SystemExit
186 * IPython/iplib.py (safe_execfile): fix the SystemExit
181 auto-suppression code to work in Python2.4 (the internal structure
187 auto-suppression code to work in Python2.4 (the internal structure
182 of that exception changed and I'd only tested the code with 2.5).
188 of that exception changed and I'd only tested the code with 2.5).
183 Bug reported by a SciPy attendee.
189 Bug reported by a SciPy attendee.
184
190
185 2007-08-13 Ville Vainio <vivainio@gmail.com>
191 2007-08-13 Ville Vainio <vivainio@gmail.com>
186
192
187 * prefilter.py: reverted !c:/bin/foo fix, made % in
193 * prefilter.py: reverted !c:/bin/foo fix, made % in
188 multiline specials work again
194 multiline specials work again
189
195
190 2007-08-13 Ville Vainio <vivainio@gmail.com>
196 2007-08-13 Ville Vainio <vivainio@gmail.com>
191
197
192 * prefilter.py: Take more care to special-case !, so that
198 * prefilter.py: Take more care to special-case !, so that
193 !c:/bin/foo.exe works.
199 !c:/bin/foo.exe works.
194
200
195 * setup.py: if we are building eggs, strip all docs and
201 * setup.py: if we are building eggs, strip all docs and
196 examples (it doesn't make sense to bytecompile examples,
202 examples (it doesn't make sense to bytecompile examples,
197 and docs would be in an awkward place anyway).
203 and docs would be in an awkward place anyway).
198
204
199 * Ryan Krauss' patch fixes start menu shortcuts when IPython
205 * Ryan Krauss' patch fixes start menu shortcuts when IPython
200 is installed into a directory that has spaces in the name.
206 is installed into a directory that has spaces in the name.
201
207
202 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
208 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
203
209
204 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
210 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
205 doctest profile and %doctest_mode, so they actually generate the
211 doctest profile and %doctest_mode, so they actually generate the
206 blank lines needed by doctest to separate individual tests.
212 blank lines needed by doctest to separate individual tests.
207
213
208 * IPython/iplib.py (safe_execfile): modify so that running code
214 * IPython/iplib.py (safe_execfile): modify so that running code
209 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
215 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
210 doesn't get a printed traceback. Any other value in sys.exit(),
216 doesn't get a printed traceback. Any other value in sys.exit(),
211 including the empty call, still generates a traceback. This
217 including the empty call, still generates a traceback. This
212 enables use of %run without having to pass '-e' for codes that
218 enables use of %run without having to pass '-e' for codes that
213 correctly set the exit status flag.
219 correctly set the exit status flag.
214
220
215 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
221 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
216
222
217 * IPython/iplib.py (InteractiveShell.post_config_initialization):
223 * IPython/iplib.py (InteractiveShell.post_config_initialization):
218 fix problems with doctests failing when run inside IPython due to
224 fix problems with doctests failing when run inside IPython due to
219 IPython's modifications of sys.displayhook.
225 IPython's modifications of sys.displayhook.
220
226
221 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
227 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
222
228
223 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
229 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
224 a string with names.
230 a string with names.
225
231
226 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
232 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
227
233
228 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
234 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
229 magic to toggle on/off the doctest pasting support without having
235 magic to toggle on/off the doctest pasting support without having
230 to leave a session to switch to a separate profile.
236 to leave a session to switch to a separate profile.
231
237
232 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
238 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
233
239
234 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
240 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
235 introduce a blank line between inputs, to conform to doctest
241 introduce a blank line between inputs, to conform to doctest
236 requirements.
242 requirements.
237
243
238 * IPython/OInspect.py (Inspector.pinfo): fix another part where
244 * IPython/OInspect.py (Inspector.pinfo): fix another part where
239 auto-generated docstrings for new-style classes were showing up.
245 auto-generated docstrings for new-style classes were showing up.
240
246
241 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
247 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
242
248
243 * api_changes: Add new file to track backward-incompatible
249 * api_changes: Add new file to track backward-incompatible
244 user-visible changes.
250 user-visible changes.
245
251
246 2007-08-06 Ville Vainio <vivainio@gmail.com>
252 2007-08-06 Ville Vainio <vivainio@gmail.com>
247
253
248 * ipmaker.py: fix bug where user_config_ns didn't exist at all
254 * ipmaker.py: fix bug where user_config_ns didn't exist at all
249 before all the config files were handled.
255 before all the config files were handled.
250
256
251 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
257 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
252
258
253 * IPython/irunner.py (RunnerFactory): Add new factory class for
259 * IPython/irunner.py (RunnerFactory): Add new factory class for
254 creating reusable runners based on filenames.
260 creating reusable runners based on filenames.
255
261
256 * IPython/Extensions/ipy_profile_doctest.py: New profile for
262 * IPython/Extensions/ipy_profile_doctest.py: New profile for
257 doctest support. It sets prompts/exceptions as similar to
263 doctest support. It sets prompts/exceptions as similar to
258 standard Python as possible, so that ipython sessions in this
264 standard Python as possible, so that ipython sessions in this
259 profile can be easily pasted as doctests with minimal
265 profile can be easily pasted as doctests with minimal
260 modifications. It also enables pasting of doctests from external
266 modifications. It also enables pasting of doctests from external
261 sources (even if they have leading whitespace), so that you can
267 sources (even if they have leading whitespace), so that you can
262 rerun doctests from existing sources.
268 rerun doctests from existing sources.
263
269
264 * IPython/iplib.py (_prefilter): fix a buglet where after entering
270 * IPython/iplib.py (_prefilter): fix a buglet where after entering
265 some whitespace, the prompt would become a continuation prompt
271 some whitespace, the prompt would become a continuation prompt
266 with no way of exiting it other than Ctrl-C. This fix brings us
272 with no way of exiting it other than Ctrl-C. This fix brings us
267 into conformity with how the default python prompt works.
273 into conformity with how the default python prompt works.
268
274
269 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
275 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
270 Add support for pasting not only lines that start with '>>>', but
276 Add support for pasting not only lines that start with '>>>', but
271 also with ' >>>'. That is, arbitrary whitespace can now precede
277 also with ' >>>'. That is, arbitrary whitespace can now precede
272 the prompts. This makes the system useful for pasting doctests
278 the prompts. This makes the system useful for pasting doctests
273 from docstrings back into a normal session.
279 from docstrings back into a normal session.
274
280
275 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
281 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
276
282
277 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
283 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
278 r1357, which had killed multiple invocations of an embedded
284 r1357, which had killed multiple invocations of an embedded
279 ipython (this means that example-embed has been broken for over 1
285 ipython (this means that example-embed has been broken for over 1
280 year!!!). Rather than possibly breaking the batch stuff for which
286 year!!!). Rather than possibly breaking the batch stuff for which
281 the code in iplib.py/interact was introduced, I worked around the
287 the code in iplib.py/interact was introduced, I worked around the
282 problem in the embedding class in Shell.py. We really need a
288 problem in the embedding class in Shell.py. We really need a
283 bloody test suite for this code, I'm sick of finding stuff that
289 bloody test suite for this code, I'm sick of finding stuff that
284 used to work breaking left and right every time I use an old
290 used to work breaking left and right every time I use an old
285 feature I hadn't touched in a few months.
291 feature I hadn't touched in a few months.
286 (kill_embedded): Add a new magic that only shows up in embedded
292 (kill_embedded): Add a new magic that only shows up in embedded
287 mode, to allow users to permanently deactivate an embedded instance.
293 mode, to allow users to permanently deactivate an embedded instance.
288
294
289 2007-08-01 Ville Vainio <vivainio@gmail.com>
295 2007-08-01 Ville Vainio <vivainio@gmail.com>
290
296
291 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
297 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
292 history gets out of sync on runlines (e.g. when running macros).
298 history gets out of sync on runlines (e.g. when running macros).
293
299
294 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
300 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
295
301
296 * IPython/Magic.py (magic_colors): fix win32-related error message
302 * IPython/Magic.py (magic_colors): fix win32-related error message
297 that could appear under *nix when readline was missing. Patch by
303 that could appear under *nix when readline was missing. Patch by
298 Scott Jackson, closes #175.
304 Scott Jackson, closes #175.
299
305
300 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
306 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
301
307
302 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
308 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
303 completer that it traits-aware, so that traits objects don't show
309 completer that it traits-aware, so that traits objects don't show
304 all of their internal attributes all the time.
310 all of their internal attributes all the time.
305
311
306 * IPython/genutils.py (dir2): moved this code from inside
312 * IPython/genutils.py (dir2): moved this code from inside
307 completer.py to expose it publicly, so I could use it in the
313 completer.py to expose it publicly, so I could use it in the
308 wildcards bugfix.
314 wildcards bugfix.
309
315
310 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
316 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
311 Stefan with Traits.
317 Stefan with Traits.
312
318
313 * IPython/completer.py (Completer.attr_matches): change internal
319 * IPython/completer.py (Completer.attr_matches): change internal
314 var name from 'object' to 'obj', since 'object' is now a builtin
320 var name from 'object' to 'obj', since 'object' is now a builtin
315 and this can lead to weird bugs if reusing this code elsewhere.
321 and this can lead to weird bugs if reusing this code elsewhere.
316
322
317 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
323 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
318
324
319 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
325 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
320 'foo?' and update the code to prevent printing of default
326 'foo?' and update the code to prevent printing of default
321 docstrings that started appearing after I added support for
327 docstrings that started appearing after I added support for
322 new-style classes. The approach I'm using isn't ideal (I just
328 new-style classes. The approach I'm using isn't ideal (I just
323 special-case those strings) but I'm not sure how to more robustly
329 special-case those strings) but I'm not sure how to more robustly
324 differentiate between truly user-written strings and Python's
330 differentiate between truly user-written strings and Python's
325 automatic ones.
331 automatic ones.
326
332
327 2007-07-09 Ville Vainio <vivainio@gmail.com>
333 2007-07-09 Ville Vainio <vivainio@gmail.com>
328
334
329 * completer.py: Applied Matthew Neeley's patch:
335 * completer.py: Applied Matthew Neeley's patch:
330 Dynamic attributes from trait_names and _getAttributeNames are added
336 Dynamic attributes from trait_names and _getAttributeNames are added
331 to the list of tab completions, but when this happens, the attribute
337 to the list of tab completions, but when this happens, the attribute
332 list is turned into a set, so the attributes are unordered when
338 list is turned into a set, so the attributes are unordered when
333 printed, which makes it hard to find the right completion. This patch
339 printed, which makes it hard to find the right completion. This patch
334 turns this set back into a list and sort it.
340 turns this set back into a list and sort it.
335
341
336 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
342 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
337
343
338 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
344 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
339 classes in various inspector functions.
345 classes in various inspector functions.
340
346
341 2007-06-28 Ville Vainio <vivainio@gmail.com>
347 2007-06-28 Ville Vainio <vivainio@gmail.com>
342
348
343 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
349 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
344 Implement "shadow" namespace, and callable aliases that reside there.
350 Implement "shadow" namespace, and callable aliases that reside there.
345 Use them by:
351 Use them by:
346
352
347 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
353 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
348
354
349 foo hello world
355 foo hello world
350 (gets translated to:)
356 (gets translated to:)
351 _sh.foo(r"""hello world""")
357 _sh.foo(r"""hello world""")
352
358
353 In practice, this kind of alias can take the role of a magic function
359 In practice, this kind of alias can take the role of a magic function
354
360
355 * New generic inspect_object, called on obj? and obj??
361 * New generic inspect_object, called on obj? and obj??
356
362
357 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
363 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
358
364
359 * IPython/ultraTB.py (findsource): fix a problem with
365 * IPython/ultraTB.py (findsource): fix a problem with
360 inspect.getfile that can cause crashes during traceback construction.
366 inspect.getfile that can cause crashes during traceback construction.
361
367
362 2007-06-14 Ville Vainio <vivainio@gmail.com>
368 2007-06-14 Ville Vainio <vivainio@gmail.com>
363
369
364 * iplib.py (handle_auto): Try to use ascii for printing "--->"
370 * iplib.py (handle_auto): Try to use ascii for printing "--->"
365 autocall rewrite indication, becausesometimes unicode fails to print
371 autocall rewrite indication, becausesometimes unicode fails to print
366 properly (and you get ' - - - '). Use plain uncoloured ---> for
372 properly (and you get ' - - - '). Use plain uncoloured ---> for
367 unicode.
373 unicode.
368
374
369 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
375 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
370
376
371 . pickleshare 'hash' commands (hget, hset, hcompress,
377 . pickleshare 'hash' commands (hget, hset, hcompress,
372 hdict) for efficient shadow history storage.
378 hdict) for efficient shadow history storage.
373
379
374 2007-06-13 Ville Vainio <vivainio@gmail.com>
380 2007-06-13 Ville Vainio <vivainio@gmail.com>
375
381
376 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
382 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
377 Added kw arg 'interactive', tell whether vars should be visible
383 Added kw arg 'interactive', tell whether vars should be visible
378 with %whos.
384 with %whos.
379
385
380 2007-06-11 Ville Vainio <vivainio@gmail.com>
386 2007-06-11 Ville Vainio <vivainio@gmail.com>
381
387
382 * pspersistence.py, Magic.py, iplib.py: directory history now saved
388 * pspersistence.py, Magic.py, iplib.py: directory history now saved
383 to db
389 to db
384
390
385 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
391 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
386 Also, it exits IPython immediately after evaluating the command (just like
392 Also, it exits IPython immediately after evaluating the command (just like
387 std python)
393 std python)
388
394
389 2007-06-05 Walter Doerwald <walter@livinglogic.de>
395 2007-06-05 Walter Doerwald <walter@livinglogic.de>
390
396
391 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
397 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
392 Python string and captures the output. (Idea and original patch by
398 Python string and captures the output. (Idea and original patch by
393 Stefan van der Walt)
399 Stefan van der Walt)
394
400
395 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
401 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
396
402
397 * IPython/ultraTB.py (VerboseTB.text): update printing of
403 * IPython/ultraTB.py (VerboseTB.text): update printing of
398 exception types for Python 2.5 (now all exceptions in the stdlib
404 exception types for Python 2.5 (now all exceptions in the stdlib
399 are new-style classes).
405 are new-style classes).
400
406
401 2007-05-31 Walter Doerwald <walter@livinglogic.de>
407 2007-05-31 Walter Doerwald <walter@livinglogic.de>
402
408
403 * IPython/Extensions/igrid.py: Add new commands refresh and
409 * IPython/Extensions/igrid.py: Add new commands refresh and
404 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
410 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
405 the iterator once (refresh) or after every x seconds (refresh_timer).
411 the iterator once (refresh) or after every x seconds (refresh_timer).
406 Add a working implementation of "searchexpression", where the text
412 Add a working implementation of "searchexpression", where the text
407 entered is not the text to search for, but an expression that must
413 entered is not the text to search for, but an expression that must
408 be true. Added display of shortcuts to the menu. Added commands "pickinput"
414 be true. Added display of shortcuts to the menu. Added commands "pickinput"
409 and "pickinputattr" that put the object or attribute under the cursor
415 and "pickinputattr" that put the object or attribute under the cursor
410 in the input line. Split the statusbar to be able to display the currently
416 in the input line. Split the statusbar to be able to display the currently
411 active refresh interval. (Patch by Nik Tautenhahn)
417 active refresh interval. (Patch by Nik Tautenhahn)
412
418
413 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
419 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
414
420
415 * fixing set_term_title to use ctypes as default
421 * fixing set_term_title to use ctypes as default
416
422
417 * fixing set_term_title fallback to work when curent dir
423 * fixing set_term_title fallback to work when curent dir
418 is on a windows network share
424 is on a windows network share
419
425
420 2007-05-28 Ville Vainio <vivainio@gmail.com>
426 2007-05-28 Ville Vainio <vivainio@gmail.com>
421
427
422 * %cpaste: strip + with > from left (diffs).
428 * %cpaste: strip + with > from left (diffs).
423
429
424 * iplib.py: Fix crash when readline not installed
430 * iplib.py: Fix crash when readline not installed
425
431
426 2007-05-26 Ville Vainio <vivainio@gmail.com>
432 2007-05-26 Ville Vainio <vivainio@gmail.com>
427
433
428 * generics.py: intruduce easy to extend result_display generic
434 * generics.py: intruduce easy to extend result_display generic
429 function (using simplegeneric.py).
435 function (using simplegeneric.py).
430
436
431 * Fixed the append functionality of %set.
437 * Fixed the append functionality of %set.
432
438
433 2007-05-25 Ville Vainio <vivainio@gmail.com>
439 2007-05-25 Ville Vainio <vivainio@gmail.com>
434
440
435 * New magic: %rep (fetch / run old commands from history)
441 * New magic: %rep (fetch / run old commands from history)
436
442
437 * New extension: mglob (%mglob magic), for powerful glob / find /filter
443 * New extension: mglob (%mglob magic), for powerful glob / find /filter
438 like functionality
444 like functionality
439
445
440 % maghistory.py: %hist -g PATTERM greps the history for pattern
446 % maghistory.py: %hist -g PATTERM greps the history for pattern
441
447
442 2007-05-24 Walter Doerwald <walter@livinglogic.de>
448 2007-05-24 Walter Doerwald <walter@livinglogic.de>
443
449
444 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
450 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
445 browse the IPython input history
451 browse the IPython input history
446
452
447 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
453 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
448 (mapped to "i") can be used to put the object under the curser in the input
454 (mapped to "i") can be used to put the object under the curser in the input
449 line. pickinputattr (mapped to "I") does the same for the attribute under
455 line. pickinputattr (mapped to "I") does the same for the attribute under
450 the cursor.
456 the cursor.
451
457
452 2007-05-24 Ville Vainio <vivainio@gmail.com>
458 2007-05-24 Ville Vainio <vivainio@gmail.com>
453
459
454 * Grand magic cleansing (changeset [2380]):
460 * Grand magic cleansing (changeset [2380]):
455
461
456 * Introduce ipy_legacy.py where the following magics were
462 * Introduce ipy_legacy.py where the following magics were
457 moved:
463 moved:
458
464
459 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
465 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
460
466
461 If you need them, either use default profile or "import ipy_legacy"
467 If you need them, either use default profile or "import ipy_legacy"
462 in your ipy_user_conf.py
468 in your ipy_user_conf.py
463
469
464 * Move sh and scipy profile to Extensions from UserConfig. this implies
470 * Move sh and scipy profile to Extensions from UserConfig. this implies
465 you should not edit them, but you don't need to run %upgrade when
471 you should not edit them, but you don't need to run %upgrade when
466 upgrading IPython anymore.
472 upgrading IPython anymore.
467
473
468 * %hist/%history now operates in "raw" mode by default. To get the old
474 * %hist/%history now operates in "raw" mode by default. To get the old
469 behaviour, run '%hist -n' (native mode).
475 behaviour, run '%hist -n' (native mode).
470
476
471 * split ipy_stock_completers.py to ipy_stock_completers.py and
477 * split ipy_stock_completers.py to ipy_stock_completers.py and
472 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
478 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
473 installed as default.
479 installed as default.
474
480
475 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
481 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
476 handling.
482 handling.
477
483
478 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
484 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
479 input if readline is available.
485 input if readline is available.
480
486
481 2007-05-23 Ville Vainio <vivainio@gmail.com>
487 2007-05-23 Ville Vainio <vivainio@gmail.com>
482
488
483 * macro.py: %store uses __getstate__ properly
489 * macro.py: %store uses __getstate__ properly
484
490
485 * exesetup.py: added new setup script for creating
491 * exesetup.py: added new setup script for creating
486 standalone IPython executables with py2exe (i.e.
492 standalone IPython executables with py2exe (i.e.
487 no python installation required).
493 no python installation required).
488
494
489 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
495 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
490 its place.
496 its place.
491
497
492 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
498 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
493
499
494 2007-05-21 Ville Vainio <vivainio@gmail.com>
500 2007-05-21 Ville Vainio <vivainio@gmail.com>
495
501
496 * platutil_win32.py (set_term_title): handle
502 * platutil_win32.py (set_term_title): handle
497 failure of 'title' system call properly.
503 failure of 'title' system call properly.
498
504
499 2007-05-17 Walter Doerwald <walter@livinglogic.de>
505 2007-05-17 Walter Doerwald <walter@livinglogic.de>
500
506
501 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
507 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
502 (Bug detected by Paul Mueller).
508 (Bug detected by Paul Mueller).
503
509
504 2007-05-16 Ville Vainio <vivainio@gmail.com>
510 2007-05-16 Ville Vainio <vivainio@gmail.com>
505
511
506 * ipy_profile_sci.py, ipython_win_post_install.py: Create
512 * ipy_profile_sci.py, ipython_win_post_install.py: Create
507 new "sci" profile, effectively a modern version of the old
513 new "sci" profile, effectively a modern version of the old
508 "scipy" profile (which is now slated for deprecation).
514 "scipy" profile (which is now slated for deprecation).
509
515
510 2007-05-15 Ville Vainio <vivainio@gmail.com>
516 2007-05-15 Ville Vainio <vivainio@gmail.com>
511
517
512 * pycolorize.py, pycolor.1: Paul Mueller's patches that
518 * pycolorize.py, pycolor.1: Paul Mueller's patches that
513 make pycolorize read input from stdin when run without arguments.
519 make pycolorize read input from stdin when run without arguments.
514
520
515 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
521 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
516
522
517 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
523 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
518 it in sh profile (instead of ipy_system_conf.py).
524 it in sh profile (instead of ipy_system_conf.py).
519
525
520 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
526 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
521 aliases are now lower case on windows (MyCommand.exe => mycommand).
527 aliases are now lower case on windows (MyCommand.exe => mycommand).
522
528
523 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
529 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
524 Macros are now callable objects that inherit from ipapi.IPyAutocall,
530 Macros are now callable objects that inherit from ipapi.IPyAutocall,
525 i.e. get autocalled regardless of system autocall setting.
531 i.e. get autocalled regardless of system autocall setting.
526
532
527 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
533 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
528
534
529 * IPython/rlineimpl.py: check for clear_history in readline and
535 * IPython/rlineimpl.py: check for clear_history in readline and
530 make it a dummy no-op if not available. This function isn't
536 make it a dummy no-op if not available. This function isn't
531 guaranteed to be in the API and appeared in Python 2.4, so we need
537 guaranteed to be in the API and appeared in Python 2.4, so we need
532 to check it ourselves. Also, clean up this file quite a bit.
538 to check it ourselves. Also, clean up this file quite a bit.
533
539
534 * ipython.1: update man page and full manual with information
540 * ipython.1: update man page and full manual with information
535 about threads (remove outdated warning). Closes #151.
541 about threads (remove outdated warning). Closes #151.
536
542
537 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
543 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
538
544
539 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
545 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
540 in trunk (note that this made it into the 0.8.1 release already,
546 in trunk (note that this made it into the 0.8.1 release already,
541 but the changelogs didn't get coordinated). Many thanks to Gael
547 but the changelogs didn't get coordinated). Many thanks to Gael
542 Varoquaux <gael.varoquaux-AT-normalesup.org>
548 Varoquaux <gael.varoquaux-AT-normalesup.org>
543
549
544 2007-05-09 *** Released version 0.8.1
550 2007-05-09 *** Released version 0.8.1
545
551
546 2007-05-10 Walter Doerwald <walter@livinglogic.de>
552 2007-05-10 Walter Doerwald <walter@livinglogic.de>
547
553
548 * IPython/Extensions/igrid.py: Incorporate html help into
554 * IPython/Extensions/igrid.py: Incorporate html help into
549 the module, so we don't have to search for the file.
555 the module, so we don't have to search for the file.
550
556
551 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
557 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
552
558
553 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
559 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
554
560
555 2007-04-30 Ville Vainio <vivainio@gmail.com>
561 2007-04-30 Ville Vainio <vivainio@gmail.com>
556
562
557 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
563 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
558 user has illegal (non-ascii) home directory name
564 user has illegal (non-ascii) home directory name
559
565
560 2007-04-27 Ville Vainio <vivainio@gmail.com>
566 2007-04-27 Ville Vainio <vivainio@gmail.com>
561
567
562 * platutils_win32.py: implement set_term_title for windows
568 * platutils_win32.py: implement set_term_title for windows
563
569
564 * Update version number
570 * Update version number
565
571
566 * ipy_profile_sh.py: more informative prompt (2 dir levels)
572 * ipy_profile_sh.py: more informative prompt (2 dir levels)
567
573
568 2007-04-26 Walter Doerwald <walter@livinglogic.de>
574 2007-04-26 Walter Doerwald <walter@livinglogic.de>
569
575
570 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
576 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
571 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
577 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
572 bug discovered by Ville).
578 bug discovered by Ville).
573
579
574 2007-04-26 Ville Vainio <vivainio@gmail.com>
580 2007-04-26 Ville Vainio <vivainio@gmail.com>
575
581
576 * Extensions/ipy_completers.py: Olivier's module completer now
582 * Extensions/ipy_completers.py: Olivier's module completer now
577 saves the list of root modules if it takes > 4 secs on the first run.
583 saves the list of root modules if it takes > 4 secs on the first run.
578
584
579 * Magic.py (%rehashx): %rehashx now clears the completer cache
585 * Magic.py (%rehashx): %rehashx now clears the completer cache
580
586
581
587
582 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
588 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
583
589
584 * ipython.el: fix incorrect color scheme, reported by Stefan.
590 * ipython.el: fix incorrect color scheme, reported by Stefan.
585 Closes #149.
591 Closes #149.
586
592
587 * IPython/PyColorize.py (Parser.format2): fix state-handling
593 * IPython/PyColorize.py (Parser.format2): fix state-handling
588 logic. I still don't like how that code handles state, but at
594 logic. I still don't like how that code handles state, but at
589 least now it should be correct, if inelegant. Closes #146.
595 least now it should be correct, if inelegant. Closes #146.
590
596
591 2007-04-25 Ville Vainio <vivainio@gmail.com>
597 2007-04-25 Ville Vainio <vivainio@gmail.com>
592
598
593 * Extensions/ipy_which.py: added extension for %which magic, works
599 * Extensions/ipy_which.py: added extension for %which magic, works
594 a lot like unix 'which' but also finds and expands aliases, and
600 a lot like unix 'which' but also finds and expands aliases, and
595 allows wildcards.
601 allows wildcards.
596
602
597 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
603 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
598 as opposed to returning nothing.
604 as opposed to returning nothing.
599
605
600 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
606 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
601 ipy_stock_completers on default profile, do import on sh profile.
607 ipy_stock_completers on default profile, do import on sh profile.
602
608
603 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
609 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
604
610
605 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
611 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
606 like ipython.py foo.py which raised a IndexError.
612 like ipython.py foo.py which raised a IndexError.
607
613
608 2007-04-21 Ville Vainio <vivainio@gmail.com>
614 2007-04-21 Ville Vainio <vivainio@gmail.com>
609
615
610 * Extensions/ipy_extutil.py: added extension to manage other ipython
616 * Extensions/ipy_extutil.py: added extension to manage other ipython
611 extensions. Now only supports 'ls' == list extensions.
617 extensions. Now only supports 'ls' == list extensions.
612
618
613 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
619 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
614
620
615 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
621 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
616 would prevent use of the exception system outside of a running
622 would prevent use of the exception system outside of a running
617 IPython instance.
623 IPython instance.
618
624
619 2007-04-20 Ville Vainio <vivainio@gmail.com>
625 2007-04-20 Ville Vainio <vivainio@gmail.com>
620
626
621 * Extensions/ipy_render.py: added extension for easy
627 * Extensions/ipy_render.py: added extension for easy
622 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
628 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
623 'Iptl' template notation,
629 'Iptl' template notation,
624
630
625 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
631 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
626 safer & faster 'import' completer.
632 safer & faster 'import' completer.
627
633
628 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
634 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
629 and _ip.defalias(name, command).
635 and _ip.defalias(name, command).
630
636
631 * Extensions/ipy_exportdb.py: New extension for exporting all the
637 * Extensions/ipy_exportdb.py: New extension for exporting all the
632 %store'd data in a portable format (normal ipapi calls like
638 %store'd data in a portable format (normal ipapi calls like
633 defmacro() etc.)
639 defmacro() etc.)
634
640
635 2007-04-19 Ville Vainio <vivainio@gmail.com>
641 2007-04-19 Ville Vainio <vivainio@gmail.com>
636
642
637 * upgrade_dir.py: skip junk files like *.pyc
643 * upgrade_dir.py: skip junk files like *.pyc
638
644
639 * Release.py: version number to 0.8.1
645 * Release.py: version number to 0.8.1
640
646
641 2007-04-18 Ville Vainio <vivainio@gmail.com>
647 2007-04-18 Ville Vainio <vivainio@gmail.com>
642
648
643 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
649 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
644 and later on win32.
650 and later on win32.
645
651
646 2007-04-16 Ville Vainio <vivainio@gmail.com>
652 2007-04-16 Ville Vainio <vivainio@gmail.com>
647
653
648 * iplib.py (showtraceback): Do not crash when running w/o readline.
654 * iplib.py (showtraceback): Do not crash when running w/o readline.
649
655
650 2007-04-12 Walter Doerwald <walter@livinglogic.de>
656 2007-04-12 Walter Doerwald <walter@livinglogic.de>
651
657
652 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
658 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
653 sorted (case sensitive with files and dirs mixed).
659 sorted (case sensitive with files and dirs mixed).
654
660
655 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
661 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
656
662
657 * IPython/Release.py (version): Open trunk for 0.8.1 development.
663 * IPython/Release.py (version): Open trunk for 0.8.1 development.
658
664
659 2007-04-10 *** Released version 0.8.0
665 2007-04-10 *** Released version 0.8.0
660
666
661 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
667 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
662
668
663 * Tag 0.8.0 for release.
669 * Tag 0.8.0 for release.
664
670
665 * IPython/iplib.py (reloadhist): add API function to cleanly
671 * IPython/iplib.py (reloadhist): add API function to cleanly
666 reload the readline history, which was growing inappropriately on
672 reload the readline history, which was growing inappropriately on
667 every %run call.
673 every %run call.
668
674
669 * win32_manual_post_install.py (run): apply last part of Nicolas
675 * win32_manual_post_install.py (run): apply last part of Nicolas
670 Pernetty's patch (I'd accidentally applied it in a different
676 Pernetty's patch (I'd accidentally applied it in a different
671 directory and this particular file didn't get patched).
677 directory and this particular file didn't get patched).
672
678
673 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
679 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
674
680
675 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
681 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
676 find the main thread id and use the proper API call. Thanks to
682 find the main thread id and use the proper API call. Thanks to
677 Stefan for the fix.
683 Stefan for the fix.
678
684
679 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
685 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
680 unit tests to reflect fixed ticket #52, and add more tests sent by
686 unit tests to reflect fixed ticket #52, and add more tests sent by
681 him.
687 him.
682
688
683 * IPython/iplib.py (raw_input): restore the readline completer
689 * IPython/iplib.py (raw_input): restore the readline completer
684 state on every input, in case third-party code messed it up.
690 state on every input, in case third-party code messed it up.
685 (_prefilter): revert recent addition of early-escape checks which
691 (_prefilter): revert recent addition of early-escape checks which
686 prevent many valid alias calls from working.
692 prevent many valid alias calls from working.
687
693
688 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
694 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
689 flag for sigint handler so we don't run a full signal() call on
695 flag for sigint handler so we don't run a full signal() call on
690 each runcode access.
696 each runcode access.
691
697
692 * IPython/Magic.py (magic_whos): small improvement to diagnostic
698 * IPython/Magic.py (magic_whos): small improvement to diagnostic
693 message.
699 message.
694
700
695 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
701 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
696
702
697 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
703 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
698 asynchronous exceptions working, i.e., Ctrl-C can actually
704 asynchronous exceptions working, i.e., Ctrl-C can actually
699 interrupt long-running code in the multithreaded shells.
705 interrupt long-running code in the multithreaded shells.
700
706
701 This is using Tomer Filiba's great ctypes-based trick:
707 This is using Tomer Filiba's great ctypes-based trick:
702 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
708 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
703 this in the past, but hadn't been able to make it work before. So
709 this in the past, but hadn't been able to make it work before. So
704 far it looks like it's actually running, but this needs more
710 far it looks like it's actually running, but this needs more
705 testing. If it really works, I'll be *very* happy, and we'll owe
711 testing. If it really works, I'll be *very* happy, and we'll owe
706 a huge thank you to Tomer. My current implementation is ugly,
712 a huge thank you to Tomer. My current implementation is ugly,
707 hackish and uses nasty globals, but I don't want to try and clean
713 hackish and uses nasty globals, but I don't want to try and clean
708 anything up until we know if it actually works.
714 anything up until we know if it actually works.
709
715
710 NOTE: this feature needs ctypes to work. ctypes is included in
716 NOTE: this feature needs ctypes to work. ctypes is included in
711 Python2.5, but 2.4 users will need to manually install it. This
717 Python2.5, but 2.4 users will need to manually install it. This
712 feature makes multi-threaded shells so much more usable that it's
718 feature makes multi-threaded shells so much more usable that it's
713 a minor price to pay (ctypes is very easy to install, already a
719 a minor price to pay (ctypes is very easy to install, already a
714 requirement for win32 and available in major linux distros).
720 requirement for win32 and available in major linux distros).
715
721
716 2007-04-04 Ville Vainio <vivainio@gmail.com>
722 2007-04-04 Ville Vainio <vivainio@gmail.com>
717
723
718 * Extensions/ipy_completers.py, ipy_stock_completers.py:
724 * Extensions/ipy_completers.py, ipy_stock_completers.py:
719 Moved implementations of 'bundled' completers to ipy_completers.py,
725 Moved implementations of 'bundled' completers to ipy_completers.py,
720 they are only enabled in ipy_stock_completers.py.
726 they are only enabled in ipy_stock_completers.py.
721
727
722 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
728 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
723
729
724 * IPython/PyColorize.py (Parser.format2): Fix identation of
730 * IPython/PyColorize.py (Parser.format2): Fix identation of
725 colorzied output and return early if color scheme is NoColor, to
731 colorzied output and return early if color scheme is NoColor, to
726 avoid unnecessary and expensive tokenization. Closes #131.
732 avoid unnecessary and expensive tokenization. Closes #131.
727
733
728 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
734 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
729
735
730 * IPython/Debugger.py: disable the use of pydb version 1.17. It
736 * IPython/Debugger.py: disable the use of pydb version 1.17. It
731 has a critical bug (a missing import that makes post-mortem not
737 has a critical bug (a missing import that makes post-mortem not
732 work at all). Unfortunately as of this time, this is the version
738 work at all). Unfortunately as of this time, this is the version
733 shipped with Ubuntu Edgy, so quite a few people have this one. I
739 shipped with Ubuntu Edgy, so quite a few people have this one. I
734 hope Edgy will update to a more recent package.
740 hope Edgy will update to a more recent package.
735
741
736 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
742 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
737
743
738 * IPython/iplib.py (_prefilter): close #52, second part of a patch
744 * IPython/iplib.py (_prefilter): close #52, second part of a patch
739 set by Stefan (only the first part had been applied before).
745 set by Stefan (only the first part had been applied before).
740
746
741 * IPython/Extensions/ipy_stock_completers.py (module_completer):
747 * IPython/Extensions/ipy_stock_completers.py (module_completer):
742 remove usage of the dangerous pkgutil.walk_packages(). See
748 remove usage of the dangerous pkgutil.walk_packages(). See
743 details in comments left in the code.
749 details in comments left in the code.
744
750
745 * IPython/Magic.py (magic_whos): add support for numpy arrays
751 * IPython/Magic.py (magic_whos): add support for numpy arrays
746 similar to what we had for Numeric.
752 similar to what we had for Numeric.
747
753
748 * IPython/completer.py (IPCompleter.complete): extend the
754 * IPython/completer.py (IPCompleter.complete): extend the
749 complete() call API to support completions by other mechanisms
755 complete() call API to support completions by other mechanisms
750 than readline. Closes #109.
756 than readline. Closes #109.
751
757
752 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
758 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
753 protect against a bug in Python's execfile(). Closes #123.
759 protect against a bug in Python's execfile(). Closes #123.
754
760
755 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
761 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
756
762
757 * IPython/iplib.py (split_user_input): ensure that when splitting
763 * IPython/iplib.py (split_user_input): ensure that when splitting
758 user input, the part that can be treated as a python name is pure
764 user input, the part that can be treated as a python name is pure
759 ascii (Python identifiers MUST be pure ascii). Part of the
765 ascii (Python identifiers MUST be pure ascii). Part of the
760 ongoing Unicode support work.
766 ongoing Unicode support work.
761
767
762 * IPython/Prompts.py (prompt_specials_color): Add \N for the
768 * IPython/Prompts.py (prompt_specials_color): Add \N for the
763 actual prompt number, without any coloring. This allows users to
769 actual prompt number, without any coloring. This allows users to
764 produce numbered prompts with their own colors. Added after a
770 produce numbered prompts with their own colors. Added after a
765 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
771 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
766
772
767 2007-03-31 Walter Doerwald <walter@livinglogic.de>
773 2007-03-31 Walter Doerwald <walter@livinglogic.de>
768
774
769 * IPython/Extensions/igrid.py: Map the return key
775 * IPython/Extensions/igrid.py: Map the return key
770 to enter() and shift-return to enterattr().
776 to enter() and shift-return to enterattr().
771
777
772 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
778 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
773
779
774 * IPython/Magic.py (magic_psearch): add unicode support by
780 * IPython/Magic.py (magic_psearch): add unicode support by
775 encoding to ascii the input, since this routine also only deals
781 encoding to ascii the input, since this routine also only deals
776 with valid Python names. Fixes a bug reported by Stefan.
782 with valid Python names. Fixes a bug reported by Stefan.
777
783
778 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
784 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
779
785
780 * IPython/Magic.py (_inspect): convert unicode input into ascii
786 * IPython/Magic.py (_inspect): convert unicode input into ascii
781 before trying to evaluate it as a Python identifier. This fixes a
787 before trying to evaluate it as a Python identifier. This fixes a
782 problem that the new unicode support had introduced when analyzing
788 problem that the new unicode support had introduced when analyzing
783 long definition lines for functions.
789 long definition lines for functions.
784
790
785 2007-03-24 Walter Doerwald <walter@livinglogic.de>
791 2007-03-24 Walter Doerwald <walter@livinglogic.de>
786
792
787 * IPython/Extensions/igrid.py: Fix picking. Using
793 * IPython/Extensions/igrid.py: Fix picking. Using
788 igrid with wxPython 2.6 and -wthread should work now.
794 igrid with wxPython 2.6 and -wthread should work now.
789 igrid.display() simply tries to create a frame without
795 igrid.display() simply tries to create a frame without
790 an application. Only if this fails an application is created.
796 an application. Only if this fails an application is created.
791
797
792 2007-03-23 Walter Doerwald <walter@livinglogic.de>
798 2007-03-23 Walter Doerwald <walter@livinglogic.de>
793
799
794 * IPython/Extensions/path.py: Updated to version 2.2.
800 * IPython/Extensions/path.py: Updated to version 2.2.
795
801
796 2007-03-23 Ville Vainio <vivainio@gmail.com>
802 2007-03-23 Ville Vainio <vivainio@gmail.com>
797
803
798 * iplib.py: recursive alias expansion now works better, so that
804 * iplib.py: recursive alias expansion now works better, so that
799 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
805 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
800 doesn't trip up the process, if 'd' has been aliased to 'ls'.
806 doesn't trip up the process, if 'd' has been aliased to 'ls'.
801
807
802 * Extensions/ipy_gnuglobal.py added, provides %global magic
808 * Extensions/ipy_gnuglobal.py added, provides %global magic
803 for users of http://www.gnu.org/software/global
809 for users of http://www.gnu.org/software/global
804
810
805 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
811 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
806 Closes #52. Patch by Stefan van der Walt.
812 Closes #52. Patch by Stefan van der Walt.
807
813
808 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
814 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
809
815
810 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
816 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
811 respect the __file__ attribute when using %run. Thanks to a bug
817 respect the __file__ attribute when using %run. Thanks to a bug
812 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
818 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
813
819
814 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
820 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
815
821
816 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
822 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
817 input. Patch sent by Stefan.
823 input. Patch sent by Stefan.
818
824
819 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
825 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
820 * IPython/Extensions/ipy_stock_completer.py
826 * IPython/Extensions/ipy_stock_completer.py
821 shlex_split, fix bug in shlex_split. len function
827 shlex_split, fix bug in shlex_split. len function
822 call was missing an if statement. Caused shlex_split to
828 call was missing an if statement. Caused shlex_split to
823 sometimes return "" as last element.
829 sometimes return "" as last element.
824
830
825 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
831 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
826
832
827 * IPython/completer.py
833 * IPython/completer.py
828 (IPCompleter.file_matches.single_dir_expand): fix a problem
834 (IPCompleter.file_matches.single_dir_expand): fix a problem
829 reported by Stefan, where directories containign a single subdir
835 reported by Stefan, where directories containign a single subdir
830 would be completed too early.
836 would be completed too early.
831
837
832 * IPython/Shell.py (_load_pylab): Make the execution of 'from
838 * IPython/Shell.py (_load_pylab): Make the execution of 'from
833 pylab import *' when -pylab is given be optional. A new flag,
839 pylab import *' when -pylab is given be optional. A new flag,
834 pylab_import_all controls this behavior, the default is True for
840 pylab_import_all controls this behavior, the default is True for
835 backwards compatibility.
841 backwards compatibility.
836
842
837 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
843 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
838 modified) R. Bernstein's patch for fully syntax highlighted
844 modified) R. Bernstein's patch for fully syntax highlighted
839 tracebacks. The functionality is also available under ultraTB for
845 tracebacks. The functionality is also available under ultraTB for
840 non-ipython users (someone using ultraTB but outside an ipython
846 non-ipython users (someone using ultraTB but outside an ipython
841 session). They can select the color scheme by setting the
847 session). They can select the color scheme by setting the
842 module-level global DEFAULT_SCHEME. The highlight functionality
848 module-level global DEFAULT_SCHEME. The highlight functionality
843 also works when debugging.
849 also works when debugging.
844
850
845 * IPython/genutils.py (IOStream.close): small patch by
851 * IPython/genutils.py (IOStream.close): small patch by
846 R. Bernstein for improved pydb support.
852 R. Bernstein for improved pydb support.
847
853
848 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
854 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
849 DaveS <davls@telus.net> to improve support of debugging under
855 DaveS <davls@telus.net> to improve support of debugging under
850 NTEmacs, including improved pydb behavior.
856 NTEmacs, including improved pydb behavior.
851
857
852 * IPython/Magic.py (magic_prun): Fix saving of profile info for
858 * IPython/Magic.py (magic_prun): Fix saving of profile info for
853 Python 2.5, where the stats object API changed a little. Thanks
859 Python 2.5, where the stats object API changed a little. Thanks
854 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
860 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
855
861
856 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
862 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
857 Pernetty's patch to improve support for (X)Emacs under Win32.
863 Pernetty's patch to improve support for (X)Emacs under Win32.
858
864
859 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
865 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
860
866
861 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
867 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
862 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
868 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
863 a report by Nik Tautenhahn.
869 a report by Nik Tautenhahn.
864
870
865 2007-03-16 Walter Doerwald <walter@livinglogic.de>
871 2007-03-16 Walter Doerwald <walter@livinglogic.de>
866
872
867 * setup.py: Add the igrid help files to the list of data files
873 * setup.py: Add the igrid help files to the list of data files
868 to be installed alongside igrid.
874 to be installed alongside igrid.
869 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
875 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
870 Show the input object of the igrid browser as the window tile.
876 Show the input object of the igrid browser as the window tile.
871 Show the object the cursor is on in the statusbar.
877 Show the object the cursor is on in the statusbar.
872
878
873 2007-03-15 Ville Vainio <vivainio@gmail.com>
879 2007-03-15 Ville Vainio <vivainio@gmail.com>
874
880
875 * Extensions/ipy_stock_completers.py: Fixed exception
881 * Extensions/ipy_stock_completers.py: Fixed exception
876 on mismatching quotes in %run completer. Patch by
882 on mismatching quotes in %run completer. Patch by
877 Jorgen Stenarson. Closes #127.
883 Jorgen Stenarson. Closes #127.
878
884
879 2007-03-14 Ville Vainio <vivainio@gmail.com>
885 2007-03-14 Ville Vainio <vivainio@gmail.com>
880
886
881 * Extensions/ext_rehashdir.py: Do not do auto_alias
887 * Extensions/ext_rehashdir.py: Do not do auto_alias
882 in %rehashdir, it clobbers %store'd aliases.
888 in %rehashdir, it clobbers %store'd aliases.
883
889
884 * UserConfig/ipy_profile_sh.py: envpersist.py extension
890 * UserConfig/ipy_profile_sh.py: envpersist.py extension
885 (beefed up %env) imported for sh profile.
891 (beefed up %env) imported for sh profile.
886
892
887 2007-03-10 Walter Doerwald <walter@livinglogic.de>
893 2007-03-10 Walter Doerwald <walter@livinglogic.de>
888
894
889 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
895 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
890 as the default browser.
896 as the default browser.
891 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
897 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
892 As igrid displays all attributes it ever encounters, fetch() (which has
898 As igrid displays all attributes it ever encounters, fetch() (which has
893 been renamed to _fetch()) doesn't have to recalculate the display attributes
899 been renamed to _fetch()) doesn't have to recalculate the display attributes
894 every time a new item is fetched. This should speed up scrolling.
900 every time a new item is fetched. This should speed up scrolling.
895
901
896 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
902 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
897
903
898 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
904 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
899 Schmolck's recently reported tab-completion bug (my previous one
905 Schmolck's recently reported tab-completion bug (my previous one
900 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
906 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
901
907
902 2007-03-09 Walter Doerwald <walter@livinglogic.de>
908 2007-03-09 Walter Doerwald <walter@livinglogic.de>
903
909
904 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
910 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
905 Close help window if exiting igrid.
911 Close help window if exiting igrid.
906
912
907 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
913 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
908
914
909 * IPython/Extensions/ipy_defaults.py: Check if readline is available
915 * IPython/Extensions/ipy_defaults.py: Check if readline is available
910 before calling functions from readline.
916 before calling functions from readline.
911
917
912 2007-03-02 Walter Doerwald <walter@livinglogic.de>
918 2007-03-02 Walter Doerwald <walter@livinglogic.de>
913
919
914 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
920 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
915 igrid is a wxPython-based display object for ipipe. If your system has
921 igrid is a wxPython-based display object for ipipe. If your system has
916 wx installed igrid will be the default display. Without wx ipipe falls
922 wx installed igrid will be the default display. Without wx ipipe falls
917 back to ibrowse (which needs curses). If no curses is installed ipipe
923 back to ibrowse (which needs curses). If no curses is installed ipipe
918 falls back to idump.
924 falls back to idump.
919
925
920 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
926 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
921
927
922 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
928 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
923 my changes from yesterday, they introduced bugs. Will reactivate
929 my changes from yesterday, they introduced bugs. Will reactivate
924 once I get a correct solution, which will be much easier thanks to
930 once I get a correct solution, which will be much easier thanks to
925 Dan Milstein's new prefilter test suite.
931 Dan Milstein's new prefilter test suite.
926
932
927 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
933 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
928
934
929 * IPython/iplib.py (split_user_input): fix input splitting so we
935 * IPython/iplib.py (split_user_input): fix input splitting so we
930 don't attempt attribute accesses on things that can't possibly be
936 don't attempt attribute accesses on things that can't possibly be
931 valid Python attributes. After a bug report by Alex Schmolck.
937 valid Python attributes. After a bug report by Alex Schmolck.
932 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
938 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
933 %magic with explicit % prefix.
939 %magic with explicit % prefix.
934
940
935 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
941 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
936
942
937 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
943 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
938 avoid a DeprecationWarning from GTK.
944 avoid a DeprecationWarning from GTK.
939
945
940 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
946 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
941
947
942 * IPython/genutils.py (clock): I modified clock() to return total
948 * IPython/genutils.py (clock): I modified clock() to return total
943 time, user+system. This is a more commonly needed metric. I also
949 time, user+system. This is a more commonly needed metric. I also
944 introduced the new clocku/clocks to get only user/system time if
950 introduced the new clocku/clocks to get only user/system time if
945 one wants those instead.
951 one wants those instead.
946
952
947 ***WARNING: API CHANGE*** clock() used to return only user time,
953 ***WARNING: API CHANGE*** clock() used to return only user time,
948 so if you want exactly the same results as before, use clocku
954 so if you want exactly the same results as before, use clocku
949 instead.
955 instead.
950
956
951 2007-02-22 Ville Vainio <vivainio@gmail.com>
957 2007-02-22 Ville Vainio <vivainio@gmail.com>
952
958
953 * IPython/Extensions/ipy_p4.py: Extension for improved
959 * IPython/Extensions/ipy_p4.py: Extension for improved
954 p4 (perforce version control system) experience.
960 p4 (perforce version control system) experience.
955 Adds %p4 magic with p4 command completion and
961 Adds %p4 magic with p4 command completion and
956 automatic -G argument (marshall output as python dict)
962 automatic -G argument (marshall output as python dict)
957
963
958 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
964 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
959
965
960 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
966 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
961 stop marks.
967 stop marks.
962 (ClearingMixin): a simple mixin to easily make a Demo class clear
968 (ClearingMixin): a simple mixin to easily make a Demo class clear
963 the screen in between blocks and have empty marquees. The
969 the screen in between blocks and have empty marquees. The
964 ClearDemo and ClearIPDemo classes that use it are included.
970 ClearDemo and ClearIPDemo classes that use it are included.
965
971
966 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
972 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
967
973
968 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
974 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
969 protect against exceptions at Python shutdown time. Patch
975 protect against exceptions at Python shutdown time. Patch
970 sumbmitted to upstream.
976 sumbmitted to upstream.
971
977
972 2007-02-14 Walter Doerwald <walter@livinglogic.de>
978 2007-02-14 Walter Doerwald <walter@livinglogic.de>
973
979
974 * IPython/Extensions/ibrowse.py: If entering the first object level
980 * IPython/Extensions/ibrowse.py: If entering the first object level
975 (i.e. the object for which the browser has been started) fails,
981 (i.e. the object for which the browser has been started) fails,
976 now the error is raised directly (aborting the browser) instead of
982 now the error is raised directly (aborting the browser) instead of
977 running into an empty levels list later.
983 running into an empty levels list later.
978
984
979 2007-02-03 Walter Doerwald <walter@livinglogic.de>
985 2007-02-03 Walter Doerwald <walter@livinglogic.de>
980
986
981 * IPython/Extensions/ipipe.py: Add an xrepr implementation
987 * IPython/Extensions/ipipe.py: Add an xrepr implementation
982 for the noitem object.
988 for the noitem object.
983
989
984 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
990 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
985
991
986 * IPython/completer.py (Completer.attr_matches): Fix small
992 * IPython/completer.py (Completer.attr_matches): Fix small
987 tab-completion bug with Enthought Traits objects with units.
993 tab-completion bug with Enthought Traits objects with units.
988 Thanks to a bug report by Tom Denniston
994 Thanks to a bug report by Tom Denniston
989 <tom.denniston-AT-alum.dartmouth.org>.
995 <tom.denniston-AT-alum.dartmouth.org>.
990
996
991 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
997 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
992
998
993 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
999 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
994 bug where only .ipy or .py would be completed. Once the first
1000 bug where only .ipy or .py would be completed. Once the first
995 argument to %run has been given, all completions are valid because
1001 argument to %run has been given, all completions are valid because
996 they are the arguments to the script, which may well be non-python
1002 they are the arguments to the script, which may well be non-python
997 filenames.
1003 filenames.
998
1004
999 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1005 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1000 to irunner to allow it to correctly support real doctesting of
1006 to irunner to allow it to correctly support real doctesting of
1001 out-of-process ipython code.
1007 out-of-process ipython code.
1002
1008
1003 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1009 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1004 title an option (-noterm_title) because it completely breaks
1010 title an option (-noterm_title) because it completely breaks
1005 doctesting.
1011 doctesting.
1006
1012
1007 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1013 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1008
1014
1009 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1015 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1010
1016
1011 * IPython/irunner.py (main): fix small bug where extensions were
1017 * IPython/irunner.py (main): fix small bug where extensions were
1012 not being correctly recognized.
1018 not being correctly recognized.
1013
1019
1014 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1020 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1015
1021
1016 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1022 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1017 a string containing a single line yields the string itself as the
1023 a string containing a single line yields the string itself as the
1018 only item.
1024 only item.
1019
1025
1020 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1026 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1021 object if it's the same as the one on the last level (This avoids
1027 object if it's the same as the one on the last level (This avoids
1022 infinite recursion for one line strings).
1028 infinite recursion for one line strings).
1023
1029
1024 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1030 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1025
1031
1026 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1032 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1027 all output streams before printing tracebacks. This ensures that
1033 all output streams before printing tracebacks. This ensures that
1028 user output doesn't end up interleaved with traceback output.
1034 user output doesn't end up interleaved with traceback output.
1029
1035
1030 2007-01-10 Ville Vainio <vivainio@gmail.com>
1036 2007-01-10 Ville Vainio <vivainio@gmail.com>
1031
1037
1032 * Extensions/envpersist.py: Turbocharged %env that remembers
1038 * Extensions/envpersist.py: Turbocharged %env that remembers
1033 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1039 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1034 "%env VISUAL=jed".
1040 "%env VISUAL=jed".
1035
1041
1036 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1042 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1037
1043
1038 * IPython/iplib.py (showtraceback): ensure that we correctly call
1044 * IPython/iplib.py (showtraceback): ensure that we correctly call
1039 custom handlers in all cases (some with pdb were slipping through,
1045 custom handlers in all cases (some with pdb were slipping through,
1040 but I'm not exactly sure why).
1046 but I'm not exactly sure why).
1041
1047
1042 * IPython/Debugger.py (Tracer.__init__): added new class to
1048 * IPython/Debugger.py (Tracer.__init__): added new class to
1043 support set_trace-like usage of IPython's enhanced debugger.
1049 support set_trace-like usage of IPython's enhanced debugger.
1044
1050
1045 2006-12-24 Ville Vainio <vivainio@gmail.com>
1051 2006-12-24 Ville Vainio <vivainio@gmail.com>
1046
1052
1047 * ipmaker.py: more informative message when ipy_user_conf
1053 * ipmaker.py: more informative message when ipy_user_conf
1048 import fails (suggest running %upgrade).
1054 import fails (suggest running %upgrade).
1049
1055
1050 * tools/run_ipy_in_profiler.py: Utility to see where
1056 * tools/run_ipy_in_profiler.py: Utility to see where
1051 the time during IPython startup is spent.
1057 the time during IPython startup is spent.
1052
1058
1053 2006-12-20 Ville Vainio <vivainio@gmail.com>
1059 2006-12-20 Ville Vainio <vivainio@gmail.com>
1054
1060
1055 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1061 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1056
1062
1057 * ipapi.py: Add new ipapi method, expand_alias.
1063 * ipapi.py: Add new ipapi method, expand_alias.
1058
1064
1059 * Release.py: Bump up version to 0.7.4.svn
1065 * Release.py: Bump up version to 0.7.4.svn
1060
1066
1061 2006-12-17 Ville Vainio <vivainio@gmail.com>
1067 2006-12-17 Ville Vainio <vivainio@gmail.com>
1062
1068
1063 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1069 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1064 to work properly on posix too
1070 to work properly on posix too
1065
1071
1066 * Release.py: Update revnum (version is still just 0.7.3).
1072 * Release.py: Update revnum (version is still just 0.7.3).
1067
1073
1068 2006-12-15 Ville Vainio <vivainio@gmail.com>
1074 2006-12-15 Ville Vainio <vivainio@gmail.com>
1069
1075
1070 * scripts/ipython_win_post_install: create ipython.py in
1076 * scripts/ipython_win_post_install: create ipython.py in
1071 prefix + "/scripts".
1077 prefix + "/scripts".
1072
1078
1073 * Release.py: Update version to 0.7.3.
1079 * Release.py: Update version to 0.7.3.
1074
1080
1075 2006-12-14 Ville Vainio <vivainio@gmail.com>
1081 2006-12-14 Ville Vainio <vivainio@gmail.com>
1076
1082
1077 * scripts/ipython_win_post_install: Overwrite old shortcuts
1083 * scripts/ipython_win_post_install: Overwrite old shortcuts
1078 if they already exist
1084 if they already exist
1079
1085
1080 * Release.py: release 0.7.3rc2
1086 * Release.py: release 0.7.3rc2
1081
1087
1082 2006-12-13 Ville Vainio <vivainio@gmail.com>
1088 2006-12-13 Ville Vainio <vivainio@gmail.com>
1083
1089
1084 * Branch and update Release.py for 0.7.3rc1
1090 * Branch and update Release.py for 0.7.3rc1
1085
1091
1086 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1092 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1087
1093
1088 * IPython/Shell.py (IPShellWX): update for current WX naming
1094 * IPython/Shell.py (IPShellWX): update for current WX naming
1089 conventions, to avoid a deprecation warning with current WX
1095 conventions, to avoid a deprecation warning with current WX
1090 versions. Thanks to a report by Danny Shevitz.
1096 versions. Thanks to a report by Danny Shevitz.
1091
1097
1092 2006-12-12 Ville Vainio <vivainio@gmail.com>
1098 2006-12-12 Ville Vainio <vivainio@gmail.com>
1093
1099
1094 * ipmaker.py: apply david cournapeau's patch to make
1100 * ipmaker.py: apply david cournapeau's patch to make
1095 import_some work properly even when ipythonrc does
1101 import_some work properly even when ipythonrc does
1096 import_some on empty list (it was an old bug!).
1102 import_some on empty list (it was an old bug!).
1097
1103
1098 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1104 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1099 Add deprecation note to ipythonrc and a url to wiki
1105 Add deprecation note to ipythonrc and a url to wiki
1100 in ipy_user_conf.py
1106 in ipy_user_conf.py
1101
1107
1102
1108
1103 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1109 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1104 as if it was typed on IPython command prompt, i.e.
1110 as if it was typed on IPython command prompt, i.e.
1105 as IPython script.
1111 as IPython script.
1106
1112
1107 * example-magic.py, magic_grepl.py: remove outdated examples
1113 * example-magic.py, magic_grepl.py: remove outdated examples
1108
1114
1109 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1115 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1110
1116
1111 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1117 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1112 is called before any exception has occurred.
1118 is called before any exception has occurred.
1113
1119
1114 2006-12-08 Ville Vainio <vivainio@gmail.com>
1120 2006-12-08 Ville Vainio <vivainio@gmail.com>
1115
1121
1116 * Extensions/ipy_stock_completers.py: fix cd completer
1122 * Extensions/ipy_stock_completers.py: fix cd completer
1117 to translate /'s to \'s again.
1123 to translate /'s to \'s again.
1118
1124
1119 * completer.py: prevent traceback on file completions w/
1125 * completer.py: prevent traceback on file completions w/
1120 backslash.
1126 backslash.
1121
1127
1122 * Release.py: Update release number to 0.7.3b3 for release
1128 * Release.py: Update release number to 0.7.3b3 for release
1123
1129
1124 2006-12-07 Ville Vainio <vivainio@gmail.com>
1130 2006-12-07 Ville Vainio <vivainio@gmail.com>
1125
1131
1126 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1132 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1127 while executing external code. Provides more shell-like behaviour
1133 while executing external code. Provides more shell-like behaviour
1128 and overall better response to ctrl + C / ctrl + break.
1134 and overall better response to ctrl + C / ctrl + break.
1129
1135
1130 * tools/make_tarball.py: new script to create tarball straight from svn
1136 * tools/make_tarball.py: new script to create tarball straight from svn
1131 (setup.py sdist doesn't work on win32).
1137 (setup.py sdist doesn't work on win32).
1132
1138
1133 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1139 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1134 on dirnames with spaces and use the default completer instead.
1140 on dirnames with spaces and use the default completer instead.
1135
1141
1136 * Revision.py: Change version to 0.7.3b2 for release.
1142 * Revision.py: Change version to 0.7.3b2 for release.
1137
1143
1138 2006-12-05 Ville Vainio <vivainio@gmail.com>
1144 2006-12-05 Ville Vainio <vivainio@gmail.com>
1139
1145
1140 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1146 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1141 pydb patch 4 (rm debug printing, py 2.5 checking)
1147 pydb patch 4 (rm debug printing, py 2.5 checking)
1142
1148
1143 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1149 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1144 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1150 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1145 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1151 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1146 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1152 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1147 object the cursor was on before the refresh. The command "markrange" is
1153 object the cursor was on before the refresh. The command "markrange" is
1148 mapped to "%" now.
1154 mapped to "%" now.
1149 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1155 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1150
1156
1151 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1157 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1152
1158
1153 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1159 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1154 interactive debugger on the last traceback, without having to call
1160 interactive debugger on the last traceback, without having to call
1155 %pdb and rerun your code. Made minor changes in various modules,
1161 %pdb and rerun your code. Made minor changes in various modules,
1156 should automatically recognize pydb if available.
1162 should automatically recognize pydb if available.
1157
1163
1158 2006-11-28 Ville Vainio <vivainio@gmail.com>
1164 2006-11-28 Ville Vainio <vivainio@gmail.com>
1159
1165
1160 * completer.py: If the text start with !, show file completions
1166 * completer.py: If the text start with !, show file completions
1161 properly. This helps when trying to complete command name
1167 properly. This helps when trying to complete command name
1162 for shell escapes.
1168 for shell escapes.
1163
1169
1164 2006-11-27 Ville Vainio <vivainio@gmail.com>
1170 2006-11-27 Ville Vainio <vivainio@gmail.com>
1165
1171
1166 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1172 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1167 der Walt. Clean up svn and hg completers by using a common
1173 der Walt. Clean up svn and hg completers by using a common
1168 vcs_completer.
1174 vcs_completer.
1169
1175
1170 2006-11-26 Ville Vainio <vivainio@gmail.com>
1176 2006-11-26 Ville Vainio <vivainio@gmail.com>
1171
1177
1172 * Remove ipconfig and %config; you should use _ip.options structure
1178 * Remove ipconfig and %config; you should use _ip.options structure
1173 directly instead!
1179 directly instead!
1174
1180
1175 * genutils.py: add wrap_deprecated function for deprecating callables
1181 * genutils.py: add wrap_deprecated function for deprecating callables
1176
1182
1177 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1183 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1178 _ip.system instead. ipalias is redundant.
1184 _ip.system instead. ipalias is redundant.
1179
1185
1180 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1186 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1181 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1187 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1182 explicit.
1188 explicit.
1183
1189
1184 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1190 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1185 completer. Try it by entering 'hg ' and pressing tab.
1191 completer. Try it by entering 'hg ' and pressing tab.
1186
1192
1187 * macro.py: Give Macro a useful __repr__ method
1193 * macro.py: Give Macro a useful __repr__ method
1188
1194
1189 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1195 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1190
1196
1191 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1197 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1192 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1198 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1193 we don't get a duplicate ipipe module, where registration of the xrepr
1199 we don't get a duplicate ipipe module, where registration of the xrepr
1194 implementation for Text is useless.
1200 implementation for Text is useless.
1195
1201
1196 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1202 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1197
1203
1198 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1204 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1199
1205
1200 2006-11-24 Ville Vainio <vivainio@gmail.com>
1206 2006-11-24 Ville Vainio <vivainio@gmail.com>
1201
1207
1202 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1208 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1203 try to use "cProfile" instead of the slower pure python
1209 try to use "cProfile" instead of the slower pure python
1204 "profile"
1210 "profile"
1205
1211
1206 2006-11-23 Ville Vainio <vivainio@gmail.com>
1212 2006-11-23 Ville Vainio <vivainio@gmail.com>
1207
1213
1208 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1214 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1209 Qt+IPython+Designer link in documentation.
1215 Qt+IPython+Designer link in documentation.
1210
1216
1211 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1217 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1212 correct Pdb object to %pydb.
1218 correct Pdb object to %pydb.
1213
1219
1214
1220
1215 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1221 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1216 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1222 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1217 generic xrepr(), otherwise the list implementation would kick in.
1223 generic xrepr(), otherwise the list implementation would kick in.
1218
1224
1219 2006-11-21 Ville Vainio <vivainio@gmail.com>
1225 2006-11-21 Ville Vainio <vivainio@gmail.com>
1220
1226
1221 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1227 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1222 with one from UserConfig.
1228 with one from UserConfig.
1223
1229
1224 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1230 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1225 it was missing which broke the sh profile.
1231 it was missing which broke the sh profile.
1226
1232
1227 * completer.py: file completer now uses explicit '/' instead
1233 * completer.py: file completer now uses explicit '/' instead
1228 of os.path.join, expansion of 'foo' was broken on win32
1234 of os.path.join, expansion of 'foo' was broken on win32
1229 if there was one directory with name 'foobar'.
1235 if there was one directory with name 'foobar'.
1230
1236
1231 * A bunch of patches from Kirill Smelkov:
1237 * A bunch of patches from Kirill Smelkov:
1232
1238
1233 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1239 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1234
1240
1235 * [patch 7/9] Implement %page -r (page in raw mode) -
1241 * [patch 7/9] Implement %page -r (page in raw mode) -
1236
1242
1237 * [patch 5/9] ScientificPython webpage has moved
1243 * [patch 5/9] ScientificPython webpage has moved
1238
1244
1239 * [patch 4/9] The manual mentions %ds, should be %dhist
1245 * [patch 4/9] The manual mentions %ds, should be %dhist
1240
1246
1241 * [patch 3/9] Kill old bits from %prun doc.
1247 * [patch 3/9] Kill old bits from %prun doc.
1242
1248
1243 * [patch 1/9] Fix typos here and there.
1249 * [patch 1/9] Fix typos here and there.
1244
1250
1245 2006-11-08 Ville Vainio <vivainio@gmail.com>
1251 2006-11-08 Ville Vainio <vivainio@gmail.com>
1246
1252
1247 * completer.py (attr_matches): catch all exceptions raised
1253 * completer.py (attr_matches): catch all exceptions raised
1248 by eval of expr with dots.
1254 by eval of expr with dots.
1249
1255
1250 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1256 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1251
1257
1252 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1258 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1253 input if it starts with whitespace. This allows you to paste
1259 input if it starts with whitespace. This allows you to paste
1254 indented input from any editor without manually having to type in
1260 indented input from any editor without manually having to type in
1255 the 'if 1:', which is convenient when working interactively.
1261 the 'if 1:', which is convenient when working interactively.
1256 Slightly modifed version of a patch by Bo Peng
1262 Slightly modifed version of a patch by Bo Peng
1257 <bpeng-AT-rice.edu>.
1263 <bpeng-AT-rice.edu>.
1258
1264
1259 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1265 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1260
1266
1261 * IPython/irunner.py (main): modified irunner so it automatically
1267 * IPython/irunner.py (main): modified irunner so it automatically
1262 recognizes the right runner to use based on the extension (.py for
1268 recognizes the right runner to use based on the extension (.py for
1263 python, .ipy for ipython and .sage for sage).
1269 python, .ipy for ipython and .sage for sage).
1264
1270
1265 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1271 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1266 visible in ipapi as ip.config(), to programatically control the
1272 visible in ipapi as ip.config(), to programatically control the
1267 internal rc object. There's an accompanying %config magic for
1273 internal rc object. There's an accompanying %config magic for
1268 interactive use, which has been enhanced to match the
1274 interactive use, which has been enhanced to match the
1269 funtionality in ipconfig.
1275 funtionality in ipconfig.
1270
1276
1271 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1277 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1272 so it's not just a toggle, it now takes an argument. Add support
1278 so it's not just a toggle, it now takes an argument. Add support
1273 for a customizable header when making system calls, as the new
1279 for a customizable header when making system calls, as the new
1274 system_header variable in the ipythonrc file.
1280 system_header variable in the ipythonrc file.
1275
1281
1276 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1282 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1277
1283
1278 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1284 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1279 generic functions (using Philip J. Eby's simplegeneric package).
1285 generic functions (using Philip J. Eby's simplegeneric package).
1280 This makes it possible to customize the display of third-party classes
1286 This makes it possible to customize the display of third-party classes
1281 without having to monkeypatch them. xiter() no longer supports a mode
1287 without having to monkeypatch them. xiter() no longer supports a mode
1282 argument and the XMode class has been removed. The same functionality can
1288 argument and the XMode class has been removed. The same functionality can
1283 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1289 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1284 One consequence of the switch to generic functions is that xrepr() and
1290 One consequence of the switch to generic functions is that xrepr() and
1285 xattrs() implementation must define the default value for the mode
1291 xattrs() implementation must define the default value for the mode
1286 argument themselves and xattrs() implementations must return real
1292 argument themselves and xattrs() implementations must return real
1287 descriptors.
1293 descriptors.
1288
1294
1289 * IPython/external: This new subpackage will contain all third-party
1295 * IPython/external: This new subpackage will contain all third-party
1290 packages that are bundled with IPython. (The first one is simplegeneric).
1296 packages that are bundled with IPython. (The first one is simplegeneric).
1291
1297
1292 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1298 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1293 directory which as been dropped in r1703.
1299 directory which as been dropped in r1703.
1294
1300
1295 * IPython/Extensions/ipipe.py (iless): Fixed.
1301 * IPython/Extensions/ipipe.py (iless): Fixed.
1296
1302
1297 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1303 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1298
1304
1299 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1305 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1300
1306
1301 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1307 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1302 handling in variable expansion so that shells and magics recognize
1308 handling in variable expansion so that shells and magics recognize
1303 function local scopes correctly. Bug reported by Brian.
1309 function local scopes correctly. Bug reported by Brian.
1304
1310
1305 * scripts/ipython: remove the very first entry in sys.path which
1311 * scripts/ipython: remove the very first entry in sys.path which
1306 Python auto-inserts for scripts, so that sys.path under IPython is
1312 Python auto-inserts for scripts, so that sys.path under IPython is
1307 as similar as possible to that under plain Python.
1313 as similar as possible to that under plain Python.
1308
1314
1309 * IPython/completer.py (IPCompleter.file_matches): Fix
1315 * IPython/completer.py (IPCompleter.file_matches): Fix
1310 tab-completion so that quotes are not closed unless the completion
1316 tab-completion so that quotes are not closed unless the completion
1311 is unambiguous. After a request by Stefan. Minor cleanups in
1317 is unambiguous. After a request by Stefan. Minor cleanups in
1312 ipy_stock_completers.
1318 ipy_stock_completers.
1313
1319
1314 2006-11-02 Ville Vainio <vivainio@gmail.com>
1320 2006-11-02 Ville Vainio <vivainio@gmail.com>
1315
1321
1316 * ipy_stock_completers.py: Add %run and %cd completers.
1322 * ipy_stock_completers.py: Add %run and %cd completers.
1317
1323
1318 * completer.py: Try running custom completer for both
1324 * completer.py: Try running custom completer for both
1319 "foo" and "%foo" if the command is just "foo". Ignore case
1325 "foo" and "%foo" if the command is just "foo". Ignore case
1320 when filtering possible completions.
1326 when filtering possible completions.
1321
1327
1322 * UserConfig/ipy_user_conf.py: install stock completers as default
1328 * UserConfig/ipy_user_conf.py: install stock completers as default
1323
1329
1324 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1330 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1325 simplified readline history save / restore through a wrapper
1331 simplified readline history save / restore through a wrapper
1326 function
1332 function
1327
1333
1328
1334
1329 2006-10-31 Ville Vainio <vivainio@gmail.com>
1335 2006-10-31 Ville Vainio <vivainio@gmail.com>
1330
1336
1331 * strdispatch.py, completer.py, ipy_stock_completers.py:
1337 * strdispatch.py, completer.py, ipy_stock_completers.py:
1332 Allow str_key ("command") in completer hooks. Implement
1338 Allow str_key ("command") in completer hooks. Implement
1333 trivial completer for 'import' (stdlib modules only). Rename
1339 trivial completer for 'import' (stdlib modules only). Rename
1334 ipy_linux_package_managers.py to ipy_stock_completers.py.
1340 ipy_linux_package_managers.py to ipy_stock_completers.py.
1335 SVN completer.
1341 SVN completer.
1336
1342
1337 * Extensions/ledit.py: %magic line editor for easily and
1343 * Extensions/ledit.py: %magic line editor for easily and
1338 incrementally manipulating lists of strings. The magic command
1344 incrementally manipulating lists of strings. The magic command
1339 name is %led.
1345 name is %led.
1340
1346
1341 2006-10-30 Ville Vainio <vivainio@gmail.com>
1347 2006-10-30 Ville Vainio <vivainio@gmail.com>
1342
1348
1343 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1349 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1344 Bernsteins's patches for pydb integration.
1350 Bernsteins's patches for pydb integration.
1345 http://bashdb.sourceforge.net/pydb/
1351 http://bashdb.sourceforge.net/pydb/
1346
1352
1347 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1353 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1348 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1354 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1349 custom completer hook to allow the users to implement their own
1355 custom completer hook to allow the users to implement their own
1350 completers. See ipy_linux_package_managers.py for example. The
1356 completers. See ipy_linux_package_managers.py for example. The
1351 hook name is 'complete_command'.
1357 hook name is 'complete_command'.
1352
1358
1353 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1359 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1354
1360
1355 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1361 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1356 Numeric leftovers.
1362 Numeric leftovers.
1357
1363
1358 * ipython.el (py-execute-region): apply Stefan's patch to fix
1364 * ipython.el (py-execute-region): apply Stefan's patch to fix
1359 garbled results if the python shell hasn't been previously started.
1365 garbled results if the python shell hasn't been previously started.
1360
1366
1361 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1367 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1362 pretty generic function and useful for other things.
1368 pretty generic function and useful for other things.
1363
1369
1364 * IPython/OInspect.py (getsource): Add customizable source
1370 * IPython/OInspect.py (getsource): Add customizable source
1365 extractor. After a request/patch form W. Stein (SAGE).
1371 extractor. After a request/patch form W. Stein (SAGE).
1366
1372
1367 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1373 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1368 window size to a more reasonable value from what pexpect does,
1374 window size to a more reasonable value from what pexpect does,
1369 since their choice causes wrapping bugs with long input lines.
1375 since their choice causes wrapping bugs with long input lines.
1370
1376
1371 2006-10-28 Ville Vainio <vivainio@gmail.com>
1377 2006-10-28 Ville Vainio <vivainio@gmail.com>
1372
1378
1373 * Magic.py (%run): Save and restore the readline history from
1379 * Magic.py (%run): Save and restore the readline history from
1374 file around %run commands to prevent side effects from
1380 file around %run commands to prevent side effects from
1375 %runned programs that might use readline (e.g. pydb).
1381 %runned programs that might use readline (e.g. pydb).
1376
1382
1377 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1383 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1378 invoking the pydb enhanced debugger.
1384 invoking the pydb enhanced debugger.
1379
1385
1380 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1386 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1381
1387
1382 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1388 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1383 call the base class method and propagate the return value to
1389 call the base class method and propagate the return value to
1384 ifile. This is now done by path itself.
1390 ifile. This is now done by path itself.
1385
1391
1386 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1392 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1387
1393
1388 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1394 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1389 api: set_crash_handler(), to expose the ability to change the
1395 api: set_crash_handler(), to expose the ability to change the
1390 internal crash handler.
1396 internal crash handler.
1391
1397
1392 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1398 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1393 the various parameters of the crash handler so that apps using
1399 the various parameters of the crash handler so that apps using
1394 IPython as their engine can customize crash handling. Ipmlemented
1400 IPython as their engine can customize crash handling. Ipmlemented
1395 at the request of SAGE.
1401 at the request of SAGE.
1396
1402
1397 2006-10-14 Ville Vainio <vivainio@gmail.com>
1403 2006-10-14 Ville Vainio <vivainio@gmail.com>
1398
1404
1399 * Magic.py, ipython.el: applied first "safe" part of Rocky
1405 * Magic.py, ipython.el: applied first "safe" part of Rocky
1400 Bernstein's patch set for pydb integration.
1406 Bernstein's patch set for pydb integration.
1401
1407
1402 * Magic.py (%unalias, %alias): %store'd aliases can now be
1408 * Magic.py (%unalias, %alias): %store'd aliases can now be
1403 removed with '%unalias'. %alias w/o args now shows most
1409 removed with '%unalias'. %alias w/o args now shows most
1404 interesting (stored / manually defined) aliases last
1410 interesting (stored / manually defined) aliases last
1405 where they catch the eye w/o scrolling.
1411 where they catch the eye w/o scrolling.
1406
1412
1407 * Magic.py (%rehashx), ext_rehashdir.py: files with
1413 * Magic.py (%rehashx), ext_rehashdir.py: files with
1408 'py' extension are always considered executable, even
1414 'py' extension are always considered executable, even
1409 when not in PATHEXT environment variable.
1415 when not in PATHEXT environment variable.
1410
1416
1411 2006-10-12 Ville Vainio <vivainio@gmail.com>
1417 2006-10-12 Ville Vainio <vivainio@gmail.com>
1412
1418
1413 * jobctrl.py: Add new "jobctrl" extension for spawning background
1419 * jobctrl.py: Add new "jobctrl" extension for spawning background
1414 processes with "&find /". 'import jobctrl' to try it out. Requires
1420 processes with "&find /". 'import jobctrl' to try it out. Requires
1415 'subprocess' module, standard in python 2.4+.
1421 'subprocess' module, standard in python 2.4+.
1416
1422
1417 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1423 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1418 so if foo -> bar and bar -> baz, then foo -> baz.
1424 so if foo -> bar and bar -> baz, then foo -> baz.
1419
1425
1420 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1426 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1421
1427
1422 * IPython/Magic.py (Magic.parse_options): add a new posix option
1428 * IPython/Magic.py (Magic.parse_options): add a new posix option
1423 to allow parsing of input args in magics that doesn't strip quotes
1429 to allow parsing of input args in magics that doesn't strip quotes
1424 (if posix=False). This also closes %timeit bug reported by
1430 (if posix=False). This also closes %timeit bug reported by
1425 Stefan.
1431 Stefan.
1426
1432
1427 2006-10-03 Ville Vainio <vivainio@gmail.com>
1433 2006-10-03 Ville Vainio <vivainio@gmail.com>
1428
1434
1429 * iplib.py (raw_input, interact): Return ValueError catching for
1435 * iplib.py (raw_input, interact): Return ValueError catching for
1430 raw_input. Fixes infinite loop for sys.stdin.close() or
1436 raw_input. Fixes infinite loop for sys.stdin.close() or
1431 sys.stdout.close().
1437 sys.stdout.close().
1432
1438
1433 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1439 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1434
1440
1435 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1441 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1436 to help in handling doctests. irunner is now pretty useful for
1442 to help in handling doctests. irunner is now pretty useful for
1437 running standalone scripts and simulate a full interactive session
1443 running standalone scripts and simulate a full interactive session
1438 in a format that can be then pasted as a doctest.
1444 in a format that can be then pasted as a doctest.
1439
1445
1440 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1446 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1441 on top of the default (useless) ones. This also fixes the nasty
1447 on top of the default (useless) ones. This also fixes the nasty
1442 way in which 2.5's Quitter() exits (reverted [1785]).
1448 way in which 2.5's Quitter() exits (reverted [1785]).
1443
1449
1444 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1450 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1445 2.5.
1451 2.5.
1446
1452
1447 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1453 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1448 color scheme is updated as well when color scheme is changed
1454 color scheme is updated as well when color scheme is changed
1449 interactively.
1455 interactively.
1450
1456
1451 2006-09-27 Ville Vainio <vivainio@gmail.com>
1457 2006-09-27 Ville Vainio <vivainio@gmail.com>
1452
1458
1453 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1459 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1454 infinite loop and just exit. It's a hack, but will do for a while.
1460 infinite loop and just exit. It's a hack, but will do for a while.
1455
1461
1456 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1462 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1457
1463
1458 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1464 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1459 the constructor, this makes it possible to get a list of only directories
1465 the constructor, this makes it possible to get a list of only directories
1460 or only files.
1466 or only files.
1461
1467
1462 2006-08-12 Ville Vainio <vivainio@gmail.com>
1468 2006-08-12 Ville Vainio <vivainio@gmail.com>
1463
1469
1464 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1470 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1465 they broke unittest
1471 they broke unittest
1466
1472
1467 2006-08-11 Ville Vainio <vivainio@gmail.com>
1473 2006-08-11 Ville Vainio <vivainio@gmail.com>
1468
1474
1469 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1475 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1470 by resolving issue properly, i.e. by inheriting FakeModule
1476 by resolving issue properly, i.e. by inheriting FakeModule
1471 from types.ModuleType. Pickling ipython interactive data
1477 from types.ModuleType. Pickling ipython interactive data
1472 should still work as usual (testing appreciated).
1478 should still work as usual (testing appreciated).
1473
1479
1474 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1480 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1475
1481
1476 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1482 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1477 running under python 2.3 with code from 2.4 to fix a bug with
1483 running under python 2.3 with code from 2.4 to fix a bug with
1478 help(). Reported by the Debian maintainers, Norbert Tretkowski
1484 help(). Reported by the Debian maintainers, Norbert Tretkowski
1479 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1485 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1480 <afayolle-AT-debian.org>.
1486 <afayolle-AT-debian.org>.
1481
1487
1482 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1488 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1483
1489
1484 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1490 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1485 (which was displaying "quit" twice).
1491 (which was displaying "quit" twice).
1486
1492
1487 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1493 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1488
1494
1489 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1495 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1490 the mode argument).
1496 the mode argument).
1491
1497
1492 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1498 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1493
1499
1494 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1500 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1495 not running under IPython.
1501 not running under IPython.
1496
1502
1497 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1503 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1498 and make it iterable (iterating over the attribute itself). Add two new
1504 and make it iterable (iterating over the attribute itself). Add two new
1499 magic strings for __xattrs__(): If the string starts with "-", the attribute
1505 magic strings for __xattrs__(): If the string starts with "-", the attribute
1500 will not be displayed in ibrowse's detail view (but it can still be
1506 will not be displayed in ibrowse's detail view (but it can still be
1501 iterated over). This makes it possible to add attributes that are large
1507 iterated over). This makes it possible to add attributes that are large
1502 lists or generator methods to the detail view. Replace magic attribute names
1508 lists or generator methods to the detail view. Replace magic attribute names
1503 and _attrname() and _getattr() with "descriptors": For each type of magic
1509 and _attrname() and _getattr() with "descriptors": For each type of magic
1504 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1510 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1505 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1511 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1506 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1512 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1507 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1513 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1508 are still supported.
1514 are still supported.
1509
1515
1510 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1516 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1511 fails in ibrowse.fetch(), the exception object is added as the last item
1517 fails in ibrowse.fetch(), the exception object is added as the last item
1512 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1518 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1513 a generator throws an exception midway through execution.
1519 a generator throws an exception midway through execution.
1514
1520
1515 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1521 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1516 encoding into methods.
1522 encoding into methods.
1517
1523
1518 2006-07-26 Ville Vainio <vivainio@gmail.com>
1524 2006-07-26 Ville Vainio <vivainio@gmail.com>
1519
1525
1520 * iplib.py: history now stores multiline input as single
1526 * iplib.py: history now stores multiline input as single
1521 history entries. Patch by Jorgen Cederlof.
1527 history entries. Patch by Jorgen Cederlof.
1522
1528
1523 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1529 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1524
1530
1525 * IPython/Extensions/ibrowse.py: Make cursor visible over
1531 * IPython/Extensions/ibrowse.py: Make cursor visible over
1526 non existing attributes.
1532 non existing attributes.
1527
1533
1528 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1534 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1529
1535
1530 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1536 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1531 error output of the running command doesn't mess up the screen.
1537 error output of the running command doesn't mess up the screen.
1532
1538
1533 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1539 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1534
1540
1535 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1541 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1536 argument. This sorts the items themselves.
1542 argument. This sorts the items themselves.
1537
1543
1538 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1544 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1539
1545
1540 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1546 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1541 Compile expression strings into code objects. This should speed
1547 Compile expression strings into code objects. This should speed
1542 up ifilter and friends somewhat.
1548 up ifilter and friends somewhat.
1543
1549
1544 2006-07-08 Ville Vainio <vivainio@gmail.com>
1550 2006-07-08 Ville Vainio <vivainio@gmail.com>
1545
1551
1546 * Magic.py: %cpaste now strips > from the beginning of lines
1552 * Magic.py: %cpaste now strips > from the beginning of lines
1547 to ease pasting quoted code from emails. Contributed by
1553 to ease pasting quoted code from emails. Contributed by
1548 Stefan van der Walt.
1554 Stefan van der Walt.
1549
1555
1550 2006-06-29 Ville Vainio <vivainio@gmail.com>
1556 2006-06-29 Ville Vainio <vivainio@gmail.com>
1551
1557
1552 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1558 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1553 mode, patch contributed by Darren Dale. NEEDS TESTING!
1559 mode, patch contributed by Darren Dale. NEEDS TESTING!
1554
1560
1555 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1561 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1556
1562
1557 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1563 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1558 a blue background. Fix fetching new display rows when the browser
1564 a blue background. Fix fetching new display rows when the browser
1559 scrolls more than a screenful (e.g. by using the goto command).
1565 scrolls more than a screenful (e.g. by using the goto command).
1560
1566
1561 2006-06-27 Ville Vainio <vivainio@gmail.com>
1567 2006-06-27 Ville Vainio <vivainio@gmail.com>
1562
1568
1563 * Magic.py (_inspect, _ofind) Apply David Huard's
1569 * Magic.py (_inspect, _ofind) Apply David Huard's
1564 patch for displaying the correct docstring for 'property'
1570 patch for displaying the correct docstring for 'property'
1565 attributes.
1571 attributes.
1566
1572
1567 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1573 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1568
1574
1569 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1575 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1570 commands into the methods implementing them.
1576 commands into the methods implementing them.
1571
1577
1572 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1578 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1573
1579
1574 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1580 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1575 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1581 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1576 autoindent support was authored by Jin Liu.
1582 autoindent support was authored by Jin Liu.
1577
1583
1578 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1584 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1579
1585
1580 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1586 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1581 for keymaps with a custom class that simplifies handling.
1587 for keymaps with a custom class that simplifies handling.
1582
1588
1583 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1589 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1584
1590
1585 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1591 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1586 resizing. This requires Python 2.5 to work.
1592 resizing. This requires Python 2.5 to work.
1587
1593
1588 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1594 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1589
1595
1590 * IPython/Extensions/ibrowse.py: Add two new commands to
1596 * IPython/Extensions/ibrowse.py: Add two new commands to
1591 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1597 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1592 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1598 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1593 attributes again. Remapped the help command to "?". Display
1599 attributes again. Remapped the help command to "?". Display
1594 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1600 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1595 as keys for the "home" and "end" commands. Add three new commands
1601 as keys for the "home" and "end" commands. Add three new commands
1596 to the input mode for "find" and friends: "delend" (CTRL-K)
1602 to the input mode for "find" and friends: "delend" (CTRL-K)
1597 deletes to the end of line. "incsearchup" searches upwards in the
1603 deletes to the end of line. "incsearchup" searches upwards in the
1598 command history for an input that starts with the text before the cursor.
1604 command history for an input that starts with the text before the cursor.
1599 "incsearchdown" does the same downwards. Removed a bogus mapping of
1605 "incsearchdown" does the same downwards. Removed a bogus mapping of
1600 the x key to "delete".
1606 the x key to "delete".
1601
1607
1602 2006-06-15 Ville Vainio <vivainio@gmail.com>
1608 2006-06-15 Ville Vainio <vivainio@gmail.com>
1603
1609
1604 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1610 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1605 used to create prompts dynamically, instead of the "old" way of
1611 used to create prompts dynamically, instead of the "old" way of
1606 assigning "magic" strings to prompt_in1 and prompt_in2. The old
1612 assigning "magic" strings to prompt_in1 and prompt_in2. The old
1607 way still works (it's invoked by the default hook), of course.
1613 way still works (it's invoked by the default hook), of course.
1608
1614
1609 * Prompts.py: added generate_output_prompt hook for altering output
1615 * Prompts.py: added generate_output_prompt hook for altering output
1610 prompt
1616 prompt
1611
1617
1612 * Release.py: Changed version string to 0.7.3.svn.
1618 * Release.py: Changed version string to 0.7.3.svn.
1613
1619
1614 2006-06-15 Walter Doerwald <walter@livinglogic.de>
1620 2006-06-15 Walter Doerwald <walter@livinglogic.de>
1615
1621
1616 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
1622 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
1617 the call to fetch() always tries to fetch enough data for at least one
1623 the call to fetch() always tries to fetch enough data for at least one
1618 full screen. This makes it possible to simply call moveto(0,0,True) in
1624 full screen. This makes it possible to simply call moveto(0,0,True) in
1619 the constructor. Fix typos and removed the obsolete goto attribute.
1625 the constructor. Fix typos and removed the obsolete goto attribute.
1620
1626
1621 2006-06-12 Ville Vainio <vivainio@gmail.com>
1627 2006-06-12 Ville Vainio <vivainio@gmail.com>
1622
1628
1623 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
1629 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
1624 allowing $variable interpolation within multiline statements,
1630 allowing $variable interpolation within multiline statements,
1625 though so far only with "sh" profile for a testing period.
1631 though so far only with "sh" profile for a testing period.
1626 The patch also enables splitting long commands with \ but it
1632 The patch also enables splitting long commands with \ but it
1627 doesn't work properly yet.
1633 doesn't work properly yet.
1628
1634
1629 2006-06-12 Walter Doerwald <walter@livinglogic.de>
1635 2006-06-12 Walter Doerwald <walter@livinglogic.de>
1630
1636
1631 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
1637 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
1632 input history and the position of the cursor in the input history for
1638 input history and the position of the cursor in the input history for
1633 the find, findbackwards and goto command.
1639 the find, findbackwards and goto command.
1634
1640
1635 2006-06-10 Walter Doerwald <walter@livinglogic.de>
1641 2006-06-10 Walter Doerwald <walter@livinglogic.de>
1636
1642
1637 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
1643 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
1638 implements the basic functionality of browser commands that require
1644 implements the basic functionality of browser commands that require
1639 input. Reimplement the goto, find and findbackwards commands as
1645 input. Reimplement the goto, find and findbackwards commands as
1640 subclasses of _CommandInput. Add an input history and keymaps to those
1646 subclasses of _CommandInput. Add an input history and keymaps to those
1641 commands. Add "\r" as a keyboard shortcut for the enterdefault and
1647 commands. Add "\r" as a keyboard shortcut for the enterdefault and
1642 execute commands.
1648 execute commands.
1643
1649
1644 2006-06-07 Ville Vainio <vivainio@gmail.com>
1650 2006-06-07 Ville Vainio <vivainio@gmail.com>
1645
1651
1646 * iplib.py: ipython mybatch.ipy exits ipython immediately after
1652 * iplib.py: ipython mybatch.ipy exits ipython immediately after
1647 running the batch files instead of leaving the session open.
1653 running the batch files instead of leaving the session open.
1648
1654
1649 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1655 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1650
1656
1651 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1657 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1652 the original fix was incomplete. Patch submitted by W. Maier.
1658 the original fix was incomplete. Patch submitted by W. Maier.
1653
1659
1654 2006-06-07 Ville Vainio <vivainio@gmail.com>
1660 2006-06-07 Ville Vainio <vivainio@gmail.com>
1655
1661
1656 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1662 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1657 Confirmation prompts can be supressed by 'quiet' option.
1663 Confirmation prompts can be supressed by 'quiet' option.
1658 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1664 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1659
1665
1660 2006-06-06 *** Released version 0.7.2
1666 2006-06-06 *** Released version 0.7.2
1661
1667
1662 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1668 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1663
1669
1664 * IPython/Release.py (version): Made 0.7.2 final for release.
1670 * IPython/Release.py (version): Made 0.7.2 final for release.
1665 Repo tagged and release cut.
1671 Repo tagged and release cut.
1666
1672
1667 2006-06-05 Ville Vainio <vivainio@gmail.com>
1673 2006-06-05 Ville Vainio <vivainio@gmail.com>
1668
1674
1669 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1675 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1670 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1676 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1671
1677
1672 * upgrade_dir.py: try import 'path' module a bit harder
1678 * upgrade_dir.py: try import 'path' module a bit harder
1673 (for %upgrade)
1679 (for %upgrade)
1674
1680
1675 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1681 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1676
1682
1677 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1683 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1678 instead of looping 20 times.
1684 instead of looping 20 times.
1679
1685
1680 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1686 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1681 correctly at initialization time. Bug reported by Krishna Mohan
1687 correctly at initialization time. Bug reported by Krishna Mohan
1682 Gundu <gkmohan-AT-gmail.com> on the user list.
1688 Gundu <gkmohan-AT-gmail.com> on the user list.
1683
1689
1684 * IPython/Release.py (version): Mark 0.7.2 version to start
1690 * IPython/Release.py (version): Mark 0.7.2 version to start
1685 testing for release on 06/06.
1691 testing for release on 06/06.
1686
1692
1687 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1693 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1688
1694
1689 * scripts/irunner: thin script interface so users don't have to
1695 * scripts/irunner: thin script interface so users don't have to
1690 find the module and call it as an executable, since modules rarely
1696 find the module and call it as an executable, since modules rarely
1691 live in people's PATH.
1697 live in people's PATH.
1692
1698
1693 * IPython/irunner.py (InteractiveRunner.__init__): added
1699 * IPython/irunner.py (InteractiveRunner.__init__): added
1694 delaybeforesend attribute to control delays with newer versions of
1700 delaybeforesend attribute to control delays with newer versions of
1695 pexpect. Thanks to detailed help from pexpect's author, Noah
1701 pexpect. Thanks to detailed help from pexpect's author, Noah
1696 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1702 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1697 correctly (it works in NoColor mode).
1703 correctly (it works in NoColor mode).
1698
1704
1699 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1705 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1700 SAGE list, from improper log() calls.
1706 SAGE list, from improper log() calls.
1701
1707
1702 2006-05-31 Ville Vainio <vivainio@gmail.com>
1708 2006-05-31 Ville Vainio <vivainio@gmail.com>
1703
1709
1704 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1710 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1705 with args in parens to work correctly with dirs that have spaces.
1711 with args in parens to work correctly with dirs that have spaces.
1706
1712
1707 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1713 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1708
1714
1709 * IPython/Logger.py (Logger.logstart): add option to log raw input
1715 * IPython/Logger.py (Logger.logstart): add option to log raw input
1710 instead of the processed one. A -r flag was added to the
1716 instead of the processed one. A -r flag was added to the
1711 %logstart magic used for controlling logging.
1717 %logstart magic used for controlling logging.
1712
1718
1713 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1719 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1714
1720
1715 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1721 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1716 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1722 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1717 recognize the option. After a bug report by Will Maier. This
1723 recognize the option. After a bug report by Will Maier. This
1718 closes #64 (will do it after confirmation from W. Maier).
1724 closes #64 (will do it after confirmation from W. Maier).
1719
1725
1720 * IPython/irunner.py: New module to run scripts as if manually
1726 * IPython/irunner.py: New module to run scripts as if manually
1721 typed into an interactive environment, based on pexpect. After a
1727 typed into an interactive environment, based on pexpect. After a
1722 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1728 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1723 ipython-user list. Simple unittests in the tests/ directory.
1729 ipython-user list. Simple unittests in the tests/ directory.
1724
1730
1725 * tools/release: add Will Maier, OpenBSD port maintainer, to
1731 * tools/release: add Will Maier, OpenBSD port maintainer, to
1726 recepients list. We are now officially part of the OpenBSD ports:
1732 recepients list. We are now officially part of the OpenBSD ports:
1727 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1733 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1728 work.
1734 work.
1729
1735
1730 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1736 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1731
1737
1732 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1738 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1733 so that it doesn't break tkinter apps.
1739 so that it doesn't break tkinter apps.
1734
1740
1735 * IPython/iplib.py (_prefilter): fix bug where aliases would
1741 * IPython/iplib.py (_prefilter): fix bug where aliases would
1736 shadow variables when autocall was fully off. Reported by SAGE
1742 shadow variables when autocall was fully off. Reported by SAGE
1737 author William Stein.
1743 author William Stein.
1738
1744
1739 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1745 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1740 at what detail level strings are computed when foo? is requested.
1746 at what detail level strings are computed when foo? is requested.
1741 This allows users to ask for example that the string form of an
1747 This allows users to ask for example that the string form of an
1742 object is only computed when foo?? is called, or even never, by
1748 object is only computed when foo?? is called, or even never, by
1743 setting the object_info_string_level >= 2 in the configuration
1749 setting the object_info_string_level >= 2 in the configuration
1744 file. This new option has been added and documented. After a
1750 file. This new option has been added and documented. After a
1745 request by SAGE to be able to control the printing of very large
1751 request by SAGE to be able to control the printing of very large
1746 objects more easily.
1752 objects more easily.
1747
1753
1748 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1754 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1749
1755
1750 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1756 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1751 from sys.argv, to be 100% consistent with how Python itself works
1757 from sys.argv, to be 100% consistent with how Python itself works
1752 (as seen for example with python -i file.py). After a bug report
1758 (as seen for example with python -i file.py). After a bug report
1753 by Jeffrey Collins.
1759 by Jeffrey Collins.
1754
1760
1755 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1761 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1756 nasty bug which was preventing custom namespaces with -pylab,
1762 nasty bug which was preventing custom namespaces with -pylab,
1757 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1763 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1758 compatibility (long gone from mpl).
1764 compatibility (long gone from mpl).
1759
1765
1760 * IPython/ipapi.py (make_session): name change: create->make. We
1766 * IPython/ipapi.py (make_session): name change: create->make. We
1761 use make in other places (ipmaker,...), it's shorter and easier to
1767 use make in other places (ipmaker,...), it's shorter and easier to
1762 type and say, etc. I'm trying to clean things before 0.7.2 so
1768 type and say, etc. I'm trying to clean things before 0.7.2 so
1763 that I can keep things stable wrt to ipapi in the chainsaw branch.
1769 that I can keep things stable wrt to ipapi in the chainsaw branch.
1764
1770
1765 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1771 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1766 python-mode recognizes our debugger mode. Add support for
1772 python-mode recognizes our debugger mode. Add support for
1767 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1773 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1768 <m.liu.jin-AT-gmail.com> originally written by
1774 <m.liu.jin-AT-gmail.com> originally written by
1769 doxgen-AT-newsmth.net (with minor modifications for xemacs
1775 doxgen-AT-newsmth.net (with minor modifications for xemacs
1770 compatibility)
1776 compatibility)
1771
1777
1772 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1778 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1773 tracebacks when walking the stack so that the stack tracking system
1779 tracebacks when walking the stack so that the stack tracking system
1774 in emacs' python-mode can identify the frames correctly.
1780 in emacs' python-mode can identify the frames correctly.
1775
1781
1776 * IPython/ipmaker.py (make_IPython): make the internal (and
1782 * IPython/ipmaker.py (make_IPython): make the internal (and
1777 default config) autoedit_syntax value false by default. Too many
1783 default config) autoedit_syntax value false by default. Too many
1778 users have complained to me (both on and off-list) about problems
1784 users have complained to me (both on and off-list) about problems
1779 with this option being on by default, so I'm making it default to
1785 with this option being on by default, so I'm making it default to
1780 off. It can still be enabled by anyone via the usual mechanisms.
1786 off. It can still be enabled by anyone via the usual mechanisms.
1781
1787
1782 * IPython/completer.py (Completer.attr_matches): add support for
1788 * IPython/completer.py (Completer.attr_matches): add support for
1783 PyCrust-style _getAttributeNames magic method. Patch contributed
1789 PyCrust-style _getAttributeNames magic method. Patch contributed
1784 by <mscott-AT-goldenspud.com>. Closes #50.
1790 by <mscott-AT-goldenspud.com>. Closes #50.
1785
1791
1786 * IPython/iplib.py (InteractiveShell.__init__): remove the
1792 * IPython/iplib.py (InteractiveShell.__init__): remove the
1787 deletion of exit/quit from __builtin__, which can break
1793 deletion of exit/quit from __builtin__, which can break
1788 third-party tools like the Zope debugging console. The
1794 third-party tools like the Zope debugging console. The
1789 %exit/%quit magics remain. In general, it's probably a good idea
1795 %exit/%quit magics remain. In general, it's probably a good idea
1790 not to delete anything from __builtin__, since we never know what
1796 not to delete anything from __builtin__, since we never know what
1791 that will break. In any case, python now (for 2.5) will support
1797 that will break. In any case, python now (for 2.5) will support
1792 'real' exit/quit, so this issue is moot. Closes #55.
1798 'real' exit/quit, so this issue is moot. Closes #55.
1793
1799
1794 * IPython/genutils.py (with_obj): rename the 'with' function to
1800 * IPython/genutils.py (with_obj): rename the 'with' function to
1795 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1801 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1796 becomes a language keyword. Closes #53.
1802 becomes a language keyword. Closes #53.
1797
1803
1798 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1804 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1799 __file__ attribute to this so it fools more things into thinking
1805 __file__ attribute to this so it fools more things into thinking
1800 it is a real module. Closes #59.
1806 it is a real module. Closes #59.
1801
1807
1802 * IPython/Magic.py (magic_edit): add -n option to open the editor
1808 * IPython/Magic.py (magic_edit): add -n option to open the editor
1803 at a specific line number. After a patch by Stefan van der Walt.
1809 at a specific line number. After a patch by Stefan van der Walt.
1804
1810
1805 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1811 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1806
1812
1807 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1813 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1808 reason the file could not be opened. After automatic crash
1814 reason the file could not be opened. After automatic crash
1809 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1815 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1810 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1816 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1811 (_should_recompile): Don't fire editor if using %bg, since there
1817 (_should_recompile): Don't fire editor if using %bg, since there
1812 is no file in the first place. From the same report as above.
1818 is no file in the first place. From the same report as above.
1813 (raw_input): protect against faulty third-party prefilters. After
1819 (raw_input): protect against faulty third-party prefilters. After
1814 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1820 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1815 while running under SAGE.
1821 while running under SAGE.
1816
1822
1817 2006-05-23 Ville Vainio <vivainio@gmail.com>
1823 2006-05-23 Ville Vainio <vivainio@gmail.com>
1818
1824
1819 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1825 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1820 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1826 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1821 now returns None (again), unless dummy is specifically allowed by
1827 now returns None (again), unless dummy is specifically allowed by
1822 ipapi.get(allow_dummy=True).
1828 ipapi.get(allow_dummy=True).
1823
1829
1824 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1830 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1825
1831
1826 * IPython: remove all 2.2-compatibility objects and hacks from
1832 * IPython: remove all 2.2-compatibility objects and hacks from
1827 everywhere, since we only support 2.3 at this point. Docs
1833 everywhere, since we only support 2.3 at this point. Docs
1828 updated.
1834 updated.
1829
1835
1830 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1836 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1831 Anything requiring extra validation can be turned into a Python
1837 Anything requiring extra validation can be turned into a Python
1832 property in the future. I used a property for the db one b/c
1838 property in the future. I used a property for the db one b/c
1833 there was a nasty circularity problem with the initialization
1839 there was a nasty circularity problem with the initialization
1834 order, which right now I don't have time to clean up.
1840 order, which right now I don't have time to clean up.
1835
1841
1836 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1842 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1837 another locking bug reported by Jorgen. I'm not 100% sure though,
1843 another locking bug reported by Jorgen. I'm not 100% sure though,
1838 so more testing is needed...
1844 so more testing is needed...
1839
1845
1840 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1846 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1841
1847
1842 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1848 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1843 local variables from any routine in user code (typically executed
1849 local variables from any routine in user code (typically executed
1844 with %run) directly into the interactive namespace. Very useful
1850 with %run) directly into the interactive namespace. Very useful
1845 when doing complex debugging.
1851 when doing complex debugging.
1846 (IPythonNotRunning): Changed the default None object to a dummy
1852 (IPythonNotRunning): Changed the default None object to a dummy
1847 whose attributes can be queried as well as called without
1853 whose attributes can be queried as well as called without
1848 exploding, to ease writing code which works transparently both in
1854 exploding, to ease writing code which works transparently both in
1849 and out of ipython and uses some of this API.
1855 and out of ipython and uses some of this API.
1850
1856
1851 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1857 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1852
1858
1853 * IPython/hooks.py (result_display): Fix the fact that our display
1859 * IPython/hooks.py (result_display): Fix the fact that our display
1854 hook was using str() instead of repr(), as the default python
1860 hook was using str() instead of repr(), as the default python
1855 console does. This had gone unnoticed b/c it only happened if
1861 console does. This had gone unnoticed b/c it only happened if
1856 %Pprint was off, but the inconsistency was there.
1862 %Pprint was off, but the inconsistency was there.
1857
1863
1858 2006-05-15 Ville Vainio <vivainio@gmail.com>
1864 2006-05-15 Ville Vainio <vivainio@gmail.com>
1859
1865
1860 * Oinspect.py: Only show docstring for nonexisting/binary files
1866 * Oinspect.py: Only show docstring for nonexisting/binary files
1861 when doing object??, closing ticket #62
1867 when doing object??, closing ticket #62
1862
1868
1863 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1869 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1864
1870
1865 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1871 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1866 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1872 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1867 was being released in a routine which hadn't checked if it had
1873 was being released in a routine which hadn't checked if it had
1868 been the one to acquire it.
1874 been the one to acquire it.
1869
1875
1870 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1876 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1871
1877
1872 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1878 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1873
1879
1874 2006-04-11 Ville Vainio <vivainio@gmail.com>
1880 2006-04-11 Ville Vainio <vivainio@gmail.com>
1875
1881
1876 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1882 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1877 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1883 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1878 prefilters, allowing stuff like magics and aliases in the file.
1884 prefilters, allowing stuff like magics and aliases in the file.
1879
1885
1880 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1886 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1881 added. Supported now are "%clear in" and "%clear out" (clear input and
1887 added. Supported now are "%clear in" and "%clear out" (clear input and
1882 output history, respectively). Also fixed CachedOutput.flush to
1888 output history, respectively). Also fixed CachedOutput.flush to
1883 properly flush the output cache.
1889 properly flush the output cache.
1884
1890
1885 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1891 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1886 half-success (and fail explicitly).
1892 half-success (and fail explicitly).
1887
1893
1888 2006-03-28 Ville Vainio <vivainio@gmail.com>
1894 2006-03-28 Ville Vainio <vivainio@gmail.com>
1889
1895
1890 * iplib.py: Fix quoting of aliases so that only argless ones
1896 * iplib.py: Fix quoting of aliases so that only argless ones
1891 are quoted
1897 are quoted
1892
1898
1893 2006-03-28 Ville Vainio <vivainio@gmail.com>
1899 2006-03-28 Ville Vainio <vivainio@gmail.com>
1894
1900
1895 * iplib.py: Quote aliases with spaces in the name.
1901 * iplib.py: Quote aliases with spaces in the name.
1896 "c:\program files\blah\bin" is now legal alias target.
1902 "c:\program files\blah\bin" is now legal alias target.
1897
1903
1898 * ext_rehashdir.py: Space no longer allowed as arg
1904 * ext_rehashdir.py: Space no longer allowed as arg
1899 separator, since space is legal in path names.
1905 separator, since space is legal in path names.
1900
1906
1901 2006-03-16 Ville Vainio <vivainio@gmail.com>
1907 2006-03-16 Ville Vainio <vivainio@gmail.com>
1902
1908
1903 * upgrade_dir.py: Take path.py from Extensions, correcting
1909 * upgrade_dir.py: Take path.py from Extensions, correcting
1904 %upgrade magic
1910 %upgrade magic
1905
1911
1906 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1912 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1907
1913
1908 * hooks.py: Only enclose editor binary in quotes if legal and
1914 * hooks.py: Only enclose editor binary in quotes if legal and
1909 necessary (space in the name, and is an existing file). Fixes a bug
1915 necessary (space in the name, and is an existing file). Fixes a bug
1910 reported by Zachary Pincus.
1916 reported by Zachary Pincus.
1911
1917
1912 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1918 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1913
1919
1914 * Manual: thanks to a tip on proper color handling for Emacs, by
1920 * Manual: thanks to a tip on proper color handling for Emacs, by
1915 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1921 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1916
1922
1917 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1923 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1918 by applying the provided patch. Thanks to Liu Jin
1924 by applying the provided patch. Thanks to Liu Jin
1919 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1925 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1920 XEmacs/Linux, I'm trusting the submitter that it actually helps
1926 XEmacs/Linux, I'm trusting the submitter that it actually helps
1921 under win32/GNU Emacs. Will revisit if any problems are reported.
1927 under win32/GNU Emacs. Will revisit if any problems are reported.
1922
1928
1923 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1929 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1924
1930
1925 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1931 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1926 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1932 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1927
1933
1928 2006-03-12 Ville Vainio <vivainio@gmail.com>
1934 2006-03-12 Ville Vainio <vivainio@gmail.com>
1929
1935
1930 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1936 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1931 Torsten Marek.
1937 Torsten Marek.
1932
1938
1933 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1939 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1934
1940
1935 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1941 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1936 line ranges works again.
1942 line ranges works again.
1937
1943
1938 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1944 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1939
1945
1940 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1946 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1941 and friends, after a discussion with Zach Pincus on ipython-user.
1947 and friends, after a discussion with Zach Pincus on ipython-user.
1942 I'm not 100% sure, but after thinking about it quite a bit, it may
1948 I'm not 100% sure, but after thinking about it quite a bit, it may
1943 be OK. Testing with the multithreaded shells didn't reveal any
1949 be OK. Testing with the multithreaded shells didn't reveal any
1944 problems, but let's keep an eye out.
1950 problems, but let's keep an eye out.
1945
1951
1946 In the process, I fixed a few things which were calling
1952 In the process, I fixed a few things which were calling
1947 self.InteractiveTB() directly (like safe_execfile), which is a
1953 self.InteractiveTB() directly (like safe_execfile), which is a
1948 mistake: ALL exception reporting should be done by calling
1954 mistake: ALL exception reporting should be done by calling
1949 self.showtraceback(), which handles state and tab-completion and
1955 self.showtraceback(), which handles state and tab-completion and
1950 more.
1956 more.
1951
1957
1952 2006-03-01 Ville Vainio <vivainio@gmail.com>
1958 2006-03-01 Ville Vainio <vivainio@gmail.com>
1953
1959
1954 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1960 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1955 To use, do "from ipipe import *".
1961 To use, do "from ipipe import *".
1956
1962
1957 2006-02-24 Ville Vainio <vivainio@gmail.com>
1963 2006-02-24 Ville Vainio <vivainio@gmail.com>
1958
1964
1959 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1965 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1960 "cleanly" and safely than the older upgrade mechanism.
1966 "cleanly" and safely than the older upgrade mechanism.
1961
1967
1962 2006-02-21 Ville Vainio <vivainio@gmail.com>
1968 2006-02-21 Ville Vainio <vivainio@gmail.com>
1963
1969
1964 * Magic.py: %save works again.
1970 * Magic.py: %save works again.
1965
1971
1966 2006-02-15 Ville Vainio <vivainio@gmail.com>
1972 2006-02-15 Ville Vainio <vivainio@gmail.com>
1967
1973
1968 * Magic.py: %Pprint works again
1974 * Magic.py: %Pprint works again
1969
1975
1970 * Extensions/ipy_sane_defaults.py: Provide everything provided
1976 * Extensions/ipy_sane_defaults.py: Provide everything provided
1971 in default ipythonrc, to make it possible to have a completely empty
1977 in default ipythonrc, to make it possible to have a completely empty
1972 ipythonrc (and thus completely rc-file free configuration)
1978 ipythonrc (and thus completely rc-file free configuration)
1973
1979
1974 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1980 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1975
1981
1976 * IPython/hooks.py (editor): quote the call to the editor command,
1982 * IPython/hooks.py (editor): quote the call to the editor command,
1977 to allow commands with spaces in them. Problem noted by watching
1983 to allow commands with spaces in them. Problem noted by watching
1978 Ian Oswald's video about textpad under win32 at
1984 Ian Oswald's video about textpad under win32 at
1979 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1985 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1980
1986
1981 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1987 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1982 describing magics (we haven't used @ for a loong time).
1988 describing magics (we haven't used @ for a loong time).
1983
1989
1984 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1990 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1985 contributed by marienz to close
1991 contributed by marienz to close
1986 http://www.scipy.net/roundup/ipython/issue53.
1992 http://www.scipy.net/roundup/ipython/issue53.
1987
1993
1988 2006-02-10 Ville Vainio <vivainio@gmail.com>
1994 2006-02-10 Ville Vainio <vivainio@gmail.com>
1989
1995
1990 * genutils.py: getoutput now works in win32 too
1996 * genutils.py: getoutput now works in win32 too
1991
1997
1992 * completer.py: alias and magic completion only invoked
1998 * completer.py: alias and magic completion only invoked
1993 at the first "item" in the line, to avoid "cd %store"
1999 at the first "item" in the line, to avoid "cd %store"
1994 nonsense.
2000 nonsense.
1995
2001
1996 2006-02-09 Ville Vainio <vivainio@gmail.com>
2002 2006-02-09 Ville Vainio <vivainio@gmail.com>
1997
2003
1998 * test/*: Added a unit testing framework (finally).
2004 * test/*: Added a unit testing framework (finally).
1999 '%run runtests.py' to run test_*.
2005 '%run runtests.py' to run test_*.
2000
2006
2001 * ipapi.py: Exposed runlines and set_custom_exc
2007 * ipapi.py: Exposed runlines and set_custom_exc
2002
2008
2003 2006-02-07 Ville Vainio <vivainio@gmail.com>
2009 2006-02-07 Ville Vainio <vivainio@gmail.com>
2004
2010
2005 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2011 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2006 instead use "f(1 2)" as before.
2012 instead use "f(1 2)" as before.
2007
2013
2008 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2014 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2009
2015
2010 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2016 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2011 facilities, for demos processed by the IPython input filter
2017 facilities, for demos processed by the IPython input filter
2012 (IPythonDemo), and for running a script one-line-at-a-time as a
2018 (IPythonDemo), and for running a script one-line-at-a-time as a
2013 demo, both for pure Python (LineDemo) and for IPython-processed
2019 demo, both for pure Python (LineDemo) and for IPython-processed
2014 input (IPythonLineDemo). After a request by Dave Kohel, from the
2020 input (IPythonLineDemo). After a request by Dave Kohel, from the
2015 SAGE team.
2021 SAGE team.
2016 (Demo.edit): added an edit() method to the demo objects, to edit
2022 (Demo.edit): added an edit() method to the demo objects, to edit
2017 the in-memory copy of the last executed block.
2023 the in-memory copy of the last executed block.
2018
2024
2019 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2025 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2020 processing to %edit, %macro and %save. These commands can now be
2026 processing to %edit, %macro and %save. These commands can now be
2021 invoked on the unprocessed input as it was typed by the user
2027 invoked on the unprocessed input as it was typed by the user
2022 (without any prefilters applied). After requests by the SAGE team
2028 (without any prefilters applied). After requests by the SAGE team
2023 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2029 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2024
2030
2025 2006-02-01 Ville Vainio <vivainio@gmail.com>
2031 2006-02-01 Ville Vainio <vivainio@gmail.com>
2026
2032
2027 * setup.py, eggsetup.py: easy_install ipython==dev works
2033 * setup.py, eggsetup.py: easy_install ipython==dev works
2028 correctly now (on Linux)
2034 correctly now (on Linux)
2029
2035
2030 * ipy_user_conf,ipmaker: user config changes, removed spurious
2036 * ipy_user_conf,ipmaker: user config changes, removed spurious
2031 warnings
2037 warnings
2032
2038
2033 * iplib: if rc.banner is string, use it as is.
2039 * iplib: if rc.banner is string, use it as is.
2034
2040
2035 * Magic: %pycat accepts a string argument and pages it's contents.
2041 * Magic: %pycat accepts a string argument and pages it's contents.
2036
2042
2037
2043
2038 2006-01-30 Ville Vainio <vivainio@gmail.com>
2044 2006-01-30 Ville Vainio <vivainio@gmail.com>
2039
2045
2040 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2046 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2041 Now %store and bookmarks work through PickleShare, meaning that
2047 Now %store and bookmarks work through PickleShare, meaning that
2042 concurrent access is possible and all ipython sessions see the
2048 concurrent access is possible and all ipython sessions see the
2043 same database situation all the time, instead of snapshot of
2049 same database situation all the time, instead of snapshot of
2044 the situation when the session was started. Hence, %bookmark
2050 the situation when the session was started. Hence, %bookmark
2045 results are immediately accessible from othes sessions. The database
2051 results are immediately accessible from othes sessions. The database
2046 is also available for use by user extensions. See:
2052 is also available for use by user extensions. See:
2047 http://www.python.org/pypi/pickleshare
2053 http://www.python.org/pypi/pickleshare
2048
2054
2049 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2055 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2050
2056
2051 * aliases can now be %store'd
2057 * aliases can now be %store'd
2052
2058
2053 * path.py moved to Extensions so that pickleshare does not need
2059 * path.py moved to Extensions so that pickleshare does not need
2054 IPython-specific import. Extensions added to pythonpath right
2060 IPython-specific import. Extensions added to pythonpath right
2055 at __init__.
2061 at __init__.
2056
2062
2057 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2063 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2058 called with _ip.system and the pre-transformed command string.
2064 called with _ip.system and the pre-transformed command string.
2059
2065
2060 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2066 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2061
2067
2062 * IPython/iplib.py (interact): Fix that we were not catching
2068 * IPython/iplib.py (interact): Fix that we were not catching
2063 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2069 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2064 logic here had to change, but it's fixed now.
2070 logic here had to change, but it's fixed now.
2065
2071
2066 2006-01-29 Ville Vainio <vivainio@gmail.com>
2072 2006-01-29 Ville Vainio <vivainio@gmail.com>
2067
2073
2068 * iplib.py: Try to import pyreadline on Windows.
2074 * iplib.py: Try to import pyreadline on Windows.
2069
2075
2070 2006-01-27 Ville Vainio <vivainio@gmail.com>
2076 2006-01-27 Ville Vainio <vivainio@gmail.com>
2071
2077
2072 * iplib.py: Expose ipapi as _ip in builtin namespace.
2078 * iplib.py: Expose ipapi as _ip in builtin namespace.
2073 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2079 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2074 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2080 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2075 syntax now produce _ip.* variant of the commands.
2081 syntax now produce _ip.* variant of the commands.
2076
2082
2077 * "_ip.options().autoedit_syntax = 2" automatically throws
2083 * "_ip.options().autoedit_syntax = 2" automatically throws
2078 user to editor for syntax error correction without prompting.
2084 user to editor for syntax error correction without prompting.
2079
2085
2080 2006-01-27 Ville Vainio <vivainio@gmail.com>
2086 2006-01-27 Ville Vainio <vivainio@gmail.com>
2081
2087
2082 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2088 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2083 'ipython' at argv[0]) executed through command line.
2089 'ipython' at argv[0]) executed through command line.
2084 NOTE: this DEPRECATES calling ipython with multiple scripts
2090 NOTE: this DEPRECATES calling ipython with multiple scripts
2085 ("ipython a.py b.py c.py")
2091 ("ipython a.py b.py c.py")
2086
2092
2087 * iplib.py, hooks.py: Added configurable input prefilter,
2093 * iplib.py, hooks.py: Added configurable input prefilter,
2088 named 'input_prefilter'. See ext_rescapture.py for example
2094 named 'input_prefilter'. See ext_rescapture.py for example
2089 usage.
2095 usage.
2090
2096
2091 * ext_rescapture.py, Magic.py: Better system command output capture
2097 * ext_rescapture.py, Magic.py: Better system command output capture
2092 through 'var = !ls' (deprecates user-visible %sc). Same notation
2098 through 'var = !ls' (deprecates user-visible %sc). Same notation
2093 applies for magics, 'var = %alias' assigns alias list to var.
2099 applies for magics, 'var = %alias' assigns alias list to var.
2094
2100
2095 * ipapi.py: added meta() for accessing extension-usable data store.
2101 * ipapi.py: added meta() for accessing extension-usable data store.
2096
2102
2097 * iplib.py: added InteractiveShell.getapi(). New magics should be
2103 * iplib.py: added InteractiveShell.getapi(). New magics should be
2098 written doing self.getapi() instead of using the shell directly.
2104 written doing self.getapi() instead of using the shell directly.
2099
2105
2100 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2106 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2101 %store foo >> ~/myfoo.txt to store variables to files (in clean
2107 %store foo >> ~/myfoo.txt to store variables to files (in clean
2102 textual form, not a restorable pickle).
2108 textual form, not a restorable pickle).
2103
2109
2104 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2110 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2105
2111
2106 * usage.py, Magic.py: added %quickref
2112 * usage.py, Magic.py: added %quickref
2107
2113
2108 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2114 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2109
2115
2110 * GetoptErrors when invoking magics etc. with wrong args
2116 * GetoptErrors when invoking magics etc. with wrong args
2111 are now more helpful:
2117 are now more helpful:
2112 GetoptError: option -l not recognized (allowed: "qb" )
2118 GetoptError: option -l not recognized (allowed: "qb" )
2113
2119
2114 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2120 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2115
2121
2116 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2122 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2117 computationally intensive blocks don't appear to stall the demo.
2123 computationally intensive blocks don't appear to stall the demo.
2118
2124
2119 2006-01-24 Ville Vainio <vivainio@gmail.com>
2125 2006-01-24 Ville Vainio <vivainio@gmail.com>
2120
2126
2121 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2127 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2122 value to manipulate resulting history entry.
2128 value to manipulate resulting history entry.
2123
2129
2124 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2130 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2125 to instance methods of IPApi class, to make extending an embedded
2131 to instance methods of IPApi class, to make extending an embedded
2126 IPython feasible. See ext_rehashdir.py for example usage.
2132 IPython feasible. See ext_rehashdir.py for example usage.
2127
2133
2128 * Merged 1071-1076 from branches/0.7.1
2134 * Merged 1071-1076 from branches/0.7.1
2129
2135
2130
2136
2131 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2137 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2132
2138
2133 * tools/release (daystamp): Fix build tools to use the new
2139 * tools/release (daystamp): Fix build tools to use the new
2134 eggsetup.py script to build lightweight eggs.
2140 eggsetup.py script to build lightweight eggs.
2135
2141
2136 * Applied changesets 1062 and 1064 before 0.7.1 release.
2142 * Applied changesets 1062 and 1064 before 0.7.1 release.
2137
2143
2138 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2144 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2139 see the raw input history (without conversions like %ls ->
2145 see the raw input history (without conversions like %ls ->
2140 ipmagic("ls")). After a request from W. Stein, SAGE
2146 ipmagic("ls")). After a request from W. Stein, SAGE
2141 (http://modular.ucsd.edu/sage) developer. This information is
2147 (http://modular.ucsd.edu/sage) developer. This information is
2142 stored in the input_hist_raw attribute of the IPython instance, so
2148 stored in the input_hist_raw attribute of the IPython instance, so
2143 developers can access it if needed (it's an InputList instance).
2149 developers can access it if needed (it's an InputList instance).
2144
2150
2145 * Versionstring = 0.7.2.svn
2151 * Versionstring = 0.7.2.svn
2146
2152
2147 * eggsetup.py: A separate script for constructing eggs, creates
2153 * eggsetup.py: A separate script for constructing eggs, creates
2148 proper launch scripts even on Windows (an .exe file in
2154 proper launch scripts even on Windows (an .exe file in
2149 \python24\scripts).
2155 \python24\scripts).
2150
2156
2151 * ipapi.py: launch_new_instance, launch entry point needed for the
2157 * ipapi.py: launch_new_instance, launch entry point needed for the
2152 egg.
2158 egg.
2153
2159
2154 2006-01-23 Ville Vainio <vivainio@gmail.com>
2160 2006-01-23 Ville Vainio <vivainio@gmail.com>
2155
2161
2156 * Added %cpaste magic for pasting python code
2162 * Added %cpaste magic for pasting python code
2157
2163
2158 2006-01-22 Ville Vainio <vivainio@gmail.com>
2164 2006-01-22 Ville Vainio <vivainio@gmail.com>
2159
2165
2160 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2166 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2161
2167
2162 * Versionstring = 0.7.2.svn
2168 * Versionstring = 0.7.2.svn
2163
2169
2164 * eggsetup.py: A separate script for constructing eggs, creates
2170 * eggsetup.py: A separate script for constructing eggs, creates
2165 proper launch scripts even on Windows (an .exe file in
2171 proper launch scripts even on Windows (an .exe file in
2166 \python24\scripts).
2172 \python24\scripts).
2167
2173
2168 * ipapi.py: launch_new_instance, launch entry point needed for the
2174 * ipapi.py: launch_new_instance, launch entry point needed for the
2169 egg.
2175 egg.
2170
2176
2171 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2177 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2172
2178
2173 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2179 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2174 %pfile foo would print the file for foo even if it was a binary.
2180 %pfile foo would print the file for foo even if it was a binary.
2175 Now, extensions '.so' and '.dll' are skipped.
2181 Now, extensions '.so' and '.dll' are skipped.
2176
2182
2177 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2183 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2178 bug, where macros would fail in all threaded modes. I'm not 100%
2184 bug, where macros would fail in all threaded modes. I'm not 100%
2179 sure, so I'm going to put out an rc instead of making a release
2185 sure, so I'm going to put out an rc instead of making a release
2180 today, and wait for feedback for at least a few days.
2186 today, and wait for feedback for at least a few days.
2181
2187
2182 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2188 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2183 it...) the handling of pasting external code with autoindent on.
2189 it...) the handling of pasting external code with autoindent on.
2184 To get out of a multiline input, the rule will appear for most
2190 To get out of a multiline input, the rule will appear for most
2185 users unchanged: two blank lines or change the indent level
2191 users unchanged: two blank lines or change the indent level
2186 proposed by IPython. But there is a twist now: you can
2192 proposed by IPython. But there is a twist now: you can
2187 add/subtract only *one or two spaces*. If you add/subtract three
2193 add/subtract only *one or two spaces*. If you add/subtract three
2188 or more (unless you completely delete the line), IPython will
2194 or more (unless you completely delete the line), IPython will
2189 accept that line, and you'll need to enter a second one of pure
2195 accept that line, and you'll need to enter a second one of pure
2190 whitespace. I know it sounds complicated, but I can't find a
2196 whitespace. I know it sounds complicated, but I can't find a
2191 different solution that covers all the cases, with the right
2197 different solution that covers all the cases, with the right
2192 heuristics. Hopefully in actual use, nobody will really notice
2198 heuristics. Hopefully in actual use, nobody will really notice
2193 all these strange rules and things will 'just work'.
2199 all these strange rules and things will 'just work'.
2194
2200
2195 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2201 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2196
2202
2197 * IPython/iplib.py (interact): catch exceptions which can be
2203 * IPython/iplib.py (interact): catch exceptions which can be
2198 triggered asynchronously by signal handlers. Thanks to an
2204 triggered asynchronously by signal handlers. Thanks to an
2199 automatic crash report, submitted by Colin Kingsley
2205 automatic crash report, submitted by Colin Kingsley
2200 <tercel-AT-gentoo.org>.
2206 <tercel-AT-gentoo.org>.
2201
2207
2202 2006-01-20 Ville Vainio <vivainio@gmail.com>
2208 2006-01-20 Ville Vainio <vivainio@gmail.com>
2203
2209
2204 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2210 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2205 (%rehashdir, very useful, try it out) of how to extend ipython
2211 (%rehashdir, very useful, try it out) of how to extend ipython
2206 with new magics. Also added Extensions dir to pythonpath to make
2212 with new magics. Also added Extensions dir to pythonpath to make
2207 importing extensions easy.
2213 importing extensions easy.
2208
2214
2209 * %store now complains when trying to store interactively declared
2215 * %store now complains when trying to store interactively declared
2210 classes / instances of those classes.
2216 classes / instances of those classes.
2211
2217
2212 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2218 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2213 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2219 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2214 if they exist, and ipy_user_conf.py with some defaults is created for
2220 if they exist, and ipy_user_conf.py with some defaults is created for
2215 the user.
2221 the user.
2216
2222
2217 * Startup rehashing done by the config file, not InterpreterExec.
2223 * Startup rehashing done by the config file, not InterpreterExec.
2218 This means system commands are available even without selecting the
2224 This means system commands are available even without selecting the
2219 pysh profile. It's the sensible default after all.
2225 pysh profile. It's the sensible default after all.
2220
2226
2221 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2227 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2222
2228
2223 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2229 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2224 multiline code with autoindent on working. But I am really not
2230 multiline code with autoindent on working. But I am really not
2225 sure, so this needs more testing. Will commit a debug-enabled
2231 sure, so this needs more testing. Will commit a debug-enabled
2226 version for now, while I test it some more, so that Ville and
2232 version for now, while I test it some more, so that Ville and
2227 others may also catch any problems. Also made
2233 others may also catch any problems. Also made
2228 self.indent_current_str() a method, to ensure that there's no
2234 self.indent_current_str() a method, to ensure that there's no
2229 chance of the indent space count and the corresponding string
2235 chance of the indent space count and the corresponding string
2230 falling out of sync. All code needing the string should just call
2236 falling out of sync. All code needing the string should just call
2231 the method.
2237 the method.
2232
2238
2233 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2239 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2234
2240
2235 * IPython/Magic.py (magic_edit): fix check for when users don't
2241 * IPython/Magic.py (magic_edit): fix check for when users don't
2236 save their output files, the try/except was in the wrong section.
2242 save their output files, the try/except was in the wrong section.
2237
2243
2238 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2244 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2239
2245
2240 * IPython/Magic.py (magic_run): fix __file__ global missing from
2246 * IPython/Magic.py (magic_run): fix __file__ global missing from
2241 script's namespace when executed via %run. After a report by
2247 script's namespace when executed via %run. After a report by
2242 Vivian.
2248 Vivian.
2243
2249
2244 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2250 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2245 when using python 2.4. The parent constructor changed in 2.4, and
2251 when using python 2.4. The parent constructor changed in 2.4, and
2246 we need to track it directly (we can't call it, as it messes up
2252 we need to track it directly (we can't call it, as it messes up
2247 readline and tab-completion inside our pdb would stop working).
2253 readline and tab-completion inside our pdb would stop working).
2248 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2254 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2249
2255
2250 2006-01-16 Ville Vainio <vivainio@gmail.com>
2256 2006-01-16 Ville Vainio <vivainio@gmail.com>
2251
2257
2252 * Ipython/magic.py: Reverted back to old %edit functionality
2258 * Ipython/magic.py: Reverted back to old %edit functionality
2253 that returns file contents on exit.
2259 that returns file contents on exit.
2254
2260
2255 * IPython/path.py: Added Jason Orendorff's "path" module to
2261 * IPython/path.py: Added Jason Orendorff's "path" module to
2256 IPython tree, http://www.jorendorff.com/articles/python/path/.
2262 IPython tree, http://www.jorendorff.com/articles/python/path/.
2257 You can get path objects conveniently through %sc, and !!, e.g.:
2263 You can get path objects conveniently through %sc, and !!, e.g.:
2258 sc files=ls
2264 sc files=ls
2259 for p in files.paths: # or files.p
2265 for p in files.paths: # or files.p
2260 print p,p.mtime
2266 print p,p.mtime
2261
2267
2262 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2268 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2263 now work again without considering the exclusion regexp -
2269 now work again without considering the exclusion regexp -
2264 hence, things like ',foo my/path' turn to 'foo("my/path")'
2270 hence, things like ',foo my/path' turn to 'foo("my/path")'
2265 instead of syntax error.
2271 instead of syntax error.
2266
2272
2267
2273
2268 2006-01-14 Ville Vainio <vivainio@gmail.com>
2274 2006-01-14 Ville Vainio <vivainio@gmail.com>
2269
2275
2270 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2276 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2271 ipapi decorators for python 2.4 users, options() provides access to rc
2277 ipapi decorators for python 2.4 users, options() provides access to rc
2272 data.
2278 data.
2273
2279
2274 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2280 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2275 as path separators (even on Linux ;-). Space character after
2281 as path separators (even on Linux ;-). Space character after
2276 backslash (as yielded by tab completer) is still space;
2282 backslash (as yielded by tab completer) is still space;
2277 "%cd long\ name" works as expected.
2283 "%cd long\ name" works as expected.
2278
2284
2279 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2285 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2280 as "chain of command", with priority. API stays the same,
2286 as "chain of command", with priority. API stays the same,
2281 TryNext exception raised by a hook function signals that
2287 TryNext exception raised by a hook function signals that
2282 current hook failed and next hook should try handling it, as
2288 current hook failed and next hook should try handling it, as
2283 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2289 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2284 requested configurable display hook, which is now implemented.
2290 requested configurable display hook, which is now implemented.
2285
2291
2286 2006-01-13 Ville Vainio <vivainio@gmail.com>
2292 2006-01-13 Ville Vainio <vivainio@gmail.com>
2287
2293
2288 * IPython/platutils*.py: platform specific utility functions,
2294 * IPython/platutils*.py: platform specific utility functions,
2289 so far only set_term_title is implemented (change terminal
2295 so far only set_term_title is implemented (change terminal
2290 label in windowing systems). %cd now changes the title to
2296 label in windowing systems). %cd now changes the title to
2291 current dir.
2297 current dir.
2292
2298
2293 * IPython/Release.py: Added myself to "authors" list,
2299 * IPython/Release.py: Added myself to "authors" list,
2294 had to create new files.
2300 had to create new files.
2295
2301
2296 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2302 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2297 shell escape; not a known bug but had potential to be one in the
2303 shell escape; not a known bug but had potential to be one in the
2298 future.
2304 future.
2299
2305
2300 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2306 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2301 extension API for IPython! See the module for usage example. Fix
2307 extension API for IPython! See the module for usage example. Fix
2302 OInspect for docstring-less magic functions.
2308 OInspect for docstring-less magic functions.
2303
2309
2304
2310
2305 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2311 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2306
2312
2307 * IPython/iplib.py (raw_input): temporarily deactivate all
2313 * IPython/iplib.py (raw_input): temporarily deactivate all
2308 attempts at allowing pasting of code with autoindent on. It
2314 attempts at allowing pasting of code with autoindent on. It
2309 introduced bugs (reported by Prabhu) and I can't seem to find a
2315 introduced bugs (reported by Prabhu) and I can't seem to find a
2310 robust combination which works in all cases. Will have to revisit
2316 robust combination which works in all cases. Will have to revisit
2311 later.
2317 later.
2312
2318
2313 * IPython/genutils.py: remove isspace() function. We've dropped
2319 * IPython/genutils.py: remove isspace() function. We've dropped
2314 2.2 compatibility, so it's OK to use the string method.
2320 2.2 compatibility, so it's OK to use the string method.
2315
2321
2316 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2322 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2317
2323
2318 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2324 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2319 matching what NOT to autocall on, to include all python binary
2325 matching what NOT to autocall on, to include all python binary
2320 operators (including things like 'and', 'or', 'is' and 'in').
2326 operators (including things like 'and', 'or', 'is' and 'in').
2321 Prompted by a bug report on 'foo & bar', but I realized we had
2327 Prompted by a bug report on 'foo & bar', but I realized we had
2322 many more potential bug cases with other operators. The regexp is
2328 many more potential bug cases with other operators. The regexp is
2323 self.re_exclude_auto, it's fairly commented.
2329 self.re_exclude_auto, it's fairly commented.
2324
2330
2325 2006-01-12 Ville Vainio <vivainio@gmail.com>
2331 2006-01-12 Ville Vainio <vivainio@gmail.com>
2326
2332
2327 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2333 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2328 Prettified and hardened string/backslash quoting with ipsystem(),
2334 Prettified and hardened string/backslash quoting with ipsystem(),
2329 ipalias() and ipmagic(). Now even \ characters are passed to
2335 ipalias() and ipmagic(). Now even \ characters are passed to
2330 %magics, !shell escapes and aliases exactly as they are in the
2336 %magics, !shell escapes and aliases exactly as they are in the
2331 ipython command line. Should improve backslash experience,
2337 ipython command line. Should improve backslash experience,
2332 particularly in Windows (path delimiter for some commands that
2338 particularly in Windows (path delimiter for some commands that
2333 won't understand '/'), but Unix benefits as well (regexps). %cd
2339 won't understand '/'), but Unix benefits as well (regexps). %cd
2334 magic still doesn't support backslash path delimiters, though. Also
2340 magic still doesn't support backslash path delimiters, though. Also
2335 deleted all pretense of supporting multiline command strings in
2341 deleted all pretense of supporting multiline command strings in
2336 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2342 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2337
2343
2338 * doc/build_doc_instructions.txt added. Documentation on how to
2344 * doc/build_doc_instructions.txt added. Documentation on how to
2339 use doc/update_manual.py, added yesterday. Both files contributed
2345 use doc/update_manual.py, added yesterday. Both files contributed
2340 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2346 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2341 doc/*.sh for deprecation at a later date.
2347 doc/*.sh for deprecation at a later date.
2342
2348
2343 * /ipython.py Added ipython.py to root directory for
2349 * /ipython.py Added ipython.py to root directory for
2344 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2350 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2345 ipython.py) and development convenience (no need to keep doing
2351 ipython.py) and development convenience (no need to keep doing
2346 "setup.py install" between changes).
2352 "setup.py install" between changes).
2347
2353
2348 * Made ! and !! shell escapes work (again) in multiline expressions:
2354 * Made ! and !! shell escapes work (again) in multiline expressions:
2349 if 1:
2355 if 1:
2350 !ls
2356 !ls
2351 !!ls
2357 !!ls
2352
2358
2353 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2359 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2354
2360
2355 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2361 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2356 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2362 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2357 module in case-insensitive installation. Was causing crashes
2363 module in case-insensitive installation. Was causing crashes
2358 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2364 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2359
2365
2360 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2366 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2361 <marienz-AT-gentoo.org>, closes
2367 <marienz-AT-gentoo.org>, closes
2362 http://www.scipy.net/roundup/ipython/issue51.
2368 http://www.scipy.net/roundup/ipython/issue51.
2363
2369
2364 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2370 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2365
2371
2366 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2372 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2367 problem of excessive CPU usage under *nix and keyboard lag under
2373 problem of excessive CPU usage under *nix and keyboard lag under
2368 win32.
2374 win32.
2369
2375
2370 2006-01-10 *** Released version 0.7.0
2376 2006-01-10 *** Released version 0.7.0
2371
2377
2372 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2378 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2373
2379
2374 * IPython/Release.py (revision): tag version number to 0.7.0,
2380 * IPython/Release.py (revision): tag version number to 0.7.0,
2375 ready for release.
2381 ready for release.
2376
2382
2377 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2383 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2378 it informs the user of the name of the temp. file used. This can
2384 it informs the user of the name of the temp. file used. This can
2379 help if you decide later to reuse that same file, so you know
2385 help if you decide later to reuse that same file, so you know
2380 where to copy the info from.
2386 where to copy the info from.
2381
2387
2382 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2388 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2383
2389
2384 * setup_bdist_egg.py: little script to build an egg. Added
2390 * setup_bdist_egg.py: little script to build an egg. Added
2385 support in the release tools as well.
2391 support in the release tools as well.
2386
2392
2387 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2393 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2388
2394
2389 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2395 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2390 version selection (new -wxversion command line and ipythonrc
2396 version selection (new -wxversion command line and ipythonrc
2391 parameter). Patch contributed by Arnd Baecker
2397 parameter). Patch contributed by Arnd Baecker
2392 <arnd.baecker-AT-web.de>.
2398 <arnd.baecker-AT-web.de>.
2393
2399
2394 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2400 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2395 embedded instances, for variables defined at the interactive
2401 embedded instances, for variables defined at the interactive
2396 prompt of the embedded ipython. Reported by Arnd.
2402 prompt of the embedded ipython. Reported by Arnd.
2397
2403
2398 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2404 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2399 it can be used as a (stateful) toggle, or with a direct parameter.
2405 it can be used as a (stateful) toggle, or with a direct parameter.
2400
2406
2401 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2407 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2402 could be triggered in certain cases and cause the traceback
2408 could be triggered in certain cases and cause the traceback
2403 printer not to work.
2409 printer not to work.
2404
2410
2405 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2411 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2406
2412
2407 * IPython/iplib.py (_should_recompile): Small fix, closes
2413 * IPython/iplib.py (_should_recompile): Small fix, closes
2408 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2414 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2409
2415
2410 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2416 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2411
2417
2412 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2418 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2413 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2419 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2414 Moad for help with tracking it down.
2420 Moad for help with tracking it down.
2415
2421
2416 * IPython/iplib.py (handle_auto): fix autocall handling for
2422 * IPython/iplib.py (handle_auto): fix autocall handling for
2417 objects which support BOTH __getitem__ and __call__ (so that f [x]
2423 objects which support BOTH __getitem__ and __call__ (so that f [x]
2418 is left alone, instead of becoming f([x]) automatically).
2424 is left alone, instead of becoming f([x]) automatically).
2419
2425
2420 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2426 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2421 Ville's patch.
2427 Ville's patch.
2422
2428
2423 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2429 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2424
2430
2425 * IPython/iplib.py (handle_auto): changed autocall semantics to
2431 * IPython/iplib.py (handle_auto): changed autocall semantics to
2426 include 'smart' mode, where the autocall transformation is NOT
2432 include 'smart' mode, where the autocall transformation is NOT
2427 applied if there are no arguments on the line. This allows you to
2433 applied if there are no arguments on the line. This allows you to
2428 just type 'foo' if foo is a callable to see its internal form,
2434 just type 'foo' if foo is a callable to see its internal form,
2429 instead of having it called with no arguments (typically a
2435 instead of having it called with no arguments (typically a
2430 mistake). The old 'full' autocall still exists: for that, you
2436 mistake). The old 'full' autocall still exists: for that, you
2431 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2437 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2432
2438
2433 * IPython/completer.py (Completer.attr_matches): add
2439 * IPython/completer.py (Completer.attr_matches): add
2434 tab-completion support for Enthoughts' traits. After a report by
2440 tab-completion support for Enthoughts' traits. After a report by
2435 Arnd and a patch by Prabhu.
2441 Arnd and a patch by Prabhu.
2436
2442
2437 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2443 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2438
2444
2439 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2445 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2440 Schmolck's patch to fix inspect.getinnerframes().
2446 Schmolck's patch to fix inspect.getinnerframes().
2441
2447
2442 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2448 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2443 for embedded instances, regarding handling of namespaces and items
2449 for embedded instances, regarding handling of namespaces and items
2444 added to the __builtin__ one. Multiple embedded instances and
2450 added to the __builtin__ one. Multiple embedded instances and
2445 recursive embeddings should work better now (though I'm not sure
2451 recursive embeddings should work better now (though I'm not sure
2446 I've got all the corner cases fixed, that code is a bit of a brain
2452 I've got all the corner cases fixed, that code is a bit of a brain
2447 twister).
2453 twister).
2448
2454
2449 * IPython/Magic.py (magic_edit): added support to edit in-memory
2455 * IPython/Magic.py (magic_edit): added support to edit in-memory
2450 macros (automatically creates the necessary temp files). %edit
2456 macros (automatically creates the necessary temp files). %edit
2451 also doesn't return the file contents anymore, it's just noise.
2457 also doesn't return the file contents anymore, it's just noise.
2452
2458
2453 * IPython/completer.py (Completer.attr_matches): revert change to
2459 * IPython/completer.py (Completer.attr_matches): revert change to
2454 complete only on attributes listed in __all__. I realized it
2460 complete only on attributes listed in __all__. I realized it
2455 cripples the tab-completion system as a tool for exploring the
2461 cripples the tab-completion system as a tool for exploring the
2456 internals of unknown libraries (it renders any non-__all__
2462 internals of unknown libraries (it renders any non-__all__
2457 attribute off-limits). I got bit by this when trying to see
2463 attribute off-limits). I got bit by this when trying to see
2458 something inside the dis module.
2464 something inside the dis module.
2459
2465
2460 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2466 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2461
2467
2462 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2468 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2463 namespace for users and extension writers to hold data in. This
2469 namespace for users and extension writers to hold data in. This
2464 follows the discussion in
2470 follows the discussion in
2465 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2471 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2466
2472
2467 * IPython/completer.py (IPCompleter.complete): small patch to help
2473 * IPython/completer.py (IPCompleter.complete): small patch to help
2468 tab-completion under Emacs, after a suggestion by John Barnard
2474 tab-completion under Emacs, after a suggestion by John Barnard
2469 <barnarj-AT-ccf.org>.
2475 <barnarj-AT-ccf.org>.
2470
2476
2471 * IPython/Magic.py (Magic.extract_input_slices): added support for
2477 * IPython/Magic.py (Magic.extract_input_slices): added support for
2472 the slice notation in magics to use N-M to represent numbers N...M
2478 the slice notation in magics to use N-M to represent numbers N...M
2473 (closed endpoints). This is used by %macro and %save.
2479 (closed endpoints). This is used by %macro and %save.
2474
2480
2475 * IPython/completer.py (Completer.attr_matches): for modules which
2481 * IPython/completer.py (Completer.attr_matches): for modules which
2476 define __all__, complete only on those. After a patch by Jeffrey
2482 define __all__, complete only on those. After a patch by Jeffrey
2477 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2483 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2478 speed up this routine.
2484 speed up this routine.
2479
2485
2480 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2486 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2481 don't know if this is the end of it, but the behavior now is
2487 don't know if this is the end of it, but the behavior now is
2482 certainly much more correct. Note that coupled with macros,
2488 certainly much more correct. Note that coupled with macros,
2483 slightly surprising (at first) behavior may occur: a macro will in
2489 slightly surprising (at first) behavior may occur: a macro will in
2484 general expand to multiple lines of input, so upon exiting, the
2490 general expand to multiple lines of input, so upon exiting, the
2485 in/out counters will both be bumped by the corresponding amount
2491 in/out counters will both be bumped by the corresponding amount
2486 (as if the macro's contents had been typed interactively). Typing
2492 (as if the macro's contents had been typed interactively). Typing
2487 %hist will reveal the intermediate (silently processed) lines.
2493 %hist will reveal the intermediate (silently processed) lines.
2488
2494
2489 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2495 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2490 pickle to fail (%run was overwriting __main__ and not restoring
2496 pickle to fail (%run was overwriting __main__ and not restoring
2491 it, but pickle relies on __main__ to operate).
2497 it, but pickle relies on __main__ to operate).
2492
2498
2493 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2499 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2494 using properties, but forgot to make the main InteractiveShell
2500 using properties, but forgot to make the main InteractiveShell
2495 class a new-style class. Properties fail silently, and
2501 class a new-style class. Properties fail silently, and
2496 mysteriously, with old-style class (getters work, but
2502 mysteriously, with old-style class (getters work, but
2497 setters don't do anything).
2503 setters don't do anything).
2498
2504
2499 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2505 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2500
2506
2501 * IPython/Magic.py (magic_history): fix history reporting bug (I
2507 * IPython/Magic.py (magic_history): fix history reporting bug (I
2502 know some nasties are still there, I just can't seem to find a
2508 know some nasties are still there, I just can't seem to find a
2503 reproducible test case to track them down; the input history is
2509 reproducible test case to track them down; the input history is
2504 falling out of sync...)
2510 falling out of sync...)
2505
2511
2506 * IPython/iplib.py (handle_shell_escape): fix bug where both
2512 * IPython/iplib.py (handle_shell_escape): fix bug where both
2507 aliases and system accesses where broken for indented code (such
2513 aliases and system accesses where broken for indented code (such
2508 as loops).
2514 as loops).
2509
2515
2510 * IPython/genutils.py (shell): fix small but critical bug for
2516 * IPython/genutils.py (shell): fix small but critical bug for
2511 win32 system access.
2517 win32 system access.
2512
2518
2513 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2519 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2514
2520
2515 * IPython/iplib.py (showtraceback): remove use of the
2521 * IPython/iplib.py (showtraceback): remove use of the
2516 sys.last_{type/value/traceback} structures, which are non
2522 sys.last_{type/value/traceback} structures, which are non
2517 thread-safe.
2523 thread-safe.
2518 (_prefilter): change control flow to ensure that we NEVER
2524 (_prefilter): change control flow to ensure that we NEVER
2519 introspect objects when autocall is off. This will guarantee that
2525 introspect objects when autocall is off. This will guarantee that
2520 having an input line of the form 'x.y', where access to attribute
2526 having an input line of the form 'x.y', where access to attribute
2521 'y' has side effects, doesn't trigger the side effect TWICE. It
2527 'y' has side effects, doesn't trigger the side effect TWICE. It
2522 is important to note that, with autocall on, these side effects
2528 is important to note that, with autocall on, these side effects
2523 can still happen.
2529 can still happen.
2524 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2530 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2525 trio. IPython offers these three kinds of special calls which are
2531 trio. IPython offers these three kinds of special calls which are
2526 not python code, and it's a good thing to have their call method
2532 not python code, and it's a good thing to have their call method
2527 be accessible as pure python functions (not just special syntax at
2533 be accessible as pure python functions (not just special syntax at
2528 the command line). It gives us a better internal implementation
2534 the command line). It gives us a better internal implementation
2529 structure, as well as exposing these for user scripting more
2535 structure, as well as exposing these for user scripting more
2530 cleanly.
2536 cleanly.
2531
2537
2532 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2538 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2533 file. Now that they'll be more likely to be used with the
2539 file. Now that they'll be more likely to be used with the
2534 persistance system (%store), I want to make sure their module path
2540 persistance system (%store), I want to make sure their module path
2535 doesn't change in the future, so that we don't break things for
2541 doesn't change in the future, so that we don't break things for
2536 users' persisted data.
2542 users' persisted data.
2537
2543
2538 * IPython/iplib.py (autoindent_update): move indentation
2544 * IPython/iplib.py (autoindent_update): move indentation
2539 management into the _text_ processing loop, not the keyboard
2545 management into the _text_ processing loop, not the keyboard
2540 interactive one. This is necessary to correctly process non-typed
2546 interactive one. This is necessary to correctly process non-typed
2541 multiline input (such as macros).
2547 multiline input (such as macros).
2542
2548
2543 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2549 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2544 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2550 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2545 which was producing problems in the resulting manual.
2551 which was producing problems in the resulting manual.
2546 (magic_whos): improve reporting of instances (show their class,
2552 (magic_whos): improve reporting of instances (show their class,
2547 instead of simply printing 'instance' which isn't terribly
2553 instead of simply printing 'instance' which isn't terribly
2548 informative).
2554 informative).
2549
2555
2550 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2556 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2551 (minor mods) to support network shares under win32.
2557 (minor mods) to support network shares under win32.
2552
2558
2553 * IPython/winconsole.py (get_console_size): add new winconsole
2559 * IPython/winconsole.py (get_console_size): add new winconsole
2554 module and fixes to page_dumb() to improve its behavior under
2560 module and fixes to page_dumb() to improve its behavior under
2555 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2561 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2556
2562
2557 * IPython/Magic.py (Macro): simplified Macro class to just
2563 * IPython/Magic.py (Macro): simplified Macro class to just
2558 subclass list. We've had only 2.2 compatibility for a very long
2564 subclass list. We've had only 2.2 compatibility for a very long
2559 time, yet I was still avoiding subclassing the builtin types. No
2565 time, yet I was still avoiding subclassing the builtin types. No
2560 more (I'm also starting to use properties, though I won't shift to
2566 more (I'm also starting to use properties, though I won't shift to
2561 2.3-specific features quite yet).
2567 2.3-specific features quite yet).
2562 (magic_store): added Ville's patch for lightweight variable
2568 (magic_store): added Ville's patch for lightweight variable
2563 persistence, after a request on the user list by Matt Wilkie
2569 persistence, after a request on the user list by Matt Wilkie
2564 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2570 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2565 details.
2571 details.
2566
2572
2567 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2573 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2568 changed the default logfile name from 'ipython.log' to
2574 changed the default logfile name from 'ipython.log' to
2569 'ipython_log.py'. These logs are real python files, and now that
2575 'ipython_log.py'. These logs are real python files, and now that
2570 we have much better multiline support, people are more likely to
2576 we have much better multiline support, people are more likely to
2571 want to use them as such. Might as well name them correctly.
2577 want to use them as such. Might as well name them correctly.
2572
2578
2573 * IPython/Magic.py: substantial cleanup. While we can't stop
2579 * IPython/Magic.py: substantial cleanup. While we can't stop
2574 using magics as mixins, due to the existing customizations 'out
2580 using magics as mixins, due to the existing customizations 'out
2575 there' which rely on the mixin naming conventions, at least I
2581 there' which rely on the mixin naming conventions, at least I
2576 cleaned out all cross-class name usage. So once we are OK with
2582 cleaned out all cross-class name usage. So once we are OK with
2577 breaking compatibility, the two systems can be separated.
2583 breaking compatibility, the two systems can be separated.
2578
2584
2579 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2585 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2580 anymore, and the class is a fair bit less hideous as well. New
2586 anymore, and the class is a fair bit less hideous as well. New
2581 features were also introduced: timestamping of input, and logging
2587 features were also introduced: timestamping of input, and logging
2582 of output results. These are user-visible with the -t and -o
2588 of output results. These are user-visible with the -t and -o
2583 options to %logstart. Closes
2589 options to %logstart. Closes
2584 http://www.scipy.net/roundup/ipython/issue11 and a request by
2590 http://www.scipy.net/roundup/ipython/issue11 and a request by
2585 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2591 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2586
2592
2587 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2593 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2588
2594
2589 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2595 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2590 better handle backslashes in paths. See the thread 'More Windows
2596 better handle backslashes in paths. See the thread 'More Windows
2591 questions part 2 - \/ characters revisited' on the iypthon user
2597 questions part 2 - \/ characters revisited' on the iypthon user
2592 list:
2598 list:
2593 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2599 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2594
2600
2595 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2601 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2596
2602
2597 (InteractiveShell.__init__): change threaded shells to not use the
2603 (InteractiveShell.__init__): change threaded shells to not use the
2598 ipython crash handler. This was causing more problems than not,
2604 ipython crash handler. This was causing more problems than not,
2599 as exceptions in the main thread (GUI code, typically) would
2605 as exceptions in the main thread (GUI code, typically) would
2600 always show up as a 'crash', when they really weren't.
2606 always show up as a 'crash', when they really weren't.
2601
2607
2602 The colors and exception mode commands (%colors/%xmode) have been
2608 The colors and exception mode commands (%colors/%xmode) have been
2603 synchronized to also take this into account, so users can get
2609 synchronized to also take this into account, so users can get
2604 verbose exceptions for their threaded code as well. I also added
2610 verbose exceptions for their threaded code as well. I also added
2605 support for activating pdb inside this exception handler as well,
2611 support for activating pdb inside this exception handler as well,
2606 so now GUI authors can use IPython's enhanced pdb at runtime.
2612 so now GUI authors can use IPython's enhanced pdb at runtime.
2607
2613
2608 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
2614 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
2609 true by default, and add it to the shipped ipythonrc file. Since
2615 true by default, and add it to the shipped ipythonrc file. Since
2610 this asks the user before proceeding, I think it's OK to make it
2616 this asks the user before proceeding, I think it's OK to make it
2611 true by default.
2617 true by default.
2612
2618
2613 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
2619 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
2614 of the previous special-casing of input in the eval loop. I think
2620 of the previous special-casing of input in the eval loop. I think
2615 this is cleaner, as they really are commands and shouldn't have
2621 this is cleaner, as they really are commands and shouldn't have
2616 a special role in the middle of the core code.
2622 a special role in the middle of the core code.
2617
2623
2618 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
2624 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
2619
2625
2620 * IPython/iplib.py (edit_syntax_error): added support for
2626 * IPython/iplib.py (edit_syntax_error): added support for
2621 automatically reopening the editor if the file had a syntax error
2627 automatically reopening the editor if the file had a syntax error
2622 in it. Thanks to scottt who provided the patch at:
2628 in it. Thanks to scottt who provided the patch at:
2623 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
2629 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
2624 version committed).
2630 version committed).
2625
2631
2626 * IPython/iplib.py (handle_normal): add suport for multi-line
2632 * IPython/iplib.py (handle_normal): add suport for multi-line
2627 input with emtpy lines. This fixes
2633 input with emtpy lines. This fixes
2628 http://www.scipy.net/roundup/ipython/issue43 and a similar
2634 http://www.scipy.net/roundup/ipython/issue43 and a similar
2629 discussion on the user list.
2635 discussion on the user list.
2630
2636
2631 WARNING: a behavior change is necessarily introduced to support
2637 WARNING: a behavior change is necessarily introduced to support
2632 blank lines: now a single blank line with whitespace does NOT
2638 blank lines: now a single blank line with whitespace does NOT
2633 break the input loop, which means that when autoindent is on, by
2639 break the input loop, which means that when autoindent is on, by
2634 default hitting return on the next (indented) line does NOT exit.
2640 default hitting return on the next (indented) line does NOT exit.
2635
2641
2636 Instead, to exit a multiline input you can either have:
2642 Instead, to exit a multiline input you can either have:
2637
2643
2638 - TWO whitespace lines (just hit return again), or
2644 - TWO whitespace lines (just hit return again), or
2639 - a single whitespace line of a different length than provided
2645 - a single whitespace line of a different length than provided
2640 by the autoindent (add or remove a space).
2646 by the autoindent (add or remove a space).
2641
2647
2642 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
2648 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
2643 module to better organize all readline-related functionality.
2649 module to better organize all readline-related functionality.
2644 I've deleted FlexCompleter and put all completion clases here.
2650 I've deleted FlexCompleter and put all completion clases here.
2645
2651
2646 * IPython/iplib.py (raw_input): improve indentation management.
2652 * IPython/iplib.py (raw_input): improve indentation management.
2647 It is now possible to paste indented code with autoindent on, and
2653 It is now possible to paste indented code with autoindent on, and
2648 the code is interpreted correctly (though it still looks bad on
2654 the code is interpreted correctly (though it still looks bad on
2649 screen, due to the line-oriented nature of ipython).
2655 screen, due to the line-oriented nature of ipython).
2650 (MagicCompleter.complete): change behavior so that a TAB key on an
2656 (MagicCompleter.complete): change behavior so that a TAB key on an
2651 otherwise empty line actually inserts a tab, instead of completing
2657 otherwise empty line actually inserts a tab, instead of completing
2652 on the entire global namespace. This makes it easier to use the
2658 on the entire global namespace. This makes it easier to use the
2653 TAB key for indentation. After a request by Hans Meine
2659 TAB key for indentation. After a request by Hans Meine
2654 <hans_meine-AT-gmx.net>
2660 <hans_meine-AT-gmx.net>
2655 (_prefilter): add support so that typing plain 'exit' or 'quit'
2661 (_prefilter): add support so that typing plain 'exit' or 'quit'
2656 does a sensible thing. Originally I tried to deviate as little as
2662 does a sensible thing. Originally I tried to deviate as little as
2657 possible from the default python behavior, but even that one may
2663 possible from the default python behavior, but even that one may
2658 change in this direction (thread on python-dev to that effect).
2664 change in this direction (thread on python-dev to that effect).
2659 Regardless, ipython should do the right thing even if CPython's
2665 Regardless, ipython should do the right thing even if CPython's
2660 '>>>' prompt doesn't.
2666 '>>>' prompt doesn't.
2661 (InteractiveShell): removed subclassing code.InteractiveConsole
2667 (InteractiveShell): removed subclassing code.InteractiveConsole
2662 class. By now we'd overridden just about all of its methods: I've
2668 class. By now we'd overridden just about all of its methods: I've
2663 copied the remaining two over, and now ipython is a standalone
2669 copied the remaining two over, and now ipython is a standalone
2664 class. This will provide a clearer picture for the chainsaw
2670 class. This will provide a clearer picture for the chainsaw
2665 branch refactoring.
2671 branch refactoring.
2666
2672
2667 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2673 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2668
2674
2669 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2675 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2670 failures for objects which break when dir() is called on them.
2676 failures for objects which break when dir() is called on them.
2671
2677
2672 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2678 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2673 distinct local and global namespaces in the completer API. This
2679 distinct local and global namespaces in the completer API. This
2674 change allows us to properly handle completion with distinct
2680 change allows us to properly handle completion with distinct
2675 scopes, including in embedded instances (this had never really
2681 scopes, including in embedded instances (this had never really
2676 worked correctly).
2682 worked correctly).
2677
2683
2678 Note: this introduces a change in the constructor for
2684 Note: this introduces a change in the constructor for
2679 MagicCompleter, as a new global_namespace parameter is now the
2685 MagicCompleter, as a new global_namespace parameter is now the
2680 second argument (the others were bumped one position).
2686 second argument (the others were bumped one position).
2681
2687
2682 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2688 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2683
2689
2684 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2690 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2685 embedded instances (which can be done now thanks to Vivian's
2691 embedded instances (which can be done now thanks to Vivian's
2686 frame-handling fixes for pdb).
2692 frame-handling fixes for pdb).
2687 (InteractiveShell.__init__): Fix namespace handling problem in
2693 (InteractiveShell.__init__): Fix namespace handling problem in
2688 embedded instances. We were overwriting __main__ unconditionally,
2694 embedded instances. We were overwriting __main__ unconditionally,
2689 and this should only be done for 'full' (non-embedded) IPython;
2695 and this should only be done for 'full' (non-embedded) IPython;
2690 embedded instances must respect the caller's __main__. Thanks to
2696 embedded instances must respect the caller's __main__. Thanks to
2691 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2697 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2692
2698
2693 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2699 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2694
2700
2695 * setup.py: added download_url to setup(). This registers the
2701 * setup.py: added download_url to setup(). This registers the
2696 download address at PyPI, which is not only useful to humans
2702 download address at PyPI, which is not only useful to humans
2697 browsing the site, but is also picked up by setuptools (the Eggs
2703 browsing the site, but is also picked up by setuptools (the Eggs
2698 machinery). Thanks to Ville and R. Kern for the info/discussion
2704 machinery). Thanks to Ville and R. Kern for the info/discussion
2699 on this.
2705 on this.
2700
2706
2701 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2707 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2702
2708
2703 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2709 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2704 This brings a lot of nice functionality to the pdb mode, which now
2710 This brings a lot of nice functionality to the pdb mode, which now
2705 has tab-completion, syntax highlighting, and better stack handling
2711 has tab-completion, syntax highlighting, and better stack handling
2706 than before. Many thanks to Vivian De Smedt
2712 than before. Many thanks to Vivian De Smedt
2707 <vivian-AT-vdesmedt.com> for the original patches.
2713 <vivian-AT-vdesmedt.com> for the original patches.
2708
2714
2709 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2715 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2710
2716
2711 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2717 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2712 sequence to consistently accept the banner argument. The
2718 sequence to consistently accept the banner argument. The
2713 inconsistency was tripping SAGE, thanks to Gary Zablackis
2719 inconsistency was tripping SAGE, thanks to Gary Zablackis
2714 <gzabl-AT-yahoo.com> for the report.
2720 <gzabl-AT-yahoo.com> for the report.
2715
2721
2716 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2722 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2717
2723
2718 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2724 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2719 Fix bug where a naked 'alias' call in the ipythonrc file would
2725 Fix bug where a naked 'alias' call in the ipythonrc file would
2720 cause a crash. Bug reported by Jorgen Stenarson.
2726 cause a crash. Bug reported by Jorgen Stenarson.
2721
2727
2722 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2728 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2723
2729
2724 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2730 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2725 startup time.
2731 startup time.
2726
2732
2727 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2733 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2728 instances had introduced a bug with globals in normal code. Now
2734 instances had introduced a bug with globals in normal code. Now
2729 it's working in all cases.
2735 it's working in all cases.
2730
2736
2731 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2737 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2732 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2738 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2733 has been introduced to set the default case sensitivity of the
2739 has been introduced to set the default case sensitivity of the
2734 searches. Users can still select either mode at runtime on a
2740 searches. Users can still select either mode at runtime on a
2735 per-search basis.
2741 per-search basis.
2736
2742
2737 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2743 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2738
2744
2739 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2745 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2740 attributes in wildcard searches for subclasses. Modified version
2746 attributes in wildcard searches for subclasses. Modified version
2741 of a patch by Jorgen.
2747 of a patch by Jorgen.
2742
2748
2743 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2749 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2744
2750
2745 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2751 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2746 embedded instances. I added a user_global_ns attribute to the
2752 embedded instances. I added a user_global_ns attribute to the
2747 InteractiveShell class to handle this.
2753 InteractiveShell class to handle this.
2748
2754
2749 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2755 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2750
2756
2751 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2757 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2752 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2758 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2753 (reported under win32, but may happen also in other platforms).
2759 (reported under win32, but may happen also in other platforms).
2754 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2760 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2755
2761
2756 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2762 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2757
2763
2758 * IPython/Magic.py (magic_psearch): new support for wildcard
2764 * IPython/Magic.py (magic_psearch): new support for wildcard
2759 patterns. Now, typing ?a*b will list all names which begin with a
2765 patterns. Now, typing ?a*b will list all names which begin with a
2760 and end in b, for example. The %psearch magic has full
2766 and end in b, for example. The %psearch magic has full
2761 docstrings. Many thanks to JΓΆrgen Stenarson
2767 docstrings. Many thanks to JΓΆrgen Stenarson
2762 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2768 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2763 implementing this functionality.
2769 implementing this functionality.
2764
2770
2765 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2771 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2766
2772
2767 * Manual: fixed long-standing annoyance of double-dashes (as in
2773 * Manual: fixed long-standing annoyance of double-dashes (as in
2768 --prefix=~, for example) being stripped in the HTML version. This
2774 --prefix=~, for example) being stripped in the HTML version. This
2769 is a latex2html bug, but a workaround was provided. Many thanks
2775 is a latex2html bug, but a workaround was provided. Many thanks
2770 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2776 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2771 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2777 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2772 rolling. This seemingly small issue had tripped a number of users
2778 rolling. This seemingly small issue had tripped a number of users
2773 when first installing, so I'm glad to see it gone.
2779 when first installing, so I'm glad to see it gone.
2774
2780
2775 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2781 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2776
2782
2777 * IPython/Extensions/numeric_formats.py: fix missing import,
2783 * IPython/Extensions/numeric_formats.py: fix missing import,
2778 reported by Stephen Walton.
2784 reported by Stephen Walton.
2779
2785
2780 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2786 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2781
2787
2782 * IPython/demo.py: finish demo module, fully documented now.
2788 * IPython/demo.py: finish demo module, fully documented now.
2783
2789
2784 * IPython/genutils.py (file_read): simple little utility to read a
2790 * IPython/genutils.py (file_read): simple little utility to read a
2785 file and ensure it's closed afterwards.
2791 file and ensure it's closed afterwards.
2786
2792
2787 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2793 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2788
2794
2789 * IPython/demo.py (Demo.__init__): added support for individually
2795 * IPython/demo.py (Demo.__init__): added support for individually
2790 tagging blocks for automatic execution.
2796 tagging blocks for automatic execution.
2791
2797
2792 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2798 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2793 syntax-highlighted python sources, requested by John.
2799 syntax-highlighted python sources, requested by John.
2794
2800
2795 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2801 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2796
2802
2797 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2803 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2798 finishing.
2804 finishing.
2799
2805
2800 * IPython/genutils.py (shlex_split): moved from Magic to here,
2806 * IPython/genutils.py (shlex_split): moved from Magic to here,
2801 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2807 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2802
2808
2803 * IPython/demo.py (Demo.__init__): added support for silent
2809 * IPython/demo.py (Demo.__init__): added support for silent
2804 blocks, improved marks as regexps, docstrings written.
2810 blocks, improved marks as regexps, docstrings written.
2805 (Demo.__init__): better docstring, added support for sys.argv.
2811 (Demo.__init__): better docstring, added support for sys.argv.
2806
2812
2807 * IPython/genutils.py (marquee): little utility used by the demo
2813 * IPython/genutils.py (marquee): little utility used by the demo
2808 code, handy in general.
2814 code, handy in general.
2809
2815
2810 * IPython/demo.py (Demo.__init__): new class for interactive
2816 * IPython/demo.py (Demo.__init__): new class for interactive
2811 demos. Not documented yet, I just wrote it in a hurry for
2817 demos. Not documented yet, I just wrote it in a hurry for
2812 scipy'05. Will docstring later.
2818 scipy'05. Will docstring later.
2813
2819
2814 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2820 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2815
2821
2816 * IPython/Shell.py (sigint_handler): Drastic simplification which
2822 * IPython/Shell.py (sigint_handler): Drastic simplification which
2817 also seems to make Ctrl-C work correctly across threads! This is
2823 also seems to make Ctrl-C work correctly across threads! This is
2818 so simple, that I can't beleive I'd missed it before. Needs more
2824 so simple, that I can't beleive I'd missed it before. Needs more
2819 testing, though.
2825 testing, though.
2820 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2826 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2821 like this before...
2827 like this before...
2822
2828
2823 * IPython/genutils.py (get_home_dir): add protection against
2829 * IPython/genutils.py (get_home_dir): add protection against
2824 non-dirs in win32 registry.
2830 non-dirs in win32 registry.
2825
2831
2826 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2832 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2827 bug where dict was mutated while iterating (pysh crash).
2833 bug where dict was mutated while iterating (pysh crash).
2828
2834
2829 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2835 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2830
2836
2831 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2837 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2832 spurious newlines added by this routine. After a report by
2838 spurious newlines added by this routine. After a report by
2833 F. Mantegazza.
2839 F. Mantegazza.
2834
2840
2835 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2841 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2836
2842
2837 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2843 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2838 calls. These were a leftover from the GTK 1.x days, and can cause
2844 calls. These were a leftover from the GTK 1.x days, and can cause
2839 problems in certain cases (after a report by John Hunter).
2845 problems in certain cases (after a report by John Hunter).
2840
2846
2841 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2847 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2842 os.getcwd() fails at init time. Thanks to patch from David Remahl
2848 os.getcwd() fails at init time. Thanks to patch from David Remahl
2843 <chmod007-AT-mac.com>.
2849 <chmod007-AT-mac.com>.
2844 (InteractiveShell.__init__): prevent certain special magics from
2850 (InteractiveShell.__init__): prevent certain special magics from
2845 being shadowed by aliases. Closes
2851 being shadowed by aliases. Closes
2846 http://www.scipy.net/roundup/ipython/issue41.
2852 http://www.scipy.net/roundup/ipython/issue41.
2847
2853
2848 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2854 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2849
2855
2850 * IPython/iplib.py (InteractiveShell.complete): Added new
2856 * IPython/iplib.py (InteractiveShell.complete): Added new
2851 top-level completion method to expose the completion mechanism
2857 top-level completion method to expose the completion mechanism
2852 beyond readline-based environments.
2858 beyond readline-based environments.
2853
2859
2854 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2860 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2855
2861
2856 * tools/ipsvnc (svnversion): fix svnversion capture.
2862 * tools/ipsvnc (svnversion): fix svnversion capture.
2857
2863
2858 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2864 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2859 attribute to self, which was missing. Before, it was set by a
2865 attribute to self, which was missing. Before, it was set by a
2860 routine which in certain cases wasn't being called, so the
2866 routine which in certain cases wasn't being called, so the
2861 instance could end up missing the attribute. This caused a crash.
2867 instance could end up missing the attribute. This caused a crash.
2862 Closes http://www.scipy.net/roundup/ipython/issue40.
2868 Closes http://www.scipy.net/roundup/ipython/issue40.
2863
2869
2864 2005-08-16 Fernando Perez <fperez@colorado.edu>
2870 2005-08-16 Fernando Perez <fperez@colorado.edu>
2865
2871
2866 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2872 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2867 contains non-string attribute. Closes
2873 contains non-string attribute. Closes
2868 http://www.scipy.net/roundup/ipython/issue38.
2874 http://www.scipy.net/roundup/ipython/issue38.
2869
2875
2870 2005-08-14 Fernando Perez <fperez@colorado.edu>
2876 2005-08-14 Fernando Perez <fperez@colorado.edu>
2871
2877
2872 * tools/ipsvnc: Minor improvements, to add changeset info.
2878 * tools/ipsvnc: Minor improvements, to add changeset info.
2873
2879
2874 2005-08-12 Fernando Perez <fperez@colorado.edu>
2880 2005-08-12 Fernando Perez <fperez@colorado.edu>
2875
2881
2876 * IPython/iplib.py (runsource): remove self.code_to_run_src
2882 * IPython/iplib.py (runsource): remove self.code_to_run_src
2877 attribute. I realized this is nothing more than
2883 attribute. I realized this is nothing more than
2878 '\n'.join(self.buffer), and having the same data in two different
2884 '\n'.join(self.buffer), and having the same data in two different
2879 places is just asking for synchronization bugs. This may impact
2885 places is just asking for synchronization bugs. This may impact
2880 people who have custom exception handlers, so I need to warn
2886 people who have custom exception handlers, so I need to warn
2881 ipython-dev about it (F. Mantegazza may use them).
2887 ipython-dev about it (F. Mantegazza may use them).
2882
2888
2883 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2889 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2884
2890
2885 * IPython/genutils.py: fix 2.2 compatibility (generators)
2891 * IPython/genutils.py: fix 2.2 compatibility (generators)
2886
2892
2887 2005-07-18 Fernando Perez <fperez@colorado.edu>
2893 2005-07-18 Fernando Perez <fperez@colorado.edu>
2888
2894
2889 * IPython/genutils.py (get_home_dir): fix to help users with
2895 * IPython/genutils.py (get_home_dir): fix to help users with
2890 invalid $HOME under win32.
2896 invalid $HOME under win32.
2891
2897
2892 2005-07-17 Fernando Perez <fperez@colorado.edu>
2898 2005-07-17 Fernando Perez <fperez@colorado.edu>
2893
2899
2894 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2900 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2895 some old hacks and clean up a bit other routines; code should be
2901 some old hacks and clean up a bit other routines; code should be
2896 simpler and a bit faster.
2902 simpler and a bit faster.
2897
2903
2898 * IPython/iplib.py (interact): removed some last-resort attempts
2904 * IPython/iplib.py (interact): removed some last-resort attempts
2899 to survive broken stdout/stderr. That code was only making it
2905 to survive broken stdout/stderr. That code was only making it
2900 harder to abstract out the i/o (necessary for gui integration),
2906 harder to abstract out the i/o (necessary for gui integration),
2901 and the crashes it could prevent were extremely rare in practice
2907 and the crashes it could prevent were extremely rare in practice
2902 (besides being fully user-induced in a pretty violent manner).
2908 (besides being fully user-induced in a pretty violent manner).
2903
2909
2904 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2910 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2905 Nothing major yet, but the code is simpler to read; this should
2911 Nothing major yet, but the code is simpler to read; this should
2906 make it easier to do more serious modifications in the future.
2912 make it easier to do more serious modifications in the future.
2907
2913
2908 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2914 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2909 which broke in .15 (thanks to a report by Ville).
2915 which broke in .15 (thanks to a report by Ville).
2910
2916
2911 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2917 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2912 be quite correct, I know next to nothing about unicode). This
2918 be quite correct, I know next to nothing about unicode). This
2913 will allow unicode strings to be used in prompts, amongst other
2919 will allow unicode strings to be used in prompts, amongst other
2914 cases. It also will prevent ipython from crashing when unicode
2920 cases. It also will prevent ipython from crashing when unicode
2915 shows up unexpectedly in many places. If ascii encoding fails, we
2921 shows up unexpectedly in many places. If ascii encoding fails, we
2916 assume utf_8. Currently the encoding is not a user-visible
2922 assume utf_8. Currently the encoding is not a user-visible
2917 setting, though it could be made so if there is demand for it.
2923 setting, though it could be made so if there is demand for it.
2918
2924
2919 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2925 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2920
2926
2921 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2927 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2922
2928
2923 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2929 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2924
2930
2925 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2931 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2926 code can work transparently for 2.2/2.3.
2932 code can work transparently for 2.2/2.3.
2927
2933
2928 2005-07-16 Fernando Perez <fperez@colorado.edu>
2934 2005-07-16 Fernando Perez <fperez@colorado.edu>
2929
2935
2930 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2936 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2931 out of the color scheme table used for coloring exception
2937 out of the color scheme table used for coloring exception
2932 tracebacks. This allows user code to add new schemes at runtime.
2938 tracebacks. This allows user code to add new schemes at runtime.
2933 This is a minimally modified version of the patch at
2939 This is a minimally modified version of the patch at
2934 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2940 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2935 for the contribution.
2941 for the contribution.
2936
2942
2937 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2943 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2938 slightly modified version of the patch in
2944 slightly modified version of the patch in
2939 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2945 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2940 to remove the previous try/except solution (which was costlier).
2946 to remove the previous try/except solution (which was costlier).
2941 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2947 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2942
2948
2943 2005-06-08 Fernando Perez <fperez@colorado.edu>
2949 2005-06-08 Fernando Perez <fperez@colorado.edu>
2944
2950
2945 * IPython/iplib.py (write/write_err): Add methods to abstract all
2951 * IPython/iplib.py (write/write_err): Add methods to abstract all
2946 I/O a bit more.
2952 I/O a bit more.
2947
2953
2948 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2954 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2949 warning, reported by Aric Hagberg, fix by JD Hunter.
2955 warning, reported by Aric Hagberg, fix by JD Hunter.
2950
2956
2951 2005-06-02 *** Released version 0.6.15
2957 2005-06-02 *** Released version 0.6.15
2952
2958
2953 2005-06-01 Fernando Perez <fperez@colorado.edu>
2959 2005-06-01 Fernando Perez <fperez@colorado.edu>
2954
2960
2955 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2961 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2956 tab-completion of filenames within open-quoted strings. Note that
2962 tab-completion of filenames within open-quoted strings. Note that
2957 this requires that in ~/.ipython/ipythonrc, users change the
2963 this requires that in ~/.ipython/ipythonrc, users change the
2958 readline delimiters configuration to read:
2964 readline delimiters configuration to read:
2959
2965
2960 readline_remove_delims -/~
2966 readline_remove_delims -/~
2961
2967
2962
2968
2963 2005-05-31 *** Released version 0.6.14
2969 2005-05-31 *** Released version 0.6.14
2964
2970
2965 2005-05-29 Fernando Perez <fperez@colorado.edu>
2971 2005-05-29 Fernando Perez <fperez@colorado.edu>
2966
2972
2967 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2973 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2968 with files not on the filesystem. Reported by Eliyahu Sandler
2974 with files not on the filesystem. Reported by Eliyahu Sandler
2969 <eli@gondolin.net>
2975 <eli@gondolin.net>
2970
2976
2971 2005-05-22 Fernando Perez <fperez@colorado.edu>
2977 2005-05-22 Fernando Perez <fperez@colorado.edu>
2972
2978
2973 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2979 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2974 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2980 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2975
2981
2976 2005-05-19 Fernando Perez <fperez@colorado.edu>
2982 2005-05-19 Fernando Perez <fperez@colorado.edu>
2977
2983
2978 * IPython/iplib.py (safe_execfile): close a file which could be
2984 * IPython/iplib.py (safe_execfile): close a file which could be
2979 left open (causing problems in win32, which locks open files).
2985 left open (causing problems in win32, which locks open files).
2980 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2986 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2981
2987
2982 2005-05-18 Fernando Perez <fperez@colorado.edu>
2988 2005-05-18 Fernando Perez <fperez@colorado.edu>
2983
2989
2984 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2990 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2985 keyword arguments correctly to safe_execfile().
2991 keyword arguments correctly to safe_execfile().
2986
2992
2987 2005-05-13 Fernando Perez <fperez@colorado.edu>
2993 2005-05-13 Fernando Perez <fperez@colorado.edu>
2988
2994
2989 * ipython.1: Added info about Qt to manpage, and threads warning
2995 * ipython.1: Added info about Qt to manpage, and threads warning
2990 to usage page (invoked with --help).
2996 to usage page (invoked with --help).
2991
2997
2992 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2998 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2993 new matcher (it goes at the end of the priority list) to do
2999 new matcher (it goes at the end of the priority list) to do
2994 tab-completion on named function arguments. Submitted by George
3000 tab-completion on named function arguments. Submitted by George
2995 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3001 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2996 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3002 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2997 for more details.
3003 for more details.
2998
3004
2999 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3005 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3000 SystemExit exceptions in the script being run. Thanks to a report
3006 SystemExit exceptions in the script being run. Thanks to a report
3001 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3007 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3002 producing very annoying behavior when running unit tests.
3008 producing very annoying behavior when running unit tests.
3003
3009
3004 2005-05-12 Fernando Perez <fperez@colorado.edu>
3010 2005-05-12 Fernando Perez <fperez@colorado.edu>
3005
3011
3006 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3012 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3007 which I'd broken (again) due to a changed regexp. In the process,
3013 which I'd broken (again) due to a changed regexp. In the process,
3008 added ';' as an escape to auto-quote the whole line without
3014 added ';' as an escape to auto-quote the whole line without
3009 splitting its arguments. Thanks to a report by Jerry McRae
3015 splitting its arguments. Thanks to a report by Jerry McRae
3010 <qrs0xyc02-AT-sneakemail.com>.
3016 <qrs0xyc02-AT-sneakemail.com>.
3011
3017
3012 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3018 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3013 possible crashes caused by a TokenError. Reported by Ed Schofield
3019 possible crashes caused by a TokenError. Reported by Ed Schofield
3014 <schofield-AT-ftw.at>.
3020 <schofield-AT-ftw.at>.
3015
3021
3016 2005-05-06 Fernando Perez <fperez@colorado.edu>
3022 2005-05-06 Fernando Perez <fperez@colorado.edu>
3017
3023
3018 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3024 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3019
3025
3020 2005-04-29 Fernando Perez <fperez@colorado.edu>
3026 2005-04-29 Fernando Perez <fperez@colorado.edu>
3021
3027
3022 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3028 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3023 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3029 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3024 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3030 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3025 which provides support for Qt interactive usage (similar to the
3031 which provides support for Qt interactive usage (similar to the
3026 existing one for WX and GTK). This had been often requested.
3032 existing one for WX and GTK). This had been often requested.
3027
3033
3028 2005-04-14 *** Released version 0.6.13
3034 2005-04-14 *** Released version 0.6.13
3029
3035
3030 2005-04-08 Fernando Perez <fperez@colorado.edu>
3036 2005-04-08 Fernando Perez <fperez@colorado.edu>
3031
3037
3032 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3038 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3033 from _ofind, which gets called on almost every input line. Now,
3039 from _ofind, which gets called on almost every input line. Now,
3034 we only try to get docstrings if they are actually going to be
3040 we only try to get docstrings if they are actually going to be
3035 used (the overhead of fetching unnecessary docstrings can be
3041 used (the overhead of fetching unnecessary docstrings can be
3036 noticeable for certain objects, such as Pyro proxies).
3042 noticeable for certain objects, such as Pyro proxies).
3037
3043
3038 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3044 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3039 for completers. For some reason I had been passing them the state
3045 for completers. For some reason I had been passing them the state
3040 variable, which completers never actually need, and was in
3046 variable, which completers never actually need, and was in
3041 conflict with the rlcompleter API. Custom completers ONLY need to
3047 conflict with the rlcompleter API. Custom completers ONLY need to
3042 take the text parameter.
3048 take the text parameter.
3043
3049
3044 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3050 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3045 work correctly in pysh. I've also moved all the logic which used
3051 work correctly in pysh. I've also moved all the logic which used
3046 to be in pysh.py here, which will prevent problems with future
3052 to be in pysh.py here, which will prevent problems with future
3047 upgrades. However, this time I must warn users to update their
3053 upgrades. However, this time I must warn users to update their
3048 pysh profile to include the line
3054 pysh profile to include the line
3049
3055
3050 import_all IPython.Extensions.InterpreterExec
3056 import_all IPython.Extensions.InterpreterExec
3051
3057
3052 because otherwise things won't work for them. They MUST also
3058 because otherwise things won't work for them. They MUST also
3053 delete pysh.py and the line
3059 delete pysh.py and the line
3054
3060
3055 execfile pysh.py
3061 execfile pysh.py
3056
3062
3057 from their ipythonrc-pysh.
3063 from their ipythonrc-pysh.
3058
3064
3059 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3065 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3060 robust in the face of objects whose dir() returns non-strings
3066 robust in the face of objects whose dir() returns non-strings
3061 (which it shouldn't, but some broken libs like ITK do). Thanks to
3067 (which it shouldn't, but some broken libs like ITK do). Thanks to
3062 a patch by John Hunter (implemented differently, though). Also
3068 a patch by John Hunter (implemented differently, though). Also
3063 minor improvements by using .extend instead of + on lists.
3069 minor improvements by using .extend instead of + on lists.
3064
3070
3065 * pysh.py:
3071 * pysh.py:
3066
3072
3067 2005-04-06 Fernando Perez <fperez@colorado.edu>
3073 2005-04-06 Fernando Perez <fperez@colorado.edu>
3068
3074
3069 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3075 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3070 by default, so that all users benefit from it. Those who don't
3076 by default, so that all users benefit from it. Those who don't
3071 want it can still turn it off.
3077 want it can still turn it off.
3072
3078
3073 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3079 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3074 config file, I'd forgotten about this, so users were getting it
3080 config file, I'd forgotten about this, so users were getting it
3075 off by default.
3081 off by default.
3076
3082
3077 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3083 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3078 consistency. Now magics can be called in multiline statements,
3084 consistency. Now magics can be called in multiline statements,
3079 and python variables can be expanded in magic calls via $var.
3085 and python variables can be expanded in magic calls via $var.
3080 This makes the magic system behave just like aliases or !system
3086 This makes the magic system behave just like aliases or !system
3081 calls.
3087 calls.
3082
3088
3083 2005-03-28 Fernando Perez <fperez@colorado.edu>
3089 2005-03-28 Fernando Perez <fperez@colorado.edu>
3084
3090
3085 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3091 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3086 expensive string additions for building command. Add support for
3092 expensive string additions for building command. Add support for
3087 trailing ';' when autocall is used.
3093 trailing ';' when autocall is used.
3088
3094
3089 2005-03-26 Fernando Perez <fperez@colorado.edu>
3095 2005-03-26 Fernando Perez <fperez@colorado.edu>
3090
3096
3091 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3097 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3092 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3098 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3093 ipython.el robust against prompts with any number of spaces
3099 ipython.el robust against prompts with any number of spaces
3094 (including 0) after the ':' character.
3100 (including 0) after the ':' character.
3095
3101
3096 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3102 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3097 continuation prompt, which misled users to think the line was
3103 continuation prompt, which misled users to think the line was
3098 already indented. Closes debian Bug#300847, reported to me by
3104 already indented. Closes debian Bug#300847, reported to me by
3099 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3105 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3100
3106
3101 2005-03-23 Fernando Perez <fperez@colorado.edu>
3107 2005-03-23 Fernando Perez <fperez@colorado.edu>
3102
3108
3103 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3109 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3104 properly aligned if they have embedded newlines.
3110 properly aligned if they have embedded newlines.
3105
3111
3106 * IPython/iplib.py (runlines): Add a public method to expose
3112 * IPython/iplib.py (runlines): Add a public method to expose
3107 IPython's code execution machinery, so that users can run strings
3113 IPython's code execution machinery, so that users can run strings
3108 as if they had been typed at the prompt interactively.
3114 as if they had been typed at the prompt interactively.
3109 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3115 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3110 methods which can call the system shell, but with python variable
3116 methods which can call the system shell, but with python variable
3111 expansion. The three such methods are: __IPYTHON__.system,
3117 expansion. The three such methods are: __IPYTHON__.system,
3112 .getoutput and .getoutputerror. These need to be documented in a
3118 .getoutput and .getoutputerror. These need to be documented in a
3113 'public API' section (to be written) of the manual.
3119 'public API' section (to be written) of the manual.
3114
3120
3115 2005-03-20 Fernando Perez <fperez@colorado.edu>
3121 2005-03-20 Fernando Perez <fperez@colorado.edu>
3116
3122
3117 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3123 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3118 for custom exception handling. This is quite powerful, and it
3124 for custom exception handling. This is quite powerful, and it
3119 allows for user-installable exception handlers which can trap
3125 allows for user-installable exception handlers which can trap
3120 custom exceptions at runtime and treat them separately from
3126 custom exceptions at runtime and treat them separately from
3121 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3127 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3122 Mantegazza <mantegazza-AT-ill.fr>.
3128 Mantegazza <mantegazza-AT-ill.fr>.
3123 (InteractiveShell.set_custom_completer): public API function to
3129 (InteractiveShell.set_custom_completer): public API function to
3124 add new completers at runtime.
3130 add new completers at runtime.
3125
3131
3126 2005-03-19 Fernando Perez <fperez@colorado.edu>
3132 2005-03-19 Fernando Perez <fperez@colorado.edu>
3127
3133
3128 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3134 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3129 allow objects which provide their docstrings via non-standard
3135 allow objects which provide their docstrings via non-standard
3130 mechanisms (like Pyro proxies) to still be inspected by ipython's
3136 mechanisms (like Pyro proxies) to still be inspected by ipython's
3131 ? system.
3137 ? system.
3132
3138
3133 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3139 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3134 automatic capture system. I tried quite hard to make it work
3140 automatic capture system. I tried quite hard to make it work
3135 reliably, and simply failed. I tried many combinations with the
3141 reliably, and simply failed. I tried many combinations with the
3136 subprocess module, but eventually nothing worked in all needed
3142 subprocess module, but eventually nothing worked in all needed
3137 cases (not blocking stdin for the child, duplicating stdout
3143 cases (not blocking stdin for the child, duplicating stdout
3138 without blocking, etc). The new %sc/%sx still do capture to these
3144 without blocking, etc). The new %sc/%sx still do capture to these
3139 magical list/string objects which make shell use much more
3145 magical list/string objects which make shell use much more
3140 conveninent, so not all is lost.
3146 conveninent, so not all is lost.
3141
3147
3142 XXX - FIX MANUAL for the change above!
3148 XXX - FIX MANUAL for the change above!
3143
3149
3144 (runsource): I copied code.py's runsource() into ipython to modify
3150 (runsource): I copied code.py's runsource() into ipython to modify
3145 it a bit. Now the code object and source to be executed are
3151 it a bit. Now the code object and source to be executed are
3146 stored in ipython. This makes this info accessible to third-party
3152 stored in ipython. This makes this info accessible to third-party
3147 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3153 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3148 Mantegazza <mantegazza-AT-ill.fr>.
3154 Mantegazza <mantegazza-AT-ill.fr>.
3149
3155
3150 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3156 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3151 history-search via readline (like C-p/C-n). I'd wanted this for a
3157 history-search via readline (like C-p/C-n). I'd wanted this for a
3152 long time, but only recently found out how to do it. For users
3158 long time, but only recently found out how to do it. For users
3153 who already have their ipythonrc files made and want this, just
3159 who already have their ipythonrc files made and want this, just
3154 add:
3160 add:
3155
3161
3156 readline_parse_and_bind "\e[A": history-search-backward
3162 readline_parse_and_bind "\e[A": history-search-backward
3157 readline_parse_and_bind "\e[B": history-search-forward
3163 readline_parse_and_bind "\e[B": history-search-forward
3158
3164
3159 2005-03-18 Fernando Perez <fperez@colorado.edu>
3165 2005-03-18 Fernando Perez <fperez@colorado.edu>
3160
3166
3161 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3167 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3162 LSString and SList classes which allow transparent conversions
3168 LSString and SList classes which allow transparent conversions
3163 between list mode and whitespace-separated string.
3169 between list mode and whitespace-separated string.
3164 (magic_r): Fix recursion problem in %r.
3170 (magic_r): Fix recursion problem in %r.
3165
3171
3166 * IPython/genutils.py (LSString): New class to be used for
3172 * IPython/genutils.py (LSString): New class to be used for
3167 automatic storage of the results of all alias/system calls in _o
3173 automatic storage of the results of all alias/system calls in _o
3168 and _e (stdout/err). These provide a .l/.list attribute which
3174 and _e (stdout/err). These provide a .l/.list attribute which
3169 does automatic splitting on newlines. This means that for most
3175 does automatic splitting on newlines. This means that for most
3170 uses, you'll never need to do capturing of output with %sc/%sx
3176 uses, you'll never need to do capturing of output with %sc/%sx
3171 anymore, since ipython keeps this always done for you. Note that
3177 anymore, since ipython keeps this always done for you. Note that
3172 only the LAST results are stored, the _o/e variables are
3178 only the LAST results are stored, the _o/e variables are
3173 overwritten on each call. If you need to save their contents
3179 overwritten on each call. If you need to save their contents
3174 further, simply bind them to any other name.
3180 further, simply bind them to any other name.
3175
3181
3176 2005-03-17 Fernando Perez <fperez@colorado.edu>
3182 2005-03-17 Fernando Perez <fperez@colorado.edu>
3177
3183
3178 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3184 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3179 prompt namespace handling.
3185 prompt namespace handling.
3180
3186
3181 2005-03-16 Fernando Perez <fperez@colorado.edu>
3187 2005-03-16 Fernando Perez <fperez@colorado.edu>
3182
3188
3183 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3189 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3184 classic prompts to be '>>> ' (final space was missing, and it
3190 classic prompts to be '>>> ' (final space was missing, and it
3185 trips the emacs python mode).
3191 trips the emacs python mode).
3186 (BasePrompt.__str__): Added safe support for dynamic prompt
3192 (BasePrompt.__str__): Added safe support for dynamic prompt
3187 strings. Now you can set your prompt string to be '$x', and the
3193 strings. Now you can set your prompt string to be '$x', and the
3188 value of x will be printed from your interactive namespace. The
3194 value of x will be printed from your interactive namespace. The
3189 interpolation syntax includes the full Itpl support, so
3195 interpolation syntax includes the full Itpl support, so
3190 ${foo()+x+bar()} is a valid prompt string now, and the function
3196 ${foo()+x+bar()} is a valid prompt string now, and the function
3191 calls will be made at runtime.
3197 calls will be made at runtime.
3192
3198
3193 2005-03-15 Fernando Perez <fperez@colorado.edu>
3199 2005-03-15 Fernando Perez <fperez@colorado.edu>
3194
3200
3195 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3201 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3196 avoid name clashes in pylab. %hist still works, it just forwards
3202 avoid name clashes in pylab. %hist still works, it just forwards
3197 the call to %history.
3203 the call to %history.
3198
3204
3199 2005-03-02 *** Released version 0.6.12
3205 2005-03-02 *** Released version 0.6.12
3200
3206
3201 2005-03-02 Fernando Perez <fperez@colorado.edu>
3207 2005-03-02 Fernando Perez <fperez@colorado.edu>
3202
3208
3203 * IPython/iplib.py (handle_magic): log magic calls properly as
3209 * IPython/iplib.py (handle_magic): log magic calls properly as
3204 ipmagic() function calls.
3210 ipmagic() function calls.
3205
3211
3206 * IPython/Magic.py (magic_time): Improved %time to support
3212 * IPython/Magic.py (magic_time): Improved %time to support
3207 statements and provide wall-clock as well as CPU time.
3213 statements and provide wall-clock as well as CPU time.
3208
3214
3209 2005-02-27 Fernando Perez <fperez@colorado.edu>
3215 2005-02-27 Fernando Perez <fperez@colorado.edu>
3210
3216
3211 * IPython/hooks.py: New hooks module, to expose user-modifiable
3217 * IPython/hooks.py: New hooks module, to expose user-modifiable
3212 IPython functionality in a clean manner. For now only the editor
3218 IPython functionality in a clean manner. For now only the editor
3213 hook is actually written, and other thigns which I intend to turn
3219 hook is actually written, and other thigns which I intend to turn
3214 into proper hooks aren't yet there. The display and prefilter
3220 into proper hooks aren't yet there. The display and prefilter
3215 stuff, for example, should be hooks. But at least now the
3221 stuff, for example, should be hooks. But at least now the
3216 framework is in place, and the rest can be moved here with more
3222 framework is in place, and the rest can be moved here with more
3217 time later. IPython had had a .hooks variable for a long time for
3223 time later. IPython had had a .hooks variable for a long time for
3218 this purpose, but I'd never actually used it for anything.
3224 this purpose, but I'd never actually used it for anything.
3219
3225
3220 2005-02-26 Fernando Perez <fperez@colorado.edu>
3226 2005-02-26 Fernando Perez <fperez@colorado.edu>
3221
3227
3222 * IPython/ipmaker.py (make_IPython): make the default ipython
3228 * IPython/ipmaker.py (make_IPython): make the default ipython
3223 directory be called _ipython under win32, to follow more the
3229 directory be called _ipython under win32, to follow more the
3224 naming peculiarities of that platform (where buggy software like
3230 naming peculiarities of that platform (where buggy software like
3225 Visual Sourcesafe breaks with .named directories). Reported by
3231 Visual Sourcesafe breaks with .named directories). Reported by
3226 Ville Vainio.
3232 Ville Vainio.
3227
3233
3228 2005-02-23 Fernando Perez <fperez@colorado.edu>
3234 2005-02-23 Fernando Perez <fperez@colorado.edu>
3229
3235
3230 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3236 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3231 auto_aliases for win32 which were causing problems. Users can
3237 auto_aliases for win32 which were causing problems. Users can
3232 define the ones they personally like.
3238 define the ones they personally like.
3233
3239
3234 2005-02-21 Fernando Perez <fperez@colorado.edu>
3240 2005-02-21 Fernando Perez <fperez@colorado.edu>
3235
3241
3236 * IPython/Magic.py (magic_time): new magic to time execution of
3242 * IPython/Magic.py (magic_time): new magic to time execution of
3237 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3243 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3238
3244
3239 2005-02-19 Fernando Perez <fperez@colorado.edu>
3245 2005-02-19 Fernando Perez <fperez@colorado.edu>
3240
3246
3241 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3247 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3242 into keys (for prompts, for example).
3248 into keys (for prompts, for example).
3243
3249
3244 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3250 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3245 prompts in case users want them. This introduces a small behavior
3251 prompts in case users want them. This introduces a small behavior
3246 change: ipython does not automatically add a space to all prompts
3252 change: ipython does not automatically add a space to all prompts
3247 anymore. To get the old prompts with a space, users should add it
3253 anymore. To get the old prompts with a space, users should add it
3248 manually to their ipythonrc file, so for example prompt_in1 should
3254 manually to their ipythonrc file, so for example prompt_in1 should
3249 now read 'In [\#]: ' instead of 'In [\#]:'.
3255 now read 'In [\#]: ' instead of 'In [\#]:'.
3250 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3256 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3251 file) to control left-padding of secondary prompts.
3257 file) to control left-padding of secondary prompts.
3252
3258
3253 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3259 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3254 the profiler can't be imported. Fix for Debian, which removed
3260 the profiler can't be imported. Fix for Debian, which removed
3255 profile.py because of License issues. I applied a slightly
3261 profile.py because of License issues. I applied a slightly
3256 modified version of the original Debian patch at
3262 modified version of the original Debian patch at
3257 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3263 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3258
3264
3259 2005-02-17 Fernando Perez <fperez@colorado.edu>
3265 2005-02-17 Fernando Perez <fperez@colorado.edu>
3260
3266
3261 * IPython/genutils.py (native_line_ends): Fix bug which would
3267 * IPython/genutils.py (native_line_ends): Fix bug which would
3262 cause improper line-ends under win32 b/c I was not opening files
3268 cause improper line-ends under win32 b/c I was not opening files
3263 in binary mode. Bug report and fix thanks to Ville.
3269 in binary mode. Bug report and fix thanks to Ville.
3264
3270
3265 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3271 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3266 trying to catch spurious foo[1] autocalls. My fix actually broke
3272 trying to catch spurious foo[1] autocalls. My fix actually broke
3267 ',/' autoquote/call with explicit escape (bad regexp).
3273 ',/' autoquote/call with explicit escape (bad regexp).
3268
3274
3269 2005-02-15 *** Released version 0.6.11
3275 2005-02-15 *** Released version 0.6.11
3270
3276
3271 2005-02-14 Fernando Perez <fperez@colorado.edu>
3277 2005-02-14 Fernando Perez <fperez@colorado.edu>
3272
3278
3273 * IPython/background_jobs.py: New background job management
3279 * IPython/background_jobs.py: New background job management
3274 subsystem. This is implemented via a new set of classes, and
3280 subsystem. This is implemented via a new set of classes, and
3275 IPython now provides a builtin 'jobs' object for background job
3281 IPython now provides a builtin 'jobs' object for background job
3276 execution. A convenience %bg magic serves as a lightweight
3282 execution. A convenience %bg magic serves as a lightweight
3277 frontend for starting the more common type of calls. This was
3283 frontend for starting the more common type of calls. This was
3278 inspired by discussions with B. Granger and the BackgroundCommand
3284 inspired by discussions with B. Granger and the BackgroundCommand
3279 class described in the book Python Scripting for Computational
3285 class described in the book Python Scripting for Computational
3280 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3286 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3281 (although ultimately no code from this text was used, as IPython's
3287 (although ultimately no code from this text was used, as IPython's
3282 system is a separate implementation).
3288 system is a separate implementation).
3283
3289
3284 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3290 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3285 to control the completion of single/double underscore names
3291 to control the completion of single/double underscore names
3286 separately. As documented in the example ipytonrc file, the
3292 separately. As documented in the example ipytonrc file, the
3287 readline_omit__names variable can now be set to 2, to omit even
3293 readline_omit__names variable can now be set to 2, to omit even
3288 single underscore names. Thanks to a patch by Brian Wong
3294 single underscore names. Thanks to a patch by Brian Wong
3289 <BrianWong-AT-AirgoNetworks.Com>.
3295 <BrianWong-AT-AirgoNetworks.Com>.
3290 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3296 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3291 be autocalled as foo([1]) if foo were callable. A problem for
3297 be autocalled as foo([1]) if foo were callable. A problem for
3292 things which are both callable and implement __getitem__.
3298 things which are both callable and implement __getitem__.
3293 (init_readline): Fix autoindentation for win32. Thanks to a patch
3299 (init_readline): Fix autoindentation for win32. Thanks to a patch
3294 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3300 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3295
3301
3296 2005-02-12 Fernando Perez <fperez@colorado.edu>
3302 2005-02-12 Fernando Perez <fperez@colorado.edu>
3297
3303
3298 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3304 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3299 which I had written long ago to sort out user error messages which
3305 which I had written long ago to sort out user error messages which
3300 may occur during startup. This seemed like a good idea initially,
3306 may occur during startup. This seemed like a good idea initially,
3301 but it has proven a disaster in retrospect. I don't want to
3307 but it has proven a disaster in retrospect. I don't want to
3302 change much code for now, so my fix is to set the internal 'debug'
3308 change much code for now, so my fix is to set the internal 'debug'
3303 flag to true everywhere, whose only job was precisely to control
3309 flag to true everywhere, whose only job was precisely to control
3304 this subsystem. This closes issue 28 (as well as avoiding all
3310 this subsystem. This closes issue 28 (as well as avoiding all
3305 sorts of strange hangups which occur from time to time).
3311 sorts of strange hangups which occur from time to time).
3306
3312
3307 2005-02-07 Fernando Perez <fperez@colorado.edu>
3313 2005-02-07 Fernando Perez <fperez@colorado.edu>
3308
3314
3309 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3315 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3310 previous call produced a syntax error.
3316 previous call produced a syntax error.
3311
3317
3312 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3318 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3313 classes without constructor.
3319 classes without constructor.
3314
3320
3315 2005-02-06 Fernando Perez <fperez@colorado.edu>
3321 2005-02-06 Fernando Perez <fperez@colorado.edu>
3316
3322
3317 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3323 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3318 completions with the results of each matcher, so we return results
3324 completions with the results of each matcher, so we return results
3319 to the user from all namespaces. This breaks with ipython
3325 to the user from all namespaces. This breaks with ipython
3320 tradition, but I think it's a nicer behavior. Now you get all
3326 tradition, but I think it's a nicer behavior. Now you get all
3321 possible completions listed, from all possible namespaces (python,
3327 possible completions listed, from all possible namespaces (python,
3322 filesystem, magics...) After a request by John Hunter
3328 filesystem, magics...) After a request by John Hunter
3323 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3329 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3324
3330
3325 2005-02-05 Fernando Perez <fperez@colorado.edu>
3331 2005-02-05 Fernando Perez <fperez@colorado.edu>
3326
3332
3327 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3333 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3328 the call had quote characters in it (the quotes were stripped).
3334 the call had quote characters in it (the quotes were stripped).
3329
3335
3330 2005-01-31 Fernando Perez <fperez@colorado.edu>
3336 2005-01-31 Fernando Perez <fperez@colorado.edu>
3331
3337
3332 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3338 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3333 Itpl.itpl() to make the code more robust against psyco
3339 Itpl.itpl() to make the code more robust against psyco
3334 optimizations.
3340 optimizations.
3335
3341
3336 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3342 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3337 of causing an exception. Quicker, cleaner.
3343 of causing an exception. Quicker, cleaner.
3338
3344
3339 2005-01-28 Fernando Perez <fperez@colorado.edu>
3345 2005-01-28 Fernando Perez <fperez@colorado.edu>
3340
3346
3341 * scripts/ipython_win_post_install.py (install): hardcode
3347 * scripts/ipython_win_post_install.py (install): hardcode
3342 sys.prefix+'python.exe' as the executable path. It turns out that
3348 sys.prefix+'python.exe' as the executable path. It turns out that
3343 during the post-installation run, sys.executable resolves to the
3349 during the post-installation run, sys.executable resolves to the
3344 name of the binary installer! I should report this as a distutils
3350 name of the binary installer! I should report this as a distutils
3345 bug, I think. I updated the .10 release with this tiny fix, to
3351 bug, I think. I updated the .10 release with this tiny fix, to
3346 avoid annoying the lists further.
3352 avoid annoying the lists further.
3347
3353
3348 2005-01-27 *** Released version 0.6.10
3354 2005-01-27 *** Released version 0.6.10
3349
3355
3350 2005-01-27 Fernando Perez <fperez@colorado.edu>
3356 2005-01-27 Fernando Perez <fperez@colorado.edu>
3351
3357
3352 * IPython/numutils.py (norm): Added 'inf' as optional name for
3358 * IPython/numutils.py (norm): Added 'inf' as optional name for
3353 L-infinity norm, included references to mathworld.com for vector
3359 L-infinity norm, included references to mathworld.com for vector
3354 norm definitions.
3360 norm definitions.
3355 (amin/amax): added amin/amax for array min/max. Similar to what
3361 (amin/amax): added amin/amax for array min/max. Similar to what
3356 pylab ships with after the recent reorganization of names.
3362 pylab ships with after the recent reorganization of names.
3357 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3363 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3358
3364
3359 * ipython.el: committed Alex's recent fixes and improvements.
3365 * ipython.el: committed Alex's recent fixes and improvements.
3360 Tested with python-mode from CVS, and it looks excellent. Since
3366 Tested with python-mode from CVS, and it looks excellent. Since
3361 python-mode hasn't released anything in a while, I'm temporarily
3367 python-mode hasn't released anything in a while, I'm temporarily
3362 putting a copy of today's CVS (v 4.70) of python-mode in:
3368 putting a copy of today's CVS (v 4.70) of python-mode in:
3363 http://ipython.scipy.org/tmp/python-mode.el
3369 http://ipython.scipy.org/tmp/python-mode.el
3364
3370
3365 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3371 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3366 sys.executable for the executable name, instead of assuming it's
3372 sys.executable for the executable name, instead of assuming it's
3367 called 'python.exe' (the post-installer would have produced broken
3373 called 'python.exe' (the post-installer would have produced broken
3368 setups on systems with a differently named python binary).
3374 setups on systems with a differently named python binary).
3369
3375
3370 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3376 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3371 references to os.linesep, to make the code more
3377 references to os.linesep, to make the code more
3372 platform-independent. This is also part of the win32 coloring
3378 platform-independent. This is also part of the win32 coloring
3373 fixes.
3379 fixes.
3374
3380
3375 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3381 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3376 lines, which actually cause coloring bugs because the length of
3382 lines, which actually cause coloring bugs because the length of
3377 the line is very difficult to correctly compute with embedded
3383 the line is very difficult to correctly compute with embedded
3378 escapes. This was the source of all the coloring problems under
3384 escapes. This was the source of all the coloring problems under
3379 Win32. I think that _finally_, Win32 users have a properly
3385 Win32. I think that _finally_, Win32 users have a properly
3380 working ipython in all respects. This would never have happened
3386 working ipython in all respects. This would never have happened
3381 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3387 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3382
3388
3383 2005-01-26 *** Released version 0.6.9
3389 2005-01-26 *** Released version 0.6.9
3384
3390
3385 2005-01-25 Fernando Perez <fperez@colorado.edu>
3391 2005-01-25 Fernando Perez <fperez@colorado.edu>
3386
3392
3387 * setup.py: finally, we have a true Windows installer, thanks to
3393 * setup.py: finally, we have a true Windows installer, thanks to
3388 the excellent work of Viktor Ransmayr
3394 the excellent work of Viktor Ransmayr
3389 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3395 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3390 Windows users. The setup routine is quite a bit cleaner thanks to
3396 Windows users. The setup routine is quite a bit cleaner thanks to
3391 this, and the post-install script uses the proper functions to
3397 this, and the post-install script uses the proper functions to
3392 allow a clean de-installation using the standard Windows Control
3398 allow a clean de-installation using the standard Windows Control
3393 Panel.
3399 Panel.
3394
3400
3395 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3401 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3396 environment variable under all OSes (including win32) if
3402 environment variable under all OSes (including win32) if
3397 available. This will give consistency to win32 users who have set
3403 available. This will give consistency to win32 users who have set
3398 this variable for any reason. If os.environ['HOME'] fails, the
3404 this variable for any reason. If os.environ['HOME'] fails, the
3399 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3405 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3400
3406
3401 2005-01-24 Fernando Perez <fperez@colorado.edu>
3407 2005-01-24 Fernando Perez <fperez@colorado.edu>
3402
3408
3403 * IPython/numutils.py (empty_like): add empty_like(), similar to
3409 * IPython/numutils.py (empty_like): add empty_like(), similar to
3404 zeros_like() but taking advantage of the new empty() Numeric routine.
3410 zeros_like() but taking advantage of the new empty() Numeric routine.
3405
3411
3406 2005-01-23 *** Released version 0.6.8
3412 2005-01-23 *** Released version 0.6.8
3407
3413
3408 2005-01-22 Fernando Perez <fperez@colorado.edu>
3414 2005-01-22 Fernando Perez <fperez@colorado.edu>
3409
3415
3410 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3416 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3411 automatic show() calls. After discussing things with JDH, it
3417 automatic show() calls. After discussing things with JDH, it
3412 turns out there are too many corner cases where this can go wrong.
3418 turns out there are too many corner cases where this can go wrong.
3413 It's best not to try to be 'too smart', and simply have ipython
3419 It's best not to try to be 'too smart', and simply have ipython
3414 reproduce as much as possible the default behavior of a normal
3420 reproduce as much as possible the default behavior of a normal
3415 python shell.
3421 python shell.
3416
3422
3417 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3423 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3418 line-splitting regexp and _prefilter() to avoid calling getattr()
3424 line-splitting regexp and _prefilter() to avoid calling getattr()
3419 on assignments. This closes
3425 on assignments. This closes
3420 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3426 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3421 readline uses getattr(), so a simple <TAB> keypress is still
3427 readline uses getattr(), so a simple <TAB> keypress is still
3422 enough to trigger getattr() calls on an object.
3428 enough to trigger getattr() calls on an object.
3423
3429
3424 2005-01-21 Fernando Perez <fperez@colorado.edu>
3430 2005-01-21 Fernando Perez <fperez@colorado.edu>
3425
3431
3426 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3432 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3427 docstring under pylab so it doesn't mask the original.
3433 docstring under pylab so it doesn't mask the original.
3428
3434
3429 2005-01-21 *** Released version 0.6.7
3435 2005-01-21 *** Released version 0.6.7
3430
3436
3431 2005-01-21 Fernando Perez <fperez@colorado.edu>
3437 2005-01-21 Fernando Perez <fperez@colorado.edu>
3432
3438
3433 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3439 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3434 signal handling for win32 users in multithreaded mode.
3440 signal handling for win32 users in multithreaded mode.
3435
3441
3436 2005-01-17 Fernando Perez <fperez@colorado.edu>
3442 2005-01-17 Fernando Perez <fperez@colorado.edu>
3437
3443
3438 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3444 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3439 instances with no __init__. After a crash report by Norbert Nemec
3445 instances with no __init__. After a crash report by Norbert Nemec
3440 <Norbert-AT-nemec-online.de>.
3446 <Norbert-AT-nemec-online.de>.
3441
3447
3442 2005-01-14 Fernando Perez <fperez@colorado.edu>
3448 2005-01-14 Fernando Perez <fperez@colorado.edu>
3443
3449
3444 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3450 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3445 names for verbose exceptions, when multiple dotted names and the
3451 names for verbose exceptions, when multiple dotted names and the
3446 'parent' object were present on the same line.
3452 'parent' object were present on the same line.
3447
3453
3448 2005-01-11 Fernando Perez <fperez@colorado.edu>
3454 2005-01-11 Fernando Perez <fperez@colorado.edu>
3449
3455
3450 * IPython/genutils.py (flag_calls): new utility to trap and flag
3456 * IPython/genutils.py (flag_calls): new utility to trap and flag
3451 calls in functions. I need it to clean up matplotlib support.
3457 calls in functions. I need it to clean up matplotlib support.
3452 Also removed some deprecated code in genutils.
3458 Also removed some deprecated code in genutils.
3453
3459
3454 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3460 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3455 that matplotlib scripts called with %run, which don't call show()
3461 that matplotlib scripts called with %run, which don't call show()
3456 themselves, still have their plotting windows open.
3462 themselves, still have their plotting windows open.
3457
3463
3458 2005-01-05 Fernando Perez <fperez@colorado.edu>
3464 2005-01-05 Fernando Perez <fperez@colorado.edu>
3459
3465
3460 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3466 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3461 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3467 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3462
3468
3463 2004-12-19 Fernando Perez <fperez@colorado.edu>
3469 2004-12-19 Fernando Perez <fperez@colorado.edu>
3464
3470
3465 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3471 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3466 parent_runcode, which was an eyesore. The same result can be
3472 parent_runcode, which was an eyesore. The same result can be
3467 obtained with Python's regular superclass mechanisms.
3473 obtained with Python's regular superclass mechanisms.
3468
3474
3469 2004-12-17 Fernando Perez <fperez@colorado.edu>
3475 2004-12-17 Fernando Perez <fperez@colorado.edu>
3470
3476
3471 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3477 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3472 reported by Prabhu.
3478 reported by Prabhu.
3473 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3479 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3474 sys.stderr) instead of explicitly calling sys.stderr. This helps
3480 sys.stderr) instead of explicitly calling sys.stderr. This helps
3475 maintain our I/O abstractions clean, for future GUI embeddings.
3481 maintain our I/O abstractions clean, for future GUI embeddings.
3476
3482
3477 * IPython/genutils.py (info): added new utility for sys.stderr
3483 * IPython/genutils.py (info): added new utility for sys.stderr
3478 unified info message handling (thin wrapper around warn()).
3484 unified info message handling (thin wrapper around warn()).
3479
3485
3480 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3486 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3481 composite (dotted) names on verbose exceptions.
3487 composite (dotted) names on verbose exceptions.
3482 (VerboseTB.nullrepr): harden against another kind of errors which
3488 (VerboseTB.nullrepr): harden against another kind of errors which
3483 Python's inspect module can trigger, and which were crashing
3489 Python's inspect module can trigger, and which were crashing
3484 IPython. Thanks to a report by Marco Lombardi
3490 IPython. Thanks to a report by Marco Lombardi
3485 <mlombard-AT-ma010192.hq.eso.org>.
3491 <mlombard-AT-ma010192.hq.eso.org>.
3486
3492
3487 2004-12-13 *** Released version 0.6.6
3493 2004-12-13 *** Released version 0.6.6
3488
3494
3489 2004-12-12 Fernando Perez <fperez@colorado.edu>
3495 2004-12-12 Fernando Perez <fperez@colorado.edu>
3490
3496
3491 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3497 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3492 generated by pygtk upon initialization if it was built without
3498 generated by pygtk upon initialization if it was built without
3493 threads (for matplotlib users). After a crash reported by
3499 threads (for matplotlib users). After a crash reported by
3494 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3500 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3495
3501
3496 * IPython/ipmaker.py (make_IPython): fix small bug in the
3502 * IPython/ipmaker.py (make_IPython): fix small bug in the
3497 import_some parameter for multiple imports.
3503 import_some parameter for multiple imports.
3498
3504
3499 * IPython/iplib.py (ipmagic): simplified the interface of
3505 * IPython/iplib.py (ipmagic): simplified the interface of
3500 ipmagic() to take a single string argument, just as it would be
3506 ipmagic() to take a single string argument, just as it would be
3501 typed at the IPython cmd line.
3507 typed at the IPython cmd line.
3502 (ipalias): Added new ipalias() with an interface identical to
3508 (ipalias): Added new ipalias() with an interface identical to
3503 ipmagic(). This completes exposing a pure python interface to the
3509 ipmagic(). This completes exposing a pure python interface to the
3504 alias and magic system, which can be used in loops or more complex
3510 alias and magic system, which can be used in loops or more complex
3505 code where IPython's automatic line mangling is not active.
3511 code where IPython's automatic line mangling is not active.
3506
3512
3507 * IPython/genutils.py (timing): changed interface of timing to
3513 * IPython/genutils.py (timing): changed interface of timing to
3508 simply run code once, which is the most common case. timings()
3514 simply run code once, which is the most common case. timings()
3509 remains unchanged, for the cases where you want multiple runs.
3515 remains unchanged, for the cases where you want multiple runs.
3510
3516
3511 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3517 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3512 bug where Python2.2 crashes with exec'ing code which does not end
3518 bug where Python2.2 crashes with exec'ing code which does not end
3513 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3519 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3514 before.
3520 before.
3515
3521
3516 2004-12-10 Fernando Perez <fperez@colorado.edu>
3522 2004-12-10 Fernando Perez <fperez@colorado.edu>
3517
3523
3518 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3524 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3519 -t to -T, to accomodate the new -t flag in %run (the %run and
3525 -t to -T, to accomodate the new -t flag in %run (the %run and
3520 %prun options are kind of intermixed, and it's not easy to change
3526 %prun options are kind of intermixed, and it's not easy to change
3521 this with the limitations of python's getopt).
3527 this with the limitations of python's getopt).
3522
3528
3523 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3529 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3524 the execution of scripts. It's not as fine-tuned as timeit.py,
3530 the execution of scripts. It's not as fine-tuned as timeit.py,
3525 but it works from inside ipython (and under 2.2, which lacks
3531 but it works from inside ipython (and under 2.2, which lacks
3526 timeit.py). Optionally a number of runs > 1 can be given for
3532 timeit.py). Optionally a number of runs > 1 can be given for
3527 timing very short-running code.
3533 timing very short-running code.
3528
3534
3529 * IPython/genutils.py (uniq_stable): new routine which returns a
3535 * IPython/genutils.py (uniq_stable): new routine which returns a
3530 list of unique elements in any iterable, but in stable order of
3536 list of unique elements in any iterable, but in stable order of
3531 appearance. I needed this for the ultraTB fixes, and it's a handy
3537 appearance. I needed this for the ultraTB fixes, and it's a handy
3532 utility.
3538 utility.
3533
3539
3534 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3540 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3535 dotted names in Verbose exceptions. This had been broken since
3541 dotted names in Verbose exceptions. This had been broken since
3536 the very start, now x.y will properly be printed in a Verbose
3542 the very start, now x.y will properly be printed in a Verbose
3537 traceback, instead of x being shown and y appearing always as an
3543 traceback, instead of x being shown and y appearing always as an
3538 'undefined global'. Getting this to work was a bit tricky,
3544 'undefined global'. Getting this to work was a bit tricky,
3539 because by default python tokenizers are stateless. Saved by
3545 because by default python tokenizers are stateless. Saved by
3540 python's ability to easily add a bit of state to an arbitrary
3546 python's ability to easily add a bit of state to an arbitrary
3541 function (without needing to build a full-blown callable object).
3547 function (without needing to build a full-blown callable object).
3542
3548
3543 Also big cleanup of this code, which had horrendous runtime
3549 Also big cleanup of this code, which had horrendous runtime
3544 lookups of zillions of attributes for colorization. Moved all
3550 lookups of zillions of attributes for colorization. Moved all
3545 this code into a few templates, which make it cleaner and quicker.
3551 this code into a few templates, which make it cleaner and quicker.
3546
3552
3547 Printout quality was also improved for Verbose exceptions: one
3553 Printout quality was also improved for Verbose exceptions: one
3548 variable per line, and memory addresses are printed (this can be
3554 variable per line, and memory addresses are printed (this can be
3549 quite handy in nasty debugging situations, which is what Verbose
3555 quite handy in nasty debugging situations, which is what Verbose
3550 is for).
3556 is for).
3551
3557
3552 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3558 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3553 the command line as scripts to be loaded by embedded instances.
3559 the command line as scripts to be loaded by embedded instances.
3554 Doing so has the potential for an infinite recursion if there are
3560 Doing so has the potential for an infinite recursion if there are
3555 exceptions thrown in the process. This fixes a strange crash
3561 exceptions thrown in the process. This fixes a strange crash
3556 reported by Philippe MULLER <muller-AT-irit.fr>.
3562 reported by Philippe MULLER <muller-AT-irit.fr>.
3557
3563
3558 2004-12-09 Fernando Perez <fperez@colorado.edu>
3564 2004-12-09 Fernando Perez <fperez@colorado.edu>
3559
3565
3560 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3566 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3561 to reflect new names in matplotlib, which now expose the
3567 to reflect new names in matplotlib, which now expose the
3562 matlab-compatible interface via a pylab module instead of the
3568 matlab-compatible interface via a pylab module instead of the
3563 'matlab' name. The new code is backwards compatible, so users of
3569 'matlab' name. The new code is backwards compatible, so users of
3564 all matplotlib versions are OK. Patch by J. Hunter.
3570 all matplotlib versions are OK. Patch by J. Hunter.
3565
3571
3566 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3572 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3567 of __init__ docstrings for instances (class docstrings are already
3573 of __init__ docstrings for instances (class docstrings are already
3568 automatically printed). Instances with customized docstrings
3574 automatically printed). Instances with customized docstrings
3569 (indep. of the class) are also recognized and all 3 separate
3575 (indep. of the class) are also recognized and all 3 separate
3570 docstrings are printed (instance, class, constructor). After some
3576 docstrings are printed (instance, class, constructor). After some
3571 comments/suggestions by J. Hunter.
3577 comments/suggestions by J. Hunter.
3572
3578
3573 2004-12-05 Fernando Perez <fperez@colorado.edu>
3579 2004-12-05 Fernando Perez <fperez@colorado.edu>
3574
3580
3575 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3581 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3576 warnings when tab-completion fails and triggers an exception.
3582 warnings when tab-completion fails and triggers an exception.
3577
3583
3578 2004-12-03 Fernando Perez <fperez@colorado.edu>
3584 2004-12-03 Fernando Perez <fperez@colorado.edu>
3579
3585
3580 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3586 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3581 be triggered when using 'run -p'. An incorrect option flag was
3587 be triggered when using 'run -p'. An incorrect option flag was
3582 being set ('d' instead of 'D').
3588 being set ('d' instead of 'D').
3583 (manpage): fix missing escaped \- sign.
3589 (manpage): fix missing escaped \- sign.
3584
3590
3585 2004-11-30 *** Released version 0.6.5
3591 2004-11-30 *** Released version 0.6.5
3586
3592
3587 2004-11-30 Fernando Perez <fperez@colorado.edu>
3593 2004-11-30 Fernando Perez <fperez@colorado.edu>
3588
3594
3589 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3595 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3590 setting with -d option.
3596 setting with -d option.
3591
3597
3592 * setup.py (docfiles): Fix problem where the doc glob I was using
3598 * setup.py (docfiles): Fix problem where the doc glob I was using
3593 was COMPLETELY BROKEN. It was giving the right files by pure
3599 was COMPLETELY BROKEN. It was giving the right files by pure
3594 accident, but failed once I tried to include ipython.el. Note:
3600 accident, but failed once I tried to include ipython.el. Note:
3595 glob() does NOT allow you to do exclusion on multiple endings!
3601 glob() does NOT allow you to do exclusion on multiple endings!
3596
3602
3597 2004-11-29 Fernando Perez <fperez@colorado.edu>
3603 2004-11-29 Fernando Perez <fperez@colorado.edu>
3598
3604
3599 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3605 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3600 the manpage as the source. Better formatting & consistency.
3606 the manpage as the source. Better formatting & consistency.
3601
3607
3602 * IPython/Magic.py (magic_run): Added new -d option, to run
3608 * IPython/Magic.py (magic_run): Added new -d option, to run
3603 scripts under the control of the python pdb debugger. Note that
3609 scripts under the control of the python pdb debugger. Note that
3604 this required changing the %prun option -d to -D, to avoid a clash
3610 this required changing the %prun option -d to -D, to avoid a clash
3605 (since %run must pass options to %prun, and getopt is too dumb to
3611 (since %run must pass options to %prun, and getopt is too dumb to
3606 handle options with string values with embedded spaces). Thanks
3612 handle options with string values with embedded spaces). Thanks
3607 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
3613 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
3608 (magic_who_ls): added type matching to %who and %whos, so that one
3614 (magic_who_ls): added type matching to %who and %whos, so that one
3609 can filter their output to only include variables of certain
3615 can filter their output to only include variables of certain
3610 types. Another suggestion by Matthew.
3616 types. Another suggestion by Matthew.
3611 (magic_whos): Added memory summaries in kb and Mb for arrays.
3617 (magic_whos): Added memory summaries in kb and Mb for arrays.
3612 (magic_who): Improve formatting (break lines every 9 vars).
3618 (magic_who): Improve formatting (break lines every 9 vars).
3613
3619
3614 2004-11-28 Fernando Perez <fperez@colorado.edu>
3620 2004-11-28 Fernando Perez <fperez@colorado.edu>
3615
3621
3616 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
3622 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
3617 cache when empty lines were present.
3623 cache when empty lines were present.
3618
3624
3619 2004-11-24 Fernando Perez <fperez@colorado.edu>
3625 2004-11-24 Fernando Perez <fperez@colorado.edu>
3620
3626
3621 * IPython/usage.py (__doc__): document the re-activated threading
3627 * IPython/usage.py (__doc__): document the re-activated threading
3622 options for WX and GTK.
3628 options for WX and GTK.
3623
3629
3624 2004-11-23 Fernando Perez <fperez@colorado.edu>
3630 2004-11-23 Fernando Perez <fperez@colorado.edu>
3625
3631
3626 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
3632 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
3627 the -wthread and -gthread options, along with a new -tk one to try
3633 the -wthread and -gthread options, along with a new -tk one to try
3628 and coordinate Tk threading with wx/gtk. The tk support is very
3634 and coordinate Tk threading with wx/gtk. The tk support is very
3629 platform dependent, since it seems to require Tcl and Tk to be
3635 platform dependent, since it seems to require Tcl and Tk to be
3630 built with threads (Fedora1/2 appears NOT to have it, but in
3636 built with threads (Fedora1/2 appears NOT to have it, but in
3631 Prabhu's Debian boxes it works OK). But even with some Tk
3637 Prabhu's Debian boxes it works OK). But even with some Tk
3632 limitations, this is a great improvement.
3638 limitations, this is a great improvement.
3633
3639
3634 * IPython/Prompts.py (prompt_specials_color): Added \t for time
3640 * IPython/Prompts.py (prompt_specials_color): Added \t for time
3635 info in user prompts. Patch by Prabhu.
3641 info in user prompts. Patch by Prabhu.
3636
3642
3637 2004-11-18 Fernando Perez <fperez@colorado.edu>
3643 2004-11-18 Fernando Perez <fperez@colorado.edu>
3638
3644
3639 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
3645 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
3640 EOFErrors and bail, to avoid infinite loops if a non-terminating
3646 EOFErrors and bail, to avoid infinite loops if a non-terminating
3641 file is fed into ipython. Patch submitted in issue 19 by user,
3647 file is fed into ipython. Patch submitted in issue 19 by user,
3642 many thanks.
3648 many thanks.
3643
3649
3644 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
3650 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
3645 autoquote/parens in continuation prompts, which can cause lots of
3651 autoquote/parens in continuation prompts, which can cause lots of
3646 problems. Closes roundup issue 20.
3652 problems. Closes roundup issue 20.
3647
3653
3648 2004-11-17 Fernando Perez <fperez@colorado.edu>
3654 2004-11-17 Fernando Perez <fperez@colorado.edu>
3649
3655
3650 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3656 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3651 reported as debian bug #280505. I'm not sure my local changelog
3657 reported as debian bug #280505. I'm not sure my local changelog
3652 entry has the proper debian format (Jack?).
3658 entry has the proper debian format (Jack?).
3653
3659
3654 2004-11-08 *** Released version 0.6.4
3660 2004-11-08 *** Released version 0.6.4
3655
3661
3656 2004-11-08 Fernando Perez <fperez@colorado.edu>
3662 2004-11-08 Fernando Perez <fperez@colorado.edu>
3657
3663
3658 * IPython/iplib.py (init_readline): Fix exit message for Windows
3664 * IPython/iplib.py (init_readline): Fix exit message for Windows
3659 when readline is active. Thanks to a report by Eric Jones
3665 when readline is active. Thanks to a report by Eric Jones
3660 <eric-AT-enthought.com>.
3666 <eric-AT-enthought.com>.
3661
3667
3662 2004-11-07 Fernando Perez <fperez@colorado.edu>
3668 2004-11-07 Fernando Perez <fperez@colorado.edu>
3663
3669
3664 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3670 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3665 sometimes seen by win2k/cygwin users.
3671 sometimes seen by win2k/cygwin users.
3666
3672
3667 2004-11-06 Fernando Perez <fperez@colorado.edu>
3673 2004-11-06 Fernando Perez <fperez@colorado.edu>
3668
3674
3669 * IPython/iplib.py (interact): Change the handling of %Exit from
3675 * IPython/iplib.py (interact): Change the handling of %Exit from
3670 trying to propagate a SystemExit to an internal ipython flag.
3676 trying to propagate a SystemExit to an internal ipython flag.
3671 This is less elegant than using Python's exception mechanism, but
3677 This is less elegant than using Python's exception mechanism, but
3672 I can't get that to work reliably with threads, so under -pylab
3678 I can't get that to work reliably with threads, so under -pylab
3673 %Exit was hanging IPython. Cross-thread exception handling is
3679 %Exit was hanging IPython. Cross-thread exception handling is
3674 really a bitch. Thaks to a bug report by Stephen Walton
3680 really a bitch. Thaks to a bug report by Stephen Walton
3675 <stephen.walton-AT-csun.edu>.
3681 <stephen.walton-AT-csun.edu>.
3676
3682
3677 2004-11-04 Fernando Perez <fperez@colorado.edu>
3683 2004-11-04 Fernando Perez <fperez@colorado.edu>
3678
3684
3679 * IPython/iplib.py (raw_input_original): store a pointer to the
3685 * IPython/iplib.py (raw_input_original): store a pointer to the
3680 true raw_input to harden against code which can modify it
3686 true raw_input to harden against code which can modify it
3681 (wx.py.PyShell does this and would otherwise crash ipython).
3687 (wx.py.PyShell does this and would otherwise crash ipython).
3682 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3688 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3683
3689
3684 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3690 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3685 Ctrl-C problem, which does not mess up the input line.
3691 Ctrl-C problem, which does not mess up the input line.
3686
3692
3687 2004-11-03 Fernando Perez <fperez@colorado.edu>
3693 2004-11-03 Fernando Perez <fperez@colorado.edu>
3688
3694
3689 * IPython/Release.py: Changed licensing to BSD, in all files.
3695 * IPython/Release.py: Changed licensing to BSD, in all files.
3690 (name): lowercase name for tarball/RPM release.
3696 (name): lowercase name for tarball/RPM release.
3691
3697
3692 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3698 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3693 use throughout ipython.
3699 use throughout ipython.
3694
3700
3695 * IPython/Magic.py (Magic._ofind): Switch to using the new
3701 * IPython/Magic.py (Magic._ofind): Switch to using the new
3696 OInspect.getdoc() function.
3702 OInspect.getdoc() function.
3697
3703
3698 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3704 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3699 of the line currently being canceled via Ctrl-C. It's extremely
3705 of the line currently being canceled via Ctrl-C. It's extremely
3700 ugly, but I don't know how to do it better (the problem is one of
3706 ugly, but I don't know how to do it better (the problem is one of
3701 handling cross-thread exceptions).
3707 handling cross-thread exceptions).
3702
3708
3703 2004-10-28 Fernando Perez <fperez@colorado.edu>
3709 2004-10-28 Fernando Perez <fperez@colorado.edu>
3704
3710
3705 * IPython/Shell.py (signal_handler): add signal handlers to trap
3711 * IPython/Shell.py (signal_handler): add signal handlers to trap
3706 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3712 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3707 report by Francesc Alted.
3713 report by Francesc Alted.
3708
3714
3709 2004-10-21 Fernando Perez <fperez@colorado.edu>
3715 2004-10-21 Fernando Perez <fperez@colorado.edu>
3710
3716
3711 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3717 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3712 to % for pysh syntax extensions.
3718 to % for pysh syntax extensions.
3713
3719
3714 2004-10-09 Fernando Perez <fperez@colorado.edu>
3720 2004-10-09 Fernando Perez <fperez@colorado.edu>
3715
3721
3716 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3722 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3717 arrays to print a more useful summary, without calling str(arr).
3723 arrays to print a more useful summary, without calling str(arr).
3718 This avoids the problem of extremely lengthy computations which
3724 This avoids the problem of extremely lengthy computations which
3719 occur if arr is large, and appear to the user as a system lockup
3725 occur if arr is large, and appear to the user as a system lockup
3720 with 100% cpu activity. After a suggestion by Kristian Sandberg
3726 with 100% cpu activity. After a suggestion by Kristian Sandberg
3721 <Kristian.Sandberg@colorado.edu>.
3727 <Kristian.Sandberg@colorado.edu>.
3722 (Magic.__init__): fix bug in global magic escapes not being
3728 (Magic.__init__): fix bug in global magic escapes not being
3723 correctly set.
3729 correctly set.
3724
3730
3725 2004-10-08 Fernando Perez <fperez@colorado.edu>
3731 2004-10-08 Fernando Perez <fperez@colorado.edu>
3726
3732
3727 * IPython/Magic.py (__license__): change to absolute imports of
3733 * IPython/Magic.py (__license__): change to absolute imports of
3728 ipython's own internal packages, to start adapting to the absolute
3734 ipython's own internal packages, to start adapting to the absolute
3729 import requirement of PEP-328.
3735 import requirement of PEP-328.
3730
3736
3731 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3737 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3732 files, and standardize author/license marks through the Release
3738 files, and standardize author/license marks through the Release
3733 module instead of having per/file stuff (except for files with
3739 module instead of having per/file stuff (except for files with
3734 particular licenses, like the MIT/PSF-licensed codes).
3740 particular licenses, like the MIT/PSF-licensed codes).
3735
3741
3736 * IPython/Debugger.py: remove dead code for python 2.1
3742 * IPython/Debugger.py: remove dead code for python 2.1
3737
3743
3738 2004-10-04 Fernando Perez <fperez@colorado.edu>
3744 2004-10-04 Fernando Perez <fperez@colorado.edu>
3739
3745
3740 * IPython/iplib.py (ipmagic): New function for accessing magics
3746 * IPython/iplib.py (ipmagic): New function for accessing magics
3741 via a normal python function call.
3747 via a normal python function call.
3742
3748
3743 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3749 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3744 from '@' to '%', to accomodate the new @decorator syntax of python
3750 from '@' to '%', to accomodate the new @decorator syntax of python
3745 2.4.
3751 2.4.
3746
3752
3747 2004-09-29 Fernando Perez <fperez@colorado.edu>
3753 2004-09-29 Fernando Perez <fperez@colorado.edu>
3748
3754
3749 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3755 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3750 matplotlib.use to prevent running scripts which try to switch
3756 matplotlib.use to prevent running scripts which try to switch
3751 interactive backends from within ipython. This will just crash
3757 interactive backends from within ipython. This will just crash
3752 the python interpreter, so we can't allow it (but a detailed error
3758 the python interpreter, so we can't allow it (but a detailed error
3753 is given to the user).
3759 is given to the user).
3754
3760
3755 2004-09-28 Fernando Perez <fperez@colorado.edu>
3761 2004-09-28 Fernando Perez <fperez@colorado.edu>
3756
3762
3757 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3763 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3758 matplotlib-related fixes so that using @run with non-matplotlib
3764 matplotlib-related fixes so that using @run with non-matplotlib
3759 scripts doesn't pop up spurious plot windows. This requires
3765 scripts doesn't pop up spurious plot windows. This requires
3760 matplotlib >= 0.63, where I had to make some changes as well.
3766 matplotlib >= 0.63, where I had to make some changes as well.
3761
3767
3762 * IPython/ipmaker.py (make_IPython): update version requirement to
3768 * IPython/ipmaker.py (make_IPython): update version requirement to
3763 python 2.2.
3769 python 2.2.
3764
3770
3765 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3771 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3766 banner arg for embedded customization.
3772 banner arg for embedded customization.
3767
3773
3768 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3774 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3769 explicit uses of __IP as the IPython's instance name. Now things
3775 explicit uses of __IP as the IPython's instance name. Now things
3770 are properly handled via the shell.name value. The actual code
3776 are properly handled via the shell.name value. The actual code
3771 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3777 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3772 is much better than before. I'll clean things completely when the
3778 is much better than before. I'll clean things completely when the
3773 magic stuff gets a real overhaul.
3779 magic stuff gets a real overhaul.
3774
3780
3775 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3781 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3776 minor changes to debian dir.
3782 minor changes to debian dir.
3777
3783
3778 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3784 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3779 pointer to the shell itself in the interactive namespace even when
3785 pointer to the shell itself in the interactive namespace even when
3780 a user-supplied dict is provided. This is needed for embedding
3786 a user-supplied dict is provided. This is needed for embedding
3781 purposes (found by tests with Michel Sanner).
3787 purposes (found by tests with Michel Sanner).
3782
3788
3783 2004-09-27 Fernando Perez <fperez@colorado.edu>
3789 2004-09-27 Fernando Perez <fperez@colorado.edu>
3784
3790
3785 * IPython/UserConfig/ipythonrc: remove []{} from
3791 * IPython/UserConfig/ipythonrc: remove []{} from
3786 readline_remove_delims, so that things like [modname.<TAB> do
3792 readline_remove_delims, so that things like [modname.<TAB> do
3787 proper completion. This disables [].TAB, but that's a less common
3793 proper completion. This disables [].TAB, but that's a less common
3788 case than module names in list comprehensions, for example.
3794 case than module names in list comprehensions, for example.
3789 Thanks to a report by Andrea Riciputi.
3795 Thanks to a report by Andrea Riciputi.
3790
3796
3791 2004-09-09 Fernando Perez <fperez@colorado.edu>
3797 2004-09-09 Fernando Perez <fperez@colorado.edu>
3792
3798
3793 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3799 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3794 blocking problems in win32 and osx. Fix by John.
3800 blocking problems in win32 and osx. Fix by John.
3795
3801
3796 2004-09-08 Fernando Perez <fperez@colorado.edu>
3802 2004-09-08 Fernando Perez <fperez@colorado.edu>
3797
3803
3798 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3804 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3799 for Win32 and OSX. Fix by John Hunter.
3805 for Win32 and OSX. Fix by John Hunter.
3800
3806
3801 2004-08-30 *** Released version 0.6.3
3807 2004-08-30 *** Released version 0.6.3
3802
3808
3803 2004-08-30 Fernando Perez <fperez@colorado.edu>
3809 2004-08-30 Fernando Perez <fperez@colorado.edu>
3804
3810
3805 * setup.py (isfile): Add manpages to list of dependent files to be
3811 * setup.py (isfile): Add manpages to list of dependent files to be
3806 updated.
3812 updated.
3807
3813
3808 2004-08-27 Fernando Perez <fperez@colorado.edu>
3814 2004-08-27 Fernando Perez <fperez@colorado.edu>
3809
3815
3810 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3816 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3811 for now. They don't really work with standalone WX/GTK code
3817 for now. They don't really work with standalone WX/GTK code
3812 (though matplotlib IS working fine with both of those backends).
3818 (though matplotlib IS working fine with both of those backends).
3813 This will neeed much more testing. I disabled most things with
3819 This will neeed much more testing. I disabled most things with
3814 comments, so turning it back on later should be pretty easy.
3820 comments, so turning it back on later should be pretty easy.
3815
3821
3816 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3822 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3817 autocalling of expressions like r'foo', by modifying the line
3823 autocalling of expressions like r'foo', by modifying the line
3818 split regexp. Closes
3824 split regexp. Closes
3819 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3825 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3820 Riley <ipythonbugs-AT-sabi.net>.
3826 Riley <ipythonbugs-AT-sabi.net>.
3821 (InteractiveShell.mainloop): honor --nobanner with banner
3827 (InteractiveShell.mainloop): honor --nobanner with banner
3822 extensions.
3828 extensions.
3823
3829
3824 * IPython/Shell.py: Significant refactoring of all classes, so
3830 * IPython/Shell.py: Significant refactoring of all classes, so
3825 that we can really support ALL matplotlib backends and threading
3831 that we can really support ALL matplotlib backends and threading
3826 models (John spotted a bug with Tk which required this). Now we
3832 models (John spotted a bug with Tk which required this). Now we
3827 should support single-threaded, WX-threads and GTK-threads, both
3833 should support single-threaded, WX-threads and GTK-threads, both
3828 for generic code and for matplotlib.
3834 for generic code and for matplotlib.
3829
3835
3830 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3836 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3831 -pylab, to simplify things for users. Will also remove the pylab
3837 -pylab, to simplify things for users. Will also remove the pylab
3832 profile, since now all of matplotlib configuration is directly
3838 profile, since now all of matplotlib configuration is directly
3833 handled here. This also reduces startup time.
3839 handled here. This also reduces startup time.
3834
3840
3835 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3841 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3836 shell wasn't being correctly called. Also in IPShellWX.
3842 shell wasn't being correctly called. Also in IPShellWX.
3837
3843
3838 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3844 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3839 fine-tune banner.
3845 fine-tune banner.
3840
3846
3841 * IPython/numutils.py (spike): Deprecate these spike functions,
3847 * IPython/numutils.py (spike): Deprecate these spike functions,
3842 delete (long deprecated) gnuplot_exec handler.
3848 delete (long deprecated) gnuplot_exec handler.
3843
3849
3844 2004-08-26 Fernando Perez <fperez@colorado.edu>
3850 2004-08-26 Fernando Perez <fperez@colorado.edu>
3845
3851
3846 * ipython.1: Update for threading options, plus some others which
3852 * ipython.1: Update for threading options, plus some others which
3847 were missing.
3853 were missing.
3848
3854
3849 * IPython/ipmaker.py (__call__): Added -wthread option for
3855 * IPython/ipmaker.py (__call__): Added -wthread option for
3850 wxpython thread handling. Make sure threading options are only
3856 wxpython thread handling. Make sure threading options are only
3851 valid at the command line.
3857 valid at the command line.
3852
3858
3853 * scripts/ipython: moved shell selection into a factory function
3859 * scripts/ipython: moved shell selection into a factory function
3854 in Shell.py, to keep the starter script to a minimum.
3860 in Shell.py, to keep the starter script to a minimum.
3855
3861
3856 2004-08-25 Fernando Perez <fperez@colorado.edu>
3862 2004-08-25 Fernando Perez <fperez@colorado.edu>
3857
3863
3858 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3864 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3859 John. Along with some recent changes he made to matplotlib, the
3865 John. Along with some recent changes he made to matplotlib, the
3860 next versions of both systems should work very well together.
3866 next versions of both systems should work very well together.
3861
3867
3862 2004-08-24 Fernando Perez <fperez@colorado.edu>
3868 2004-08-24 Fernando Perez <fperez@colorado.edu>
3863
3869
3864 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3870 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3865 tried to switch the profiling to using hotshot, but I'm getting
3871 tried to switch the profiling to using hotshot, but I'm getting
3866 strange errors from prof.runctx() there. I may be misreading the
3872 strange errors from prof.runctx() there. I may be misreading the
3867 docs, but it looks weird. For now the profiling code will
3873 docs, but it looks weird. For now the profiling code will
3868 continue to use the standard profiler.
3874 continue to use the standard profiler.
3869
3875
3870 2004-08-23 Fernando Perez <fperez@colorado.edu>
3876 2004-08-23 Fernando Perez <fperez@colorado.edu>
3871
3877
3872 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3878 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3873 threaded shell, by John Hunter. It's not quite ready yet, but
3879 threaded shell, by John Hunter. It's not quite ready yet, but
3874 close.
3880 close.
3875
3881
3876 2004-08-22 Fernando Perez <fperez@colorado.edu>
3882 2004-08-22 Fernando Perez <fperez@colorado.edu>
3877
3883
3878 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3884 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3879 in Magic and ultraTB.
3885 in Magic and ultraTB.
3880
3886
3881 * ipython.1: document threading options in manpage.
3887 * ipython.1: document threading options in manpage.
3882
3888
3883 * scripts/ipython: Changed name of -thread option to -gthread,
3889 * scripts/ipython: Changed name of -thread option to -gthread,
3884 since this is GTK specific. I want to leave the door open for a
3890 since this is GTK specific. I want to leave the door open for a
3885 -wthread option for WX, which will most likely be necessary. This
3891 -wthread option for WX, which will most likely be necessary. This
3886 change affects usage and ipmaker as well.
3892 change affects usage and ipmaker as well.
3887
3893
3888 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3894 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3889 handle the matplotlib shell issues. Code by John Hunter
3895 handle the matplotlib shell issues. Code by John Hunter
3890 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3896 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3891 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3897 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3892 broken (and disabled for end users) for now, but it puts the
3898 broken (and disabled for end users) for now, but it puts the
3893 infrastructure in place.
3899 infrastructure in place.
3894
3900
3895 2004-08-21 Fernando Perez <fperez@colorado.edu>
3901 2004-08-21 Fernando Perez <fperez@colorado.edu>
3896
3902
3897 * ipythonrc-pylab: Add matplotlib support.
3903 * ipythonrc-pylab: Add matplotlib support.
3898
3904
3899 * matplotlib_config.py: new files for matplotlib support, part of
3905 * matplotlib_config.py: new files for matplotlib support, part of
3900 the pylab profile.
3906 the pylab profile.
3901
3907
3902 * IPython/usage.py (__doc__): documented the threading options.
3908 * IPython/usage.py (__doc__): documented the threading options.
3903
3909
3904 2004-08-20 Fernando Perez <fperez@colorado.edu>
3910 2004-08-20 Fernando Perez <fperez@colorado.edu>
3905
3911
3906 * ipython: Modified the main calling routine to handle the -thread
3912 * ipython: Modified the main calling routine to handle the -thread
3907 and -mpthread options. This needs to be done as a top-level hack,
3913 and -mpthread options. This needs to be done as a top-level hack,
3908 because it determines which class to instantiate for IPython
3914 because it determines which class to instantiate for IPython
3909 itself.
3915 itself.
3910
3916
3911 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3917 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3912 classes to support multithreaded GTK operation without blocking,
3918 classes to support multithreaded GTK operation without blocking,
3913 and matplotlib with all backends. This is a lot of still very
3919 and matplotlib with all backends. This is a lot of still very
3914 experimental code, and threads are tricky. So it may still have a
3920 experimental code, and threads are tricky. So it may still have a
3915 few rough edges... This code owes a lot to
3921 few rough edges... This code owes a lot to
3916 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3922 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3917 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3923 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3918 to John Hunter for all the matplotlib work.
3924 to John Hunter for all the matplotlib work.
3919
3925
3920 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3926 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3921 options for gtk thread and matplotlib support.
3927 options for gtk thread and matplotlib support.
3922
3928
3923 2004-08-16 Fernando Perez <fperez@colorado.edu>
3929 2004-08-16 Fernando Perez <fperez@colorado.edu>
3924
3930
3925 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3931 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3926 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3932 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3927 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3933 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3928
3934
3929 2004-08-11 Fernando Perez <fperez@colorado.edu>
3935 2004-08-11 Fernando Perez <fperez@colorado.edu>
3930
3936
3931 * setup.py (isfile): Fix build so documentation gets updated for
3937 * setup.py (isfile): Fix build so documentation gets updated for
3932 rpms (it was only done for .tgz builds).
3938 rpms (it was only done for .tgz builds).
3933
3939
3934 2004-08-10 Fernando Perez <fperez@colorado.edu>
3940 2004-08-10 Fernando Perez <fperez@colorado.edu>
3935
3941
3936 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3942 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3937
3943
3938 * iplib.py : Silence syntax error exceptions in tab-completion.
3944 * iplib.py : Silence syntax error exceptions in tab-completion.
3939
3945
3940 2004-08-05 Fernando Perez <fperez@colorado.edu>
3946 2004-08-05 Fernando Perez <fperez@colorado.edu>
3941
3947
3942 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3948 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3943 'color off' mark for continuation prompts. This was causing long
3949 'color off' mark for continuation prompts. This was causing long
3944 continuation lines to mis-wrap.
3950 continuation lines to mis-wrap.
3945
3951
3946 2004-08-01 Fernando Perez <fperez@colorado.edu>
3952 2004-08-01 Fernando Perez <fperez@colorado.edu>
3947
3953
3948 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3954 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3949 for building ipython to be a parameter. All this is necessary
3955 for building ipython to be a parameter. All this is necessary
3950 right now to have a multithreaded version, but this insane
3956 right now to have a multithreaded version, but this insane
3951 non-design will be cleaned up soon. For now, it's a hack that
3957 non-design will be cleaned up soon. For now, it's a hack that
3952 works.
3958 works.
3953
3959
3954 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3960 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3955 args in various places. No bugs so far, but it's a dangerous
3961 args in various places. No bugs so far, but it's a dangerous
3956 practice.
3962 practice.
3957
3963
3958 2004-07-31 Fernando Perez <fperez@colorado.edu>
3964 2004-07-31 Fernando Perez <fperez@colorado.edu>
3959
3965
3960 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3966 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3961 fix completion of files with dots in their names under most
3967 fix completion of files with dots in their names under most
3962 profiles (pysh was OK because the completion order is different).
3968 profiles (pysh was OK because the completion order is different).
3963
3969
3964 2004-07-27 Fernando Perez <fperez@colorado.edu>
3970 2004-07-27 Fernando Perez <fperez@colorado.edu>
3965
3971
3966 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3972 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3967 keywords manually, b/c the one in keyword.py was removed in python
3973 keywords manually, b/c the one in keyword.py was removed in python
3968 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3974 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3969 This is NOT a bug under python 2.3 and earlier.
3975 This is NOT a bug under python 2.3 and earlier.
3970
3976
3971 2004-07-26 Fernando Perez <fperez@colorado.edu>
3977 2004-07-26 Fernando Perez <fperez@colorado.edu>
3972
3978
3973 * IPython/ultraTB.py (VerboseTB.text): Add another
3979 * IPython/ultraTB.py (VerboseTB.text): Add another
3974 linecache.checkcache() call to try to prevent inspect.py from
3980 linecache.checkcache() call to try to prevent inspect.py from
3975 crashing under python 2.3. I think this fixes
3981 crashing under python 2.3. I think this fixes
3976 http://www.scipy.net/roundup/ipython/issue17.
3982 http://www.scipy.net/roundup/ipython/issue17.
3977
3983
3978 2004-07-26 *** Released version 0.6.2
3984 2004-07-26 *** Released version 0.6.2
3979
3985
3980 2004-07-26 Fernando Perez <fperez@colorado.edu>
3986 2004-07-26 Fernando Perez <fperez@colorado.edu>
3981
3987
3982 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3988 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3983 fail for any number.
3989 fail for any number.
3984 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3990 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3985 empty bookmarks.
3991 empty bookmarks.
3986
3992
3987 2004-07-26 *** Released version 0.6.1
3993 2004-07-26 *** Released version 0.6.1
3988
3994
3989 2004-07-26 Fernando Perez <fperez@colorado.edu>
3995 2004-07-26 Fernando Perez <fperez@colorado.edu>
3990
3996
3991 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3997 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3992
3998
3993 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3999 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3994 escaping '()[]{}' in filenames.
4000 escaping '()[]{}' in filenames.
3995
4001
3996 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4002 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3997 Python 2.2 users who lack a proper shlex.split.
4003 Python 2.2 users who lack a proper shlex.split.
3998
4004
3999 2004-07-19 Fernando Perez <fperez@colorado.edu>
4005 2004-07-19 Fernando Perez <fperez@colorado.edu>
4000
4006
4001 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4007 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4002 for reading readline's init file. I follow the normal chain:
4008 for reading readline's init file. I follow the normal chain:
4003 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4009 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4004 report by Mike Heeter. This closes
4010 report by Mike Heeter. This closes
4005 http://www.scipy.net/roundup/ipython/issue16.
4011 http://www.scipy.net/roundup/ipython/issue16.
4006
4012
4007 2004-07-18 Fernando Perez <fperez@colorado.edu>
4013 2004-07-18 Fernando Perez <fperez@colorado.edu>
4008
4014
4009 * IPython/iplib.py (__init__): Add better handling of '\' under
4015 * IPython/iplib.py (__init__): Add better handling of '\' under
4010 Win32 for filenames. After a patch by Ville.
4016 Win32 for filenames. After a patch by Ville.
4011
4017
4012 2004-07-17 Fernando Perez <fperez@colorado.edu>
4018 2004-07-17 Fernando Perez <fperez@colorado.edu>
4013
4019
4014 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4020 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4015 autocalling would be triggered for 'foo is bar' if foo is
4021 autocalling would be triggered for 'foo is bar' if foo is
4016 callable. I also cleaned up the autocall detection code to use a
4022 callable. I also cleaned up the autocall detection code to use a
4017 regexp, which is faster. Bug reported by Alexander Schmolck.
4023 regexp, which is faster. Bug reported by Alexander Schmolck.
4018
4024
4019 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4025 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4020 '?' in them would confuse the help system. Reported by Alex
4026 '?' in them would confuse the help system. Reported by Alex
4021 Schmolck.
4027 Schmolck.
4022
4028
4023 2004-07-16 Fernando Perez <fperez@colorado.edu>
4029 2004-07-16 Fernando Perez <fperez@colorado.edu>
4024
4030
4025 * IPython/GnuplotInteractive.py (__all__): added plot2.
4031 * IPython/GnuplotInteractive.py (__all__): added plot2.
4026
4032
4027 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4033 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4028 plotting dictionaries, lists or tuples of 1d arrays.
4034 plotting dictionaries, lists or tuples of 1d arrays.
4029
4035
4030 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4036 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4031 optimizations.
4037 optimizations.
4032
4038
4033 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4039 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4034 the information which was there from Janko's original IPP code:
4040 the information which was there from Janko's original IPP code:
4035
4041
4036 03.05.99 20:53 porto.ifm.uni-kiel.de
4042 03.05.99 20:53 porto.ifm.uni-kiel.de
4037 --Started changelog.
4043 --Started changelog.
4038 --make clear do what it say it does
4044 --make clear do what it say it does
4039 --added pretty output of lines from inputcache
4045 --added pretty output of lines from inputcache
4040 --Made Logger a mixin class, simplifies handling of switches
4046 --Made Logger a mixin class, simplifies handling of switches
4041 --Added own completer class. .string<TAB> expands to last history
4047 --Added own completer class. .string<TAB> expands to last history
4042 line which starts with string. The new expansion is also present
4048 line which starts with string. The new expansion is also present
4043 with Ctrl-r from the readline library. But this shows, who this
4049 with Ctrl-r from the readline library. But this shows, who this
4044 can be done for other cases.
4050 can be done for other cases.
4045 --Added convention that all shell functions should accept a
4051 --Added convention that all shell functions should accept a
4046 parameter_string This opens the door for different behaviour for
4052 parameter_string This opens the door for different behaviour for
4047 each function. @cd is a good example of this.
4053 each function. @cd is a good example of this.
4048
4054
4049 04.05.99 12:12 porto.ifm.uni-kiel.de
4055 04.05.99 12:12 porto.ifm.uni-kiel.de
4050 --added logfile rotation
4056 --added logfile rotation
4051 --added new mainloop method which freezes first the namespace
4057 --added new mainloop method which freezes first the namespace
4052
4058
4053 07.05.99 21:24 porto.ifm.uni-kiel.de
4059 07.05.99 21:24 porto.ifm.uni-kiel.de
4054 --added the docreader classes. Now there is a help system.
4060 --added the docreader classes. Now there is a help system.
4055 -This is only a first try. Currently it's not easy to put new
4061 -This is only a first try. Currently it's not easy to put new
4056 stuff in the indices. But this is the way to go. Info would be
4062 stuff in the indices. But this is the way to go. Info would be
4057 better, but HTML is every where and not everybody has an info
4063 better, but HTML is every where and not everybody has an info
4058 system installed and it's not so easy to change html-docs to info.
4064 system installed and it's not so easy to change html-docs to info.
4059 --added global logfile option
4065 --added global logfile option
4060 --there is now a hook for object inspection method pinfo needs to
4066 --there is now a hook for object inspection method pinfo needs to
4061 be provided for this. Can be reached by two '??'.
4067 be provided for this. Can be reached by two '??'.
4062
4068
4063 08.05.99 20:51 porto.ifm.uni-kiel.de
4069 08.05.99 20:51 porto.ifm.uni-kiel.de
4064 --added a README
4070 --added a README
4065 --bug in rc file. Something has changed so functions in the rc
4071 --bug in rc file. Something has changed so functions in the rc
4066 file need to reference the shell and not self. Not clear if it's a
4072 file need to reference the shell and not self. Not clear if it's a
4067 bug or feature.
4073 bug or feature.
4068 --changed rc file for new behavior
4074 --changed rc file for new behavior
4069
4075
4070 2004-07-15 Fernando Perez <fperez@colorado.edu>
4076 2004-07-15 Fernando Perez <fperez@colorado.edu>
4071
4077
4072 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4078 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4073 cache was falling out of sync in bizarre manners when multi-line
4079 cache was falling out of sync in bizarre manners when multi-line
4074 input was present. Minor optimizations and cleanup.
4080 input was present. Minor optimizations and cleanup.
4075
4081
4076 (Logger): Remove old Changelog info for cleanup. This is the
4082 (Logger): Remove old Changelog info for cleanup. This is the
4077 information which was there from Janko's original code:
4083 information which was there from Janko's original code:
4078
4084
4079 Changes to Logger: - made the default log filename a parameter
4085 Changes to Logger: - made the default log filename a parameter
4080
4086
4081 - put a check for lines beginning with !@? in log(). Needed
4087 - put a check for lines beginning with !@? in log(). Needed
4082 (even if the handlers properly log their lines) for mid-session
4088 (even if the handlers properly log their lines) for mid-session
4083 logging activation to work properly. Without this, lines logged
4089 logging activation to work properly. Without this, lines logged
4084 in mid session, which get read from the cache, would end up
4090 in mid session, which get read from the cache, would end up
4085 'bare' (with !@? in the open) in the log. Now they are caught
4091 'bare' (with !@? in the open) in the log. Now they are caught
4086 and prepended with a #.
4092 and prepended with a #.
4087
4093
4088 * IPython/iplib.py (InteractiveShell.init_readline): added check
4094 * IPython/iplib.py (InteractiveShell.init_readline): added check
4089 in case MagicCompleter fails to be defined, so we don't crash.
4095 in case MagicCompleter fails to be defined, so we don't crash.
4090
4096
4091 2004-07-13 Fernando Perez <fperez@colorado.edu>
4097 2004-07-13 Fernando Perez <fperez@colorado.edu>
4092
4098
4093 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4099 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4094 of EPS if the requested filename ends in '.eps'.
4100 of EPS if the requested filename ends in '.eps'.
4095
4101
4096 2004-07-04 Fernando Perez <fperez@colorado.edu>
4102 2004-07-04 Fernando Perez <fperez@colorado.edu>
4097
4103
4098 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4104 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4099 escaping of quotes when calling the shell.
4105 escaping of quotes when calling the shell.
4100
4106
4101 2004-07-02 Fernando Perez <fperez@colorado.edu>
4107 2004-07-02 Fernando Perez <fperez@colorado.edu>
4102
4108
4103 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4109 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4104 gettext not working because we were clobbering '_'. Fixes
4110 gettext not working because we were clobbering '_'. Fixes
4105 http://www.scipy.net/roundup/ipython/issue6.
4111 http://www.scipy.net/roundup/ipython/issue6.
4106
4112
4107 2004-07-01 Fernando Perez <fperez@colorado.edu>
4113 2004-07-01 Fernando Perez <fperez@colorado.edu>
4108
4114
4109 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4115 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4110 into @cd. Patch by Ville.
4116 into @cd. Patch by Ville.
4111
4117
4112 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4118 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4113 new function to store things after ipmaker runs. Patch by Ville.
4119 new function to store things after ipmaker runs. Patch by Ville.
4114 Eventually this will go away once ipmaker is removed and the class
4120 Eventually this will go away once ipmaker is removed and the class
4115 gets cleaned up, but for now it's ok. Key functionality here is
4121 gets cleaned up, but for now it's ok. Key functionality here is
4116 the addition of the persistent storage mechanism, a dict for
4122 the addition of the persistent storage mechanism, a dict for
4117 keeping data across sessions (for now just bookmarks, but more can
4123 keeping data across sessions (for now just bookmarks, but more can
4118 be implemented later).
4124 be implemented later).
4119
4125
4120 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4126 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4121 persistent across sections. Patch by Ville, I modified it
4127 persistent across sections. Patch by Ville, I modified it
4122 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4128 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4123 added a '-l' option to list all bookmarks.
4129 added a '-l' option to list all bookmarks.
4124
4130
4125 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4131 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4126 center for cleanup. Registered with atexit.register(). I moved
4132 center for cleanup. Registered with atexit.register(). I moved
4127 here the old exit_cleanup(). After a patch by Ville.
4133 here the old exit_cleanup(). After a patch by Ville.
4128
4134
4129 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4135 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4130 characters in the hacked shlex_split for python 2.2.
4136 characters in the hacked shlex_split for python 2.2.
4131
4137
4132 * IPython/iplib.py (file_matches): more fixes to filenames with
4138 * IPython/iplib.py (file_matches): more fixes to filenames with
4133 whitespace in them. It's not perfect, but limitations in python's
4139 whitespace in them. It's not perfect, but limitations in python's
4134 readline make it impossible to go further.
4140 readline make it impossible to go further.
4135
4141
4136 2004-06-29 Fernando Perez <fperez@colorado.edu>
4142 2004-06-29 Fernando Perez <fperez@colorado.edu>
4137
4143
4138 * IPython/iplib.py (file_matches): escape whitespace correctly in
4144 * IPython/iplib.py (file_matches): escape whitespace correctly in
4139 filename completions. Bug reported by Ville.
4145 filename completions. Bug reported by Ville.
4140
4146
4141 2004-06-28 Fernando Perez <fperez@colorado.edu>
4147 2004-06-28 Fernando Perez <fperez@colorado.edu>
4142
4148
4143 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4149 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4144 the history file will be called 'history-PROFNAME' (or just
4150 the history file will be called 'history-PROFNAME' (or just
4145 'history' if no profile is loaded). I was getting annoyed at
4151 'history' if no profile is loaded). I was getting annoyed at
4146 getting my Numerical work history clobbered by pysh sessions.
4152 getting my Numerical work history clobbered by pysh sessions.
4147
4153
4148 * IPython/iplib.py (InteractiveShell.__init__): Internal
4154 * IPython/iplib.py (InteractiveShell.__init__): Internal
4149 getoutputerror() function so that we can honor the system_verbose
4155 getoutputerror() function so that we can honor the system_verbose
4150 flag for _all_ system calls. I also added escaping of #
4156 flag for _all_ system calls. I also added escaping of #
4151 characters here to avoid confusing Itpl.
4157 characters here to avoid confusing Itpl.
4152
4158
4153 * IPython/Magic.py (shlex_split): removed call to shell in
4159 * IPython/Magic.py (shlex_split): removed call to shell in
4154 parse_options and replaced it with shlex.split(). The annoying
4160 parse_options and replaced it with shlex.split(). The annoying
4155 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4161 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4156 to backport it from 2.3, with several frail hacks (the shlex
4162 to backport it from 2.3, with several frail hacks (the shlex
4157 module is rather limited in 2.2). Thanks to a suggestion by Ville
4163 module is rather limited in 2.2). Thanks to a suggestion by Ville
4158 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4164 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4159 problem.
4165 problem.
4160
4166
4161 (Magic.magic_system_verbose): new toggle to print the actual
4167 (Magic.magic_system_verbose): new toggle to print the actual
4162 system calls made by ipython. Mainly for debugging purposes.
4168 system calls made by ipython. Mainly for debugging purposes.
4163
4169
4164 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4170 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4165 doesn't support persistence. Reported (and fix suggested) by
4171 doesn't support persistence. Reported (and fix suggested) by
4166 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4172 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4167
4173
4168 2004-06-26 Fernando Perez <fperez@colorado.edu>
4174 2004-06-26 Fernando Perez <fperez@colorado.edu>
4169
4175
4170 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4176 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4171 continue prompts.
4177 continue prompts.
4172
4178
4173 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4179 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4174 function (basically a big docstring) and a few more things here to
4180 function (basically a big docstring) and a few more things here to
4175 speedup startup. pysh.py is now very lightweight. We want because
4181 speedup startup. pysh.py is now very lightweight. We want because
4176 it gets execfile'd, while InterpreterExec gets imported, so
4182 it gets execfile'd, while InterpreterExec gets imported, so
4177 byte-compilation saves time.
4183 byte-compilation saves time.
4178
4184
4179 2004-06-25 Fernando Perez <fperez@colorado.edu>
4185 2004-06-25 Fernando Perez <fperez@colorado.edu>
4180
4186
4181 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4187 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4182 -NUM', which was recently broken.
4188 -NUM', which was recently broken.
4183
4189
4184 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4190 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4185 in multi-line input (but not !!, which doesn't make sense there).
4191 in multi-line input (but not !!, which doesn't make sense there).
4186
4192
4187 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4193 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4188 It's just too useful, and people can turn it off in the less
4194 It's just too useful, and people can turn it off in the less
4189 common cases where it's a problem.
4195 common cases where it's a problem.
4190
4196
4191 2004-06-24 Fernando Perez <fperez@colorado.edu>
4197 2004-06-24 Fernando Perez <fperez@colorado.edu>
4192
4198
4193 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4199 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4194 special syntaxes (like alias calling) is now allied in multi-line
4200 special syntaxes (like alias calling) is now allied in multi-line
4195 input. This is still _very_ experimental, but it's necessary for
4201 input. This is still _very_ experimental, but it's necessary for
4196 efficient shell usage combining python looping syntax with system
4202 efficient shell usage combining python looping syntax with system
4197 calls. For now it's restricted to aliases, I don't think it
4203 calls. For now it's restricted to aliases, I don't think it
4198 really even makes sense to have this for magics.
4204 really even makes sense to have this for magics.
4199
4205
4200 2004-06-23 Fernando Perez <fperez@colorado.edu>
4206 2004-06-23 Fernando Perez <fperez@colorado.edu>
4201
4207
4202 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4208 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4203 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4209 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4204
4210
4205 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4211 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4206 extensions under Windows (after code sent by Gary Bishop). The
4212 extensions under Windows (after code sent by Gary Bishop). The
4207 extensions considered 'executable' are stored in IPython's rc
4213 extensions considered 'executable' are stored in IPython's rc
4208 structure as win_exec_ext.
4214 structure as win_exec_ext.
4209
4215
4210 * IPython/genutils.py (shell): new function, like system() but
4216 * IPython/genutils.py (shell): new function, like system() but
4211 without return value. Very useful for interactive shell work.
4217 without return value. Very useful for interactive shell work.
4212
4218
4213 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4219 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4214 delete aliases.
4220 delete aliases.
4215
4221
4216 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4222 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4217 sure that the alias table doesn't contain python keywords.
4223 sure that the alias table doesn't contain python keywords.
4218
4224
4219 2004-06-21 Fernando Perez <fperez@colorado.edu>
4225 2004-06-21 Fernando Perez <fperez@colorado.edu>
4220
4226
4221 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4227 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4222 non-existent items are found in $PATH. Reported by Thorsten.
4228 non-existent items are found in $PATH. Reported by Thorsten.
4223
4229
4224 2004-06-20 Fernando Perez <fperez@colorado.edu>
4230 2004-06-20 Fernando Perez <fperez@colorado.edu>
4225
4231
4226 * IPython/iplib.py (complete): modified the completer so that the
4232 * IPython/iplib.py (complete): modified the completer so that the
4227 order of priorities can be easily changed at runtime.
4233 order of priorities can be easily changed at runtime.
4228
4234
4229 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4235 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4230 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4236 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4231
4237
4232 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4238 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4233 expand Python variables prepended with $ in all system calls. The
4239 expand Python variables prepended with $ in all system calls. The
4234 same was done to InteractiveShell.handle_shell_escape. Now all
4240 same was done to InteractiveShell.handle_shell_escape. Now all
4235 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4241 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4236 expansion of python variables and expressions according to the
4242 expansion of python variables and expressions according to the
4237 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4243 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4238
4244
4239 Though PEP-215 has been rejected, a similar (but simpler) one
4245 Though PEP-215 has been rejected, a similar (but simpler) one
4240 seems like it will go into Python 2.4, PEP-292 -
4246 seems like it will go into Python 2.4, PEP-292 -
4241 http://www.python.org/peps/pep-0292.html.
4247 http://www.python.org/peps/pep-0292.html.
4242
4248
4243 I'll keep the full syntax of PEP-215, since IPython has since the
4249 I'll keep the full syntax of PEP-215, since IPython has since the
4244 start used Ka-Ping Yee's reference implementation discussed there
4250 start used Ka-Ping Yee's reference implementation discussed there
4245 (Itpl), and I actually like the powerful semantics it offers.
4251 (Itpl), and I actually like the powerful semantics it offers.
4246
4252
4247 In order to access normal shell variables, the $ has to be escaped
4253 In order to access normal shell variables, the $ has to be escaped
4248 via an extra $. For example:
4254 via an extra $. For example:
4249
4255
4250 In [7]: PATH='a python variable'
4256 In [7]: PATH='a python variable'
4251
4257
4252 In [8]: !echo $PATH
4258 In [8]: !echo $PATH
4253 a python variable
4259 a python variable
4254
4260
4255 In [9]: !echo $$PATH
4261 In [9]: !echo $$PATH
4256 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4262 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4257
4263
4258 (Magic.parse_options): escape $ so the shell doesn't evaluate
4264 (Magic.parse_options): escape $ so the shell doesn't evaluate
4259 things prematurely.
4265 things prematurely.
4260
4266
4261 * IPython/iplib.py (InteractiveShell.call_alias): added the
4267 * IPython/iplib.py (InteractiveShell.call_alias): added the
4262 ability for aliases to expand python variables via $.
4268 ability for aliases to expand python variables via $.
4263
4269
4264 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4270 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4265 system, now there's a @rehash/@rehashx pair of magics. These work
4271 system, now there's a @rehash/@rehashx pair of magics. These work
4266 like the csh rehash command, and can be invoked at any time. They
4272 like the csh rehash command, and can be invoked at any time. They
4267 build a table of aliases to everything in the user's $PATH
4273 build a table of aliases to everything in the user's $PATH
4268 (@rehash uses everything, @rehashx is slower but only adds
4274 (@rehash uses everything, @rehashx is slower but only adds
4269 executable files). With this, the pysh.py-based shell profile can
4275 executable files). With this, the pysh.py-based shell profile can
4270 now simply call rehash upon startup, and full access to all
4276 now simply call rehash upon startup, and full access to all
4271 programs in the user's path is obtained.
4277 programs in the user's path is obtained.
4272
4278
4273 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4279 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4274 functionality is now fully in place. I removed the old dynamic
4280 functionality is now fully in place. I removed the old dynamic
4275 code generation based approach, in favor of a much lighter one
4281 code generation based approach, in favor of a much lighter one
4276 based on a simple dict. The advantage is that this allows me to
4282 based on a simple dict. The advantage is that this allows me to
4277 now have thousands of aliases with negligible cost (unthinkable
4283 now have thousands of aliases with negligible cost (unthinkable
4278 with the old system).
4284 with the old system).
4279
4285
4280 2004-06-19 Fernando Perez <fperez@colorado.edu>
4286 2004-06-19 Fernando Perez <fperez@colorado.edu>
4281
4287
4282 * IPython/iplib.py (__init__): extended MagicCompleter class to
4288 * IPython/iplib.py (__init__): extended MagicCompleter class to
4283 also complete (last in priority) on user aliases.
4289 also complete (last in priority) on user aliases.
4284
4290
4285 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4291 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4286 call to eval.
4292 call to eval.
4287 (ItplNS.__init__): Added a new class which functions like Itpl,
4293 (ItplNS.__init__): Added a new class which functions like Itpl,
4288 but allows configuring the namespace for the evaluation to occur
4294 but allows configuring the namespace for the evaluation to occur
4289 in.
4295 in.
4290
4296
4291 2004-06-18 Fernando Perez <fperez@colorado.edu>
4297 2004-06-18 Fernando Perez <fperez@colorado.edu>
4292
4298
4293 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4299 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4294 better message when 'exit' or 'quit' are typed (a common newbie
4300 better message when 'exit' or 'quit' are typed (a common newbie
4295 confusion).
4301 confusion).
4296
4302
4297 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4303 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4298 check for Windows users.
4304 check for Windows users.
4299
4305
4300 * IPython/iplib.py (InteractiveShell.user_setup): removed
4306 * IPython/iplib.py (InteractiveShell.user_setup): removed
4301 disabling of colors for Windows. I'll test at runtime and issue a
4307 disabling of colors for Windows. I'll test at runtime and issue a
4302 warning if Gary's readline isn't found, as to nudge users to
4308 warning if Gary's readline isn't found, as to nudge users to
4303 download it.
4309 download it.
4304
4310
4305 2004-06-16 Fernando Perez <fperez@colorado.edu>
4311 2004-06-16 Fernando Perez <fperez@colorado.edu>
4306
4312
4307 * IPython/genutils.py (Stream.__init__): changed to print errors
4313 * IPython/genutils.py (Stream.__init__): changed to print errors
4308 to sys.stderr. I had a circular dependency here. Now it's
4314 to sys.stderr. I had a circular dependency here. Now it's
4309 possible to run ipython as IDLE's shell (consider this pre-alpha,
4315 possible to run ipython as IDLE's shell (consider this pre-alpha,
4310 since true stdout things end up in the starting terminal instead
4316 since true stdout things end up in the starting terminal instead
4311 of IDLE's out).
4317 of IDLE's out).
4312
4318
4313 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4319 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4314 users who haven't # updated their prompt_in2 definitions. Remove
4320 users who haven't # updated their prompt_in2 definitions. Remove
4315 eventually.
4321 eventually.
4316 (multiple_replace): added credit to original ASPN recipe.
4322 (multiple_replace): added credit to original ASPN recipe.
4317
4323
4318 2004-06-15 Fernando Perez <fperez@colorado.edu>
4324 2004-06-15 Fernando Perez <fperez@colorado.edu>
4319
4325
4320 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4326 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4321 list of auto-defined aliases.
4327 list of auto-defined aliases.
4322
4328
4323 2004-06-13 Fernando Perez <fperez@colorado.edu>
4329 2004-06-13 Fernando Perez <fperez@colorado.edu>
4324
4330
4325 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4331 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4326 install was really requested (so setup.py can be used for other
4332 install was really requested (so setup.py can be used for other
4327 things under Windows).
4333 things under Windows).
4328
4334
4329 2004-06-10 Fernando Perez <fperez@colorado.edu>
4335 2004-06-10 Fernando Perez <fperez@colorado.edu>
4330
4336
4331 * IPython/Logger.py (Logger.create_log): Manually remove any old
4337 * IPython/Logger.py (Logger.create_log): Manually remove any old
4332 backup, since os.remove may fail under Windows. Fixes bug
4338 backup, since os.remove may fail under Windows. Fixes bug
4333 reported by Thorsten.
4339 reported by Thorsten.
4334
4340
4335 2004-06-09 Fernando Perez <fperez@colorado.edu>
4341 2004-06-09 Fernando Perez <fperez@colorado.edu>
4336
4342
4337 * examples/example-embed.py: fixed all references to %n (replaced
4343 * examples/example-embed.py: fixed all references to %n (replaced
4338 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4344 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4339 for all examples and the manual as well.
4345 for all examples and the manual as well.
4340
4346
4341 2004-06-08 Fernando Perez <fperez@colorado.edu>
4347 2004-06-08 Fernando Perez <fperez@colorado.edu>
4342
4348
4343 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4349 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4344 alignment and color management. All 3 prompt subsystems now
4350 alignment and color management. All 3 prompt subsystems now
4345 inherit from BasePrompt.
4351 inherit from BasePrompt.
4346
4352
4347 * tools/release: updates for windows installer build and tag rpms
4353 * tools/release: updates for windows installer build and tag rpms
4348 with python version (since paths are fixed).
4354 with python version (since paths are fixed).
4349
4355
4350 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4356 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4351 which will become eventually obsolete. Also fixed the default
4357 which will become eventually obsolete. Also fixed the default
4352 prompt_in2 to use \D, so at least new users start with the correct
4358 prompt_in2 to use \D, so at least new users start with the correct
4353 defaults.
4359 defaults.
4354 WARNING: Users with existing ipythonrc files will need to apply
4360 WARNING: Users with existing ipythonrc files will need to apply
4355 this fix manually!
4361 this fix manually!
4356
4362
4357 * setup.py: make windows installer (.exe). This is finally the
4363 * setup.py: make windows installer (.exe). This is finally the
4358 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4364 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4359 which I hadn't included because it required Python 2.3 (or recent
4365 which I hadn't included because it required Python 2.3 (or recent
4360 distutils).
4366 distutils).
4361
4367
4362 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4368 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4363 usage of new '\D' escape.
4369 usage of new '\D' escape.
4364
4370
4365 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4371 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4366 lacks os.getuid())
4372 lacks os.getuid())
4367 (CachedOutput.set_colors): Added the ability to turn coloring
4373 (CachedOutput.set_colors): Added the ability to turn coloring
4368 on/off with @colors even for manually defined prompt colors. It
4374 on/off with @colors even for manually defined prompt colors. It
4369 uses a nasty global, but it works safely and via the generic color
4375 uses a nasty global, but it works safely and via the generic color
4370 handling mechanism.
4376 handling mechanism.
4371 (Prompt2.__init__): Introduced new escape '\D' for continuation
4377 (Prompt2.__init__): Introduced new escape '\D' for continuation
4372 prompts. It represents the counter ('\#') as dots.
4378 prompts. It represents the counter ('\#') as dots.
4373 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4379 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4374 need to update their ipythonrc files and replace '%n' with '\D' in
4380 need to update their ipythonrc files and replace '%n' with '\D' in
4375 their prompt_in2 settings everywhere. Sorry, but there's
4381 their prompt_in2 settings everywhere. Sorry, but there's
4376 otherwise no clean way to get all prompts to properly align. The
4382 otherwise no clean way to get all prompts to properly align. The
4377 ipythonrc shipped with IPython has been updated.
4383 ipythonrc shipped with IPython has been updated.
4378
4384
4379 2004-06-07 Fernando Perez <fperez@colorado.edu>
4385 2004-06-07 Fernando Perez <fperez@colorado.edu>
4380
4386
4381 * setup.py (isfile): Pass local_icons option to latex2html, so the
4387 * setup.py (isfile): Pass local_icons option to latex2html, so the
4382 resulting HTML file is self-contained. Thanks to
4388 resulting HTML file is self-contained. Thanks to
4383 dryice-AT-liu.com.cn for the tip.
4389 dryice-AT-liu.com.cn for the tip.
4384
4390
4385 * pysh.py: I created a new profile 'shell', which implements a
4391 * pysh.py: I created a new profile 'shell', which implements a
4386 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4392 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4387 system shell, nor will it become one anytime soon. It's mainly
4393 system shell, nor will it become one anytime soon. It's mainly
4388 meant to illustrate the use of the new flexible bash-like prompts.
4394 meant to illustrate the use of the new flexible bash-like prompts.
4389 I guess it could be used by hardy souls for true shell management,
4395 I guess it could be used by hardy souls for true shell management,
4390 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4396 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4391 profile. This uses the InterpreterExec extension provided by
4397 profile. This uses the InterpreterExec extension provided by
4392 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4398 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4393
4399
4394 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4400 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4395 auto-align itself with the length of the previous input prompt
4401 auto-align itself with the length of the previous input prompt
4396 (taking into account the invisible color escapes).
4402 (taking into account the invisible color escapes).
4397 (CachedOutput.__init__): Large restructuring of this class. Now
4403 (CachedOutput.__init__): Large restructuring of this class. Now
4398 all three prompts (primary1, primary2, output) are proper objects,
4404 all three prompts (primary1, primary2, output) are proper objects,
4399 managed by the 'parent' CachedOutput class. The code is still a
4405 managed by the 'parent' CachedOutput class. The code is still a
4400 bit hackish (all prompts share state via a pointer to the cache),
4406 bit hackish (all prompts share state via a pointer to the cache),
4401 but it's overall far cleaner than before.
4407 but it's overall far cleaner than before.
4402
4408
4403 * IPython/genutils.py (getoutputerror): modified to add verbose,
4409 * IPython/genutils.py (getoutputerror): modified to add verbose,
4404 debug and header options. This makes the interface of all getout*
4410 debug and header options. This makes the interface of all getout*
4405 functions uniform.
4411 functions uniform.
4406 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4412 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4407
4413
4408 * IPython/Magic.py (Magic.default_option): added a function to
4414 * IPython/Magic.py (Magic.default_option): added a function to
4409 allow registering default options for any magic command. This
4415 allow registering default options for any magic command. This
4410 makes it easy to have profiles which customize the magics globally
4416 makes it easy to have profiles which customize the magics globally
4411 for a certain use. The values set through this function are
4417 for a certain use. The values set through this function are
4412 picked up by the parse_options() method, which all magics should
4418 picked up by the parse_options() method, which all magics should
4413 use to parse their options.
4419 use to parse their options.
4414
4420
4415 * IPython/genutils.py (warn): modified the warnings framework to
4421 * IPython/genutils.py (warn): modified the warnings framework to
4416 use the Term I/O class. I'm trying to slowly unify all of
4422 use the Term I/O class. I'm trying to slowly unify all of
4417 IPython's I/O operations to pass through Term.
4423 IPython's I/O operations to pass through Term.
4418
4424
4419 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4425 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4420 the secondary prompt to correctly match the length of the primary
4426 the secondary prompt to correctly match the length of the primary
4421 one for any prompt. Now multi-line code will properly line up
4427 one for any prompt. Now multi-line code will properly line up
4422 even for path dependent prompts, such as the new ones available
4428 even for path dependent prompts, such as the new ones available
4423 via the prompt_specials.
4429 via the prompt_specials.
4424
4430
4425 2004-06-06 Fernando Perez <fperez@colorado.edu>
4431 2004-06-06 Fernando Perez <fperez@colorado.edu>
4426
4432
4427 * IPython/Prompts.py (prompt_specials): Added the ability to have
4433 * IPython/Prompts.py (prompt_specials): Added the ability to have
4428 bash-like special sequences in the prompts, which get
4434 bash-like special sequences in the prompts, which get
4429 automatically expanded. Things like hostname, current working
4435 automatically expanded. Things like hostname, current working
4430 directory and username are implemented already, but it's easy to
4436 directory and username are implemented already, but it's easy to
4431 add more in the future. Thanks to a patch by W.J. van der Laan
4437 add more in the future. Thanks to a patch by W.J. van der Laan
4432 <gnufnork-AT-hetdigitalegat.nl>
4438 <gnufnork-AT-hetdigitalegat.nl>
4433 (prompt_specials): Added color support for prompt strings, so
4439 (prompt_specials): Added color support for prompt strings, so
4434 users can define arbitrary color setups for their prompts.
4440 users can define arbitrary color setups for their prompts.
4435
4441
4436 2004-06-05 Fernando Perez <fperez@colorado.edu>
4442 2004-06-05 Fernando Perez <fperez@colorado.edu>
4437
4443
4438 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4444 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4439 code to load Gary Bishop's readline and configure it
4445 code to load Gary Bishop's readline and configure it
4440 automatically. Thanks to Gary for help on this.
4446 automatically. Thanks to Gary for help on this.
4441
4447
4442 2004-06-01 Fernando Perez <fperez@colorado.edu>
4448 2004-06-01 Fernando Perez <fperez@colorado.edu>
4443
4449
4444 * IPython/Logger.py (Logger.create_log): fix bug for logging
4450 * IPython/Logger.py (Logger.create_log): fix bug for logging
4445 with no filename (previous fix was incomplete).
4451 with no filename (previous fix was incomplete).
4446
4452
4447 2004-05-25 Fernando Perez <fperez@colorado.edu>
4453 2004-05-25 Fernando Perez <fperez@colorado.edu>
4448
4454
4449 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4455 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4450 parens would get passed to the shell.
4456 parens would get passed to the shell.
4451
4457
4452 2004-05-20 Fernando Perez <fperez@colorado.edu>
4458 2004-05-20 Fernando Perez <fperez@colorado.edu>
4453
4459
4454 * IPython/Magic.py (Magic.magic_prun): changed default profile
4460 * IPython/Magic.py (Magic.magic_prun): changed default profile
4455 sort order to 'time' (the more common profiling need).
4461 sort order to 'time' (the more common profiling need).
4456
4462
4457 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4463 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4458 so that source code shown is guaranteed in sync with the file on
4464 so that source code shown is guaranteed in sync with the file on
4459 disk (also changed in psource). Similar fix to the one for
4465 disk (also changed in psource). Similar fix to the one for
4460 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4466 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4461 <yann.ledu-AT-noos.fr>.
4467 <yann.ledu-AT-noos.fr>.
4462
4468
4463 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4469 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4464 with a single option would not be correctly parsed. Closes
4470 with a single option would not be correctly parsed. Closes
4465 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4471 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4466 introduced in 0.6.0 (on 2004-05-06).
4472 introduced in 0.6.0 (on 2004-05-06).
4467
4473
4468 2004-05-13 *** Released version 0.6.0
4474 2004-05-13 *** Released version 0.6.0
4469
4475
4470 2004-05-13 Fernando Perez <fperez@colorado.edu>
4476 2004-05-13 Fernando Perez <fperez@colorado.edu>
4471
4477
4472 * debian/: Added debian/ directory to CVS, so that debian support
4478 * debian/: Added debian/ directory to CVS, so that debian support
4473 is publicly accessible. The debian package is maintained by Jack
4479 is publicly accessible. The debian package is maintained by Jack
4474 Moffit <jack-AT-xiph.org>.
4480 Moffit <jack-AT-xiph.org>.
4475
4481
4476 * Documentation: included the notes about an ipython-based system
4482 * Documentation: included the notes about an ipython-based system
4477 shell (the hypothetical 'pysh') into the new_design.pdf document,
4483 shell (the hypothetical 'pysh') into the new_design.pdf document,
4478 so that these ideas get distributed to users along with the
4484 so that these ideas get distributed to users along with the
4479 official documentation.
4485 official documentation.
4480
4486
4481 2004-05-10 Fernando Perez <fperez@colorado.edu>
4487 2004-05-10 Fernando Perez <fperez@colorado.edu>
4482
4488
4483 * IPython/Logger.py (Logger.create_log): fix recently introduced
4489 * IPython/Logger.py (Logger.create_log): fix recently introduced
4484 bug (misindented line) where logstart would fail when not given an
4490 bug (misindented line) where logstart would fail when not given an
4485 explicit filename.
4491 explicit filename.
4486
4492
4487 2004-05-09 Fernando Perez <fperez@colorado.edu>
4493 2004-05-09 Fernando Perez <fperez@colorado.edu>
4488
4494
4489 * IPython/Magic.py (Magic.parse_options): skip system call when
4495 * IPython/Magic.py (Magic.parse_options): skip system call when
4490 there are no options to look for. Faster, cleaner for the common
4496 there are no options to look for. Faster, cleaner for the common
4491 case.
4497 case.
4492
4498
4493 * Documentation: many updates to the manual: describing Windows
4499 * Documentation: many updates to the manual: describing Windows
4494 support better, Gnuplot updates, credits, misc small stuff. Also
4500 support better, Gnuplot updates, credits, misc small stuff. Also
4495 updated the new_design doc a bit.
4501 updated the new_design doc a bit.
4496
4502
4497 2004-05-06 *** Released version 0.6.0.rc1
4503 2004-05-06 *** Released version 0.6.0.rc1
4498
4504
4499 2004-05-06 Fernando Perez <fperez@colorado.edu>
4505 2004-05-06 Fernando Perez <fperez@colorado.edu>
4500
4506
4501 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4507 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4502 operations to use the vastly more efficient list/''.join() method.
4508 operations to use the vastly more efficient list/''.join() method.
4503 (FormattedTB.text): Fix
4509 (FormattedTB.text): Fix
4504 http://www.scipy.net/roundup/ipython/issue12 - exception source
4510 http://www.scipy.net/roundup/ipython/issue12 - exception source
4505 extract not updated after reload. Thanks to Mike Salib
4511 extract not updated after reload. Thanks to Mike Salib
4506 <msalib-AT-mit.edu> for pinning the source of the problem.
4512 <msalib-AT-mit.edu> for pinning the source of the problem.
4507 Fortunately, the solution works inside ipython and doesn't require
4513 Fortunately, the solution works inside ipython and doesn't require
4508 any changes to python proper.
4514 any changes to python proper.
4509
4515
4510 * IPython/Magic.py (Magic.parse_options): Improved to process the
4516 * IPython/Magic.py (Magic.parse_options): Improved to process the
4511 argument list as a true shell would (by actually using the
4517 argument list as a true shell would (by actually using the
4512 underlying system shell). This way, all @magics automatically get
4518 underlying system shell). This way, all @magics automatically get
4513 shell expansion for variables. Thanks to a comment by Alex
4519 shell expansion for variables. Thanks to a comment by Alex
4514 Schmolck.
4520 Schmolck.
4515
4521
4516 2004-04-04 Fernando Perez <fperez@colorado.edu>
4522 2004-04-04 Fernando Perez <fperez@colorado.edu>
4517
4523
4518 * IPython/iplib.py (InteractiveShell.interact): Added a special
4524 * IPython/iplib.py (InteractiveShell.interact): Added a special
4519 trap for a debugger quit exception, which is basically impossible
4525 trap for a debugger quit exception, which is basically impossible
4520 to handle by normal mechanisms, given what pdb does to the stack.
4526 to handle by normal mechanisms, given what pdb does to the stack.
4521 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4527 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4522
4528
4523 2004-04-03 Fernando Perez <fperez@colorado.edu>
4529 2004-04-03 Fernando Perez <fperez@colorado.edu>
4524
4530
4525 * IPython/genutils.py (Term): Standardized the names of the Term
4531 * IPython/genutils.py (Term): Standardized the names of the Term
4526 class streams to cin/cout/cerr, following C++ naming conventions
4532 class streams to cin/cout/cerr, following C++ naming conventions
4527 (I can't use in/out/err because 'in' is not a valid attribute
4533 (I can't use in/out/err because 'in' is not a valid attribute
4528 name).
4534 name).
4529
4535
4530 * IPython/iplib.py (InteractiveShell.interact): don't increment
4536 * IPython/iplib.py (InteractiveShell.interact): don't increment
4531 the prompt if there's no user input. By Daniel 'Dang' Griffith
4537 the prompt if there's no user input. By Daniel 'Dang' Griffith
4532 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4538 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4533 Francois Pinard.
4539 Francois Pinard.
4534
4540
4535 2004-04-02 Fernando Perez <fperez@colorado.edu>
4541 2004-04-02 Fernando Perez <fperez@colorado.edu>
4536
4542
4537 * IPython/genutils.py (Stream.__init__): Modified to survive at
4543 * IPython/genutils.py (Stream.__init__): Modified to survive at
4538 least importing in contexts where stdin/out/err aren't true file
4544 least importing in contexts where stdin/out/err aren't true file
4539 objects, such as PyCrust (they lack fileno() and mode). However,
4545 objects, such as PyCrust (they lack fileno() and mode). However,
4540 the recovery facilities which rely on these things existing will
4546 the recovery facilities which rely on these things existing will
4541 not work.
4547 not work.
4542
4548
4543 2004-04-01 Fernando Perez <fperez@colorado.edu>
4549 2004-04-01 Fernando Perez <fperez@colorado.edu>
4544
4550
4545 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4551 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4546 use the new getoutputerror() function, so it properly
4552 use the new getoutputerror() function, so it properly
4547 distinguishes stdout/err.
4553 distinguishes stdout/err.
4548
4554
4549 * IPython/genutils.py (getoutputerror): added a function to
4555 * IPython/genutils.py (getoutputerror): added a function to
4550 capture separately the standard output and error of a command.
4556 capture separately the standard output and error of a command.
4551 After a comment from dang on the mailing lists. This code is
4557 After a comment from dang on the mailing lists. This code is
4552 basically a modified version of commands.getstatusoutput(), from
4558 basically a modified version of commands.getstatusoutput(), from
4553 the standard library.
4559 the standard library.
4554
4560
4555 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4561 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4556 '!!' as a special syntax (shorthand) to access @sx.
4562 '!!' as a special syntax (shorthand) to access @sx.
4557
4563
4558 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4564 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4559 command and return its output as a list split on '\n'.
4565 command and return its output as a list split on '\n'.
4560
4566
4561 2004-03-31 Fernando Perez <fperez@colorado.edu>
4567 2004-03-31 Fernando Perez <fperez@colorado.edu>
4562
4568
4563 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4569 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4564 method to dictionaries used as FakeModule instances if they lack
4570 method to dictionaries used as FakeModule instances if they lack
4565 it. At least pydoc in python2.3 breaks for runtime-defined
4571 it. At least pydoc in python2.3 breaks for runtime-defined
4566 functions without this hack. At some point I need to _really_
4572 functions without this hack. At some point I need to _really_
4567 understand what FakeModule is doing, because it's a gross hack.
4573 understand what FakeModule is doing, because it's a gross hack.
4568 But it solves Arnd's problem for now...
4574 But it solves Arnd's problem for now...
4569
4575
4570 2004-02-27 Fernando Perez <fperez@colorado.edu>
4576 2004-02-27 Fernando Perez <fperez@colorado.edu>
4571
4577
4572 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4578 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4573 mode would behave erratically. Also increased the number of
4579 mode would behave erratically. Also increased the number of
4574 possible logs in rotate mod to 999. Thanks to Rod Holland
4580 possible logs in rotate mod to 999. Thanks to Rod Holland
4575 <rhh@StructureLABS.com> for the report and fixes.
4581 <rhh@StructureLABS.com> for the report and fixes.
4576
4582
4577 2004-02-26 Fernando Perez <fperez@colorado.edu>
4583 2004-02-26 Fernando Perez <fperez@colorado.edu>
4578
4584
4579 * IPython/genutils.py (page): Check that the curses module really
4585 * IPython/genutils.py (page): Check that the curses module really
4580 has the initscr attribute before trying to use it. For some
4586 has the initscr attribute before trying to use it. For some
4581 reason, the Solaris curses module is missing this. I think this
4587 reason, the Solaris curses module is missing this. I think this
4582 should be considered a Solaris python bug, but I'm not sure.
4588 should be considered a Solaris python bug, but I'm not sure.
4583
4589
4584 2004-01-17 Fernando Perez <fperez@colorado.edu>
4590 2004-01-17 Fernando Perez <fperez@colorado.edu>
4585
4591
4586 * IPython/genutils.py (Stream.__init__): Changes to try to make
4592 * IPython/genutils.py (Stream.__init__): Changes to try to make
4587 ipython robust against stdin/out/err being closed by the user.
4593 ipython robust against stdin/out/err being closed by the user.
4588 This is 'user error' (and blocks a normal python session, at least
4594 This is 'user error' (and blocks a normal python session, at least
4589 the stdout case). However, Ipython should be able to survive such
4595 the stdout case). However, Ipython should be able to survive such
4590 instances of abuse as gracefully as possible. To simplify the
4596 instances of abuse as gracefully as possible. To simplify the
4591 coding and maintain compatibility with Gary Bishop's Term
4597 coding and maintain compatibility with Gary Bishop's Term
4592 contributions, I've made use of classmethods for this. I think
4598 contributions, I've made use of classmethods for this. I think
4593 this introduces a dependency on python 2.2.
4599 this introduces a dependency on python 2.2.
4594
4600
4595 2004-01-13 Fernando Perez <fperez@colorado.edu>
4601 2004-01-13 Fernando Perez <fperez@colorado.edu>
4596
4602
4597 * IPython/numutils.py (exp_safe): simplified the code a bit and
4603 * IPython/numutils.py (exp_safe): simplified the code a bit and
4598 removed the need for importing the kinds module altogether.
4604 removed the need for importing the kinds module altogether.
4599
4605
4600 2004-01-06 Fernando Perez <fperez@colorado.edu>
4606 2004-01-06 Fernando Perez <fperez@colorado.edu>
4601
4607
4602 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4608 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4603 a magic function instead, after some community feedback. No
4609 a magic function instead, after some community feedback. No
4604 special syntax will exist for it, but its name is deliberately
4610 special syntax will exist for it, but its name is deliberately
4605 very short.
4611 very short.
4606
4612
4607 2003-12-20 Fernando Perez <fperez@colorado.edu>
4613 2003-12-20 Fernando Perez <fperez@colorado.edu>
4608
4614
4609 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
4615 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
4610 new functionality, to automagically assign the result of a shell
4616 new functionality, to automagically assign the result of a shell
4611 command to a variable. I'll solicit some community feedback on
4617 command to a variable. I'll solicit some community feedback on
4612 this before making it permanent.
4618 this before making it permanent.
4613
4619
4614 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
4620 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
4615 requested about callables for which inspect couldn't obtain a
4621 requested about callables for which inspect couldn't obtain a
4616 proper argspec. Thanks to a crash report sent by Etienne
4622 proper argspec. Thanks to a crash report sent by Etienne
4617 Posthumus <etienne-AT-apple01.cs.vu.nl>.
4623 Posthumus <etienne-AT-apple01.cs.vu.nl>.
4618
4624
4619 2003-12-09 Fernando Perez <fperez@colorado.edu>
4625 2003-12-09 Fernando Perez <fperez@colorado.edu>
4620
4626
4621 * IPython/genutils.py (page): patch for the pager to work across
4627 * IPython/genutils.py (page): patch for the pager to work across
4622 various versions of Windows. By Gary Bishop.
4628 various versions of Windows. By Gary Bishop.
4623
4629
4624 2003-12-04 Fernando Perez <fperez@colorado.edu>
4630 2003-12-04 Fernando Perez <fperez@colorado.edu>
4625
4631
4626 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
4632 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
4627 Gnuplot.py version 1.7, whose internal names changed quite a bit.
4633 Gnuplot.py version 1.7, whose internal names changed quite a bit.
4628 While I tested this and it looks ok, there may still be corner
4634 While I tested this and it looks ok, there may still be corner
4629 cases I've missed.
4635 cases I've missed.
4630
4636
4631 2003-12-01 Fernando Perez <fperez@colorado.edu>
4637 2003-12-01 Fernando Perez <fperez@colorado.edu>
4632
4638
4633 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
4639 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
4634 where a line like 'p,q=1,2' would fail because the automagic
4640 where a line like 'p,q=1,2' would fail because the automagic
4635 system would be triggered for @p.
4641 system would be triggered for @p.
4636
4642
4637 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
4643 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
4638 cleanups, code unmodified.
4644 cleanups, code unmodified.
4639
4645
4640 * IPython/genutils.py (Term): added a class for IPython to handle
4646 * IPython/genutils.py (Term): added a class for IPython to handle
4641 output. In most cases it will just be a proxy for stdout/err, but
4647 output. In most cases it will just be a proxy for stdout/err, but
4642 having this allows modifications to be made for some platforms,
4648 having this allows modifications to be made for some platforms,
4643 such as handling color escapes under Windows. All of this code
4649 such as handling color escapes under Windows. All of this code
4644 was contributed by Gary Bishop, with minor modifications by me.
4650 was contributed by Gary Bishop, with minor modifications by me.
4645 The actual changes affect many files.
4651 The actual changes affect many files.
4646
4652
4647 2003-11-30 Fernando Perez <fperez@colorado.edu>
4653 2003-11-30 Fernando Perez <fperez@colorado.edu>
4648
4654
4649 * IPython/iplib.py (file_matches): new completion code, courtesy
4655 * IPython/iplib.py (file_matches): new completion code, courtesy
4650 of Jeff Collins. This enables filename completion again under
4656 of Jeff Collins. This enables filename completion again under
4651 python 2.3, which disabled it at the C level.
4657 python 2.3, which disabled it at the C level.
4652
4658
4653 2003-11-11 Fernando Perez <fperez@colorado.edu>
4659 2003-11-11 Fernando Perez <fperez@colorado.edu>
4654
4660
4655 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4661 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4656 for Numeric.array(map(...)), but often convenient.
4662 for Numeric.array(map(...)), but often convenient.
4657
4663
4658 2003-11-05 Fernando Perez <fperez@colorado.edu>
4664 2003-11-05 Fernando Perez <fperez@colorado.edu>
4659
4665
4660 * IPython/numutils.py (frange): Changed a call from int() to
4666 * IPython/numutils.py (frange): Changed a call from int() to
4661 int(round()) to prevent a problem reported with arange() in the
4667 int(round()) to prevent a problem reported with arange() in the
4662 numpy list.
4668 numpy list.
4663
4669
4664 2003-10-06 Fernando Perez <fperez@colorado.edu>
4670 2003-10-06 Fernando Perez <fperez@colorado.edu>
4665
4671
4666 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4672 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4667 prevent crashes if sys lacks an argv attribute (it happens with
4673 prevent crashes if sys lacks an argv attribute (it happens with
4668 embedded interpreters which build a bare-bones sys module).
4674 embedded interpreters which build a bare-bones sys module).
4669 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4675 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4670
4676
4671 2003-09-24 Fernando Perez <fperez@colorado.edu>
4677 2003-09-24 Fernando Perez <fperez@colorado.edu>
4672
4678
4673 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4679 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4674 to protect against poorly written user objects where __getattr__
4680 to protect against poorly written user objects where __getattr__
4675 raises exceptions other than AttributeError. Thanks to a bug
4681 raises exceptions other than AttributeError. Thanks to a bug
4676 report by Oliver Sander <osander-AT-gmx.de>.
4682 report by Oliver Sander <osander-AT-gmx.de>.
4677
4683
4678 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4684 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4679 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4685 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4680
4686
4681 2003-09-09 Fernando Perez <fperez@colorado.edu>
4687 2003-09-09 Fernando Perez <fperez@colorado.edu>
4682
4688
4683 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4689 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4684 unpacking a list whith a callable as first element would
4690 unpacking a list whith a callable as first element would
4685 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4691 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4686 Collins.
4692 Collins.
4687
4693
4688 2003-08-25 *** Released version 0.5.0
4694 2003-08-25 *** Released version 0.5.0
4689
4695
4690 2003-08-22 Fernando Perez <fperez@colorado.edu>
4696 2003-08-22 Fernando Perez <fperez@colorado.edu>
4691
4697
4692 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4698 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4693 improperly defined user exceptions. Thanks to feedback from Mark
4699 improperly defined user exceptions. Thanks to feedback from Mark
4694 Russell <mrussell-AT-verio.net>.
4700 Russell <mrussell-AT-verio.net>.
4695
4701
4696 2003-08-20 Fernando Perez <fperez@colorado.edu>
4702 2003-08-20 Fernando Perez <fperez@colorado.edu>
4697
4703
4698 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4704 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4699 printing so that it would print multi-line string forms starting
4705 printing so that it would print multi-line string forms starting
4700 with a new line. This way the formatting is better respected for
4706 with a new line. This way the formatting is better respected for
4701 objects which work hard to make nice string forms.
4707 objects which work hard to make nice string forms.
4702
4708
4703 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4709 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4704 autocall would overtake data access for objects with both
4710 autocall would overtake data access for objects with both
4705 __getitem__ and __call__.
4711 __getitem__ and __call__.
4706
4712
4707 2003-08-19 *** Released version 0.5.0-rc1
4713 2003-08-19 *** Released version 0.5.0-rc1
4708
4714
4709 2003-08-19 Fernando Perez <fperez@colorado.edu>
4715 2003-08-19 Fernando Perez <fperez@colorado.edu>
4710
4716
4711 * IPython/deep_reload.py (load_tail): single tiny change here
4717 * IPython/deep_reload.py (load_tail): single tiny change here
4712 seems to fix the long-standing bug of dreload() failing to work
4718 seems to fix the long-standing bug of dreload() failing to work
4713 for dotted names. But this module is pretty tricky, so I may have
4719 for dotted names. But this module is pretty tricky, so I may have
4714 missed some subtlety. Needs more testing!.
4720 missed some subtlety. Needs more testing!.
4715
4721
4716 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4722 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4717 exceptions which have badly implemented __str__ methods.
4723 exceptions which have badly implemented __str__ methods.
4718 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4724 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4719 which I've been getting reports about from Python 2.3 users. I
4725 which I've been getting reports about from Python 2.3 users. I
4720 wish I had a simple test case to reproduce the problem, so I could
4726 wish I had a simple test case to reproduce the problem, so I could
4721 either write a cleaner workaround or file a bug report if
4727 either write a cleaner workaround or file a bug report if
4722 necessary.
4728 necessary.
4723
4729
4724 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4730 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4725 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4731 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4726 a bug report by Tjabo Kloppenburg.
4732 a bug report by Tjabo Kloppenburg.
4727
4733
4728 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4734 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4729 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4735 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4730 seems rather unstable. Thanks to a bug report by Tjabo
4736 seems rather unstable. Thanks to a bug report by Tjabo
4731 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4737 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4732
4738
4733 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4739 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4734 this out soon because of the critical fixes in the inner loop for
4740 this out soon because of the critical fixes in the inner loop for
4735 generators.
4741 generators.
4736
4742
4737 * IPython/Magic.py (Magic.getargspec): removed. This (and
4743 * IPython/Magic.py (Magic.getargspec): removed. This (and
4738 _get_def) have been obsoleted by OInspect for a long time, I
4744 _get_def) have been obsoleted by OInspect for a long time, I
4739 hadn't noticed that they were dead code.
4745 hadn't noticed that they were dead code.
4740 (Magic._ofind): restored _ofind functionality for a few literals
4746 (Magic._ofind): restored _ofind functionality for a few literals
4741 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4747 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4742 for things like "hello".capitalize?, since that would require a
4748 for things like "hello".capitalize?, since that would require a
4743 potentially dangerous eval() again.
4749 potentially dangerous eval() again.
4744
4750
4745 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4751 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4746 logic a bit more to clean up the escapes handling and minimize the
4752 logic a bit more to clean up the escapes handling and minimize the
4747 use of _ofind to only necessary cases. The interactive 'feel' of
4753 use of _ofind to only necessary cases. The interactive 'feel' of
4748 IPython should have improved quite a bit with the changes in
4754 IPython should have improved quite a bit with the changes in
4749 _prefilter and _ofind (besides being far safer than before).
4755 _prefilter and _ofind (besides being far safer than before).
4750
4756
4751 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4757 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4752 obscure, never reported). Edit would fail to find the object to
4758 obscure, never reported). Edit would fail to find the object to
4753 edit under some circumstances.
4759 edit under some circumstances.
4754 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4760 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4755 which were causing double-calling of generators. Those eval calls
4761 which were causing double-calling of generators. Those eval calls
4756 were _very_ dangerous, since code with side effects could be
4762 were _very_ dangerous, since code with side effects could be
4757 triggered. As they say, 'eval is evil'... These were the
4763 triggered. As they say, 'eval is evil'... These were the
4758 nastiest evals in IPython. Besides, _ofind is now far simpler,
4764 nastiest evals in IPython. Besides, _ofind is now far simpler,
4759 and it should also be quite a bit faster. Its use of inspect is
4765 and it should also be quite a bit faster. Its use of inspect is
4760 also safer, so perhaps some of the inspect-related crashes I've
4766 also safer, so perhaps some of the inspect-related crashes I've
4761 seen lately with Python 2.3 might be taken care of. That will
4767 seen lately with Python 2.3 might be taken care of. That will
4762 need more testing.
4768 need more testing.
4763
4769
4764 2003-08-17 Fernando Perez <fperez@colorado.edu>
4770 2003-08-17 Fernando Perez <fperez@colorado.edu>
4765
4771
4766 * IPython/iplib.py (InteractiveShell._prefilter): significant
4772 * IPython/iplib.py (InteractiveShell._prefilter): significant
4767 simplifications to the logic for handling user escapes. Faster
4773 simplifications to the logic for handling user escapes. Faster
4768 and simpler code.
4774 and simpler code.
4769
4775
4770 2003-08-14 Fernando Perez <fperez@colorado.edu>
4776 2003-08-14 Fernando Perez <fperez@colorado.edu>
4771
4777
4772 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4778 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4773 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4779 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4774 but it should be quite a bit faster. And the recursive version
4780 but it should be quite a bit faster. And the recursive version
4775 generated O(log N) intermediate storage for all rank>1 arrays,
4781 generated O(log N) intermediate storage for all rank>1 arrays,
4776 even if they were contiguous.
4782 even if they were contiguous.
4777 (l1norm): Added this function.
4783 (l1norm): Added this function.
4778 (norm): Added this function for arbitrary norms (including
4784 (norm): Added this function for arbitrary norms (including
4779 l-infinity). l1 and l2 are still special cases for convenience
4785 l-infinity). l1 and l2 are still special cases for convenience
4780 and speed.
4786 and speed.
4781
4787
4782 2003-08-03 Fernando Perez <fperez@colorado.edu>
4788 2003-08-03 Fernando Perez <fperez@colorado.edu>
4783
4789
4784 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4790 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4785 exceptions, which now raise PendingDeprecationWarnings in Python
4791 exceptions, which now raise PendingDeprecationWarnings in Python
4786 2.3. There were some in Magic and some in Gnuplot2.
4792 2.3. There were some in Magic and some in Gnuplot2.
4787
4793
4788 2003-06-30 Fernando Perez <fperez@colorado.edu>
4794 2003-06-30 Fernando Perez <fperez@colorado.edu>
4789
4795
4790 * IPython/genutils.py (page): modified to call curses only for
4796 * IPython/genutils.py (page): modified to call curses only for
4791 terminals where TERM=='xterm'. After problems under many other
4797 terminals where TERM=='xterm'. After problems under many other
4792 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4798 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4793
4799
4794 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4800 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4795 would be triggered when readline was absent. This was just an old
4801 would be triggered when readline was absent. This was just an old
4796 debugging statement I'd forgotten to take out.
4802 debugging statement I'd forgotten to take out.
4797
4803
4798 2003-06-20 Fernando Perez <fperez@colorado.edu>
4804 2003-06-20 Fernando Perez <fperez@colorado.edu>
4799
4805
4800 * IPython/genutils.py (clock): modified to return only user time
4806 * IPython/genutils.py (clock): modified to return only user time
4801 (not counting system time), after a discussion on scipy. While
4807 (not counting system time), after a discussion on scipy. While
4802 system time may be a useful quantity occasionally, it may much
4808 system time may be a useful quantity occasionally, it may much
4803 more easily be skewed by occasional swapping or other similar
4809 more easily be skewed by occasional swapping or other similar
4804 activity.
4810 activity.
4805
4811
4806 2003-06-05 Fernando Perez <fperez@colorado.edu>
4812 2003-06-05 Fernando Perez <fperez@colorado.edu>
4807
4813
4808 * IPython/numutils.py (identity): new function, for building
4814 * IPython/numutils.py (identity): new function, for building
4809 arbitrary rank Kronecker deltas (mostly backwards compatible with
4815 arbitrary rank Kronecker deltas (mostly backwards compatible with
4810 Numeric.identity)
4816 Numeric.identity)
4811
4817
4812 2003-06-03 Fernando Perez <fperez@colorado.edu>
4818 2003-06-03 Fernando Perez <fperez@colorado.edu>
4813
4819
4814 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4820 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4815 arguments passed to magics with spaces, to allow trailing '\' to
4821 arguments passed to magics with spaces, to allow trailing '\' to
4816 work normally (mainly for Windows users).
4822 work normally (mainly for Windows users).
4817
4823
4818 2003-05-29 Fernando Perez <fperez@colorado.edu>
4824 2003-05-29 Fernando Perez <fperez@colorado.edu>
4819
4825
4820 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4826 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4821 instead of pydoc.help. This fixes a bizarre behavior where
4827 instead of pydoc.help. This fixes a bizarre behavior where
4822 printing '%s' % locals() would trigger the help system. Now
4828 printing '%s' % locals() would trigger the help system. Now
4823 ipython behaves like normal python does.
4829 ipython behaves like normal python does.
4824
4830
4825 Note that if one does 'from pydoc import help', the bizarre
4831 Note that if one does 'from pydoc import help', the bizarre
4826 behavior returns, but this will also happen in normal python, so
4832 behavior returns, but this will also happen in normal python, so
4827 it's not an ipython bug anymore (it has to do with how pydoc.help
4833 it's not an ipython bug anymore (it has to do with how pydoc.help
4828 is implemented).
4834 is implemented).
4829
4835
4830 2003-05-22 Fernando Perez <fperez@colorado.edu>
4836 2003-05-22 Fernando Perez <fperez@colorado.edu>
4831
4837
4832 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4838 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4833 return [] instead of None when nothing matches, also match to end
4839 return [] instead of None when nothing matches, also match to end
4834 of line. Patch by Gary Bishop.
4840 of line. Patch by Gary Bishop.
4835
4841
4836 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4842 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4837 protection as before, for files passed on the command line. This
4843 protection as before, for files passed on the command line. This
4838 prevents the CrashHandler from kicking in if user files call into
4844 prevents the CrashHandler from kicking in if user files call into
4839 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4845 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4840 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4846 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4841
4847
4842 2003-05-20 *** Released version 0.4.0
4848 2003-05-20 *** Released version 0.4.0
4843
4849
4844 2003-05-20 Fernando Perez <fperez@colorado.edu>
4850 2003-05-20 Fernando Perez <fperez@colorado.edu>
4845
4851
4846 * setup.py: added support for manpages. It's a bit hackish b/c of
4852 * setup.py: added support for manpages. It's a bit hackish b/c of
4847 a bug in the way the bdist_rpm distutils target handles gzipped
4853 a bug in the way the bdist_rpm distutils target handles gzipped
4848 manpages, but it works. After a patch by Jack.
4854 manpages, but it works. After a patch by Jack.
4849
4855
4850 2003-05-19 Fernando Perez <fperez@colorado.edu>
4856 2003-05-19 Fernando Perez <fperez@colorado.edu>
4851
4857
4852 * IPython/numutils.py: added a mockup of the kinds module, since
4858 * IPython/numutils.py: added a mockup of the kinds module, since
4853 it was recently removed from Numeric. This way, numutils will
4859 it was recently removed from Numeric. This way, numutils will
4854 work for all users even if they are missing kinds.
4860 work for all users even if they are missing kinds.
4855
4861
4856 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4862 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4857 failure, which can occur with SWIG-wrapped extensions. After a
4863 failure, which can occur with SWIG-wrapped extensions. After a
4858 crash report from Prabhu.
4864 crash report from Prabhu.
4859
4865
4860 2003-05-16 Fernando Perez <fperez@colorado.edu>
4866 2003-05-16 Fernando Perez <fperez@colorado.edu>
4861
4867
4862 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4868 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4863 protect ipython from user code which may call directly
4869 protect ipython from user code which may call directly
4864 sys.excepthook (this looks like an ipython crash to the user, even
4870 sys.excepthook (this looks like an ipython crash to the user, even
4865 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4871 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4866 This is especially important to help users of WxWindows, but may
4872 This is especially important to help users of WxWindows, but may
4867 also be useful in other cases.
4873 also be useful in other cases.
4868
4874
4869 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4875 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4870 an optional tb_offset to be specified, and to preserve exception
4876 an optional tb_offset to be specified, and to preserve exception
4871 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4877 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4872
4878
4873 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4879 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4874
4880
4875 2003-05-15 Fernando Perez <fperez@colorado.edu>
4881 2003-05-15 Fernando Perez <fperez@colorado.edu>
4876
4882
4877 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4883 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4878 installing for a new user under Windows.
4884 installing for a new user under Windows.
4879
4885
4880 2003-05-12 Fernando Perez <fperez@colorado.edu>
4886 2003-05-12 Fernando Perez <fperez@colorado.edu>
4881
4887
4882 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4888 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4883 handler for Emacs comint-based lines. Currently it doesn't do
4889 handler for Emacs comint-based lines. Currently it doesn't do
4884 much (but importantly, it doesn't update the history cache). In
4890 much (but importantly, it doesn't update the history cache). In
4885 the future it may be expanded if Alex needs more functionality
4891 the future it may be expanded if Alex needs more functionality
4886 there.
4892 there.
4887
4893
4888 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4894 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4889 info to crash reports.
4895 info to crash reports.
4890
4896
4891 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4897 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4892 just like Python's -c. Also fixed crash with invalid -color
4898 just like Python's -c. Also fixed crash with invalid -color
4893 option value at startup. Thanks to Will French
4899 option value at startup. Thanks to Will French
4894 <wfrench-AT-bestweb.net> for the bug report.
4900 <wfrench-AT-bestweb.net> for the bug report.
4895
4901
4896 2003-05-09 Fernando Perez <fperez@colorado.edu>
4902 2003-05-09 Fernando Perez <fperez@colorado.edu>
4897
4903
4898 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4904 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4899 to EvalDict (it's a mapping, after all) and simplified its code
4905 to EvalDict (it's a mapping, after all) and simplified its code
4900 quite a bit, after a nice discussion on c.l.py where Gustavo
4906 quite a bit, after a nice discussion on c.l.py where Gustavo
4901 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4907 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4902
4908
4903 2003-04-30 Fernando Perez <fperez@colorado.edu>
4909 2003-04-30 Fernando Perez <fperez@colorado.edu>
4904
4910
4905 * IPython/genutils.py (timings_out): modified it to reduce its
4911 * IPython/genutils.py (timings_out): modified it to reduce its
4906 overhead in the common reps==1 case.
4912 overhead in the common reps==1 case.
4907
4913
4908 2003-04-29 Fernando Perez <fperez@colorado.edu>
4914 2003-04-29 Fernando Perez <fperez@colorado.edu>
4909
4915
4910 * IPython/genutils.py (timings_out): Modified to use the resource
4916 * IPython/genutils.py (timings_out): Modified to use the resource
4911 module, which avoids the wraparound problems of time.clock().
4917 module, which avoids the wraparound problems of time.clock().
4912
4918
4913 2003-04-17 *** Released version 0.2.15pre4
4919 2003-04-17 *** Released version 0.2.15pre4
4914
4920
4915 2003-04-17 Fernando Perez <fperez@colorado.edu>
4921 2003-04-17 Fernando Perez <fperez@colorado.edu>
4916
4922
4917 * setup.py (scriptfiles): Split windows-specific stuff over to a
4923 * setup.py (scriptfiles): Split windows-specific stuff over to a
4918 separate file, in an attempt to have a Windows GUI installer.
4924 separate file, in an attempt to have a Windows GUI installer.
4919 That didn't work, but part of the groundwork is done.
4925 That didn't work, but part of the groundwork is done.
4920
4926
4921 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4927 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4922 indent/unindent with 4 spaces. Particularly useful in combination
4928 indent/unindent with 4 spaces. Particularly useful in combination
4923 with the new auto-indent option.
4929 with the new auto-indent option.
4924
4930
4925 2003-04-16 Fernando Perez <fperez@colorado.edu>
4931 2003-04-16 Fernando Perez <fperez@colorado.edu>
4926
4932
4927 * IPython/Magic.py: various replacements of self.rc for
4933 * IPython/Magic.py: various replacements of self.rc for
4928 self.shell.rc. A lot more remains to be done to fully disentangle
4934 self.shell.rc. A lot more remains to be done to fully disentangle
4929 this class from the main Shell class.
4935 this class from the main Shell class.
4930
4936
4931 * IPython/GnuplotRuntime.py: added checks for mouse support so
4937 * IPython/GnuplotRuntime.py: added checks for mouse support so
4932 that we don't try to enable it if the current gnuplot doesn't
4938 that we don't try to enable it if the current gnuplot doesn't
4933 really support it. Also added checks so that we don't try to
4939 really support it. Also added checks so that we don't try to
4934 enable persist under Windows (where Gnuplot doesn't recognize the
4940 enable persist under Windows (where Gnuplot doesn't recognize the
4935 option).
4941 option).
4936
4942
4937 * IPython/iplib.py (InteractiveShell.interact): Added optional
4943 * IPython/iplib.py (InteractiveShell.interact): Added optional
4938 auto-indenting code, after a patch by King C. Shu
4944 auto-indenting code, after a patch by King C. Shu
4939 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4945 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4940 get along well with pasting indented code. If I ever figure out
4946 get along well with pasting indented code. If I ever figure out
4941 how to make that part go well, it will become on by default.
4947 how to make that part go well, it will become on by default.
4942
4948
4943 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4949 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4944 crash ipython if there was an unmatched '%' in the user's prompt
4950 crash ipython if there was an unmatched '%' in the user's prompt
4945 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4951 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4946
4952
4947 * IPython/iplib.py (InteractiveShell.interact): removed the
4953 * IPython/iplib.py (InteractiveShell.interact): removed the
4948 ability to ask the user whether he wants to crash or not at the
4954 ability to ask the user whether he wants to crash or not at the
4949 'last line' exception handler. Calling functions at that point
4955 'last line' exception handler. Calling functions at that point
4950 changes the stack, and the error reports would have incorrect
4956 changes the stack, and the error reports would have incorrect
4951 tracebacks.
4957 tracebacks.
4952
4958
4953 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4959 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4954 pass through a peger a pretty-printed form of any object. After a
4960 pass through a peger a pretty-printed form of any object. After a
4955 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4961 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4956
4962
4957 2003-04-14 Fernando Perez <fperez@colorado.edu>
4963 2003-04-14 Fernando Perez <fperez@colorado.edu>
4958
4964
4959 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4965 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4960 all files in ~ would be modified at first install (instead of
4966 all files in ~ would be modified at first install (instead of
4961 ~/.ipython). This could be potentially disastrous, as the
4967 ~/.ipython). This could be potentially disastrous, as the
4962 modification (make line-endings native) could damage binary files.
4968 modification (make line-endings native) could damage binary files.
4963
4969
4964 2003-04-10 Fernando Perez <fperez@colorado.edu>
4970 2003-04-10 Fernando Perez <fperez@colorado.edu>
4965
4971
4966 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4972 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4967 handle only lines which are invalid python. This now means that
4973 handle only lines which are invalid python. This now means that
4968 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4974 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4969 for the bug report.
4975 for the bug report.
4970
4976
4971 2003-04-01 Fernando Perez <fperez@colorado.edu>
4977 2003-04-01 Fernando Perez <fperez@colorado.edu>
4972
4978
4973 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4979 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4974 where failing to set sys.last_traceback would crash pdb.pm().
4980 where failing to set sys.last_traceback would crash pdb.pm().
4975 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4981 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4976 report.
4982 report.
4977
4983
4978 2003-03-25 Fernando Perez <fperez@colorado.edu>
4984 2003-03-25 Fernando Perez <fperez@colorado.edu>
4979
4985
4980 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4986 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4981 before printing it (it had a lot of spurious blank lines at the
4987 before printing it (it had a lot of spurious blank lines at the
4982 end).
4988 end).
4983
4989
4984 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4990 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4985 output would be sent 21 times! Obviously people don't use this
4991 output would be sent 21 times! Obviously people don't use this
4986 too often, or I would have heard about it.
4992 too often, or I would have heard about it.
4987
4993
4988 2003-03-24 Fernando Perez <fperez@colorado.edu>
4994 2003-03-24 Fernando Perez <fperez@colorado.edu>
4989
4995
4990 * setup.py (scriptfiles): renamed the data_files parameter from
4996 * setup.py (scriptfiles): renamed the data_files parameter from
4991 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4997 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4992 for the patch.
4998 for the patch.
4993
4999
4994 2003-03-20 Fernando Perez <fperez@colorado.edu>
5000 2003-03-20 Fernando Perez <fperez@colorado.edu>
4995
5001
4996 * IPython/genutils.py (error): added error() and fatal()
5002 * IPython/genutils.py (error): added error() and fatal()
4997 functions.
5003 functions.
4998
5004
4999 2003-03-18 *** Released version 0.2.15pre3
5005 2003-03-18 *** Released version 0.2.15pre3
5000
5006
5001 2003-03-18 Fernando Perez <fperez@colorado.edu>
5007 2003-03-18 Fernando Perez <fperez@colorado.edu>
5002
5008
5003 * setupext/install_data_ext.py
5009 * setupext/install_data_ext.py
5004 (install_data_ext.initialize_options): Class contributed by Jack
5010 (install_data_ext.initialize_options): Class contributed by Jack
5005 Moffit for fixing the old distutils hack. He is sending this to
5011 Moffit for fixing the old distutils hack. He is sending this to
5006 the distutils folks so in the future we may not need it as a
5012 the distutils folks so in the future we may not need it as a
5007 private fix.
5013 private fix.
5008
5014
5009 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5015 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5010 changes for Debian packaging. See his patch for full details.
5016 changes for Debian packaging. See his patch for full details.
5011 The old distutils hack of making the ipythonrc* files carry a
5017 The old distutils hack of making the ipythonrc* files carry a
5012 bogus .py extension is gone, at last. Examples were moved to a
5018 bogus .py extension is gone, at last. Examples were moved to a
5013 separate subdir under doc/, and the separate executable scripts
5019 separate subdir under doc/, and the separate executable scripts
5014 now live in their own directory. Overall a great cleanup. The
5020 now live in their own directory. Overall a great cleanup. The
5015 manual was updated to use the new files, and setup.py has been
5021 manual was updated to use the new files, and setup.py has been
5016 fixed for this setup.
5022 fixed for this setup.
5017
5023
5018 * IPython/PyColorize.py (Parser.usage): made non-executable and
5024 * IPython/PyColorize.py (Parser.usage): made non-executable and
5019 created a pycolor wrapper around it to be included as a script.
5025 created a pycolor wrapper around it to be included as a script.
5020
5026
5021 2003-03-12 *** Released version 0.2.15pre2
5027 2003-03-12 *** Released version 0.2.15pre2
5022
5028
5023 2003-03-12 Fernando Perez <fperez@colorado.edu>
5029 2003-03-12 Fernando Perez <fperez@colorado.edu>
5024
5030
5025 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5031 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5026 long-standing problem with garbage characters in some terminals.
5032 long-standing problem with garbage characters in some terminals.
5027 The issue was really that the \001 and \002 escapes must _only_ be
5033 The issue was really that the \001 and \002 escapes must _only_ be
5028 passed to input prompts (which call readline), but _never_ to
5034 passed to input prompts (which call readline), but _never_ to
5029 normal text to be printed on screen. I changed ColorANSI to have
5035 normal text to be printed on screen. I changed ColorANSI to have
5030 two classes: TermColors and InputTermColors, each with the
5036 two classes: TermColors and InputTermColors, each with the
5031 appropriate escapes for input prompts or normal text. The code in
5037 appropriate escapes for input prompts or normal text. The code in
5032 Prompts.py got slightly more complicated, but this very old and
5038 Prompts.py got slightly more complicated, but this very old and
5033 annoying bug is finally fixed.
5039 annoying bug is finally fixed.
5034
5040
5035 All the credit for nailing down the real origin of this problem
5041 All the credit for nailing down the real origin of this problem
5036 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5042 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5037 *Many* thanks to him for spending quite a bit of effort on this.
5043 *Many* thanks to him for spending quite a bit of effort on this.
5038
5044
5039 2003-03-05 *** Released version 0.2.15pre1
5045 2003-03-05 *** Released version 0.2.15pre1
5040
5046
5041 2003-03-03 Fernando Perez <fperez@colorado.edu>
5047 2003-03-03 Fernando Perez <fperez@colorado.edu>
5042
5048
5043 * IPython/FakeModule.py: Moved the former _FakeModule to a
5049 * IPython/FakeModule.py: Moved the former _FakeModule to a
5044 separate file, because it's also needed by Magic (to fix a similar
5050 separate file, because it's also needed by Magic (to fix a similar
5045 pickle-related issue in @run).
5051 pickle-related issue in @run).
5046
5052
5047 2003-03-02 Fernando Perez <fperez@colorado.edu>
5053 2003-03-02 Fernando Perez <fperez@colorado.edu>
5048
5054
5049 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5055 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5050 the autocall option at runtime.
5056 the autocall option at runtime.
5051 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5057 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5052 across Magic.py to start separating Magic from InteractiveShell.
5058 across Magic.py to start separating Magic from InteractiveShell.
5053 (Magic._ofind): Fixed to return proper namespace for dotted
5059 (Magic._ofind): Fixed to return proper namespace for dotted
5054 names. Before, a dotted name would always return 'not currently
5060 names. Before, a dotted name would always return 'not currently
5055 defined', because it would find the 'parent'. s.x would be found,
5061 defined', because it would find the 'parent'. s.x would be found,
5056 but since 'x' isn't defined by itself, it would get confused.
5062 but since 'x' isn't defined by itself, it would get confused.
5057 (Magic.magic_run): Fixed pickling problems reported by Ralf
5063 (Magic.magic_run): Fixed pickling problems reported by Ralf
5058 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5064 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5059 that I'd used when Mike Heeter reported similar issues at the
5065 that I'd used when Mike Heeter reported similar issues at the
5060 top-level, but now for @run. It boils down to injecting the
5066 top-level, but now for @run. It boils down to injecting the
5061 namespace where code is being executed with something that looks
5067 namespace where code is being executed with something that looks
5062 enough like a module to fool pickle.dump(). Since a pickle stores
5068 enough like a module to fool pickle.dump(). Since a pickle stores
5063 a named reference to the importing module, we need this for
5069 a named reference to the importing module, we need this for
5064 pickles to save something sensible.
5070 pickles to save something sensible.
5065
5071
5066 * IPython/ipmaker.py (make_IPython): added an autocall option.
5072 * IPython/ipmaker.py (make_IPython): added an autocall option.
5067
5073
5068 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5074 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5069 the auto-eval code. Now autocalling is an option, and the code is
5075 the auto-eval code. Now autocalling is an option, and the code is
5070 also vastly safer. There is no more eval() involved at all.
5076 also vastly safer. There is no more eval() involved at all.
5071
5077
5072 2003-03-01 Fernando Perez <fperez@colorado.edu>
5078 2003-03-01 Fernando Perez <fperez@colorado.edu>
5073
5079
5074 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5080 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5075 dict with named keys instead of a tuple.
5081 dict with named keys instead of a tuple.
5076
5082
5077 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5083 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5078
5084
5079 * setup.py (make_shortcut): Fixed message about directories
5085 * setup.py (make_shortcut): Fixed message about directories
5080 created during Windows installation (the directories were ok, just
5086 created during Windows installation (the directories were ok, just
5081 the printed message was misleading). Thanks to Chris Liechti
5087 the printed message was misleading). Thanks to Chris Liechti
5082 <cliechti-AT-gmx.net> for the heads up.
5088 <cliechti-AT-gmx.net> for the heads up.
5083
5089
5084 2003-02-21 Fernando Perez <fperez@colorado.edu>
5090 2003-02-21 Fernando Perez <fperez@colorado.edu>
5085
5091
5086 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5092 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5087 of ValueError exception when checking for auto-execution. This
5093 of ValueError exception when checking for auto-execution. This
5088 one is raised by things like Numeric arrays arr.flat when the
5094 one is raised by things like Numeric arrays arr.flat when the
5089 array is non-contiguous.
5095 array is non-contiguous.
5090
5096
5091 2003-01-31 Fernando Perez <fperez@colorado.edu>
5097 2003-01-31 Fernando Perez <fperez@colorado.edu>
5092
5098
5093 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5099 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5094 not return any value at all (even though the command would get
5100 not return any value at all (even though the command would get
5095 executed).
5101 executed).
5096 (xsys): Flush stdout right after printing the command to ensure
5102 (xsys): Flush stdout right after printing the command to ensure
5097 proper ordering of commands and command output in the total
5103 proper ordering of commands and command output in the total
5098 output.
5104 output.
5099 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5105 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5100 system/getoutput as defaults. The old ones are kept for
5106 system/getoutput as defaults. The old ones are kept for
5101 compatibility reasons, so no code which uses this library needs
5107 compatibility reasons, so no code which uses this library needs
5102 changing.
5108 changing.
5103
5109
5104 2003-01-27 *** Released version 0.2.14
5110 2003-01-27 *** Released version 0.2.14
5105
5111
5106 2003-01-25 Fernando Perez <fperez@colorado.edu>
5112 2003-01-25 Fernando Perez <fperez@colorado.edu>
5107
5113
5108 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5114 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5109 functions defined in previous edit sessions could not be re-edited
5115 functions defined in previous edit sessions could not be re-edited
5110 (because the temp files were immediately removed). Now temp files
5116 (because the temp files were immediately removed). Now temp files
5111 are removed only at IPython's exit.
5117 are removed only at IPython's exit.
5112 (Magic.magic_run): Improved @run to perform shell-like expansions
5118 (Magic.magic_run): Improved @run to perform shell-like expansions
5113 on its arguments (~users and $VARS). With this, @run becomes more
5119 on its arguments (~users and $VARS). With this, @run becomes more
5114 like a normal command-line.
5120 like a normal command-line.
5115
5121
5116 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5122 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5117 bugs related to embedding and cleaned up that code. A fairly
5123 bugs related to embedding and cleaned up that code. A fairly
5118 important one was the impossibility to access the global namespace
5124 important one was the impossibility to access the global namespace
5119 through the embedded IPython (only local variables were visible).
5125 through the embedded IPython (only local variables were visible).
5120
5126
5121 2003-01-14 Fernando Perez <fperez@colorado.edu>
5127 2003-01-14 Fernando Perez <fperez@colorado.edu>
5122
5128
5123 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5129 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5124 auto-calling to be a bit more conservative. Now it doesn't get
5130 auto-calling to be a bit more conservative. Now it doesn't get
5125 triggered if any of '!=()<>' are in the rest of the input line, to
5131 triggered if any of '!=()<>' are in the rest of the input line, to
5126 allow comparing callables. Thanks to Alex for the heads up.
5132 allow comparing callables. Thanks to Alex for the heads up.
5127
5133
5128 2003-01-07 Fernando Perez <fperez@colorado.edu>
5134 2003-01-07 Fernando Perez <fperez@colorado.edu>
5129
5135
5130 * IPython/genutils.py (page): fixed estimation of the number of
5136 * IPython/genutils.py (page): fixed estimation of the number of
5131 lines in a string to be paged to simply count newlines. This
5137 lines in a string to be paged to simply count newlines. This
5132 prevents over-guessing due to embedded escape sequences. A better
5138 prevents over-guessing due to embedded escape sequences. A better
5133 long-term solution would involve stripping out the control chars
5139 long-term solution would involve stripping out the control chars
5134 for the count, but it's potentially so expensive I just don't
5140 for the count, but it's potentially so expensive I just don't
5135 think it's worth doing.
5141 think it's worth doing.
5136
5142
5137 2002-12-19 *** Released version 0.2.14pre50
5143 2002-12-19 *** Released version 0.2.14pre50
5138
5144
5139 2002-12-19 Fernando Perez <fperez@colorado.edu>
5145 2002-12-19 Fernando Perez <fperez@colorado.edu>
5140
5146
5141 * tools/release (version): Changed release scripts to inform
5147 * tools/release (version): Changed release scripts to inform
5142 Andrea and build a NEWS file with a list of recent changes.
5148 Andrea and build a NEWS file with a list of recent changes.
5143
5149
5144 * IPython/ColorANSI.py (__all__): changed terminal detection
5150 * IPython/ColorANSI.py (__all__): changed terminal detection
5145 code. Seems to work better for xterms without breaking
5151 code. Seems to work better for xterms without breaking
5146 konsole. Will need more testing to determine if WinXP and Mac OSX
5152 konsole. Will need more testing to determine if WinXP and Mac OSX
5147 also work ok.
5153 also work ok.
5148
5154
5149 2002-12-18 *** Released version 0.2.14pre49
5155 2002-12-18 *** Released version 0.2.14pre49
5150
5156
5151 2002-12-18 Fernando Perez <fperez@colorado.edu>
5157 2002-12-18 Fernando Perez <fperez@colorado.edu>
5152
5158
5153 * Docs: added new info about Mac OSX, from Andrea.
5159 * Docs: added new info about Mac OSX, from Andrea.
5154
5160
5155 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5161 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5156 allow direct plotting of python strings whose format is the same
5162 allow direct plotting of python strings whose format is the same
5157 of gnuplot data files.
5163 of gnuplot data files.
5158
5164
5159 2002-12-16 Fernando Perez <fperez@colorado.edu>
5165 2002-12-16 Fernando Perez <fperez@colorado.edu>
5160
5166
5161 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5167 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5162 value of exit question to be acknowledged.
5168 value of exit question to be acknowledged.
5163
5169
5164 2002-12-03 Fernando Perez <fperez@colorado.edu>
5170 2002-12-03 Fernando Perez <fperez@colorado.edu>
5165
5171
5166 * IPython/ipmaker.py: removed generators, which had been added
5172 * IPython/ipmaker.py: removed generators, which had been added
5167 by mistake in an earlier debugging run. This was causing trouble
5173 by mistake in an earlier debugging run. This was causing trouble
5168 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5174 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5169 for pointing this out.
5175 for pointing this out.
5170
5176
5171 2002-11-17 Fernando Perez <fperez@colorado.edu>
5177 2002-11-17 Fernando Perez <fperez@colorado.edu>
5172
5178
5173 * Manual: updated the Gnuplot section.
5179 * Manual: updated the Gnuplot section.
5174
5180
5175 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5181 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5176 a much better split of what goes in Runtime and what goes in
5182 a much better split of what goes in Runtime and what goes in
5177 Interactive.
5183 Interactive.
5178
5184
5179 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5185 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5180 being imported from iplib.
5186 being imported from iplib.
5181
5187
5182 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5188 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5183 for command-passing. Now the global Gnuplot instance is called
5189 for command-passing. Now the global Gnuplot instance is called
5184 'gp' instead of 'g', which was really a far too fragile and
5190 'gp' instead of 'g', which was really a far too fragile and
5185 common name.
5191 common name.
5186
5192
5187 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5193 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5188 bounding boxes generated by Gnuplot for square plots.
5194 bounding boxes generated by Gnuplot for square plots.
5189
5195
5190 * IPython/genutils.py (popkey): new function added. I should
5196 * IPython/genutils.py (popkey): new function added. I should
5191 suggest this on c.l.py as a dict method, it seems useful.
5197 suggest this on c.l.py as a dict method, it seems useful.
5192
5198
5193 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5199 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5194 to transparently handle PostScript generation. MUCH better than
5200 to transparently handle PostScript generation. MUCH better than
5195 the previous plot_eps/replot_eps (which I removed now). The code
5201 the previous plot_eps/replot_eps (which I removed now). The code
5196 is also fairly clean and well documented now (including
5202 is also fairly clean and well documented now (including
5197 docstrings).
5203 docstrings).
5198
5204
5199 2002-11-13 Fernando Perez <fperez@colorado.edu>
5205 2002-11-13 Fernando Perez <fperez@colorado.edu>
5200
5206
5201 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5207 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5202 (inconsistent with options).
5208 (inconsistent with options).
5203
5209
5204 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5210 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5205 manually disabled, I don't know why. Fixed it.
5211 manually disabled, I don't know why. Fixed it.
5206 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5212 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5207 eps output.
5213 eps output.
5208
5214
5209 2002-11-12 Fernando Perez <fperez@colorado.edu>
5215 2002-11-12 Fernando Perez <fperez@colorado.edu>
5210
5216
5211 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5217 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5212 don't propagate up to caller. Fixes crash reported by François
5218 don't propagate up to caller. Fixes crash reported by François
5213 Pinard.
5219 Pinard.
5214
5220
5215 2002-11-09 Fernando Perez <fperez@colorado.edu>
5221 2002-11-09 Fernando Perez <fperez@colorado.edu>
5216
5222
5217 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5223 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5218 history file for new users.
5224 history file for new users.
5219 (make_IPython): fixed bug where initial install would leave the
5225 (make_IPython): fixed bug where initial install would leave the
5220 user running in the .ipython dir.
5226 user running in the .ipython dir.
5221 (make_IPython): fixed bug where config dir .ipython would be
5227 (make_IPython): fixed bug where config dir .ipython would be
5222 created regardless of the given -ipythondir option. Thanks to Cory
5228 created regardless of the given -ipythondir option. Thanks to Cory
5223 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5229 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5224
5230
5225 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5231 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5226 type confirmations. Will need to use it in all of IPython's code
5232 type confirmations. Will need to use it in all of IPython's code
5227 consistently.
5233 consistently.
5228
5234
5229 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5235 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5230 context to print 31 lines instead of the default 5. This will make
5236 context to print 31 lines instead of the default 5. This will make
5231 the crash reports extremely detailed in case the problem is in
5237 the crash reports extremely detailed in case the problem is in
5232 libraries I don't have access to.
5238 libraries I don't have access to.
5233
5239
5234 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5240 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5235 line of defense' code to still crash, but giving users fair
5241 line of defense' code to still crash, but giving users fair
5236 warning. I don't want internal errors to go unreported: if there's
5242 warning. I don't want internal errors to go unreported: if there's
5237 an internal problem, IPython should crash and generate a full
5243 an internal problem, IPython should crash and generate a full
5238 report.
5244 report.
5239
5245
5240 2002-11-08 Fernando Perez <fperez@colorado.edu>
5246 2002-11-08 Fernando Perez <fperez@colorado.edu>
5241
5247
5242 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5248 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5243 otherwise uncaught exceptions which can appear if people set
5249 otherwise uncaught exceptions which can appear if people set
5244 sys.stdout to something badly broken. Thanks to a crash report
5250 sys.stdout to something badly broken. Thanks to a crash report
5245 from henni-AT-mail.brainbot.com.
5251 from henni-AT-mail.brainbot.com.
5246
5252
5247 2002-11-04 Fernando Perez <fperez@colorado.edu>
5253 2002-11-04 Fernando Perez <fperez@colorado.edu>
5248
5254
5249 * IPython/iplib.py (InteractiveShell.interact): added
5255 * IPython/iplib.py (InteractiveShell.interact): added
5250 __IPYTHON__active to the builtins. It's a flag which goes on when
5256 __IPYTHON__active to the builtins. It's a flag which goes on when
5251 the interaction starts and goes off again when it stops. This
5257 the interaction starts and goes off again when it stops. This
5252 allows embedding code to detect being inside IPython. Before this
5258 allows embedding code to detect being inside IPython. Before this
5253 was done via __IPYTHON__, but that only shows that an IPython
5259 was done via __IPYTHON__, but that only shows that an IPython
5254 instance has been created.
5260 instance has been created.
5255
5261
5256 * IPython/Magic.py (Magic.magic_env): I realized that in a
5262 * IPython/Magic.py (Magic.magic_env): I realized that in a
5257 UserDict, instance.data holds the data as a normal dict. So I
5263 UserDict, instance.data holds the data as a normal dict. So I
5258 modified @env to return os.environ.data instead of rebuilding a
5264 modified @env to return os.environ.data instead of rebuilding a
5259 dict by hand.
5265 dict by hand.
5260
5266
5261 2002-11-02 Fernando Perez <fperez@colorado.edu>
5267 2002-11-02 Fernando Perez <fperez@colorado.edu>
5262
5268
5263 * IPython/genutils.py (warn): changed so that level 1 prints no
5269 * IPython/genutils.py (warn): changed so that level 1 prints no
5264 header. Level 2 is now the default (with 'WARNING' header, as
5270 header. Level 2 is now the default (with 'WARNING' header, as
5265 before). I think I tracked all places where changes were needed in
5271 before). I think I tracked all places where changes were needed in
5266 IPython, but outside code using the old level numbering may have
5272 IPython, but outside code using the old level numbering may have
5267 broken.
5273 broken.
5268
5274
5269 * IPython/iplib.py (InteractiveShell.runcode): added this to
5275 * IPython/iplib.py (InteractiveShell.runcode): added this to
5270 handle the tracebacks in SystemExit traps correctly. The previous
5276 handle the tracebacks in SystemExit traps correctly. The previous
5271 code (through interact) was printing more of the stack than
5277 code (through interact) was printing more of the stack than
5272 necessary, showing IPython internal code to the user.
5278 necessary, showing IPython internal code to the user.
5273
5279
5274 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5280 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5275 default. Now that the default at the confirmation prompt is yes,
5281 default. Now that the default at the confirmation prompt is yes,
5276 it's not so intrusive. François' argument that ipython sessions
5282 it's not so intrusive. François' argument that ipython sessions
5277 tend to be complex enough not to lose them from an accidental C-d,
5283 tend to be complex enough not to lose them from an accidental C-d,
5278 is a valid one.
5284 is a valid one.
5279
5285
5280 * IPython/iplib.py (InteractiveShell.interact): added a
5286 * IPython/iplib.py (InteractiveShell.interact): added a
5281 showtraceback() call to the SystemExit trap, and modified the exit
5287 showtraceback() call to the SystemExit trap, and modified the exit
5282 confirmation to have yes as the default.
5288 confirmation to have yes as the default.
5283
5289
5284 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5290 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5285 this file. It's been gone from the code for a long time, this was
5291 this file. It's been gone from the code for a long time, this was
5286 simply leftover junk.
5292 simply leftover junk.
5287
5293
5288 2002-11-01 Fernando Perez <fperez@colorado.edu>
5294 2002-11-01 Fernando Perez <fperez@colorado.edu>
5289
5295
5290 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5296 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5291 added. If set, IPython now traps EOF and asks for
5297 added. If set, IPython now traps EOF and asks for
5292 confirmation. After a request by François Pinard.
5298 confirmation. After a request by François Pinard.
5293
5299
5294 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5300 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5295 of @abort, and with a new (better) mechanism for handling the
5301 of @abort, and with a new (better) mechanism for handling the
5296 exceptions.
5302 exceptions.
5297
5303
5298 2002-10-27 Fernando Perez <fperez@colorado.edu>
5304 2002-10-27 Fernando Perez <fperez@colorado.edu>
5299
5305
5300 * IPython/usage.py (__doc__): updated the --help information and
5306 * IPython/usage.py (__doc__): updated the --help information and
5301 the ipythonrc file to indicate that -log generates
5307 the ipythonrc file to indicate that -log generates
5302 ./ipython.log. Also fixed the corresponding info in @logstart.
5308 ./ipython.log. Also fixed the corresponding info in @logstart.
5303 This and several other fixes in the manuals thanks to reports by
5309 This and several other fixes in the manuals thanks to reports by
5304 François Pinard <pinard-AT-iro.umontreal.ca>.
5310 François Pinard <pinard-AT-iro.umontreal.ca>.
5305
5311
5306 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5312 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5307 refer to @logstart (instead of @log, which doesn't exist).
5313 refer to @logstart (instead of @log, which doesn't exist).
5308
5314
5309 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5315 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5310 AttributeError crash. Thanks to Christopher Armstrong
5316 AttributeError crash. Thanks to Christopher Armstrong
5311 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5317 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5312 introduced recently (in 0.2.14pre37) with the fix to the eval
5318 introduced recently (in 0.2.14pre37) with the fix to the eval
5313 problem mentioned below.
5319 problem mentioned below.
5314
5320
5315 2002-10-17 Fernando Perez <fperez@colorado.edu>
5321 2002-10-17 Fernando Perez <fperez@colorado.edu>
5316
5322
5317 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5323 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5318 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5324 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5319
5325
5320 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5326 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5321 this function to fix a problem reported by Alex Schmolck. He saw
5327 this function to fix a problem reported by Alex Schmolck. He saw
5322 it with list comprehensions and generators, which were getting
5328 it with list comprehensions and generators, which were getting
5323 called twice. The real problem was an 'eval' call in testing for
5329 called twice. The real problem was an 'eval' call in testing for
5324 automagic which was evaluating the input line silently.
5330 automagic which was evaluating the input line silently.
5325
5331
5326 This is a potentially very nasty bug, if the input has side
5332 This is a potentially very nasty bug, if the input has side
5327 effects which must not be repeated. The code is much cleaner now,
5333 effects which must not be repeated. The code is much cleaner now,
5328 without any blanket 'except' left and with a regexp test for
5334 without any blanket 'except' left and with a regexp test for
5329 actual function names.
5335 actual function names.
5330
5336
5331 But an eval remains, which I'm not fully comfortable with. I just
5337 But an eval remains, which I'm not fully comfortable with. I just
5332 don't know how to find out if an expression could be a callable in
5338 don't know how to find out if an expression could be a callable in
5333 the user's namespace without doing an eval on the string. However
5339 the user's namespace without doing an eval on the string. However
5334 that string is now much more strictly checked so that no code
5340 that string is now much more strictly checked so that no code
5335 slips by, so the eval should only happen for things that can
5341 slips by, so the eval should only happen for things that can
5336 really be only function/method names.
5342 really be only function/method names.
5337
5343
5338 2002-10-15 Fernando Perez <fperez@colorado.edu>
5344 2002-10-15 Fernando Perez <fperez@colorado.edu>
5339
5345
5340 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5346 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5341 OSX information to main manual, removed README_Mac_OSX file from
5347 OSX information to main manual, removed README_Mac_OSX file from
5342 distribution. Also updated credits for recent additions.
5348 distribution. Also updated credits for recent additions.
5343
5349
5344 2002-10-10 Fernando Perez <fperez@colorado.edu>
5350 2002-10-10 Fernando Perez <fperez@colorado.edu>
5345
5351
5346 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5352 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5347 terminal-related issues. Many thanks to Andrea Riciputi
5353 terminal-related issues. Many thanks to Andrea Riciputi
5348 <andrea.riciputi-AT-libero.it> for writing it.
5354 <andrea.riciputi-AT-libero.it> for writing it.
5349
5355
5350 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5356 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5351 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5357 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5352
5358
5353 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5359 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5354 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5360 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5355 <syver-en-AT-online.no> who both submitted patches for this problem.
5361 <syver-en-AT-online.no> who both submitted patches for this problem.
5356
5362
5357 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5363 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5358 global embedding to make sure that things don't overwrite user
5364 global embedding to make sure that things don't overwrite user
5359 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5365 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5360
5366
5361 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5367 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5362 compatibility. Thanks to Hayden Callow
5368 compatibility. Thanks to Hayden Callow
5363 <h.callow-AT-elec.canterbury.ac.nz>
5369 <h.callow-AT-elec.canterbury.ac.nz>
5364
5370
5365 2002-10-04 Fernando Perez <fperez@colorado.edu>
5371 2002-10-04 Fernando Perez <fperez@colorado.edu>
5366
5372
5367 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5373 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5368 Gnuplot.File objects.
5374 Gnuplot.File objects.
5369
5375
5370 2002-07-23 Fernando Perez <fperez@colorado.edu>
5376 2002-07-23 Fernando Perez <fperez@colorado.edu>
5371
5377
5372 * IPython/genutils.py (timing): Added timings() and timing() for
5378 * IPython/genutils.py (timing): Added timings() and timing() for
5373 quick access to the most commonly needed data, the execution
5379 quick access to the most commonly needed data, the execution
5374 times. Old timing() renamed to timings_out().
5380 times. Old timing() renamed to timings_out().
5375
5381
5376 2002-07-18 Fernando Perez <fperez@colorado.edu>
5382 2002-07-18 Fernando Perez <fperez@colorado.edu>
5377
5383
5378 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5384 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5379 bug with nested instances disrupting the parent's tab completion.
5385 bug with nested instances disrupting the parent's tab completion.
5380
5386
5381 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5387 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5382 all_completions code to begin the emacs integration.
5388 all_completions code to begin the emacs integration.
5383
5389
5384 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5390 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5385 argument to allow titling individual arrays when plotting.
5391 argument to allow titling individual arrays when plotting.
5386
5392
5387 2002-07-15 Fernando Perez <fperez@colorado.edu>
5393 2002-07-15 Fernando Perez <fperez@colorado.edu>
5388
5394
5389 * setup.py (make_shortcut): changed to retrieve the value of
5395 * setup.py (make_shortcut): changed to retrieve the value of
5390 'Program Files' directory from the registry (this value changes in
5396 'Program Files' directory from the registry (this value changes in
5391 non-english versions of Windows). Thanks to Thomas Fanslau
5397 non-english versions of Windows). Thanks to Thomas Fanslau
5392 <tfanslau-AT-gmx.de> for the report.
5398 <tfanslau-AT-gmx.de> for the report.
5393
5399
5394 2002-07-10 Fernando Perez <fperez@colorado.edu>
5400 2002-07-10 Fernando Perez <fperez@colorado.edu>
5395
5401
5396 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5402 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5397 a bug in pdb, which crashes if a line with only whitespace is
5403 a bug in pdb, which crashes if a line with only whitespace is
5398 entered. Bug report submitted to sourceforge.
5404 entered. Bug report submitted to sourceforge.
5399
5405
5400 2002-07-09 Fernando Perez <fperez@colorado.edu>
5406 2002-07-09 Fernando Perez <fperez@colorado.edu>
5401
5407
5402 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5408 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5403 reporting exceptions (it's a bug in inspect.py, I just set a
5409 reporting exceptions (it's a bug in inspect.py, I just set a
5404 workaround).
5410 workaround).
5405
5411
5406 2002-07-08 Fernando Perez <fperez@colorado.edu>
5412 2002-07-08 Fernando Perez <fperez@colorado.edu>
5407
5413
5408 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5414 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5409 __IPYTHON__ in __builtins__ to show up in user_ns.
5415 __IPYTHON__ in __builtins__ to show up in user_ns.
5410
5416
5411 2002-07-03 Fernando Perez <fperez@colorado.edu>
5417 2002-07-03 Fernando Perez <fperez@colorado.edu>
5412
5418
5413 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5419 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5414 name from @gp_set_instance to @gp_set_default.
5420 name from @gp_set_instance to @gp_set_default.
5415
5421
5416 * IPython/ipmaker.py (make_IPython): default editor value set to
5422 * IPython/ipmaker.py (make_IPython): default editor value set to
5417 '0' (a string), to match the rc file. Otherwise will crash when
5423 '0' (a string), to match the rc file. Otherwise will crash when
5418 .strip() is called on it.
5424 .strip() is called on it.
5419
5425
5420
5426
5421 2002-06-28 Fernando Perez <fperez@colorado.edu>
5427 2002-06-28 Fernando Perez <fperez@colorado.edu>
5422
5428
5423 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5429 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5424 of files in current directory when a file is executed via
5430 of files in current directory when a file is executed via
5425 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5431 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5426
5432
5427 * setup.py (manfiles): fix for rpm builds, submitted by RA
5433 * setup.py (manfiles): fix for rpm builds, submitted by RA
5428 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5434 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5429
5435
5430 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5436 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5431 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5437 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5432 string!). A. Schmolck caught this one.
5438 string!). A. Schmolck caught this one.
5433
5439
5434 2002-06-27 Fernando Perez <fperez@colorado.edu>
5440 2002-06-27 Fernando Perez <fperez@colorado.edu>
5435
5441
5436 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5442 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5437 defined files at the cmd line. __name__ wasn't being set to
5443 defined files at the cmd line. __name__ wasn't being set to
5438 __main__.
5444 __main__.
5439
5445
5440 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5446 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5441 regular lists and tuples besides Numeric arrays.
5447 regular lists and tuples besides Numeric arrays.
5442
5448
5443 * IPython/Prompts.py (CachedOutput.__call__): Added output
5449 * IPython/Prompts.py (CachedOutput.__call__): Added output
5444 supression for input ending with ';'. Similar to Mathematica and
5450 supression for input ending with ';'. Similar to Mathematica and
5445 Matlab. The _* vars and Out[] list are still updated, just like
5451 Matlab. The _* vars and Out[] list are still updated, just like
5446 Mathematica behaves.
5452 Mathematica behaves.
5447
5453
5448 2002-06-25 Fernando Perez <fperez@colorado.edu>
5454 2002-06-25 Fernando Perez <fperez@colorado.edu>
5449
5455
5450 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5456 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5451 .ini extensions for profiels under Windows.
5457 .ini extensions for profiels under Windows.
5452
5458
5453 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5459 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5454 string form. Fix contributed by Alexander Schmolck
5460 string form. Fix contributed by Alexander Schmolck
5455 <a.schmolck-AT-gmx.net>
5461 <a.schmolck-AT-gmx.net>
5456
5462
5457 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5463 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5458 pre-configured Gnuplot instance.
5464 pre-configured Gnuplot instance.
5459
5465
5460 2002-06-21 Fernando Perez <fperez@colorado.edu>
5466 2002-06-21 Fernando Perez <fperez@colorado.edu>
5461
5467
5462 * IPython/numutils.py (exp_safe): new function, works around the
5468 * IPython/numutils.py (exp_safe): new function, works around the
5463 underflow problems in Numeric.
5469 underflow problems in Numeric.
5464 (log2): New fn. Safe log in base 2: returns exact integer answer
5470 (log2): New fn. Safe log in base 2: returns exact integer answer
5465 for exact integer powers of 2.
5471 for exact integer powers of 2.
5466
5472
5467 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5473 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5468 properly.
5474 properly.
5469
5475
5470 2002-06-20 Fernando Perez <fperez@colorado.edu>
5476 2002-06-20 Fernando Perez <fperez@colorado.edu>
5471
5477
5472 * IPython/genutils.py (timing): new function like
5478 * IPython/genutils.py (timing): new function like
5473 Mathematica's. Similar to time_test, but returns more info.
5479 Mathematica's. Similar to time_test, but returns more info.
5474
5480
5475 2002-06-18 Fernando Perez <fperez@colorado.edu>
5481 2002-06-18 Fernando Perez <fperez@colorado.edu>
5476
5482
5477 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5483 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5478 according to Mike Heeter's suggestions.
5484 according to Mike Heeter's suggestions.
5479
5485
5480 2002-06-16 Fernando Perez <fperez@colorado.edu>
5486 2002-06-16 Fernando Perez <fperez@colorado.edu>
5481
5487
5482 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5488 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5483 system. GnuplotMagic is gone as a user-directory option. New files
5489 system. GnuplotMagic is gone as a user-directory option. New files
5484 make it easier to use all the gnuplot stuff both from external
5490 make it easier to use all the gnuplot stuff both from external
5485 programs as well as from IPython. Had to rewrite part of
5491 programs as well as from IPython. Had to rewrite part of
5486 hardcopy() b/c of a strange bug: often the ps files simply don't
5492 hardcopy() b/c of a strange bug: often the ps files simply don't
5487 get created, and require a repeat of the command (often several
5493 get created, and require a repeat of the command (often several
5488 times).
5494 times).
5489
5495
5490 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5496 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5491 resolve output channel at call time, so that if sys.stderr has
5497 resolve output channel at call time, so that if sys.stderr has
5492 been redirected by user this gets honored.
5498 been redirected by user this gets honored.
5493
5499
5494 2002-06-13 Fernando Perez <fperez@colorado.edu>
5500 2002-06-13 Fernando Perez <fperez@colorado.edu>
5495
5501
5496 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5502 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5497 IPShell. Kept a copy with the old names to avoid breaking people's
5503 IPShell. Kept a copy with the old names to avoid breaking people's
5498 embedded code.
5504 embedded code.
5499
5505
5500 * IPython/ipython: simplified it to the bare minimum after
5506 * IPython/ipython: simplified it to the bare minimum after
5501 Holger's suggestions. Added info about how to use it in
5507 Holger's suggestions. Added info about how to use it in
5502 PYTHONSTARTUP.
5508 PYTHONSTARTUP.
5503
5509
5504 * IPython/Shell.py (IPythonShell): changed the options passing
5510 * IPython/Shell.py (IPythonShell): changed the options passing
5505 from a string with funky %s replacements to a straight list. Maybe
5511 from a string with funky %s replacements to a straight list. Maybe
5506 a bit more typing, but it follows sys.argv conventions, so there's
5512 a bit more typing, but it follows sys.argv conventions, so there's
5507 less special-casing to remember.
5513 less special-casing to remember.
5508
5514
5509 2002-06-12 Fernando Perez <fperez@colorado.edu>
5515 2002-06-12 Fernando Perez <fperez@colorado.edu>
5510
5516
5511 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5517 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5512 command. Thanks to a suggestion by Mike Heeter.
5518 command. Thanks to a suggestion by Mike Heeter.
5513 (Magic.magic_pfile): added behavior to look at filenames if given
5519 (Magic.magic_pfile): added behavior to look at filenames if given
5514 arg is not a defined object.
5520 arg is not a defined object.
5515 (Magic.magic_save): New @save function to save code snippets. Also
5521 (Magic.magic_save): New @save function to save code snippets. Also
5516 a Mike Heeter idea.
5522 a Mike Heeter idea.
5517
5523
5518 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5524 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5519 plot() and replot(). Much more convenient now, especially for
5525 plot() and replot(). Much more convenient now, especially for
5520 interactive use.
5526 interactive use.
5521
5527
5522 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5528 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5523 filenames.
5529 filenames.
5524
5530
5525 2002-06-02 Fernando Perez <fperez@colorado.edu>
5531 2002-06-02 Fernando Perez <fperez@colorado.edu>
5526
5532
5527 * IPython/Struct.py (Struct.__init__): modified to admit
5533 * IPython/Struct.py (Struct.__init__): modified to admit
5528 initialization via another struct.
5534 initialization via another struct.
5529
5535
5530 * IPython/genutils.py (SystemExec.__init__): New stateful
5536 * IPython/genutils.py (SystemExec.__init__): New stateful
5531 interface to xsys and bq. Useful for writing system scripts.
5537 interface to xsys and bq. Useful for writing system scripts.
5532
5538
5533 2002-05-30 Fernando Perez <fperez@colorado.edu>
5539 2002-05-30 Fernando Perez <fperez@colorado.edu>
5534
5540
5535 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5541 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5536 documents. This will make the user download smaller (it's getting
5542 documents. This will make the user download smaller (it's getting
5537 too big).
5543 too big).
5538
5544
5539 2002-05-29 Fernando Perez <fperez@colorado.edu>
5545 2002-05-29 Fernando Perez <fperez@colorado.edu>
5540
5546
5541 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5547 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5542 fix problems with shelve and pickle. Seems to work, but I don't
5548 fix problems with shelve and pickle. Seems to work, but I don't
5543 know if corner cases break it. Thanks to Mike Heeter
5549 know if corner cases break it. Thanks to Mike Heeter
5544 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5550 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5545
5551
5546 2002-05-24 Fernando Perez <fperez@colorado.edu>
5552 2002-05-24 Fernando Perez <fperez@colorado.edu>
5547
5553
5548 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5554 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5549 macros having broken.
5555 macros having broken.
5550
5556
5551 2002-05-21 Fernando Perez <fperez@colorado.edu>
5557 2002-05-21 Fernando Perez <fperez@colorado.edu>
5552
5558
5553 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5559 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5554 introduced logging bug: all history before logging started was
5560 introduced logging bug: all history before logging started was
5555 being written one character per line! This came from the redesign
5561 being written one character per line! This came from the redesign
5556 of the input history as a special list which slices to strings,
5562 of the input history as a special list which slices to strings,
5557 not to lists.
5563 not to lists.
5558
5564
5559 2002-05-20 Fernando Perez <fperez@colorado.edu>
5565 2002-05-20 Fernando Perez <fperez@colorado.edu>
5560
5566
5561 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5567 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5562 be an attribute of all classes in this module. The design of these
5568 be an attribute of all classes in this module. The design of these
5563 classes needs some serious overhauling.
5569 classes needs some serious overhauling.
5564
5570
5565 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5571 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5566 which was ignoring '_' in option names.
5572 which was ignoring '_' in option names.
5567
5573
5568 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5574 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5569 'Verbose_novars' to 'Context' and made it the new default. It's a
5575 'Verbose_novars' to 'Context' and made it the new default. It's a
5570 bit more readable and also safer than verbose.
5576 bit more readable and also safer than verbose.
5571
5577
5572 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5578 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5573 triple-quoted strings.
5579 triple-quoted strings.
5574
5580
5575 * IPython/OInspect.py (__all__): new module exposing the object
5581 * IPython/OInspect.py (__all__): new module exposing the object
5576 introspection facilities. Now the corresponding magics are dummy
5582 introspection facilities. Now the corresponding magics are dummy
5577 wrappers around this. Having this module will make it much easier
5583 wrappers around this. Having this module will make it much easier
5578 to put these functions into our modified pdb.
5584 to put these functions into our modified pdb.
5579 This new object inspector system uses the new colorizing module,
5585 This new object inspector system uses the new colorizing module,
5580 so source code and other things are nicely syntax highlighted.
5586 so source code and other things are nicely syntax highlighted.
5581
5587
5582 2002-05-18 Fernando Perez <fperez@colorado.edu>
5588 2002-05-18 Fernando Perez <fperez@colorado.edu>
5583
5589
5584 * IPython/ColorANSI.py: Split the coloring tools into a separate
5590 * IPython/ColorANSI.py: Split the coloring tools into a separate
5585 module so I can use them in other code easier (they were part of
5591 module so I can use them in other code easier (they were part of
5586 ultraTB).
5592 ultraTB).
5587
5593
5588 2002-05-17 Fernando Perez <fperez@colorado.edu>
5594 2002-05-17 Fernando Perez <fperez@colorado.edu>
5589
5595
5590 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5596 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5591 fixed it to set the global 'g' also to the called instance, as
5597 fixed it to set the global 'g' also to the called instance, as
5592 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5598 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5593 user's 'g' variables).
5599 user's 'g' variables).
5594
5600
5595 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5601 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5596 global variables (aliases to _ih,_oh) so that users which expect
5602 global variables (aliases to _ih,_oh) so that users which expect
5597 In[5] or Out[7] to work aren't unpleasantly surprised.
5603 In[5] or Out[7] to work aren't unpleasantly surprised.
5598 (InputList.__getslice__): new class to allow executing slices of
5604 (InputList.__getslice__): new class to allow executing slices of
5599 input history directly. Very simple class, complements the use of
5605 input history directly. Very simple class, complements the use of
5600 macros.
5606 macros.
5601
5607
5602 2002-05-16 Fernando Perez <fperez@colorado.edu>
5608 2002-05-16 Fernando Perez <fperez@colorado.edu>
5603
5609
5604 * setup.py (docdirbase): make doc directory be just doc/IPython
5610 * setup.py (docdirbase): make doc directory be just doc/IPython
5605 without version numbers, it will reduce clutter for users.
5611 without version numbers, it will reduce clutter for users.
5606
5612
5607 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
5613 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
5608 execfile call to prevent possible memory leak. See for details:
5614 execfile call to prevent possible memory leak. See for details:
5609 http://mail.python.org/pipermail/python-list/2002-February/088476.html
5615 http://mail.python.org/pipermail/python-list/2002-February/088476.html
5610
5616
5611 2002-05-15 Fernando Perez <fperez@colorado.edu>
5617 2002-05-15 Fernando Perez <fperez@colorado.edu>
5612
5618
5613 * IPython/Magic.py (Magic.magic_psource): made the object
5619 * IPython/Magic.py (Magic.magic_psource): made the object
5614 introspection names be more standard: pdoc, pdef, pfile and
5620 introspection names be more standard: pdoc, pdef, pfile and
5615 psource. They all print/page their output, and it makes
5621 psource. They all print/page their output, and it makes
5616 remembering them easier. Kept old names for compatibility as
5622 remembering them easier. Kept old names for compatibility as
5617 aliases.
5623 aliases.
5618
5624
5619 2002-05-14 Fernando Perez <fperez@colorado.edu>
5625 2002-05-14 Fernando Perez <fperez@colorado.edu>
5620
5626
5621 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
5627 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
5622 what the mouse problem was. The trick is to use gnuplot with temp
5628 what the mouse problem was. The trick is to use gnuplot with temp
5623 files and NOT with pipes (for data communication), because having
5629 files and NOT with pipes (for data communication), because having
5624 both pipes and the mouse on is bad news.
5630 both pipes and the mouse on is bad news.
5625
5631
5626 2002-05-13 Fernando Perez <fperez@colorado.edu>
5632 2002-05-13 Fernando Perez <fperez@colorado.edu>
5627
5633
5628 * IPython/Magic.py (Magic._ofind): fixed namespace order search
5634 * IPython/Magic.py (Magic._ofind): fixed namespace order search
5629 bug. Information would be reported about builtins even when
5635 bug. Information would be reported about builtins even when
5630 user-defined functions overrode them.
5636 user-defined functions overrode them.
5631
5637
5632 2002-05-11 Fernando Perez <fperez@colorado.edu>
5638 2002-05-11 Fernando Perez <fperez@colorado.edu>
5633
5639
5634 * IPython/__init__.py (__all__): removed FlexCompleter from
5640 * IPython/__init__.py (__all__): removed FlexCompleter from
5635 __all__ so that things don't fail in platforms without readline.
5641 __all__ so that things don't fail in platforms without readline.
5636
5642
5637 2002-05-10 Fernando Perez <fperez@colorado.edu>
5643 2002-05-10 Fernando Perez <fperez@colorado.edu>
5638
5644
5639 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
5645 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
5640 it requires Numeric, effectively making Numeric a dependency for
5646 it requires Numeric, effectively making Numeric a dependency for
5641 IPython.
5647 IPython.
5642
5648
5643 * Released 0.2.13
5649 * Released 0.2.13
5644
5650
5645 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
5651 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
5646 profiler interface. Now all the major options from the profiler
5652 profiler interface. Now all the major options from the profiler
5647 module are directly supported in IPython, both for single
5653 module are directly supported in IPython, both for single
5648 expressions (@prun) and for full programs (@run -p).
5654 expressions (@prun) and for full programs (@run -p).
5649
5655
5650 2002-05-09 Fernando Perez <fperez@colorado.edu>
5656 2002-05-09 Fernando Perez <fperez@colorado.edu>
5651
5657
5652 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5658 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5653 magic properly formatted for screen.
5659 magic properly formatted for screen.
5654
5660
5655 * setup.py (make_shortcut): Changed things to put pdf version in
5661 * setup.py (make_shortcut): Changed things to put pdf version in
5656 doc/ instead of doc/manual (had to change lyxport a bit).
5662 doc/ instead of doc/manual (had to change lyxport a bit).
5657
5663
5658 * IPython/Magic.py (Profile.string_stats): made profile runs go
5664 * IPython/Magic.py (Profile.string_stats): made profile runs go
5659 through pager (they are long and a pager allows searching, saving,
5665 through pager (they are long and a pager allows searching, saving,
5660 etc.)
5666 etc.)
5661
5667
5662 2002-05-08 Fernando Perez <fperez@colorado.edu>
5668 2002-05-08 Fernando Perez <fperez@colorado.edu>
5663
5669
5664 * Released 0.2.12
5670 * Released 0.2.12
5665
5671
5666 2002-05-06 Fernando Perez <fperez@colorado.edu>
5672 2002-05-06 Fernando Perez <fperez@colorado.edu>
5667
5673
5668 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5674 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5669 introduced); 'hist n1 n2' was broken.
5675 introduced); 'hist n1 n2' was broken.
5670 (Magic.magic_pdb): added optional on/off arguments to @pdb
5676 (Magic.magic_pdb): added optional on/off arguments to @pdb
5671 (Magic.magic_run): added option -i to @run, which executes code in
5677 (Magic.magic_run): added option -i to @run, which executes code in
5672 the IPython namespace instead of a clean one. Also added @irun as
5678 the IPython namespace instead of a clean one. Also added @irun as
5673 an alias to @run -i.
5679 an alias to @run -i.
5674
5680
5675 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5681 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5676 fixed (it didn't really do anything, the namespaces were wrong).
5682 fixed (it didn't really do anything, the namespaces were wrong).
5677
5683
5678 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5684 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5679
5685
5680 * IPython/__init__.py (__all__): Fixed package namespace, now
5686 * IPython/__init__.py (__all__): Fixed package namespace, now
5681 'import IPython' does give access to IPython.<all> as
5687 'import IPython' does give access to IPython.<all> as
5682 expected. Also renamed __release__ to Release.
5688 expected. Also renamed __release__ to Release.
5683
5689
5684 * IPython/Debugger.py (__license__): created new Pdb class which
5690 * IPython/Debugger.py (__license__): created new Pdb class which
5685 functions like a drop-in for the normal pdb.Pdb but does NOT
5691 functions like a drop-in for the normal pdb.Pdb but does NOT
5686 import readline by default. This way it doesn't muck up IPython's
5692 import readline by default. This way it doesn't muck up IPython's
5687 readline handling, and now tab-completion finally works in the
5693 readline handling, and now tab-completion finally works in the
5688 debugger -- sort of. It completes things globally visible, but the
5694 debugger -- sort of. It completes things globally visible, but the
5689 completer doesn't track the stack as pdb walks it. That's a bit
5695 completer doesn't track the stack as pdb walks it. That's a bit
5690 tricky, and I'll have to implement it later.
5696 tricky, and I'll have to implement it later.
5691
5697
5692 2002-05-05 Fernando Perez <fperez@colorado.edu>
5698 2002-05-05 Fernando Perez <fperez@colorado.edu>
5693
5699
5694 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5700 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5695 magic docstrings when printed via ? (explicit \'s were being
5701 magic docstrings when printed via ? (explicit \'s were being
5696 printed).
5702 printed).
5697
5703
5698 * IPython/ipmaker.py (make_IPython): fixed namespace
5704 * IPython/ipmaker.py (make_IPython): fixed namespace
5699 identification bug. Now variables loaded via logs or command-line
5705 identification bug. Now variables loaded via logs or command-line
5700 files are recognized in the interactive namespace by @who.
5706 files are recognized in the interactive namespace by @who.
5701
5707
5702 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5708 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5703 log replay system stemming from the string form of Structs.
5709 log replay system stemming from the string form of Structs.
5704
5710
5705 * IPython/Magic.py (Macro.__init__): improved macros to properly
5711 * IPython/Magic.py (Macro.__init__): improved macros to properly
5706 handle magic commands in them.
5712 handle magic commands in them.
5707 (Magic.magic_logstart): usernames are now expanded so 'logstart
5713 (Magic.magic_logstart): usernames are now expanded so 'logstart
5708 ~/mylog' now works.
5714 ~/mylog' now works.
5709
5715
5710 * IPython/iplib.py (complete): fixed bug where paths starting with
5716 * IPython/iplib.py (complete): fixed bug where paths starting with
5711 '/' would be completed as magic names.
5717 '/' would be completed as magic names.
5712
5718
5713 2002-05-04 Fernando Perez <fperez@colorado.edu>
5719 2002-05-04 Fernando Perez <fperez@colorado.edu>
5714
5720
5715 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5721 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5716 allow running full programs under the profiler's control.
5722 allow running full programs under the profiler's control.
5717
5723
5718 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5724 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5719 mode to report exceptions verbosely but without formatting
5725 mode to report exceptions verbosely but without formatting
5720 variables. This addresses the issue of ipython 'freezing' (it's
5726 variables. This addresses the issue of ipython 'freezing' (it's
5721 not frozen, but caught in an expensive formatting loop) when huge
5727 not frozen, but caught in an expensive formatting loop) when huge
5722 variables are in the context of an exception.
5728 variables are in the context of an exception.
5723 (VerboseTB.text): Added '--->' markers at line where exception was
5729 (VerboseTB.text): Added '--->' markers at line where exception was
5724 triggered. Much clearer to read, especially in NoColor modes.
5730 triggered. Much clearer to read, especially in NoColor modes.
5725
5731
5726 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5732 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5727 implemented in reverse when changing to the new parse_options().
5733 implemented in reverse when changing to the new parse_options().
5728
5734
5729 2002-05-03 Fernando Perez <fperez@colorado.edu>
5735 2002-05-03 Fernando Perez <fperez@colorado.edu>
5730
5736
5731 * IPython/Magic.py (Magic.parse_options): new function so that
5737 * IPython/Magic.py (Magic.parse_options): new function so that
5732 magics can parse options easier.
5738 magics can parse options easier.
5733 (Magic.magic_prun): new function similar to profile.run(),
5739 (Magic.magic_prun): new function similar to profile.run(),
5734 suggested by Chris Hart.
5740 suggested by Chris Hart.
5735 (Magic.magic_cd): fixed behavior so that it only changes if
5741 (Magic.magic_cd): fixed behavior so that it only changes if
5736 directory actually is in history.
5742 directory actually is in history.
5737
5743
5738 * IPython/usage.py (__doc__): added information about potential
5744 * IPython/usage.py (__doc__): added information about potential
5739 slowness of Verbose exception mode when there are huge data
5745 slowness of Verbose exception mode when there are huge data
5740 structures to be formatted (thanks to Archie Paulson).
5746 structures to be formatted (thanks to Archie Paulson).
5741
5747
5742 * IPython/ipmaker.py (make_IPython): Changed default logging
5748 * IPython/ipmaker.py (make_IPython): Changed default logging
5743 (when simply called with -log) to use curr_dir/ipython.log in
5749 (when simply called with -log) to use curr_dir/ipython.log in
5744 rotate mode. Fixed crash which was occuring with -log before
5750 rotate mode. Fixed crash which was occuring with -log before
5745 (thanks to Jim Boyle).
5751 (thanks to Jim Boyle).
5746
5752
5747 2002-05-01 Fernando Perez <fperez@colorado.edu>
5753 2002-05-01 Fernando Perez <fperez@colorado.edu>
5748
5754
5749 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5755 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5750 was nasty -- though somewhat of a corner case).
5756 was nasty -- though somewhat of a corner case).
5751
5757
5752 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5758 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5753 text (was a bug).
5759 text (was a bug).
5754
5760
5755 2002-04-30 Fernando Perez <fperez@colorado.edu>
5761 2002-04-30 Fernando Perez <fperez@colorado.edu>
5756
5762
5757 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5763 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5758 a print after ^D or ^C from the user so that the In[] prompt
5764 a print after ^D or ^C from the user so that the In[] prompt
5759 doesn't over-run the gnuplot one.
5765 doesn't over-run the gnuplot one.
5760
5766
5761 2002-04-29 Fernando Perez <fperez@colorado.edu>
5767 2002-04-29 Fernando Perez <fperez@colorado.edu>
5762
5768
5763 * Released 0.2.10
5769 * Released 0.2.10
5764
5770
5765 * IPython/__release__.py (version): get date dynamically.
5771 * IPython/__release__.py (version): get date dynamically.
5766
5772
5767 * Misc. documentation updates thanks to Arnd's comments. Also ran
5773 * Misc. documentation updates thanks to Arnd's comments. Also ran
5768 a full spellcheck on the manual (hadn't been done in a while).
5774 a full spellcheck on the manual (hadn't been done in a while).
5769
5775
5770 2002-04-27 Fernando Perez <fperez@colorado.edu>
5776 2002-04-27 Fernando Perez <fperez@colorado.edu>
5771
5777
5772 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5778 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5773 starting a log in mid-session would reset the input history list.
5779 starting a log in mid-session would reset the input history list.
5774
5780
5775 2002-04-26 Fernando Perez <fperez@colorado.edu>
5781 2002-04-26 Fernando Perez <fperez@colorado.edu>
5776
5782
5777 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5783 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5778 all files were being included in an update. Now anything in
5784 all files were being included in an update. Now anything in
5779 UserConfig that matches [A-Za-z]*.py will go (this excludes
5785 UserConfig that matches [A-Za-z]*.py will go (this excludes
5780 __init__.py)
5786 __init__.py)
5781
5787
5782 2002-04-25 Fernando Perez <fperez@colorado.edu>
5788 2002-04-25 Fernando Perez <fperez@colorado.edu>
5783
5789
5784 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5790 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5785 to __builtins__ so that any form of embedded or imported code can
5791 to __builtins__ so that any form of embedded or imported code can
5786 test for being inside IPython.
5792 test for being inside IPython.
5787
5793
5788 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5794 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5789 changed to GnuplotMagic because it's now an importable module,
5795 changed to GnuplotMagic because it's now an importable module,
5790 this makes the name follow that of the standard Gnuplot module.
5796 this makes the name follow that of the standard Gnuplot module.
5791 GnuplotMagic can now be loaded at any time in mid-session.
5797 GnuplotMagic can now be loaded at any time in mid-session.
5792
5798
5793 2002-04-24 Fernando Perez <fperez@colorado.edu>
5799 2002-04-24 Fernando Perez <fperez@colorado.edu>
5794
5800
5795 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5801 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5796 the globals (IPython has its own namespace) and the
5802 the globals (IPython has its own namespace) and the
5797 PhysicalQuantity stuff is much better anyway.
5803 PhysicalQuantity stuff is much better anyway.
5798
5804
5799 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5805 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5800 embedding example to standard user directory for
5806 embedding example to standard user directory for
5801 distribution. Also put it in the manual.
5807 distribution. Also put it in the manual.
5802
5808
5803 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5809 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5804 instance as first argument (so it doesn't rely on some obscure
5810 instance as first argument (so it doesn't rely on some obscure
5805 hidden global).
5811 hidden global).
5806
5812
5807 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5813 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5808 delimiters. While it prevents ().TAB from working, it allows
5814 delimiters. While it prevents ().TAB from working, it allows
5809 completions in open (... expressions. This is by far a more common
5815 completions in open (... expressions. This is by far a more common
5810 case.
5816 case.
5811
5817
5812 2002-04-23 Fernando Perez <fperez@colorado.edu>
5818 2002-04-23 Fernando Perez <fperez@colorado.edu>
5813
5819
5814 * IPython/Extensions/InterpreterPasteInput.py: new
5820 * IPython/Extensions/InterpreterPasteInput.py: new
5815 syntax-processing module for pasting lines with >>> or ... at the
5821 syntax-processing module for pasting lines with >>> or ... at the
5816 start.
5822 start.
5817
5823
5818 * IPython/Extensions/PhysicalQ_Interactive.py
5824 * IPython/Extensions/PhysicalQ_Interactive.py
5819 (PhysicalQuantityInteractive.__int__): fixed to work with either
5825 (PhysicalQuantityInteractive.__int__): fixed to work with either
5820 Numeric or math.
5826 Numeric or math.
5821
5827
5822 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5828 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5823 provided profiles. Now we have:
5829 provided profiles. Now we have:
5824 -math -> math module as * and cmath with its own namespace.
5830 -math -> math module as * and cmath with its own namespace.
5825 -numeric -> Numeric as *, plus gnuplot & grace
5831 -numeric -> Numeric as *, plus gnuplot & grace
5826 -physics -> same as before
5832 -physics -> same as before
5827
5833
5828 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5834 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5829 user-defined magics wouldn't be found by @magic if they were
5835 user-defined magics wouldn't be found by @magic if they were
5830 defined as class methods. Also cleaned up the namespace search
5836 defined as class methods. Also cleaned up the namespace search
5831 logic and the string building (to use %s instead of many repeated
5837 logic and the string building (to use %s instead of many repeated
5832 string adds).
5838 string adds).
5833
5839
5834 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5840 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5835 of user-defined magics to operate with class methods (cleaner, in
5841 of user-defined magics to operate with class methods (cleaner, in
5836 line with the gnuplot code).
5842 line with the gnuplot code).
5837
5843
5838 2002-04-22 Fernando Perez <fperez@colorado.edu>
5844 2002-04-22 Fernando Perez <fperez@colorado.edu>
5839
5845
5840 * setup.py: updated dependency list so that manual is updated when
5846 * setup.py: updated dependency list so that manual is updated when
5841 all included files change.
5847 all included files change.
5842
5848
5843 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5849 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5844 the delimiter removal option (the fix is ugly right now).
5850 the delimiter removal option (the fix is ugly right now).
5845
5851
5846 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5852 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5847 all of the math profile (quicker loading, no conflict between
5853 all of the math profile (quicker loading, no conflict between
5848 g-9.8 and g-gnuplot).
5854 g-9.8 and g-gnuplot).
5849
5855
5850 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5856 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5851 name of post-mortem files to IPython_crash_report.txt.
5857 name of post-mortem files to IPython_crash_report.txt.
5852
5858
5853 * Cleanup/update of the docs. Added all the new readline info and
5859 * Cleanup/update of the docs. Added all the new readline info and
5854 formatted all lists as 'real lists'.
5860 formatted all lists as 'real lists'.
5855
5861
5856 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5862 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5857 tab-completion options, since the full readline parse_and_bind is
5863 tab-completion options, since the full readline parse_and_bind is
5858 now accessible.
5864 now accessible.
5859
5865
5860 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5866 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5861 handling of readline options. Now users can specify any string to
5867 handling of readline options. Now users can specify any string to
5862 be passed to parse_and_bind(), as well as the delimiters to be
5868 be passed to parse_and_bind(), as well as the delimiters to be
5863 removed.
5869 removed.
5864 (InteractiveShell.__init__): Added __name__ to the global
5870 (InteractiveShell.__init__): Added __name__ to the global
5865 namespace so that things like Itpl which rely on its existence
5871 namespace so that things like Itpl which rely on its existence
5866 don't crash.
5872 don't crash.
5867 (InteractiveShell._prefilter): Defined the default with a _ so
5873 (InteractiveShell._prefilter): Defined the default with a _ so
5868 that prefilter() is easier to override, while the default one
5874 that prefilter() is easier to override, while the default one
5869 remains available.
5875 remains available.
5870
5876
5871 2002-04-18 Fernando Perez <fperez@colorado.edu>
5877 2002-04-18 Fernando Perez <fperez@colorado.edu>
5872
5878
5873 * Added information about pdb in the docs.
5879 * Added information about pdb in the docs.
5874
5880
5875 2002-04-17 Fernando Perez <fperez@colorado.edu>
5881 2002-04-17 Fernando Perez <fperez@colorado.edu>
5876
5882
5877 * IPython/ipmaker.py (make_IPython): added rc_override option to
5883 * IPython/ipmaker.py (make_IPython): added rc_override option to
5878 allow passing config options at creation time which may override
5884 allow passing config options at creation time which may override
5879 anything set in the config files or command line. This is
5885 anything set in the config files or command line. This is
5880 particularly useful for configuring embedded instances.
5886 particularly useful for configuring embedded instances.
5881
5887
5882 2002-04-15 Fernando Perez <fperez@colorado.edu>
5888 2002-04-15 Fernando Perez <fperez@colorado.edu>
5883
5889
5884 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5890 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5885 crash embedded instances because of the input cache falling out of
5891 crash embedded instances because of the input cache falling out of
5886 sync with the output counter.
5892 sync with the output counter.
5887
5893
5888 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5894 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5889 mode which calls pdb after an uncaught exception in IPython itself.
5895 mode which calls pdb after an uncaught exception in IPython itself.
5890
5896
5891 2002-04-14 Fernando Perez <fperez@colorado.edu>
5897 2002-04-14 Fernando Perez <fperez@colorado.edu>
5892
5898
5893 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5899 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5894 readline, fix it back after each call.
5900 readline, fix it back after each call.
5895
5901
5896 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5902 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5897 method to force all access via __call__(), which guarantees that
5903 method to force all access via __call__(), which guarantees that
5898 traceback references are properly deleted.
5904 traceback references are properly deleted.
5899
5905
5900 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5906 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5901 improve printing when pprint is in use.
5907 improve printing when pprint is in use.
5902
5908
5903 2002-04-13 Fernando Perez <fperez@colorado.edu>
5909 2002-04-13 Fernando Perez <fperez@colorado.edu>
5904
5910
5905 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5911 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5906 exceptions aren't caught anymore. If the user triggers one, he
5912 exceptions aren't caught anymore. If the user triggers one, he
5907 should know why he's doing it and it should go all the way up,
5913 should know why he's doing it and it should go all the way up,
5908 just like any other exception. So now @abort will fully kill the
5914 just like any other exception. So now @abort will fully kill the
5909 embedded interpreter and the embedding code (unless that happens
5915 embedded interpreter and the embedding code (unless that happens
5910 to catch SystemExit).
5916 to catch SystemExit).
5911
5917
5912 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5918 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5913 and a debugger() method to invoke the interactive pdb debugger
5919 and a debugger() method to invoke the interactive pdb debugger
5914 after printing exception information. Also added the corresponding
5920 after printing exception information. Also added the corresponding
5915 -pdb option and @pdb magic to control this feature, and updated
5921 -pdb option and @pdb magic to control this feature, and updated
5916 the docs. After a suggestion from Christopher Hart
5922 the docs. After a suggestion from Christopher Hart
5917 (hart-AT-caltech.edu).
5923 (hart-AT-caltech.edu).
5918
5924
5919 2002-04-12 Fernando Perez <fperez@colorado.edu>
5925 2002-04-12 Fernando Perez <fperez@colorado.edu>
5920
5926
5921 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5927 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5922 the exception handlers defined by the user (not the CrashHandler)
5928 the exception handlers defined by the user (not the CrashHandler)
5923 so that user exceptions don't trigger an ipython bug report.
5929 so that user exceptions don't trigger an ipython bug report.
5924
5930
5925 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5931 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5926 configurable (it should have always been so).
5932 configurable (it should have always been so).
5927
5933
5928 2002-03-26 Fernando Perez <fperez@colorado.edu>
5934 2002-03-26 Fernando Perez <fperez@colorado.edu>
5929
5935
5930 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5936 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5931 and there to fix embedding namespace issues. This should all be
5937 and there to fix embedding namespace issues. This should all be
5932 done in a more elegant way.
5938 done in a more elegant way.
5933
5939
5934 2002-03-25 Fernando Perez <fperez@colorado.edu>
5940 2002-03-25 Fernando Perez <fperez@colorado.edu>
5935
5941
5936 * IPython/genutils.py (get_home_dir): Try to make it work under
5942 * IPython/genutils.py (get_home_dir): Try to make it work under
5937 win9x also.
5943 win9x also.
5938
5944
5939 2002-03-20 Fernando Perez <fperez@colorado.edu>
5945 2002-03-20 Fernando Perez <fperez@colorado.edu>
5940
5946
5941 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5947 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5942 sys.displayhook untouched upon __init__.
5948 sys.displayhook untouched upon __init__.
5943
5949
5944 2002-03-19 Fernando Perez <fperez@colorado.edu>
5950 2002-03-19 Fernando Perez <fperez@colorado.edu>
5945
5951
5946 * Released 0.2.9 (for embedding bug, basically).
5952 * Released 0.2.9 (for embedding bug, basically).
5947
5953
5948 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5954 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5949 exceptions so that enclosing shell's state can be restored.
5955 exceptions so that enclosing shell's state can be restored.
5950
5956
5951 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5957 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5952 naming conventions in the .ipython/ dir.
5958 naming conventions in the .ipython/ dir.
5953
5959
5954 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5960 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5955 from delimiters list so filenames with - in them get expanded.
5961 from delimiters list so filenames with - in them get expanded.
5956
5962
5957 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5963 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5958 sys.displayhook not being properly restored after an embedded call.
5964 sys.displayhook not being properly restored after an embedded call.
5959
5965
5960 2002-03-18 Fernando Perez <fperez@colorado.edu>
5966 2002-03-18 Fernando Perez <fperez@colorado.edu>
5961
5967
5962 * Released 0.2.8
5968 * Released 0.2.8
5963
5969
5964 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5970 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5965 some files weren't being included in a -upgrade.
5971 some files weren't being included in a -upgrade.
5966 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5972 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5967 on' so that the first tab completes.
5973 on' so that the first tab completes.
5968 (InteractiveShell.handle_magic): fixed bug with spaces around
5974 (InteractiveShell.handle_magic): fixed bug with spaces around
5969 quotes breaking many magic commands.
5975 quotes breaking many magic commands.
5970
5976
5971 * setup.py: added note about ignoring the syntax error messages at
5977 * setup.py: added note about ignoring the syntax error messages at
5972 installation.
5978 installation.
5973
5979
5974 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5980 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5975 streamlining the gnuplot interface, now there's only one magic @gp.
5981 streamlining the gnuplot interface, now there's only one magic @gp.
5976
5982
5977 2002-03-17 Fernando Perez <fperez@colorado.edu>
5983 2002-03-17 Fernando Perez <fperez@colorado.edu>
5978
5984
5979 * IPython/UserConfig/magic_gnuplot.py: new name for the
5985 * IPython/UserConfig/magic_gnuplot.py: new name for the
5980 example-magic_pm.py file. Much enhanced system, now with a shell
5986 example-magic_pm.py file. Much enhanced system, now with a shell
5981 for communicating directly with gnuplot, one command at a time.
5987 for communicating directly with gnuplot, one command at a time.
5982
5988
5983 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5989 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5984 setting __name__=='__main__'.
5990 setting __name__=='__main__'.
5985
5991
5986 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5992 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5987 mini-shell for accessing gnuplot from inside ipython. Should
5993 mini-shell for accessing gnuplot from inside ipython. Should
5988 extend it later for grace access too. Inspired by Arnd's
5994 extend it later for grace access too. Inspired by Arnd's
5989 suggestion.
5995 suggestion.
5990
5996
5991 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5997 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5992 calling magic functions with () in their arguments. Thanks to Arnd
5998 calling magic functions with () in their arguments. Thanks to Arnd
5993 Baecker for pointing this to me.
5999 Baecker for pointing this to me.
5994
6000
5995 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6001 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5996 infinitely for integer or complex arrays (only worked with floats).
6002 infinitely for integer or complex arrays (only worked with floats).
5997
6003
5998 2002-03-16 Fernando Perez <fperez@colorado.edu>
6004 2002-03-16 Fernando Perez <fperez@colorado.edu>
5999
6005
6000 * setup.py: Merged setup and setup_windows into a single script
6006 * setup.py: Merged setup and setup_windows into a single script
6001 which properly handles things for windows users.
6007 which properly handles things for windows users.
6002
6008
6003 2002-03-15 Fernando Perez <fperez@colorado.edu>
6009 2002-03-15 Fernando Perez <fperez@colorado.edu>
6004
6010
6005 * Big change to the manual: now the magics are all automatically
6011 * Big change to the manual: now the magics are all automatically
6006 documented. This information is generated from their docstrings
6012 documented. This information is generated from their docstrings
6007 and put in a latex file included by the manual lyx file. This way
6013 and put in a latex file included by the manual lyx file. This way
6008 we get always up to date information for the magics. The manual
6014 we get always up to date information for the magics. The manual
6009 now also has proper version information, also auto-synced.
6015 now also has proper version information, also auto-synced.
6010
6016
6011 For this to work, an undocumented --magic_docstrings option was added.
6017 For this to work, an undocumented --magic_docstrings option was added.
6012
6018
6013 2002-03-13 Fernando Perez <fperez@colorado.edu>
6019 2002-03-13 Fernando Perez <fperez@colorado.edu>
6014
6020
6015 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6021 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6016 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6022 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6017
6023
6018 2002-03-12 Fernando Perez <fperez@colorado.edu>
6024 2002-03-12 Fernando Perez <fperez@colorado.edu>
6019
6025
6020 * IPython/ultraTB.py (TermColors): changed color escapes again to
6026 * IPython/ultraTB.py (TermColors): changed color escapes again to
6021 fix the (old, reintroduced) line-wrapping bug. Basically, if
6027 fix the (old, reintroduced) line-wrapping bug. Basically, if
6022 \001..\002 aren't given in the color escapes, lines get wrapped
6028 \001..\002 aren't given in the color escapes, lines get wrapped
6023 weirdly. But giving those screws up old xterms and emacs terms. So
6029 weirdly. But giving those screws up old xterms and emacs terms. So
6024 I added some logic for emacs terms to be ok, but I can't identify old
6030 I added some logic for emacs terms to be ok, but I can't identify old
6025 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6031 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6026
6032
6027 2002-03-10 Fernando Perez <fperez@colorado.edu>
6033 2002-03-10 Fernando Perez <fperez@colorado.edu>
6028
6034
6029 * IPython/usage.py (__doc__): Various documentation cleanups and
6035 * IPython/usage.py (__doc__): Various documentation cleanups and
6030 updates, both in usage docstrings and in the manual.
6036 updates, both in usage docstrings and in the manual.
6031
6037
6032 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6038 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6033 handling of caching. Set minimum acceptabe value for having a
6039 handling of caching. Set minimum acceptabe value for having a
6034 cache at 20 values.
6040 cache at 20 values.
6035
6041
6036 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6042 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6037 install_first_time function to a method, renamed it and added an
6043 install_first_time function to a method, renamed it and added an
6038 'upgrade' mode. Now people can update their config directory with
6044 'upgrade' mode. Now people can update their config directory with
6039 a simple command line switch (-upgrade, also new).
6045 a simple command line switch (-upgrade, also new).
6040
6046
6041 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6047 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6042 @file (convenient for automagic users under Python >= 2.2).
6048 @file (convenient for automagic users under Python >= 2.2).
6043 Removed @files (it seemed more like a plural than an abbrev. of
6049 Removed @files (it seemed more like a plural than an abbrev. of
6044 'file show').
6050 'file show').
6045
6051
6046 * IPython/iplib.py (install_first_time): Fixed crash if there were
6052 * IPython/iplib.py (install_first_time): Fixed crash if there were
6047 backup files ('~') in .ipython/ install directory.
6053 backup files ('~') in .ipython/ install directory.
6048
6054
6049 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6055 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6050 system. Things look fine, but these changes are fairly
6056 system. Things look fine, but these changes are fairly
6051 intrusive. Test them for a few days.
6057 intrusive. Test them for a few days.
6052
6058
6053 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6059 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6054 the prompts system. Now all in/out prompt strings are user
6060 the prompts system. Now all in/out prompt strings are user
6055 controllable. This is particularly useful for embedding, as one
6061 controllable. This is particularly useful for embedding, as one
6056 can tag embedded instances with particular prompts.
6062 can tag embedded instances with particular prompts.
6057
6063
6058 Also removed global use of sys.ps1/2, which now allows nested
6064 Also removed global use of sys.ps1/2, which now allows nested
6059 embeddings without any problems. Added command-line options for
6065 embeddings without any problems. Added command-line options for
6060 the prompt strings.
6066 the prompt strings.
6061
6067
6062 2002-03-08 Fernando Perez <fperez@colorado.edu>
6068 2002-03-08 Fernando Perez <fperez@colorado.edu>
6063
6069
6064 * IPython/UserConfig/example-embed-short.py (ipshell): added
6070 * IPython/UserConfig/example-embed-short.py (ipshell): added
6065 example file with the bare minimum code for embedding.
6071 example file with the bare minimum code for embedding.
6066
6072
6067 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6073 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6068 functionality for the embeddable shell to be activated/deactivated
6074 functionality for the embeddable shell to be activated/deactivated
6069 either globally or at each call.
6075 either globally or at each call.
6070
6076
6071 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6077 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6072 rewriting the prompt with '--->' for auto-inputs with proper
6078 rewriting the prompt with '--->' for auto-inputs with proper
6073 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6079 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6074 this is handled by the prompts class itself, as it should.
6080 this is handled by the prompts class itself, as it should.
6075
6081
6076 2002-03-05 Fernando Perez <fperez@colorado.edu>
6082 2002-03-05 Fernando Perez <fperez@colorado.edu>
6077
6083
6078 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6084 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6079 @logstart to avoid name clashes with the math log function.
6085 @logstart to avoid name clashes with the math log function.
6080
6086
6081 * Big updates to X/Emacs section of the manual.
6087 * Big updates to X/Emacs section of the manual.
6082
6088
6083 * Removed ipython_emacs. Milan explained to me how to pass
6089 * Removed ipython_emacs. Milan explained to me how to pass
6084 arguments to ipython through Emacs. Some day I'm going to end up
6090 arguments to ipython through Emacs. Some day I'm going to end up
6085 learning some lisp...
6091 learning some lisp...
6086
6092
6087 2002-03-04 Fernando Perez <fperez@colorado.edu>
6093 2002-03-04 Fernando Perez <fperez@colorado.edu>
6088
6094
6089 * IPython/ipython_emacs: Created script to be used as the
6095 * IPython/ipython_emacs: Created script to be used as the
6090 py-python-command Emacs variable so we can pass IPython
6096 py-python-command Emacs variable so we can pass IPython
6091 parameters. I can't figure out how to tell Emacs directly to pass
6097 parameters. I can't figure out how to tell Emacs directly to pass
6092 parameters to IPython, so a dummy shell script will do it.
6098 parameters to IPython, so a dummy shell script will do it.
6093
6099
6094 Other enhancements made for things to work better under Emacs'
6100 Other enhancements made for things to work better under Emacs'
6095 various types of terminals. Many thanks to Milan Zamazal
6101 various types of terminals. Many thanks to Milan Zamazal
6096 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6102 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6097
6103
6098 2002-03-01 Fernando Perez <fperez@colorado.edu>
6104 2002-03-01 Fernando Perez <fperez@colorado.edu>
6099
6105
6100 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6106 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6101 that loading of readline is now optional. This gives better
6107 that loading of readline is now optional. This gives better
6102 control to emacs users.
6108 control to emacs users.
6103
6109
6104 * IPython/ultraTB.py (__date__): Modified color escape sequences
6110 * IPython/ultraTB.py (__date__): Modified color escape sequences
6105 and now things work fine under xterm and in Emacs' term buffers
6111 and now things work fine under xterm and in Emacs' term buffers
6106 (though not shell ones). Well, in emacs you get colors, but all
6112 (though not shell ones). Well, in emacs you get colors, but all
6107 seem to be 'light' colors (no difference between dark and light
6113 seem to be 'light' colors (no difference between dark and light
6108 ones). But the garbage chars are gone, and also in xterms. It
6114 ones). But the garbage chars are gone, and also in xterms. It
6109 seems that now I'm using 'cleaner' ansi sequences.
6115 seems that now I'm using 'cleaner' ansi sequences.
6110
6116
6111 2002-02-21 Fernando Perez <fperez@colorado.edu>
6117 2002-02-21 Fernando Perez <fperez@colorado.edu>
6112
6118
6113 * Released 0.2.7 (mainly to publish the scoping fix).
6119 * Released 0.2.7 (mainly to publish the scoping fix).
6114
6120
6115 * IPython/Logger.py (Logger.logstate): added. A corresponding
6121 * IPython/Logger.py (Logger.logstate): added. A corresponding
6116 @logstate magic was created.
6122 @logstate magic was created.
6117
6123
6118 * IPython/Magic.py: fixed nested scoping problem under Python
6124 * IPython/Magic.py: fixed nested scoping problem under Python
6119 2.1.x (automagic wasn't working).
6125 2.1.x (automagic wasn't working).
6120
6126
6121 2002-02-20 Fernando Perez <fperez@colorado.edu>
6127 2002-02-20 Fernando Perez <fperez@colorado.edu>
6122
6128
6123 * Released 0.2.6.
6129 * Released 0.2.6.
6124
6130
6125 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6131 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6126 option so that logs can come out without any headers at all.
6132 option so that logs can come out without any headers at all.
6127
6133
6128 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6134 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6129 SciPy.
6135 SciPy.
6130
6136
6131 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6137 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6132 that embedded IPython calls don't require vars() to be explicitly
6138 that embedded IPython calls don't require vars() to be explicitly
6133 passed. Now they are extracted from the caller's frame (code
6139 passed. Now they are extracted from the caller's frame (code
6134 snatched from Eric Jones' weave). Added better documentation to
6140 snatched from Eric Jones' weave). Added better documentation to
6135 the section on embedding and the example file.
6141 the section on embedding and the example file.
6136
6142
6137 * IPython/genutils.py (page): Changed so that under emacs, it just
6143 * IPython/genutils.py (page): Changed so that under emacs, it just
6138 prints the string. You can then page up and down in the emacs
6144 prints the string. You can then page up and down in the emacs
6139 buffer itself. This is how the builtin help() works.
6145 buffer itself. This is how the builtin help() works.
6140
6146
6141 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6147 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6142 macro scoping: macros need to be executed in the user's namespace
6148 macro scoping: macros need to be executed in the user's namespace
6143 to work as if they had been typed by the user.
6149 to work as if they had been typed by the user.
6144
6150
6145 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6151 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6146 execute automatically (no need to type 'exec...'). They then
6152 execute automatically (no need to type 'exec...'). They then
6147 behave like 'true macros'. The printing system was also modified
6153 behave like 'true macros'. The printing system was also modified
6148 for this to work.
6154 for this to work.
6149
6155
6150 2002-02-19 Fernando Perez <fperez@colorado.edu>
6156 2002-02-19 Fernando Perez <fperez@colorado.edu>
6151
6157
6152 * IPython/genutils.py (page_file): new function for paging files
6158 * IPython/genutils.py (page_file): new function for paging files
6153 in an OS-independent way. Also necessary for file viewing to work
6159 in an OS-independent way. Also necessary for file viewing to work
6154 well inside Emacs buffers.
6160 well inside Emacs buffers.
6155 (page): Added checks for being in an emacs buffer.
6161 (page): Added checks for being in an emacs buffer.
6156 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6162 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6157 same bug in iplib.
6163 same bug in iplib.
6158
6164
6159 2002-02-18 Fernando Perez <fperez@colorado.edu>
6165 2002-02-18 Fernando Perez <fperez@colorado.edu>
6160
6166
6161 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6167 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6162 of readline so that IPython can work inside an Emacs buffer.
6168 of readline so that IPython can work inside an Emacs buffer.
6163
6169
6164 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6170 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6165 method signatures (they weren't really bugs, but it looks cleaner
6171 method signatures (they weren't really bugs, but it looks cleaner
6166 and keeps PyChecker happy).
6172 and keeps PyChecker happy).
6167
6173
6168 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6174 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6169 for implementing various user-defined hooks. Currently only
6175 for implementing various user-defined hooks. Currently only
6170 display is done.
6176 display is done.
6171
6177
6172 * IPython/Prompts.py (CachedOutput._display): changed display
6178 * IPython/Prompts.py (CachedOutput._display): changed display
6173 functions so that they can be dynamically changed by users easily.
6179 functions so that they can be dynamically changed by users easily.
6174
6180
6175 * IPython/Extensions/numeric_formats.py (num_display): added an
6181 * IPython/Extensions/numeric_formats.py (num_display): added an
6176 extension for printing NumPy arrays in flexible manners. It
6182 extension for printing NumPy arrays in flexible manners. It
6177 doesn't do anything yet, but all the structure is in
6183 doesn't do anything yet, but all the structure is in
6178 place. Ultimately the plan is to implement output format control
6184 place. Ultimately the plan is to implement output format control
6179 like in Octave.
6185 like in Octave.
6180
6186
6181 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6187 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6182 methods are found at run-time by all the automatic machinery.
6188 methods are found at run-time by all the automatic machinery.
6183
6189
6184 2002-02-17 Fernando Perez <fperez@colorado.edu>
6190 2002-02-17 Fernando Perez <fperez@colorado.edu>
6185
6191
6186 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6192 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6187 whole file a little.
6193 whole file a little.
6188
6194
6189 * ToDo: closed this document. Now there's a new_design.lyx
6195 * ToDo: closed this document. Now there's a new_design.lyx
6190 document for all new ideas. Added making a pdf of it for the
6196 document for all new ideas. Added making a pdf of it for the
6191 end-user distro.
6197 end-user distro.
6192
6198
6193 * IPython/Logger.py (Logger.switch_log): Created this to replace
6199 * IPython/Logger.py (Logger.switch_log): Created this to replace
6194 logon() and logoff(). It also fixes a nasty crash reported by
6200 logon() and logoff(). It also fixes a nasty crash reported by
6195 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6201 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6196
6202
6197 * IPython/iplib.py (complete): got auto-completion to work with
6203 * IPython/iplib.py (complete): got auto-completion to work with
6198 automagic (I had wanted this for a long time).
6204 automagic (I had wanted this for a long time).
6199
6205
6200 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6206 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6201 to @file, since file() is now a builtin and clashes with automagic
6207 to @file, since file() is now a builtin and clashes with automagic
6202 for @file.
6208 for @file.
6203
6209
6204 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6210 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6205 of this was previously in iplib, which had grown to more than 2000
6211 of this was previously in iplib, which had grown to more than 2000
6206 lines, way too long. No new functionality, but it makes managing
6212 lines, way too long. No new functionality, but it makes managing
6207 the code a bit easier.
6213 the code a bit easier.
6208
6214
6209 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6215 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6210 information to crash reports.
6216 information to crash reports.
6211
6217
6212 2002-02-12 Fernando Perez <fperez@colorado.edu>
6218 2002-02-12 Fernando Perez <fperez@colorado.edu>
6213
6219
6214 * Released 0.2.5.
6220 * Released 0.2.5.
6215
6221
6216 2002-02-11 Fernando Perez <fperez@colorado.edu>
6222 2002-02-11 Fernando Perez <fperez@colorado.edu>
6217
6223
6218 * Wrote a relatively complete Windows installer. It puts
6224 * Wrote a relatively complete Windows installer. It puts
6219 everything in place, creates Start Menu entries and fixes the
6225 everything in place, creates Start Menu entries and fixes the
6220 color issues. Nothing fancy, but it works.
6226 color issues. Nothing fancy, but it works.
6221
6227
6222 2002-02-10 Fernando Perez <fperez@colorado.edu>
6228 2002-02-10 Fernando Perez <fperez@colorado.edu>
6223
6229
6224 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6230 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6225 os.path.expanduser() call so that we can type @run ~/myfile.py and
6231 os.path.expanduser() call so that we can type @run ~/myfile.py and
6226 have thigs work as expected.
6232 have thigs work as expected.
6227
6233
6228 * IPython/genutils.py (page): fixed exception handling so things
6234 * IPython/genutils.py (page): fixed exception handling so things
6229 work both in Unix and Windows correctly. Quitting a pager triggers
6235 work both in Unix and Windows correctly. Quitting a pager triggers
6230 an IOError/broken pipe in Unix, and in windows not finding a pager
6236 an IOError/broken pipe in Unix, and in windows not finding a pager
6231 is also an IOError, so I had to actually look at the return value
6237 is also an IOError, so I had to actually look at the return value
6232 of the exception, not just the exception itself. Should be ok now.
6238 of the exception, not just the exception itself. Should be ok now.
6233
6239
6234 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6240 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6235 modified to allow case-insensitive color scheme changes.
6241 modified to allow case-insensitive color scheme changes.
6236
6242
6237 2002-02-09 Fernando Perez <fperez@colorado.edu>
6243 2002-02-09 Fernando Perez <fperez@colorado.edu>
6238
6244
6239 * IPython/genutils.py (native_line_ends): new function to leave
6245 * IPython/genutils.py (native_line_ends): new function to leave
6240 user config files with os-native line-endings.
6246 user config files with os-native line-endings.
6241
6247
6242 * README and manual updates.
6248 * README and manual updates.
6243
6249
6244 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6250 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6245 instead of StringType to catch Unicode strings.
6251 instead of StringType to catch Unicode strings.
6246
6252
6247 * IPython/genutils.py (filefind): fixed bug for paths with
6253 * IPython/genutils.py (filefind): fixed bug for paths with
6248 embedded spaces (very common in Windows).
6254 embedded spaces (very common in Windows).
6249
6255
6250 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6256 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6251 files under Windows, so that they get automatically associated
6257 files under Windows, so that they get automatically associated
6252 with a text editor. Windows makes it a pain to handle
6258 with a text editor. Windows makes it a pain to handle
6253 extension-less files.
6259 extension-less files.
6254
6260
6255 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6261 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6256 warning about readline only occur for Posix. In Windows there's no
6262 warning about readline only occur for Posix. In Windows there's no
6257 way to get readline, so why bother with the warning.
6263 way to get readline, so why bother with the warning.
6258
6264
6259 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6265 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6260 for __str__ instead of dir(self), since dir() changed in 2.2.
6266 for __str__ instead of dir(self), since dir() changed in 2.2.
6261
6267
6262 * Ported to Windows! Tested on XP, I suspect it should work fine
6268 * Ported to Windows! Tested on XP, I suspect it should work fine
6263 on NT/2000, but I don't think it will work on 98 et al. That
6269 on NT/2000, but I don't think it will work on 98 et al. That
6264 series of Windows is such a piece of junk anyway that I won't try
6270 series of Windows is such a piece of junk anyway that I won't try
6265 porting it there. The XP port was straightforward, showed a few
6271 porting it there. The XP port was straightforward, showed a few
6266 bugs here and there (fixed all), in particular some string
6272 bugs here and there (fixed all), in particular some string
6267 handling stuff which required considering Unicode strings (which
6273 handling stuff which required considering Unicode strings (which
6268 Windows uses). This is good, but hasn't been too tested :) No
6274 Windows uses). This is good, but hasn't been too tested :) No
6269 fancy installer yet, I'll put a note in the manual so people at
6275 fancy installer yet, I'll put a note in the manual so people at
6270 least make manually a shortcut.
6276 least make manually a shortcut.
6271
6277
6272 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6278 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6273 into a single one, "colors". This now controls both prompt and
6279 into a single one, "colors". This now controls both prompt and
6274 exception color schemes, and can be changed both at startup
6280 exception color schemes, and can be changed both at startup
6275 (either via command-line switches or via ipythonrc files) and at
6281 (either via command-line switches or via ipythonrc files) and at
6276 runtime, with @colors.
6282 runtime, with @colors.
6277 (Magic.magic_run): renamed @prun to @run and removed the old
6283 (Magic.magic_run): renamed @prun to @run and removed the old
6278 @run. The two were too similar to warrant keeping both.
6284 @run. The two were too similar to warrant keeping both.
6279
6285
6280 2002-02-03 Fernando Perez <fperez@colorado.edu>
6286 2002-02-03 Fernando Perez <fperez@colorado.edu>
6281
6287
6282 * IPython/iplib.py (install_first_time): Added comment on how to
6288 * IPython/iplib.py (install_first_time): Added comment on how to
6283 configure the color options for first-time users. Put a <return>
6289 configure the color options for first-time users. Put a <return>
6284 request at the end so that small-terminal users get a chance to
6290 request at the end so that small-terminal users get a chance to
6285 read the startup info.
6291 read the startup info.
6286
6292
6287 2002-01-23 Fernando Perez <fperez@colorado.edu>
6293 2002-01-23 Fernando Perez <fperez@colorado.edu>
6288
6294
6289 * IPython/iplib.py (CachedOutput.update): Changed output memory
6295 * IPython/iplib.py (CachedOutput.update): Changed output memory
6290 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6296 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6291 input history we still use _i. Did this b/c these variable are
6297 input history we still use _i. Did this b/c these variable are
6292 very commonly used in interactive work, so the less we need to
6298 very commonly used in interactive work, so the less we need to
6293 type the better off we are.
6299 type the better off we are.
6294 (Magic.magic_prun): updated @prun to better handle the namespaces
6300 (Magic.magic_prun): updated @prun to better handle the namespaces
6295 the file will run in, including a fix for __name__ not being set
6301 the file will run in, including a fix for __name__ not being set
6296 before.
6302 before.
6297
6303
6298 2002-01-20 Fernando Perez <fperez@colorado.edu>
6304 2002-01-20 Fernando Perez <fperez@colorado.edu>
6299
6305
6300 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6306 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6301 extra garbage for Python 2.2. Need to look more carefully into
6307 extra garbage for Python 2.2. Need to look more carefully into
6302 this later.
6308 this later.
6303
6309
6304 2002-01-19 Fernando Perez <fperez@colorado.edu>
6310 2002-01-19 Fernando Perez <fperez@colorado.edu>
6305
6311
6306 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6312 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6307 display SyntaxError exceptions properly formatted when they occur
6313 display SyntaxError exceptions properly formatted when they occur
6308 (they can be triggered by imported code).
6314 (they can be triggered by imported code).
6309
6315
6310 2002-01-18 Fernando Perez <fperez@colorado.edu>
6316 2002-01-18 Fernando Perez <fperez@colorado.edu>
6311
6317
6312 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6318 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6313 SyntaxError exceptions are reported nicely formatted, instead of
6319 SyntaxError exceptions are reported nicely formatted, instead of
6314 spitting out only offset information as before.
6320 spitting out only offset information as before.
6315 (Magic.magic_prun): Added the @prun function for executing
6321 (Magic.magic_prun): Added the @prun function for executing
6316 programs with command line args inside IPython.
6322 programs with command line args inside IPython.
6317
6323
6318 2002-01-16 Fernando Perez <fperez@colorado.edu>
6324 2002-01-16 Fernando Perez <fperez@colorado.edu>
6319
6325
6320 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6326 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6321 to *not* include the last item given in a range. This brings their
6327 to *not* include the last item given in a range. This brings their
6322 behavior in line with Python's slicing:
6328 behavior in line with Python's slicing:
6323 a[n1:n2] -> a[n1]...a[n2-1]
6329 a[n1:n2] -> a[n1]...a[n2-1]
6324 It may be a bit less convenient, but I prefer to stick to Python's
6330 It may be a bit less convenient, but I prefer to stick to Python's
6325 conventions *everywhere*, so users never have to wonder.
6331 conventions *everywhere*, so users never have to wonder.
6326 (Magic.magic_macro): Added @macro function to ease the creation of
6332 (Magic.magic_macro): Added @macro function to ease the creation of
6327 macros.
6333 macros.
6328
6334
6329 2002-01-05 Fernando Perez <fperez@colorado.edu>
6335 2002-01-05 Fernando Perez <fperez@colorado.edu>
6330
6336
6331 * Released 0.2.4.
6337 * Released 0.2.4.
6332
6338
6333 * IPython/iplib.py (Magic.magic_pdef):
6339 * IPython/iplib.py (Magic.magic_pdef):
6334 (InteractiveShell.safe_execfile): report magic lines and error
6340 (InteractiveShell.safe_execfile): report magic lines and error
6335 lines without line numbers so one can easily copy/paste them for
6341 lines without line numbers so one can easily copy/paste them for
6336 re-execution.
6342 re-execution.
6337
6343
6338 * Updated manual with recent changes.
6344 * Updated manual with recent changes.
6339
6345
6340 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6346 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6341 docstring printing when class? is called. Very handy for knowing
6347 docstring printing when class? is called. Very handy for knowing
6342 how to create class instances (as long as __init__ is well
6348 how to create class instances (as long as __init__ is well
6343 documented, of course :)
6349 documented, of course :)
6344 (Magic.magic_doc): print both class and constructor docstrings.
6350 (Magic.magic_doc): print both class and constructor docstrings.
6345 (Magic.magic_pdef): give constructor info if passed a class and
6351 (Magic.magic_pdef): give constructor info if passed a class and
6346 __call__ info for callable object instances.
6352 __call__ info for callable object instances.
6347
6353
6348 2002-01-04 Fernando Perez <fperez@colorado.edu>
6354 2002-01-04 Fernando Perez <fperez@colorado.edu>
6349
6355
6350 * Made deep_reload() off by default. It doesn't always work
6356 * Made deep_reload() off by default. It doesn't always work
6351 exactly as intended, so it's probably safer to have it off. It's
6357 exactly as intended, so it's probably safer to have it off. It's
6352 still available as dreload() anyway, so nothing is lost.
6358 still available as dreload() anyway, so nothing is lost.
6353
6359
6354 2002-01-02 Fernando Perez <fperez@colorado.edu>
6360 2002-01-02 Fernando Perez <fperez@colorado.edu>
6355
6361
6356 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6362 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6357 so I wanted an updated release).
6363 so I wanted an updated release).
6358
6364
6359 2001-12-27 Fernando Perez <fperez@colorado.edu>
6365 2001-12-27 Fernando Perez <fperez@colorado.edu>
6360
6366
6361 * IPython/iplib.py (InteractiveShell.interact): Added the original
6367 * IPython/iplib.py (InteractiveShell.interact): Added the original
6362 code from 'code.py' for this module in order to change the
6368 code from 'code.py' for this module in order to change the
6363 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6369 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6364 the history cache would break when the user hit Ctrl-C, and
6370 the history cache would break when the user hit Ctrl-C, and
6365 interact() offers no way to add any hooks to it.
6371 interact() offers no way to add any hooks to it.
6366
6372
6367 2001-12-23 Fernando Perez <fperez@colorado.edu>
6373 2001-12-23 Fernando Perez <fperez@colorado.edu>
6368
6374
6369 * setup.py: added check for 'MANIFEST' before trying to remove
6375 * setup.py: added check for 'MANIFEST' before trying to remove
6370 it. Thanks to Sean Reifschneider.
6376 it. Thanks to Sean Reifschneider.
6371
6377
6372 2001-12-22 Fernando Perez <fperez@colorado.edu>
6378 2001-12-22 Fernando Perez <fperez@colorado.edu>
6373
6379
6374 * Released 0.2.2.
6380 * Released 0.2.2.
6375
6381
6376 * Finished (reasonably) writing the manual. Later will add the
6382 * Finished (reasonably) writing the manual. Later will add the
6377 python-standard navigation stylesheets, but for the time being
6383 python-standard navigation stylesheets, but for the time being
6378 it's fairly complete. Distribution will include html and pdf
6384 it's fairly complete. Distribution will include html and pdf
6379 versions.
6385 versions.
6380
6386
6381 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6387 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6382 (MayaVi author).
6388 (MayaVi author).
6383
6389
6384 2001-12-21 Fernando Perez <fperez@colorado.edu>
6390 2001-12-21 Fernando Perez <fperez@colorado.edu>
6385
6391
6386 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6392 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6387 good public release, I think (with the manual and the distutils
6393 good public release, I think (with the manual and the distutils
6388 installer). The manual can use some work, but that can go
6394 installer). The manual can use some work, but that can go
6389 slowly. Otherwise I think it's quite nice for end users. Next
6395 slowly. Otherwise I think it's quite nice for end users. Next
6390 summer, rewrite the guts of it...
6396 summer, rewrite the guts of it...
6391
6397
6392 * Changed format of ipythonrc files to use whitespace as the
6398 * Changed format of ipythonrc files to use whitespace as the
6393 separator instead of an explicit '='. Cleaner.
6399 separator instead of an explicit '='. Cleaner.
6394
6400
6395 2001-12-20 Fernando Perez <fperez@colorado.edu>
6401 2001-12-20 Fernando Perez <fperez@colorado.edu>
6396
6402
6397 * Started a manual in LyX. For now it's just a quick merge of the
6403 * Started a manual in LyX. For now it's just a quick merge of the
6398 various internal docstrings and READMEs. Later it may grow into a
6404 various internal docstrings and READMEs. Later it may grow into a
6399 nice, full-blown manual.
6405 nice, full-blown manual.
6400
6406
6401 * Set up a distutils based installer. Installation should now be
6407 * Set up a distutils based installer. Installation should now be
6402 trivially simple for end-users.
6408 trivially simple for end-users.
6403
6409
6404 2001-12-11 Fernando Perez <fperez@colorado.edu>
6410 2001-12-11 Fernando Perez <fperez@colorado.edu>
6405
6411
6406 * Released 0.2.0. First public release, announced it at
6412 * Released 0.2.0. First public release, announced it at
6407 comp.lang.python. From now on, just bugfixes...
6413 comp.lang.python. From now on, just bugfixes...
6408
6414
6409 * Went through all the files, set copyright/license notices and
6415 * Went through all the files, set copyright/license notices and
6410 cleaned up things. Ready for release.
6416 cleaned up things. Ready for release.
6411
6417
6412 2001-12-10 Fernando Perez <fperez@colorado.edu>
6418 2001-12-10 Fernando Perez <fperez@colorado.edu>
6413
6419
6414 * Changed the first-time installer not to use tarfiles. It's more
6420 * Changed the first-time installer not to use tarfiles. It's more
6415 robust now and less unix-dependent. Also makes it easier for
6421 robust now and less unix-dependent. Also makes it easier for
6416 people to later upgrade versions.
6422 people to later upgrade versions.
6417
6423
6418 * Changed @exit to @abort to reflect the fact that it's pretty
6424 * Changed @exit to @abort to reflect the fact that it's pretty
6419 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6425 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6420 becomes significant only when IPyhton is embedded: in that case,
6426 becomes significant only when IPyhton is embedded: in that case,
6421 C-D closes IPython only, but @abort kills the enclosing program
6427 C-D closes IPython only, but @abort kills the enclosing program
6422 too (unless it had called IPython inside a try catching
6428 too (unless it had called IPython inside a try catching
6423 SystemExit).
6429 SystemExit).
6424
6430
6425 * Created Shell module which exposes the actuall IPython Shell
6431 * Created Shell module which exposes the actuall IPython Shell
6426 classes, currently the normal and the embeddable one. This at
6432 classes, currently the normal and the embeddable one. This at
6427 least offers a stable interface we won't need to change when
6433 least offers a stable interface we won't need to change when
6428 (later) the internals are rewritten. That rewrite will be confined
6434 (later) the internals are rewritten. That rewrite will be confined
6429 to iplib and ipmaker, but the Shell interface should remain as is.
6435 to iplib and ipmaker, but the Shell interface should remain as is.
6430
6436
6431 * Added embed module which offers an embeddable IPShell object,
6437 * Added embed module which offers an embeddable IPShell object,
6432 useful to fire up IPython *inside* a running program. Great for
6438 useful to fire up IPython *inside* a running program. Great for
6433 debugging or dynamical data analysis.
6439 debugging or dynamical data analysis.
6434
6440
6435 2001-12-08 Fernando Perez <fperez@colorado.edu>
6441 2001-12-08 Fernando Perez <fperez@colorado.edu>
6436
6442
6437 * Fixed small bug preventing seeing info from methods of defined
6443 * Fixed small bug preventing seeing info from methods of defined
6438 objects (incorrect namespace in _ofind()).
6444 objects (incorrect namespace in _ofind()).
6439
6445
6440 * Documentation cleanup. Moved the main usage docstrings to a
6446 * Documentation cleanup. Moved the main usage docstrings to a
6441 separate file, usage.py (cleaner to maintain, and hopefully in the
6447 separate file, usage.py (cleaner to maintain, and hopefully in the
6442 future some perlpod-like way of producing interactive, man and
6448 future some perlpod-like way of producing interactive, man and
6443 html docs out of it will be found).
6449 html docs out of it will be found).
6444
6450
6445 * Added @profile to see your profile at any time.
6451 * Added @profile to see your profile at any time.
6446
6452
6447 * Added @p as an alias for 'print'. It's especially convenient if
6453 * Added @p as an alias for 'print'. It's especially convenient if
6448 using automagic ('p x' prints x).
6454 using automagic ('p x' prints x).
6449
6455
6450 * Small cleanups and fixes after a pychecker run.
6456 * Small cleanups and fixes after a pychecker run.
6451
6457
6452 * Changed the @cd command to handle @cd - and @cd -<n> for
6458 * Changed the @cd command to handle @cd - and @cd -<n> for
6453 visiting any directory in _dh.
6459 visiting any directory in _dh.
6454
6460
6455 * Introduced _dh, a history of visited directories. @dhist prints
6461 * Introduced _dh, a history of visited directories. @dhist prints
6456 it out with numbers.
6462 it out with numbers.
6457
6463
6458 2001-12-07 Fernando Perez <fperez@colorado.edu>
6464 2001-12-07 Fernando Perez <fperez@colorado.edu>
6459
6465
6460 * Released 0.1.22
6466 * Released 0.1.22
6461
6467
6462 * Made initialization a bit more robust against invalid color
6468 * Made initialization a bit more robust against invalid color
6463 options in user input (exit, not traceback-crash).
6469 options in user input (exit, not traceback-crash).
6464
6470
6465 * Changed the bug crash reporter to write the report only in the
6471 * Changed the bug crash reporter to write the report only in the
6466 user's .ipython directory. That way IPython won't litter people's
6472 user's .ipython directory. That way IPython won't litter people's
6467 hard disks with crash files all over the place. Also print on
6473 hard disks with crash files all over the place. Also print on
6468 screen the necessary mail command.
6474 screen the necessary mail command.
6469
6475
6470 * With the new ultraTB, implemented LightBG color scheme for light
6476 * With the new ultraTB, implemented LightBG color scheme for light
6471 background terminals. A lot of people like white backgrounds, so I
6477 background terminals. A lot of people like white backgrounds, so I
6472 guess we should at least give them something readable.
6478 guess we should at least give them something readable.
6473
6479
6474 2001-12-06 Fernando Perez <fperez@colorado.edu>
6480 2001-12-06 Fernando Perez <fperez@colorado.edu>
6475
6481
6476 * Modified the structure of ultraTB. Now there's a proper class
6482 * Modified the structure of ultraTB. Now there's a proper class
6477 for tables of color schemes which allow adding schemes easily and
6483 for tables of color schemes which allow adding schemes easily and
6478 switching the active scheme without creating a new instance every
6484 switching the active scheme without creating a new instance every
6479 time (which was ridiculous). The syntax for creating new schemes
6485 time (which was ridiculous). The syntax for creating new schemes
6480 is also cleaner. I think ultraTB is finally done, with a clean
6486 is also cleaner. I think ultraTB is finally done, with a clean
6481 class structure. Names are also much cleaner (now there's proper
6487 class structure. Names are also much cleaner (now there's proper
6482 color tables, no need for every variable to also have 'color' in
6488 color tables, no need for every variable to also have 'color' in
6483 its name).
6489 its name).
6484
6490
6485 * Broke down genutils into separate files. Now genutils only
6491 * Broke down genutils into separate files. Now genutils only
6486 contains utility functions, and classes have been moved to their
6492 contains utility functions, and classes have been moved to their
6487 own files (they had enough independent functionality to warrant
6493 own files (they had enough independent functionality to warrant
6488 it): ConfigLoader, OutputTrap, Struct.
6494 it): ConfigLoader, OutputTrap, Struct.
6489
6495
6490 2001-12-05 Fernando Perez <fperez@colorado.edu>
6496 2001-12-05 Fernando Perez <fperez@colorado.edu>
6491
6497
6492 * IPython turns 21! Released version 0.1.21, as a candidate for
6498 * IPython turns 21! Released version 0.1.21, as a candidate for
6493 public consumption. If all goes well, release in a few days.
6499 public consumption. If all goes well, release in a few days.
6494
6500
6495 * Fixed path bug (files in Extensions/ directory wouldn't be found
6501 * Fixed path bug (files in Extensions/ directory wouldn't be found
6496 unless IPython/ was explicitly in sys.path).
6502 unless IPython/ was explicitly in sys.path).
6497
6503
6498 * Extended the FlexCompleter class as MagicCompleter to allow
6504 * Extended the FlexCompleter class as MagicCompleter to allow
6499 completion of @-starting lines.
6505 completion of @-starting lines.
6500
6506
6501 * Created __release__.py file as a central repository for release
6507 * Created __release__.py file as a central repository for release
6502 info that other files can read from.
6508 info that other files can read from.
6503
6509
6504 * Fixed small bug in logging: when logging was turned on in
6510 * Fixed small bug in logging: when logging was turned on in
6505 mid-session, old lines with special meanings (!@?) were being
6511 mid-session, old lines with special meanings (!@?) were being
6506 logged without the prepended comment, which is necessary since
6512 logged without the prepended comment, which is necessary since
6507 they are not truly valid python syntax. This should make session
6513 they are not truly valid python syntax. This should make session
6508 restores produce less errors.
6514 restores produce less errors.
6509
6515
6510 * The namespace cleanup forced me to make a FlexCompleter class
6516 * The namespace cleanup forced me to make a FlexCompleter class
6511 which is nothing but a ripoff of rlcompleter, but with selectable
6517 which is nothing but a ripoff of rlcompleter, but with selectable
6512 namespace (rlcompleter only works in __main__.__dict__). I'll try
6518 namespace (rlcompleter only works in __main__.__dict__). I'll try
6513 to submit a note to the authors to see if this change can be
6519 to submit a note to the authors to see if this change can be
6514 incorporated in future rlcompleter releases (Dec.6: done)
6520 incorporated in future rlcompleter releases (Dec.6: done)
6515
6521
6516 * More fixes to namespace handling. It was a mess! Now all
6522 * More fixes to namespace handling. It was a mess! Now all
6517 explicit references to __main__.__dict__ are gone (except when
6523 explicit references to __main__.__dict__ are gone (except when
6518 really needed) and everything is handled through the namespace
6524 really needed) and everything is handled through the namespace
6519 dicts in the IPython instance. We seem to be getting somewhere
6525 dicts in the IPython instance. We seem to be getting somewhere
6520 with this, finally...
6526 with this, finally...
6521
6527
6522 * Small documentation updates.
6528 * Small documentation updates.
6523
6529
6524 * Created the Extensions directory under IPython (with an
6530 * Created the Extensions directory under IPython (with an
6525 __init__.py). Put the PhysicalQ stuff there. This directory should
6531 __init__.py). Put the PhysicalQ stuff there. This directory should
6526 be used for all special-purpose extensions.
6532 be used for all special-purpose extensions.
6527
6533
6528 * File renaming:
6534 * File renaming:
6529 ipythonlib --> ipmaker
6535 ipythonlib --> ipmaker
6530 ipplib --> iplib
6536 ipplib --> iplib
6531 This makes a bit more sense in terms of what these files actually do.
6537 This makes a bit more sense in terms of what these files actually do.
6532
6538
6533 * Moved all the classes and functions in ipythonlib to ipplib, so
6539 * Moved all the classes and functions in ipythonlib to ipplib, so
6534 now ipythonlib only has make_IPython(). This will ease up its
6540 now ipythonlib only has make_IPython(). This will ease up its
6535 splitting in smaller functional chunks later.
6541 splitting in smaller functional chunks later.
6536
6542
6537 * Cleaned up (done, I think) output of @whos. Better column
6543 * Cleaned up (done, I think) output of @whos. Better column
6538 formatting, and now shows str(var) for as much as it can, which is
6544 formatting, and now shows str(var) for as much as it can, which is
6539 typically what one gets with a 'print var'.
6545 typically what one gets with a 'print var'.
6540
6546
6541 2001-12-04 Fernando Perez <fperez@colorado.edu>
6547 2001-12-04 Fernando Perez <fperez@colorado.edu>
6542
6548
6543 * Fixed namespace problems. Now builtin/IPyhton/user names get
6549 * Fixed namespace problems. Now builtin/IPyhton/user names get
6544 properly reported in their namespace. Internal namespace handling
6550 properly reported in their namespace. Internal namespace handling
6545 is finally getting decent (not perfect yet, but much better than
6551 is finally getting decent (not perfect yet, but much better than
6546 the ad-hoc mess we had).
6552 the ad-hoc mess we had).
6547
6553
6548 * Removed -exit option. If people just want to run a python
6554 * Removed -exit option. If people just want to run a python
6549 script, that's what the normal interpreter is for. Less
6555 script, that's what the normal interpreter is for. Less
6550 unnecessary options, less chances for bugs.
6556 unnecessary options, less chances for bugs.
6551
6557
6552 * Added a crash handler which generates a complete post-mortem if
6558 * Added a crash handler which generates a complete post-mortem if
6553 IPython crashes. This will help a lot in tracking bugs down the
6559 IPython crashes. This will help a lot in tracking bugs down the
6554 road.
6560 road.
6555
6561
6556 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6562 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6557 which were boud to functions being reassigned would bypass the
6563 which were boud to functions being reassigned would bypass the
6558 logger, breaking the sync of _il with the prompt counter. This
6564 logger, breaking the sync of _il with the prompt counter. This
6559 would then crash IPython later when a new line was logged.
6565 would then crash IPython later when a new line was logged.
6560
6566
6561 2001-12-02 Fernando Perez <fperez@colorado.edu>
6567 2001-12-02 Fernando Perez <fperez@colorado.edu>
6562
6568
6563 * Made IPython a package. This means people don't have to clutter
6569 * Made IPython a package. This means people don't have to clutter
6564 their sys.path with yet another directory. Changed the INSTALL
6570 their sys.path with yet another directory. Changed the INSTALL
6565 file accordingly.
6571 file accordingly.
6566
6572
6567 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6573 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6568 sorts its output (so @who shows it sorted) and @whos formats the
6574 sorts its output (so @who shows it sorted) and @whos formats the
6569 table according to the width of the first column. Nicer, easier to
6575 table according to the width of the first column. Nicer, easier to
6570 read. Todo: write a generic table_format() which takes a list of
6576 read. Todo: write a generic table_format() which takes a list of
6571 lists and prints it nicely formatted, with optional row/column
6577 lists and prints it nicely formatted, with optional row/column
6572 separators and proper padding and justification.
6578 separators and proper padding and justification.
6573
6579
6574 * Released 0.1.20
6580 * Released 0.1.20
6575
6581
6576 * Fixed bug in @log which would reverse the inputcache list (a
6582 * Fixed bug in @log which would reverse the inputcache list (a
6577 copy operation was missing).
6583 copy operation was missing).
6578
6584
6579 * Code cleanup. @config was changed to use page(). Better, since
6585 * Code cleanup. @config was changed to use page(). Better, since
6580 its output is always quite long.
6586 its output is always quite long.
6581
6587
6582 * Itpl is back as a dependency. I was having too many problems
6588 * Itpl is back as a dependency. I was having too many problems
6583 getting the parametric aliases to work reliably, and it's just
6589 getting the parametric aliases to work reliably, and it's just
6584 easier to code weird string operations with it than playing %()s
6590 easier to code weird string operations with it than playing %()s
6585 games. It's only ~6k, so I don't think it's too big a deal.
6591 games. It's only ~6k, so I don't think it's too big a deal.
6586
6592
6587 * Found (and fixed) a very nasty bug with history. !lines weren't
6593 * Found (and fixed) a very nasty bug with history. !lines weren't
6588 getting cached, and the out of sync caches would crash
6594 getting cached, and the out of sync caches would crash
6589 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6595 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6590 division of labor a bit better. Bug fixed, cleaner structure.
6596 division of labor a bit better. Bug fixed, cleaner structure.
6591
6597
6592 2001-12-01 Fernando Perez <fperez@colorado.edu>
6598 2001-12-01 Fernando Perez <fperez@colorado.edu>
6593
6599
6594 * Released 0.1.19
6600 * Released 0.1.19
6595
6601
6596 * Added option -n to @hist to prevent line number printing. Much
6602 * Added option -n to @hist to prevent line number printing. Much
6597 easier to copy/paste code this way.
6603 easier to copy/paste code this way.
6598
6604
6599 * Created global _il to hold the input list. Allows easy
6605 * Created global _il to hold the input list. Allows easy
6600 re-execution of blocks of code by slicing it (inspired by Janko's
6606 re-execution of blocks of code by slicing it (inspired by Janko's
6601 comment on 'macros').
6607 comment on 'macros').
6602
6608
6603 * Small fixes and doc updates.
6609 * Small fixes and doc updates.
6604
6610
6605 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6611 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6606 much too fragile with automagic. Handles properly multi-line
6612 much too fragile with automagic. Handles properly multi-line
6607 statements and takes parameters.
6613 statements and takes parameters.
6608
6614
6609 2001-11-30 Fernando Perez <fperez@colorado.edu>
6615 2001-11-30 Fernando Perez <fperez@colorado.edu>
6610
6616
6611 * Version 0.1.18 released.
6617 * Version 0.1.18 released.
6612
6618
6613 * Fixed nasty namespace bug in initial module imports.
6619 * Fixed nasty namespace bug in initial module imports.
6614
6620
6615 * Added copyright/license notes to all code files (except
6621 * Added copyright/license notes to all code files (except
6616 DPyGetOpt). For the time being, LGPL. That could change.
6622 DPyGetOpt). For the time being, LGPL. That could change.
6617
6623
6618 * Rewrote a much nicer README, updated INSTALL, cleaned up
6624 * Rewrote a much nicer README, updated INSTALL, cleaned up
6619 ipythonrc-* samples.
6625 ipythonrc-* samples.
6620
6626
6621 * Overall code/documentation cleanup. Basically ready for
6627 * Overall code/documentation cleanup. Basically ready for
6622 release. Only remaining thing: licence decision (LGPL?).
6628 release. Only remaining thing: licence decision (LGPL?).
6623
6629
6624 * Converted load_config to a class, ConfigLoader. Now recursion
6630 * Converted load_config to a class, ConfigLoader. Now recursion
6625 control is better organized. Doesn't include the same file twice.
6631 control is better organized. Doesn't include the same file twice.
6626
6632
6627 2001-11-29 Fernando Perez <fperez@colorado.edu>
6633 2001-11-29 Fernando Perez <fperez@colorado.edu>
6628
6634
6629 * Got input history working. Changed output history variables from
6635 * Got input history working. Changed output history variables from
6630 _p to _o so that _i is for input and _o for output. Just cleaner
6636 _p to _o so that _i is for input and _o for output. Just cleaner
6631 convention.
6637 convention.
6632
6638
6633 * Implemented parametric aliases. This pretty much allows the
6639 * Implemented parametric aliases. This pretty much allows the
6634 alias system to offer full-blown shell convenience, I think.
6640 alias system to offer full-blown shell convenience, I think.
6635
6641
6636 * Version 0.1.17 released, 0.1.18 opened.
6642 * Version 0.1.17 released, 0.1.18 opened.
6637
6643
6638 * dot_ipython/ipythonrc (alias): added documentation.
6644 * dot_ipython/ipythonrc (alias): added documentation.
6639 (xcolor): Fixed small bug (xcolors -> xcolor)
6645 (xcolor): Fixed small bug (xcolors -> xcolor)
6640
6646
6641 * Changed the alias system. Now alias is a magic command to define
6647 * Changed the alias system. Now alias is a magic command to define
6642 aliases just like the shell. Rationale: the builtin magics should
6648 aliases just like the shell. Rationale: the builtin magics should
6643 be there for things deeply connected to IPython's
6649 be there for things deeply connected to IPython's
6644 architecture. And this is a much lighter system for what I think
6650 architecture. And this is a much lighter system for what I think
6645 is the really important feature: allowing users to define quickly
6651 is the really important feature: allowing users to define quickly
6646 magics that will do shell things for them, so they can customize
6652 magics that will do shell things for them, so they can customize
6647 IPython easily to match their work habits. If someone is really
6653 IPython easily to match their work habits. If someone is really
6648 desperate to have another name for a builtin alias, they can
6654 desperate to have another name for a builtin alias, they can
6649 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6655 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6650 works.
6656 works.
6651
6657
6652 2001-11-28 Fernando Perez <fperez@colorado.edu>
6658 2001-11-28 Fernando Perez <fperez@colorado.edu>
6653
6659
6654 * Changed @file so that it opens the source file at the proper
6660 * Changed @file so that it opens the source file at the proper
6655 line. Since it uses less, if your EDITOR environment is
6661 line. Since it uses less, if your EDITOR environment is
6656 configured, typing v will immediately open your editor of choice
6662 configured, typing v will immediately open your editor of choice
6657 right at the line where the object is defined. Not as quick as
6663 right at the line where the object is defined. Not as quick as
6658 having a direct @edit command, but for all intents and purposes it
6664 having a direct @edit command, but for all intents and purposes it
6659 works. And I don't have to worry about writing @edit to deal with
6665 works. And I don't have to worry about writing @edit to deal with
6660 all the editors, less does that.
6666 all the editors, less does that.
6661
6667
6662 * Version 0.1.16 released, 0.1.17 opened.
6668 * Version 0.1.16 released, 0.1.17 opened.
6663
6669
6664 * Fixed some nasty bugs in the page/page_dumb combo that could
6670 * Fixed some nasty bugs in the page/page_dumb combo that could
6665 crash IPython.
6671 crash IPython.
6666
6672
6667 2001-11-27 Fernando Perez <fperez@colorado.edu>
6673 2001-11-27 Fernando Perez <fperez@colorado.edu>
6668
6674
6669 * Version 0.1.15 released, 0.1.16 opened.
6675 * Version 0.1.15 released, 0.1.16 opened.
6670
6676
6671 * Finally got ? and ?? to work for undefined things: now it's
6677 * Finally got ? and ?? to work for undefined things: now it's
6672 possible to type {}.get? and get information about the get method
6678 possible to type {}.get? and get information about the get method
6673 of dicts, or os.path? even if only os is defined (so technically
6679 of dicts, or os.path? even if only os is defined (so technically
6674 os.path isn't). Works at any level. For example, after import os,
6680 os.path isn't). Works at any level. For example, after import os,
6675 os?, os.path?, os.path.abspath? all work. This is great, took some
6681 os?, os.path?, os.path.abspath? all work. This is great, took some
6676 work in _ofind.
6682 work in _ofind.
6677
6683
6678 * Fixed more bugs with logging. The sanest way to do it was to add
6684 * Fixed more bugs with logging. The sanest way to do it was to add
6679 to @log a 'mode' parameter. Killed two in one shot (this mode
6685 to @log a 'mode' parameter. Killed two in one shot (this mode
6680 option was a request of Janko's). I think it's finally clean
6686 option was a request of Janko's). I think it's finally clean
6681 (famous last words).
6687 (famous last words).
6682
6688
6683 * Added a page_dumb() pager which does a decent job of paging on
6689 * Added a page_dumb() pager which does a decent job of paging on
6684 screen, if better things (like less) aren't available. One less
6690 screen, if better things (like less) aren't available. One less
6685 unix dependency (someday maybe somebody will port this to
6691 unix dependency (someday maybe somebody will port this to
6686 windows).
6692 windows).
6687
6693
6688 * Fixed problem in magic_log: would lock of logging out if log
6694 * Fixed problem in magic_log: would lock of logging out if log
6689 creation failed (because it would still think it had succeeded).
6695 creation failed (because it would still think it had succeeded).
6690
6696
6691 * Improved the page() function using curses to auto-detect screen
6697 * Improved the page() function using curses to auto-detect screen
6692 size. Now it can make a much better decision on whether to print
6698 size. Now it can make a much better decision on whether to print
6693 or page a string. Option screen_length was modified: a value 0
6699 or page a string. Option screen_length was modified: a value 0
6694 means auto-detect, and that's the default now.
6700 means auto-detect, and that's the default now.
6695
6701
6696 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6702 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6697 go out. I'll test it for a few days, then talk to Janko about
6703 go out. I'll test it for a few days, then talk to Janko about
6698 licences and announce it.
6704 licences and announce it.
6699
6705
6700 * Fixed the length of the auto-generated ---> prompt which appears
6706 * Fixed the length of the auto-generated ---> prompt which appears
6701 for auto-parens and auto-quotes. Getting this right isn't trivial,
6707 for auto-parens and auto-quotes. Getting this right isn't trivial,
6702 with all the color escapes, different prompt types and optional
6708 with all the color escapes, different prompt types and optional
6703 separators. But it seems to be working in all the combinations.
6709 separators. But it seems to be working in all the combinations.
6704
6710
6705 2001-11-26 Fernando Perez <fperez@colorado.edu>
6711 2001-11-26 Fernando Perez <fperez@colorado.edu>
6706
6712
6707 * Wrote a regexp filter to get option types from the option names
6713 * Wrote a regexp filter to get option types from the option names
6708 string. This eliminates the need to manually keep two duplicate
6714 string. This eliminates the need to manually keep two duplicate
6709 lists.
6715 lists.
6710
6716
6711 * Removed the unneeded check_option_names. Now options are handled
6717 * Removed the unneeded check_option_names. Now options are handled
6712 in a much saner manner and it's easy to visually check that things
6718 in a much saner manner and it's easy to visually check that things
6713 are ok.
6719 are ok.
6714
6720
6715 * Updated version numbers on all files I modified to carry a
6721 * Updated version numbers on all files I modified to carry a
6716 notice so Janko and Nathan have clear version markers.
6722 notice so Janko and Nathan have clear version markers.
6717
6723
6718 * Updated docstring for ultraTB with my changes. I should send
6724 * Updated docstring for ultraTB with my changes. I should send
6719 this to Nathan.
6725 this to Nathan.
6720
6726
6721 * Lots of small fixes. Ran everything through pychecker again.
6727 * Lots of small fixes. Ran everything through pychecker again.
6722
6728
6723 * Made loading of deep_reload an cmd line option. If it's not too
6729 * Made loading of deep_reload an cmd line option. If it's not too
6724 kosher, now people can just disable it. With -nodeep_reload it's
6730 kosher, now people can just disable it. With -nodeep_reload it's
6725 still available as dreload(), it just won't overwrite reload().
6731 still available as dreload(), it just won't overwrite reload().
6726
6732
6727 * Moved many options to the no| form (-opt and -noopt
6733 * Moved many options to the no| form (-opt and -noopt
6728 accepted). Cleaner.
6734 accepted). Cleaner.
6729
6735
6730 * Changed magic_log so that if called with no parameters, it uses
6736 * Changed magic_log so that if called with no parameters, it uses
6731 'rotate' mode. That way auto-generated logs aren't automatically
6737 'rotate' mode. That way auto-generated logs aren't automatically
6732 over-written. For normal logs, now a backup is made if it exists
6738 over-written. For normal logs, now a backup is made if it exists
6733 (only 1 level of backups). A new 'backup' mode was added to the
6739 (only 1 level of backups). A new 'backup' mode was added to the
6734 Logger class to support this. This was a request by Janko.
6740 Logger class to support this. This was a request by Janko.
6735
6741
6736 * Added @logoff/@logon to stop/restart an active log.
6742 * Added @logoff/@logon to stop/restart an active log.
6737
6743
6738 * Fixed a lot of bugs in log saving/replay. It was pretty
6744 * Fixed a lot of bugs in log saving/replay. It was pretty
6739 broken. Now special lines (!@,/) appear properly in the command
6745 broken. Now special lines (!@,/) appear properly in the command
6740 history after a log replay.
6746 history after a log replay.
6741
6747
6742 * Tried and failed to implement full session saving via pickle. My
6748 * Tried and failed to implement full session saving via pickle. My
6743 idea was to pickle __main__.__dict__, but modules can't be
6749 idea was to pickle __main__.__dict__, but modules can't be
6744 pickled. This would be a better alternative to replaying logs, but
6750 pickled. This would be a better alternative to replaying logs, but
6745 seems quite tricky to get to work. Changed -session to be called
6751 seems quite tricky to get to work. Changed -session to be called
6746 -logplay, which more accurately reflects what it does. And if we
6752 -logplay, which more accurately reflects what it does. And if we
6747 ever get real session saving working, -session is now available.
6753 ever get real session saving working, -session is now available.
6748
6754
6749 * Implemented color schemes for prompts also. As for tracebacks,
6755 * Implemented color schemes for prompts also. As for tracebacks,
6750 currently only NoColor and Linux are supported. But now the
6756 currently only NoColor and Linux are supported. But now the
6751 infrastructure is in place, based on a generic ColorScheme
6757 infrastructure is in place, based on a generic ColorScheme
6752 class. So writing and activating new schemes both for the prompts
6758 class. So writing and activating new schemes both for the prompts
6753 and the tracebacks should be straightforward.
6759 and the tracebacks should be straightforward.
6754
6760
6755 * Version 0.1.13 released, 0.1.14 opened.
6761 * Version 0.1.13 released, 0.1.14 opened.
6756
6762
6757 * Changed handling of options for output cache. Now counter is
6763 * Changed handling of options for output cache. Now counter is
6758 hardwired starting at 1 and one specifies the maximum number of
6764 hardwired starting at 1 and one specifies the maximum number of
6759 entries *in the outcache* (not the max prompt counter). This is
6765 entries *in the outcache* (not the max prompt counter). This is
6760 much better, since many statements won't increase the cache
6766 much better, since many statements won't increase the cache
6761 count. It also eliminated some confusing options, now there's only
6767 count. It also eliminated some confusing options, now there's only
6762 one: cache_size.
6768 one: cache_size.
6763
6769
6764 * Added 'alias' magic function and magic_alias option in the
6770 * Added 'alias' magic function and magic_alias option in the
6765 ipythonrc file. Now the user can easily define whatever names he
6771 ipythonrc file. Now the user can easily define whatever names he
6766 wants for the magic functions without having to play weird
6772 wants for the magic functions without having to play weird
6767 namespace games. This gives IPython a real shell-like feel.
6773 namespace games. This gives IPython a real shell-like feel.
6768
6774
6769 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6775 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6770 @ or not).
6776 @ or not).
6771
6777
6772 This was one of the last remaining 'visible' bugs (that I know
6778 This was one of the last remaining 'visible' bugs (that I know
6773 of). I think if I can clean up the session loading so it works
6779 of). I think if I can clean up the session loading so it works
6774 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6780 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6775 about licensing).
6781 about licensing).
6776
6782
6777 2001-11-25 Fernando Perez <fperez@colorado.edu>
6783 2001-11-25 Fernando Perez <fperez@colorado.edu>
6778
6784
6779 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6785 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6780 there's a cleaner distinction between what ? and ?? show.
6786 there's a cleaner distinction between what ? and ?? show.
6781
6787
6782 * Added screen_length option. Now the user can define his own
6788 * Added screen_length option. Now the user can define his own
6783 screen size for page() operations.
6789 screen size for page() operations.
6784
6790
6785 * Implemented magic shell-like functions with automatic code
6791 * Implemented magic shell-like functions with automatic code
6786 generation. Now adding another function is just a matter of adding
6792 generation. Now adding another function is just a matter of adding
6787 an entry to a dict, and the function is dynamically generated at
6793 an entry to a dict, and the function is dynamically generated at
6788 run-time. Python has some really cool features!
6794 run-time. Python has some really cool features!
6789
6795
6790 * Renamed many options to cleanup conventions a little. Now all
6796 * Renamed many options to cleanup conventions a little. Now all
6791 are lowercase, and only underscores where needed. Also in the code
6797 are lowercase, and only underscores where needed. Also in the code
6792 option name tables are clearer.
6798 option name tables are clearer.
6793
6799
6794 * Changed prompts a little. Now input is 'In [n]:' instead of
6800 * Changed prompts a little. Now input is 'In [n]:' instead of
6795 'In[n]:='. This allows it the numbers to be aligned with the
6801 'In[n]:='. This allows it the numbers to be aligned with the
6796 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6802 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6797 Python (it was a Mathematica thing). The '...' continuation prompt
6803 Python (it was a Mathematica thing). The '...' continuation prompt
6798 was also changed a little to align better.
6804 was also changed a little to align better.
6799
6805
6800 * Fixed bug when flushing output cache. Not all _p<n> variables
6806 * Fixed bug when flushing output cache. Not all _p<n> variables
6801 exist, so their deletion needs to be wrapped in a try:
6807 exist, so their deletion needs to be wrapped in a try:
6802
6808
6803 * Figured out how to properly use inspect.formatargspec() (it
6809 * Figured out how to properly use inspect.formatargspec() (it
6804 requires the args preceded by *). So I removed all the code from
6810 requires the args preceded by *). So I removed all the code from
6805 _get_pdef in Magic, which was just replicating that.
6811 _get_pdef in Magic, which was just replicating that.
6806
6812
6807 * Added test to prefilter to allow redefining magic function names
6813 * Added test to prefilter to allow redefining magic function names
6808 as variables. This is ok, since the @ form is always available,
6814 as variables. This is ok, since the @ form is always available,
6809 but whe should allow the user to define a variable called 'ls' if
6815 but whe should allow the user to define a variable called 'ls' if
6810 he needs it.
6816 he needs it.
6811
6817
6812 * Moved the ToDo information from README into a separate ToDo.
6818 * Moved the ToDo information from README into a separate ToDo.
6813
6819
6814 * General code cleanup and small bugfixes. I think it's close to a
6820 * General code cleanup and small bugfixes. I think it's close to a
6815 state where it can be released, obviously with a big 'beta'
6821 state where it can be released, obviously with a big 'beta'
6816 warning on it.
6822 warning on it.
6817
6823
6818 * Got the magic function split to work. Now all magics are defined
6824 * Got the magic function split to work. Now all magics are defined
6819 in a separate class. It just organizes things a bit, and now
6825 in a separate class. It just organizes things a bit, and now
6820 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6826 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6821 was too long).
6827 was too long).
6822
6828
6823 * Changed @clear to @reset to avoid potential confusions with
6829 * Changed @clear to @reset to avoid potential confusions with
6824 the shell command clear. Also renamed @cl to @clear, which does
6830 the shell command clear. Also renamed @cl to @clear, which does
6825 exactly what people expect it to from their shell experience.
6831 exactly what people expect it to from their shell experience.
6826
6832
6827 Added a check to the @reset command (since it's so
6833 Added a check to the @reset command (since it's so
6828 destructive, it's probably a good idea to ask for confirmation).
6834 destructive, it's probably a good idea to ask for confirmation).
6829 But now reset only works for full namespace resetting. Since the
6835 But now reset only works for full namespace resetting. Since the
6830 del keyword is already there for deleting a few specific
6836 del keyword is already there for deleting a few specific
6831 variables, I don't see the point of having a redundant magic
6837 variables, I don't see the point of having a redundant magic
6832 function for the same task.
6838 function for the same task.
6833
6839
6834 2001-11-24 Fernando Perez <fperez@colorado.edu>
6840 2001-11-24 Fernando Perez <fperez@colorado.edu>
6835
6841
6836 * Updated the builtin docs (esp. the ? ones).
6842 * Updated the builtin docs (esp. the ? ones).
6837
6843
6838 * Ran all the code through pychecker. Not terribly impressed with
6844 * Ran all the code through pychecker. Not terribly impressed with
6839 it: lots of spurious warnings and didn't really find anything of
6845 it: lots of spurious warnings and didn't really find anything of
6840 substance (just a few modules being imported and not used).
6846 substance (just a few modules being imported and not used).
6841
6847
6842 * Implemented the new ultraTB functionality into IPython. New
6848 * Implemented the new ultraTB functionality into IPython. New
6843 option: xcolors. This chooses color scheme. xmode now only selects
6849 option: xcolors. This chooses color scheme. xmode now only selects
6844 between Plain and Verbose. Better orthogonality.
6850 between Plain and Verbose. Better orthogonality.
6845
6851
6846 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6852 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6847 mode and color scheme for the exception handlers. Now it's
6853 mode and color scheme for the exception handlers. Now it's
6848 possible to have the verbose traceback with no coloring.
6854 possible to have the verbose traceback with no coloring.
6849
6855
6850 2001-11-23 Fernando Perez <fperez@colorado.edu>
6856 2001-11-23 Fernando Perez <fperez@colorado.edu>
6851
6857
6852 * Version 0.1.12 released, 0.1.13 opened.
6858 * Version 0.1.12 released, 0.1.13 opened.
6853
6859
6854 * Removed option to set auto-quote and auto-paren escapes by
6860 * Removed option to set auto-quote and auto-paren escapes by
6855 user. The chances of breaking valid syntax are just too high. If
6861 user. The chances of breaking valid syntax are just too high. If
6856 someone *really* wants, they can always dig into the code.
6862 someone *really* wants, they can always dig into the code.
6857
6863
6858 * Made prompt separators configurable.
6864 * Made prompt separators configurable.
6859
6865
6860 2001-11-22 Fernando Perez <fperez@colorado.edu>
6866 2001-11-22 Fernando Perez <fperez@colorado.edu>
6861
6867
6862 * Small bugfixes in many places.
6868 * Small bugfixes in many places.
6863
6869
6864 * Removed the MyCompleter class from ipplib. It seemed redundant
6870 * Removed the MyCompleter class from ipplib. It seemed redundant
6865 with the C-p,C-n history search functionality. Less code to
6871 with the C-p,C-n history search functionality. Less code to
6866 maintain.
6872 maintain.
6867
6873
6868 * Moved all the original ipython.py code into ipythonlib.py. Right
6874 * Moved all the original ipython.py code into ipythonlib.py. Right
6869 now it's just one big dump into a function called make_IPython, so
6875 now it's just one big dump into a function called make_IPython, so
6870 no real modularity has been gained. But at least it makes the
6876 no real modularity has been gained. But at least it makes the
6871 wrapper script tiny, and since ipythonlib is a module, it gets
6877 wrapper script tiny, and since ipythonlib is a module, it gets
6872 compiled and startup is much faster.
6878 compiled and startup is much faster.
6873
6879
6874 This is a reasobably 'deep' change, so we should test it for a
6880 This is a reasobably 'deep' change, so we should test it for a
6875 while without messing too much more with the code.
6881 while without messing too much more with the code.
6876
6882
6877 2001-11-21 Fernando Perez <fperez@colorado.edu>
6883 2001-11-21 Fernando Perez <fperez@colorado.edu>
6878
6884
6879 * Version 0.1.11 released, 0.1.12 opened for further work.
6885 * Version 0.1.11 released, 0.1.12 opened for further work.
6880
6886
6881 * Removed dependency on Itpl. It was only needed in one place. It
6887 * Removed dependency on Itpl. It was only needed in one place. It
6882 would be nice if this became part of python, though. It makes life
6888 would be nice if this became part of python, though. It makes life
6883 *a lot* easier in some cases.
6889 *a lot* easier in some cases.
6884
6890
6885 * Simplified the prefilter code a bit. Now all handlers are
6891 * Simplified the prefilter code a bit. Now all handlers are
6886 expected to explicitly return a value (at least a blank string).
6892 expected to explicitly return a value (at least a blank string).
6887
6893
6888 * Heavy edits in ipplib. Removed the help system altogether. Now
6894 * Heavy edits in ipplib. Removed the help system altogether. Now
6889 obj?/?? is used for inspecting objects, a magic @doc prints
6895 obj?/?? is used for inspecting objects, a magic @doc prints
6890 docstrings, and full-blown Python help is accessed via the 'help'
6896 docstrings, and full-blown Python help is accessed via the 'help'
6891 keyword. This cleans up a lot of code (less to maintain) and does
6897 keyword. This cleans up a lot of code (less to maintain) and does
6892 the job. Since 'help' is now a standard Python component, might as
6898 the job. Since 'help' is now a standard Python component, might as
6893 well use it and remove duplicate functionality.
6899 well use it and remove duplicate functionality.
6894
6900
6895 Also removed the option to use ipplib as a standalone program. By
6901 Also removed the option to use ipplib as a standalone program. By
6896 now it's too dependent on other parts of IPython to function alone.
6902 now it's too dependent on other parts of IPython to function alone.
6897
6903
6898 * Fixed bug in genutils.pager. It would crash if the pager was
6904 * Fixed bug in genutils.pager. It would crash if the pager was
6899 exited immediately after opening (broken pipe).
6905 exited immediately after opening (broken pipe).
6900
6906
6901 * Trimmed down the VerboseTB reporting a little. The header is
6907 * Trimmed down the VerboseTB reporting a little. The header is
6902 much shorter now and the repeated exception arguments at the end
6908 much shorter now and the repeated exception arguments at the end
6903 have been removed. For interactive use the old header seemed a bit
6909 have been removed. For interactive use the old header seemed a bit
6904 excessive.
6910 excessive.
6905
6911
6906 * Fixed small bug in output of @whos for variables with multi-word
6912 * Fixed small bug in output of @whos for variables with multi-word
6907 types (only first word was displayed).
6913 types (only first word was displayed).
6908
6914
6909 2001-11-17 Fernando Perez <fperez@colorado.edu>
6915 2001-11-17 Fernando Perez <fperez@colorado.edu>
6910
6916
6911 * Version 0.1.10 released, 0.1.11 opened for further work.
6917 * Version 0.1.10 released, 0.1.11 opened for further work.
6912
6918
6913 * Modified dirs and friends. dirs now *returns* the stack (not
6919 * Modified dirs and friends. dirs now *returns* the stack (not
6914 prints), so one can manipulate it as a variable. Convenient to
6920 prints), so one can manipulate it as a variable. Convenient to
6915 travel along many directories.
6921 travel along many directories.
6916
6922
6917 * Fixed bug in magic_pdef: would only work with functions with
6923 * Fixed bug in magic_pdef: would only work with functions with
6918 arguments with default values.
6924 arguments with default values.
6919
6925
6920 2001-11-14 Fernando Perez <fperez@colorado.edu>
6926 2001-11-14 Fernando Perez <fperez@colorado.edu>
6921
6927
6922 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6928 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6923 example with IPython. Various other minor fixes and cleanups.
6929 example with IPython. Various other minor fixes and cleanups.
6924
6930
6925 * Version 0.1.9 released, 0.1.10 opened for further work.
6931 * Version 0.1.9 released, 0.1.10 opened for further work.
6926
6932
6927 * Added sys.path to the list of directories searched in the
6933 * Added sys.path to the list of directories searched in the
6928 execfile= option. It used to be the current directory and the
6934 execfile= option. It used to be the current directory and the
6929 user's IPYTHONDIR only.
6935 user's IPYTHONDIR only.
6930
6936
6931 2001-11-13 Fernando Perez <fperez@colorado.edu>
6937 2001-11-13 Fernando Perez <fperez@colorado.edu>
6932
6938
6933 * Reinstated the raw_input/prefilter separation that Janko had
6939 * Reinstated the raw_input/prefilter separation that Janko had
6934 initially. This gives a more convenient setup for extending the
6940 initially. This gives a more convenient setup for extending the
6935 pre-processor from the outside: raw_input always gets a string,
6941 pre-processor from the outside: raw_input always gets a string,
6936 and prefilter has to process it. We can then redefine prefilter
6942 and prefilter has to process it. We can then redefine prefilter
6937 from the outside and implement extensions for special
6943 from the outside and implement extensions for special
6938 purposes.
6944 purposes.
6939
6945
6940 Today I got one for inputting PhysicalQuantity objects
6946 Today I got one for inputting PhysicalQuantity objects
6941 (from Scientific) without needing any function calls at
6947 (from Scientific) without needing any function calls at
6942 all. Extremely convenient, and it's all done as a user-level
6948 all. Extremely convenient, and it's all done as a user-level
6943 extension (no IPython code was touched). Now instead of:
6949 extension (no IPython code was touched). Now instead of:
6944 a = PhysicalQuantity(4.2,'m/s**2')
6950 a = PhysicalQuantity(4.2,'m/s**2')
6945 one can simply say
6951 one can simply say
6946 a = 4.2 m/s**2
6952 a = 4.2 m/s**2
6947 or even
6953 or even
6948 a = 4.2 m/s^2
6954 a = 4.2 m/s^2
6949
6955
6950 I use this, but it's also a proof of concept: IPython really is
6956 I use this, but it's also a proof of concept: IPython really is
6951 fully user-extensible, even at the level of the parsing of the
6957 fully user-extensible, even at the level of the parsing of the
6952 command line. It's not trivial, but it's perfectly doable.
6958 command line. It's not trivial, but it's perfectly doable.
6953
6959
6954 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6960 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6955 the problem of modules being loaded in the inverse order in which
6961 the problem of modules being loaded in the inverse order in which
6956 they were defined in
6962 they were defined in
6957
6963
6958 * Version 0.1.8 released, 0.1.9 opened for further work.
6964 * Version 0.1.8 released, 0.1.9 opened for further work.
6959
6965
6960 * Added magics pdef, source and file. They respectively show the
6966 * Added magics pdef, source and file. They respectively show the
6961 definition line ('prototype' in C), source code and full python
6967 definition line ('prototype' in C), source code and full python
6962 file for any callable object. The object inspector oinfo uses
6968 file for any callable object. The object inspector oinfo uses
6963 these to show the same information.
6969 these to show the same information.
6964
6970
6965 * Version 0.1.7 released, 0.1.8 opened for further work.
6971 * Version 0.1.7 released, 0.1.8 opened for further work.
6966
6972
6967 * Separated all the magic functions into a class called Magic. The
6973 * Separated all the magic functions into a class called Magic. The
6968 InteractiveShell class was becoming too big for Xemacs to handle
6974 InteractiveShell class was becoming too big for Xemacs to handle
6969 (de-indenting a line would lock it up for 10 seconds while it
6975 (de-indenting a line would lock it up for 10 seconds while it
6970 backtracked on the whole class!)
6976 backtracked on the whole class!)
6971
6977
6972 FIXME: didn't work. It can be done, but right now namespaces are
6978 FIXME: didn't work. It can be done, but right now namespaces are
6973 all messed up. Do it later (reverted it for now, so at least
6979 all messed up. Do it later (reverted it for now, so at least
6974 everything works as before).
6980 everything works as before).
6975
6981
6976 * Got the object introspection system (magic_oinfo) working! I
6982 * Got the object introspection system (magic_oinfo) working! I
6977 think this is pretty much ready for release to Janko, so he can
6983 think this is pretty much ready for release to Janko, so he can
6978 test it for a while and then announce it. Pretty much 100% of what
6984 test it for a while and then announce it. Pretty much 100% of what
6979 I wanted for the 'phase 1' release is ready. Happy, tired.
6985 I wanted for the 'phase 1' release is ready. Happy, tired.
6980
6986
6981 2001-11-12 Fernando Perez <fperez@colorado.edu>
6987 2001-11-12 Fernando Perez <fperez@colorado.edu>
6982
6988
6983 * Version 0.1.6 released, 0.1.7 opened for further work.
6989 * Version 0.1.6 released, 0.1.7 opened for further work.
6984
6990
6985 * Fixed bug in printing: it used to test for truth before
6991 * Fixed bug in printing: it used to test for truth before
6986 printing, so 0 wouldn't print. Now checks for None.
6992 printing, so 0 wouldn't print. Now checks for None.
6987
6993
6988 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6994 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6989 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6995 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6990 reaches by hand into the outputcache. Think of a better way to do
6996 reaches by hand into the outputcache. Think of a better way to do
6991 this later.
6997 this later.
6992
6998
6993 * Various small fixes thanks to Nathan's comments.
6999 * Various small fixes thanks to Nathan's comments.
6994
7000
6995 * Changed magic_pprint to magic_Pprint. This way it doesn't
7001 * Changed magic_pprint to magic_Pprint. This way it doesn't
6996 collide with pprint() and the name is consistent with the command
7002 collide with pprint() and the name is consistent with the command
6997 line option.
7003 line option.
6998
7004
6999 * Changed prompt counter behavior to be fully like
7005 * Changed prompt counter behavior to be fully like
7000 Mathematica's. That is, even input that doesn't return a result
7006 Mathematica's. That is, even input that doesn't return a result
7001 raises the prompt counter. The old behavior was kind of confusing
7007 raises the prompt counter. The old behavior was kind of confusing
7002 (getting the same prompt number several times if the operation
7008 (getting the same prompt number several times if the operation
7003 didn't return a result).
7009 didn't return a result).
7004
7010
7005 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7011 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7006
7012
7007 * Fixed -Classic mode (wasn't working anymore).
7013 * Fixed -Classic mode (wasn't working anymore).
7008
7014
7009 * Added colored prompts using Nathan's new code. Colors are
7015 * Added colored prompts using Nathan's new code. Colors are
7010 currently hardwired, they can be user-configurable. For
7016 currently hardwired, they can be user-configurable. For
7011 developers, they can be chosen in file ipythonlib.py, at the
7017 developers, they can be chosen in file ipythonlib.py, at the
7012 beginning of the CachedOutput class def.
7018 beginning of the CachedOutput class def.
7013
7019
7014 2001-11-11 Fernando Perez <fperez@colorado.edu>
7020 2001-11-11 Fernando Perez <fperez@colorado.edu>
7015
7021
7016 * Version 0.1.5 released, 0.1.6 opened for further work.
7022 * Version 0.1.5 released, 0.1.6 opened for further work.
7017
7023
7018 * Changed magic_env to *return* the environment as a dict (not to
7024 * Changed magic_env to *return* the environment as a dict (not to
7019 print it). This way it prints, but it can also be processed.
7025 print it). This way it prints, but it can also be processed.
7020
7026
7021 * Added Verbose exception reporting to interactive
7027 * Added Verbose exception reporting to interactive
7022 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7028 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7023 traceback. Had to make some changes to the ultraTB file. This is
7029 traceback. Had to make some changes to the ultraTB file. This is
7024 probably the last 'big' thing in my mental todo list. This ties
7030 probably the last 'big' thing in my mental todo list. This ties
7025 in with the next entry:
7031 in with the next entry:
7026
7032
7027 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7033 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7028 has to specify is Plain, Color or Verbose for all exception
7034 has to specify is Plain, Color or Verbose for all exception
7029 handling.
7035 handling.
7030
7036
7031 * Removed ShellServices option. All this can really be done via
7037 * Removed ShellServices option. All this can really be done via
7032 the magic system. It's easier to extend, cleaner and has automatic
7038 the magic system. It's easier to extend, cleaner and has automatic
7033 namespace protection and documentation.
7039 namespace protection and documentation.
7034
7040
7035 2001-11-09 Fernando Perez <fperez@colorado.edu>
7041 2001-11-09 Fernando Perez <fperez@colorado.edu>
7036
7042
7037 * Fixed bug in output cache flushing (missing parameter to
7043 * Fixed bug in output cache flushing (missing parameter to
7038 __init__). Other small bugs fixed (found using pychecker).
7044 __init__). Other small bugs fixed (found using pychecker).
7039
7045
7040 * Version 0.1.4 opened for bugfixing.
7046 * Version 0.1.4 opened for bugfixing.
7041
7047
7042 2001-11-07 Fernando Perez <fperez@colorado.edu>
7048 2001-11-07 Fernando Perez <fperez@colorado.edu>
7043
7049
7044 * Version 0.1.3 released, mainly because of the raw_input bug.
7050 * Version 0.1.3 released, mainly because of the raw_input bug.
7045
7051
7046 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7052 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7047 and when testing for whether things were callable, a call could
7053 and when testing for whether things were callable, a call could
7048 actually be made to certain functions. They would get called again
7054 actually be made to certain functions. They would get called again
7049 once 'really' executed, with a resulting double call. A disaster
7055 once 'really' executed, with a resulting double call. A disaster
7050 in many cases (list.reverse() would never work!).
7056 in many cases (list.reverse() would never work!).
7051
7057
7052 * Removed prefilter() function, moved its code to raw_input (which
7058 * Removed prefilter() function, moved its code to raw_input (which
7053 after all was just a near-empty caller for prefilter). This saves
7059 after all was just a near-empty caller for prefilter). This saves
7054 a function call on every prompt, and simplifies the class a tiny bit.
7060 a function call on every prompt, and simplifies the class a tiny bit.
7055
7061
7056 * Fix _ip to __ip name in magic example file.
7062 * Fix _ip to __ip name in magic example file.
7057
7063
7058 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7064 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7059 work with non-gnu versions of tar.
7065 work with non-gnu versions of tar.
7060
7066
7061 2001-11-06 Fernando Perez <fperez@colorado.edu>
7067 2001-11-06 Fernando Perez <fperez@colorado.edu>
7062
7068
7063 * Version 0.1.2. Just to keep track of the recent changes.
7069 * Version 0.1.2. Just to keep track of the recent changes.
7064
7070
7065 * Fixed nasty bug in output prompt routine. It used to check 'if
7071 * Fixed nasty bug in output prompt routine. It used to check 'if
7066 arg != None...'. Problem is, this fails if arg implements a
7072 arg != None...'. Problem is, this fails if arg implements a
7067 special comparison (__cmp__) which disallows comparing to
7073 special comparison (__cmp__) which disallows comparing to
7068 None. Found it when trying to use the PhysicalQuantity module from
7074 None. Found it when trying to use the PhysicalQuantity module from
7069 ScientificPython.
7075 ScientificPython.
7070
7076
7071 2001-11-05 Fernando Perez <fperez@colorado.edu>
7077 2001-11-05 Fernando Perez <fperez@colorado.edu>
7072
7078
7073 * Also added dirs. Now the pushd/popd/dirs family functions
7079 * Also added dirs. Now the pushd/popd/dirs family functions
7074 basically like the shell, with the added convenience of going home
7080 basically like the shell, with the added convenience of going home
7075 when called with no args.
7081 when called with no args.
7076
7082
7077 * pushd/popd slightly modified to mimic shell behavior more
7083 * pushd/popd slightly modified to mimic shell behavior more
7078 closely.
7084 closely.
7079
7085
7080 * Added env,pushd,popd from ShellServices as magic functions. I
7086 * Added env,pushd,popd from ShellServices as magic functions. I
7081 think the cleanest will be to port all desired functions from
7087 think the cleanest will be to port all desired functions from
7082 ShellServices as magics and remove ShellServices altogether. This
7088 ShellServices as magics and remove ShellServices altogether. This
7083 will provide a single, clean way of adding functionality
7089 will provide a single, clean way of adding functionality
7084 (shell-type or otherwise) to IP.
7090 (shell-type or otherwise) to IP.
7085
7091
7086 2001-11-04 Fernando Perez <fperez@colorado.edu>
7092 2001-11-04 Fernando Perez <fperez@colorado.edu>
7087
7093
7088 * Added .ipython/ directory to sys.path. This way users can keep
7094 * Added .ipython/ directory to sys.path. This way users can keep
7089 customizations there and access them via import.
7095 customizations there and access them via import.
7090
7096
7091 2001-11-03 Fernando Perez <fperez@colorado.edu>
7097 2001-11-03 Fernando Perez <fperez@colorado.edu>
7092
7098
7093 * Opened version 0.1.1 for new changes.
7099 * Opened version 0.1.1 for new changes.
7094
7100
7095 * Changed version number to 0.1.0: first 'public' release, sent to
7101 * Changed version number to 0.1.0: first 'public' release, sent to
7096 Nathan and Janko.
7102 Nathan and Janko.
7097
7103
7098 * Lots of small fixes and tweaks.
7104 * Lots of small fixes and tweaks.
7099
7105
7100 * Minor changes to whos format. Now strings are shown, snipped if
7106 * Minor changes to whos format. Now strings are shown, snipped if
7101 too long.
7107 too long.
7102
7108
7103 * Changed ShellServices to work on __main__ so they show up in @who
7109 * Changed ShellServices to work on __main__ so they show up in @who
7104
7110
7105 * Help also works with ? at the end of a line:
7111 * Help also works with ? at the end of a line:
7106 ?sin and sin?
7112 ?sin and sin?
7107 both produce the same effect. This is nice, as often I use the
7113 both produce the same effect. This is nice, as often I use the
7108 tab-complete to find the name of a method, but I used to then have
7114 tab-complete to find the name of a method, but I used to then have
7109 to go to the beginning of the line to put a ? if I wanted more
7115 to go to the beginning of the line to put a ? if I wanted more
7110 info. Now I can just add the ? and hit return. Convenient.
7116 info. Now I can just add the ? and hit return. Convenient.
7111
7117
7112 2001-11-02 Fernando Perez <fperez@colorado.edu>
7118 2001-11-02 Fernando Perez <fperez@colorado.edu>
7113
7119
7114 * Python version check (>=2.1) added.
7120 * Python version check (>=2.1) added.
7115
7121
7116 * Added LazyPython documentation. At this point the docs are quite
7122 * Added LazyPython documentation. At this point the docs are quite
7117 a mess. A cleanup is in order.
7123 a mess. A cleanup is in order.
7118
7124
7119 * Auto-installer created. For some bizarre reason, the zipfiles
7125 * Auto-installer created. For some bizarre reason, the zipfiles
7120 module isn't working on my system. So I made a tar version
7126 module isn't working on my system. So I made a tar version
7121 (hopefully the command line options in various systems won't kill
7127 (hopefully the command line options in various systems won't kill
7122 me).
7128 me).
7123
7129
7124 * Fixes to Struct in genutils. Now all dictionary-like methods are
7130 * Fixes to Struct in genutils. Now all dictionary-like methods are
7125 protected (reasonably).
7131 protected (reasonably).
7126
7132
7127 * Added pager function to genutils and changed ? to print usage
7133 * Added pager function to genutils and changed ? to print usage
7128 note through it (it was too long).
7134 note through it (it was too long).
7129
7135
7130 * Added the LazyPython functionality. Works great! I changed the
7136 * Added the LazyPython functionality. Works great! I changed the
7131 auto-quote escape to ';', it's on home row and next to '. But
7137 auto-quote escape to ';', it's on home row and next to '. But
7132 both auto-quote and auto-paren (still /) escapes are command-line
7138 both auto-quote and auto-paren (still /) escapes are command-line
7133 parameters.
7139 parameters.
7134
7140
7135
7141
7136 2001-11-01 Fernando Perez <fperez@colorado.edu>
7142 2001-11-01 Fernando Perez <fperez@colorado.edu>
7137
7143
7138 * Version changed to 0.0.7. Fairly large change: configuration now
7144 * Version changed to 0.0.7. Fairly large change: configuration now
7139 is all stored in a directory, by default .ipython. There, all
7145 is all stored in a directory, by default .ipython. There, all
7140 config files have normal looking names (not .names)
7146 config files have normal looking names (not .names)
7141
7147
7142 * Version 0.0.6 Released first to Lucas and Archie as a test
7148 * Version 0.0.6 Released first to Lucas and Archie as a test
7143 run. Since it's the first 'semi-public' release, change version to
7149 run. Since it's the first 'semi-public' release, change version to
7144 > 0.0.6 for any changes now.
7150 > 0.0.6 for any changes now.
7145
7151
7146 * Stuff I had put in the ipplib.py changelog:
7152 * Stuff I had put in the ipplib.py changelog:
7147
7153
7148 Changes to InteractiveShell:
7154 Changes to InteractiveShell:
7149
7155
7150 - Made the usage message a parameter.
7156 - Made the usage message a parameter.
7151
7157
7152 - Require the name of the shell variable to be given. It's a bit
7158 - Require the name of the shell variable to be given. It's a bit
7153 of a hack, but allows the name 'shell' not to be hardwired in the
7159 of a hack, but allows the name 'shell' not to be hardwired in the
7154 magic (@) handler, which is problematic b/c it requires
7160 magic (@) handler, which is problematic b/c it requires
7155 polluting the global namespace with 'shell'. This in turn is
7161 polluting the global namespace with 'shell'. This in turn is
7156 fragile: if a user redefines a variable called shell, things
7162 fragile: if a user redefines a variable called shell, things
7157 break.
7163 break.
7158
7164
7159 - magic @: all functions available through @ need to be defined
7165 - magic @: all functions available through @ need to be defined
7160 as magic_<name>, even though they can be called simply as
7166 as magic_<name>, even though they can be called simply as
7161 @<name>. This allows the special command @magic to gather
7167 @<name>. This allows the special command @magic to gather
7162 information automatically about all existing magic functions,
7168 information automatically about all existing magic functions,
7163 even if they are run-time user extensions, by parsing the shell
7169 even if they are run-time user extensions, by parsing the shell
7164 instance __dict__ looking for special magic_ names.
7170 instance __dict__ looking for special magic_ names.
7165
7171
7166 - mainloop: added *two* local namespace parameters. This allows
7172 - mainloop: added *two* local namespace parameters. This allows
7167 the class to differentiate between parameters which were there
7173 the class to differentiate between parameters which were there
7168 before and after command line initialization was processed. This
7174 before and after command line initialization was processed. This
7169 way, later @who can show things loaded at startup by the
7175 way, later @who can show things loaded at startup by the
7170 user. This trick was necessary to make session saving/reloading
7176 user. This trick was necessary to make session saving/reloading
7171 really work: ideally after saving/exiting/reloading a session,
7177 really work: ideally after saving/exiting/reloading a session,
7172 *everything* should look the same, including the output of @who. I
7178 *everything* should look the same, including the output of @who. I
7173 was only able to make this work with this double namespace
7179 was only able to make this work with this double namespace
7174 trick.
7180 trick.
7175
7181
7176 - added a header to the logfile which allows (almost) full
7182 - added a header to the logfile which allows (almost) full
7177 session restoring.
7183 session restoring.
7178
7184
7179 - prepend lines beginning with @ or !, with a and log
7185 - prepend lines beginning with @ or !, with a and log
7180 them. Why? !lines: may be useful to know what you did @lines:
7186 them. Why? !lines: may be useful to know what you did @lines:
7181 they may affect session state. So when restoring a session, at
7187 they may affect session state. So when restoring a session, at
7182 least inform the user of their presence. I couldn't quite get
7188 least inform the user of their presence. I couldn't quite get
7183 them to properly re-execute, but at least the user is warned.
7189 them to properly re-execute, but at least the user is warned.
7184
7190
7185 * Started ChangeLog.
7191 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now