##// END OF EJS Templates
Fix long-standing and elusive terminal bug, where sometimes after issuing foo?, the terminal would get badly corrupted
Fernando Perez -
Show More
@@ -1,2024 +1,2040 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 2998 2008-01-31 10:06:04Z vivainio $"""
8 $Id: genutils.py 2998 2008-01-31 10:06:04Z 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 # Curses and termios are Unix-only modules
37 try:
38 import curses
39 # We need termios as well, so if its import happens to raise, we bail on
40 # using curses altogether.
41 import termios
42 except ImportError:
43 USE_CURSES = False
44 else:
45 # Curses on Solaris may not be complete, so we can't use it there
46 USE_CURSES = hasattr(curses,'initscr')
47
36 # Other IPython utilities
48 # Other IPython utilities
37 import IPython
49 import IPython
38 from IPython.Itpl import Itpl,itpl,printpl
50 from IPython.Itpl import Itpl,itpl,printpl
39 from IPython import DPyGetOpt, platutils
51 from IPython import DPyGetOpt, platutils
40 from IPython.generics import result_display
52 from IPython.generics import result_display
41 import IPython.ipapi
53 import IPython.ipapi
42 from IPython.external.path import path
54 from IPython.external.path import path
43 if os.name == "nt":
55 if os.name == "nt":
44 from IPython.winconsole import get_console_size
56 from IPython.winconsole import get_console_size
45
57
46 try:
58 try:
47 set
59 set
48 except:
60 except:
49 from sets import Set as set
61 from sets import Set as set
50
62
51
63
52 #****************************************************************************
64 #****************************************************************************
53 # Exceptions
65 # Exceptions
54 class Error(Exception):
66 class Error(Exception):
55 """Base class for exceptions in this module."""
67 """Base class for exceptions in this module."""
56 pass
68 pass
57
69
58 #----------------------------------------------------------------------------
70 #----------------------------------------------------------------------------
59 class IOStream:
71 class IOStream:
60 def __init__(self,stream,fallback):
72 def __init__(self,stream,fallback):
61 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
73 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
62 stream = fallback
74 stream = fallback
63 self.stream = stream
75 self.stream = stream
64 self._swrite = stream.write
76 self._swrite = stream.write
65 self.flush = stream.flush
77 self.flush = stream.flush
66
78
67 def write(self,data):
79 def write(self,data):
68 try:
80 try:
69 self._swrite(data)
81 self._swrite(data)
70 except:
82 except:
71 try:
83 try:
72 # print handles some unicode issues which may trip a plain
84 # print handles some unicode issues which may trip a plain
73 # write() call. Attempt to emulate write() by using a
85 # write() call. Attempt to emulate write() by using a
74 # trailing comma
86 # trailing comma
75 print >> self.stream, data,
87 print >> self.stream, data,
76 except:
88 except:
77 # if we get here, something is seriously broken.
89 # if we get here, something is seriously broken.
78 print >> sys.stderr, \
90 print >> sys.stderr, \
79 'ERROR - failed to write data to stream:', self.stream
91 'ERROR - failed to write data to stream:', self.stream
80
92
81 def close(self):
93 def close(self):
82 pass
94 pass
83
95
84
96
85 class IOTerm:
97 class IOTerm:
86 """ Term holds the file or file-like objects for handling I/O operations.
98 """ Term holds the file or file-like objects for handling I/O operations.
87
99
88 These are normally just sys.stdin, sys.stdout and sys.stderr but for
100 These are normally just sys.stdin, sys.stdout and sys.stderr but for
89 Windows they can can replaced to allow editing the strings before they are
101 Windows they can can replaced to allow editing the strings before they are
90 displayed."""
102 displayed."""
91
103
92 # In the future, having IPython channel all its I/O operations through
104 # In the future, having IPython channel all its I/O operations through
93 # this class will make it easier to embed it into other environments which
105 # this class will make it easier to embed it into other environments which
94 # are not a normal terminal (such as a GUI-based shell)
106 # are not a normal terminal (such as a GUI-based shell)
95 def __init__(self,cin=None,cout=None,cerr=None):
107 def __init__(self,cin=None,cout=None,cerr=None):
96 self.cin = IOStream(cin,sys.stdin)
108 self.cin = IOStream(cin,sys.stdin)
97 self.cout = IOStream(cout,sys.stdout)
109 self.cout = IOStream(cout,sys.stdout)
98 self.cerr = IOStream(cerr,sys.stderr)
110 self.cerr = IOStream(cerr,sys.stderr)
99
111
100 # Global variable to be used for all I/O
112 # Global variable to be used for all I/O
101 Term = IOTerm()
113 Term = IOTerm()
102
114
103 import IPython.rlineimpl as readline
115 import IPython.rlineimpl as readline
104 # Remake Term to use the readline i/o facilities
116 # Remake Term to use the readline i/o facilities
105 if sys.platform == 'win32' and readline.have_readline:
117 if sys.platform == 'win32' and readline.have_readline:
106
118
107 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
119 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
108
120
109
121
110 #****************************************************************************
122 #****************************************************************************
111 # Generic warning/error printer, used by everything else
123 # Generic warning/error printer, used by everything else
112 def warn(msg,level=2,exit_val=1):
124 def warn(msg,level=2,exit_val=1):
113 """Standard warning printer. Gives formatting consistency.
125 """Standard warning printer. Gives formatting consistency.
114
126
115 Output is sent to Term.cerr (sys.stderr by default).
127 Output is sent to Term.cerr (sys.stderr by default).
116
128
117 Options:
129 Options:
118
130
119 -level(2): allows finer control:
131 -level(2): allows finer control:
120 0 -> Do nothing, dummy function.
132 0 -> Do nothing, dummy function.
121 1 -> Print message.
133 1 -> Print message.
122 2 -> Print 'WARNING:' + message. (Default level).
134 2 -> Print 'WARNING:' + message. (Default level).
123 3 -> Print 'ERROR:' + message.
135 3 -> Print 'ERROR:' + message.
124 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
136 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
125
137
126 -exit_val (1): exit value returned by sys.exit() for a level 4
138 -exit_val (1): exit value returned by sys.exit() for a level 4
127 warning. Ignored for all other levels."""
139 warning. Ignored for all other levels."""
128
140
129 if level>0:
141 if level>0:
130 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
142 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
131 print >> Term.cerr, '%s%s' % (header[level],msg)
143 print >> Term.cerr, '%s%s' % (header[level],msg)
132 if level == 4:
144 if level == 4:
133 print >> Term.cerr,'Exiting.\n'
145 print >> Term.cerr,'Exiting.\n'
134 sys.exit(exit_val)
146 sys.exit(exit_val)
135
147
136 def info(msg):
148 def info(msg):
137 """Equivalent to warn(msg,level=1)."""
149 """Equivalent to warn(msg,level=1)."""
138
150
139 warn(msg,level=1)
151 warn(msg,level=1)
140
152
141 def error(msg):
153 def error(msg):
142 """Equivalent to warn(msg,level=3)."""
154 """Equivalent to warn(msg,level=3)."""
143
155
144 warn(msg,level=3)
156 warn(msg,level=3)
145
157
146 def fatal(msg,exit_val=1):
158 def fatal(msg,exit_val=1):
147 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
159 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
148
160
149 warn(msg,exit_val=exit_val,level=4)
161 warn(msg,exit_val=exit_val,level=4)
150
162
151 #---------------------------------------------------------------------------
163 #---------------------------------------------------------------------------
152 # Debugging routines
164 # Debugging routines
153 #
165 #
154 def debugx(expr,pre_msg=''):
166 def debugx(expr,pre_msg=''):
155 """Print the value of an expression from the caller's frame.
167 """Print the value of an expression from the caller's frame.
156
168
157 Takes an expression, evaluates it in the caller's frame and prints both
169 Takes an expression, evaluates it in the caller's frame and prints both
158 the given expression and the resulting value (as well as a debug mark
170 the given expression and the resulting value (as well as a debug mark
159 indicating the name of the calling function. The input must be of a form
171 indicating the name of the calling function. The input must be of a form
160 suitable for eval().
172 suitable for eval().
161
173
162 An optional message can be passed, which will be prepended to the printed
174 An optional message can be passed, which will be prepended to the printed
163 expr->value pair."""
175 expr->value pair."""
164
176
165 cf = sys._getframe(1)
177 cf = sys._getframe(1)
166 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
178 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
167 eval(expr,cf.f_globals,cf.f_locals))
179 eval(expr,cf.f_globals,cf.f_locals))
168
180
169 # deactivate it by uncommenting the following line, which makes it a no-op
181 # deactivate it by uncommenting the following line, which makes it a no-op
170 #def debugx(expr,pre_msg=''): pass
182 #def debugx(expr,pre_msg=''): pass
171
183
172 #----------------------------------------------------------------------------
184 #----------------------------------------------------------------------------
173 StringTypes = types.StringTypes
185 StringTypes = types.StringTypes
174
186
175 # Basic timing functionality
187 # Basic timing functionality
176
188
177 # If possible (Unix), use the resource module instead of time.clock()
189 # If possible (Unix), use the resource module instead of time.clock()
178 try:
190 try:
179 import resource
191 import resource
180 def clocku():
192 def clocku():
181 """clocku() -> floating point number
193 """clocku() -> floating point number
182
194
183 Return the *USER* CPU time in seconds since the start of the process.
195 Return the *USER* CPU time in seconds since the start of the process.
184 This is done via a call to resource.getrusage, so it avoids the
196 This is done via a call to resource.getrusage, so it avoids the
185 wraparound problems in time.clock()."""
197 wraparound problems in time.clock()."""
186
198
187 return resource.getrusage(resource.RUSAGE_SELF)[0]
199 return resource.getrusage(resource.RUSAGE_SELF)[0]
188
200
189 def clocks():
201 def clocks():
190 """clocks() -> floating point number
202 """clocks() -> floating point number
191
203
192 Return the *SYSTEM* CPU time in seconds since the start of the process.
204 Return the *SYSTEM* CPU time in seconds since the start of the process.
193 This is done via a call to resource.getrusage, so it avoids the
205 This is done via a call to resource.getrusage, so it avoids the
194 wraparound problems in time.clock()."""
206 wraparound problems in time.clock()."""
195
207
196 return resource.getrusage(resource.RUSAGE_SELF)[1]
208 return resource.getrusage(resource.RUSAGE_SELF)[1]
197
209
198 def clock():
210 def clock():
199 """clock() -> floating point number
211 """clock() -> floating point number
200
212
201 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
213 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
202 the process. This is done via a call to resource.getrusage, so it
214 the process. This is done via a call to resource.getrusage, so it
203 avoids the wraparound problems in time.clock()."""
215 avoids the wraparound problems in time.clock()."""
204
216
205 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
217 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
206 return u+s
218 return u+s
207
219
208 def clock2():
220 def clock2():
209 """clock2() -> (t_user,t_system)
221 """clock2() -> (t_user,t_system)
210
222
211 Similar to clock(), but return a tuple of user/system times."""
223 Similar to clock(), but return a tuple of user/system times."""
212 return resource.getrusage(resource.RUSAGE_SELF)[:2]
224 return resource.getrusage(resource.RUSAGE_SELF)[:2]
213
225
214 except ImportError:
226 except ImportError:
215 # There is no distinction of user/system time under windows, so we just use
227 # There is no distinction of user/system time under windows, so we just use
216 # time.clock() for everything...
228 # time.clock() for everything...
217 clocku = clocks = clock = time.clock
229 clocku = clocks = clock = time.clock
218 def clock2():
230 def clock2():
219 """Under windows, system CPU time can't be measured.
231 """Under windows, system CPU time can't be measured.
220
232
221 This just returns clock() and zero."""
233 This just returns clock() and zero."""
222 return time.clock(),0.0
234 return time.clock(),0.0
223
235
224 def timings_out(reps,func,*args,**kw):
236 def timings_out(reps,func,*args,**kw):
225 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
237 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
226
238
227 Execute a function reps times, return a tuple with the elapsed total
239 Execute a function reps times, return a tuple with the elapsed total
228 CPU time in seconds, the time per call and the function's output.
240 CPU time in seconds, the time per call and the function's output.
229
241
230 Under Unix, the return value is the sum of user+system time consumed by
242 Under Unix, the return value is the sum of user+system time consumed by
231 the process, computed via the resource module. This prevents problems
243 the process, computed via the resource module. This prevents problems
232 related to the wraparound effect which the time.clock() function has.
244 related to the wraparound effect which the time.clock() function has.
233
245
234 Under Windows the return value is in wall clock seconds. See the
246 Under Windows the return value is in wall clock seconds. See the
235 documentation for the time module for more details."""
247 documentation for the time module for more details."""
236
248
237 reps = int(reps)
249 reps = int(reps)
238 assert reps >=1, 'reps must be >= 1'
250 assert reps >=1, 'reps must be >= 1'
239 if reps==1:
251 if reps==1:
240 start = clock()
252 start = clock()
241 out = func(*args,**kw)
253 out = func(*args,**kw)
242 tot_time = clock()-start
254 tot_time = clock()-start
243 else:
255 else:
244 rng = xrange(reps-1) # the last time is executed separately to store output
256 rng = xrange(reps-1) # the last time is executed separately to store output
245 start = clock()
257 start = clock()
246 for dummy in rng: func(*args,**kw)
258 for dummy in rng: func(*args,**kw)
247 out = func(*args,**kw) # one last time
259 out = func(*args,**kw) # one last time
248 tot_time = clock()-start
260 tot_time = clock()-start
249 av_time = tot_time / reps
261 av_time = tot_time / reps
250 return tot_time,av_time,out
262 return tot_time,av_time,out
251
263
252 def timings(reps,func,*args,**kw):
264 def timings(reps,func,*args,**kw):
253 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
265 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
254
266
255 Execute a function reps times, return a tuple with the elapsed total CPU
267 Execute a function reps times, return a tuple with the elapsed total CPU
256 time in seconds and the time per call. These are just the first two values
268 time in seconds and the time per call. These are just the first two values
257 in timings_out()."""
269 in timings_out()."""
258
270
259 return timings_out(reps,func,*args,**kw)[0:2]
271 return timings_out(reps,func,*args,**kw)[0:2]
260
272
261 def timing(func,*args,**kw):
273 def timing(func,*args,**kw):
262 """timing(func,*args,**kw) -> t_total
274 """timing(func,*args,**kw) -> t_total
263
275
264 Execute a function once, return the elapsed total CPU time in
276 Execute a function once, return the elapsed total CPU time in
265 seconds. This is just the first value in timings_out()."""
277 seconds. This is just the first value in timings_out()."""
266
278
267 return timings_out(1,func,*args,**kw)[0]
279 return timings_out(1,func,*args,**kw)[0]
268
280
269 #****************************************************************************
281 #****************************************************************************
270 # file and system
282 # file and system
271
283
272 def arg_split(s,posix=False):
284 def arg_split(s,posix=False):
273 """Split a command line's arguments in a shell-like manner.
285 """Split a command line's arguments in a shell-like manner.
274
286
275 This is a modified version of the standard library's shlex.split()
287 This is a modified version of the standard library's shlex.split()
276 function, but with a default of posix=False for splitting, so that quotes
288 function, but with a default of posix=False for splitting, so that quotes
277 in inputs are respected."""
289 in inputs are respected."""
278
290
279 # XXX - there may be unicode-related problems here!!! I'm not sure that
291 # XXX - there may be unicode-related problems here!!! I'm not sure that
280 # shlex is truly unicode-safe, so it might be necessary to do
292 # shlex is truly unicode-safe, so it might be necessary to do
281 #
293 #
282 # s = s.encode(sys.stdin.encoding)
294 # s = s.encode(sys.stdin.encoding)
283 #
295 #
284 # first, to ensure that shlex gets a normal string. Input from anyone who
296 # first, to ensure that shlex gets a normal string. Input from anyone who
285 # knows more about unicode and shlex than I would be good to have here...
297 # knows more about unicode and shlex than I would be good to have here...
286 lex = shlex.shlex(s, posix=posix)
298 lex = shlex.shlex(s, posix=posix)
287 lex.whitespace_split = True
299 lex.whitespace_split = True
288 return list(lex)
300 return list(lex)
289
301
290 def system(cmd,verbose=0,debug=0,header=''):
302 def system(cmd,verbose=0,debug=0,header=''):
291 """Execute a system command, return its exit status.
303 """Execute a system command, return its exit status.
292
304
293 Options:
305 Options:
294
306
295 - verbose (0): print the command to be executed.
307 - verbose (0): print the command to be executed.
296
308
297 - debug (0): only print, do not actually execute.
309 - debug (0): only print, do not actually execute.
298
310
299 - header (''): Header to print on screen prior to the executed command (it
311 - header (''): Header to print on screen prior to the executed command (it
300 is only prepended to the command, no newlines are added).
312 is only prepended to the command, no newlines are added).
301
313
302 Note: a stateful version of this function is available through the
314 Note: a stateful version of this function is available through the
303 SystemExec class."""
315 SystemExec class."""
304
316
305 stat = 0
317 stat = 0
306 if verbose or debug: print header+cmd
318 if verbose or debug: print header+cmd
307 sys.stdout.flush()
319 sys.stdout.flush()
308 if not debug: stat = os.system(cmd)
320 if not debug: stat = os.system(cmd)
309 return stat
321 return stat
310
322
311 def abbrev_cwd():
323 def abbrev_cwd():
312 """ Return abbreviated version of cwd, e.g. d:mydir """
324 """ Return abbreviated version of cwd, e.g. d:mydir """
313 cwd = os.getcwd().replace('\\','/')
325 cwd = os.getcwd().replace('\\','/')
314 drivepart = ''
326 drivepart = ''
315 tail = cwd
327 tail = cwd
316 if sys.platform == 'win32':
328 if sys.platform == 'win32':
317 if len(cwd) < 4:
329 if len(cwd) < 4:
318 return cwd
330 return cwd
319 drivepart,tail = os.path.splitdrive(cwd)
331 drivepart,tail = os.path.splitdrive(cwd)
320
332
321
333
322 parts = tail.split('/')
334 parts = tail.split('/')
323 if len(parts) > 2:
335 if len(parts) > 2:
324 tail = '/'.join(parts[-2:])
336 tail = '/'.join(parts[-2:])
325
337
326 return (drivepart + (
338 return (drivepart + (
327 cwd == '/' and '/' or tail))
339 cwd == '/' and '/' or tail))
328
340
329
341
330 # This function is used by ipython in a lot of places to make system calls.
342 # This function is used by ipython in a lot of places to make system calls.
331 # We need it to be slightly different under win32, due to the vagaries of
343 # We need it to be slightly different under win32, due to the vagaries of
332 # 'network shares'. A win32 override is below.
344 # 'network shares'. A win32 override is below.
333
345
334 def shell(cmd,verbose=0,debug=0,header=''):
346 def shell(cmd,verbose=0,debug=0,header=''):
335 """Execute a command in the system shell, always return None.
347 """Execute a command in the system shell, always return None.
336
348
337 Options:
349 Options:
338
350
339 - verbose (0): print the command to be executed.
351 - verbose (0): print the command to be executed.
340
352
341 - debug (0): only print, do not actually execute.
353 - debug (0): only print, do not actually execute.
342
354
343 - header (''): Header to print on screen prior to the executed command (it
355 - header (''): Header to print on screen prior to the executed command (it
344 is only prepended to the command, no newlines are added).
356 is only prepended to the command, no newlines are added).
345
357
346 Note: this is similar to genutils.system(), but it returns None so it can
358 Note: this is similar to genutils.system(), but it returns None so it can
347 be conveniently used in interactive loops without getting the return value
359 be conveniently used in interactive loops without getting the return value
348 (typically 0) printed many times."""
360 (typically 0) printed many times."""
349
361
350 stat = 0
362 stat = 0
351 if verbose or debug: print header+cmd
363 if verbose or debug: print header+cmd
352 # flush stdout so we don't mangle python's buffering
364 # flush stdout so we don't mangle python's buffering
353 sys.stdout.flush()
365 sys.stdout.flush()
354
366
355 if not debug:
367 if not debug:
356 platutils.set_term_title("IPy " + cmd)
368 platutils.set_term_title("IPy " + cmd)
357 os.system(cmd)
369 os.system(cmd)
358 platutils.set_term_title("IPy " + abbrev_cwd())
370 platutils.set_term_title("IPy " + abbrev_cwd())
359
371
360 # override shell() for win32 to deal with network shares
372 # override shell() for win32 to deal with network shares
361 if os.name in ('nt','dos'):
373 if os.name in ('nt','dos'):
362
374
363 shell_ori = shell
375 shell_ori = shell
364
376
365 def shell(cmd,verbose=0,debug=0,header=''):
377 def shell(cmd,verbose=0,debug=0,header=''):
366 if os.getcwd().startswith(r"\\"):
378 if os.getcwd().startswith(r"\\"):
367 path = os.getcwd()
379 path = os.getcwd()
368 # change to c drive (cannot be on UNC-share when issuing os.system,
380 # change to c drive (cannot be on UNC-share when issuing os.system,
369 # as cmd.exe cannot handle UNC addresses)
381 # as cmd.exe cannot handle UNC addresses)
370 os.chdir("c:")
382 os.chdir("c:")
371 # issue pushd to the UNC-share and then run the command
383 # issue pushd to the UNC-share and then run the command
372 try:
384 try:
373 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
385 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
374 finally:
386 finally:
375 os.chdir(path)
387 os.chdir(path)
376 else:
388 else:
377 shell_ori(cmd,verbose,debug,header)
389 shell_ori(cmd,verbose,debug,header)
378
390
379 shell.__doc__ = shell_ori.__doc__
391 shell.__doc__ = shell_ori.__doc__
380
392
381 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
393 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
382 """Dummy substitute for perl's backquotes.
394 """Dummy substitute for perl's backquotes.
383
395
384 Executes a command and returns the output.
396 Executes a command and returns the output.
385
397
386 Accepts the same arguments as system(), plus:
398 Accepts the same arguments as system(), plus:
387
399
388 - split(0): if true, the output is returned as a list split on newlines.
400 - split(0): if true, the output is returned as a list split on newlines.
389
401
390 Note: a stateful version of this function is available through the
402 Note: a stateful version of this function is available through the
391 SystemExec class.
403 SystemExec class.
392
404
393 This is pretty much deprecated and rarely used,
405 This is pretty much deprecated and rarely used,
394 genutils.getoutputerror may be what you need.
406 genutils.getoutputerror may be what you need.
395
407
396 """
408 """
397
409
398 if verbose or debug: print header+cmd
410 if verbose or debug: print header+cmd
399 if not debug:
411 if not debug:
400 output = os.popen(cmd).read()
412 output = os.popen(cmd).read()
401 # stipping last \n is here for backwards compat.
413 # stipping last \n is here for backwards compat.
402 if output.endswith('\n'):
414 if output.endswith('\n'):
403 output = output[:-1]
415 output = output[:-1]
404 if split:
416 if split:
405 return output.split('\n')
417 return output.split('\n')
406 else:
418 else:
407 return output
419 return output
408
420
409 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
421 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
410 """Return (standard output,standard error) of executing cmd in a shell.
422 """Return (standard output,standard error) of executing cmd in a shell.
411
423
412 Accepts the same arguments as system(), plus:
424 Accepts the same arguments as system(), plus:
413
425
414 - split(0): if true, each of stdout/err is returned as a list split on
426 - split(0): if true, each of stdout/err is returned as a list split on
415 newlines.
427 newlines.
416
428
417 Note: a stateful version of this function is available through the
429 Note: a stateful version of this function is available through the
418 SystemExec class."""
430 SystemExec class."""
419
431
420 if verbose or debug: print header+cmd
432 if verbose or debug: print header+cmd
421 if not cmd:
433 if not cmd:
422 if split:
434 if split:
423 return [],[]
435 return [],[]
424 else:
436 else:
425 return '',''
437 return '',''
426 if not debug:
438 if not debug:
427 pin,pout,perr = os.popen3(cmd)
439 pin,pout,perr = os.popen3(cmd)
428 tout = pout.read().rstrip()
440 tout = pout.read().rstrip()
429 terr = perr.read().rstrip()
441 terr = perr.read().rstrip()
430 pin.close()
442 pin.close()
431 pout.close()
443 pout.close()
432 perr.close()
444 perr.close()
433 if split:
445 if split:
434 return tout.split('\n'),terr.split('\n')
446 return tout.split('\n'),terr.split('\n')
435 else:
447 else:
436 return tout,terr
448 return tout,terr
437
449
438 # for compatibility with older naming conventions
450 # for compatibility with older naming conventions
439 xsys = system
451 xsys = system
440 bq = getoutput
452 bq = getoutput
441
453
442 class SystemExec:
454 class SystemExec:
443 """Access the system and getoutput functions through a stateful interface.
455 """Access the system and getoutput functions through a stateful interface.
444
456
445 Note: here we refer to the system and getoutput functions from this
457 Note: here we refer to the system and getoutput functions from this
446 library, not the ones from the standard python library.
458 library, not the ones from the standard python library.
447
459
448 This class offers the system and getoutput functions as methods, but the
460 This class offers the system and getoutput functions as methods, but the
449 verbose, debug and header parameters can be set for the instance (at
461 verbose, debug and header parameters can be set for the instance (at
450 creation time or later) so that they don't need to be specified on each
462 creation time or later) so that they don't need to be specified on each
451 call.
463 call.
452
464
453 For efficiency reasons, there's no way to override the parameters on a
465 For efficiency reasons, there's no way to override the parameters on a
454 per-call basis other than by setting instance attributes. If you need
466 per-call basis other than by setting instance attributes. If you need
455 local overrides, it's best to directly call system() or getoutput().
467 local overrides, it's best to directly call system() or getoutput().
456
468
457 The following names are provided as alternate options:
469 The following names are provided as alternate options:
458 - xsys: alias to system
470 - xsys: alias to system
459 - bq: alias to getoutput
471 - bq: alias to getoutput
460
472
461 An instance can then be created as:
473 An instance can then be created as:
462 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
474 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
463
475
464 And used as:
476 And used as:
465 >>> sysexec.xsys('pwd')
477 >>> sysexec.xsys('pwd')
466 >>> dirlist = sysexec.bq('ls -l')
478 >>> dirlist = sysexec.bq('ls -l')
467 """
479 """
468
480
469 def __init__(self,verbose=0,debug=0,header='',split=0):
481 def __init__(self,verbose=0,debug=0,header='',split=0):
470 """Specify the instance's values for verbose, debug and header."""
482 """Specify the instance's values for verbose, debug and header."""
471 setattr_list(self,'verbose debug header split')
483 setattr_list(self,'verbose debug header split')
472
484
473 def system(self,cmd):
485 def system(self,cmd):
474 """Stateful interface to system(), with the same keyword parameters."""
486 """Stateful interface to system(), with the same keyword parameters."""
475
487
476 system(cmd,self.verbose,self.debug,self.header)
488 system(cmd,self.verbose,self.debug,self.header)
477
489
478 def shell(self,cmd):
490 def shell(self,cmd):
479 """Stateful interface to shell(), with the same keyword parameters."""
491 """Stateful interface to shell(), with the same keyword parameters."""
480
492
481 shell(cmd,self.verbose,self.debug,self.header)
493 shell(cmd,self.verbose,self.debug,self.header)
482
494
483 xsys = system # alias
495 xsys = system # alias
484
496
485 def getoutput(self,cmd):
497 def getoutput(self,cmd):
486 """Stateful interface to getoutput()."""
498 """Stateful interface to getoutput()."""
487
499
488 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
500 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
489
501
490 def getoutputerror(self,cmd):
502 def getoutputerror(self,cmd):
491 """Stateful interface to getoutputerror()."""
503 """Stateful interface to getoutputerror()."""
492
504
493 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
505 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
494
506
495 bq = getoutput # alias
507 bq = getoutput # alias
496
508
497 #-----------------------------------------------------------------------------
509 #-----------------------------------------------------------------------------
498 def mutex_opts(dict,ex_op):
510 def mutex_opts(dict,ex_op):
499 """Check for presence of mutually exclusive keys in a dict.
511 """Check for presence of mutually exclusive keys in a dict.
500
512
501 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
513 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
502 for op1,op2 in ex_op:
514 for op1,op2 in ex_op:
503 if op1 in dict and op2 in dict:
515 if op1 in dict and op2 in dict:
504 raise ValueError,'\n*** ERROR in Arguments *** '\
516 raise ValueError,'\n*** ERROR in Arguments *** '\
505 'Options '+op1+' and '+op2+' are mutually exclusive.'
517 'Options '+op1+' and '+op2+' are mutually exclusive.'
506
518
507 #-----------------------------------------------------------------------------
519 #-----------------------------------------------------------------------------
508 def get_py_filename(name):
520 def get_py_filename(name):
509 """Return a valid python filename in the current directory.
521 """Return a valid python filename in the current directory.
510
522
511 If the given name is not a file, it adds '.py' and searches again.
523 If the given name is not a file, it adds '.py' and searches again.
512 Raises IOError with an informative message if the file isn't found."""
524 Raises IOError with an informative message if the file isn't found."""
513
525
514 name = os.path.expanduser(name)
526 name = os.path.expanduser(name)
515 if not os.path.isfile(name) and not name.endswith('.py'):
527 if not os.path.isfile(name) and not name.endswith('.py'):
516 name += '.py'
528 name += '.py'
517 if os.path.isfile(name):
529 if os.path.isfile(name):
518 return name
530 return name
519 else:
531 else:
520 raise IOError,'File `%s` not found.' % name
532 raise IOError,'File `%s` not found.' % name
521
533
522 #-----------------------------------------------------------------------------
534 #-----------------------------------------------------------------------------
523 def filefind(fname,alt_dirs = None):
535 def filefind(fname,alt_dirs = None):
524 """Return the given filename either in the current directory, if it
536 """Return the given filename either in the current directory, if it
525 exists, or in a specified list of directories.
537 exists, or in a specified list of directories.
526
538
527 ~ expansion is done on all file and directory names.
539 ~ expansion is done on all file and directory names.
528
540
529 Upon an unsuccessful search, raise an IOError exception."""
541 Upon an unsuccessful search, raise an IOError exception."""
530
542
531 if alt_dirs is None:
543 if alt_dirs is None:
532 try:
544 try:
533 alt_dirs = get_home_dir()
545 alt_dirs = get_home_dir()
534 except HomeDirError:
546 except HomeDirError:
535 alt_dirs = os.getcwd()
547 alt_dirs = os.getcwd()
536 search = [fname] + list_strings(alt_dirs)
548 search = [fname] + list_strings(alt_dirs)
537 search = map(os.path.expanduser,search)
549 search = map(os.path.expanduser,search)
538 #print 'search list for',fname,'list:',search # dbg
550 #print 'search list for',fname,'list:',search # dbg
539 fname = search[0]
551 fname = search[0]
540 if os.path.isfile(fname):
552 if os.path.isfile(fname):
541 return fname
553 return fname
542 for direc in search[1:]:
554 for direc in search[1:]:
543 testname = os.path.join(direc,fname)
555 testname = os.path.join(direc,fname)
544 #print 'testname',testname # dbg
556 #print 'testname',testname # dbg
545 if os.path.isfile(testname):
557 if os.path.isfile(testname):
546 return testname
558 return testname
547 raise IOError,'File' + `fname` + \
559 raise IOError,'File' + `fname` + \
548 ' not found in current or supplied directories:' + `alt_dirs`
560 ' not found in current or supplied directories:' + `alt_dirs`
549
561
550 #----------------------------------------------------------------------------
562 #----------------------------------------------------------------------------
551 def file_read(filename):
563 def file_read(filename):
552 """Read a file and close it. Returns the file source."""
564 """Read a file and close it. Returns the file source."""
553 fobj = open(filename,'r');
565 fobj = open(filename,'r');
554 source = fobj.read();
566 source = fobj.read();
555 fobj.close()
567 fobj.close()
556 return source
568 return source
557
569
558 def file_readlines(filename):
570 def file_readlines(filename):
559 """Read a file and close it. Returns the file source using readlines()."""
571 """Read a file and close it. Returns the file source using readlines()."""
560 fobj = open(filename,'r');
572 fobj = open(filename,'r');
561 lines = fobj.readlines();
573 lines = fobj.readlines();
562 fobj.close()
574 fobj.close()
563 return lines
575 return lines
564
576
565 #----------------------------------------------------------------------------
577 #----------------------------------------------------------------------------
566 def target_outdated(target,deps):
578 def target_outdated(target,deps):
567 """Determine whether a target is out of date.
579 """Determine whether a target is out of date.
568
580
569 target_outdated(target,deps) -> 1/0
581 target_outdated(target,deps) -> 1/0
570
582
571 deps: list of filenames which MUST exist.
583 deps: list of filenames which MUST exist.
572 target: single filename which may or may not exist.
584 target: single filename which may or may not exist.
573
585
574 If target doesn't exist or is older than any file listed in deps, return
586 If target doesn't exist or is older than any file listed in deps, return
575 true, otherwise return false.
587 true, otherwise return false.
576 """
588 """
577 try:
589 try:
578 target_time = os.path.getmtime(target)
590 target_time = os.path.getmtime(target)
579 except os.error:
591 except os.error:
580 return 1
592 return 1
581 for dep in deps:
593 for dep in deps:
582 dep_time = os.path.getmtime(dep)
594 dep_time = os.path.getmtime(dep)
583 if dep_time > target_time:
595 if dep_time > target_time:
584 #print "For target",target,"Dep failed:",dep # dbg
596 #print "For target",target,"Dep failed:",dep # dbg
585 #print "times (dep,tar):",dep_time,target_time # dbg
597 #print "times (dep,tar):",dep_time,target_time # dbg
586 return 1
598 return 1
587 return 0
599 return 0
588
600
589 #-----------------------------------------------------------------------------
601 #-----------------------------------------------------------------------------
590 def target_update(target,deps,cmd):
602 def target_update(target,deps,cmd):
591 """Update a target with a given command given a list of dependencies.
603 """Update a target with a given command given a list of dependencies.
592
604
593 target_update(target,deps,cmd) -> runs cmd if target is outdated.
605 target_update(target,deps,cmd) -> runs cmd if target is outdated.
594
606
595 This is just a wrapper around target_outdated() which calls the given
607 This is just a wrapper around target_outdated() which calls the given
596 command if target is outdated."""
608 command if target is outdated."""
597
609
598 if target_outdated(target,deps):
610 if target_outdated(target,deps):
599 xsys(cmd)
611 xsys(cmd)
600
612
601 #----------------------------------------------------------------------------
613 #----------------------------------------------------------------------------
602 def unquote_ends(istr):
614 def unquote_ends(istr):
603 """Remove a single pair of quotes from the endpoints of a string."""
615 """Remove a single pair of quotes from the endpoints of a string."""
604
616
605 if not istr:
617 if not istr:
606 return istr
618 return istr
607 if (istr[0]=="'" and istr[-1]=="'") or \
619 if (istr[0]=="'" and istr[-1]=="'") or \
608 (istr[0]=='"' and istr[-1]=='"'):
620 (istr[0]=='"' and istr[-1]=='"'):
609 return istr[1:-1]
621 return istr[1:-1]
610 else:
622 else:
611 return istr
623 return istr
612
624
613 #----------------------------------------------------------------------------
625 #----------------------------------------------------------------------------
614 def process_cmdline(argv,names=[],defaults={},usage=''):
626 def process_cmdline(argv,names=[],defaults={},usage=''):
615 """ Process command-line options and arguments.
627 """ Process command-line options and arguments.
616
628
617 Arguments:
629 Arguments:
618
630
619 - argv: list of arguments, typically sys.argv.
631 - argv: list of arguments, typically sys.argv.
620
632
621 - names: list of option names. See DPyGetOpt docs for details on options
633 - names: list of option names. See DPyGetOpt docs for details on options
622 syntax.
634 syntax.
623
635
624 - defaults: dict of default values.
636 - defaults: dict of default values.
625
637
626 - usage: optional usage notice to print if a wrong argument is passed.
638 - usage: optional usage notice to print if a wrong argument is passed.
627
639
628 Return a dict of options and a list of free arguments."""
640 Return a dict of options and a list of free arguments."""
629
641
630 getopt = DPyGetOpt.DPyGetOpt()
642 getopt = DPyGetOpt.DPyGetOpt()
631 getopt.setIgnoreCase(0)
643 getopt.setIgnoreCase(0)
632 getopt.parseConfiguration(names)
644 getopt.parseConfiguration(names)
633
645
634 try:
646 try:
635 getopt.processArguments(argv)
647 getopt.processArguments(argv)
636 except DPyGetOpt.ArgumentError, exc:
648 except DPyGetOpt.ArgumentError, exc:
637 print usage
649 print usage
638 warn('"%s"' % exc,level=4)
650 warn('"%s"' % exc,level=4)
639
651
640 defaults.update(getopt.optionValues)
652 defaults.update(getopt.optionValues)
641 args = getopt.freeValues
653 args = getopt.freeValues
642
654
643 return defaults,args
655 return defaults,args
644
656
645 #----------------------------------------------------------------------------
657 #----------------------------------------------------------------------------
646 def optstr2types(ostr):
658 def optstr2types(ostr):
647 """Convert a string of option names to a dict of type mappings.
659 """Convert a string of option names to a dict of type mappings.
648
660
649 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
661 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
650
662
651 This is used to get the types of all the options in a string formatted
663 This is used to get the types of all the options in a string formatted
652 with the conventions of DPyGetOpt. The 'type' None is used for options
664 with the conventions of DPyGetOpt. The 'type' None is used for options
653 which are strings (they need no further conversion). This function's main
665 which are strings (they need no further conversion). This function's main
654 use is to get a typemap for use with read_dict().
666 use is to get a typemap for use with read_dict().
655 """
667 """
656
668
657 typeconv = {None:'',int:'',float:''}
669 typeconv = {None:'',int:'',float:''}
658 typemap = {'s':None,'i':int,'f':float}
670 typemap = {'s':None,'i':int,'f':float}
659 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
671 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
660
672
661 for w in ostr.split():
673 for w in ostr.split():
662 oname,alias,otype = opt_re.match(w).groups()
674 oname,alias,otype = opt_re.match(w).groups()
663 if otype == '' or alias == '!': # simple switches are integers too
675 if otype == '' or alias == '!': # simple switches are integers too
664 otype = 'i'
676 otype = 'i'
665 typeconv[typemap[otype]] += oname + ' '
677 typeconv[typemap[otype]] += oname + ' '
666 return typeconv
678 return typeconv
667
679
668 #----------------------------------------------------------------------------
680 #----------------------------------------------------------------------------
669 def read_dict(filename,type_conv=None,**opt):
681 def read_dict(filename,type_conv=None,**opt):
670
682
671 """Read a dictionary of key=value pairs from an input file, optionally
683 """Read a dictionary of key=value pairs from an input file, optionally
672 performing conversions on the resulting values.
684 performing conversions on the resulting values.
673
685
674 read_dict(filename,type_conv,**opt) -> dict
686 read_dict(filename,type_conv,**opt) -> dict
675
687
676 Only one value per line is accepted, the format should be
688 Only one value per line is accepted, the format should be
677 # optional comments are ignored
689 # optional comments are ignored
678 key value\n
690 key value\n
679
691
680 Args:
692 Args:
681
693
682 - type_conv: A dictionary specifying which keys need to be converted to
694 - type_conv: A dictionary specifying which keys need to be converted to
683 which types. By default all keys are read as strings. This dictionary
695 which types. By default all keys are read as strings. This dictionary
684 should have as its keys valid conversion functions for strings
696 should have as its keys valid conversion functions for strings
685 (int,long,float,complex, or your own). The value for each key
697 (int,long,float,complex, or your own). The value for each key
686 (converter) should be a whitespace separated string containing the names
698 (converter) should be a whitespace separated string containing the names
687 of all the entries in the file to be converted using that function. For
699 of all the entries in the file to be converted using that function. For
688 keys to be left alone, use None as the conversion function (only needed
700 keys to be left alone, use None as the conversion function (only needed
689 with purge=1, see below).
701 with purge=1, see below).
690
702
691 - opt: dictionary with extra options as below (default in parens)
703 - opt: dictionary with extra options as below (default in parens)
692
704
693 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
705 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
694 of the dictionary to be returned. If purge is going to be used, the
706 of the dictionary to be returned. If purge is going to be used, the
695 set of keys to be left as strings also has to be explicitly specified
707 set of keys to be left as strings also has to be explicitly specified
696 using the (non-existent) conversion function None.
708 using the (non-existent) conversion function None.
697
709
698 fs(None): field separator. This is the key/value separator to be used
710 fs(None): field separator. This is the key/value separator to be used
699 when parsing the file. The None default means any whitespace [behavior
711 when parsing the file. The None default means any whitespace [behavior
700 of string.split()].
712 of string.split()].
701
713
702 strip(0): if 1, strip string values of leading/trailinig whitespace.
714 strip(0): if 1, strip string values of leading/trailinig whitespace.
703
715
704 warn(1): warning level if requested keys are not found in file.
716 warn(1): warning level if requested keys are not found in file.
705 - 0: silently ignore.
717 - 0: silently ignore.
706 - 1: inform but proceed.
718 - 1: inform but proceed.
707 - 2: raise KeyError exception.
719 - 2: raise KeyError exception.
708
720
709 no_empty(0): if 1, remove keys with whitespace strings as a value.
721 no_empty(0): if 1, remove keys with whitespace strings as a value.
710
722
711 unique([]): list of keys (or space separated string) which can't be
723 unique([]): list of keys (or space separated string) which can't be
712 repeated. If one such key is found in the file, each new instance
724 repeated. If one such key is found in the file, each new instance
713 overwrites the previous one. For keys not listed here, the behavior is
725 overwrites the previous one. For keys not listed here, the behavior is
714 to make a list of all appearances.
726 to make a list of all appearances.
715
727
716 Example:
728 Example:
717 If the input file test.ini has:
729 If the input file test.ini has:
718 i 3
730 i 3
719 x 4.5
731 x 4.5
720 y 5.5
732 y 5.5
721 s hi ho
733 s hi ho
722 Then:
734 Then:
723
735
724 >>> type_conv={int:'i',float:'x',None:'s'}
736 >>> type_conv={int:'i',float:'x',None:'s'}
725 >>> read_dict('test.ini')
737 >>> read_dict('test.ini')
726 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
738 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
727 >>> read_dict('test.ini',type_conv)
739 >>> read_dict('test.ini',type_conv)
728 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
740 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
729 >>> read_dict('test.ini',type_conv,purge=1)
741 >>> read_dict('test.ini',type_conv,purge=1)
730 {'i': 3, 's': 'hi ho', 'x': 4.5}
742 {'i': 3, 's': 'hi ho', 'x': 4.5}
731 """
743 """
732
744
733 # starting config
745 # starting config
734 opt.setdefault('purge',0)
746 opt.setdefault('purge',0)
735 opt.setdefault('fs',None) # field sep defaults to any whitespace
747 opt.setdefault('fs',None) # field sep defaults to any whitespace
736 opt.setdefault('strip',0)
748 opt.setdefault('strip',0)
737 opt.setdefault('warn',1)
749 opt.setdefault('warn',1)
738 opt.setdefault('no_empty',0)
750 opt.setdefault('no_empty',0)
739 opt.setdefault('unique','')
751 opt.setdefault('unique','')
740 if type(opt['unique']) in StringTypes:
752 if type(opt['unique']) in StringTypes:
741 unique_keys = qw(opt['unique'])
753 unique_keys = qw(opt['unique'])
742 elif type(opt['unique']) in (types.TupleType,types.ListType):
754 elif type(opt['unique']) in (types.TupleType,types.ListType):
743 unique_keys = opt['unique']
755 unique_keys = opt['unique']
744 else:
756 else:
745 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
757 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
746
758
747 dict = {}
759 dict = {}
748 # first read in table of values as strings
760 # first read in table of values as strings
749 file = open(filename,'r')
761 file = open(filename,'r')
750 for line in file.readlines():
762 for line in file.readlines():
751 line = line.strip()
763 line = line.strip()
752 if len(line) and line[0]=='#': continue
764 if len(line) and line[0]=='#': continue
753 if len(line)>0:
765 if len(line)>0:
754 lsplit = line.split(opt['fs'],1)
766 lsplit = line.split(opt['fs'],1)
755 try:
767 try:
756 key,val = lsplit
768 key,val = lsplit
757 except ValueError:
769 except ValueError:
758 key,val = lsplit[0],''
770 key,val = lsplit[0],''
759 key = key.strip()
771 key = key.strip()
760 if opt['strip']: val = val.strip()
772 if opt['strip']: val = val.strip()
761 if val == "''" or val == '""': val = ''
773 if val == "''" or val == '""': val = ''
762 if opt['no_empty'] and (val=='' or val.isspace()):
774 if opt['no_empty'] and (val=='' or val.isspace()):
763 continue
775 continue
764 # if a key is found more than once in the file, build a list
776 # if a key is found more than once in the file, build a list
765 # unless it's in the 'unique' list. In that case, last found in file
777 # unless it's in the 'unique' list. In that case, last found in file
766 # takes precedence. User beware.
778 # takes precedence. User beware.
767 try:
779 try:
768 if dict[key] and key in unique_keys:
780 if dict[key] and key in unique_keys:
769 dict[key] = val
781 dict[key] = val
770 elif type(dict[key]) is types.ListType:
782 elif type(dict[key]) is types.ListType:
771 dict[key].append(val)
783 dict[key].append(val)
772 else:
784 else:
773 dict[key] = [dict[key],val]
785 dict[key] = [dict[key],val]
774 except KeyError:
786 except KeyError:
775 dict[key] = val
787 dict[key] = val
776 # purge if requested
788 # purge if requested
777 if opt['purge']:
789 if opt['purge']:
778 accepted_keys = qwflat(type_conv.values())
790 accepted_keys = qwflat(type_conv.values())
779 for key in dict.keys():
791 for key in dict.keys():
780 if key in accepted_keys: continue
792 if key in accepted_keys: continue
781 del(dict[key])
793 del(dict[key])
782 # now convert if requested
794 # now convert if requested
783 if type_conv==None: return dict
795 if type_conv==None: return dict
784 conversions = type_conv.keys()
796 conversions = type_conv.keys()
785 try: conversions.remove(None)
797 try: conversions.remove(None)
786 except: pass
798 except: pass
787 for convert in conversions:
799 for convert in conversions:
788 for val in qw(type_conv[convert]):
800 for val in qw(type_conv[convert]):
789 try:
801 try:
790 dict[val] = convert(dict[val])
802 dict[val] = convert(dict[val])
791 except KeyError,e:
803 except KeyError,e:
792 if opt['warn'] == 0:
804 if opt['warn'] == 0:
793 pass
805 pass
794 elif opt['warn'] == 1:
806 elif opt['warn'] == 1:
795 print >>sys.stderr, 'Warning: key',val,\
807 print >>sys.stderr, 'Warning: key',val,\
796 'not found in file',filename
808 'not found in file',filename
797 elif opt['warn'] == 2:
809 elif opt['warn'] == 2:
798 raise KeyError,e
810 raise KeyError,e
799 else:
811 else:
800 raise ValueError,'Warning level must be 0,1 or 2'
812 raise ValueError,'Warning level must be 0,1 or 2'
801
813
802 return dict
814 return dict
803
815
804 #----------------------------------------------------------------------------
816 #----------------------------------------------------------------------------
805 def flag_calls(func):
817 def flag_calls(func):
806 """Wrap a function to detect and flag when it gets called.
818 """Wrap a function to detect and flag when it gets called.
807
819
808 This is a decorator which takes a function and wraps it in a function with
820 This is a decorator which takes a function and wraps it in a function with
809 a 'called' attribute. wrapper.called is initialized to False.
821 a 'called' attribute. wrapper.called is initialized to False.
810
822
811 The wrapper.called attribute is set to False right before each call to the
823 The wrapper.called attribute is set to False right before each call to the
812 wrapped function, so if the call fails it remains False. After the call
824 wrapped function, so if the call fails it remains False. After the call
813 completes, wrapper.called is set to True and the output is returned.
825 completes, wrapper.called is set to True and the output is returned.
814
826
815 Testing for truth in wrapper.called allows you to determine if a call to
827 Testing for truth in wrapper.called allows you to determine if a call to
816 func() was attempted and succeeded."""
828 func() was attempted and succeeded."""
817
829
818 def wrapper(*args,**kw):
830 def wrapper(*args,**kw):
819 wrapper.called = False
831 wrapper.called = False
820 out = func(*args,**kw)
832 out = func(*args,**kw)
821 wrapper.called = True
833 wrapper.called = True
822 return out
834 return out
823
835
824 wrapper.called = False
836 wrapper.called = False
825 wrapper.__doc__ = func.__doc__
837 wrapper.__doc__ = func.__doc__
826 return wrapper
838 return wrapper
827
839
828 #----------------------------------------------------------------------------
840 #----------------------------------------------------------------------------
829 def dhook_wrap(func,*a,**k):
841 def dhook_wrap(func,*a,**k):
830 """Wrap a function call in a sys.displayhook controller.
842 """Wrap a function call in a sys.displayhook controller.
831
843
832 Returns a wrapper around func which calls func, with all its arguments and
844 Returns a wrapper around func which calls func, with all its arguments and
833 keywords unmodified, using the default sys.displayhook. Since IPython
845 keywords unmodified, using the default sys.displayhook. Since IPython
834 modifies sys.displayhook, it breaks the behavior of certain systems that
846 modifies sys.displayhook, it breaks the behavior of certain systems that
835 rely on the default behavior, notably doctest.
847 rely on the default behavior, notably doctest.
836 """
848 """
837
849
838 def f(*a,**k):
850 def f(*a,**k):
839
851
840 dhook_s = sys.displayhook
852 dhook_s = sys.displayhook
841 sys.displayhook = sys.__displayhook__
853 sys.displayhook = sys.__displayhook__
842 try:
854 try:
843 out = func(*a,**k)
855 out = func(*a,**k)
844 finally:
856 finally:
845 sys.displayhook = dhook_s
857 sys.displayhook = dhook_s
846
858
847 return out
859 return out
848
860
849 f.__doc__ = func.__doc__
861 f.__doc__ = func.__doc__
850 return f
862 return f
851
863
852 #----------------------------------------------------------------------------
864 #----------------------------------------------------------------------------
853 def doctest_reload():
865 def doctest_reload():
854 """Properly reload doctest to reuse it interactively.
866 """Properly reload doctest to reuse it interactively.
855
867
856 This routine:
868 This routine:
857
869
858 - reloads doctest
870 - reloads doctest
859
871
860 - resets its global 'master' attribute to None, so that multiple uses of
872 - resets its global 'master' attribute to None, so that multiple uses of
861 the module interactively don't produce cumulative reports.
873 the module interactively don't produce cumulative reports.
862
874
863 - Monkeypatches its core test runner method to protect it from IPython's
875 - Monkeypatches its core test runner method to protect it from IPython's
864 modified displayhook. Doctest expects the default displayhook behavior
876 modified displayhook. Doctest expects the default displayhook behavior
865 deep down, so our modification breaks it completely. For this reason, a
877 deep down, so our modification breaks it completely. For this reason, a
866 hard monkeypatch seems like a reasonable solution rather than asking
878 hard monkeypatch seems like a reasonable solution rather than asking
867 users to manually use a different doctest runner when under IPython."""
879 users to manually use a different doctest runner when under IPython."""
868
880
869 import doctest
881 import doctest
870 reload(doctest)
882 reload(doctest)
871 doctest.master=None
883 doctest.master=None
872
884
873 try:
885 try:
874 doctest.DocTestRunner
886 doctest.DocTestRunner
875 except AttributeError:
887 except AttributeError:
876 # This is only for python 2.3 compatibility, remove once we move to
888 # This is only for python 2.3 compatibility, remove once we move to
877 # 2.4 only.
889 # 2.4 only.
878 pass
890 pass
879 else:
891 else:
880 doctest.DocTestRunner.run = dhook_wrap(doctest.DocTestRunner.run)
892 doctest.DocTestRunner.run = dhook_wrap(doctest.DocTestRunner.run)
881
893
882 #----------------------------------------------------------------------------
894 #----------------------------------------------------------------------------
883 class HomeDirError(Error):
895 class HomeDirError(Error):
884 pass
896 pass
885
897
886 def get_home_dir():
898 def get_home_dir():
887 """Return the closest possible equivalent to a 'home' directory.
899 """Return the closest possible equivalent to a 'home' directory.
888
900
889 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
901 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
890
902
891 Currently only Posix and NT are implemented, a HomeDirError exception is
903 Currently only Posix and NT are implemented, a HomeDirError exception is
892 raised for all other OSes. """
904 raised for all other OSes. """
893
905
894 isdir = os.path.isdir
906 isdir = os.path.isdir
895 env = os.environ
907 env = os.environ
896
908
897 # first, check py2exe distribution root directory for _ipython.
909 # first, check py2exe distribution root directory for _ipython.
898 # This overrides all. Normally does not exist.
910 # This overrides all. Normally does not exist.
899
911
900 if '\\library.zip\\' in IPython.__file__.lower():
912 if '\\library.zip\\' in IPython.__file__.lower():
901 root, rest = IPython.__file__.lower().split('library.zip')
913 root, rest = IPython.__file__.lower().split('library.zip')
902 if isdir(root + '_ipython'):
914 if isdir(root + '_ipython'):
903 os.environ["IPYKITROOT"] = root.rstrip('\\')
915 os.environ["IPYKITROOT"] = root.rstrip('\\')
904 return root
916 return root
905
917
906 try:
918 try:
907 homedir = env['HOME']
919 homedir = env['HOME']
908 if not isdir(homedir):
920 if not isdir(homedir):
909 # in case a user stuck some string which does NOT resolve to a
921 # in case a user stuck some string which does NOT resolve to a
910 # valid path, it's as good as if we hadn't foud it
922 # valid path, it's as good as if we hadn't foud it
911 raise KeyError
923 raise KeyError
912 return homedir
924 return homedir
913 except KeyError:
925 except KeyError:
914 if os.name == 'posix':
926 if os.name == 'posix':
915 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
927 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
916 elif os.name == 'nt':
928 elif os.name == 'nt':
917 # For some strange reason, win9x returns 'nt' for os.name.
929 # For some strange reason, win9x returns 'nt' for os.name.
918 try:
930 try:
919 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
931 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
920 if not isdir(homedir):
932 if not isdir(homedir):
921 homedir = os.path.join(env['USERPROFILE'])
933 homedir = os.path.join(env['USERPROFILE'])
922 if not isdir(homedir):
934 if not isdir(homedir):
923 raise HomeDirError
935 raise HomeDirError
924 return homedir
936 return homedir
925 except:
937 except:
926 try:
938 try:
927 # Use the registry to get the 'My Documents' folder.
939 # Use the registry to get the 'My Documents' folder.
928 import _winreg as wreg
940 import _winreg as wreg
929 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
941 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
930 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
942 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
931 homedir = wreg.QueryValueEx(key,'Personal')[0]
943 homedir = wreg.QueryValueEx(key,'Personal')[0]
932 key.Close()
944 key.Close()
933 if not isdir(homedir):
945 if not isdir(homedir):
934 e = ('Invalid "Personal" folder registry key '
946 e = ('Invalid "Personal" folder registry key '
935 'typically "My Documents".\n'
947 'typically "My Documents".\n'
936 'Value: %s\n'
948 'Value: %s\n'
937 'This is not a valid directory on your system.' %
949 'This is not a valid directory on your system.' %
938 homedir)
950 homedir)
939 raise HomeDirError(e)
951 raise HomeDirError(e)
940 return homedir
952 return homedir
941 except HomeDirError:
953 except HomeDirError:
942 raise
954 raise
943 except:
955 except:
944 return 'C:\\'
956 return 'C:\\'
945 elif os.name == 'dos':
957 elif os.name == 'dos':
946 # Desperate, may do absurd things in classic MacOS. May work under DOS.
958 # Desperate, may do absurd things in classic MacOS. May work under DOS.
947 return 'C:\\'
959 return 'C:\\'
948 else:
960 else:
949 raise HomeDirError,'support for your operating system not implemented.'
961 raise HomeDirError,'support for your operating system not implemented.'
950
962
951 #****************************************************************************
963 #****************************************************************************
952 # strings and text
964 # strings and text
953
965
954 class LSString(str):
966 class LSString(str):
955 """String derivative with a special access attributes.
967 """String derivative with a special access attributes.
956
968
957 These are normal strings, but with the special attributes:
969 These are normal strings, but with the special attributes:
958
970
959 .l (or .list) : value as list (split on newlines).
971 .l (or .list) : value as list (split on newlines).
960 .n (or .nlstr): original value (the string itself).
972 .n (or .nlstr): original value (the string itself).
961 .s (or .spstr): value as whitespace-separated string.
973 .s (or .spstr): value as whitespace-separated string.
962 .p (or .paths): list of path objects
974 .p (or .paths): list of path objects
963
975
964 Any values which require transformations are computed only once and
976 Any values which require transformations are computed only once and
965 cached.
977 cached.
966
978
967 Such strings are very useful to efficiently interact with the shell, which
979 Such strings are very useful to efficiently interact with the shell, which
968 typically only understands whitespace-separated options for commands."""
980 typically only understands whitespace-separated options for commands."""
969
981
970 def get_list(self):
982 def get_list(self):
971 try:
983 try:
972 return self.__list
984 return self.__list
973 except AttributeError:
985 except AttributeError:
974 self.__list = self.split('\n')
986 self.__list = self.split('\n')
975 return self.__list
987 return self.__list
976
988
977 l = list = property(get_list)
989 l = list = property(get_list)
978
990
979 def get_spstr(self):
991 def get_spstr(self):
980 try:
992 try:
981 return self.__spstr
993 return self.__spstr
982 except AttributeError:
994 except AttributeError:
983 self.__spstr = self.replace('\n',' ')
995 self.__spstr = self.replace('\n',' ')
984 return self.__spstr
996 return self.__spstr
985
997
986 s = spstr = property(get_spstr)
998 s = spstr = property(get_spstr)
987
999
988 def get_nlstr(self):
1000 def get_nlstr(self):
989 return self
1001 return self
990
1002
991 n = nlstr = property(get_nlstr)
1003 n = nlstr = property(get_nlstr)
992
1004
993 def get_paths(self):
1005 def get_paths(self):
994 try:
1006 try:
995 return self.__paths
1007 return self.__paths
996 except AttributeError:
1008 except AttributeError:
997 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
1009 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
998 return self.__paths
1010 return self.__paths
999
1011
1000 p = paths = property(get_paths)
1012 p = paths = property(get_paths)
1001
1013
1002 def print_lsstring(arg):
1014 def print_lsstring(arg):
1003 """ Prettier (non-repr-like) and more informative printer for LSString """
1015 """ Prettier (non-repr-like) and more informative printer for LSString """
1004 print "LSString (.p, .n, .l, .s available). Value:"
1016 print "LSString (.p, .n, .l, .s available). Value:"
1005 print arg
1017 print arg
1006
1018
1007 print_lsstring = result_display.when_type(LSString)(print_lsstring)
1019 print_lsstring = result_display.when_type(LSString)(print_lsstring)
1008
1020
1009 #----------------------------------------------------------------------------
1021 #----------------------------------------------------------------------------
1010 class SList(list):
1022 class SList(list):
1011 """List derivative with a special access attributes.
1023 """List derivative with a special access attributes.
1012
1024
1013 These are normal lists, but with the special attributes:
1025 These are normal lists, but with the special attributes:
1014
1026
1015 .l (or .list) : value as list (the list itself).
1027 .l (or .list) : value as list (the list itself).
1016 .n (or .nlstr): value as a string, joined on newlines.
1028 .n (or .nlstr): value as a string, joined on newlines.
1017 .s (or .spstr): value as a string, joined on spaces.
1029 .s (or .spstr): value as a string, joined on spaces.
1018 .p (or .paths): list of path objects
1030 .p (or .paths): list of path objects
1019
1031
1020 Any values which require transformations are computed only once and
1032 Any values which require transformations are computed only once and
1021 cached."""
1033 cached."""
1022
1034
1023 def get_list(self):
1035 def get_list(self):
1024 return self
1036 return self
1025
1037
1026 l = list = property(get_list)
1038 l = list = property(get_list)
1027
1039
1028 def get_spstr(self):
1040 def get_spstr(self):
1029 try:
1041 try:
1030 return self.__spstr
1042 return self.__spstr
1031 except AttributeError:
1043 except AttributeError:
1032 self.__spstr = ' '.join(self)
1044 self.__spstr = ' '.join(self)
1033 return self.__spstr
1045 return self.__spstr
1034
1046
1035 s = spstr = property(get_spstr)
1047 s = spstr = property(get_spstr)
1036
1048
1037 def get_nlstr(self):
1049 def get_nlstr(self):
1038 try:
1050 try:
1039 return self.__nlstr
1051 return self.__nlstr
1040 except AttributeError:
1052 except AttributeError:
1041 self.__nlstr = '\n'.join(self)
1053 self.__nlstr = '\n'.join(self)
1042 return self.__nlstr
1054 return self.__nlstr
1043
1055
1044 n = nlstr = property(get_nlstr)
1056 n = nlstr = property(get_nlstr)
1045
1057
1046 def get_paths(self):
1058 def get_paths(self):
1047 try:
1059 try:
1048 return self.__paths
1060 return self.__paths
1049 except AttributeError:
1061 except AttributeError:
1050 self.__paths = [path(p) for p in self if os.path.exists(p)]
1062 self.__paths = [path(p) for p in self if os.path.exists(p)]
1051 return self.__paths
1063 return self.__paths
1052
1064
1053 p = paths = property(get_paths)
1065 p = paths = property(get_paths)
1054
1066
1055 def grep(self, pattern, prune = False, field = None):
1067 def grep(self, pattern, prune = False, field = None):
1056 """ Return all strings matching 'pattern' (a regex or callable)
1068 """ Return all strings matching 'pattern' (a regex or callable)
1057
1069
1058 This is case-insensitive. If prune is true, return all items
1070 This is case-insensitive. If prune is true, return all items
1059 NOT matching the pattern.
1071 NOT matching the pattern.
1060
1072
1061 If field is specified, the match must occur in the specified
1073 If field is specified, the match must occur in the specified
1062 whitespace-separated field.
1074 whitespace-separated field.
1063
1075
1064 Examples::
1076 Examples::
1065
1077
1066 a.grep( lambda x: x.startswith('C') )
1078 a.grep( lambda x: x.startswith('C') )
1067 a.grep('Cha.*log', prune=1)
1079 a.grep('Cha.*log', prune=1)
1068 a.grep('chm', field=-1)
1080 a.grep('chm', field=-1)
1069 """
1081 """
1070
1082
1071 def match_target(s):
1083 def match_target(s):
1072 if field is None:
1084 if field is None:
1073 return s
1085 return s
1074 parts = s.split()
1086 parts = s.split()
1075 try:
1087 try:
1076 tgt = parts[field]
1088 tgt = parts[field]
1077 return tgt
1089 return tgt
1078 except IndexError:
1090 except IndexError:
1079 return ""
1091 return ""
1080
1092
1081 if isinstance(pattern, basestring):
1093 if isinstance(pattern, basestring):
1082 pred = lambda x : re.search(pattern, x, re.IGNORECASE)
1094 pred = lambda x : re.search(pattern, x, re.IGNORECASE)
1083 else:
1095 else:
1084 pred = pattern
1096 pred = pattern
1085 if not prune:
1097 if not prune:
1086 return SList([el for el in self if pred(match_target(el))])
1098 return SList([el for el in self if pred(match_target(el))])
1087 else:
1099 else:
1088 return SList([el for el in self if not pred(match_target(el))])
1100 return SList([el for el in self if not pred(match_target(el))])
1089 def fields(self, *fields):
1101 def fields(self, *fields):
1090 """ Collect whitespace-separated fields from string list
1102 """ Collect whitespace-separated fields from string list
1091
1103
1092 Allows quick awk-like usage of string lists.
1104 Allows quick awk-like usage of string lists.
1093
1105
1094 Example data (in var a, created by 'a = !ls -l')::
1106 Example data (in var a, created by 'a = !ls -l')::
1095 -rwxrwxrwx 1 ville None 18 Dec 14 2006 ChangeLog
1107 -rwxrwxrwx 1 ville None 18 Dec 14 2006 ChangeLog
1096 drwxrwxrwx+ 6 ville None 0 Oct 24 18:05 IPython
1108 drwxrwxrwx+ 6 ville None 0 Oct 24 18:05 IPython
1097
1109
1098 a.fields(0) is ['-rwxrwxrwx', 'drwxrwxrwx+']
1110 a.fields(0) is ['-rwxrwxrwx', 'drwxrwxrwx+']
1099 a.fields(1,0) is ['1 -rwxrwxrwx', '6 drwxrwxrwx+']
1111 a.fields(1,0) is ['1 -rwxrwxrwx', '6 drwxrwxrwx+']
1100 (note the joining by space).
1112 (note the joining by space).
1101 a.fields(-1) is ['ChangeLog', 'IPython']
1113 a.fields(-1) is ['ChangeLog', 'IPython']
1102
1114
1103 IndexErrors are ignored.
1115 IndexErrors are ignored.
1104
1116
1105 Without args, fields() just split()'s the strings.
1117 Without args, fields() just split()'s the strings.
1106 """
1118 """
1107 if len(fields) == 0:
1119 if len(fields) == 0:
1108 return [el.split() for el in self]
1120 return [el.split() for el in self]
1109
1121
1110 res = SList()
1122 res = SList()
1111 for el in [f.split() for f in self]:
1123 for el in [f.split() for f in self]:
1112 lineparts = []
1124 lineparts = []
1113
1125
1114 for fd in fields:
1126 for fd in fields:
1115 try:
1127 try:
1116 lineparts.append(el[fd])
1128 lineparts.append(el[fd])
1117 except IndexError:
1129 except IndexError:
1118 pass
1130 pass
1119 if lineparts:
1131 if lineparts:
1120 res.append(" ".join(lineparts))
1132 res.append(" ".join(lineparts))
1121
1133
1122 return res
1134 return res
1123
1135
1124
1136
1125
1137
1126
1138
1127
1139
1128 def print_slist(arg):
1140 def print_slist(arg):
1129 """ Prettier (non-repr-like) and more informative printer for SList """
1141 """ Prettier (non-repr-like) and more informative printer for SList """
1130 print "SList (.p, .n, .l, .s, .grep(), .fields() available). Value:"
1142 print "SList (.p, .n, .l, .s, .grep(), .fields() available). Value:"
1131 nlprint(arg)
1143 nlprint(arg)
1132
1144
1133 print_slist = result_display.when_type(SList)(print_slist)
1145 print_slist = result_display.when_type(SList)(print_slist)
1134
1146
1135
1147
1136
1148
1137 #----------------------------------------------------------------------------
1149 #----------------------------------------------------------------------------
1138 def esc_quotes(strng):
1150 def esc_quotes(strng):
1139 """Return the input string with single and double quotes escaped out"""
1151 """Return the input string with single and double quotes escaped out"""
1140
1152
1141 return strng.replace('"','\\"').replace("'","\\'")
1153 return strng.replace('"','\\"').replace("'","\\'")
1142
1154
1143 #----------------------------------------------------------------------------
1155 #----------------------------------------------------------------------------
1144 def make_quoted_expr(s):
1156 def make_quoted_expr(s):
1145 """Return string s in appropriate quotes, using raw string if possible.
1157 """Return string s in appropriate quotes, using raw string if possible.
1146
1158
1147 Effectively this turns string: cd \ao\ao\
1159 Effectively this turns string: cd \ao\ao\
1148 to: r"cd \ao\ao\_"[:-1]
1160 to: r"cd \ao\ao\_"[:-1]
1149
1161
1150 Note the use of raw string and padding at the end to allow trailing backslash.
1162 Note the use of raw string and padding at the end to allow trailing backslash.
1151
1163
1152 """
1164 """
1153
1165
1154 tail = ''
1166 tail = ''
1155 tailpadding = ''
1167 tailpadding = ''
1156 raw = ''
1168 raw = ''
1157 if "\\" in s:
1169 if "\\" in s:
1158 raw = 'r'
1170 raw = 'r'
1159 if s.endswith('\\'):
1171 if s.endswith('\\'):
1160 tail = '[:-1]'
1172 tail = '[:-1]'
1161 tailpadding = '_'
1173 tailpadding = '_'
1162 if '"' not in s:
1174 if '"' not in s:
1163 quote = '"'
1175 quote = '"'
1164 elif "'" not in s:
1176 elif "'" not in s:
1165 quote = "'"
1177 quote = "'"
1166 elif '"""' not in s and not s.endswith('"'):
1178 elif '"""' not in s and not s.endswith('"'):
1167 quote = '"""'
1179 quote = '"""'
1168 elif "'''" not in s and not s.endswith("'"):
1180 elif "'''" not in s and not s.endswith("'"):
1169 quote = "'''"
1181 quote = "'''"
1170 else:
1182 else:
1171 # give up, backslash-escaped string will do
1183 # give up, backslash-escaped string will do
1172 return '"%s"' % esc_quotes(s)
1184 return '"%s"' % esc_quotes(s)
1173 res = raw + quote + s + tailpadding + quote + tail
1185 res = raw + quote + s + tailpadding + quote + tail
1174 return res
1186 return res
1175
1187
1176
1188
1177 #----------------------------------------------------------------------------
1189 #----------------------------------------------------------------------------
1178 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
1190 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
1179 """Take multiple lines of input.
1191 """Take multiple lines of input.
1180
1192
1181 A list with each line of input as a separate element is returned when a
1193 A list with each line of input as a separate element is returned when a
1182 termination string is entered (defaults to a single '.'). Input can also
1194 termination string is entered (defaults to a single '.'). Input can also
1183 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1195 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1184
1196
1185 Lines of input which end in \\ are joined into single entries (and a
1197 Lines of input which end in \\ are joined into single entries (and a
1186 secondary continuation prompt is issued as long as the user terminates
1198 secondary continuation prompt is issued as long as the user terminates
1187 lines with \\). This allows entering very long strings which are still
1199 lines with \\). This allows entering very long strings which are still
1188 meant to be treated as single entities.
1200 meant to be treated as single entities.
1189 """
1201 """
1190
1202
1191 try:
1203 try:
1192 if header:
1204 if header:
1193 header += '\n'
1205 header += '\n'
1194 lines = [raw_input(header + ps1)]
1206 lines = [raw_input(header + ps1)]
1195 except EOFError:
1207 except EOFError:
1196 return []
1208 return []
1197 terminate = [terminate_str]
1209 terminate = [terminate_str]
1198 try:
1210 try:
1199 while lines[-1:] != terminate:
1211 while lines[-1:] != terminate:
1200 new_line = raw_input(ps1)
1212 new_line = raw_input(ps1)
1201 while new_line.endswith('\\'):
1213 while new_line.endswith('\\'):
1202 new_line = new_line[:-1] + raw_input(ps2)
1214 new_line = new_line[:-1] + raw_input(ps2)
1203 lines.append(new_line)
1215 lines.append(new_line)
1204
1216
1205 return lines[:-1] # don't return the termination command
1217 return lines[:-1] # don't return the termination command
1206 except EOFError:
1218 except EOFError:
1207 print
1219 print
1208 return lines
1220 return lines
1209
1221
1210 #----------------------------------------------------------------------------
1222 #----------------------------------------------------------------------------
1211 def raw_input_ext(prompt='', ps2='... '):
1223 def raw_input_ext(prompt='', ps2='... '):
1212 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1224 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1213
1225
1214 line = raw_input(prompt)
1226 line = raw_input(prompt)
1215 while line.endswith('\\'):
1227 while line.endswith('\\'):
1216 line = line[:-1] + raw_input(ps2)
1228 line = line[:-1] + raw_input(ps2)
1217 return line
1229 return line
1218
1230
1219 #----------------------------------------------------------------------------
1231 #----------------------------------------------------------------------------
1220 def ask_yes_no(prompt,default=None):
1232 def ask_yes_no(prompt,default=None):
1221 """Asks a question and returns a boolean (y/n) answer.
1233 """Asks a question and returns a boolean (y/n) answer.
1222
1234
1223 If default is given (one of 'y','n'), it is used if the user input is
1235 If default is given (one of 'y','n'), it is used if the user input is
1224 empty. Otherwise the question is repeated until an answer is given.
1236 empty. Otherwise the question is repeated until an answer is given.
1225
1237
1226 An EOF is treated as the default answer. If there is no default, an
1238 An EOF is treated as the default answer. If there is no default, an
1227 exception is raised to prevent infinite loops.
1239 exception is raised to prevent infinite loops.
1228
1240
1229 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1241 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1230
1242
1231 answers = {'y':True,'n':False,'yes':True,'no':False}
1243 answers = {'y':True,'n':False,'yes':True,'no':False}
1232 ans = None
1244 ans = None
1233 while ans not in answers.keys():
1245 while ans not in answers.keys():
1234 try:
1246 try:
1235 ans = raw_input(prompt+' ').lower()
1247 ans = raw_input(prompt+' ').lower()
1236 if not ans: # response was an empty string
1248 if not ans: # response was an empty string
1237 ans = default
1249 ans = default
1238 except KeyboardInterrupt:
1250 except KeyboardInterrupt:
1239 pass
1251 pass
1240 except EOFError:
1252 except EOFError:
1241 if default in answers.keys():
1253 if default in answers.keys():
1242 ans = default
1254 ans = default
1243 print
1255 print
1244 else:
1256 else:
1245 raise
1257 raise
1246
1258
1247 return answers[ans]
1259 return answers[ans]
1248
1260
1249 #----------------------------------------------------------------------------
1261 #----------------------------------------------------------------------------
1250 def marquee(txt='',width=78,mark='*'):
1262 def marquee(txt='',width=78,mark='*'):
1251 """Return the input string centered in a 'marquee'."""
1263 """Return the input string centered in a 'marquee'."""
1252 if not txt:
1264 if not txt:
1253 return (mark*width)[:width]
1265 return (mark*width)[:width]
1254 nmark = (width-len(txt)-2)/len(mark)/2
1266 nmark = (width-len(txt)-2)/len(mark)/2
1255 if nmark < 0: nmark =0
1267 if nmark < 0: nmark =0
1256 marks = mark*nmark
1268 marks = mark*nmark
1257 return '%s %s %s' % (marks,txt,marks)
1269 return '%s %s %s' % (marks,txt,marks)
1258
1270
1259 #----------------------------------------------------------------------------
1271 #----------------------------------------------------------------------------
1260 class EvalDict:
1272 class EvalDict:
1261 """
1273 """
1262 Emulate a dict which evaluates its contents in the caller's frame.
1274 Emulate a dict which evaluates its contents in the caller's frame.
1263
1275
1264 Usage:
1276 Usage:
1265 >>>number = 19
1277 >>>number = 19
1266 >>>text = "python"
1278 >>>text = "python"
1267 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1279 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1268 """
1280 """
1269
1281
1270 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1282 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1271 # modified (shorter) version of:
1283 # modified (shorter) version of:
1272 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1284 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1273 # Skip Montanaro (skip@pobox.com).
1285 # Skip Montanaro (skip@pobox.com).
1274
1286
1275 def __getitem__(self, name):
1287 def __getitem__(self, name):
1276 frame = sys._getframe(1)
1288 frame = sys._getframe(1)
1277 return eval(name, frame.f_globals, frame.f_locals)
1289 return eval(name, frame.f_globals, frame.f_locals)
1278
1290
1279 EvalString = EvalDict # for backwards compatibility
1291 EvalString = EvalDict # for backwards compatibility
1280 #----------------------------------------------------------------------------
1292 #----------------------------------------------------------------------------
1281 def qw(words,flat=0,sep=None,maxsplit=-1):
1293 def qw(words,flat=0,sep=None,maxsplit=-1):
1282 """Similar to Perl's qw() operator, but with some more options.
1294 """Similar to Perl's qw() operator, but with some more options.
1283
1295
1284 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1296 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1285
1297
1286 words can also be a list itself, and with flat=1, the output will be
1298 words can also be a list itself, and with flat=1, the output will be
1287 recursively flattened. Examples:
1299 recursively flattened. Examples:
1288
1300
1289 >>> qw('1 2')
1301 >>> qw('1 2')
1290 ['1', '2']
1302 ['1', '2']
1291 >>> qw(['a b','1 2',['m n','p q']])
1303 >>> qw(['a b','1 2',['m n','p q']])
1292 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1304 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1293 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1305 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1294 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1306 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1295
1307
1296 if type(words) in StringTypes:
1308 if type(words) in StringTypes:
1297 return [word.strip() for word in words.split(sep,maxsplit)
1309 return [word.strip() for word in words.split(sep,maxsplit)
1298 if word and not word.isspace() ]
1310 if word and not word.isspace() ]
1299 if flat:
1311 if flat:
1300 return flatten(map(qw,words,[1]*len(words)))
1312 return flatten(map(qw,words,[1]*len(words)))
1301 return map(qw,words)
1313 return map(qw,words)
1302
1314
1303 #----------------------------------------------------------------------------
1315 #----------------------------------------------------------------------------
1304 def qwflat(words,sep=None,maxsplit=-1):
1316 def qwflat(words,sep=None,maxsplit=-1):
1305 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1317 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1306 return qw(words,1,sep,maxsplit)
1318 return qw(words,1,sep,maxsplit)
1307
1319
1308 #----------------------------------------------------------------------------
1320 #----------------------------------------------------------------------------
1309 def qw_lol(indata):
1321 def qw_lol(indata):
1310 """qw_lol('a b') -> [['a','b']],
1322 """qw_lol('a b') -> [['a','b']],
1311 otherwise it's just a call to qw().
1323 otherwise it's just a call to qw().
1312
1324
1313 We need this to make sure the modules_some keys *always* end up as a
1325 We need this to make sure the modules_some keys *always* end up as a
1314 list of lists."""
1326 list of lists."""
1315
1327
1316 if type(indata) in StringTypes:
1328 if type(indata) in StringTypes:
1317 return [qw(indata)]
1329 return [qw(indata)]
1318 else:
1330 else:
1319 return qw(indata)
1331 return qw(indata)
1320
1332
1321 #-----------------------------------------------------------------------------
1333 #-----------------------------------------------------------------------------
1322 def list_strings(arg):
1334 def list_strings(arg):
1323 """Always return a list of strings, given a string or list of strings
1335 """Always return a list of strings, given a string or list of strings
1324 as input."""
1336 as input."""
1325
1337
1326 if type(arg) in StringTypes: return [arg]
1338 if type(arg) in StringTypes: return [arg]
1327 else: return arg
1339 else: return arg
1328
1340
1329 #----------------------------------------------------------------------------
1341 #----------------------------------------------------------------------------
1330 def grep(pat,list,case=1):
1342 def grep(pat,list,case=1):
1331 """Simple minded grep-like function.
1343 """Simple minded grep-like function.
1332 grep(pat,list) returns occurrences of pat in list, None on failure.
1344 grep(pat,list) returns occurrences of pat in list, None on failure.
1333
1345
1334 It only does simple string matching, with no support for regexps. Use the
1346 It only does simple string matching, with no support for regexps. Use the
1335 option case=0 for case-insensitive matching."""
1347 option case=0 for case-insensitive matching."""
1336
1348
1337 # This is pretty crude. At least it should implement copying only references
1349 # This is pretty crude. At least it should implement copying only references
1338 # to the original data in case it's big. Now it copies the data for output.
1350 # to the original data in case it's big. Now it copies the data for output.
1339 out=[]
1351 out=[]
1340 if case:
1352 if case:
1341 for term in list:
1353 for term in list:
1342 if term.find(pat)>-1: out.append(term)
1354 if term.find(pat)>-1: out.append(term)
1343 else:
1355 else:
1344 lpat=pat.lower()
1356 lpat=pat.lower()
1345 for term in list:
1357 for term in list:
1346 if term.lower().find(lpat)>-1: out.append(term)
1358 if term.lower().find(lpat)>-1: out.append(term)
1347
1359
1348 if len(out): return out
1360 if len(out): return out
1349 else: return None
1361 else: return None
1350
1362
1351 #----------------------------------------------------------------------------
1363 #----------------------------------------------------------------------------
1352 def dgrep(pat,*opts):
1364 def dgrep(pat,*opts):
1353 """Return grep() on dir()+dir(__builtins__).
1365 """Return grep() on dir()+dir(__builtins__).
1354
1366
1355 A very common use of grep() when working interactively."""
1367 A very common use of grep() when working interactively."""
1356
1368
1357 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1369 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1358
1370
1359 #----------------------------------------------------------------------------
1371 #----------------------------------------------------------------------------
1360 def idgrep(pat):
1372 def idgrep(pat):
1361 """Case-insensitive dgrep()"""
1373 """Case-insensitive dgrep()"""
1362
1374
1363 return dgrep(pat,0)
1375 return dgrep(pat,0)
1364
1376
1365 #----------------------------------------------------------------------------
1377 #----------------------------------------------------------------------------
1366 def igrep(pat,list):
1378 def igrep(pat,list):
1367 """Synonym for case-insensitive grep."""
1379 """Synonym for case-insensitive grep."""
1368
1380
1369 return grep(pat,list,case=0)
1381 return grep(pat,list,case=0)
1370
1382
1371 #----------------------------------------------------------------------------
1383 #----------------------------------------------------------------------------
1372 def indent(str,nspaces=4,ntabs=0):
1384 def indent(str,nspaces=4,ntabs=0):
1373 """Indent a string a given number of spaces or tabstops.
1385 """Indent a string a given number of spaces or tabstops.
1374
1386
1375 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1387 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1376 """
1388 """
1377 if str is None:
1389 if str is None:
1378 return
1390 return
1379 ind = '\t'*ntabs+' '*nspaces
1391 ind = '\t'*ntabs+' '*nspaces
1380 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1392 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1381 if outstr.endswith(os.linesep+ind):
1393 if outstr.endswith(os.linesep+ind):
1382 return outstr[:-len(ind)]
1394 return outstr[:-len(ind)]
1383 else:
1395 else:
1384 return outstr
1396 return outstr
1385
1397
1386 #-----------------------------------------------------------------------------
1398 #-----------------------------------------------------------------------------
1387 def native_line_ends(filename,backup=1):
1399 def native_line_ends(filename,backup=1):
1388 """Convert (in-place) a file to line-ends native to the current OS.
1400 """Convert (in-place) a file to line-ends native to the current OS.
1389
1401
1390 If the optional backup argument is given as false, no backup of the
1402 If the optional backup argument is given as false, no backup of the
1391 original file is left. """
1403 original file is left. """
1392
1404
1393 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1405 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1394
1406
1395 bak_filename = filename + backup_suffixes[os.name]
1407 bak_filename = filename + backup_suffixes[os.name]
1396
1408
1397 original = open(filename).read()
1409 original = open(filename).read()
1398 shutil.copy2(filename,bak_filename)
1410 shutil.copy2(filename,bak_filename)
1399 try:
1411 try:
1400 new = open(filename,'wb')
1412 new = open(filename,'wb')
1401 new.write(os.linesep.join(original.splitlines()))
1413 new.write(os.linesep.join(original.splitlines()))
1402 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1414 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1403 new.close()
1415 new.close()
1404 except:
1416 except:
1405 os.rename(bak_filename,filename)
1417 os.rename(bak_filename,filename)
1406 if not backup:
1418 if not backup:
1407 try:
1419 try:
1408 os.remove(bak_filename)
1420 os.remove(bak_filename)
1409 except:
1421 except:
1410 pass
1422 pass
1411
1423
1412 #----------------------------------------------------------------------------
1424 #----------------------------------------------------------------------------
1413 def get_pager_cmd(pager_cmd = None):
1425 def get_pager_cmd(pager_cmd = None):
1414 """Return a pager command.
1426 """Return a pager command.
1415
1427
1416 Makes some attempts at finding an OS-correct one."""
1428 Makes some attempts at finding an OS-correct one."""
1417
1429
1418 if os.name == 'posix':
1430 if os.name == 'posix':
1419 default_pager_cmd = 'less -r' # -r for color control sequences
1431 default_pager_cmd = 'less -r' # -r for color control sequences
1420 elif os.name in ['nt','dos']:
1432 elif os.name in ['nt','dos']:
1421 default_pager_cmd = 'type'
1433 default_pager_cmd = 'type'
1422
1434
1423 if pager_cmd is None:
1435 if pager_cmd is None:
1424 try:
1436 try:
1425 pager_cmd = os.environ['PAGER']
1437 pager_cmd = os.environ['PAGER']
1426 except:
1438 except:
1427 pager_cmd = default_pager_cmd
1439 pager_cmd = default_pager_cmd
1428 return pager_cmd
1440 return pager_cmd
1429
1441
1430 #-----------------------------------------------------------------------------
1442 #-----------------------------------------------------------------------------
1431 def get_pager_start(pager,start):
1443 def get_pager_start(pager,start):
1432 """Return the string for paging files with an offset.
1444 """Return the string for paging files with an offset.
1433
1445
1434 This is the '+N' argument which less and more (under Unix) accept.
1446 This is the '+N' argument which less and more (under Unix) accept.
1435 """
1447 """
1436
1448
1437 if pager in ['less','more']:
1449 if pager in ['less','more']:
1438 if start:
1450 if start:
1439 start_string = '+' + str(start)
1451 start_string = '+' + str(start)
1440 else:
1452 else:
1441 start_string = ''
1453 start_string = ''
1442 else:
1454 else:
1443 start_string = ''
1455 start_string = ''
1444 return start_string
1456 return start_string
1445
1457
1446 #----------------------------------------------------------------------------
1458 #----------------------------------------------------------------------------
1447 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1459 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1448 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1460 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1449 import msvcrt
1461 import msvcrt
1450 def page_more():
1462 def page_more():
1451 """ Smart pausing between pages
1463 """ Smart pausing between pages
1452
1464
1453 @return: True if need print more lines, False if quit
1465 @return: True if need print more lines, False if quit
1454 """
1466 """
1455 Term.cout.write('---Return to continue, q to quit--- ')
1467 Term.cout.write('---Return to continue, q to quit--- ')
1456 ans = msvcrt.getch()
1468 ans = msvcrt.getch()
1457 if ans in ("q", "Q"):
1469 if ans in ("q", "Q"):
1458 result = False
1470 result = False
1459 else:
1471 else:
1460 result = True
1472 result = True
1461 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1473 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1462 return result
1474 return result
1463 else:
1475 else:
1464 def page_more():
1476 def page_more():
1465 ans = raw_input('---Return to continue, q to quit--- ')
1477 ans = raw_input('---Return to continue, q to quit--- ')
1466 if ans.lower().startswith('q'):
1478 if ans.lower().startswith('q'):
1467 return False
1479 return False
1468 else:
1480 else:
1469 return True
1481 return True
1470
1482
1471 esc_re = re.compile(r"(\x1b[^m]+m)")
1483 esc_re = re.compile(r"(\x1b[^m]+m)")
1472
1484
1473 def page_dumb(strng,start=0,screen_lines=25):
1485 def page_dumb(strng,start=0,screen_lines=25):
1474 """Very dumb 'pager' in Python, for when nothing else works.
1486 """Very dumb 'pager' in Python, for when nothing else works.
1475
1487
1476 Only moves forward, same interface as page(), except for pager_cmd and
1488 Only moves forward, same interface as page(), except for pager_cmd and
1477 mode."""
1489 mode."""
1478
1490
1479 out_ln = strng.splitlines()[start:]
1491 out_ln = strng.splitlines()[start:]
1480 screens = chop(out_ln,screen_lines-1)
1492 screens = chop(out_ln,screen_lines-1)
1481 if len(screens) == 1:
1493 if len(screens) == 1:
1482 print >>Term.cout, os.linesep.join(screens[0])
1494 print >>Term.cout, os.linesep.join(screens[0])
1483 else:
1495 else:
1484 last_escape = ""
1496 last_escape = ""
1485 for scr in screens[0:-1]:
1497 for scr in screens[0:-1]:
1486 hunk = os.linesep.join(scr)
1498 hunk = os.linesep.join(scr)
1487 print >>Term.cout, last_escape + hunk
1499 print >>Term.cout, last_escape + hunk
1488 if not page_more():
1500 if not page_more():
1489 return
1501 return
1490 esc_list = esc_re.findall(hunk)
1502 esc_list = esc_re.findall(hunk)
1491 if len(esc_list) > 0:
1503 if len(esc_list) > 0:
1492 last_escape = esc_list[-1]
1504 last_escape = esc_list[-1]
1493 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1505 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1494
1506
1495 #----------------------------------------------------------------------------
1507 #----------------------------------------------------------------------------
1496 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1508 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1497 """Print a string, piping through a pager after a certain length.
1509 """Print a string, piping through a pager after a certain length.
1498
1510
1499 The screen_lines parameter specifies the number of *usable* lines of your
1511 The screen_lines parameter specifies the number of *usable* lines of your
1500 terminal screen (total lines minus lines you need to reserve to show other
1512 terminal screen (total lines minus lines you need to reserve to show other
1501 information).
1513 information).
1502
1514
1503 If you set screen_lines to a number <=0, page() will try to auto-determine
1515 If you set screen_lines to a number <=0, page() will try to auto-determine
1504 your screen size and will only use up to (screen_size+screen_lines) for
1516 your screen size and will only use up to (screen_size+screen_lines) for
1505 printing, paging after that. That is, if you want auto-detection but need
1517 printing, paging after that. That is, if you want auto-detection but need
1506 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1518 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1507 auto-detection without any lines reserved simply use screen_lines = 0.
1519 auto-detection without any lines reserved simply use screen_lines = 0.
1508
1520
1509 If a string won't fit in the allowed lines, it is sent through the
1521 If a string won't fit in the allowed lines, it is sent through the
1510 specified pager command. If none given, look for PAGER in the environment,
1522 specified pager command. If none given, look for PAGER in the environment,
1511 and ultimately default to less.
1523 and ultimately default to less.
1512
1524
1513 If no system pager works, the string is sent through a 'dumb pager'
1525 If no system pager works, the string is sent through a 'dumb pager'
1514 written in python, very simplistic.
1526 written in python, very simplistic.
1515 """
1527 """
1516
1528
1517
1529
1518 # first, try the hook
1530 # first, try the hook
1519 ip = IPython.ipapi.get()
1531 ip = IPython.ipapi.get()
1520 if ip:
1532 if ip:
1521 try:
1533 try:
1522 ip.IP.hooks.show_in_pager(strng)
1534 ip.IP.hooks.show_in_pager(strng)
1523 return
1535 return
1524 except IPython.ipapi.TryNext:
1536 except IPython.ipapi.TryNext:
1525 pass
1537 pass
1526
1538
1527 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1539 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1528 TERM = os.environ.get('TERM','dumb')
1540 TERM = os.environ.get('TERM','dumb')
1529 if TERM in ['dumb','emacs'] and os.name != 'nt':
1541 if TERM in ['dumb','emacs'] and os.name != 'nt':
1530 print strng
1542 print strng
1531 return
1543 return
1532 # chop off the topmost part of the string we don't want to see
1544 # chop off the topmost part of the string we don't want to see
1533 str_lines = strng.split(os.linesep)[start:]
1545 str_lines = strng.split(os.linesep)[start:]
1534 str_toprint = os.linesep.join(str_lines)
1546 str_toprint = os.linesep.join(str_lines)
1535 num_newlines = len(str_lines)
1547 num_newlines = len(str_lines)
1536 len_str = len(str_toprint)
1548 len_str = len(str_toprint)
1537
1549
1538 # Dumb heuristics to guesstimate number of on-screen lines the string
1550 # Dumb heuristics to guesstimate number of on-screen lines the string
1539 # takes. Very basic, but good enough for docstrings in reasonable
1551 # takes. Very basic, but good enough for docstrings in reasonable
1540 # terminals. If someone later feels like refining it, it's not hard.
1552 # terminals. If someone later feels like refining it, it's not hard.
1541 numlines = max(num_newlines,int(len_str/80)+1)
1553 numlines = max(num_newlines,int(len_str/80)+1)
1542
1554
1543 if os.name == "nt":
1555 if os.name == "nt":
1544 screen_lines_def = get_console_size(defaulty=25)[1]
1556 screen_lines_def = get_console_size(defaulty=25)[1]
1545 else:
1557 else:
1546 screen_lines_def = 25 # default value if we can't auto-determine
1558 screen_lines_def = 25 # default value if we can't auto-determine
1547
1559
1548 # auto-determine screen size
1560 # auto-determine screen size
1549 if screen_lines <= 0:
1561 if screen_lines <= 0:
1550 if TERM=='xterm':
1562 if TERM=='xterm':
1551 try:
1563 use_curses = USE_CURSES
1552 import curses
1553 if hasattr(curses,'initscr'):
1554 use_curses = 1
1555 else:
1556 use_curses = 0
1557 except ImportError:
1558 use_curses = 0
1559 else:
1564 else:
1560 # curses causes problems on many terminals other than xterm.
1565 # curses causes problems on many terminals other than xterm.
1561 use_curses = 0
1566 use_curses = False
1562 if use_curses:
1567 if use_curses:
1563 scr = curses.initscr()
1568 # There is a bug in curses, where *sometimes* it fails to properly
1564 screen_lines_real,screen_cols = scr.getmaxyx()
1569 # initialize, and then after the endwin() call is made, the
1565 curses.endwin()
1570 # terminal is left in an unusable state. Rather than trying to
1566 screen_lines += screen_lines_real
1571 # check everytime for this (by requesting and comparing termios
1567 #print '***Screen size:',screen_lines_real,'lines x',\
1572 # flags each time), we just save the initial terminal state and
1568 #screen_cols,'columns.' # dbg
1573 # unconditionally reset it every time. It's cheaper than making
1574 # the checks.
1575 term_flags = termios.tcgetattr(sys.stdout)
1576 scr = curses.initscr()
1577 screen_lines_real,screen_cols = scr.getmaxyx()
1578 curses.endwin()
1579 # Restore terminal state in case endwin() didn't.
1580 termios.tcsetattr(sys.stdout,termios.TCSANOW,term_flags)
1581 # Now we have what we needed: the screen size in rows/columns
1582 screen_lines += screen_lines_real
1583 #print '***Screen size:',screen_lines_real,'lines x',\
1584 #screen_cols,'columns.' # dbg
1569 else:
1585 else:
1570 screen_lines += screen_lines_def
1586 screen_lines += screen_lines_def
1571
1587
1572 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1588 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1573 if numlines <= screen_lines :
1589 if numlines <= screen_lines :
1574 #print '*** normal print' # dbg
1590 #print '*** normal print' # dbg
1575 print >>Term.cout, str_toprint
1591 print >>Term.cout, str_toprint
1576 else:
1592 else:
1577 # Try to open pager and default to internal one if that fails.
1593 # Try to open pager and default to internal one if that fails.
1578 # All failure modes are tagged as 'retval=1', to match the return
1594 # All failure modes are tagged as 'retval=1', to match the return
1579 # value of a failed system command. If any intermediate attempt
1595 # value of a failed system command. If any intermediate attempt
1580 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1596 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1581 pager_cmd = get_pager_cmd(pager_cmd)
1597 pager_cmd = get_pager_cmd(pager_cmd)
1582 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1598 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1583 if os.name == 'nt':
1599 if os.name == 'nt':
1584 if pager_cmd.startswith('type'):
1600 if pager_cmd.startswith('type'):
1585 # The default WinXP 'type' command is failing on complex strings.
1601 # The default WinXP 'type' command is failing on complex strings.
1586 retval = 1
1602 retval = 1
1587 else:
1603 else:
1588 tmpname = tempfile.mktemp('.txt')
1604 tmpname = tempfile.mktemp('.txt')
1589 tmpfile = file(tmpname,'wt')
1605 tmpfile = file(tmpname,'wt')
1590 tmpfile.write(strng)
1606 tmpfile.write(strng)
1591 tmpfile.close()
1607 tmpfile.close()
1592 cmd = "%s < %s" % (pager_cmd,tmpname)
1608 cmd = "%s < %s" % (pager_cmd,tmpname)
1593 if os.system(cmd):
1609 if os.system(cmd):
1594 retval = 1
1610 retval = 1
1595 else:
1611 else:
1596 retval = None
1612 retval = None
1597 os.remove(tmpname)
1613 os.remove(tmpname)
1598 else:
1614 else:
1599 try:
1615 try:
1600 retval = None
1616 retval = None
1601 # if I use popen4, things hang. No idea why.
1617 # if I use popen4, things hang. No idea why.
1602 #pager,shell_out = os.popen4(pager_cmd)
1618 #pager,shell_out = os.popen4(pager_cmd)
1603 pager = os.popen(pager_cmd,'w')
1619 pager = os.popen(pager_cmd,'w')
1604 pager.write(strng)
1620 pager.write(strng)
1605 pager.close()
1621 pager.close()
1606 retval = pager.close() # success returns None
1622 retval = pager.close() # success returns None
1607 except IOError,msg: # broken pipe when user quits
1623 except IOError,msg: # broken pipe when user quits
1608 if msg.args == (32,'Broken pipe'):
1624 if msg.args == (32,'Broken pipe'):
1609 retval = None
1625 retval = None
1610 else:
1626 else:
1611 retval = 1
1627 retval = 1
1612 except OSError:
1628 except OSError:
1613 # Other strange problems, sometimes seen in Win2k/cygwin
1629 # Other strange problems, sometimes seen in Win2k/cygwin
1614 retval = 1
1630 retval = 1
1615 if retval is not None:
1631 if retval is not None:
1616 page_dumb(strng,screen_lines=screen_lines)
1632 page_dumb(strng,screen_lines=screen_lines)
1617
1633
1618 #----------------------------------------------------------------------------
1634 #----------------------------------------------------------------------------
1619 def page_file(fname,start = 0, pager_cmd = None):
1635 def page_file(fname,start = 0, pager_cmd = None):
1620 """Page a file, using an optional pager command and starting line.
1636 """Page a file, using an optional pager command and starting line.
1621 """
1637 """
1622
1638
1623 pager_cmd = get_pager_cmd(pager_cmd)
1639 pager_cmd = get_pager_cmd(pager_cmd)
1624 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1640 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1625
1641
1626 try:
1642 try:
1627 if os.environ['TERM'] in ['emacs','dumb']:
1643 if os.environ['TERM'] in ['emacs','dumb']:
1628 raise EnvironmentError
1644 raise EnvironmentError
1629 xsys(pager_cmd + ' ' + fname)
1645 xsys(pager_cmd + ' ' + fname)
1630 except:
1646 except:
1631 try:
1647 try:
1632 if start > 0:
1648 if start > 0:
1633 start -= 1
1649 start -= 1
1634 page(open(fname).read(),start)
1650 page(open(fname).read(),start)
1635 except:
1651 except:
1636 print 'Unable to show file',`fname`
1652 print 'Unable to show file',`fname`
1637
1653
1638
1654
1639 #----------------------------------------------------------------------------
1655 #----------------------------------------------------------------------------
1640 def snip_print(str,width = 75,print_full = 0,header = ''):
1656 def snip_print(str,width = 75,print_full = 0,header = ''):
1641 """Print a string snipping the midsection to fit in width.
1657 """Print a string snipping the midsection to fit in width.
1642
1658
1643 print_full: mode control:
1659 print_full: mode control:
1644 - 0: only snip long strings
1660 - 0: only snip long strings
1645 - 1: send to page() directly.
1661 - 1: send to page() directly.
1646 - 2: snip long strings and ask for full length viewing with page()
1662 - 2: snip long strings and ask for full length viewing with page()
1647 Return 1 if snipping was necessary, 0 otherwise."""
1663 Return 1 if snipping was necessary, 0 otherwise."""
1648
1664
1649 if print_full == 1:
1665 if print_full == 1:
1650 page(header+str)
1666 page(header+str)
1651 return 0
1667 return 0
1652
1668
1653 print header,
1669 print header,
1654 if len(str) < width:
1670 if len(str) < width:
1655 print str
1671 print str
1656 snip = 0
1672 snip = 0
1657 else:
1673 else:
1658 whalf = int((width -5)/2)
1674 whalf = int((width -5)/2)
1659 print str[:whalf] + ' <...> ' + str[-whalf:]
1675 print str[:whalf] + ' <...> ' + str[-whalf:]
1660 snip = 1
1676 snip = 1
1661 if snip and print_full == 2:
1677 if snip and print_full == 2:
1662 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1678 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1663 page(str)
1679 page(str)
1664 return snip
1680 return snip
1665
1681
1666 #****************************************************************************
1682 #****************************************************************************
1667 # lists, dicts and structures
1683 # lists, dicts and structures
1668
1684
1669 def belong(candidates,checklist):
1685 def belong(candidates,checklist):
1670 """Check whether a list of items appear in a given list of options.
1686 """Check whether a list of items appear in a given list of options.
1671
1687
1672 Returns a list of 1 and 0, one for each candidate given."""
1688 Returns a list of 1 and 0, one for each candidate given."""
1673
1689
1674 return [x in checklist for x in candidates]
1690 return [x in checklist for x in candidates]
1675
1691
1676 #----------------------------------------------------------------------------
1692 #----------------------------------------------------------------------------
1677 def uniq_stable(elems):
1693 def uniq_stable(elems):
1678 """uniq_stable(elems) -> list
1694 """uniq_stable(elems) -> list
1679
1695
1680 Return from an iterable, a list of all the unique elements in the input,
1696 Return from an iterable, a list of all the unique elements in the input,
1681 but maintaining the order in which they first appear.
1697 but maintaining the order in which they first appear.
1682
1698
1683 A naive solution to this problem which just makes a dictionary with the
1699 A naive solution to this problem which just makes a dictionary with the
1684 elements as keys fails to respect the stability condition, since
1700 elements as keys fails to respect the stability condition, since
1685 dictionaries are unsorted by nature.
1701 dictionaries are unsorted by nature.
1686
1702
1687 Note: All elements in the input must be valid dictionary keys for this
1703 Note: All elements in the input must be valid dictionary keys for this
1688 routine to work, as it internally uses a dictionary for efficiency
1704 routine to work, as it internally uses a dictionary for efficiency
1689 reasons."""
1705 reasons."""
1690
1706
1691 unique = []
1707 unique = []
1692 unique_dict = {}
1708 unique_dict = {}
1693 for nn in elems:
1709 for nn in elems:
1694 if nn not in unique_dict:
1710 if nn not in unique_dict:
1695 unique.append(nn)
1711 unique.append(nn)
1696 unique_dict[nn] = None
1712 unique_dict[nn] = None
1697 return unique
1713 return unique
1698
1714
1699 #----------------------------------------------------------------------------
1715 #----------------------------------------------------------------------------
1700 class NLprinter:
1716 class NLprinter:
1701 """Print an arbitrarily nested list, indicating index numbers.
1717 """Print an arbitrarily nested list, indicating index numbers.
1702
1718
1703 An instance of this class called nlprint is available and callable as a
1719 An instance of this class called nlprint is available and callable as a
1704 function.
1720 function.
1705
1721
1706 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1722 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1707 and using 'sep' to separate the index from the value. """
1723 and using 'sep' to separate the index from the value. """
1708
1724
1709 def __init__(self):
1725 def __init__(self):
1710 self.depth = 0
1726 self.depth = 0
1711
1727
1712 def __call__(self,lst,pos='',**kw):
1728 def __call__(self,lst,pos='',**kw):
1713 """Prints the nested list numbering levels."""
1729 """Prints the nested list numbering levels."""
1714 kw.setdefault('indent',' ')
1730 kw.setdefault('indent',' ')
1715 kw.setdefault('sep',': ')
1731 kw.setdefault('sep',': ')
1716 kw.setdefault('start',0)
1732 kw.setdefault('start',0)
1717 kw.setdefault('stop',len(lst))
1733 kw.setdefault('stop',len(lst))
1718 # we need to remove start and stop from kw so they don't propagate
1734 # we need to remove start and stop from kw so they don't propagate
1719 # into a recursive call for a nested list.
1735 # into a recursive call for a nested list.
1720 start = kw['start']; del kw['start']
1736 start = kw['start']; del kw['start']
1721 stop = kw['stop']; del kw['stop']
1737 stop = kw['stop']; del kw['stop']
1722 if self.depth == 0 and 'header' in kw.keys():
1738 if self.depth == 0 and 'header' in kw.keys():
1723 print kw['header']
1739 print kw['header']
1724
1740
1725 for idx in range(start,stop):
1741 for idx in range(start,stop):
1726 elem = lst[idx]
1742 elem = lst[idx]
1727 if type(elem)==type([]):
1743 if type(elem)==type([]):
1728 self.depth += 1
1744 self.depth += 1
1729 self.__call__(elem,itpl('$pos$idx,'),**kw)
1745 self.__call__(elem,itpl('$pos$idx,'),**kw)
1730 self.depth -= 1
1746 self.depth -= 1
1731 else:
1747 else:
1732 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1748 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1733
1749
1734 nlprint = NLprinter()
1750 nlprint = NLprinter()
1735 #----------------------------------------------------------------------------
1751 #----------------------------------------------------------------------------
1736 def all_belong(candidates,checklist):
1752 def all_belong(candidates,checklist):
1737 """Check whether a list of items ALL appear in a given list of options.
1753 """Check whether a list of items ALL appear in a given list of options.
1738
1754
1739 Returns a single 1 or 0 value."""
1755 Returns a single 1 or 0 value."""
1740
1756
1741 return 1-(0 in [x in checklist for x in candidates])
1757 return 1-(0 in [x in checklist for x in candidates])
1742
1758
1743 #----------------------------------------------------------------------------
1759 #----------------------------------------------------------------------------
1744 def sort_compare(lst1,lst2,inplace = 1):
1760 def sort_compare(lst1,lst2,inplace = 1):
1745 """Sort and compare two lists.
1761 """Sort and compare two lists.
1746
1762
1747 By default it does it in place, thus modifying the lists. Use inplace = 0
1763 By default it does it in place, thus modifying the lists. Use inplace = 0
1748 to avoid that (at the cost of temporary copy creation)."""
1764 to avoid that (at the cost of temporary copy creation)."""
1749 if not inplace:
1765 if not inplace:
1750 lst1 = lst1[:]
1766 lst1 = lst1[:]
1751 lst2 = lst2[:]
1767 lst2 = lst2[:]
1752 lst1.sort(); lst2.sort()
1768 lst1.sort(); lst2.sort()
1753 return lst1 == lst2
1769 return lst1 == lst2
1754
1770
1755 #----------------------------------------------------------------------------
1771 #----------------------------------------------------------------------------
1756 def mkdict(**kwargs):
1772 def mkdict(**kwargs):
1757 """Return a dict from a keyword list.
1773 """Return a dict from a keyword list.
1758
1774
1759 It's just syntactic sugar for making ditcionary creation more convenient:
1775 It's just syntactic sugar for making ditcionary creation more convenient:
1760 # the standard way
1776 # the standard way
1761 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1777 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1762 # a cleaner way
1778 # a cleaner way
1763 >>>data = dict(red=1, green=2, blue=3)
1779 >>>data = dict(red=1, green=2, blue=3)
1764
1780
1765 If you need more than this, look at the Struct() class."""
1781 If you need more than this, look at the Struct() class."""
1766
1782
1767 return kwargs
1783 return kwargs
1768
1784
1769 #----------------------------------------------------------------------------
1785 #----------------------------------------------------------------------------
1770 def list2dict(lst):
1786 def list2dict(lst):
1771 """Takes a list of (key,value) pairs and turns it into a dict."""
1787 """Takes a list of (key,value) pairs and turns it into a dict."""
1772
1788
1773 dic = {}
1789 dic = {}
1774 for k,v in lst: dic[k] = v
1790 for k,v in lst: dic[k] = v
1775 return dic
1791 return dic
1776
1792
1777 #----------------------------------------------------------------------------
1793 #----------------------------------------------------------------------------
1778 def list2dict2(lst,default=''):
1794 def list2dict2(lst,default=''):
1779 """Takes a list and turns it into a dict.
1795 """Takes a list and turns it into a dict.
1780 Much slower than list2dict, but more versatile. This version can take
1796 Much slower than list2dict, but more versatile. This version can take
1781 lists with sublists of arbitrary length (including sclars)."""
1797 lists with sublists of arbitrary length (including sclars)."""
1782
1798
1783 dic = {}
1799 dic = {}
1784 for elem in lst:
1800 for elem in lst:
1785 if type(elem) in (types.ListType,types.TupleType):
1801 if type(elem) in (types.ListType,types.TupleType):
1786 size = len(elem)
1802 size = len(elem)
1787 if size == 0:
1803 if size == 0:
1788 pass
1804 pass
1789 elif size == 1:
1805 elif size == 1:
1790 dic[elem] = default
1806 dic[elem] = default
1791 else:
1807 else:
1792 k,v = elem[0], elem[1:]
1808 k,v = elem[0], elem[1:]
1793 if len(v) == 1: v = v[0]
1809 if len(v) == 1: v = v[0]
1794 dic[k] = v
1810 dic[k] = v
1795 else:
1811 else:
1796 dic[elem] = default
1812 dic[elem] = default
1797 return dic
1813 return dic
1798
1814
1799 #----------------------------------------------------------------------------
1815 #----------------------------------------------------------------------------
1800 def flatten(seq):
1816 def flatten(seq):
1801 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1817 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1802
1818
1803 return [x for subseq in seq for x in subseq]
1819 return [x for subseq in seq for x in subseq]
1804
1820
1805 #----------------------------------------------------------------------------
1821 #----------------------------------------------------------------------------
1806 def get_slice(seq,start=0,stop=None,step=1):
1822 def get_slice(seq,start=0,stop=None,step=1):
1807 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1823 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1808 if stop == None:
1824 if stop == None:
1809 stop = len(seq)
1825 stop = len(seq)
1810 item = lambda i: seq[i]
1826 item = lambda i: seq[i]
1811 return map(item,xrange(start,stop,step))
1827 return map(item,xrange(start,stop,step))
1812
1828
1813 #----------------------------------------------------------------------------
1829 #----------------------------------------------------------------------------
1814 def chop(seq,size):
1830 def chop(seq,size):
1815 """Chop a sequence into chunks of the given size."""
1831 """Chop a sequence into chunks of the given size."""
1816 chunk = lambda i: seq[i:i+size]
1832 chunk = lambda i: seq[i:i+size]
1817 return map(chunk,xrange(0,len(seq),size))
1833 return map(chunk,xrange(0,len(seq),size))
1818
1834
1819 #----------------------------------------------------------------------------
1835 #----------------------------------------------------------------------------
1820 # with is a keyword as of python 2.5, so this function is renamed to withobj
1836 # with is a keyword as of python 2.5, so this function is renamed to withobj
1821 # from its old 'with' name.
1837 # from its old 'with' name.
1822 def with_obj(object, **args):
1838 def with_obj(object, **args):
1823 """Set multiple attributes for an object, similar to Pascal's with.
1839 """Set multiple attributes for an object, similar to Pascal's with.
1824
1840
1825 Example:
1841 Example:
1826 with_obj(jim,
1842 with_obj(jim,
1827 born = 1960,
1843 born = 1960,
1828 haircolour = 'Brown',
1844 haircolour = 'Brown',
1829 eyecolour = 'Green')
1845 eyecolour = 'Green')
1830
1846
1831 Credit: Greg Ewing, in
1847 Credit: Greg Ewing, in
1832 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1848 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1833
1849
1834 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1850 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1835 has become a keyword for Python 2.5, so we had to rename it."""
1851 has become a keyword for Python 2.5, so we had to rename it."""
1836
1852
1837 object.__dict__.update(args)
1853 object.__dict__.update(args)
1838
1854
1839 #----------------------------------------------------------------------------
1855 #----------------------------------------------------------------------------
1840 def setattr_list(obj,alist,nspace = None):
1856 def setattr_list(obj,alist,nspace = None):
1841 """Set a list of attributes for an object taken from a namespace.
1857 """Set a list of attributes for an object taken from a namespace.
1842
1858
1843 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1859 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1844 alist with their values taken from nspace, which must be a dict (something
1860 alist with their values taken from nspace, which must be a dict (something
1845 like locals() will often do) If nspace isn't given, locals() of the
1861 like locals() will often do) If nspace isn't given, locals() of the
1846 *caller* is used, so in most cases you can omit it.
1862 *caller* is used, so in most cases you can omit it.
1847
1863
1848 Note that alist can be given as a string, which will be automatically
1864 Note that alist can be given as a string, which will be automatically
1849 split into a list on whitespace. If given as a list, it must be a list of
1865 split into a list on whitespace. If given as a list, it must be a list of
1850 *strings* (the variable names themselves), not of variables."""
1866 *strings* (the variable names themselves), not of variables."""
1851
1867
1852 # this grabs the local variables from the *previous* call frame -- that is
1868 # this grabs the local variables from the *previous* call frame -- that is
1853 # the locals from the function that called setattr_list().
1869 # the locals from the function that called setattr_list().
1854 # - snipped from weave.inline()
1870 # - snipped from weave.inline()
1855 if nspace is None:
1871 if nspace is None:
1856 call_frame = sys._getframe().f_back
1872 call_frame = sys._getframe().f_back
1857 nspace = call_frame.f_locals
1873 nspace = call_frame.f_locals
1858
1874
1859 if type(alist) in StringTypes:
1875 if type(alist) in StringTypes:
1860 alist = alist.split()
1876 alist = alist.split()
1861 for attr in alist:
1877 for attr in alist:
1862 val = eval(attr,nspace)
1878 val = eval(attr,nspace)
1863 setattr(obj,attr,val)
1879 setattr(obj,attr,val)
1864
1880
1865 #----------------------------------------------------------------------------
1881 #----------------------------------------------------------------------------
1866 def getattr_list(obj,alist,*args):
1882 def getattr_list(obj,alist,*args):
1867 """getattr_list(obj,alist[, default]) -> attribute list.
1883 """getattr_list(obj,alist[, default]) -> attribute list.
1868
1884
1869 Get a list of named attributes for an object. When a default argument is
1885 Get a list of named attributes for an object. When a default argument is
1870 given, it is returned when the attribute doesn't exist; without it, an
1886 given, it is returned when the attribute doesn't exist; without it, an
1871 exception is raised in that case.
1887 exception is raised in that case.
1872
1888
1873 Note that alist can be given as a string, which will be automatically
1889 Note that alist can be given as a string, which will be automatically
1874 split into a list on whitespace. If given as a list, it must be a list of
1890 split into a list on whitespace. If given as a list, it must be a list of
1875 *strings* (the variable names themselves), not of variables."""
1891 *strings* (the variable names themselves), not of variables."""
1876
1892
1877 if type(alist) in StringTypes:
1893 if type(alist) in StringTypes:
1878 alist = alist.split()
1894 alist = alist.split()
1879 if args:
1895 if args:
1880 if len(args)==1:
1896 if len(args)==1:
1881 default = args[0]
1897 default = args[0]
1882 return map(lambda attr: getattr(obj,attr,default),alist)
1898 return map(lambda attr: getattr(obj,attr,default),alist)
1883 else:
1899 else:
1884 raise ValueError,'getattr_list() takes only one optional argument'
1900 raise ValueError,'getattr_list() takes only one optional argument'
1885 else:
1901 else:
1886 return map(lambda attr: getattr(obj,attr),alist)
1902 return map(lambda attr: getattr(obj,attr),alist)
1887
1903
1888 #----------------------------------------------------------------------------
1904 #----------------------------------------------------------------------------
1889 def map_method(method,object_list,*argseq,**kw):
1905 def map_method(method,object_list,*argseq,**kw):
1890 """map_method(method,object_list,*args,**kw) -> list
1906 """map_method(method,object_list,*args,**kw) -> list
1891
1907
1892 Return a list of the results of applying the methods to the items of the
1908 Return a list of the results of applying the methods to the items of the
1893 argument sequence(s). If more than one sequence is given, the method is
1909 argument sequence(s). If more than one sequence is given, the method is
1894 called with an argument list consisting of the corresponding item of each
1910 called with an argument list consisting of the corresponding item of each
1895 sequence. All sequences must be of the same length.
1911 sequence. All sequences must be of the same length.
1896
1912
1897 Keyword arguments are passed verbatim to all objects called.
1913 Keyword arguments are passed verbatim to all objects called.
1898
1914
1899 This is Python code, so it's not nearly as fast as the builtin map()."""
1915 This is Python code, so it's not nearly as fast as the builtin map()."""
1900
1916
1901 out_list = []
1917 out_list = []
1902 idx = 0
1918 idx = 0
1903 for object in object_list:
1919 for object in object_list:
1904 try:
1920 try:
1905 handler = getattr(object, method)
1921 handler = getattr(object, method)
1906 except AttributeError:
1922 except AttributeError:
1907 out_list.append(None)
1923 out_list.append(None)
1908 else:
1924 else:
1909 if argseq:
1925 if argseq:
1910 args = map(lambda lst:lst[idx],argseq)
1926 args = map(lambda lst:lst[idx],argseq)
1911 #print 'ob',object,'hand',handler,'ar',args # dbg
1927 #print 'ob',object,'hand',handler,'ar',args # dbg
1912 out_list.append(handler(args,**kw))
1928 out_list.append(handler(args,**kw))
1913 else:
1929 else:
1914 out_list.append(handler(**kw))
1930 out_list.append(handler(**kw))
1915 idx += 1
1931 idx += 1
1916 return out_list
1932 return out_list
1917
1933
1918 #----------------------------------------------------------------------------
1934 #----------------------------------------------------------------------------
1919 def get_class_members(cls):
1935 def get_class_members(cls):
1920 ret = dir(cls)
1936 ret = dir(cls)
1921 if hasattr(cls,'__bases__'):
1937 if hasattr(cls,'__bases__'):
1922 for base in cls.__bases__:
1938 for base in cls.__bases__:
1923 ret.extend(get_class_members(base))
1939 ret.extend(get_class_members(base))
1924 return ret
1940 return ret
1925
1941
1926 #----------------------------------------------------------------------------
1942 #----------------------------------------------------------------------------
1927 def dir2(obj):
1943 def dir2(obj):
1928 """dir2(obj) -> list of strings
1944 """dir2(obj) -> list of strings
1929
1945
1930 Extended version of the Python builtin dir(), which does a few extra
1946 Extended version of the Python builtin dir(), which does a few extra
1931 checks, and supports common objects with unusual internals that confuse
1947 checks, and supports common objects with unusual internals that confuse
1932 dir(), such as Traits and PyCrust.
1948 dir(), such as Traits and PyCrust.
1933
1949
1934 This version is guaranteed to return only a list of true strings, whereas
1950 This version is guaranteed to return only a list of true strings, whereas
1935 dir() returns anything that objects inject into themselves, even if they
1951 dir() returns anything that objects inject into themselves, even if they
1936 are later not really valid for attribute access (many extension libraries
1952 are later not really valid for attribute access (many extension libraries
1937 have such bugs).
1953 have such bugs).
1938 """
1954 """
1939
1955
1940 # Start building the attribute list via dir(), and then complete it
1956 # Start building the attribute list via dir(), and then complete it
1941 # with a few extra special-purpose calls.
1957 # with a few extra special-purpose calls.
1942 words = dir(obj)
1958 words = dir(obj)
1943
1959
1944 if hasattr(obj,'__class__'):
1960 if hasattr(obj,'__class__'):
1945 words.append('__class__')
1961 words.append('__class__')
1946 words.extend(get_class_members(obj.__class__))
1962 words.extend(get_class_members(obj.__class__))
1947 #if '__base__' in words: 1/0
1963 #if '__base__' in words: 1/0
1948
1964
1949 # Some libraries (such as traits) may introduce duplicates, we want to
1965 # Some libraries (such as traits) may introduce duplicates, we want to
1950 # track and clean this up if it happens
1966 # track and clean this up if it happens
1951 may_have_dupes = False
1967 may_have_dupes = False
1952
1968
1953 # this is the 'dir' function for objects with Enthought's traits
1969 # this is the 'dir' function for objects with Enthought's traits
1954 if hasattr(obj, 'trait_names'):
1970 if hasattr(obj, 'trait_names'):
1955 try:
1971 try:
1956 words.extend(obj.trait_names())
1972 words.extend(obj.trait_names())
1957 may_have_dupes = True
1973 may_have_dupes = True
1958 except TypeError:
1974 except TypeError:
1959 # This will happen if `obj` is a class and not an instance.
1975 # This will happen if `obj` is a class and not an instance.
1960 pass
1976 pass
1961
1977
1962 # Support for PyCrust-style _getAttributeNames magic method.
1978 # Support for PyCrust-style _getAttributeNames magic method.
1963 if hasattr(obj, '_getAttributeNames'):
1979 if hasattr(obj, '_getAttributeNames'):
1964 try:
1980 try:
1965 words.extend(obj._getAttributeNames())
1981 words.extend(obj._getAttributeNames())
1966 may_have_dupes = True
1982 may_have_dupes = True
1967 except TypeError:
1983 except TypeError:
1968 # `obj` is a class and not an instance. Ignore
1984 # `obj` is a class and not an instance. Ignore
1969 # this error.
1985 # this error.
1970 pass
1986 pass
1971
1987
1972 if may_have_dupes:
1988 if may_have_dupes:
1973 # eliminate possible duplicates, as some traits may also
1989 # eliminate possible duplicates, as some traits may also
1974 # appear as normal attributes in the dir() call.
1990 # appear as normal attributes in the dir() call.
1975 words = list(set(words))
1991 words = list(set(words))
1976 words.sort()
1992 words.sort()
1977
1993
1978 # filter out non-string attributes which may be stuffed by dir() calls
1994 # filter out non-string attributes which may be stuffed by dir() calls
1979 # and poor coding in third-party modules
1995 # and poor coding in third-party modules
1980 return [w for w in words if isinstance(w, basestring)]
1996 return [w for w in words if isinstance(w, basestring)]
1981
1997
1982 #----------------------------------------------------------------------------
1998 #----------------------------------------------------------------------------
1983 def import_fail_info(mod_name,fns=None):
1999 def import_fail_info(mod_name,fns=None):
1984 """Inform load failure for a module."""
2000 """Inform load failure for a module."""
1985
2001
1986 if fns == None:
2002 if fns == None:
1987 warn("Loading of %s failed.\n" % (mod_name,))
2003 warn("Loading of %s failed.\n" % (mod_name,))
1988 else:
2004 else:
1989 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
2005 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1990
2006
1991 #----------------------------------------------------------------------------
2007 #----------------------------------------------------------------------------
1992 # Proposed popitem() extension, written as a method
2008 # Proposed popitem() extension, written as a method
1993
2009
1994
2010
1995 class NotGiven: pass
2011 class NotGiven: pass
1996
2012
1997 def popkey(dct,key,default=NotGiven):
2013 def popkey(dct,key,default=NotGiven):
1998 """Return dct[key] and delete dct[key].
2014 """Return dct[key] and delete dct[key].
1999
2015
2000 If default is given, return it if dct[key] doesn't exist, otherwise raise
2016 If default is given, return it if dct[key] doesn't exist, otherwise raise
2001 KeyError. """
2017 KeyError. """
2002
2018
2003 try:
2019 try:
2004 val = dct[key]
2020 val = dct[key]
2005 except KeyError:
2021 except KeyError:
2006 if default is NotGiven:
2022 if default is NotGiven:
2007 raise
2023 raise
2008 else:
2024 else:
2009 return default
2025 return default
2010 else:
2026 else:
2011 del dct[key]
2027 del dct[key]
2012 return val
2028 return val
2013
2029
2014 def wrap_deprecated(func, suggest = '<nothing>'):
2030 def wrap_deprecated(func, suggest = '<nothing>'):
2015 def newFunc(*args, **kwargs):
2031 def newFunc(*args, **kwargs):
2016 warnings.warn("Call to deprecated function %s, use %s instead" %
2032 warnings.warn("Call to deprecated function %s, use %s instead" %
2017 ( func.__name__, suggest),
2033 ( func.__name__, suggest),
2018 category=DeprecationWarning,
2034 category=DeprecationWarning,
2019 stacklevel = 2)
2035 stacklevel = 2)
2020 return func(*args, **kwargs)
2036 return func(*args, **kwargs)
2021 return newFunc
2037 return newFunc
2022
2038
2023 #*************************** end of file <genutils.py> **********************
2039 #*************************** end of file <genutils.py> **********************
2024
2040
@@ -1,7578 +1,7583 b''
1 2008-04-18 Fernando Perez <Fernando.Perez@berkeley.edu>
2
3 * IPython/genutils.py (page): apply workaround to curses bug that
4 can leave terminal corrupted after a call to initscr().
5
1 2008-04-15 Ville Vainio <vivainio@gmail.com>
6 2008-04-15 Ville Vainio <vivainio@gmail.com>
2
7
3 * genutils.py: SList.grep supports 'field' argument
8 * genutils.py: SList.grep supports 'field' argument
4
9
5 * ipy_completers.py: module completer looks inside
10 * ipy_completers.py: module completer looks inside
6 .egg zip files (patch by mc). Close #196.
11 .egg zip files (patch by mc). Close #196.
7
12
8 2008-04-09 Ville Vainio <vivainio@gmail.com>
13 2008-04-09 Ville Vainio <vivainio@gmail.com>
9
14
10 * deep_reload.py: do not crash on from __future__ import
15 * deep_reload.py: do not crash on from __future__ import
11 absolute_import. Close #244.
16 absolute_import. Close #244.
12
17
13 2008-04-02 Ville Vainio <vivainio@gmail.com>
18 2008-04-02 Ville Vainio <vivainio@gmail.com>
14
19
15 * ipy_winpdb.py: New extension for winpdb integration. %wdb
20 * ipy_winpdb.py: New extension for winpdb integration. %wdb
16 test.py is winpdb equivalent of %run -d test.py. winpdb is a
21 test.py is winpdb equivalent of %run -d test.py. winpdb is a
17 crossplatform remote GUI debugger based on wxpython.
22 crossplatform remote GUI debugger based on wxpython.
18
23
19 2008-03-29 Ville Vainio <vivainio@gmail.com>
24 2008-03-29 Ville Vainio <vivainio@gmail.com>
20
25
21 * ipython.rst, do_sphinx.py: New documentation base, based on
26 * ipython.rst, do_sphinx.py: New documentation base, based on
22 reStucturedText and Sphinx (html/pdf generation). The old Lyx
27 reStucturedText and Sphinx (html/pdf generation). The old Lyx
23 based documentation will not be updated anymore.
28 based documentation will not be updated anymore.
24
29
25 * jobctrl.py: Use shell in Popen for 'start' command (in windows).
30 * jobctrl.py: Use shell in Popen for 'start' command (in windows).
26
31
27 2008-03-24 Ville Vainio <vivainio@gmail.com>
32 2008-03-24 Ville Vainio <vivainio@gmail.com>
28
33
29 * ipython.rst, do_sphinx.py: New documentation base, based on
34 * ipython.rst, do_sphinx.py: New documentation base, based on
30 reStucturedText and Sphinx (html/pdf generation). The old Lyx
35 reStucturedText and Sphinx (html/pdf generation). The old Lyx
31 based documentation will not be updated anymore.
36 based documentation will not be updated anymore.
32
37
33 ipython.rst has up to date documentation on matters that were not
38 ipython.rst has up to date documentation on matters that were not
34 documented at all, and it also removes various
39 documented at all, and it also removes various
35 misdocumented/deprecated features.
40 misdocumented/deprecated features.
36
41
37 2008-03-22 Ville Vainio <vivainio@gmail.com>
42 2008-03-22 Ville Vainio <vivainio@gmail.com>
38
43
39 * Shell.py: Merge mtexp branch:
44 * Shell.py: Merge mtexp branch:
40 https://code.launchpad.net/~ipython/ipython/mtexp
45 https://code.launchpad.net/~ipython/ipython/mtexp
41
46
42 Privides simpler and more robust MTInteractiveShell that won't
47 Privides simpler and more robust MTInteractiveShell that won't
43 deadlock, even when the worker thread (GUI) stops doing runcode()
48 deadlock, even when the worker thread (GUI) stops doing runcode()
44 regularly. r71.
49 regularly. r71.
45
50
46 2008-03-20 Ville Vainio <vivainio@gmail.com>
51 2008-03-20 Ville Vainio <vivainio@gmail.com>
47
52
48 * twshell.py: New shell that runs IPython code in Twisted reactor.
53 * twshell.py: New shell that runs IPython code in Twisted reactor.
49 Launch by doing ipython -twisted. r67.
54 Launch by doing ipython -twisted. r67.
50
55
51 2008-03-19 Ville Vainio <vivainio@gmail.com>
56 2008-03-19 Ville Vainio <vivainio@gmail.com>
52
57
53 * Magic.py: %rehashx works correctly when shadowed system commands
58 * Magic.py: %rehashx works correctly when shadowed system commands
54 have upper case characters (e.g. Print.exe). r64.
59 have upper case characters (e.g. Print.exe). r64.
55
60
56 * ipy_bzr.py, ipy_app_completers.py: new bzr completer that also
61 * ipy_bzr.py, ipy_app_completers.py: new bzr completer that also
57 knows options to commands, based on bzrtools. Uses bzrlib
62 knows options to commands, based on bzrtools. Uses bzrlib
58 directly. r66.
63 directly. r66.
59
64
60 2008-03-16 Ville Vainio <vivainio@gmail.com>
65 2008-03-16 Ville Vainio <vivainio@gmail.com>
61
66
62 * make_tarball.py: Fixed for bzr.
67 * make_tarball.py: Fixed for bzr.
63
68
64 * ipapi.py: Better _ip.runlines() script cleanup. r56,r79.
69 * ipapi.py: Better _ip.runlines() script cleanup. r56,r79.
65
70
66 * ipy_vimserver.py, ipy.vim: New extension for vim server mode,
71 * ipy_vimserver.py, ipy.vim: New extension for vim server mode,
67 by Erich Heine.
72 by Erich Heine.
68
73
69 2008-03-12 Ville Vainio <vivainio@gmail.com>
74 2008-03-12 Ville Vainio <vivainio@gmail.com>
70
75
71 * ipmaker.py: Force (reload?) import of ipy_user_conf and
76 * ipmaker.py: Force (reload?) import of ipy_user_conf and
72 ipy_profile_foo, so that embedded instances can be relaunched and
77 ipy_profile_foo, so that embedded instances can be relaunched and
73 configuration is still done. r50
78 configuration is still done. r50
74
79
75 * ipapi.py, test_embed.py: Allow specifying shell class in
80 * ipapi.py, test_embed.py: Allow specifying shell class in
76 launch_new_instance & make_new instance. Use this in
81 launch_new_instance & make_new instance. Use this in
77 test_embed.py. r51.
82 test_embed.py. r51.
78
83
79 test_embed.py is also a good and simple demo of embedding IPython.
84 test_embed.py is also a good and simple demo of embedding IPython.
80
85
81
86
82 2008-03-10 Ville Vainio <vivainio@gmail.com>
87 2008-03-10 Ville Vainio <vivainio@gmail.com>
83
88
84 * tool/update_revnum.py: Change to bzr revisioning scheme in
89 * tool/update_revnum.py: Change to bzr revisioning scheme in
85 revision numbers.
90 revision numbers.
86
91
87 * Shell.py: Threading improvements:
92 * Shell.py: Threading improvements:
88
93
89 In multithreaded shells, do not hang on macros and o.autoexec
94 In multithreaded shells, do not hang on macros and o.autoexec
90 commands (or anything executed with _ip.runlines()) anymore. Allow
95 commands (or anything executed with _ip.runlines()) anymore. Allow
91 recursive execution of IPython code in
96 recursive execution of IPython code in
92 MTInteractiveShell.runsource by checking if we are already in
97 MTInteractiveShell.runsource by checking if we are already in
93 worker thread, and execute code directly if we are. r48.
98 worker thread, and execute code directly if we are. r48.
94
99
95 MTInteractiveShell.runsource: execute code directly if worker
100 MTInteractiveShell.runsource: execute code directly if worker
96 thread is not running yet (this is the case in config files). r49.
101 thread is not running yet (this is the case in config files). r49.
97
102
98 2008-03-09 Ville Vainio <vivainio@gmail.com>
103 2008-03-09 Ville Vainio <vivainio@gmail.com>
99
104
100 * ipy_profile_sh.py: You can now use $LA or LA() to refer to last
105 * ipy_profile_sh.py: You can now use $LA or LA() to refer to last
101 argument of previous command in sh profile. Similar to bash '!$'.
106 argument of previous command in sh profile. Similar to bash '!$'.
102 LA(3) or $LA(3) stands for last argument of input history command
107 LA(3) or $LA(3) stands for last argument of input history command
103 3.
108 3.
104
109
105 * Shell.py: -pylab names don't clutter %whos listing.
110 * Shell.py: -pylab names don't clutter %whos listing.
106
111
107 2008-03-07 Ville Vainio <vivainio@gmail.com>
112 2008-03-07 Ville Vainio <vivainio@gmail.com>
108
113
109 * ipy_autoreload.py: new extension (by Pauli Virtanen) for
114 * ipy_autoreload.py: new extension (by Pauli Virtanen) for
110 autoreloading modules; try %autoreload and %aimport. Close #154.
115 autoreloading modules; try %autoreload and %aimport. Close #154.
111 Uses the new pre_runcode_hook.
116 Uses the new pre_runcode_hook.
112
117
113 2008-02-24 Ville Vainio <vivainio@gmail.com>
118 2008-02-24 Ville Vainio <vivainio@gmail.com>
114
119
115 * platutils_posix.py: freeze_term_title works
120 * platutils_posix.py: freeze_term_title works
116
121
117 2008-02-21 Ville Vainio <vivainio@gmail.com>
122 2008-02-21 Ville Vainio <vivainio@gmail.com>
118
123
119 * Magic.py: %quickref does not crash with empty docstring
124 * Magic.py: %quickref does not crash with empty docstring
120
125
121 2008-02-20 Ville Vainio <vivainio@gmail.com>
126 2008-02-20 Ville Vainio <vivainio@gmail.com>
122
127
123 * completer.py: do not treat [](){} as protectable chars anymore,
128 * completer.py: do not treat [](){} as protectable chars anymore,
124 close #233.
129 close #233.
125
130
126 * completer.py: do not treat [](){} as protectable chars anymore
131 * completer.py: do not treat [](){} as protectable chars anymore
127
132
128 * magic.py, test_cpaste.py: Allow different prefix for pasting
133 * magic.py, test_cpaste.py: Allow different prefix for pasting
129 from email
134 from email
130
135
131 2008-02-17 Ville Vainio <vivainio@gmail.com>
136 2008-02-17 Ville Vainio <vivainio@gmail.com>
132
137
133 * Switched over to Launchpad/bzr as primary VCS.
138 * Switched over to Launchpad/bzr as primary VCS.
134
139
135 2008-02-14 Ville Vainio <vivainio@gmail.com>
140 2008-02-14 Ville Vainio <vivainio@gmail.com>
136
141
137 * ipapi.py: _ip.runlines() is now much more liberal about
142 * ipapi.py: _ip.runlines() is now much more liberal about
138 indentation - it cleans up the scripts it gets
143 indentation - it cleans up the scripts it gets
139
144
140 2008-02-14 Ville Vainio <vivainio@gmail.com>
145 2008-02-14 Ville Vainio <vivainio@gmail.com>
141
146
142 * Extensions/ipy_leo.py: created 'ILeo' IPython-Leo bridge.
147 * Extensions/ipy_leo.py: created 'ILeo' IPython-Leo bridge.
143 Changes to it (later on) are too numerous to list in ChangeLog
148 Changes to it (later on) are too numerous to list in ChangeLog
144 until it stabilizes
149 until it stabilizes
145
150
146 2008-02-07 Darren Dale <darren.dale@cornell.edu>
151 2008-02-07 Darren Dale <darren.dale@cornell.edu>
147
152
148 * IPython/Shell.py: Call QtCore.pyqtRemoveInputHook() when creating
153 * IPython/Shell.py: Call QtCore.pyqtRemoveInputHook() when creating
149 an IPShellQt4. PyQt4-4.2.1 and later uses PyOS_InputHook to improve
154 an IPShellQt4. PyQt4-4.2.1 and later uses PyOS_InputHook to improve
150 interaction in the interpreter (like Tkinter does), but it seems to
155 interaction in the interpreter (like Tkinter does), but it seems to
151 partially interfere with the IPython implementation and exec_()
156 partially interfere with the IPython implementation and exec_()
152 still seems to block. So we disable the PyQt implementation and
157 still seems to block. So we disable the PyQt implementation and
153 stick with the IPython one for now.
158 stick with the IPython one for now.
154
159
155 2008-02-02 Walter Doerwald <walter@livinglogic.de>
160 2008-02-02 Walter Doerwald <walter@livinglogic.de>
156
161
157 * ipipe.py: A new ipipe table has been added: ialias produces all
162 * ipipe.py: A new ipipe table has been added: ialias produces all
158 entries from IPython's alias table.
163 entries from IPython's alias table.
159
164
160 2008-02-01 Fernando Perez <Fernando.Perez@colorado.edu>
165 2008-02-01 Fernando Perez <Fernando.Perez@colorado.edu>
161
166
162 * IPython/Shell.py (MTInteractiveShell.runcode): Improve handling
167 * IPython/Shell.py (MTInteractiveShell.runcode): Improve handling
163 of KBINT in threaded shells. After code provided by Marc in #212.
168 of KBINT in threaded shells. After code provided by Marc in #212.
164
169
165 2008-01-30 Fernando Perez <Fernando.Perez@colorado.edu>
170 2008-01-30 Fernando Perez <Fernando.Perez@colorado.edu>
166
171
167 * IPython/Shell.py (MTInteractiveShell.__init__): Fixed deadlock
172 * IPython/Shell.py (MTInteractiveShell.__init__): Fixed deadlock
168 that could occur due to a race condition in threaded shells.
173 that could occur due to a race condition in threaded shells.
169 Thanks to code provided by Marc, as #210.
174 Thanks to code provided by Marc, as #210.
170
175
171 2008-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
176 2008-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
172
177
173 * IPython/Magic.py (magic_doctest_mode): respect the user's
178 * IPython/Magic.py (magic_doctest_mode): respect the user's
174 settings for input separators rather than overriding them. After
179 settings for input separators rather than overriding them. After
175 a report by Jeff Kowalczyk <jtk-AT-yahoo.com>
180 a report by Jeff Kowalczyk <jtk-AT-yahoo.com>
176
181
177 * IPython/history.py (magic_history): Add support for declaring an
182 * IPython/history.py (magic_history): Add support for declaring an
178 output file directly from the history command.
183 output file directly from the history command.
179
184
180 2008-01-21 Walter Doerwald <walter@livinglogic.de>
185 2008-01-21 Walter Doerwald <walter@livinglogic.de>
181
186
182 * ipipe.py: Register ipipe's displayhooks via the generic function
187 * ipipe.py: Register ipipe's displayhooks via the generic function
183 generics.result_display() instead of using ipapi.set_hook().
188 generics.result_display() instead of using ipapi.set_hook().
184
189
185 2008-01-19 Walter Doerwald <walter@livinglogic.de>
190 2008-01-19 Walter Doerwald <walter@livinglogic.de>
186
191
187 * ibrowse.py, igrid.py, ipipe.py:
192 * ibrowse.py, igrid.py, ipipe.py:
188 The input object can now be passed to the constructor of the display classes.
193 The input object can now be passed to the constructor of the display classes.
189 This makes it possible to use them with objects that implement __or__.
194 This makes it possible to use them with objects that implement __or__.
190 Use this constructor in the displayhook instead of piping.
195 Use this constructor in the displayhook instead of piping.
191
196
192 * ipipe.py: Importing astyle.py is done as late as possible to
197 * ipipe.py: Importing astyle.py is done as late as possible to
193 avoid problems with circular imports.
198 avoid problems with circular imports.
194
199
195 2008-01-19 Ville Vainio <vivainio@gmail.com>
200 2008-01-19 Ville Vainio <vivainio@gmail.com>
196
201
197 * hooks.py, iplib.py: Added 'shell_hook' to customize how
202 * hooks.py, iplib.py: Added 'shell_hook' to customize how
198 IPython calls shell.
203 IPython calls shell.
199
204
200 * hooks.py, iplib.py: Added 'show_in_pager' hook to specify
205 * hooks.py, iplib.py: Added 'show_in_pager' hook to specify
201 how IPython pages text (%page, %pycat, %pdoc etc.)
206 how IPython pages text (%page, %pycat, %pdoc etc.)
202
207
203 * Extensions/jobctrl.py: Use shell_hook. New magics: '%tasks'
208 * Extensions/jobctrl.py: Use shell_hook. New magics: '%tasks'
204 and '%kill' to kill hanging processes that won't obey ctrl+C.
209 and '%kill' to kill hanging processes that won't obey ctrl+C.
205
210
206 2008-01-16 Ville Vainio <vivainio@gmail.com>
211 2008-01-16 Ville Vainio <vivainio@gmail.com>
207
212
208 * ipy_completers.py: pyw extension support for %run completer.
213 * ipy_completers.py: pyw extension support for %run completer.
209
214
210 2008-01-11 Ville Vainio <vivainio@gmail.com>
215 2008-01-11 Ville Vainio <vivainio@gmail.com>
211
216
212 * iplib.py, ipmaker.py: new rc option - autoexec. It's a list
217 * iplib.py, ipmaker.py: new rc option - autoexec. It's a list
213 of ipython commands to be run when IPython has started up
218 of ipython commands to be run when IPython has started up
214 (just before running the scripts and -c arg on command line).
219 (just before running the scripts and -c arg on command line).
215
220
216 * ipy_user_conf.py: Added an example on how to change term
221 * ipy_user_conf.py: Added an example on how to change term
217 colors in config file (through using autoexec).
222 colors in config file (through using autoexec).
218
223
219 * completer.py, test_completer.py: Ability to specify custom
224 * completer.py, test_completer.py: Ability to specify custom
220 get_endidx to replace readline.get_endidx. For emacs users.
225 get_endidx to replace readline.get_endidx. For emacs users.
221
226
222 2008-01-10 Ville Vainio <vivainio@gmail.com>
227 2008-01-10 Ville Vainio <vivainio@gmail.com>
223
228
224 * Prompts.py (set_p_str): do not crash on illegal prompt strings
229 * Prompts.py (set_p_str): do not crash on illegal prompt strings
225
230
226 2008-01-08 Ville Vainio <vivainio@gmail.com>
231 2008-01-08 Ville Vainio <vivainio@gmail.com>
227
232
228 * '%macro -r' (raw mode) is now default in sh profile.
233 * '%macro -r' (raw mode) is now default in sh profile.
229
234
230 2007-12-31 Ville Vainio <vivainio@gmail.com>
235 2007-12-31 Ville Vainio <vivainio@gmail.com>
231
236
232 * completer.py: custom completer matching is now case sensitive
237 * completer.py: custom completer matching is now case sensitive
233 (#207).
238 (#207).
234
239
235 * ultraTB.py, iplib.py: Add some KeyboardInterrupt catching in
240 * ultraTB.py, iplib.py: Add some KeyboardInterrupt catching in
236 an attempt to prevent occasional crashes.
241 an attempt to prevent occasional crashes.
237
242
238 * CrashHandler.py: Crash log dump now asks user to press enter
243 * CrashHandler.py: Crash log dump now asks user to press enter
239 before exiting.
244 before exiting.
240
245
241 * Store _ip in user_ns instead of __builtin__, enabling safer
246 * Store _ip in user_ns instead of __builtin__, enabling safer
242 coexistence of multiple IPython instances in the same python
247 coexistence of multiple IPython instances in the same python
243 interpreter (#197).
248 interpreter (#197).
244
249
245 * Debugger.py, ipmaker.py: Need to add '-pydb' command line
250 * Debugger.py, ipmaker.py: Need to add '-pydb' command line
246 switch to enable pydb in post-mortem debugging and %run -d.
251 switch to enable pydb in post-mortem debugging and %run -d.
247
252
248 2007-12-28 Ville Vainio <vivainio@gmail.com>
253 2007-12-28 Ville Vainio <vivainio@gmail.com>
249
254
250 * ipy_server.py: TCP socket server for "remote control" of an IPython
255 * ipy_server.py: TCP socket server for "remote control" of an IPython
251 instance.
256 instance.
252
257
253 * Debugger.py: Change to PSF license
258 * Debugger.py: Change to PSF license
254
259
255 * simplegeneric.py: Add license & author notes.
260 * simplegeneric.py: Add license & author notes.
256
261
257 * ipy_fsops.py: Added PathObj and FileObj, an object-oriented way
262 * ipy_fsops.py: Added PathObj and FileObj, an object-oriented way
258 to navigate file system with a custom completer. Run
263 to navigate file system with a custom completer. Run
259 ipy_fsops.test_pathobj() to play with it.
264 ipy_fsops.test_pathobj() to play with it.
260
265
261 2007-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
266 2007-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
262
267
263 * IPython/dtutils.py: Add utilities for interactively running
268 * IPython/dtutils.py: Add utilities for interactively running
264 doctests. Still needs work to more easily handle the namespace of
269 doctests. Still needs work to more easily handle the namespace of
265 the package one may be working on, but the basics are in place.
270 the package one may be working on, but the basics are in place.
266
271
267 2007-12-27 Ville Vainio <vivainio@gmail.com>
272 2007-12-27 Ville Vainio <vivainio@gmail.com>
268
273
269 * ipy_completers.py: Applied arno's patch to get proper list of
274 * ipy_completers.py: Applied arno's patch to get proper list of
270 packages in import completer. Closes #196.
275 packages in import completer. Closes #196.
271
276
272 2007-12-20 Ville Vainio <vivainio@gmail.com>
277 2007-12-20 Ville Vainio <vivainio@gmail.com>
273
278
274 * completer.py, generics.py(complete_object): Allow
279 * completer.py, generics.py(complete_object): Allow
275 custom complers based on python objects via simplegeneric.
280 custom complers based on python objects via simplegeneric.
276 See generics.py / my_demo_complete_object
281 See generics.py / my_demo_complete_object
277
282
278 2007-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
283 2007-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
279
284
280 * IPython/Prompts.py (BasePrompt.__nonzero__): add proper boolean
285 * IPython/Prompts.py (BasePrompt.__nonzero__): add proper boolean
281 behavior to prompt objects, useful for display hooks to adjust
286 behavior to prompt objects, useful for display hooks to adjust
282 themselves depending on whether prompts will be there or not.
287 themselves depending on whether prompts will be there or not.
283
288
284 2007-12-13 Ville Vainio <vivainio@gmail.com>
289 2007-12-13 Ville Vainio <vivainio@gmail.com>
285
290
286 * iplib.py(raw_input): unix readline does not allow unicode in
291 * iplib.py(raw_input): unix readline does not allow unicode in
287 history, encode to normal string. After patch by Tiago.
292 history, encode to normal string. After patch by Tiago.
288 Close #201
293 Close #201
289
294
290 2007-12-12 Ville Vainio <vivainio@gmail.com>
295 2007-12-12 Ville Vainio <vivainio@gmail.com>
291
296
292 * genutils.py (abbrev_cwd): Terminal title now shows 2 levels of
297 * genutils.py (abbrev_cwd): Terminal title now shows 2 levels of
293 current directory.
298 current directory.
294
299
295 2007-12-12 Fernando Perez <Fernando.Perez@colorado.edu>
300 2007-12-12 Fernando Perez <Fernando.Perez@colorado.edu>
296
301
297 * IPython/Shell.py (_select_shell): add support for controlling
302 * IPython/Shell.py (_select_shell): add support for controlling
298 the pylab threading mode directly at the command line, without
303 the pylab threading mode directly at the command line, without
299 having to modify MPL config files. Added unit tests for this
304 having to modify MPL config files. Added unit tests for this
300 feature, though manual/docs update is still pending, will do later.
305 feature, though manual/docs update is still pending, will do later.
301
306
302 2007-12-11 Ville Vainio <vivainio@gmail.com>
307 2007-12-11 Ville Vainio <vivainio@gmail.com>
303
308
304 * ext_rescapture.py: var = !cmd is no longer verbose (to facilitate
309 * ext_rescapture.py: var = !cmd is no longer verbose (to facilitate
305 use in scripts)
310 use in scripts)
306
311
307 2007-12-07 Ville Vainio <vivainio@gmail.com>
312 2007-12-07 Ville Vainio <vivainio@gmail.com>
308
313
309 * iplib.py, ipy_profile_sh.py: Do not escape # on command lines
314 * iplib.py, ipy_profile_sh.py: Do not escape # on command lines
310 anymore (to \#) - even if it is a comment char that is implicitly
315 anymore (to \#) - even if it is a comment char that is implicitly
311 escaped in some unix shells in interactive mode, it is ok to leave
316 escaped in some unix shells in interactive mode, it is ok to leave
312 it in IPython as such.
317 it in IPython as such.
313
318
314
319
315 2007-12-01 Robert Kern <robert.kern@gmail.com>
320 2007-12-01 Robert Kern <robert.kern@gmail.com>
316
321
317 * IPython/ultraTB.py (findsource): Improve the monkeypatch to
322 * IPython/ultraTB.py (findsource): Improve the monkeypatch to
318 inspect.findsource(). It can now find source lines inside zipped
323 inspect.findsource(). It can now find source lines inside zipped
319 packages.
324 packages.
320
325
321 * IPython/ultraTB.py: When constructing tracebacks, try to use __file__
326 * IPython/ultraTB.py: When constructing tracebacks, try to use __file__
322 in the frame's namespace before trusting the filename in the code object
327 in the frame's namespace before trusting the filename in the code object
323 which created the frame.
328 which created the frame.
324
329
325 2007-11-29 *** Released version 0.8.2
330 2007-11-29 *** Released version 0.8.2
326
331
327 2007-11-25 Fernando Perez <Fernando.Perez@colorado.edu>
332 2007-11-25 Fernando Perez <Fernando.Perez@colorado.edu>
328
333
329 * IPython/Logger.py (Logger.logstop): add a proper logstop()
334 * IPython/Logger.py (Logger.logstop): add a proper logstop()
330 method to fully stop the logger, along with a corresponding
335 method to fully stop the logger, along with a corresponding
331 %logstop magic for interactive use.
336 %logstop magic for interactive use.
332
337
333 * IPython/Extensions/ipy_host_completers.py: added new host
338 * IPython/Extensions/ipy_host_completers.py: added new host
334 completers functionality, contributed by Gael Pasgrimaud
339 completers functionality, contributed by Gael Pasgrimaud
335 <gawel-AT-afpy.org>.
340 <gawel-AT-afpy.org>.
336
341
337 2007-11-24 Fernando Perez <Fernando.Perez@colorado.edu>
342 2007-11-24 Fernando Perez <Fernando.Perez@colorado.edu>
338
343
339 * IPython/DPyGetOpt.py (ArgumentError): Apply patch by Paul Mueller
344 * IPython/DPyGetOpt.py (ArgumentError): Apply patch by Paul Mueller
340 <gakusei-AT-dakotacom.net>, to fix deprecated string exceptions in
345 <gakusei-AT-dakotacom.net>, to fix deprecated string exceptions in
341 options handling. Unicode fix in %whos (committed a while ago)
346 options handling. Unicode fix in %whos (committed a while ago)
342 was also contributed by Paul.
347 was also contributed by Paul.
343
348
344 2007-11-23 Darren Dale <darren.dale@cornell.edu>
349 2007-11-23 Darren Dale <darren.dale@cornell.edu>
345 * ipy_traits_completer.py: let traits_completer respect the user's
350 * ipy_traits_completer.py: let traits_completer respect the user's
346 readline_omit__names setting.
351 readline_omit__names setting.
347
352
348 2007-11-08 Ville Vainio <vivainio@gmail.com>
353 2007-11-08 Ville Vainio <vivainio@gmail.com>
349
354
350 * ipy_completers.py (import completer): assume 'xml' module exists.
355 * ipy_completers.py (import completer): assume 'xml' module exists.
351 Do not add every module twice anymore. Closes #196.
356 Do not add every module twice anymore. Closes #196.
352
357
353 * ipy_completers.py, ipy_app_completers.py: Add proper apt-get
358 * ipy_completers.py, ipy_app_completers.py: Add proper apt-get
354 completer that uses apt-cache to search for existing packages.
359 completer that uses apt-cache to search for existing packages.
355
360
356 2007-11-06 Ville Vainio <vivainio@gmail.com>
361 2007-11-06 Ville Vainio <vivainio@gmail.com>
357
362
358 * Prompts.py: Do not update _oh and _123 when do_full_cache is not
363 * Prompts.py: Do not update _oh and _123 when do_full_cache is not
359 true. Closes #194.
364 true. Closes #194.
360
365
361 2007-11-01 Brian Granger <ellisonbg@gmail.com>
366 2007-11-01 Brian Granger <ellisonbg@gmail.com>
362
367
363 * iplib.py, rlineimpl.py: Applied Body Water's patches to get IPython
368 * iplib.py, rlineimpl.py: Applied Body Water's patches to get IPython
364 working with OS X 10.5 libedit implementation of readline.
369 working with OS X 10.5 libedit implementation of readline.
365
370
366 2007-10-24 Ville Vainio <vivainio@gmail.com>
371 2007-10-24 Ville Vainio <vivainio@gmail.com>
367
372
368 * iplib.py(user_setup): To route around buggy installations where
373 * iplib.py(user_setup): To route around buggy installations where
369 UserConfig is not available, create a minimal _ipython.
374 UserConfig is not available, create a minimal _ipython.
370
375
371 * iplib.py: Unicode fixes from Jorgen.
376 * iplib.py: Unicode fixes from Jorgen.
372
377
373 * genutils.py: Slist now has new method 'fields()' for extraction of
378 * genutils.py: Slist now has new method 'fields()' for extraction of
374 whitespace-separated fields from line-oriented data.
379 whitespace-separated fields from line-oriented data.
375
380
376 2007-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
381 2007-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
377
382
378 * IPython/OInspect.py (Inspector.pinfo): fix bug that could arise
383 * IPython/OInspect.py (Inspector.pinfo): fix bug that could arise
379 when querying objects with no __class__ attribute (such as
384 when querying objects with no __class__ attribute (such as
380 f2py-generated modules).
385 f2py-generated modules).
381
386
382 2007-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
387 2007-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
383
388
384 * IPython/Magic.py (magic_time): track compilation time and report
389 * IPython/Magic.py (magic_time): track compilation time and report
385 it if longer than 0.1s (fix done to %time and %timeit). After a
390 it if longer than 0.1s (fix done to %time and %timeit). After a
386 SAGE bug report: http://trac.sagemath.org/sage_trac/ticket/632.
391 SAGE bug report: http://trac.sagemath.org/sage_trac/ticket/632.
387
392
388 2007-09-18 Ville Vainio <vivainio@gmail.com>
393 2007-09-18 Ville Vainio <vivainio@gmail.com>
389
394
390 * genutils.py(make_quoted_expr): Do not use Itpl, it does
395 * genutils.py(make_quoted_expr): Do not use Itpl, it does
391 not support unicode at the moment. Fixes (many) magic calls with
396 not support unicode at the moment. Fixes (many) magic calls with
392 special characters.
397 special characters.
393
398
394 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
399 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
395
400
396 * IPython/genutils.py (doctest_reload): expose the doctest
401 * IPython/genutils.py (doctest_reload): expose the doctest
397 reloader to the user so that people can easily reset doctest while
402 reloader to the user so that people can easily reset doctest while
398 using it interactively. Fixes a problem reported by Jorgen.
403 using it interactively. Fixes a problem reported by Jorgen.
399
404
400 * IPython/iplib.py (InteractiveShell.__init__): protect the
405 * IPython/iplib.py (InteractiveShell.__init__): protect the
401 FakeModule instances used for __main__ in %run calls from
406 FakeModule instances used for __main__ in %run calls from
402 deletion, so that user code defined in them isn't left with
407 deletion, so that user code defined in them isn't left with
403 dangling references due to the Python module deletion machinery.
408 dangling references due to the Python module deletion machinery.
404 This should fix the problems reported by Darren.
409 This should fix the problems reported by Darren.
405
410
406 2007-09-10 Darren Dale <dd55@cornell.edu>
411 2007-09-10 Darren Dale <dd55@cornell.edu>
407
412
408 * Cleanup of IPShellQt and IPShellQt4
413 * Cleanup of IPShellQt and IPShellQt4
409
414
410 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
415 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
411
416
412 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
417 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
413 doctest support.
418 doctest support.
414
419
415 * IPython/iplib.py (safe_execfile): minor docstring improvements.
420 * IPython/iplib.py (safe_execfile): minor docstring improvements.
416
421
417 2007-09-08 Ville Vainio <vivainio@gmail.com>
422 2007-09-08 Ville Vainio <vivainio@gmail.com>
418
423
419 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
424 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
420 directory, not the target directory.
425 directory, not the target directory.
421
426
422 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
427 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
423 exception that won't print the tracebacks. Switched many magics to
428 exception that won't print the tracebacks. Switched many magics to
424 raise them on error situations, also GetoptError is not printed
429 raise them on error situations, also GetoptError is not printed
425 anymore.
430 anymore.
426
431
427 2007-09-07 Ville Vainio <vivainio@gmail.com>
432 2007-09-07 Ville Vainio <vivainio@gmail.com>
428
433
429 * iplib.py: do not auto-alias "dir", it screws up other dir auto
434 * iplib.py: do not auto-alias "dir", it screws up other dir auto
430 aliases.
435 aliases.
431
436
432 * genutils.py: SList.grep() implemented.
437 * genutils.py: SList.grep() implemented.
433
438
434 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
439 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
435 for easy "out of the box" setup of several common editors, so that
440 for easy "out of the box" setup of several common editors, so that
436 e.g. '%edit os.path.isfile' will jump to the correct line
441 e.g. '%edit os.path.isfile' will jump to the correct line
437 automatically. Contributions for command lines of your favourite
442 automatically. Contributions for command lines of your favourite
438 editors welcome.
443 editors welcome.
439
444
440 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
445 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
441
446
442 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
447 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
443 preventing source display in certain cases. In reality I think
448 preventing source display in certain cases. In reality I think
444 the problem is with Ubuntu's Python build, but this change works
449 the problem is with Ubuntu's Python build, but this change works
445 around the issue in some cases (not in all, unfortunately). I'd
450 around the issue in some cases (not in all, unfortunately). I'd
446 filed a Python bug on this with more details, but in the change of
451 filed a Python bug on this with more details, but in the change of
447 bug trackers it seems to have been lost.
452 bug trackers it seems to have been lost.
448
453
449 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
454 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
450 not the same, it's not self-documenting, doesn't allow range
455 not the same, it's not self-documenting, doesn't allow range
451 selection, and sorts alphabetically instead of numerically.
456 selection, and sorts alphabetically instead of numerically.
452 (magic_r): restore %r. No, "up + enter. One char magic" is not
457 (magic_r): restore %r. No, "up + enter. One char magic" is not
453 the same thing, since %r takes parameters to allow fast retrieval
458 the same thing, since %r takes parameters to allow fast retrieval
454 of old commands. I've received emails from users who use this a
459 of old commands. I've received emails from users who use this a
455 LOT, so it stays.
460 LOT, so it stays.
456 (magic_automagic): restore %automagic. "use _ip.option.automagic"
461 (magic_automagic): restore %automagic. "use _ip.option.automagic"
457 is not a valid replacement b/c it doesn't provide an complete
462 is not a valid replacement b/c it doesn't provide an complete
458 explanation (which the automagic docstring does).
463 explanation (which the automagic docstring does).
459 (magic_autocall): restore %autocall, with improved docstring.
464 (magic_autocall): restore %autocall, with improved docstring.
460 Same argument as for others, "use _ip.options.autocall" is not a
465 Same argument as for others, "use _ip.options.autocall" is not a
461 valid replacement.
466 valid replacement.
462 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
467 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
463 tutorials and online docs.
468 tutorials and online docs.
464
469
465 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
470 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
466
471
467 * IPython/usage.py (quick_reference): mention magics in quickref,
472 * IPython/usage.py (quick_reference): mention magics in quickref,
468 modified main banner to mention %quickref.
473 modified main banner to mention %quickref.
469
474
470 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
475 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
471
476
472 2007-09-06 Ville Vainio <vivainio@gmail.com>
477 2007-09-06 Ville Vainio <vivainio@gmail.com>
473
478
474 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
479 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
475 Callable aliases now pass the _ip as first arg. This breaks
480 Callable aliases now pass the _ip as first arg. This breaks
476 compatibility with earlier 0.8.2.svn series! (though they should
481 compatibility with earlier 0.8.2.svn series! (though they should
477 not have been in use yet outside these few extensions)
482 not have been in use yet outside these few extensions)
478
483
479 2007-09-05 Ville Vainio <vivainio@gmail.com>
484 2007-09-05 Ville Vainio <vivainio@gmail.com>
480
485
481 * external/mglob.py: expand('dirname') => ['dirname'], instead
486 * external/mglob.py: expand('dirname') => ['dirname'], instead
482 of ['dirname/foo','dirname/bar', ...].
487 of ['dirname/foo','dirname/bar', ...].
483
488
484 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
489 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
485 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
490 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
486 is useful for others as well).
491 is useful for others as well).
487
492
488 * iplib.py: on callable aliases (as opposed to old style aliases),
493 * iplib.py: on callable aliases (as opposed to old style aliases),
489 do var_expand() immediately, and use make_quoted_expr instead
494 do var_expand() immediately, and use make_quoted_expr instead
490 of hardcoded r"""
495 of hardcoded r"""
491
496
492 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
497 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
493 if not available load ipy_fsops.py for cp, mv, etc. replacements
498 if not available load ipy_fsops.py for cp, mv, etc. replacements
494
499
495 * OInspect.py, ipy_which.py: improve %which and obj? for callable
500 * OInspect.py, ipy_which.py: improve %which and obj? for callable
496 aliases
501 aliases
497
502
498 2007-09-04 Ville Vainio <vivainio@gmail.com>
503 2007-09-04 Ville Vainio <vivainio@gmail.com>
499
504
500 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
505 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
501 Relicensed under BSD with the authors approval.
506 Relicensed under BSD with the authors approval.
502
507
503 * ipmaker.py, usage.py: Remove %magic from default banner, improve
508 * ipmaker.py, usage.py: Remove %magic from default banner, improve
504 %quickref
509 %quickref
505
510
506 2007-09-03 Ville Vainio <vivainio@gmail.com>
511 2007-09-03 Ville Vainio <vivainio@gmail.com>
507
512
508 * Magic.py: %time now passes expression through prefilter,
513 * Magic.py: %time now passes expression through prefilter,
509 allowing IPython syntax.
514 allowing IPython syntax.
510
515
511 2007-09-01 Ville Vainio <vivainio@gmail.com>
516 2007-09-01 Ville Vainio <vivainio@gmail.com>
512
517
513 * ipmaker.py: Always show full traceback when newstyle config fails
518 * ipmaker.py: Always show full traceback when newstyle config fails
514
519
515 2007-08-27 Ville Vainio <vivainio@gmail.com>
520 2007-08-27 Ville Vainio <vivainio@gmail.com>
516
521
517 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
522 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
518
523
519 2007-08-26 Ville Vainio <vivainio@gmail.com>
524 2007-08-26 Ville Vainio <vivainio@gmail.com>
520
525
521 * ipmaker.py: Command line args have the highest priority again
526 * ipmaker.py: Command line args have the highest priority again
522
527
523 * iplib.py, ipmaker.py: -i command line argument now behaves as in
528 * iplib.py, ipmaker.py: -i command line argument now behaves as in
524 normal python, i.e. leaves the IPython session running after -c
529 normal python, i.e. leaves the IPython session running after -c
525 command or running a batch file from command line.
530 command or running a batch file from command line.
526
531
527 2007-08-22 Ville Vainio <vivainio@gmail.com>
532 2007-08-22 Ville Vainio <vivainio@gmail.com>
528
533
529 * iplib.py: no extra empty (last) line in raw hist w/ multiline
534 * iplib.py: no extra empty (last) line in raw hist w/ multiline
530 statements
535 statements
531
536
532 * logger.py: Fix bug where blank lines in history were not
537 * logger.py: Fix bug where blank lines in history were not
533 added until AFTER adding the current line; translated and raw
538 added until AFTER adding the current line; translated and raw
534 history should finally be in sync with prompt now.
539 history should finally be in sync with prompt now.
535
540
536 * ipy_completers.py: quick_completer now makes it easy to create
541 * ipy_completers.py: quick_completer now makes it easy to create
537 trivial custom completers
542 trivial custom completers
538
543
539 * clearcmd.py: shadow history compression & erasing, fixed input hist
544 * clearcmd.py: shadow history compression & erasing, fixed input hist
540 clearing.
545 clearing.
541
546
542 * envpersist.py, history.py: %env (sh profile only), %hist completers
547 * envpersist.py, history.py: %env (sh profile only), %hist completers
543
548
544 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
549 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
545 term title now include the drive letter, and always use / instead of
550 term title now include the drive letter, and always use / instead of
546 os.sep (as per recommended approach for win32 ipython in general).
551 os.sep (as per recommended approach for win32 ipython in general).
547
552
548 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
553 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
549 plain python scripts from ipykit command line by running
554 plain python scripts from ipykit command line by running
550 "py myscript.py", even w/o installed python.
555 "py myscript.py", even w/o installed python.
551
556
552 2007-08-21 Ville Vainio <vivainio@gmail.com>
557 2007-08-21 Ville Vainio <vivainio@gmail.com>
553
558
554 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
559 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
555 (for backwards compatibility)
560 (for backwards compatibility)
556
561
557 * history.py: switch back to %hist -t from %hist -r as default.
562 * history.py: switch back to %hist -t from %hist -r as default.
558 At least until raw history is fixed for good.
563 At least until raw history is fixed for good.
559
564
560 2007-08-20 Ville Vainio <vivainio@gmail.com>
565 2007-08-20 Ville Vainio <vivainio@gmail.com>
561
566
562 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
567 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
563 locate alias redeclarations etc. Also, avoid handling
568 locate alias redeclarations etc. Also, avoid handling
564 _ip.IP.alias_table directly, prefer using _ip.defalias.
569 _ip.IP.alias_table directly, prefer using _ip.defalias.
565
570
566
571
567 2007-08-15 Ville Vainio <vivainio@gmail.com>
572 2007-08-15 Ville Vainio <vivainio@gmail.com>
568
573
569 * prefilter.py: ! is now always served first
574 * prefilter.py: ! is now always served first
570
575
571 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
576 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
572
577
573 * IPython/iplib.py (safe_execfile): fix the SystemExit
578 * IPython/iplib.py (safe_execfile): fix the SystemExit
574 auto-suppression code to work in Python2.4 (the internal structure
579 auto-suppression code to work in Python2.4 (the internal structure
575 of that exception changed and I'd only tested the code with 2.5).
580 of that exception changed and I'd only tested the code with 2.5).
576 Bug reported by a SciPy attendee.
581 Bug reported by a SciPy attendee.
577
582
578 2007-08-13 Ville Vainio <vivainio@gmail.com>
583 2007-08-13 Ville Vainio <vivainio@gmail.com>
579
584
580 * prefilter.py: reverted !c:/bin/foo fix, made % in
585 * prefilter.py: reverted !c:/bin/foo fix, made % in
581 multiline specials work again
586 multiline specials work again
582
587
583 2007-08-13 Ville Vainio <vivainio@gmail.com>
588 2007-08-13 Ville Vainio <vivainio@gmail.com>
584
589
585 * prefilter.py: Take more care to special-case !, so that
590 * prefilter.py: Take more care to special-case !, so that
586 !c:/bin/foo.exe works.
591 !c:/bin/foo.exe works.
587
592
588 * setup.py: if we are building eggs, strip all docs and
593 * setup.py: if we are building eggs, strip all docs and
589 examples (it doesn't make sense to bytecompile examples,
594 examples (it doesn't make sense to bytecompile examples,
590 and docs would be in an awkward place anyway).
595 and docs would be in an awkward place anyway).
591
596
592 * Ryan Krauss' patch fixes start menu shortcuts when IPython
597 * Ryan Krauss' patch fixes start menu shortcuts when IPython
593 is installed into a directory that has spaces in the name.
598 is installed into a directory that has spaces in the name.
594
599
595 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
600 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
596
601
597 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
602 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
598 doctest profile and %doctest_mode, so they actually generate the
603 doctest profile and %doctest_mode, so they actually generate the
599 blank lines needed by doctest to separate individual tests.
604 blank lines needed by doctest to separate individual tests.
600
605
601 * IPython/iplib.py (safe_execfile): modify so that running code
606 * IPython/iplib.py (safe_execfile): modify so that running code
602 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
607 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
603 doesn't get a printed traceback. Any other value in sys.exit(),
608 doesn't get a printed traceback. Any other value in sys.exit(),
604 including the empty call, still generates a traceback. This
609 including the empty call, still generates a traceback. This
605 enables use of %run without having to pass '-e' for codes that
610 enables use of %run without having to pass '-e' for codes that
606 correctly set the exit status flag.
611 correctly set the exit status flag.
607
612
608 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
613 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
609
614
610 * IPython/iplib.py (InteractiveShell.post_config_initialization):
615 * IPython/iplib.py (InteractiveShell.post_config_initialization):
611 fix problems with doctests failing when run inside IPython due to
616 fix problems with doctests failing when run inside IPython due to
612 IPython's modifications of sys.displayhook.
617 IPython's modifications of sys.displayhook.
613
618
614 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
619 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
615
620
616 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
621 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
617 a string with names.
622 a string with names.
618
623
619 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
624 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
620
625
621 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
626 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
622 magic to toggle on/off the doctest pasting support without having
627 magic to toggle on/off the doctest pasting support without having
623 to leave a session to switch to a separate profile.
628 to leave a session to switch to a separate profile.
624
629
625 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
630 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
626
631
627 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
632 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
628 introduce a blank line between inputs, to conform to doctest
633 introduce a blank line between inputs, to conform to doctest
629 requirements.
634 requirements.
630
635
631 * IPython/OInspect.py (Inspector.pinfo): fix another part where
636 * IPython/OInspect.py (Inspector.pinfo): fix another part where
632 auto-generated docstrings for new-style classes were showing up.
637 auto-generated docstrings for new-style classes were showing up.
633
638
634 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
639 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
635
640
636 * api_changes: Add new file to track backward-incompatible
641 * api_changes: Add new file to track backward-incompatible
637 user-visible changes.
642 user-visible changes.
638
643
639 2007-08-06 Ville Vainio <vivainio@gmail.com>
644 2007-08-06 Ville Vainio <vivainio@gmail.com>
640
645
641 * ipmaker.py: fix bug where user_config_ns didn't exist at all
646 * ipmaker.py: fix bug where user_config_ns didn't exist at all
642 before all the config files were handled.
647 before all the config files were handled.
643
648
644 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
649 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
645
650
646 * IPython/irunner.py (RunnerFactory): Add new factory class for
651 * IPython/irunner.py (RunnerFactory): Add new factory class for
647 creating reusable runners based on filenames.
652 creating reusable runners based on filenames.
648
653
649 * IPython/Extensions/ipy_profile_doctest.py: New profile for
654 * IPython/Extensions/ipy_profile_doctest.py: New profile for
650 doctest support. It sets prompts/exceptions as similar to
655 doctest support. It sets prompts/exceptions as similar to
651 standard Python as possible, so that ipython sessions in this
656 standard Python as possible, so that ipython sessions in this
652 profile can be easily pasted as doctests with minimal
657 profile can be easily pasted as doctests with minimal
653 modifications. It also enables pasting of doctests from external
658 modifications. It also enables pasting of doctests from external
654 sources (even if they have leading whitespace), so that you can
659 sources (even if they have leading whitespace), so that you can
655 rerun doctests from existing sources.
660 rerun doctests from existing sources.
656
661
657 * IPython/iplib.py (_prefilter): fix a buglet where after entering
662 * IPython/iplib.py (_prefilter): fix a buglet where after entering
658 some whitespace, the prompt would become a continuation prompt
663 some whitespace, the prompt would become a continuation prompt
659 with no way of exiting it other than Ctrl-C. This fix brings us
664 with no way of exiting it other than Ctrl-C. This fix brings us
660 into conformity with how the default python prompt works.
665 into conformity with how the default python prompt works.
661
666
662 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
667 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
663 Add support for pasting not only lines that start with '>>>', but
668 Add support for pasting not only lines that start with '>>>', but
664 also with ' >>>'. That is, arbitrary whitespace can now precede
669 also with ' >>>'. That is, arbitrary whitespace can now precede
665 the prompts. This makes the system useful for pasting doctests
670 the prompts. This makes the system useful for pasting doctests
666 from docstrings back into a normal session.
671 from docstrings back into a normal session.
667
672
668 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
673 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
669
674
670 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
675 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
671 r1357, which had killed multiple invocations of an embedded
676 r1357, which had killed multiple invocations of an embedded
672 ipython (this means that example-embed has been broken for over 1
677 ipython (this means that example-embed has been broken for over 1
673 year!!!). Rather than possibly breaking the batch stuff for which
678 year!!!). Rather than possibly breaking the batch stuff for which
674 the code in iplib.py/interact was introduced, I worked around the
679 the code in iplib.py/interact was introduced, I worked around the
675 problem in the embedding class in Shell.py. We really need a
680 problem in the embedding class in Shell.py. We really need a
676 bloody test suite for this code, I'm sick of finding stuff that
681 bloody test suite for this code, I'm sick of finding stuff that
677 used to work breaking left and right every time I use an old
682 used to work breaking left and right every time I use an old
678 feature I hadn't touched in a few months.
683 feature I hadn't touched in a few months.
679 (kill_embedded): Add a new magic that only shows up in embedded
684 (kill_embedded): Add a new magic that only shows up in embedded
680 mode, to allow users to permanently deactivate an embedded instance.
685 mode, to allow users to permanently deactivate an embedded instance.
681
686
682 2007-08-01 Ville Vainio <vivainio@gmail.com>
687 2007-08-01 Ville Vainio <vivainio@gmail.com>
683
688
684 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
689 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
685 history gets out of sync on runlines (e.g. when running macros).
690 history gets out of sync on runlines (e.g. when running macros).
686
691
687 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
692 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
688
693
689 * IPython/Magic.py (magic_colors): fix win32-related error message
694 * IPython/Magic.py (magic_colors): fix win32-related error message
690 that could appear under *nix when readline was missing. Patch by
695 that could appear under *nix when readline was missing. Patch by
691 Scott Jackson, closes #175.
696 Scott Jackson, closes #175.
692
697
693 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
698 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
694
699
695 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
700 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
696 completer that it traits-aware, so that traits objects don't show
701 completer that it traits-aware, so that traits objects don't show
697 all of their internal attributes all the time.
702 all of their internal attributes all the time.
698
703
699 * IPython/genutils.py (dir2): moved this code from inside
704 * IPython/genutils.py (dir2): moved this code from inside
700 completer.py to expose it publicly, so I could use it in the
705 completer.py to expose it publicly, so I could use it in the
701 wildcards bugfix.
706 wildcards bugfix.
702
707
703 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
708 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
704 Stefan with Traits.
709 Stefan with Traits.
705
710
706 * IPython/completer.py (Completer.attr_matches): change internal
711 * IPython/completer.py (Completer.attr_matches): change internal
707 var name from 'object' to 'obj', since 'object' is now a builtin
712 var name from 'object' to 'obj', since 'object' is now a builtin
708 and this can lead to weird bugs if reusing this code elsewhere.
713 and this can lead to weird bugs if reusing this code elsewhere.
709
714
710 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
715 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
711
716
712 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
717 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
713 'foo?' and update the code to prevent printing of default
718 'foo?' and update the code to prevent printing of default
714 docstrings that started appearing after I added support for
719 docstrings that started appearing after I added support for
715 new-style classes. The approach I'm using isn't ideal (I just
720 new-style classes. The approach I'm using isn't ideal (I just
716 special-case those strings) but I'm not sure how to more robustly
721 special-case those strings) but I'm not sure how to more robustly
717 differentiate between truly user-written strings and Python's
722 differentiate between truly user-written strings and Python's
718 automatic ones.
723 automatic ones.
719
724
720 2007-07-09 Ville Vainio <vivainio@gmail.com>
725 2007-07-09 Ville Vainio <vivainio@gmail.com>
721
726
722 * completer.py: Applied Matthew Neeley's patch:
727 * completer.py: Applied Matthew Neeley's patch:
723 Dynamic attributes from trait_names and _getAttributeNames are added
728 Dynamic attributes from trait_names and _getAttributeNames are added
724 to the list of tab completions, but when this happens, the attribute
729 to the list of tab completions, but when this happens, the attribute
725 list is turned into a set, so the attributes are unordered when
730 list is turned into a set, so the attributes are unordered when
726 printed, which makes it hard to find the right completion. This patch
731 printed, which makes it hard to find the right completion. This patch
727 turns this set back into a list and sort it.
732 turns this set back into a list and sort it.
728
733
729 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
734 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
730
735
731 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
736 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
732 classes in various inspector functions.
737 classes in various inspector functions.
733
738
734 2007-06-28 Ville Vainio <vivainio@gmail.com>
739 2007-06-28 Ville Vainio <vivainio@gmail.com>
735
740
736 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
741 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
737 Implement "shadow" namespace, and callable aliases that reside there.
742 Implement "shadow" namespace, and callable aliases that reside there.
738 Use them by:
743 Use them by:
739
744
740 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
745 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
741
746
742 foo hello world
747 foo hello world
743 (gets translated to:)
748 (gets translated to:)
744 _sh.foo(r"""hello world""")
749 _sh.foo(r"""hello world""")
745
750
746 In practice, this kind of alias can take the role of a magic function
751 In practice, this kind of alias can take the role of a magic function
747
752
748 * New generic inspect_object, called on obj? and obj??
753 * New generic inspect_object, called on obj? and obj??
749
754
750 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
755 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
751
756
752 * IPython/ultraTB.py (findsource): fix a problem with
757 * IPython/ultraTB.py (findsource): fix a problem with
753 inspect.getfile that can cause crashes during traceback construction.
758 inspect.getfile that can cause crashes during traceback construction.
754
759
755 2007-06-14 Ville Vainio <vivainio@gmail.com>
760 2007-06-14 Ville Vainio <vivainio@gmail.com>
756
761
757 * iplib.py (handle_auto): Try to use ascii for printing "--->"
762 * iplib.py (handle_auto): Try to use ascii for printing "--->"
758 autocall rewrite indication, becausesometimes unicode fails to print
763 autocall rewrite indication, becausesometimes unicode fails to print
759 properly (and you get ' - - - '). Use plain uncoloured ---> for
764 properly (and you get ' - - - '). Use plain uncoloured ---> for
760 unicode.
765 unicode.
761
766
762 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
767 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
763
768
764 . pickleshare 'hash' commands (hget, hset, hcompress,
769 . pickleshare 'hash' commands (hget, hset, hcompress,
765 hdict) for efficient shadow history storage.
770 hdict) for efficient shadow history storage.
766
771
767 2007-06-13 Ville Vainio <vivainio@gmail.com>
772 2007-06-13 Ville Vainio <vivainio@gmail.com>
768
773
769 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
774 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
770 Added kw arg 'interactive', tell whether vars should be visible
775 Added kw arg 'interactive', tell whether vars should be visible
771 with %whos.
776 with %whos.
772
777
773 2007-06-11 Ville Vainio <vivainio@gmail.com>
778 2007-06-11 Ville Vainio <vivainio@gmail.com>
774
779
775 * pspersistence.py, Magic.py, iplib.py: directory history now saved
780 * pspersistence.py, Magic.py, iplib.py: directory history now saved
776 to db
781 to db
777
782
778 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
783 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
779 Also, it exits IPython immediately after evaluating the command (just like
784 Also, it exits IPython immediately after evaluating the command (just like
780 std python)
785 std python)
781
786
782 2007-06-05 Walter Doerwald <walter@livinglogic.de>
787 2007-06-05 Walter Doerwald <walter@livinglogic.de>
783
788
784 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
789 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
785 Python string and captures the output. (Idea and original patch by
790 Python string and captures the output. (Idea and original patch by
786 Stefan van der Walt)
791 Stefan van der Walt)
787
792
788 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
793 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
789
794
790 * IPython/ultraTB.py (VerboseTB.text): update printing of
795 * IPython/ultraTB.py (VerboseTB.text): update printing of
791 exception types for Python 2.5 (now all exceptions in the stdlib
796 exception types for Python 2.5 (now all exceptions in the stdlib
792 are new-style classes).
797 are new-style classes).
793
798
794 2007-05-31 Walter Doerwald <walter@livinglogic.de>
799 2007-05-31 Walter Doerwald <walter@livinglogic.de>
795
800
796 * IPython/Extensions/igrid.py: Add new commands refresh and
801 * IPython/Extensions/igrid.py: Add new commands refresh and
797 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
802 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
798 the iterator once (refresh) or after every x seconds (refresh_timer).
803 the iterator once (refresh) or after every x seconds (refresh_timer).
799 Add a working implementation of "searchexpression", where the text
804 Add a working implementation of "searchexpression", where the text
800 entered is not the text to search for, but an expression that must
805 entered is not the text to search for, but an expression that must
801 be true. Added display of shortcuts to the menu. Added commands "pickinput"
806 be true. Added display of shortcuts to the menu. Added commands "pickinput"
802 and "pickinputattr" that put the object or attribute under the cursor
807 and "pickinputattr" that put the object or attribute under the cursor
803 in the input line. Split the statusbar to be able to display the currently
808 in the input line. Split the statusbar to be able to display the currently
804 active refresh interval. (Patch by Nik Tautenhahn)
809 active refresh interval. (Patch by Nik Tautenhahn)
805
810
806 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
811 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
807
812
808 * fixing set_term_title to use ctypes as default
813 * fixing set_term_title to use ctypes as default
809
814
810 * fixing set_term_title fallback to work when curent dir
815 * fixing set_term_title fallback to work when curent dir
811 is on a windows network share
816 is on a windows network share
812
817
813 2007-05-28 Ville Vainio <vivainio@gmail.com>
818 2007-05-28 Ville Vainio <vivainio@gmail.com>
814
819
815 * %cpaste: strip + with > from left (diffs).
820 * %cpaste: strip + with > from left (diffs).
816
821
817 * iplib.py: Fix crash when readline not installed
822 * iplib.py: Fix crash when readline not installed
818
823
819 2007-05-26 Ville Vainio <vivainio@gmail.com>
824 2007-05-26 Ville Vainio <vivainio@gmail.com>
820
825
821 * generics.py: introduce easy to extend result_display generic
826 * generics.py: introduce easy to extend result_display generic
822 function (using simplegeneric.py).
827 function (using simplegeneric.py).
823
828
824 * Fixed the append functionality of %set.
829 * Fixed the append functionality of %set.
825
830
826 2007-05-25 Ville Vainio <vivainio@gmail.com>
831 2007-05-25 Ville Vainio <vivainio@gmail.com>
827
832
828 * New magic: %rep (fetch / run old commands from history)
833 * New magic: %rep (fetch / run old commands from history)
829
834
830 * New extension: mglob (%mglob magic), for powerful glob / find /filter
835 * New extension: mglob (%mglob magic), for powerful glob / find /filter
831 like functionality
836 like functionality
832
837
833 % maghistory.py: %hist -g PATTERM greps the history for pattern
838 % maghistory.py: %hist -g PATTERM greps the history for pattern
834
839
835 2007-05-24 Walter Doerwald <walter@livinglogic.de>
840 2007-05-24 Walter Doerwald <walter@livinglogic.de>
836
841
837 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
842 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
838 browse the IPython input history
843 browse the IPython input history
839
844
840 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
845 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
841 (mapped to "i") can be used to put the object under the curser in the input
846 (mapped to "i") can be used to put the object under the curser in the input
842 line. pickinputattr (mapped to "I") does the same for the attribute under
847 line. pickinputattr (mapped to "I") does the same for the attribute under
843 the cursor.
848 the cursor.
844
849
845 2007-05-24 Ville Vainio <vivainio@gmail.com>
850 2007-05-24 Ville Vainio <vivainio@gmail.com>
846
851
847 * Grand magic cleansing (changeset [2380]):
852 * Grand magic cleansing (changeset [2380]):
848
853
849 * Introduce ipy_legacy.py where the following magics were
854 * Introduce ipy_legacy.py where the following magics were
850 moved:
855 moved:
851
856
852 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
857 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
853
858
854 If you need them, either use default profile or "import ipy_legacy"
859 If you need them, either use default profile or "import ipy_legacy"
855 in your ipy_user_conf.py
860 in your ipy_user_conf.py
856
861
857 * Move sh and scipy profile to Extensions from UserConfig. this implies
862 * Move sh and scipy profile to Extensions from UserConfig. this implies
858 you should not edit them, but you don't need to run %upgrade when
863 you should not edit them, but you don't need to run %upgrade when
859 upgrading IPython anymore.
864 upgrading IPython anymore.
860
865
861 * %hist/%history now operates in "raw" mode by default. To get the old
866 * %hist/%history now operates in "raw" mode by default. To get the old
862 behaviour, run '%hist -n' (native mode).
867 behaviour, run '%hist -n' (native mode).
863
868
864 * split ipy_stock_completers.py to ipy_stock_completers.py and
869 * split ipy_stock_completers.py to ipy_stock_completers.py and
865 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
870 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
866 installed as default.
871 installed as default.
867
872
868 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
873 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
869 handling.
874 handling.
870
875
871 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
876 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
872 input if readline is available.
877 input if readline is available.
873
878
874 2007-05-23 Ville Vainio <vivainio@gmail.com>
879 2007-05-23 Ville Vainio <vivainio@gmail.com>
875
880
876 * macro.py: %store uses __getstate__ properly
881 * macro.py: %store uses __getstate__ properly
877
882
878 * exesetup.py: added new setup script for creating
883 * exesetup.py: added new setup script for creating
879 standalone IPython executables with py2exe (i.e.
884 standalone IPython executables with py2exe (i.e.
880 no python installation required).
885 no python installation required).
881
886
882 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
887 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
883 its place.
888 its place.
884
889
885 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
890 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
886
891
887 2007-05-21 Ville Vainio <vivainio@gmail.com>
892 2007-05-21 Ville Vainio <vivainio@gmail.com>
888
893
889 * platutil_win32.py (set_term_title): handle
894 * platutil_win32.py (set_term_title): handle
890 failure of 'title' system call properly.
895 failure of 'title' system call properly.
891
896
892 2007-05-17 Walter Doerwald <walter@livinglogic.de>
897 2007-05-17 Walter Doerwald <walter@livinglogic.de>
893
898
894 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
899 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
895 (Bug detected by Paul Mueller).
900 (Bug detected by Paul Mueller).
896
901
897 2007-05-16 Ville Vainio <vivainio@gmail.com>
902 2007-05-16 Ville Vainio <vivainio@gmail.com>
898
903
899 * ipy_profile_sci.py, ipython_win_post_install.py: Create
904 * ipy_profile_sci.py, ipython_win_post_install.py: Create
900 new "sci" profile, effectively a modern version of the old
905 new "sci" profile, effectively a modern version of the old
901 "scipy" profile (which is now slated for deprecation).
906 "scipy" profile (which is now slated for deprecation).
902
907
903 2007-05-15 Ville Vainio <vivainio@gmail.com>
908 2007-05-15 Ville Vainio <vivainio@gmail.com>
904
909
905 * pycolorize.py, pycolor.1: Paul Mueller's patches that
910 * pycolorize.py, pycolor.1: Paul Mueller's patches that
906 make pycolorize read input from stdin when run without arguments.
911 make pycolorize read input from stdin when run without arguments.
907
912
908 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
913 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
909
914
910 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
915 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
911 it in sh profile (instead of ipy_system_conf.py).
916 it in sh profile (instead of ipy_system_conf.py).
912
917
913 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
918 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
914 aliases are now lower case on windows (MyCommand.exe => mycommand).
919 aliases are now lower case on windows (MyCommand.exe => mycommand).
915
920
916 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
921 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
917 Macros are now callable objects that inherit from ipapi.IPyAutocall,
922 Macros are now callable objects that inherit from ipapi.IPyAutocall,
918 i.e. get autocalled regardless of system autocall setting.
923 i.e. get autocalled regardless of system autocall setting.
919
924
920 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
925 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
921
926
922 * IPython/rlineimpl.py: check for clear_history in readline and
927 * IPython/rlineimpl.py: check for clear_history in readline and
923 make it a dummy no-op if not available. This function isn't
928 make it a dummy no-op if not available. This function isn't
924 guaranteed to be in the API and appeared in Python 2.4, so we need
929 guaranteed to be in the API and appeared in Python 2.4, so we need
925 to check it ourselves. Also, clean up this file quite a bit.
930 to check it ourselves. Also, clean up this file quite a bit.
926
931
927 * ipython.1: update man page and full manual with information
932 * ipython.1: update man page and full manual with information
928 about threads (remove outdated warning). Closes #151.
933 about threads (remove outdated warning). Closes #151.
929
934
930 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
935 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
931
936
932 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
937 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
933 in trunk (note that this made it into the 0.8.1 release already,
938 in trunk (note that this made it into the 0.8.1 release already,
934 but the changelogs didn't get coordinated). Many thanks to Gael
939 but the changelogs didn't get coordinated). Many thanks to Gael
935 Varoquaux <gael.varoquaux-AT-normalesup.org>
940 Varoquaux <gael.varoquaux-AT-normalesup.org>
936
941
937 2007-05-09 *** Released version 0.8.1
942 2007-05-09 *** Released version 0.8.1
938
943
939 2007-05-10 Walter Doerwald <walter@livinglogic.de>
944 2007-05-10 Walter Doerwald <walter@livinglogic.de>
940
945
941 * IPython/Extensions/igrid.py: Incorporate html help into
946 * IPython/Extensions/igrid.py: Incorporate html help into
942 the module, so we don't have to search for the file.
947 the module, so we don't have to search for the file.
943
948
944 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
949 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
945
950
946 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
951 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
947
952
948 2007-04-30 Ville Vainio <vivainio@gmail.com>
953 2007-04-30 Ville Vainio <vivainio@gmail.com>
949
954
950 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
955 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
951 user has illegal (non-ascii) home directory name
956 user has illegal (non-ascii) home directory name
952
957
953 2007-04-27 Ville Vainio <vivainio@gmail.com>
958 2007-04-27 Ville Vainio <vivainio@gmail.com>
954
959
955 * platutils_win32.py: implement set_term_title for windows
960 * platutils_win32.py: implement set_term_title for windows
956
961
957 * Update version number
962 * Update version number
958
963
959 * ipy_profile_sh.py: more informative prompt (2 dir levels)
964 * ipy_profile_sh.py: more informative prompt (2 dir levels)
960
965
961 2007-04-26 Walter Doerwald <walter@livinglogic.de>
966 2007-04-26 Walter Doerwald <walter@livinglogic.de>
962
967
963 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
968 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
964 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
969 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
965 bug discovered by Ville).
970 bug discovered by Ville).
966
971
967 2007-04-26 Ville Vainio <vivainio@gmail.com>
972 2007-04-26 Ville Vainio <vivainio@gmail.com>
968
973
969 * Extensions/ipy_completers.py: Olivier's module completer now
974 * Extensions/ipy_completers.py: Olivier's module completer now
970 saves the list of root modules if it takes > 4 secs on the first run.
975 saves the list of root modules if it takes > 4 secs on the first run.
971
976
972 * Magic.py (%rehashx): %rehashx now clears the completer cache
977 * Magic.py (%rehashx): %rehashx now clears the completer cache
973
978
974
979
975 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
980 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
976
981
977 * ipython.el: fix incorrect color scheme, reported by Stefan.
982 * ipython.el: fix incorrect color scheme, reported by Stefan.
978 Closes #149.
983 Closes #149.
979
984
980 * IPython/PyColorize.py (Parser.format2): fix state-handling
985 * IPython/PyColorize.py (Parser.format2): fix state-handling
981 logic. I still don't like how that code handles state, but at
986 logic. I still don't like how that code handles state, but at
982 least now it should be correct, if inelegant. Closes #146.
987 least now it should be correct, if inelegant. Closes #146.
983
988
984 2007-04-25 Ville Vainio <vivainio@gmail.com>
989 2007-04-25 Ville Vainio <vivainio@gmail.com>
985
990
986 * Extensions/ipy_which.py: added extension for %which magic, works
991 * Extensions/ipy_which.py: added extension for %which magic, works
987 a lot like unix 'which' but also finds and expands aliases, and
992 a lot like unix 'which' but also finds and expands aliases, and
988 allows wildcards.
993 allows wildcards.
989
994
990 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
995 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
991 as opposed to returning nothing.
996 as opposed to returning nothing.
992
997
993 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
998 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
994 ipy_stock_completers on default profile, do import on sh profile.
999 ipy_stock_completers on default profile, do import on sh profile.
995
1000
996 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1001 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
997
1002
998 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
1003 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
999 like ipython.py foo.py which raised a IndexError.
1004 like ipython.py foo.py which raised a IndexError.
1000
1005
1001 2007-04-21 Ville Vainio <vivainio@gmail.com>
1006 2007-04-21 Ville Vainio <vivainio@gmail.com>
1002
1007
1003 * Extensions/ipy_extutil.py: added extension to manage other ipython
1008 * Extensions/ipy_extutil.py: added extension to manage other ipython
1004 extensions. Now only supports 'ls' == list extensions.
1009 extensions. Now only supports 'ls' == list extensions.
1005
1010
1006 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
1011 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
1007
1012
1008 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
1013 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
1009 would prevent use of the exception system outside of a running
1014 would prevent use of the exception system outside of a running
1010 IPython instance.
1015 IPython instance.
1011
1016
1012 2007-04-20 Ville Vainio <vivainio@gmail.com>
1017 2007-04-20 Ville Vainio <vivainio@gmail.com>
1013
1018
1014 * Extensions/ipy_render.py: added extension for easy
1019 * Extensions/ipy_render.py: added extension for easy
1015 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
1020 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
1016 'Iptl' template notation,
1021 'Iptl' template notation,
1017
1022
1018 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
1023 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
1019 safer & faster 'import' completer.
1024 safer & faster 'import' completer.
1020
1025
1021 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
1026 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
1022 and _ip.defalias(name, command).
1027 and _ip.defalias(name, command).
1023
1028
1024 * Extensions/ipy_exportdb.py: New extension for exporting all the
1029 * Extensions/ipy_exportdb.py: New extension for exporting all the
1025 %store'd data in a portable format (normal ipapi calls like
1030 %store'd data in a portable format (normal ipapi calls like
1026 defmacro() etc.)
1031 defmacro() etc.)
1027
1032
1028 2007-04-19 Ville Vainio <vivainio@gmail.com>
1033 2007-04-19 Ville Vainio <vivainio@gmail.com>
1029
1034
1030 * upgrade_dir.py: skip junk files like *.pyc
1035 * upgrade_dir.py: skip junk files like *.pyc
1031
1036
1032 * Release.py: version number to 0.8.1
1037 * Release.py: version number to 0.8.1
1033
1038
1034 2007-04-18 Ville Vainio <vivainio@gmail.com>
1039 2007-04-18 Ville Vainio <vivainio@gmail.com>
1035
1040
1036 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
1041 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
1037 and later on win32.
1042 and later on win32.
1038
1043
1039 2007-04-16 Ville Vainio <vivainio@gmail.com>
1044 2007-04-16 Ville Vainio <vivainio@gmail.com>
1040
1045
1041 * iplib.py (showtraceback): Do not crash when running w/o readline.
1046 * iplib.py (showtraceback): Do not crash when running w/o readline.
1042
1047
1043 2007-04-12 Walter Doerwald <walter@livinglogic.de>
1048 2007-04-12 Walter Doerwald <walter@livinglogic.de>
1044
1049
1045 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
1050 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
1046 sorted (case sensitive with files and dirs mixed).
1051 sorted (case sensitive with files and dirs mixed).
1047
1052
1048 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
1053 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
1049
1054
1050 * IPython/Release.py (version): Open trunk for 0.8.1 development.
1055 * IPython/Release.py (version): Open trunk for 0.8.1 development.
1051
1056
1052 2007-04-10 *** Released version 0.8.0
1057 2007-04-10 *** Released version 0.8.0
1053
1058
1054 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
1059 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
1055
1060
1056 * Tag 0.8.0 for release.
1061 * Tag 0.8.0 for release.
1057
1062
1058 * IPython/iplib.py (reloadhist): add API function to cleanly
1063 * IPython/iplib.py (reloadhist): add API function to cleanly
1059 reload the readline history, which was growing inappropriately on
1064 reload the readline history, which was growing inappropriately on
1060 every %run call.
1065 every %run call.
1061
1066
1062 * win32_manual_post_install.py (run): apply last part of Nicolas
1067 * win32_manual_post_install.py (run): apply last part of Nicolas
1063 Pernetty's patch (I'd accidentally applied it in a different
1068 Pernetty's patch (I'd accidentally applied it in a different
1064 directory and this particular file didn't get patched).
1069 directory and this particular file didn't get patched).
1065
1070
1066 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
1071 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
1067
1072
1068 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
1073 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
1069 find the main thread id and use the proper API call. Thanks to
1074 find the main thread id and use the proper API call. Thanks to
1070 Stefan for the fix.
1075 Stefan for the fix.
1071
1076
1072 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
1077 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
1073 unit tests to reflect fixed ticket #52, and add more tests sent by
1078 unit tests to reflect fixed ticket #52, and add more tests sent by
1074 him.
1079 him.
1075
1080
1076 * IPython/iplib.py (raw_input): restore the readline completer
1081 * IPython/iplib.py (raw_input): restore the readline completer
1077 state on every input, in case third-party code messed it up.
1082 state on every input, in case third-party code messed it up.
1078 (_prefilter): revert recent addition of early-escape checks which
1083 (_prefilter): revert recent addition of early-escape checks which
1079 prevent many valid alias calls from working.
1084 prevent many valid alias calls from working.
1080
1085
1081 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
1086 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
1082 flag for sigint handler so we don't run a full signal() call on
1087 flag for sigint handler so we don't run a full signal() call on
1083 each runcode access.
1088 each runcode access.
1084
1089
1085 * IPython/Magic.py (magic_whos): small improvement to diagnostic
1090 * IPython/Magic.py (magic_whos): small improvement to diagnostic
1086 message.
1091 message.
1087
1092
1088 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1093 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1089
1094
1090 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
1095 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
1091 asynchronous exceptions working, i.e., Ctrl-C can actually
1096 asynchronous exceptions working, i.e., Ctrl-C can actually
1092 interrupt long-running code in the multithreaded shells.
1097 interrupt long-running code in the multithreaded shells.
1093
1098
1094 This is using Tomer Filiba's great ctypes-based trick:
1099 This is using Tomer Filiba's great ctypes-based trick:
1095 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
1100 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
1096 this in the past, but hadn't been able to make it work before. So
1101 this in the past, but hadn't been able to make it work before. So
1097 far it looks like it's actually running, but this needs more
1102 far it looks like it's actually running, but this needs more
1098 testing. If it really works, I'll be *very* happy, and we'll owe
1103 testing. If it really works, I'll be *very* happy, and we'll owe
1099 a huge thank you to Tomer. My current implementation is ugly,
1104 a huge thank you to Tomer. My current implementation is ugly,
1100 hackish and uses nasty globals, but I don't want to try and clean
1105 hackish and uses nasty globals, but I don't want to try and clean
1101 anything up until we know if it actually works.
1106 anything up until we know if it actually works.
1102
1107
1103 NOTE: this feature needs ctypes to work. ctypes is included in
1108 NOTE: this feature needs ctypes to work. ctypes is included in
1104 Python2.5, but 2.4 users will need to manually install it. This
1109 Python2.5, but 2.4 users will need to manually install it. This
1105 feature makes multi-threaded shells so much more usable that it's
1110 feature makes multi-threaded shells so much more usable that it's
1106 a minor price to pay (ctypes is very easy to install, already a
1111 a minor price to pay (ctypes is very easy to install, already a
1107 requirement for win32 and available in major linux distros).
1112 requirement for win32 and available in major linux distros).
1108
1113
1109 2007-04-04 Ville Vainio <vivainio@gmail.com>
1114 2007-04-04 Ville Vainio <vivainio@gmail.com>
1110
1115
1111 * Extensions/ipy_completers.py, ipy_stock_completers.py:
1116 * Extensions/ipy_completers.py, ipy_stock_completers.py:
1112 Moved implementations of 'bundled' completers to ipy_completers.py,
1117 Moved implementations of 'bundled' completers to ipy_completers.py,
1113 they are only enabled in ipy_stock_completers.py.
1118 they are only enabled in ipy_stock_completers.py.
1114
1119
1115 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1120 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1116
1121
1117 * IPython/PyColorize.py (Parser.format2): Fix identation of
1122 * IPython/PyColorize.py (Parser.format2): Fix identation of
1118 colorzied output and return early if color scheme is NoColor, to
1123 colorzied output and return early if color scheme is NoColor, to
1119 avoid unnecessary and expensive tokenization. Closes #131.
1124 avoid unnecessary and expensive tokenization. Closes #131.
1120
1125
1121 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
1126 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
1122
1127
1123 * IPython/Debugger.py: disable the use of pydb version 1.17. It
1128 * IPython/Debugger.py: disable the use of pydb version 1.17. It
1124 has a critical bug (a missing import that makes post-mortem not
1129 has a critical bug (a missing import that makes post-mortem not
1125 work at all). Unfortunately as of this time, this is the version
1130 work at all). Unfortunately as of this time, this is the version
1126 shipped with Ubuntu Edgy, so quite a few people have this one. I
1131 shipped with Ubuntu Edgy, so quite a few people have this one. I
1127 hope Edgy will update to a more recent package.
1132 hope Edgy will update to a more recent package.
1128
1133
1129 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
1134 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
1130
1135
1131 * IPython/iplib.py (_prefilter): close #52, second part of a patch
1136 * IPython/iplib.py (_prefilter): close #52, second part of a patch
1132 set by Stefan (only the first part had been applied before).
1137 set by Stefan (only the first part had been applied before).
1133
1138
1134 * IPython/Extensions/ipy_stock_completers.py (module_completer):
1139 * IPython/Extensions/ipy_stock_completers.py (module_completer):
1135 remove usage of the dangerous pkgutil.walk_packages(). See
1140 remove usage of the dangerous pkgutil.walk_packages(). See
1136 details in comments left in the code.
1141 details in comments left in the code.
1137
1142
1138 * IPython/Magic.py (magic_whos): add support for numpy arrays
1143 * IPython/Magic.py (magic_whos): add support for numpy arrays
1139 similar to what we had for Numeric.
1144 similar to what we had for Numeric.
1140
1145
1141 * IPython/completer.py (IPCompleter.complete): extend the
1146 * IPython/completer.py (IPCompleter.complete): extend the
1142 complete() call API to support completions by other mechanisms
1147 complete() call API to support completions by other mechanisms
1143 than readline. Closes #109.
1148 than readline. Closes #109.
1144
1149
1145 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
1150 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
1146 protect against a bug in Python's execfile(). Closes #123.
1151 protect against a bug in Python's execfile(). Closes #123.
1147
1152
1148 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
1153 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
1149
1154
1150 * IPython/iplib.py (split_user_input): ensure that when splitting
1155 * IPython/iplib.py (split_user_input): ensure that when splitting
1151 user input, the part that can be treated as a python name is pure
1156 user input, the part that can be treated as a python name is pure
1152 ascii (Python identifiers MUST be pure ascii). Part of the
1157 ascii (Python identifiers MUST be pure ascii). Part of the
1153 ongoing Unicode support work.
1158 ongoing Unicode support work.
1154
1159
1155 * IPython/Prompts.py (prompt_specials_color): Add \N for the
1160 * IPython/Prompts.py (prompt_specials_color): Add \N for the
1156 actual prompt number, without any coloring. This allows users to
1161 actual prompt number, without any coloring. This allows users to
1157 produce numbered prompts with their own colors. Added after a
1162 produce numbered prompts with their own colors. Added after a
1158 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
1163 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
1159
1164
1160 2007-03-31 Walter Doerwald <walter@livinglogic.de>
1165 2007-03-31 Walter Doerwald <walter@livinglogic.de>
1161
1166
1162 * IPython/Extensions/igrid.py: Map the return key
1167 * IPython/Extensions/igrid.py: Map the return key
1163 to enter() and shift-return to enterattr().
1168 to enter() and shift-return to enterattr().
1164
1169
1165 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
1170 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
1166
1171
1167 * IPython/Magic.py (magic_psearch): add unicode support by
1172 * IPython/Magic.py (magic_psearch): add unicode support by
1168 encoding to ascii the input, since this routine also only deals
1173 encoding to ascii the input, since this routine also only deals
1169 with valid Python names. Fixes a bug reported by Stefan.
1174 with valid Python names. Fixes a bug reported by Stefan.
1170
1175
1171 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
1176 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
1172
1177
1173 * IPython/Magic.py (_inspect): convert unicode input into ascii
1178 * IPython/Magic.py (_inspect): convert unicode input into ascii
1174 before trying to evaluate it as a Python identifier. This fixes a
1179 before trying to evaluate it as a Python identifier. This fixes a
1175 problem that the new unicode support had introduced when analyzing
1180 problem that the new unicode support had introduced when analyzing
1176 long definition lines for functions.
1181 long definition lines for functions.
1177
1182
1178 2007-03-24 Walter Doerwald <walter@livinglogic.de>
1183 2007-03-24 Walter Doerwald <walter@livinglogic.de>
1179
1184
1180 * IPython/Extensions/igrid.py: Fix picking. Using
1185 * IPython/Extensions/igrid.py: Fix picking. Using
1181 igrid with wxPython 2.6 and -wthread should work now.
1186 igrid with wxPython 2.6 and -wthread should work now.
1182 igrid.display() simply tries to create a frame without
1187 igrid.display() simply tries to create a frame without
1183 an application. Only if this fails an application is created.
1188 an application. Only if this fails an application is created.
1184
1189
1185 2007-03-23 Walter Doerwald <walter@livinglogic.de>
1190 2007-03-23 Walter Doerwald <walter@livinglogic.de>
1186
1191
1187 * IPython/Extensions/path.py: Updated to version 2.2.
1192 * IPython/Extensions/path.py: Updated to version 2.2.
1188
1193
1189 2007-03-23 Ville Vainio <vivainio@gmail.com>
1194 2007-03-23 Ville Vainio <vivainio@gmail.com>
1190
1195
1191 * iplib.py: recursive alias expansion now works better, so that
1196 * iplib.py: recursive alias expansion now works better, so that
1192 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
1197 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
1193 doesn't trip up the process, if 'd' has been aliased to 'ls'.
1198 doesn't trip up the process, if 'd' has been aliased to 'ls'.
1194
1199
1195 * Extensions/ipy_gnuglobal.py added, provides %global magic
1200 * Extensions/ipy_gnuglobal.py added, provides %global magic
1196 for users of http://www.gnu.org/software/global
1201 for users of http://www.gnu.org/software/global
1197
1202
1198 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
1203 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
1199 Closes #52. Patch by Stefan van der Walt.
1204 Closes #52. Patch by Stefan van der Walt.
1200
1205
1201 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
1206 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
1202
1207
1203 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
1208 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
1204 respect the __file__ attribute when using %run. Thanks to a bug
1209 respect the __file__ attribute when using %run. Thanks to a bug
1205 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
1210 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
1206
1211
1207 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
1212 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
1208
1213
1209 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
1214 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
1210 input. Patch sent by Stefan.
1215 input. Patch sent by Stefan.
1211
1216
1212 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1217 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1213 * IPython/Extensions/ipy_stock_completer.py
1218 * IPython/Extensions/ipy_stock_completer.py
1214 shlex_split, fix bug in shlex_split. len function
1219 shlex_split, fix bug in shlex_split. len function
1215 call was missing an if statement. Caused shlex_split to
1220 call was missing an if statement. Caused shlex_split to
1216 sometimes return "" as last element.
1221 sometimes return "" as last element.
1217
1222
1218 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
1223 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
1219
1224
1220 * IPython/completer.py
1225 * IPython/completer.py
1221 (IPCompleter.file_matches.single_dir_expand): fix a problem
1226 (IPCompleter.file_matches.single_dir_expand): fix a problem
1222 reported by Stefan, where directories containign a single subdir
1227 reported by Stefan, where directories containign a single subdir
1223 would be completed too early.
1228 would be completed too early.
1224
1229
1225 * IPython/Shell.py (_load_pylab): Make the execution of 'from
1230 * IPython/Shell.py (_load_pylab): Make the execution of 'from
1226 pylab import *' when -pylab is given be optional. A new flag,
1231 pylab import *' when -pylab is given be optional. A new flag,
1227 pylab_import_all controls this behavior, the default is True for
1232 pylab_import_all controls this behavior, the default is True for
1228 backwards compatibility.
1233 backwards compatibility.
1229
1234
1230 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
1235 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
1231 modified) R. Bernstein's patch for fully syntax highlighted
1236 modified) R. Bernstein's patch for fully syntax highlighted
1232 tracebacks. The functionality is also available under ultraTB for
1237 tracebacks. The functionality is also available under ultraTB for
1233 non-ipython users (someone using ultraTB but outside an ipython
1238 non-ipython users (someone using ultraTB but outside an ipython
1234 session). They can select the color scheme by setting the
1239 session). They can select the color scheme by setting the
1235 module-level global DEFAULT_SCHEME. The highlight functionality
1240 module-level global DEFAULT_SCHEME. The highlight functionality
1236 also works when debugging.
1241 also works when debugging.
1237
1242
1238 * IPython/genutils.py (IOStream.close): small patch by
1243 * IPython/genutils.py (IOStream.close): small patch by
1239 R. Bernstein for improved pydb support.
1244 R. Bernstein for improved pydb support.
1240
1245
1241 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
1246 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
1242 DaveS <davls@telus.net> to improve support of debugging under
1247 DaveS <davls@telus.net> to improve support of debugging under
1243 NTEmacs, including improved pydb behavior.
1248 NTEmacs, including improved pydb behavior.
1244
1249
1245 * IPython/Magic.py (magic_prun): Fix saving of profile info for
1250 * IPython/Magic.py (magic_prun): Fix saving of profile info for
1246 Python 2.5, where the stats object API changed a little. Thanks
1251 Python 2.5, where the stats object API changed a little. Thanks
1247 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
1252 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
1248
1253
1249 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
1254 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
1250 Pernetty's patch to improve support for (X)Emacs under Win32.
1255 Pernetty's patch to improve support for (X)Emacs under Win32.
1251
1256
1252 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
1257 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
1253
1258
1254 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
1259 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
1255 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
1260 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
1256 a report by Nik Tautenhahn.
1261 a report by Nik Tautenhahn.
1257
1262
1258 2007-03-16 Walter Doerwald <walter@livinglogic.de>
1263 2007-03-16 Walter Doerwald <walter@livinglogic.de>
1259
1264
1260 * setup.py: Add the igrid help files to the list of data files
1265 * setup.py: Add the igrid help files to the list of data files
1261 to be installed alongside igrid.
1266 to be installed alongside igrid.
1262 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
1267 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
1263 Show the input object of the igrid browser as the window tile.
1268 Show the input object of the igrid browser as the window tile.
1264 Show the object the cursor is on in the statusbar.
1269 Show the object the cursor is on in the statusbar.
1265
1270
1266 2007-03-15 Ville Vainio <vivainio@gmail.com>
1271 2007-03-15 Ville Vainio <vivainio@gmail.com>
1267
1272
1268 * Extensions/ipy_stock_completers.py: Fixed exception
1273 * Extensions/ipy_stock_completers.py: Fixed exception
1269 on mismatching quotes in %run completer. Patch by
1274 on mismatching quotes in %run completer. Patch by
1270 Jorgen Stenarson. Closes #127.
1275 Jorgen Stenarson. Closes #127.
1271
1276
1272 2007-03-14 Ville Vainio <vivainio@gmail.com>
1277 2007-03-14 Ville Vainio <vivainio@gmail.com>
1273
1278
1274 * Extensions/ext_rehashdir.py: Do not do auto_alias
1279 * Extensions/ext_rehashdir.py: Do not do auto_alias
1275 in %rehashdir, it clobbers %store'd aliases.
1280 in %rehashdir, it clobbers %store'd aliases.
1276
1281
1277 * UserConfig/ipy_profile_sh.py: envpersist.py extension
1282 * UserConfig/ipy_profile_sh.py: envpersist.py extension
1278 (beefed up %env) imported for sh profile.
1283 (beefed up %env) imported for sh profile.
1279
1284
1280 2007-03-10 Walter Doerwald <walter@livinglogic.de>
1285 2007-03-10 Walter Doerwald <walter@livinglogic.de>
1281
1286
1282 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
1287 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
1283 as the default browser.
1288 as the default browser.
1284 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
1289 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
1285 As igrid displays all attributes it ever encounters, fetch() (which has
1290 As igrid displays all attributes it ever encounters, fetch() (which has
1286 been renamed to _fetch()) doesn't have to recalculate the display attributes
1291 been renamed to _fetch()) doesn't have to recalculate the display attributes
1287 every time a new item is fetched. This should speed up scrolling.
1292 every time a new item is fetched. This should speed up scrolling.
1288
1293
1289 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
1294 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
1290
1295
1291 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
1296 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
1292 Schmolck's recently reported tab-completion bug (my previous one
1297 Schmolck's recently reported tab-completion bug (my previous one
1293 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
1298 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
1294
1299
1295 2007-03-09 Walter Doerwald <walter@livinglogic.de>
1300 2007-03-09 Walter Doerwald <walter@livinglogic.de>
1296
1301
1297 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
1302 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
1298 Close help window if exiting igrid.
1303 Close help window if exiting igrid.
1299
1304
1300 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1305 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1301
1306
1302 * IPython/Extensions/ipy_defaults.py: Check if readline is available
1307 * IPython/Extensions/ipy_defaults.py: Check if readline is available
1303 before calling functions from readline.
1308 before calling functions from readline.
1304
1309
1305 2007-03-02 Walter Doerwald <walter@livinglogic.de>
1310 2007-03-02 Walter Doerwald <walter@livinglogic.de>
1306
1311
1307 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
1312 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
1308 igrid is a wxPython-based display object for ipipe. If your system has
1313 igrid is a wxPython-based display object for ipipe. If your system has
1309 wx installed igrid will be the default display. Without wx ipipe falls
1314 wx installed igrid will be the default display. Without wx ipipe falls
1310 back to ibrowse (which needs curses). If no curses is installed ipipe
1315 back to ibrowse (which needs curses). If no curses is installed ipipe
1311 falls back to idump.
1316 falls back to idump.
1312
1317
1313 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
1318 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
1314
1319
1315 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
1320 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
1316 my changes from yesterday, they introduced bugs. Will reactivate
1321 my changes from yesterday, they introduced bugs. Will reactivate
1317 once I get a correct solution, which will be much easier thanks to
1322 once I get a correct solution, which will be much easier thanks to
1318 Dan Milstein's new prefilter test suite.
1323 Dan Milstein's new prefilter test suite.
1319
1324
1320 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
1325 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
1321
1326
1322 * IPython/iplib.py (split_user_input): fix input splitting so we
1327 * IPython/iplib.py (split_user_input): fix input splitting so we
1323 don't attempt attribute accesses on things that can't possibly be
1328 don't attempt attribute accesses on things that can't possibly be
1324 valid Python attributes. After a bug report by Alex Schmolck.
1329 valid Python attributes. After a bug report by Alex Schmolck.
1325 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
1330 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
1326 %magic with explicit % prefix.
1331 %magic with explicit % prefix.
1327
1332
1328 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
1333 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
1329
1334
1330 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
1335 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
1331 avoid a DeprecationWarning from GTK.
1336 avoid a DeprecationWarning from GTK.
1332
1337
1333 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
1338 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
1334
1339
1335 * IPython/genutils.py (clock): I modified clock() to return total
1340 * IPython/genutils.py (clock): I modified clock() to return total
1336 time, user+system. This is a more commonly needed metric. I also
1341 time, user+system. This is a more commonly needed metric. I also
1337 introduced the new clocku/clocks to get only user/system time if
1342 introduced the new clocku/clocks to get only user/system time if
1338 one wants those instead.
1343 one wants those instead.
1339
1344
1340 ***WARNING: API CHANGE*** clock() used to return only user time,
1345 ***WARNING: API CHANGE*** clock() used to return only user time,
1341 so if you want exactly the same results as before, use clocku
1346 so if you want exactly the same results as before, use clocku
1342 instead.
1347 instead.
1343
1348
1344 2007-02-22 Ville Vainio <vivainio@gmail.com>
1349 2007-02-22 Ville Vainio <vivainio@gmail.com>
1345
1350
1346 * IPython/Extensions/ipy_p4.py: Extension for improved
1351 * IPython/Extensions/ipy_p4.py: Extension for improved
1347 p4 (perforce version control system) experience.
1352 p4 (perforce version control system) experience.
1348 Adds %p4 magic with p4 command completion and
1353 Adds %p4 magic with p4 command completion and
1349 automatic -G argument (marshall output as python dict)
1354 automatic -G argument (marshall output as python dict)
1350
1355
1351 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
1356 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
1352
1357
1353 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
1358 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
1354 stop marks.
1359 stop marks.
1355 (ClearingMixin): a simple mixin to easily make a Demo class clear
1360 (ClearingMixin): a simple mixin to easily make a Demo class clear
1356 the screen in between blocks and have empty marquees. The
1361 the screen in between blocks and have empty marquees. The
1357 ClearDemo and ClearIPDemo classes that use it are included.
1362 ClearDemo and ClearIPDemo classes that use it are included.
1358
1363
1359 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
1364 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
1360
1365
1361 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
1366 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
1362 protect against exceptions at Python shutdown time. Patch
1367 protect against exceptions at Python shutdown time. Patch
1363 sumbmitted to upstream.
1368 sumbmitted to upstream.
1364
1369
1365 2007-02-14 Walter Doerwald <walter@livinglogic.de>
1370 2007-02-14 Walter Doerwald <walter@livinglogic.de>
1366
1371
1367 * IPython/Extensions/ibrowse.py: If entering the first object level
1372 * IPython/Extensions/ibrowse.py: If entering the first object level
1368 (i.e. the object for which the browser has been started) fails,
1373 (i.e. the object for which the browser has been started) fails,
1369 now the error is raised directly (aborting the browser) instead of
1374 now the error is raised directly (aborting the browser) instead of
1370 running into an empty levels list later.
1375 running into an empty levels list later.
1371
1376
1372 2007-02-03 Walter Doerwald <walter@livinglogic.de>
1377 2007-02-03 Walter Doerwald <walter@livinglogic.de>
1373
1378
1374 * IPython/Extensions/ipipe.py: Add an xrepr implementation
1379 * IPython/Extensions/ipipe.py: Add an xrepr implementation
1375 for the noitem object.
1380 for the noitem object.
1376
1381
1377 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
1382 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
1378
1383
1379 * IPython/completer.py (Completer.attr_matches): Fix small
1384 * IPython/completer.py (Completer.attr_matches): Fix small
1380 tab-completion bug with Enthought Traits objects with units.
1385 tab-completion bug with Enthought Traits objects with units.
1381 Thanks to a bug report by Tom Denniston
1386 Thanks to a bug report by Tom Denniston
1382 <tom.denniston-AT-alum.dartmouth.org>.
1387 <tom.denniston-AT-alum.dartmouth.org>.
1383
1388
1384 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
1389 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
1385
1390
1386 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
1391 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
1387 bug where only .ipy or .py would be completed. Once the first
1392 bug where only .ipy or .py would be completed. Once the first
1388 argument to %run has been given, all completions are valid because
1393 argument to %run has been given, all completions are valid because
1389 they are the arguments to the script, which may well be non-python
1394 they are the arguments to the script, which may well be non-python
1390 filenames.
1395 filenames.
1391
1396
1392 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1397 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1393 to irunner to allow it to correctly support real doctesting of
1398 to irunner to allow it to correctly support real doctesting of
1394 out-of-process ipython code.
1399 out-of-process ipython code.
1395
1400
1396 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1401 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1397 title an option (-noterm_title) because it completely breaks
1402 title an option (-noterm_title) because it completely breaks
1398 doctesting.
1403 doctesting.
1399
1404
1400 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1405 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1401
1406
1402 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1407 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1403
1408
1404 * IPython/irunner.py (main): fix small bug where extensions were
1409 * IPython/irunner.py (main): fix small bug where extensions were
1405 not being correctly recognized.
1410 not being correctly recognized.
1406
1411
1407 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1412 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1408
1413
1409 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1414 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1410 a string containing a single line yields the string itself as the
1415 a string containing a single line yields the string itself as the
1411 only item.
1416 only item.
1412
1417
1413 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1418 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1414 object if it's the same as the one on the last level (This avoids
1419 object if it's the same as the one on the last level (This avoids
1415 infinite recursion for one line strings).
1420 infinite recursion for one line strings).
1416
1421
1417 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1422 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1418
1423
1419 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1424 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1420 all output streams before printing tracebacks. This ensures that
1425 all output streams before printing tracebacks. This ensures that
1421 user output doesn't end up interleaved with traceback output.
1426 user output doesn't end up interleaved with traceback output.
1422
1427
1423 2007-01-10 Ville Vainio <vivainio@gmail.com>
1428 2007-01-10 Ville Vainio <vivainio@gmail.com>
1424
1429
1425 * Extensions/envpersist.py: Turbocharged %env that remembers
1430 * Extensions/envpersist.py: Turbocharged %env that remembers
1426 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1431 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1427 "%env VISUAL=jed".
1432 "%env VISUAL=jed".
1428
1433
1429 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1434 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1430
1435
1431 * IPython/iplib.py (showtraceback): ensure that we correctly call
1436 * IPython/iplib.py (showtraceback): ensure that we correctly call
1432 custom handlers in all cases (some with pdb were slipping through,
1437 custom handlers in all cases (some with pdb were slipping through,
1433 but I'm not exactly sure why).
1438 but I'm not exactly sure why).
1434
1439
1435 * IPython/Debugger.py (Tracer.__init__): added new class to
1440 * IPython/Debugger.py (Tracer.__init__): added new class to
1436 support set_trace-like usage of IPython's enhanced debugger.
1441 support set_trace-like usage of IPython's enhanced debugger.
1437
1442
1438 2006-12-24 Ville Vainio <vivainio@gmail.com>
1443 2006-12-24 Ville Vainio <vivainio@gmail.com>
1439
1444
1440 * ipmaker.py: more informative message when ipy_user_conf
1445 * ipmaker.py: more informative message when ipy_user_conf
1441 import fails (suggest running %upgrade).
1446 import fails (suggest running %upgrade).
1442
1447
1443 * tools/run_ipy_in_profiler.py: Utility to see where
1448 * tools/run_ipy_in_profiler.py: Utility to see where
1444 the time during IPython startup is spent.
1449 the time during IPython startup is spent.
1445
1450
1446 2006-12-20 Ville Vainio <vivainio@gmail.com>
1451 2006-12-20 Ville Vainio <vivainio@gmail.com>
1447
1452
1448 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1453 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1449
1454
1450 * ipapi.py: Add new ipapi method, expand_alias.
1455 * ipapi.py: Add new ipapi method, expand_alias.
1451
1456
1452 * Release.py: Bump up version to 0.7.4.svn
1457 * Release.py: Bump up version to 0.7.4.svn
1453
1458
1454 2006-12-17 Ville Vainio <vivainio@gmail.com>
1459 2006-12-17 Ville Vainio <vivainio@gmail.com>
1455
1460
1456 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1461 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1457 to work properly on posix too
1462 to work properly on posix too
1458
1463
1459 * Release.py: Update revnum (version is still just 0.7.3).
1464 * Release.py: Update revnum (version is still just 0.7.3).
1460
1465
1461 2006-12-15 Ville Vainio <vivainio@gmail.com>
1466 2006-12-15 Ville Vainio <vivainio@gmail.com>
1462
1467
1463 * scripts/ipython_win_post_install: create ipython.py in
1468 * scripts/ipython_win_post_install: create ipython.py in
1464 prefix + "/scripts".
1469 prefix + "/scripts".
1465
1470
1466 * Release.py: Update version to 0.7.3.
1471 * Release.py: Update version to 0.7.3.
1467
1472
1468 2006-12-14 Ville Vainio <vivainio@gmail.com>
1473 2006-12-14 Ville Vainio <vivainio@gmail.com>
1469
1474
1470 * scripts/ipython_win_post_install: Overwrite old shortcuts
1475 * scripts/ipython_win_post_install: Overwrite old shortcuts
1471 if they already exist
1476 if they already exist
1472
1477
1473 * Release.py: release 0.7.3rc2
1478 * Release.py: release 0.7.3rc2
1474
1479
1475 2006-12-13 Ville Vainio <vivainio@gmail.com>
1480 2006-12-13 Ville Vainio <vivainio@gmail.com>
1476
1481
1477 * Branch and update Release.py for 0.7.3rc1
1482 * Branch and update Release.py for 0.7.3rc1
1478
1483
1479 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1484 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1480
1485
1481 * IPython/Shell.py (IPShellWX): update for current WX naming
1486 * IPython/Shell.py (IPShellWX): update for current WX naming
1482 conventions, to avoid a deprecation warning with current WX
1487 conventions, to avoid a deprecation warning with current WX
1483 versions. Thanks to a report by Danny Shevitz.
1488 versions. Thanks to a report by Danny Shevitz.
1484
1489
1485 2006-12-12 Ville Vainio <vivainio@gmail.com>
1490 2006-12-12 Ville Vainio <vivainio@gmail.com>
1486
1491
1487 * ipmaker.py: apply david cournapeau's patch to make
1492 * ipmaker.py: apply david cournapeau's patch to make
1488 import_some work properly even when ipythonrc does
1493 import_some work properly even when ipythonrc does
1489 import_some on empty list (it was an old bug!).
1494 import_some on empty list (it was an old bug!).
1490
1495
1491 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1496 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1492 Add deprecation note to ipythonrc and a url to wiki
1497 Add deprecation note to ipythonrc and a url to wiki
1493 in ipy_user_conf.py
1498 in ipy_user_conf.py
1494
1499
1495
1500
1496 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1501 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1497 as if it was typed on IPython command prompt, i.e.
1502 as if it was typed on IPython command prompt, i.e.
1498 as IPython script.
1503 as IPython script.
1499
1504
1500 * example-magic.py, magic_grepl.py: remove outdated examples
1505 * example-magic.py, magic_grepl.py: remove outdated examples
1501
1506
1502 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1507 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1503
1508
1504 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1509 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1505 is called before any exception has occurred.
1510 is called before any exception has occurred.
1506
1511
1507 2006-12-08 Ville Vainio <vivainio@gmail.com>
1512 2006-12-08 Ville Vainio <vivainio@gmail.com>
1508
1513
1509 * Extensions/ipy_stock_completers.py: fix cd completer
1514 * Extensions/ipy_stock_completers.py: fix cd completer
1510 to translate /'s to \'s again.
1515 to translate /'s to \'s again.
1511
1516
1512 * completer.py: prevent traceback on file completions w/
1517 * completer.py: prevent traceback on file completions w/
1513 backslash.
1518 backslash.
1514
1519
1515 * Release.py: Update release number to 0.7.3b3 for release
1520 * Release.py: Update release number to 0.7.3b3 for release
1516
1521
1517 2006-12-07 Ville Vainio <vivainio@gmail.com>
1522 2006-12-07 Ville Vainio <vivainio@gmail.com>
1518
1523
1519 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1524 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1520 while executing external code. Provides more shell-like behaviour
1525 while executing external code. Provides more shell-like behaviour
1521 and overall better response to ctrl + C / ctrl + break.
1526 and overall better response to ctrl + C / ctrl + break.
1522
1527
1523 * tools/make_tarball.py: new script to create tarball straight from svn
1528 * tools/make_tarball.py: new script to create tarball straight from svn
1524 (setup.py sdist doesn't work on win32).
1529 (setup.py sdist doesn't work on win32).
1525
1530
1526 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1531 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1527 on dirnames with spaces and use the default completer instead.
1532 on dirnames with spaces and use the default completer instead.
1528
1533
1529 * Revision.py: Change version to 0.7.3b2 for release.
1534 * Revision.py: Change version to 0.7.3b2 for release.
1530
1535
1531 2006-12-05 Ville Vainio <vivainio@gmail.com>
1536 2006-12-05 Ville Vainio <vivainio@gmail.com>
1532
1537
1533 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1538 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1534 pydb patch 4 (rm debug printing, py 2.5 checking)
1539 pydb patch 4 (rm debug printing, py 2.5 checking)
1535
1540
1536 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1541 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1537 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1542 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1538 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1543 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1539 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1544 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1540 object the cursor was on before the refresh. The command "markrange" is
1545 object the cursor was on before the refresh. The command "markrange" is
1541 mapped to "%" now.
1546 mapped to "%" now.
1542 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1547 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1543
1548
1544 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1549 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1545
1550
1546 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1551 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1547 interactive debugger on the last traceback, without having to call
1552 interactive debugger on the last traceback, without having to call
1548 %pdb and rerun your code. Made minor changes in various modules,
1553 %pdb and rerun your code. Made minor changes in various modules,
1549 should automatically recognize pydb if available.
1554 should automatically recognize pydb if available.
1550
1555
1551 2006-11-28 Ville Vainio <vivainio@gmail.com>
1556 2006-11-28 Ville Vainio <vivainio@gmail.com>
1552
1557
1553 * completer.py: If the text start with !, show file completions
1558 * completer.py: If the text start with !, show file completions
1554 properly. This helps when trying to complete command name
1559 properly. This helps when trying to complete command name
1555 for shell escapes.
1560 for shell escapes.
1556
1561
1557 2006-11-27 Ville Vainio <vivainio@gmail.com>
1562 2006-11-27 Ville Vainio <vivainio@gmail.com>
1558
1563
1559 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1564 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1560 der Walt. Clean up svn and hg completers by using a common
1565 der Walt. Clean up svn and hg completers by using a common
1561 vcs_completer.
1566 vcs_completer.
1562
1567
1563 2006-11-26 Ville Vainio <vivainio@gmail.com>
1568 2006-11-26 Ville Vainio <vivainio@gmail.com>
1564
1569
1565 * Remove ipconfig and %config; you should use _ip.options structure
1570 * Remove ipconfig and %config; you should use _ip.options structure
1566 directly instead!
1571 directly instead!
1567
1572
1568 * genutils.py: add wrap_deprecated function for deprecating callables
1573 * genutils.py: add wrap_deprecated function for deprecating callables
1569
1574
1570 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1575 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1571 _ip.system instead. ipalias is redundant.
1576 _ip.system instead. ipalias is redundant.
1572
1577
1573 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1578 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1574 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1579 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1575 explicit.
1580 explicit.
1576
1581
1577 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1582 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1578 completer. Try it by entering 'hg ' and pressing tab.
1583 completer. Try it by entering 'hg ' and pressing tab.
1579
1584
1580 * macro.py: Give Macro a useful __repr__ method
1585 * macro.py: Give Macro a useful __repr__ method
1581
1586
1582 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1587 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1583
1588
1584 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1589 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1585 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1590 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1586 we don't get a duplicate ipipe module, where registration of the xrepr
1591 we don't get a duplicate ipipe module, where registration of the xrepr
1587 implementation for Text is useless.
1592 implementation for Text is useless.
1588
1593
1589 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1594 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1590
1595
1591 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1596 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1592
1597
1593 2006-11-24 Ville Vainio <vivainio@gmail.com>
1598 2006-11-24 Ville Vainio <vivainio@gmail.com>
1594
1599
1595 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1600 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1596 try to use "cProfile" instead of the slower pure python
1601 try to use "cProfile" instead of the slower pure python
1597 "profile"
1602 "profile"
1598
1603
1599 2006-11-23 Ville Vainio <vivainio@gmail.com>
1604 2006-11-23 Ville Vainio <vivainio@gmail.com>
1600
1605
1601 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1606 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1602 Qt+IPython+Designer link in documentation.
1607 Qt+IPython+Designer link in documentation.
1603
1608
1604 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1609 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1605 correct Pdb object to %pydb.
1610 correct Pdb object to %pydb.
1606
1611
1607
1612
1608 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1613 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1609 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1614 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1610 generic xrepr(), otherwise the list implementation would kick in.
1615 generic xrepr(), otherwise the list implementation would kick in.
1611
1616
1612 2006-11-21 Ville Vainio <vivainio@gmail.com>
1617 2006-11-21 Ville Vainio <vivainio@gmail.com>
1613
1618
1614 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1619 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1615 with one from UserConfig.
1620 with one from UserConfig.
1616
1621
1617 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1622 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1618 it was missing which broke the sh profile.
1623 it was missing which broke the sh profile.
1619
1624
1620 * completer.py: file completer now uses explicit '/' instead
1625 * completer.py: file completer now uses explicit '/' instead
1621 of os.path.join, expansion of 'foo' was broken on win32
1626 of os.path.join, expansion of 'foo' was broken on win32
1622 if there was one directory with name 'foobar'.
1627 if there was one directory with name 'foobar'.
1623
1628
1624 * A bunch of patches from Kirill Smelkov:
1629 * A bunch of patches from Kirill Smelkov:
1625
1630
1626 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1631 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1627
1632
1628 * [patch 7/9] Implement %page -r (page in raw mode) -
1633 * [patch 7/9] Implement %page -r (page in raw mode) -
1629
1634
1630 * [patch 5/9] ScientificPython webpage has moved
1635 * [patch 5/9] ScientificPython webpage has moved
1631
1636
1632 * [patch 4/9] The manual mentions %ds, should be %dhist
1637 * [patch 4/9] The manual mentions %ds, should be %dhist
1633
1638
1634 * [patch 3/9] Kill old bits from %prun doc.
1639 * [patch 3/9] Kill old bits from %prun doc.
1635
1640
1636 * [patch 1/9] Fix typos here and there.
1641 * [patch 1/9] Fix typos here and there.
1637
1642
1638 2006-11-08 Ville Vainio <vivainio@gmail.com>
1643 2006-11-08 Ville Vainio <vivainio@gmail.com>
1639
1644
1640 * completer.py (attr_matches): catch all exceptions raised
1645 * completer.py (attr_matches): catch all exceptions raised
1641 by eval of expr with dots.
1646 by eval of expr with dots.
1642
1647
1643 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1648 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1644
1649
1645 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1650 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1646 input if it starts with whitespace. This allows you to paste
1651 input if it starts with whitespace. This allows you to paste
1647 indented input from any editor without manually having to type in
1652 indented input from any editor without manually having to type in
1648 the 'if 1:', which is convenient when working interactively.
1653 the 'if 1:', which is convenient when working interactively.
1649 Slightly modifed version of a patch by Bo Peng
1654 Slightly modifed version of a patch by Bo Peng
1650 <bpeng-AT-rice.edu>.
1655 <bpeng-AT-rice.edu>.
1651
1656
1652 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1657 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1653
1658
1654 * IPython/irunner.py (main): modified irunner so it automatically
1659 * IPython/irunner.py (main): modified irunner so it automatically
1655 recognizes the right runner to use based on the extension (.py for
1660 recognizes the right runner to use based on the extension (.py for
1656 python, .ipy for ipython and .sage for sage).
1661 python, .ipy for ipython and .sage for sage).
1657
1662
1658 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1663 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1659 visible in ipapi as ip.config(), to programatically control the
1664 visible in ipapi as ip.config(), to programatically control the
1660 internal rc object. There's an accompanying %config magic for
1665 internal rc object. There's an accompanying %config magic for
1661 interactive use, which has been enhanced to match the
1666 interactive use, which has been enhanced to match the
1662 funtionality in ipconfig.
1667 funtionality in ipconfig.
1663
1668
1664 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1669 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1665 so it's not just a toggle, it now takes an argument. Add support
1670 so it's not just a toggle, it now takes an argument. Add support
1666 for a customizable header when making system calls, as the new
1671 for a customizable header when making system calls, as the new
1667 system_header variable in the ipythonrc file.
1672 system_header variable in the ipythonrc file.
1668
1673
1669 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1674 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1670
1675
1671 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1676 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1672 generic functions (using Philip J. Eby's simplegeneric package).
1677 generic functions (using Philip J. Eby's simplegeneric package).
1673 This makes it possible to customize the display of third-party classes
1678 This makes it possible to customize the display of third-party classes
1674 without having to monkeypatch them. xiter() no longer supports a mode
1679 without having to monkeypatch them. xiter() no longer supports a mode
1675 argument and the XMode class has been removed. The same functionality can
1680 argument and the XMode class has been removed. The same functionality can
1676 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1681 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1677 One consequence of the switch to generic functions is that xrepr() and
1682 One consequence of the switch to generic functions is that xrepr() and
1678 xattrs() implementation must define the default value for the mode
1683 xattrs() implementation must define the default value for the mode
1679 argument themselves and xattrs() implementations must return real
1684 argument themselves and xattrs() implementations must return real
1680 descriptors.
1685 descriptors.
1681
1686
1682 * IPython/external: This new subpackage will contain all third-party
1687 * IPython/external: This new subpackage will contain all third-party
1683 packages that are bundled with IPython. (The first one is simplegeneric).
1688 packages that are bundled with IPython. (The first one is simplegeneric).
1684
1689
1685 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1690 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1686 directory which as been dropped in r1703.
1691 directory which as been dropped in r1703.
1687
1692
1688 * IPython/Extensions/ipipe.py (iless): Fixed.
1693 * IPython/Extensions/ipipe.py (iless): Fixed.
1689
1694
1690 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1695 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1691
1696
1692 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1697 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1693
1698
1694 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1699 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1695 handling in variable expansion so that shells and magics recognize
1700 handling in variable expansion so that shells and magics recognize
1696 function local scopes correctly. Bug reported by Brian.
1701 function local scopes correctly. Bug reported by Brian.
1697
1702
1698 * scripts/ipython: remove the very first entry in sys.path which
1703 * scripts/ipython: remove the very first entry in sys.path which
1699 Python auto-inserts for scripts, so that sys.path under IPython is
1704 Python auto-inserts for scripts, so that sys.path under IPython is
1700 as similar as possible to that under plain Python.
1705 as similar as possible to that under plain Python.
1701
1706
1702 * IPython/completer.py (IPCompleter.file_matches): Fix
1707 * IPython/completer.py (IPCompleter.file_matches): Fix
1703 tab-completion so that quotes are not closed unless the completion
1708 tab-completion so that quotes are not closed unless the completion
1704 is unambiguous. After a request by Stefan. Minor cleanups in
1709 is unambiguous. After a request by Stefan. Minor cleanups in
1705 ipy_stock_completers.
1710 ipy_stock_completers.
1706
1711
1707 2006-11-02 Ville Vainio <vivainio@gmail.com>
1712 2006-11-02 Ville Vainio <vivainio@gmail.com>
1708
1713
1709 * ipy_stock_completers.py: Add %run and %cd completers.
1714 * ipy_stock_completers.py: Add %run and %cd completers.
1710
1715
1711 * completer.py: Try running custom completer for both
1716 * completer.py: Try running custom completer for both
1712 "foo" and "%foo" if the command is just "foo". Ignore case
1717 "foo" and "%foo" if the command is just "foo". Ignore case
1713 when filtering possible completions.
1718 when filtering possible completions.
1714
1719
1715 * UserConfig/ipy_user_conf.py: install stock completers as default
1720 * UserConfig/ipy_user_conf.py: install stock completers as default
1716
1721
1717 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1722 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1718 simplified readline history save / restore through a wrapper
1723 simplified readline history save / restore through a wrapper
1719 function
1724 function
1720
1725
1721
1726
1722 2006-10-31 Ville Vainio <vivainio@gmail.com>
1727 2006-10-31 Ville Vainio <vivainio@gmail.com>
1723
1728
1724 * strdispatch.py, completer.py, ipy_stock_completers.py:
1729 * strdispatch.py, completer.py, ipy_stock_completers.py:
1725 Allow str_key ("command") in completer hooks. Implement
1730 Allow str_key ("command") in completer hooks. Implement
1726 trivial completer for 'import' (stdlib modules only). Rename
1731 trivial completer for 'import' (stdlib modules only). Rename
1727 ipy_linux_package_managers.py to ipy_stock_completers.py.
1732 ipy_linux_package_managers.py to ipy_stock_completers.py.
1728 SVN completer.
1733 SVN completer.
1729
1734
1730 * Extensions/ledit.py: %magic line editor for easily and
1735 * Extensions/ledit.py: %magic line editor for easily and
1731 incrementally manipulating lists of strings. The magic command
1736 incrementally manipulating lists of strings. The magic command
1732 name is %led.
1737 name is %led.
1733
1738
1734 2006-10-30 Ville Vainio <vivainio@gmail.com>
1739 2006-10-30 Ville Vainio <vivainio@gmail.com>
1735
1740
1736 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1741 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1737 Bernsteins's patches for pydb integration.
1742 Bernsteins's patches for pydb integration.
1738 http://bashdb.sourceforge.net/pydb/
1743 http://bashdb.sourceforge.net/pydb/
1739
1744
1740 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1745 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1741 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1746 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1742 custom completer hook to allow the users to implement their own
1747 custom completer hook to allow the users to implement their own
1743 completers. See ipy_linux_package_managers.py for example. The
1748 completers. See ipy_linux_package_managers.py for example. The
1744 hook name is 'complete_command'.
1749 hook name is 'complete_command'.
1745
1750
1746 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1751 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1747
1752
1748 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1753 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1749 Numeric leftovers.
1754 Numeric leftovers.
1750
1755
1751 * ipython.el (py-execute-region): apply Stefan's patch to fix
1756 * ipython.el (py-execute-region): apply Stefan's patch to fix
1752 garbled results if the python shell hasn't been previously started.
1757 garbled results if the python shell hasn't been previously started.
1753
1758
1754 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1759 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1755 pretty generic function and useful for other things.
1760 pretty generic function and useful for other things.
1756
1761
1757 * IPython/OInspect.py (getsource): Add customizable source
1762 * IPython/OInspect.py (getsource): Add customizable source
1758 extractor. After a request/patch form W. Stein (SAGE).
1763 extractor. After a request/patch form W. Stein (SAGE).
1759
1764
1760 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1765 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1761 window size to a more reasonable value from what pexpect does,
1766 window size to a more reasonable value from what pexpect does,
1762 since their choice causes wrapping bugs with long input lines.
1767 since their choice causes wrapping bugs with long input lines.
1763
1768
1764 2006-10-28 Ville Vainio <vivainio@gmail.com>
1769 2006-10-28 Ville Vainio <vivainio@gmail.com>
1765
1770
1766 * Magic.py (%run): Save and restore the readline history from
1771 * Magic.py (%run): Save and restore the readline history from
1767 file around %run commands to prevent side effects from
1772 file around %run commands to prevent side effects from
1768 %runned programs that might use readline (e.g. pydb).
1773 %runned programs that might use readline (e.g. pydb).
1769
1774
1770 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1775 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1771 invoking the pydb enhanced debugger.
1776 invoking the pydb enhanced debugger.
1772
1777
1773 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1778 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1774
1779
1775 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1780 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1776 call the base class method and propagate the return value to
1781 call the base class method and propagate the return value to
1777 ifile. This is now done by path itself.
1782 ifile. This is now done by path itself.
1778
1783
1779 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1784 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1780
1785
1781 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1786 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1782 api: set_crash_handler(), to expose the ability to change the
1787 api: set_crash_handler(), to expose the ability to change the
1783 internal crash handler.
1788 internal crash handler.
1784
1789
1785 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1790 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1786 the various parameters of the crash handler so that apps using
1791 the various parameters of the crash handler so that apps using
1787 IPython as their engine can customize crash handling. Ipmlemented
1792 IPython as their engine can customize crash handling. Ipmlemented
1788 at the request of SAGE.
1793 at the request of SAGE.
1789
1794
1790 2006-10-14 Ville Vainio <vivainio@gmail.com>
1795 2006-10-14 Ville Vainio <vivainio@gmail.com>
1791
1796
1792 * Magic.py, ipython.el: applied first "safe" part of Rocky
1797 * Magic.py, ipython.el: applied first "safe" part of Rocky
1793 Bernstein's patch set for pydb integration.
1798 Bernstein's patch set for pydb integration.
1794
1799
1795 * Magic.py (%unalias, %alias): %store'd aliases can now be
1800 * Magic.py (%unalias, %alias): %store'd aliases can now be
1796 removed with '%unalias'. %alias w/o args now shows most
1801 removed with '%unalias'. %alias w/o args now shows most
1797 interesting (stored / manually defined) aliases last
1802 interesting (stored / manually defined) aliases last
1798 where they catch the eye w/o scrolling.
1803 where they catch the eye w/o scrolling.
1799
1804
1800 * Magic.py (%rehashx), ext_rehashdir.py: files with
1805 * Magic.py (%rehashx), ext_rehashdir.py: files with
1801 'py' extension are always considered executable, even
1806 'py' extension are always considered executable, even
1802 when not in PATHEXT environment variable.
1807 when not in PATHEXT environment variable.
1803
1808
1804 2006-10-12 Ville Vainio <vivainio@gmail.com>
1809 2006-10-12 Ville Vainio <vivainio@gmail.com>
1805
1810
1806 * jobctrl.py: Add new "jobctrl" extension for spawning background
1811 * jobctrl.py: Add new "jobctrl" extension for spawning background
1807 processes with "&find /". 'import jobctrl' to try it out. Requires
1812 processes with "&find /". 'import jobctrl' to try it out. Requires
1808 'subprocess' module, standard in python 2.4+.
1813 'subprocess' module, standard in python 2.4+.
1809
1814
1810 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1815 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1811 so if foo -> bar and bar -> baz, then foo -> baz.
1816 so if foo -> bar and bar -> baz, then foo -> baz.
1812
1817
1813 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1818 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1814
1819
1815 * IPython/Magic.py (Magic.parse_options): add a new posix option
1820 * IPython/Magic.py (Magic.parse_options): add a new posix option
1816 to allow parsing of input args in magics that doesn't strip quotes
1821 to allow parsing of input args in magics that doesn't strip quotes
1817 (if posix=False). This also closes %timeit bug reported by
1822 (if posix=False). This also closes %timeit bug reported by
1818 Stefan.
1823 Stefan.
1819
1824
1820 2006-10-03 Ville Vainio <vivainio@gmail.com>
1825 2006-10-03 Ville Vainio <vivainio@gmail.com>
1821
1826
1822 * iplib.py (raw_input, interact): Return ValueError catching for
1827 * iplib.py (raw_input, interact): Return ValueError catching for
1823 raw_input. Fixes infinite loop for sys.stdin.close() or
1828 raw_input. Fixes infinite loop for sys.stdin.close() or
1824 sys.stdout.close().
1829 sys.stdout.close().
1825
1830
1826 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1831 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1827
1832
1828 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1833 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1829 to help in handling doctests. irunner is now pretty useful for
1834 to help in handling doctests. irunner is now pretty useful for
1830 running standalone scripts and simulate a full interactive session
1835 running standalone scripts and simulate a full interactive session
1831 in a format that can be then pasted as a doctest.
1836 in a format that can be then pasted as a doctest.
1832
1837
1833 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1838 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1834 on top of the default (useless) ones. This also fixes the nasty
1839 on top of the default (useless) ones. This also fixes the nasty
1835 way in which 2.5's Quitter() exits (reverted [1785]).
1840 way in which 2.5's Quitter() exits (reverted [1785]).
1836
1841
1837 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1842 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1838 2.5.
1843 2.5.
1839
1844
1840 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1845 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1841 color scheme is updated as well when color scheme is changed
1846 color scheme is updated as well when color scheme is changed
1842 interactively.
1847 interactively.
1843
1848
1844 2006-09-27 Ville Vainio <vivainio@gmail.com>
1849 2006-09-27 Ville Vainio <vivainio@gmail.com>
1845
1850
1846 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1851 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1847 infinite loop and just exit. It's a hack, but will do for a while.
1852 infinite loop and just exit. It's a hack, but will do for a while.
1848
1853
1849 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1854 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1850
1855
1851 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1856 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1852 the constructor, this makes it possible to get a list of only directories
1857 the constructor, this makes it possible to get a list of only directories
1853 or only files.
1858 or only files.
1854
1859
1855 2006-08-12 Ville Vainio <vivainio@gmail.com>
1860 2006-08-12 Ville Vainio <vivainio@gmail.com>
1856
1861
1857 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1862 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1858 they broke unittest
1863 they broke unittest
1859
1864
1860 2006-08-11 Ville Vainio <vivainio@gmail.com>
1865 2006-08-11 Ville Vainio <vivainio@gmail.com>
1861
1866
1862 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1867 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1863 by resolving issue properly, i.e. by inheriting FakeModule
1868 by resolving issue properly, i.e. by inheriting FakeModule
1864 from types.ModuleType. Pickling ipython interactive data
1869 from types.ModuleType. Pickling ipython interactive data
1865 should still work as usual (testing appreciated).
1870 should still work as usual (testing appreciated).
1866
1871
1867 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1872 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1868
1873
1869 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1874 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1870 running under python 2.3 with code from 2.4 to fix a bug with
1875 running under python 2.3 with code from 2.4 to fix a bug with
1871 help(). Reported by the Debian maintainers, Norbert Tretkowski
1876 help(). Reported by the Debian maintainers, Norbert Tretkowski
1872 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1877 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1873 <afayolle-AT-debian.org>.
1878 <afayolle-AT-debian.org>.
1874
1879
1875 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1880 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1876
1881
1877 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1882 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1878 (which was displaying "quit" twice).
1883 (which was displaying "quit" twice).
1879
1884
1880 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1885 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1881
1886
1882 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1887 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1883 the mode argument).
1888 the mode argument).
1884
1889
1885 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1890 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1886
1891
1887 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1892 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1888 not running under IPython.
1893 not running under IPython.
1889
1894
1890 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1895 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1891 and make it iterable (iterating over the attribute itself). Add two new
1896 and make it iterable (iterating over the attribute itself). Add two new
1892 magic strings for __xattrs__(): If the string starts with "-", the attribute
1897 magic strings for __xattrs__(): If the string starts with "-", the attribute
1893 will not be displayed in ibrowse's detail view (but it can still be
1898 will not be displayed in ibrowse's detail view (but it can still be
1894 iterated over). This makes it possible to add attributes that are large
1899 iterated over). This makes it possible to add attributes that are large
1895 lists or generator methods to the detail view. Replace magic attribute names
1900 lists or generator methods to the detail view. Replace magic attribute names
1896 and _attrname() and _getattr() with "descriptors": For each type of magic
1901 and _attrname() and _getattr() with "descriptors": For each type of magic
1897 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1902 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1898 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1903 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1899 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1904 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1900 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1905 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1901 are still supported.
1906 are still supported.
1902
1907
1903 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1908 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1904 fails in ibrowse.fetch(), the exception object is added as the last item
1909 fails in ibrowse.fetch(), the exception object is added as the last item
1905 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1910 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1906 a generator throws an exception midway through execution.
1911 a generator throws an exception midway through execution.
1907
1912
1908 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1913 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1909 encoding into methods.
1914 encoding into methods.
1910
1915
1911 2006-07-26 Ville Vainio <vivainio@gmail.com>
1916 2006-07-26 Ville Vainio <vivainio@gmail.com>
1912
1917
1913 * iplib.py: history now stores multiline input as single
1918 * iplib.py: history now stores multiline input as single
1914 history entries. Patch by Jorgen Cederlof.
1919 history entries. Patch by Jorgen Cederlof.
1915
1920
1916 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1921 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1917
1922
1918 * IPython/Extensions/ibrowse.py: Make cursor visible over
1923 * IPython/Extensions/ibrowse.py: Make cursor visible over
1919 non existing attributes.
1924 non existing attributes.
1920
1925
1921 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1926 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1922
1927
1923 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1928 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1924 error output of the running command doesn't mess up the screen.
1929 error output of the running command doesn't mess up the screen.
1925
1930
1926 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1931 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1927
1932
1928 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1933 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1929 argument. This sorts the items themselves.
1934 argument. This sorts the items themselves.
1930
1935
1931 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1936 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1932
1937
1933 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1938 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1934 Compile expression strings into code objects. This should speed
1939 Compile expression strings into code objects. This should speed
1935 up ifilter and friends somewhat.
1940 up ifilter and friends somewhat.
1936
1941
1937 2006-07-08 Ville Vainio <vivainio@gmail.com>
1942 2006-07-08 Ville Vainio <vivainio@gmail.com>
1938
1943
1939 * Magic.py: %cpaste now strips > from the beginning of lines
1944 * Magic.py: %cpaste now strips > from the beginning of lines
1940 to ease pasting quoted code from emails. Contributed by
1945 to ease pasting quoted code from emails. Contributed by
1941 Stefan van der Walt.
1946 Stefan van der Walt.
1942
1947
1943 2006-06-29 Ville Vainio <vivainio@gmail.com>
1948 2006-06-29 Ville Vainio <vivainio@gmail.com>
1944
1949
1945 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1950 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1946 mode, patch contributed by Darren Dale. NEEDS TESTING!
1951 mode, patch contributed by Darren Dale. NEEDS TESTING!
1947
1952
1948 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1953 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1949
1954
1950 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1955 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1951 a blue background. Fix fetching new display rows when the browser
1956 a blue background. Fix fetching new display rows when the browser
1952 scrolls more than a screenful (e.g. by using the goto command).
1957 scrolls more than a screenful (e.g. by using the goto command).
1953
1958
1954 2006-06-27 Ville Vainio <vivainio@gmail.com>
1959 2006-06-27 Ville Vainio <vivainio@gmail.com>
1955
1960
1956 * Magic.py (_inspect, _ofind) Apply David Huard's
1961 * Magic.py (_inspect, _ofind) Apply David Huard's
1957 patch for displaying the correct docstring for 'property'
1962 patch for displaying the correct docstring for 'property'
1958 attributes.
1963 attributes.
1959
1964
1960 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1965 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1961
1966
1962 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1967 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1963 commands into the methods implementing them.
1968 commands into the methods implementing them.
1964
1969
1965 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1970 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1966
1971
1967 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1972 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1968 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1973 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1969 autoindent support was authored by Jin Liu.
1974 autoindent support was authored by Jin Liu.
1970
1975
1971 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1976 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1972
1977
1973 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1978 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1974 for keymaps with a custom class that simplifies handling.
1979 for keymaps with a custom class that simplifies handling.
1975
1980
1976 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1981 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1977
1982
1978 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1983 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1979 resizing. This requires Python 2.5 to work.
1984 resizing. This requires Python 2.5 to work.
1980
1985
1981 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1986 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1982
1987
1983 * IPython/Extensions/ibrowse.py: Add two new commands to
1988 * IPython/Extensions/ibrowse.py: Add two new commands to
1984 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1989 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1985 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1990 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1986 attributes again. Remapped the help command to "?". Display
1991 attributes again. Remapped the help command to "?". Display
1987 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1992 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1988 as keys for the "home" and "end" commands. Add three new commands
1993 as keys for the "home" and "end" commands. Add three new commands
1989 to the input mode for "find" and friends: "delend" (CTRL-K)
1994 to the input mode for "find" and friends: "delend" (CTRL-K)
1990 deletes to the end of line. "incsearchup" searches upwards in the
1995 deletes to the end of line. "incsearchup" searches upwards in the
1991 command history for an input that starts with the text before the cursor.
1996 command history for an input that starts with the text before the cursor.
1992 "incsearchdown" does the same downwards. Removed a bogus mapping of
1997 "incsearchdown" does the same downwards. Removed a bogus mapping of
1993 the x key to "delete".
1998 the x key to "delete".
1994
1999
1995 2006-06-15 Ville Vainio <vivainio@gmail.com>
2000 2006-06-15 Ville Vainio <vivainio@gmail.com>
1996
2001
1997 * iplib.py, hooks.py: Added new generate_prompt hook that can be
2002 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1998 used to create prompts dynamically, instead of the "old" way of
2003 used to create prompts dynamically, instead of the "old" way of
1999 assigning "magic" strings to prompt_in1 and prompt_in2. The old
2004 assigning "magic" strings to prompt_in1 and prompt_in2. The old
2000 way still works (it's invoked by the default hook), of course.
2005 way still works (it's invoked by the default hook), of course.
2001
2006
2002 * Prompts.py: added generate_output_prompt hook for altering output
2007 * Prompts.py: added generate_output_prompt hook for altering output
2003 prompt
2008 prompt
2004
2009
2005 * Release.py: Changed version string to 0.7.3.svn.
2010 * Release.py: Changed version string to 0.7.3.svn.
2006
2011
2007 2006-06-15 Walter Doerwald <walter@livinglogic.de>
2012 2006-06-15 Walter Doerwald <walter@livinglogic.de>
2008
2013
2009 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
2014 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
2010 the call to fetch() always tries to fetch enough data for at least one
2015 the call to fetch() always tries to fetch enough data for at least one
2011 full screen. This makes it possible to simply call moveto(0,0,True) in
2016 full screen. This makes it possible to simply call moveto(0,0,True) in
2012 the constructor. Fix typos and removed the obsolete goto attribute.
2017 the constructor. Fix typos and removed the obsolete goto attribute.
2013
2018
2014 2006-06-12 Ville Vainio <vivainio@gmail.com>
2019 2006-06-12 Ville Vainio <vivainio@gmail.com>
2015
2020
2016 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
2021 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
2017 allowing $variable interpolation within multiline statements,
2022 allowing $variable interpolation within multiline statements,
2018 though so far only with "sh" profile for a testing period.
2023 though so far only with "sh" profile for a testing period.
2019 The patch also enables splitting long commands with \ but it
2024 The patch also enables splitting long commands with \ but it
2020 doesn't work properly yet.
2025 doesn't work properly yet.
2021
2026
2022 2006-06-12 Walter Doerwald <walter@livinglogic.de>
2027 2006-06-12 Walter Doerwald <walter@livinglogic.de>
2023
2028
2024 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
2029 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
2025 input history and the position of the cursor in the input history for
2030 input history and the position of the cursor in the input history for
2026 the find, findbackwards and goto command.
2031 the find, findbackwards and goto command.
2027
2032
2028 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2033 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2029
2034
2030 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
2035 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
2031 implements the basic functionality of browser commands that require
2036 implements the basic functionality of browser commands that require
2032 input. Reimplement the goto, find and findbackwards commands as
2037 input. Reimplement the goto, find and findbackwards commands as
2033 subclasses of _CommandInput. Add an input history and keymaps to those
2038 subclasses of _CommandInput. Add an input history and keymaps to those
2034 commands. Add "\r" as a keyboard shortcut for the enterdefault and
2039 commands. Add "\r" as a keyboard shortcut for the enterdefault and
2035 execute commands.
2040 execute commands.
2036
2041
2037 2006-06-07 Ville Vainio <vivainio@gmail.com>
2042 2006-06-07 Ville Vainio <vivainio@gmail.com>
2038
2043
2039 * iplib.py: ipython mybatch.ipy exits ipython immediately after
2044 * iplib.py: ipython mybatch.ipy exits ipython immediately after
2040 running the batch files instead of leaving the session open.
2045 running the batch files instead of leaving the session open.
2041
2046
2042 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
2047 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
2043
2048
2044 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
2049 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
2045 the original fix was incomplete. Patch submitted by W. Maier.
2050 the original fix was incomplete. Patch submitted by W. Maier.
2046
2051
2047 2006-06-07 Ville Vainio <vivainio@gmail.com>
2052 2006-06-07 Ville Vainio <vivainio@gmail.com>
2048
2053
2049 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
2054 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
2050 Confirmation prompts can be supressed by 'quiet' option.
2055 Confirmation prompts can be supressed by 'quiet' option.
2051 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
2056 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
2052
2057
2053 2006-06-06 *** Released version 0.7.2
2058 2006-06-06 *** Released version 0.7.2
2054
2059
2055 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
2060 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
2056
2061
2057 * IPython/Release.py (version): Made 0.7.2 final for release.
2062 * IPython/Release.py (version): Made 0.7.2 final for release.
2058 Repo tagged and release cut.
2063 Repo tagged and release cut.
2059
2064
2060 2006-06-05 Ville Vainio <vivainio@gmail.com>
2065 2006-06-05 Ville Vainio <vivainio@gmail.com>
2061
2066
2062 * Magic.py (magic_rehashx): Honor no_alias list earlier in
2067 * Magic.py (magic_rehashx): Honor no_alias list earlier in
2063 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
2068 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
2064
2069
2065 * upgrade_dir.py: try import 'path' module a bit harder
2070 * upgrade_dir.py: try import 'path' module a bit harder
2066 (for %upgrade)
2071 (for %upgrade)
2067
2072
2068 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
2073 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
2069
2074
2070 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
2075 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
2071 instead of looping 20 times.
2076 instead of looping 20 times.
2072
2077
2073 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
2078 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
2074 correctly at initialization time. Bug reported by Krishna Mohan
2079 correctly at initialization time. Bug reported by Krishna Mohan
2075 Gundu <gkmohan-AT-gmail.com> on the user list.
2080 Gundu <gkmohan-AT-gmail.com> on the user list.
2076
2081
2077 * IPython/Release.py (version): Mark 0.7.2 version to start
2082 * IPython/Release.py (version): Mark 0.7.2 version to start
2078 testing for release on 06/06.
2083 testing for release on 06/06.
2079
2084
2080 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
2085 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
2081
2086
2082 * scripts/irunner: thin script interface so users don't have to
2087 * scripts/irunner: thin script interface so users don't have to
2083 find the module and call it as an executable, since modules rarely
2088 find the module and call it as an executable, since modules rarely
2084 live in people's PATH.
2089 live in people's PATH.
2085
2090
2086 * IPython/irunner.py (InteractiveRunner.__init__): added
2091 * IPython/irunner.py (InteractiveRunner.__init__): added
2087 delaybeforesend attribute to control delays with newer versions of
2092 delaybeforesend attribute to control delays with newer versions of
2088 pexpect. Thanks to detailed help from pexpect's author, Noah
2093 pexpect. Thanks to detailed help from pexpect's author, Noah
2089 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
2094 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
2090 correctly (it works in NoColor mode).
2095 correctly (it works in NoColor mode).
2091
2096
2092 * IPython/iplib.py (handle_normal): fix nasty crash reported on
2097 * IPython/iplib.py (handle_normal): fix nasty crash reported on
2093 SAGE list, from improper log() calls.
2098 SAGE list, from improper log() calls.
2094
2099
2095 2006-05-31 Ville Vainio <vivainio@gmail.com>
2100 2006-05-31 Ville Vainio <vivainio@gmail.com>
2096
2101
2097 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
2102 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
2098 with args in parens to work correctly with dirs that have spaces.
2103 with args in parens to work correctly with dirs that have spaces.
2099
2104
2100 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
2105 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
2101
2106
2102 * IPython/Logger.py (Logger.logstart): add option to log raw input
2107 * IPython/Logger.py (Logger.logstart): add option to log raw input
2103 instead of the processed one. A -r flag was added to the
2108 instead of the processed one. A -r flag was added to the
2104 %logstart magic used for controlling logging.
2109 %logstart magic used for controlling logging.
2105
2110
2106 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
2111 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
2107
2112
2108 * IPython/iplib.py (InteractiveShell.__init__): add check for the
2113 * IPython/iplib.py (InteractiveShell.__init__): add check for the
2109 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
2114 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
2110 recognize the option. After a bug report by Will Maier. This
2115 recognize the option. After a bug report by Will Maier. This
2111 closes #64 (will do it after confirmation from W. Maier).
2116 closes #64 (will do it after confirmation from W. Maier).
2112
2117
2113 * IPython/irunner.py: New module to run scripts as if manually
2118 * IPython/irunner.py: New module to run scripts as if manually
2114 typed into an interactive environment, based on pexpect. After a
2119 typed into an interactive environment, based on pexpect. After a
2115 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
2120 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
2116 ipython-user list. Simple unittests in the tests/ directory.
2121 ipython-user list. Simple unittests in the tests/ directory.
2117
2122
2118 * tools/release: add Will Maier, OpenBSD port maintainer, to
2123 * tools/release: add Will Maier, OpenBSD port maintainer, to
2119 recepients list. We are now officially part of the OpenBSD ports:
2124 recepients list. We are now officially part of the OpenBSD ports:
2120 http://www.openbsd.org/ports.html ! Many thanks to Will for the
2125 http://www.openbsd.org/ports.html ! Many thanks to Will for the
2121 work.
2126 work.
2122
2127
2123 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
2128 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
2124
2129
2125 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
2130 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
2126 so that it doesn't break tkinter apps.
2131 so that it doesn't break tkinter apps.
2127
2132
2128 * IPython/iplib.py (_prefilter): fix bug where aliases would
2133 * IPython/iplib.py (_prefilter): fix bug where aliases would
2129 shadow variables when autocall was fully off. Reported by SAGE
2134 shadow variables when autocall was fully off. Reported by SAGE
2130 author William Stein.
2135 author William Stein.
2131
2136
2132 * IPython/OInspect.py (Inspector.__init__): add a flag to control
2137 * IPython/OInspect.py (Inspector.__init__): add a flag to control
2133 at what detail level strings are computed when foo? is requested.
2138 at what detail level strings are computed when foo? is requested.
2134 This allows users to ask for example that the string form of an
2139 This allows users to ask for example that the string form of an
2135 object is only computed when foo?? is called, or even never, by
2140 object is only computed when foo?? is called, or even never, by
2136 setting the object_info_string_level >= 2 in the configuration
2141 setting the object_info_string_level >= 2 in the configuration
2137 file. This new option has been added and documented. After a
2142 file. This new option has been added and documented. After a
2138 request by SAGE to be able to control the printing of very large
2143 request by SAGE to be able to control the printing of very large
2139 objects more easily.
2144 objects more easily.
2140
2145
2141 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
2146 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
2142
2147
2143 * IPython/ipmaker.py (make_IPython): remove the ipython call path
2148 * IPython/ipmaker.py (make_IPython): remove the ipython call path
2144 from sys.argv, to be 100% consistent with how Python itself works
2149 from sys.argv, to be 100% consistent with how Python itself works
2145 (as seen for example with python -i file.py). After a bug report
2150 (as seen for example with python -i file.py). After a bug report
2146 by Jeffrey Collins.
2151 by Jeffrey Collins.
2147
2152
2148 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
2153 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
2149 nasty bug which was preventing custom namespaces with -pylab,
2154 nasty bug which was preventing custom namespaces with -pylab,
2150 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
2155 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
2151 compatibility (long gone from mpl).
2156 compatibility (long gone from mpl).
2152
2157
2153 * IPython/ipapi.py (make_session): name change: create->make. We
2158 * IPython/ipapi.py (make_session): name change: create->make. We
2154 use make in other places (ipmaker,...), it's shorter and easier to
2159 use make in other places (ipmaker,...), it's shorter and easier to
2155 type and say, etc. I'm trying to clean things before 0.7.2 so
2160 type and say, etc. I'm trying to clean things before 0.7.2 so
2156 that I can keep things stable wrt to ipapi in the chainsaw branch.
2161 that I can keep things stable wrt to ipapi in the chainsaw branch.
2157
2162
2158 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
2163 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
2159 python-mode recognizes our debugger mode. Add support for
2164 python-mode recognizes our debugger mode. Add support for
2160 autoindent inside (X)emacs. After a patch sent in by Jin Liu
2165 autoindent inside (X)emacs. After a patch sent in by Jin Liu
2161 <m.liu.jin-AT-gmail.com> originally written by
2166 <m.liu.jin-AT-gmail.com> originally written by
2162 doxgen-AT-newsmth.net (with minor modifications for xemacs
2167 doxgen-AT-newsmth.net (with minor modifications for xemacs
2163 compatibility)
2168 compatibility)
2164
2169
2165 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
2170 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
2166 tracebacks when walking the stack so that the stack tracking system
2171 tracebacks when walking the stack so that the stack tracking system
2167 in emacs' python-mode can identify the frames correctly.
2172 in emacs' python-mode can identify the frames correctly.
2168
2173
2169 * IPython/ipmaker.py (make_IPython): make the internal (and
2174 * IPython/ipmaker.py (make_IPython): make the internal (and
2170 default config) autoedit_syntax value false by default. Too many
2175 default config) autoedit_syntax value false by default. Too many
2171 users have complained to me (both on and off-list) about problems
2176 users have complained to me (both on and off-list) about problems
2172 with this option being on by default, so I'm making it default to
2177 with this option being on by default, so I'm making it default to
2173 off. It can still be enabled by anyone via the usual mechanisms.
2178 off. It can still be enabled by anyone via the usual mechanisms.
2174
2179
2175 * IPython/completer.py (Completer.attr_matches): add support for
2180 * IPython/completer.py (Completer.attr_matches): add support for
2176 PyCrust-style _getAttributeNames magic method. Patch contributed
2181 PyCrust-style _getAttributeNames magic method. Patch contributed
2177 by <mscott-AT-goldenspud.com>. Closes #50.
2182 by <mscott-AT-goldenspud.com>. Closes #50.
2178
2183
2179 * IPython/iplib.py (InteractiveShell.__init__): remove the
2184 * IPython/iplib.py (InteractiveShell.__init__): remove the
2180 deletion of exit/quit from __builtin__, which can break
2185 deletion of exit/quit from __builtin__, which can break
2181 third-party tools like the Zope debugging console. The
2186 third-party tools like the Zope debugging console. The
2182 %exit/%quit magics remain. In general, it's probably a good idea
2187 %exit/%quit magics remain. In general, it's probably a good idea
2183 not to delete anything from __builtin__, since we never know what
2188 not to delete anything from __builtin__, since we never know what
2184 that will break. In any case, python now (for 2.5) will support
2189 that will break. In any case, python now (for 2.5) will support
2185 'real' exit/quit, so this issue is moot. Closes #55.
2190 'real' exit/quit, so this issue is moot. Closes #55.
2186
2191
2187 * IPython/genutils.py (with_obj): rename the 'with' function to
2192 * IPython/genutils.py (with_obj): rename the 'with' function to
2188 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
2193 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
2189 becomes a language keyword. Closes #53.
2194 becomes a language keyword. Closes #53.
2190
2195
2191 * IPython/FakeModule.py (FakeModule.__init__): add a proper
2196 * IPython/FakeModule.py (FakeModule.__init__): add a proper
2192 __file__ attribute to this so it fools more things into thinking
2197 __file__ attribute to this so it fools more things into thinking
2193 it is a real module. Closes #59.
2198 it is a real module. Closes #59.
2194
2199
2195 * IPython/Magic.py (magic_edit): add -n option to open the editor
2200 * IPython/Magic.py (magic_edit): add -n option to open the editor
2196 at a specific line number. After a patch by Stefan van der Walt.
2201 at a specific line number. After a patch by Stefan van der Walt.
2197
2202
2198 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
2203 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
2199
2204
2200 * IPython/iplib.py (edit_syntax_error): fix crash when for some
2205 * IPython/iplib.py (edit_syntax_error): fix crash when for some
2201 reason the file could not be opened. After automatic crash
2206 reason the file could not be opened. After automatic crash
2202 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
2207 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
2203 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
2208 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
2204 (_should_recompile): Don't fire editor if using %bg, since there
2209 (_should_recompile): Don't fire editor if using %bg, since there
2205 is no file in the first place. From the same report as above.
2210 is no file in the first place. From the same report as above.
2206 (raw_input): protect against faulty third-party prefilters. After
2211 (raw_input): protect against faulty third-party prefilters. After
2207 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
2212 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
2208 while running under SAGE.
2213 while running under SAGE.
2209
2214
2210 2006-05-23 Ville Vainio <vivainio@gmail.com>
2215 2006-05-23 Ville Vainio <vivainio@gmail.com>
2211
2216
2212 * ipapi.py: Stripped down ip.to_user_ns() to work only as
2217 * ipapi.py: Stripped down ip.to_user_ns() to work only as
2213 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
2218 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
2214 now returns None (again), unless dummy is specifically allowed by
2219 now returns None (again), unless dummy is specifically allowed by
2215 ipapi.get(allow_dummy=True).
2220 ipapi.get(allow_dummy=True).
2216
2221
2217 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
2222 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
2218
2223
2219 * IPython: remove all 2.2-compatibility objects and hacks from
2224 * IPython: remove all 2.2-compatibility objects and hacks from
2220 everywhere, since we only support 2.3 at this point. Docs
2225 everywhere, since we only support 2.3 at this point. Docs
2221 updated.
2226 updated.
2222
2227
2223 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
2228 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
2224 Anything requiring extra validation can be turned into a Python
2229 Anything requiring extra validation can be turned into a Python
2225 property in the future. I used a property for the db one b/c
2230 property in the future. I used a property for the db one b/c
2226 there was a nasty circularity problem with the initialization
2231 there was a nasty circularity problem with the initialization
2227 order, which right now I don't have time to clean up.
2232 order, which right now I don't have time to clean up.
2228
2233
2229 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
2234 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
2230 another locking bug reported by Jorgen. I'm not 100% sure though,
2235 another locking bug reported by Jorgen. I'm not 100% sure though,
2231 so more testing is needed...
2236 so more testing is needed...
2232
2237
2233 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
2238 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
2234
2239
2235 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
2240 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
2236 local variables from any routine in user code (typically executed
2241 local variables from any routine in user code (typically executed
2237 with %run) directly into the interactive namespace. Very useful
2242 with %run) directly into the interactive namespace. Very useful
2238 when doing complex debugging.
2243 when doing complex debugging.
2239 (IPythonNotRunning): Changed the default None object to a dummy
2244 (IPythonNotRunning): Changed the default None object to a dummy
2240 whose attributes can be queried as well as called without
2245 whose attributes can be queried as well as called without
2241 exploding, to ease writing code which works transparently both in
2246 exploding, to ease writing code which works transparently both in
2242 and out of ipython and uses some of this API.
2247 and out of ipython and uses some of this API.
2243
2248
2244 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
2249 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
2245
2250
2246 * IPython/hooks.py (result_display): Fix the fact that our display
2251 * IPython/hooks.py (result_display): Fix the fact that our display
2247 hook was using str() instead of repr(), as the default python
2252 hook was using str() instead of repr(), as the default python
2248 console does. This had gone unnoticed b/c it only happened if
2253 console does. This had gone unnoticed b/c it only happened if
2249 %Pprint was off, but the inconsistency was there.
2254 %Pprint was off, but the inconsistency was there.
2250
2255
2251 2006-05-15 Ville Vainio <vivainio@gmail.com>
2256 2006-05-15 Ville Vainio <vivainio@gmail.com>
2252
2257
2253 * Oinspect.py: Only show docstring for nonexisting/binary files
2258 * Oinspect.py: Only show docstring for nonexisting/binary files
2254 when doing object??, closing ticket #62
2259 when doing object??, closing ticket #62
2255
2260
2256 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
2261 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
2257
2262
2258 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
2263 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
2259 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
2264 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
2260 was being released in a routine which hadn't checked if it had
2265 was being released in a routine which hadn't checked if it had
2261 been the one to acquire it.
2266 been the one to acquire it.
2262
2267
2263 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
2268 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
2264
2269
2265 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
2270 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
2266
2271
2267 2006-04-11 Ville Vainio <vivainio@gmail.com>
2272 2006-04-11 Ville Vainio <vivainio@gmail.com>
2268
2273
2269 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
2274 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
2270 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
2275 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
2271 prefilters, allowing stuff like magics and aliases in the file.
2276 prefilters, allowing stuff like magics and aliases in the file.
2272
2277
2273 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
2278 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
2274 added. Supported now are "%clear in" and "%clear out" (clear input and
2279 added. Supported now are "%clear in" and "%clear out" (clear input and
2275 output history, respectively). Also fixed CachedOutput.flush to
2280 output history, respectively). Also fixed CachedOutput.flush to
2276 properly flush the output cache.
2281 properly flush the output cache.
2277
2282
2278 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
2283 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
2279 half-success (and fail explicitly).
2284 half-success (and fail explicitly).
2280
2285
2281 2006-03-28 Ville Vainio <vivainio@gmail.com>
2286 2006-03-28 Ville Vainio <vivainio@gmail.com>
2282
2287
2283 * iplib.py: Fix quoting of aliases so that only argless ones
2288 * iplib.py: Fix quoting of aliases so that only argless ones
2284 are quoted
2289 are quoted
2285
2290
2286 2006-03-28 Ville Vainio <vivainio@gmail.com>
2291 2006-03-28 Ville Vainio <vivainio@gmail.com>
2287
2292
2288 * iplib.py: Quote aliases with spaces in the name.
2293 * iplib.py: Quote aliases with spaces in the name.
2289 "c:\program files\blah\bin" is now legal alias target.
2294 "c:\program files\blah\bin" is now legal alias target.
2290
2295
2291 * ext_rehashdir.py: Space no longer allowed as arg
2296 * ext_rehashdir.py: Space no longer allowed as arg
2292 separator, since space is legal in path names.
2297 separator, since space is legal in path names.
2293
2298
2294 2006-03-16 Ville Vainio <vivainio@gmail.com>
2299 2006-03-16 Ville Vainio <vivainio@gmail.com>
2295
2300
2296 * upgrade_dir.py: Take path.py from Extensions, correcting
2301 * upgrade_dir.py: Take path.py from Extensions, correcting
2297 %upgrade magic
2302 %upgrade magic
2298
2303
2299 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
2304 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
2300
2305
2301 * hooks.py: Only enclose editor binary in quotes if legal and
2306 * hooks.py: Only enclose editor binary in quotes if legal and
2302 necessary (space in the name, and is an existing file). Fixes a bug
2307 necessary (space in the name, and is an existing file). Fixes a bug
2303 reported by Zachary Pincus.
2308 reported by Zachary Pincus.
2304
2309
2305 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
2310 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
2306
2311
2307 * Manual: thanks to a tip on proper color handling for Emacs, by
2312 * Manual: thanks to a tip on proper color handling for Emacs, by
2308 Eric J Haywiser <ejh1-AT-MIT.EDU>.
2313 Eric J Haywiser <ejh1-AT-MIT.EDU>.
2309
2314
2310 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
2315 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
2311 by applying the provided patch. Thanks to Liu Jin
2316 by applying the provided patch. Thanks to Liu Jin
2312 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
2317 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
2313 XEmacs/Linux, I'm trusting the submitter that it actually helps
2318 XEmacs/Linux, I'm trusting the submitter that it actually helps
2314 under win32/GNU Emacs. Will revisit if any problems are reported.
2319 under win32/GNU Emacs. Will revisit if any problems are reported.
2315
2320
2316 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2321 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2317
2322
2318 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
2323 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
2319 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
2324 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
2320
2325
2321 2006-03-12 Ville Vainio <vivainio@gmail.com>
2326 2006-03-12 Ville Vainio <vivainio@gmail.com>
2322
2327
2323 * Magic.py (magic_timeit): Added %timeit magic, contributed by
2328 * Magic.py (magic_timeit): Added %timeit magic, contributed by
2324 Torsten Marek.
2329 Torsten Marek.
2325
2330
2326 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2331 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2327
2332
2328 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
2333 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
2329 line ranges works again.
2334 line ranges works again.
2330
2335
2331 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
2336 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
2332
2337
2333 * IPython/iplib.py (showtraceback): add back sys.last_traceback
2338 * IPython/iplib.py (showtraceback): add back sys.last_traceback
2334 and friends, after a discussion with Zach Pincus on ipython-user.
2339 and friends, after a discussion with Zach Pincus on ipython-user.
2335 I'm not 100% sure, but after thinking about it quite a bit, it may
2340 I'm not 100% sure, but after thinking about it quite a bit, it may
2336 be OK. Testing with the multithreaded shells didn't reveal any
2341 be OK. Testing with the multithreaded shells didn't reveal any
2337 problems, but let's keep an eye out.
2342 problems, but let's keep an eye out.
2338
2343
2339 In the process, I fixed a few things which were calling
2344 In the process, I fixed a few things which were calling
2340 self.InteractiveTB() directly (like safe_execfile), which is a
2345 self.InteractiveTB() directly (like safe_execfile), which is a
2341 mistake: ALL exception reporting should be done by calling
2346 mistake: ALL exception reporting should be done by calling
2342 self.showtraceback(), which handles state and tab-completion and
2347 self.showtraceback(), which handles state and tab-completion and
2343 more.
2348 more.
2344
2349
2345 2006-03-01 Ville Vainio <vivainio@gmail.com>
2350 2006-03-01 Ville Vainio <vivainio@gmail.com>
2346
2351
2347 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
2352 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
2348 To use, do "from ipipe import *".
2353 To use, do "from ipipe import *".
2349
2354
2350 2006-02-24 Ville Vainio <vivainio@gmail.com>
2355 2006-02-24 Ville Vainio <vivainio@gmail.com>
2351
2356
2352 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
2357 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
2353 "cleanly" and safely than the older upgrade mechanism.
2358 "cleanly" and safely than the older upgrade mechanism.
2354
2359
2355 2006-02-21 Ville Vainio <vivainio@gmail.com>
2360 2006-02-21 Ville Vainio <vivainio@gmail.com>
2356
2361
2357 * Magic.py: %save works again.
2362 * Magic.py: %save works again.
2358
2363
2359 2006-02-15 Ville Vainio <vivainio@gmail.com>
2364 2006-02-15 Ville Vainio <vivainio@gmail.com>
2360
2365
2361 * Magic.py: %Pprint works again
2366 * Magic.py: %Pprint works again
2362
2367
2363 * Extensions/ipy_sane_defaults.py: Provide everything provided
2368 * Extensions/ipy_sane_defaults.py: Provide everything provided
2364 in default ipythonrc, to make it possible to have a completely empty
2369 in default ipythonrc, to make it possible to have a completely empty
2365 ipythonrc (and thus completely rc-file free configuration)
2370 ipythonrc (and thus completely rc-file free configuration)
2366
2371
2367 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
2372 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
2368
2373
2369 * IPython/hooks.py (editor): quote the call to the editor command,
2374 * IPython/hooks.py (editor): quote the call to the editor command,
2370 to allow commands with spaces in them. Problem noted by watching
2375 to allow commands with spaces in them. Problem noted by watching
2371 Ian Oswald's video about textpad under win32 at
2376 Ian Oswald's video about textpad under win32 at
2372 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
2377 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
2373
2378
2374 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
2379 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
2375 describing magics (we haven't used @ for a loong time).
2380 describing magics (we haven't used @ for a loong time).
2376
2381
2377 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
2382 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
2378 contributed by marienz to close
2383 contributed by marienz to close
2379 http://www.scipy.net/roundup/ipython/issue53.
2384 http://www.scipy.net/roundup/ipython/issue53.
2380
2385
2381 2006-02-10 Ville Vainio <vivainio@gmail.com>
2386 2006-02-10 Ville Vainio <vivainio@gmail.com>
2382
2387
2383 * genutils.py: getoutput now works in win32 too
2388 * genutils.py: getoutput now works in win32 too
2384
2389
2385 * completer.py: alias and magic completion only invoked
2390 * completer.py: alias and magic completion only invoked
2386 at the first "item" in the line, to avoid "cd %store"
2391 at the first "item" in the line, to avoid "cd %store"
2387 nonsense.
2392 nonsense.
2388
2393
2389 2006-02-09 Ville Vainio <vivainio@gmail.com>
2394 2006-02-09 Ville Vainio <vivainio@gmail.com>
2390
2395
2391 * test/*: Added a unit testing framework (finally).
2396 * test/*: Added a unit testing framework (finally).
2392 '%run runtests.py' to run test_*.
2397 '%run runtests.py' to run test_*.
2393
2398
2394 * ipapi.py: Exposed runlines and set_custom_exc
2399 * ipapi.py: Exposed runlines and set_custom_exc
2395
2400
2396 2006-02-07 Ville Vainio <vivainio@gmail.com>
2401 2006-02-07 Ville Vainio <vivainio@gmail.com>
2397
2402
2398 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2403 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2399 instead use "f(1 2)" as before.
2404 instead use "f(1 2)" as before.
2400
2405
2401 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2406 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2402
2407
2403 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2408 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2404 facilities, for demos processed by the IPython input filter
2409 facilities, for demos processed by the IPython input filter
2405 (IPythonDemo), and for running a script one-line-at-a-time as a
2410 (IPythonDemo), and for running a script one-line-at-a-time as a
2406 demo, both for pure Python (LineDemo) and for IPython-processed
2411 demo, both for pure Python (LineDemo) and for IPython-processed
2407 input (IPythonLineDemo). After a request by Dave Kohel, from the
2412 input (IPythonLineDemo). After a request by Dave Kohel, from the
2408 SAGE team.
2413 SAGE team.
2409 (Demo.edit): added an edit() method to the demo objects, to edit
2414 (Demo.edit): added an edit() method to the demo objects, to edit
2410 the in-memory copy of the last executed block.
2415 the in-memory copy of the last executed block.
2411
2416
2412 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2417 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2413 processing to %edit, %macro and %save. These commands can now be
2418 processing to %edit, %macro and %save. These commands can now be
2414 invoked on the unprocessed input as it was typed by the user
2419 invoked on the unprocessed input as it was typed by the user
2415 (without any prefilters applied). After requests by the SAGE team
2420 (without any prefilters applied). After requests by the SAGE team
2416 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2421 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2417
2422
2418 2006-02-01 Ville Vainio <vivainio@gmail.com>
2423 2006-02-01 Ville Vainio <vivainio@gmail.com>
2419
2424
2420 * setup.py, eggsetup.py: easy_install ipython==dev works
2425 * setup.py, eggsetup.py: easy_install ipython==dev works
2421 correctly now (on Linux)
2426 correctly now (on Linux)
2422
2427
2423 * ipy_user_conf,ipmaker: user config changes, removed spurious
2428 * ipy_user_conf,ipmaker: user config changes, removed spurious
2424 warnings
2429 warnings
2425
2430
2426 * iplib: if rc.banner is string, use it as is.
2431 * iplib: if rc.banner is string, use it as is.
2427
2432
2428 * Magic: %pycat accepts a string argument and pages it's contents.
2433 * Magic: %pycat accepts a string argument and pages it's contents.
2429
2434
2430
2435
2431 2006-01-30 Ville Vainio <vivainio@gmail.com>
2436 2006-01-30 Ville Vainio <vivainio@gmail.com>
2432
2437
2433 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2438 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2434 Now %store and bookmarks work through PickleShare, meaning that
2439 Now %store and bookmarks work through PickleShare, meaning that
2435 concurrent access is possible and all ipython sessions see the
2440 concurrent access is possible and all ipython sessions see the
2436 same database situation all the time, instead of snapshot of
2441 same database situation all the time, instead of snapshot of
2437 the situation when the session was started. Hence, %bookmark
2442 the situation when the session was started. Hence, %bookmark
2438 results are immediately accessible from othes sessions. The database
2443 results are immediately accessible from othes sessions. The database
2439 is also available for use by user extensions. See:
2444 is also available for use by user extensions. See:
2440 http://www.python.org/pypi/pickleshare
2445 http://www.python.org/pypi/pickleshare
2441
2446
2442 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2447 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2443
2448
2444 * aliases can now be %store'd
2449 * aliases can now be %store'd
2445
2450
2446 * path.py moved to Extensions so that pickleshare does not need
2451 * path.py moved to Extensions so that pickleshare does not need
2447 IPython-specific import. Extensions added to pythonpath right
2452 IPython-specific import. Extensions added to pythonpath right
2448 at __init__.
2453 at __init__.
2449
2454
2450 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2455 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2451 called with _ip.system and the pre-transformed command string.
2456 called with _ip.system and the pre-transformed command string.
2452
2457
2453 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2458 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2454
2459
2455 * IPython/iplib.py (interact): Fix that we were not catching
2460 * IPython/iplib.py (interact): Fix that we were not catching
2456 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2461 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2457 logic here had to change, but it's fixed now.
2462 logic here had to change, but it's fixed now.
2458
2463
2459 2006-01-29 Ville Vainio <vivainio@gmail.com>
2464 2006-01-29 Ville Vainio <vivainio@gmail.com>
2460
2465
2461 * iplib.py: Try to import pyreadline on Windows.
2466 * iplib.py: Try to import pyreadline on Windows.
2462
2467
2463 2006-01-27 Ville Vainio <vivainio@gmail.com>
2468 2006-01-27 Ville Vainio <vivainio@gmail.com>
2464
2469
2465 * iplib.py: Expose ipapi as _ip in builtin namespace.
2470 * iplib.py: Expose ipapi as _ip in builtin namespace.
2466 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2471 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2467 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2472 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2468 syntax now produce _ip.* variant of the commands.
2473 syntax now produce _ip.* variant of the commands.
2469
2474
2470 * "_ip.options().autoedit_syntax = 2" automatically throws
2475 * "_ip.options().autoedit_syntax = 2" automatically throws
2471 user to editor for syntax error correction without prompting.
2476 user to editor for syntax error correction without prompting.
2472
2477
2473 2006-01-27 Ville Vainio <vivainio@gmail.com>
2478 2006-01-27 Ville Vainio <vivainio@gmail.com>
2474
2479
2475 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2480 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2476 'ipython' at argv[0]) executed through command line.
2481 'ipython' at argv[0]) executed through command line.
2477 NOTE: this DEPRECATES calling ipython with multiple scripts
2482 NOTE: this DEPRECATES calling ipython with multiple scripts
2478 ("ipython a.py b.py c.py")
2483 ("ipython a.py b.py c.py")
2479
2484
2480 * iplib.py, hooks.py: Added configurable input prefilter,
2485 * iplib.py, hooks.py: Added configurable input prefilter,
2481 named 'input_prefilter'. See ext_rescapture.py for example
2486 named 'input_prefilter'. See ext_rescapture.py for example
2482 usage.
2487 usage.
2483
2488
2484 * ext_rescapture.py, Magic.py: Better system command output capture
2489 * ext_rescapture.py, Magic.py: Better system command output capture
2485 through 'var = !ls' (deprecates user-visible %sc). Same notation
2490 through 'var = !ls' (deprecates user-visible %sc). Same notation
2486 applies for magics, 'var = %alias' assigns alias list to var.
2491 applies for magics, 'var = %alias' assigns alias list to var.
2487
2492
2488 * ipapi.py: added meta() for accessing extension-usable data store.
2493 * ipapi.py: added meta() for accessing extension-usable data store.
2489
2494
2490 * iplib.py: added InteractiveShell.getapi(). New magics should be
2495 * iplib.py: added InteractiveShell.getapi(). New magics should be
2491 written doing self.getapi() instead of using the shell directly.
2496 written doing self.getapi() instead of using the shell directly.
2492
2497
2493 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2498 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2494 %store foo >> ~/myfoo.txt to store variables to files (in clean
2499 %store foo >> ~/myfoo.txt to store variables to files (in clean
2495 textual form, not a restorable pickle).
2500 textual form, not a restorable pickle).
2496
2501
2497 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2502 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2498
2503
2499 * usage.py, Magic.py: added %quickref
2504 * usage.py, Magic.py: added %quickref
2500
2505
2501 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2506 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2502
2507
2503 * GetoptErrors when invoking magics etc. with wrong args
2508 * GetoptErrors when invoking magics etc. with wrong args
2504 are now more helpful:
2509 are now more helpful:
2505 GetoptError: option -l not recognized (allowed: "qb" )
2510 GetoptError: option -l not recognized (allowed: "qb" )
2506
2511
2507 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2512 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2508
2513
2509 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2514 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2510 computationally intensive blocks don't appear to stall the demo.
2515 computationally intensive blocks don't appear to stall the demo.
2511
2516
2512 2006-01-24 Ville Vainio <vivainio@gmail.com>
2517 2006-01-24 Ville Vainio <vivainio@gmail.com>
2513
2518
2514 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2519 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2515 value to manipulate resulting history entry.
2520 value to manipulate resulting history entry.
2516
2521
2517 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2522 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2518 to instance methods of IPApi class, to make extending an embedded
2523 to instance methods of IPApi class, to make extending an embedded
2519 IPython feasible. See ext_rehashdir.py for example usage.
2524 IPython feasible. See ext_rehashdir.py for example usage.
2520
2525
2521 * Merged 1071-1076 from branches/0.7.1
2526 * Merged 1071-1076 from branches/0.7.1
2522
2527
2523
2528
2524 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2529 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2525
2530
2526 * tools/release (daystamp): Fix build tools to use the new
2531 * tools/release (daystamp): Fix build tools to use the new
2527 eggsetup.py script to build lightweight eggs.
2532 eggsetup.py script to build lightweight eggs.
2528
2533
2529 * Applied changesets 1062 and 1064 before 0.7.1 release.
2534 * Applied changesets 1062 and 1064 before 0.7.1 release.
2530
2535
2531 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2536 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2532 see the raw input history (without conversions like %ls ->
2537 see the raw input history (without conversions like %ls ->
2533 ipmagic("ls")). After a request from W. Stein, SAGE
2538 ipmagic("ls")). After a request from W. Stein, SAGE
2534 (http://modular.ucsd.edu/sage) developer. This information is
2539 (http://modular.ucsd.edu/sage) developer. This information is
2535 stored in the input_hist_raw attribute of the IPython instance, so
2540 stored in the input_hist_raw attribute of the IPython instance, so
2536 developers can access it if needed (it's an InputList instance).
2541 developers can access it if needed (it's an InputList instance).
2537
2542
2538 * Versionstring = 0.7.2.svn
2543 * Versionstring = 0.7.2.svn
2539
2544
2540 * eggsetup.py: A separate script for constructing eggs, creates
2545 * eggsetup.py: A separate script for constructing eggs, creates
2541 proper launch scripts even on Windows (an .exe file in
2546 proper launch scripts even on Windows (an .exe file in
2542 \python24\scripts).
2547 \python24\scripts).
2543
2548
2544 * ipapi.py: launch_new_instance, launch entry point needed for the
2549 * ipapi.py: launch_new_instance, launch entry point needed for the
2545 egg.
2550 egg.
2546
2551
2547 2006-01-23 Ville Vainio <vivainio@gmail.com>
2552 2006-01-23 Ville Vainio <vivainio@gmail.com>
2548
2553
2549 * Added %cpaste magic for pasting python code
2554 * Added %cpaste magic for pasting python code
2550
2555
2551 2006-01-22 Ville Vainio <vivainio@gmail.com>
2556 2006-01-22 Ville Vainio <vivainio@gmail.com>
2552
2557
2553 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2558 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2554
2559
2555 * Versionstring = 0.7.2.svn
2560 * Versionstring = 0.7.2.svn
2556
2561
2557 * eggsetup.py: A separate script for constructing eggs, creates
2562 * eggsetup.py: A separate script for constructing eggs, creates
2558 proper launch scripts even on Windows (an .exe file in
2563 proper launch scripts even on Windows (an .exe file in
2559 \python24\scripts).
2564 \python24\scripts).
2560
2565
2561 * ipapi.py: launch_new_instance, launch entry point needed for the
2566 * ipapi.py: launch_new_instance, launch entry point needed for the
2562 egg.
2567 egg.
2563
2568
2564 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2569 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2565
2570
2566 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2571 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2567 %pfile foo would print the file for foo even if it was a binary.
2572 %pfile foo would print the file for foo even if it was a binary.
2568 Now, extensions '.so' and '.dll' are skipped.
2573 Now, extensions '.so' and '.dll' are skipped.
2569
2574
2570 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2575 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2571 bug, where macros would fail in all threaded modes. I'm not 100%
2576 bug, where macros would fail in all threaded modes. I'm not 100%
2572 sure, so I'm going to put out an rc instead of making a release
2577 sure, so I'm going to put out an rc instead of making a release
2573 today, and wait for feedback for at least a few days.
2578 today, and wait for feedback for at least a few days.
2574
2579
2575 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2580 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2576 it...) the handling of pasting external code with autoindent on.
2581 it...) the handling of pasting external code with autoindent on.
2577 To get out of a multiline input, the rule will appear for most
2582 To get out of a multiline input, the rule will appear for most
2578 users unchanged: two blank lines or change the indent level
2583 users unchanged: two blank lines or change the indent level
2579 proposed by IPython. But there is a twist now: you can
2584 proposed by IPython. But there is a twist now: you can
2580 add/subtract only *one or two spaces*. If you add/subtract three
2585 add/subtract only *one or two spaces*. If you add/subtract three
2581 or more (unless you completely delete the line), IPython will
2586 or more (unless you completely delete the line), IPython will
2582 accept that line, and you'll need to enter a second one of pure
2587 accept that line, and you'll need to enter a second one of pure
2583 whitespace. I know it sounds complicated, but I can't find a
2588 whitespace. I know it sounds complicated, but I can't find a
2584 different solution that covers all the cases, with the right
2589 different solution that covers all the cases, with the right
2585 heuristics. Hopefully in actual use, nobody will really notice
2590 heuristics. Hopefully in actual use, nobody will really notice
2586 all these strange rules and things will 'just work'.
2591 all these strange rules and things will 'just work'.
2587
2592
2588 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2593 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2589
2594
2590 * IPython/iplib.py (interact): catch exceptions which can be
2595 * IPython/iplib.py (interact): catch exceptions which can be
2591 triggered asynchronously by signal handlers. Thanks to an
2596 triggered asynchronously by signal handlers. Thanks to an
2592 automatic crash report, submitted by Colin Kingsley
2597 automatic crash report, submitted by Colin Kingsley
2593 <tercel-AT-gentoo.org>.
2598 <tercel-AT-gentoo.org>.
2594
2599
2595 2006-01-20 Ville Vainio <vivainio@gmail.com>
2600 2006-01-20 Ville Vainio <vivainio@gmail.com>
2596
2601
2597 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2602 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2598 (%rehashdir, very useful, try it out) of how to extend ipython
2603 (%rehashdir, very useful, try it out) of how to extend ipython
2599 with new magics. Also added Extensions dir to pythonpath to make
2604 with new magics. Also added Extensions dir to pythonpath to make
2600 importing extensions easy.
2605 importing extensions easy.
2601
2606
2602 * %store now complains when trying to store interactively declared
2607 * %store now complains when trying to store interactively declared
2603 classes / instances of those classes.
2608 classes / instances of those classes.
2604
2609
2605 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2610 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2606 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2611 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2607 if they exist, and ipy_user_conf.py with some defaults is created for
2612 if they exist, and ipy_user_conf.py with some defaults is created for
2608 the user.
2613 the user.
2609
2614
2610 * Startup rehashing done by the config file, not InterpreterExec.
2615 * Startup rehashing done by the config file, not InterpreterExec.
2611 This means system commands are available even without selecting the
2616 This means system commands are available even without selecting the
2612 pysh profile. It's the sensible default after all.
2617 pysh profile. It's the sensible default after all.
2613
2618
2614 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2619 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2615
2620
2616 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2621 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2617 multiline code with autoindent on working. But I am really not
2622 multiline code with autoindent on working. But I am really not
2618 sure, so this needs more testing. Will commit a debug-enabled
2623 sure, so this needs more testing. Will commit a debug-enabled
2619 version for now, while I test it some more, so that Ville and
2624 version for now, while I test it some more, so that Ville and
2620 others may also catch any problems. Also made
2625 others may also catch any problems. Also made
2621 self.indent_current_str() a method, to ensure that there's no
2626 self.indent_current_str() a method, to ensure that there's no
2622 chance of the indent space count and the corresponding string
2627 chance of the indent space count and the corresponding string
2623 falling out of sync. All code needing the string should just call
2628 falling out of sync. All code needing the string should just call
2624 the method.
2629 the method.
2625
2630
2626 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2631 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2627
2632
2628 * IPython/Magic.py (magic_edit): fix check for when users don't
2633 * IPython/Magic.py (magic_edit): fix check for when users don't
2629 save their output files, the try/except was in the wrong section.
2634 save their output files, the try/except was in the wrong section.
2630
2635
2631 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2636 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2632
2637
2633 * IPython/Magic.py (magic_run): fix __file__ global missing from
2638 * IPython/Magic.py (magic_run): fix __file__ global missing from
2634 script's namespace when executed via %run. After a report by
2639 script's namespace when executed via %run. After a report by
2635 Vivian.
2640 Vivian.
2636
2641
2637 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2642 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2638 when using python 2.4. The parent constructor changed in 2.4, and
2643 when using python 2.4. The parent constructor changed in 2.4, and
2639 we need to track it directly (we can't call it, as it messes up
2644 we need to track it directly (we can't call it, as it messes up
2640 readline and tab-completion inside our pdb would stop working).
2645 readline and tab-completion inside our pdb would stop working).
2641 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2646 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2642
2647
2643 2006-01-16 Ville Vainio <vivainio@gmail.com>
2648 2006-01-16 Ville Vainio <vivainio@gmail.com>
2644
2649
2645 * Ipython/magic.py: Reverted back to old %edit functionality
2650 * Ipython/magic.py: Reverted back to old %edit functionality
2646 that returns file contents on exit.
2651 that returns file contents on exit.
2647
2652
2648 * IPython/path.py: Added Jason Orendorff's "path" module to
2653 * IPython/path.py: Added Jason Orendorff's "path" module to
2649 IPython tree, http://www.jorendorff.com/articles/python/path/.
2654 IPython tree, http://www.jorendorff.com/articles/python/path/.
2650 You can get path objects conveniently through %sc, and !!, e.g.:
2655 You can get path objects conveniently through %sc, and !!, e.g.:
2651 sc files=ls
2656 sc files=ls
2652 for p in files.paths: # or files.p
2657 for p in files.paths: # or files.p
2653 print p,p.mtime
2658 print p,p.mtime
2654
2659
2655 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2660 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2656 now work again without considering the exclusion regexp -
2661 now work again without considering the exclusion regexp -
2657 hence, things like ',foo my/path' turn to 'foo("my/path")'
2662 hence, things like ',foo my/path' turn to 'foo("my/path")'
2658 instead of syntax error.
2663 instead of syntax error.
2659
2664
2660
2665
2661 2006-01-14 Ville Vainio <vivainio@gmail.com>
2666 2006-01-14 Ville Vainio <vivainio@gmail.com>
2662
2667
2663 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2668 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2664 ipapi decorators for python 2.4 users, options() provides access to rc
2669 ipapi decorators for python 2.4 users, options() provides access to rc
2665 data.
2670 data.
2666
2671
2667 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2672 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2668 as path separators (even on Linux ;-). Space character after
2673 as path separators (even on Linux ;-). Space character after
2669 backslash (as yielded by tab completer) is still space;
2674 backslash (as yielded by tab completer) is still space;
2670 "%cd long\ name" works as expected.
2675 "%cd long\ name" works as expected.
2671
2676
2672 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2677 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2673 as "chain of command", with priority. API stays the same,
2678 as "chain of command", with priority. API stays the same,
2674 TryNext exception raised by a hook function signals that
2679 TryNext exception raised by a hook function signals that
2675 current hook failed and next hook should try handling it, as
2680 current hook failed and next hook should try handling it, as
2676 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2681 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2677 requested configurable display hook, which is now implemented.
2682 requested configurable display hook, which is now implemented.
2678
2683
2679 2006-01-13 Ville Vainio <vivainio@gmail.com>
2684 2006-01-13 Ville Vainio <vivainio@gmail.com>
2680
2685
2681 * IPython/platutils*.py: platform specific utility functions,
2686 * IPython/platutils*.py: platform specific utility functions,
2682 so far only set_term_title is implemented (change terminal
2687 so far only set_term_title is implemented (change terminal
2683 label in windowing systems). %cd now changes the title to
2688 label in windowing systems). %cd now changes the title to
2684 current dir.
2689 current dir.
2685
2690
2686 * IPython/Release.py: Added myself to "authors" list,
2691 * IPython/Release.py: Added myself to "authors" list,
2687 had to create new files.
2692 had to create new files.
2688
2693
2689 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2694 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2690 shell escape; not a known bug but had potential to be one in the
2695 shell escape; not a known bug but had potential to be one in the
2691 future.
2696 future.
2692
2697
2693 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2698 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2694 extension API for IPython! See the module for usage example. Fix
2699 extension API for IPython! See the module for usage example. Fix
2695 OInspect for docstring-less magic functions.
2700 OInspect for docstring-less magic functions.
2696
2701
2697
2702
2698 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2703 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2699
2704
2700 * IPython/iplib.py (raw_input): temporarily deactivate all
2705 * IPython/iplib.py (raw_input): temporarily deactivate all
2701 attempts at allowing pasting of code with autoindent on. It
2706 attempts at allowing pasting of code with autoindent on. It
2702 introduced bugs (reported by Prabhu) and I can't seem to find a
2707 introduced bugs (reported by Prabhu) and I can't seem to find a
2703 robust combination which works in all cases. Will have to revisit
2708 robust combination which works in all cases. Will have to revisit
2704 later.
2709 later.
2705
2710
2706 * IPython/genutils.py: remove isspace() function. We've dropped
2711 * IPython/genutils.py: remove isspace() function. We've dropped
2707 2.2 compatibility, so it's OK to use the string method.
2712 2.2 compatibility, so it's OK to use the string method.
2708
2713
2709 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2714 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2710
2715
2711 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2716 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2712 matching what NOT to autocall on, to include all python binary
2717 matching what NOT to autocall on, to include all python binary
2713 operators (including things like 'and', 'or', 'is' and 'in').
2718 operators (including things like 'and', 'or', 'is' and 'in').
2714 Prompted by a bug report on 'foo & bar', but I realized we had
2719 Prompted by a bug report on 'foo & bar', but I realized we had
2715 many more potential bug cases with other operators. The regexp is
2720 many more potential bug cases with other operators. The regexp is
2716 self.re_exclude_auto, it's fairly commented.
2721 self.re_exclude_auto, it's fairly commented.
2717
2722
2718 2006-01-12 Ville Vainio <vivainio@gmail.com>
2723 2006-01-12 Ville Vainio <vivainio@gmail.com>
2719
2724
2720 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2725 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2721 Prettified and hardened string/backslash quoting with ipsystem(),
2726 Prettified and hardened string/backslash quoting with ipsystem(),
2722 ipalias() and ipmagic(). Now even \ characters are passed to
2727 ipalias() and ipmagic(). Now even \ characters are passed to
2723 %magics, !shell escapes and aliases exactly as they are in the
2728 %magics, !shell escapes and aliases exactly as they are in the
2724 ipython command line. Should improve backslash experience,
2729 ipython command line. Should improve backslash experience,
2725 particularly in Windows (path delimiter for some commands that
2730 particularly in Windows (path delimiter for some commands that
2726 won't understand '/'), but Unix benefits as well (regexps). %cd
2731 won't understand '/'), but Unix benefits as well (regexps). %cd
2727 magic still doesn't support backslash path delimiters, though. Also
2732 magic still doesn't support backslash path delimiters, though. Also
2728 deleted all pretense of supporting multiline command strings in
2733 deleted all pretense of supporting multiline command strings in
2729 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2734 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2730
2735
2731 * doc/build_doc_instructions.txt added. Documentation on how to
2736 * doc/build_doc_instructions.txt added. Documentation on how to
2732 use doc/update_manual.py, added yesterday. Both files contributed
2737 use doc/update_manual.py, added yesterday. Both files contributed
2733 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2738 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2734 doc/*.sh for deprecation at a later date.
2739 doc/*.sh for deprecation at a later date.
2735
2740
2736 * /ipython.py Added ipython.py to root directory for
2741 * /ipython.py Added ipython.py to root directory for
2737 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2742 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2738 ipython.py) and development convenience (no need to keep doing
2743 ipython.py) and development convenience (no need to keep doing
2739 "setup.py install" between changes).
2744 "setup.py install" between changes).
2740
2745
2741 * Made ! and !! shell escapes work (again) in multiline expressions:
2746 * Made ! and !! shell escapes work (again) in multiline expressions:
2742 if 1:
2747 if 1:
2743 !ls
2748 !ls
2744 !!ls
2749 !!ls
2745
2750
2746 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2751 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2747
2752
2748 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2753 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2749 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2754 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2750 module in case-insensitive installation. Was causing crashes
2755 module in case-insensitive installation. Was causing crashes
2751 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2756 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2752
2757
2753 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2758 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2754 <marienz-AT-gentoo.org>, closes
2759 <marienz-AT-gentoo.org>, closes
2755 http://www.scipy.net/roundup/ipython/issue51.
2760 http://www.scipy.net/roundup/ipython/issue51.
2756
2761
2757 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2762 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2758
2763
2759 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2764 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2760 problem of excessive CPU usage under *nix and keyboard lag under
2765 problem of excessive CPU usage under *nix and keyboard lag under
2761 win32.
2766 win32.
2762
2767
2763 2006-01-10 *** Released version 0.7.0
2768 2006-01-10 *** Released version 0.7.0
2764
2769
2765 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2770 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2766
2771
2767 * IPython/Release.py (revision): tag version number to 0.7.0,
2772 * IPython/Release.py (revision): tag version number to 0.7.0,
2768 ready for release.
2773 ready for release.
2769
2774
2770 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2775 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2771 it informs the user of the name of the temp. file used. This can
2776 it informs the user of the name of the temp. file used. This can
2772 help if you decide later to reuse that same file, so you know
2777 help if you decide later to reuse that same file, so you know
2773 where to copy the info from.
2778 where to copy the info from.
2774
2779
2775 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2780 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2776
2781
2777 * setup_bdist_egg.py: little script to build an egg. Added
2782 * setup_bdist_egg.py: little script to build an egg. Added
2778 support in the release tools as well.
2783 support in the release tools as well.
2779
2784
2780 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2785 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2781
2786
2782 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2787 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2783 version selection (new -wxversion command line and ipythonrc
2788 version selection (new -wxversion command line and ipythonrc
2784 parameter). Patch contributed by Arnd Baecker
2789 parameter). Patch contributed by Arnd Baecker
2785 <arnd.baecker-AT-web.de>.
2790 <arnd.baecker-AT-web.de>.
2786
2791
2787 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2792 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2788 embedded instances, for variables defined at the interactive
2793 embedded instances, for variables defined at the interactive
2789 prompt of the embedded ipython. Reported by Arnd.
2794 prompt of the embedded ipython. Reported by Arnd.
2790
2795
2791 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2796 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2792 it can be used as a (stateful) toggle, or with a direct parameter.
2797 it can be used as a (stateful) toggle, or with a direct parameter.
2793
2798
2794 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2799 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2795 could be triggered in certain cases and cause the traceback
2800 could be triggered in certain cases and cause the traceback
2796 printer not to work.
2801 printer not to work.
2797
2802
2798 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2803 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2799
2804
2800 * IPython/iplib.py (_should_recompile): Small fix, closes
2805 * IPython/iplib.py (_should_recompile): Small fix, closes
2801 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2806 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2802
2807
2803 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2808 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2804
2809
2805 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2810 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2806 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2811 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2807 Moad for help with tracking it down.
2812 Moad for help with tracking it down.
2808
2813
2809 * IPython/iplib.py (handle_auto): fix autocall handling for
2814 * IPython/iplib.py (handle_auto): fix autocall handling for
2810 objects which support BOTH __getitem__ and __call__ (so that f [x]
2815 objects which support BOTH __getitem__ and __call__ (so that f [x]
2811 is left alone, instead of becoming f([x]) automatically).
2816 is left alone, instead of becoming f([x]) automatically).
2812
2817
2813 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2818 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2814 Ville's patch.
2819 Ville's patch.
2815
2820
2816 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2821 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2817
2822
2818 * IPython/iplib.py (handle_auto): changed autocall semantics to
2823 * IPython/iplib.py (handle_auto): changed autocall semantics to
2819 include 'smart' mode, where the autocall transformation is NOT
2824 include 'smart' mode, where the autocall transformation is NOT
2820 applied if there are no arguments on the line. This allows you to
2825 applied if there are no arguments on the line. This allows you to
2821 just type 'foo' if foo is a callable to see its internal form,
2826 just type 'foo' if foo is a callable to see its internal form,
2822 instead of having it called with no arguments (typically a
2827 instead of having it called with no arguments (typically a
2823 mistake). The old 'full' autocall still exists: for that, you
2828 mistake). The old 'full' autocall still exists: for that, you
2824 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2829 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2825
2830
2826 * IPython/completer.py (Completer.attr_matches): add
2831 * IPython/completer.py (Completer.attr_matches): add
2827 tab-completion support for Enthoughts' traits. After a report by
2832 tab-completion support for Enthoughts' traits. After a report by
2828 Arnd and a patch by Prabhu.
2833 Arnd and a patch by Prabhu.
2829
2834
2830 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2835 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2831
2836
2832 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2837 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2833 Schmolck's patch to fix inspect.getinnerframes().
2838 Schmolck's patch to fix inspect.getinnerframes().
2834
2839
2835 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2840 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2836 for embedded instances, regarding handling of namespaces and items
2841 for embedded instances, regarding handling of namespaces and items
2837 added to the __builtin__ one. Multiple embedded instances and
2842 added to the __builtin__ one. Multiple embedded instances and
2838 recursive embeddings should work better now (though I'm not sure
2843 recursive embeddings should work better now (though I'm not sure
2839 I've got all the corner cases fixed, that code is a bit of a brain
2844 I've got all the corner cases fixed, that code is a bit of a brain
2840 twister).
2845 twister).
2841
2846
2842 * IPython/Magic.py (magic_edit): added support to edit in-memory
2847 * IPython/Magic.py (magic_edit): added support to edit in-memory
2843 macros (automatically creates the necessary temp files). %edit
2848 macros (automatically creates the necessary temp files). %edit
2844 also doesn't return the file contents anymore, it's just noise.
2849 also doesn't return the file contents anymore, it's just noise.
2845
2850
2846 * IPython/completer.py (Completer.attr_matches): revert change to
2851 * IPython/completer.py (Completer.attr_matches): revert change to
2847 complete only on attributes listed in __all__. I realized it
2852 complete only on attributes listed in __all__. I realized it
2848 cripples the tab-completion system as a tool for exploring the
2853 cripples the tab-completion system as a tool for exploring the
2849 internals of unknown libraries (it renders any non-__all__
2854 internals of unknown libraries (it renders any non-__all__
2850 attribute off-limits). I got bit by this when trying to see
2855 attribute off-limits). I got bit by this when trying to see
2851 something inside the dis module.
2856 something inside the dis module.
2852
2857
2853 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2858 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2854
2859
2855 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2860 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2856 namespace for users and extension writers to hold data in. This
2861 namespace for users and extension writers to hold data in. This
2857 follows the discussion in
2862 follows the discussion in
2858 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2863 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2859
2864
2860 * IPython/completer.py (IPCompleter.complete): small patch to help
2865 * IPython/completer.py (IPCompleter.complete): small patch to help
2861 tab-completion under Emacs, after a suggestion by John Barnard
2866 tab-completion under Emacs, after a suggestion by John Barnard
2862 <barnarj-AT-ccf.org>.
2867 <barnarj-AT-ccf.org>.
2863
2868
2864 * IPython/Magic.py (Magic.extract_input_slices): added support for
2869 * IPython/Magic.py (Magic.extract_input_slices): added support for
2865 the slice notation in magics to use N-M to represent numbers N...M
2870 the slice notation in magics to use N-M to represent numbers N...M
2866 (closed endpoints). This is used by %macro and %save.
2871 (closed endpoints). This is used by %macro and %save.
2867
2872
2868 * IPython/completer.py (Completer.attr_matches): for modules which
2873 * IPython/completer.py (Completer.attr_matches): for modules which
2869 define __all__, complete only on those. After a patch by Jeffrey
2874 define __all__, complete only on those. After a patch by Jeffrey
2870 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2875 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2871 speed up this routine.
2876 speed up this routine.
2872
2877
2873 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2878 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2874 don't know if this is the end of it, but the behavior now is
2879 don't know if this is the end of it, but the behavior now is
2875 certainly much more correct. Note that coupled with macros,
2880 certainly much more correct. Note that coupled with macros,
2876 slightly surprising (at first) behavior may occur: a macro will in
2881 slightly surprising (at first) behavior may occur: a macro will in
2877 general expand to multiple lines of input, so upon exiting, the
2882 general expand to multiple lines of input, so upon exiting, the
2878 in/out counters will both be bumped by the corresponding amount
2883 in/out counters will both be bumped by the corresponding amount
2879 (as if the macro's contents had been typed interactively). Typing
2884 (as if the macro's contents had been typed interactively). Typing
2880 %hist will reveal the intermediate (silently processed) lines.
2885 %hist will reveal the intermediate (silently processed) lines.
2881
2886
2882 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2887 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2883 pickle to fail (%run was overwriting __main__ and not restoring
2888 pickle to fail (%run was overwriting __main__ and not restoring
2884 it, but pickle relies on __main__ to operate).
2889 it, but pickle relies on __main__ to operate).
2885
2890
2886 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2891 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2887 using properties, but forgot to make the main InteractiveShell
2892 using properties, but forgot to make the main InteractiveShell
2888 class a new-style class. Properties fail silently, and
2893 class a new-style class. Properties fail silently, and
2889 mysteriously, with old-style class (getters work, but
2894 mysteriously, with old-style class (getters work, but
2890 setters don't do anything).
2895 setters don't do anything).
2891
2896
2892 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2897 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2893
2898
2894 * IPython/Magic.py (magic_history): fix history reporting bug (I
2899 * IPython/Magic.py (magic_history): fix history reporting bug (I
2895 know some nasties are still there, I just can't seem to find a
2900 know some nasties are still there, I just can't seem to find a
2896 reproducible test case to track them down; the input history is
2901 reproducible test case to track them down; the input history is
2897 falling out of sync...)
2902 falling out of sync...)
2898
2903
2899 * IPython/iplib.py (handle_shell_escape): fix bug where both
2904 * IPython/iplib.py (handle_shell_escape): fix bug where both
2900 aliases and system accesses where broken for indented code (such
2905 aliases and system accesses where broken for indented code (such
2901 as loops).
2906 as loops).
2902
2907
2903 * IPython/genutils.py (shell): fix small but critical bug for
2908 * IPython/genutils.py (shell): fix small but critical bug for
2904 win32 system access.
2909 win32 system access.
2905
2910
2906 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2911 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2907
2912
2908 * IPython/iplib.py (showtraceback): remove use of the
2913 * IPython/iplib.py (showtraceback): remove use of the
2909 sys.last_{type/value/traceback} structures, which are non
2914 sys.last_{type/value/traceback} structures, which are non
2910 thread-safe.
2915 thread-safe.
2911 (_prefilter): change control flow to ensure that we NEVER
2916 (_prefilter): change control flow to ensure that we NEVER
2912 introspect objects when autocall is off. This will guarantee that
2917 introspect objects when autocall is off. This will guarantee that
2913 having an input line of the form 'x.y', where access to attribute
2918 having an input line of the form 'x.y', where access to attribute
2914 'y' has side effects, doesn't trigger the side effect TWICE. It
2919 'y' has side effects, doesn't trigger the side effect TWICE. It
2915 is important to note that, with autocall on, these side effects
2920 is important to note that, with autocall on, these side effects
2916 can still happen.
2921 can still happen.
2917 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2922 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2918 trio. IPython offers these three kinds of special calls which are
2923 trio. IPython offers these three kinds of special calls which are
2919 not python code, and it's a good thing to have their call method
2924 not python code, and it's a good thing to have their call method
2920 be accessible as pure python functions (not just special syntax at
2925 be accessible as pure python functions (not just special syntax at
2921 the command line). It gives us a better internal implementation
2926 the command line). It gives us a better internal implementation
2922 structure, as well as exposing these for user scripting more
2927 structure, as well as exposing these for user scripting more
2923 cleanly.
2928 cleanly.
2924
2929
2925 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2930 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2926 file. Now that they'll be more likely to be used with the
2931 file. Now that they'll be more likely to be used with the
2927 persistance system (%store), I want to make sure their module path
2932 persistance system (%store), I want to make sure their module path
2928 doesn't change in the future, so that we don't break things for
2933 doesn't change in the future, so that we don't break things for
2929 users' persisted data.
2934 users' persisted data.
2930
2935
2931 * IPython/iplib.py (autoindent_update): move indentation
2936 * IPython/iplib.py (autoindent_update): move indentation
2932 management into the _text_ processing loop, not the keyboard
2937 management into the _text_ processing loop, not the keyboard
2933 interactive one. This is necessary to correctly process non-typed
2938 interactive one. This is necessary to correctly process non-typed
2934 multiline input (such as macros).
2939 multiline input (such as macros).
2935
2940
2936 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2941 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2937 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2942 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2938 which was producing problems in the resulting manual.
2943 which was producing problems in the resulting manual.
2939 (magic_whos): improve reporting of instances (show their class,
2944 (magic_whos): improve reporting of instances (show their class,
2940 instead of simply printing 'instance' which isn't terribly
2945 instead of simply printing 'instance' which isn't terribly
2941 informative).
2946 informative).
2942
2947
2943 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2948 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2944 (minor mods) to support network shares under win32.
2949 (minor mods) to support network shares under win32.
2945
2950
2946 * IPython/winconsole.py (get_console_size): add new winconsole
2951 * IPython/winconsole.py (get_console_size): add new winconsole
2947 module and fixes to page_dumb() to improve its behavior under
2952 module and fixes to page_dumb() to improve its behavior under
2948 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2953 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2949
2954
2950 * IPython/Magic.py (Macro): simplified Macro class to just
2955 * IPython/Magic.py (Macro): simplified Macro class to just
2951 subclass list. We've had only 2.2 compatibility for a very long
2956 subclass list. We've had only 2.2 compatibility for a very long
2952 time, yet I was still avoiding subclassing the builtin types. No
2957 time, yet I was still avoiding subclassing the builtin types. No
2953 more (I'm also starting to use properties, though I won't shift to
2958 more (I'm also starting to use properties, though I won't shift to
2954 2.3-specific features quite yet).
2959 2.3-specific features quite yet).
2955 (magic_store): added Ville's patch for lightweight variable
2960 (magic_store): added Ville's patch for lightweight variable
2956 persistence, after a request on the user list by Matt Wilkie
2961 persistence, after a request on the user list by Matt Wilkie
2957 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2962 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2958 details.
2963 details.
2959
2964
2960 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2965 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2961 changed the default logfile name from 'ipython.log' to
2966 changed the default logfile name from 'ipython.log' to
2962 'ipython_log.py'. These logs are real python files, and now that
2967 'ipython_log.py'. These logs are real python files, and now that
2963 we have much better multiline support, people are more likely to
2968 we have much better multiline support, people are more likely to
2964 want to use them as such. Might as well name them correctly.
2969 want to use them as such. Might as well name them correctly.
2965
2970
2966 * IPython/Magic.py: substantial cleanup. While we can't stop
2971 * IPython/Magic.py: substantial cleanup. While we can't stop
2967 using magics as mixins, due to the existing customizations 'out
2972 using magics as mixins, due to the existing customizations 'out
2968 there' which rely on the mixin naming conventions, at least I
2973 there' which rely on the mixin naming conventions, at least I
2969 cleaned out all cross-class name usage. So once we are OK with
2974 cleaned out all cross-class name usage. So once we are OK with
2970 breaking compatibility, the two systems can be separated.
2975 breaking compatibility, the two systems can be separated.
2971
2976
2972 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2977 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2973 anymore, and the class is a fair bit less hideous as well. New
2978 anymore, and the class is a fair bit less hideous as well. New
2974 features were also introduced: timestamping of input, and logging
2979 features were also introduced: timestamping of input, and logging
2975 of output results. These are user-visible with the -t and -o
2980 of output results. These are user-visible with the -t and -o
2976 options to %logstart. Closes
2981 options to %logstart. Closes
2977 http://www.scipy.net/roundup/ipython/issue11 and a request by
2982 http://www.scipy.net/roundup/ipython/issue11 and a request by
2978 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2983 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2979
2984
2980 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2985 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2981
2986
2982 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2987 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2983 better handle backslashes in paths. See the thread 'More Windows
2988 better handle backslashes in paths. See the thread 'More Windows
2984 questions part 2 - \/ characters revisited' on the iypthon user
2989 questions part 2 - \/ characters revisited' on the iypthon user
2985 list:
2990 list:
2986 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2991 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2987
2992
2988 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2993 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2989
2994
2990 (InteractiveShell.__init__): change threaded shells to not use the
2995 (InteractiveShell.__init__): change threaded shells to not use the
2991 ipython crash handler. This was causing more problems than not,
2996 ipython crash handler. This was causing more problems than not,
2992 as exceptions in the main thread (GUI code, typically) would
2997 as exceptions in the main thread (GUI code, typically) would
2993 always show up as a 'crash', when they really weren't.
2998 always show up as a 'crash', when they really weren't.
2994
2999
2995 The colors and exception mode commands (%colors/%xmode) have been
3000 The colors and exception mode commands (%colors/%xmode) have been
2996 synchronized to also take this into account, so users can get
3001 synchronized to also take this into account, so users can get
2997 verbose exceptions for their threaded code as well. I also added
3002 verbose exceptions for their threaded code as well. I also added
2998 support for activating pdb inside this exception handler as well,
3003 support for activating pdb inside this exception handler as well,
2999 so now GUI authors can use IPython's enhanced pdb at runtime.
3004 so now GUI authors can use IPython's enhanced pdb at runtime.
3000
3005
3001 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
3006 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
3002 true by default, and add it to the shipped ipythonrc file. Since
3007 true by default, and add it to the shipped ipythonrc file. Since
3003 this asks the user before proceeding, I think it's OK to make it
3008 this asks the user before proceeding, I think it's OK to make it
3004 true by default.
3009 true by default.
3005
3010
3006 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
3011 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
3007 of the previous special-casing of input in the eval loop. I think
3012 of the previous special-casing of input in the eval loop. I think
3008 this is cleaner, as they really are commands and shouldn't have
3013 this is cleaner, as they really are commands and shouldn't have
3009 a special role in the middle of the core code.
3014 a special role in the middle of the core code.
3010
3015
3011 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
3016 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
3012
3017
3013 * IPython/iplib.py (edit_syntax_error): added support for
3018 * IPython/iplib.py (edit_syntax_error): added support for
3014 automatically reopening the editor if the file had a syntax error
3019 automatically reopening the editor if the file had a syntax error
3015 in it. Thanks to scottt who provided the patch at:
3020 in it. Thanks to scottt who provided the patch at:
3016 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
3021 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
3017 version committed).
3022 version committed).
3018
3023
3019 * IPython/iplib.py (handle_normal): add suport for multi-line
3024 * IPython/iplib.py (handle_normal): add suport for multi-line
3020 input with emtpy lines. This fixes
3025 input with emtpy lines. This fixes
3021 http://www.scipy.net/roundup/ipython/issue43 and a similar
3026 http://www.scipy.net/roundup/ipython/issue43 and a similar
3022 discussion on the user list.
3027 discussion on the user list.
3023
3028
3024 WARNING: a behavior change is necessarily introduced to support
3029 WARNING: a behavior change is necessarily introduced to support
3025 blank lines: now a single blank line with whitespace does NOT
3030 blank lines: now a single blank line with whitespace does NOT
3026 break the input loop, which means that when autoindent is on, by
3031 break the input loop, which means that when autoindent is on, by
3027 default hitting return on the next (indented) line does NOT exit.
3032 default hitting return on the next (indented) line does NOT exit.
3028
3033
3029 Instead, to exit a multiline input you can either have:
3034 Instead, to exit a multiline input you can either have:
3030
3035
3031 - TWO whitespace lines (just hit return again), or
3036 - TWO whitespace lines (just hit return again), or
3032 - a single whitespace line of a different length than provided
3037 - a single whitespace line of a different length than provided
3033 by the autoindent (add or remove a space).
3038 by the autoindent (add or remove a space).
3034
3039
3035 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
3040 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
3036 module to better organize all readline-related functionality.
3041 module to better organize all readline-related functionality.
3037 I've deleted FlexCompleter and put all completion clases here.
3042 I've deleted FlexCompleter and put all completion clases here.
3038
3043
3039 * IPython/iplib.py (raw_input): improve indentation management.
3044 * IPython/iplib.py (raw_input): improve indentation management.
3040 It is now possible to paste indented code with autoindent on, and
3045 It is now possible to paste indented code with autoindent on, and
3041 the code is interpreted correctly (though it still looks bad on
3046 the code is interpreted correctly (though it still looks bad on
3042 screen, due to the line-oriented nature of ipython).
3047 screen, due to the line-oriented nature of ipython).
3043 (MagicCompleter.complete): change behavior so that a TAB key on an
3048 (MagicCompleter.complete): change behavior so that a TAB key on an
3044 otherwise empty line actually inserts a tab, instead of completing
3049 otherwise empty line actually inserts a tab, instead of completing
3045 on the entire global namespace. This makes it easier to use the
3050 on the entire global namespace. This makes it easier to use the
3046 TAB key for indentation. After a request by Hans Meine
3051 TAB key for indentation. After a request by Hans Meine
3047 <hans_meine-AT-gmx.net>
3052 <hans_meine-AT-gmx.net>
3048 (_prefilter): add support so that typing plain 'exit' or 'quit'
3053 (_prefilter): add support so that typing plain 'exit' or 'quit'
3049 does a sensible thing. Originally I tried to deviate as little as
3054 does a sensible thing. Originally I tried to deviate as little as
3050 possible from the default python behavior, but even that one may
3055 possible from the default python behavior, but even that one may
3051 change in this direction (thread on python-dev to that effect).
3056 change in this direction (thread on python-dev to that effect).
3052 Regardless, ipython should do the right thing even if CPython's
3057 Regardless, ipython should do the right thing even if CPython's
3053 '>>>' prompt doesn't.
3058 '>>>' prompt doesn't.
3054 (InteractiveShell): removed subclassing code.InteractiveConsole
3059 (InteractiveShell): removed subclassing code.InteractiveConsole
3055 class. By now we'd overridden just about all of its methods: I've
3060 class. By now we'd overridden just about all of its methods: I've
3056 copied the remaining two over, and now ipython is a standalone
3061 copied the remaining two over, and now ipython is a standalone
3057 class. This will provide a clearer picture for the chainsaw
3062 class. This will provide a clearer picture for the chainsaw
3058 branch refactoring.
3063 branch refactoring.
3059
3064
3060 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
3065 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
3061
3066
3062 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
3067 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
3063 failures for objects which break when dir() is called on them.
3068 failures for objects which break when dir() is called on them.
3064
3069
3065 * IPython/FlexCompleter.py (Completer.__init__): Added support for
3070 * IPython/FlexCompleter.py (Completer.__init__): Added support for
3066 distinct local and global namespaces in the completer API. This
3071 distinct local and global namespaces in the completer API. This
3067 change allows us to properly handle completion with distinct
3072 change allows us to properly handle completion with distinct
3068 scopes, including in embedded instances (this had never really
3073 scopes, including in embedded instances (this had never really
3069 worked correctly).
3074 worked correctly).
3070
3075
3071 Note: this introduces a change in the constructor for
3076 Note: this introduces a change in the constructor for
3072 MagicCompleter, as a new global_namespace parameter is now the
3077 MagicCompleter, as a new global_namespace parameter is now the
3073 second argument (the others were bumped one position).
3078 second argument (the others were bumped one position).
3074
3079
3075 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
3080 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
3076
3081
3077 * IPython/iplib.py (embed_mainloop): fix tab-completion in
3082 * IPython/iplib.py (embed_mainloop): fix tab-completion in
3078 embedded instances (which can be done now thanks to Vivian's
3083 embedded instances (which can be done now thanks to Vivian's
3079 frame-handling fixes for pdb).
3084 frame-handling fixes for pdb).
3080 (InteractiveShell.__init__): Fix namespace handling problem in
3085 (InteractiveShell.__init__): Fix namespace handling problem in
3081 embedded instances. We were overwriting __main__ unconditionally,
3086 embedded instances. We were overwriting __main__ unconditionally,
3082 and this should only be done for 'full' (non-embedded) IPython;
3087 and this should only be done for 'full' (non-embedded) IPython;
3083 embedded instances must respect the caller's __main__. Thanks to
3088 embedded instances must respect the caller's __main__. Thanks to
3084 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
3089 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
3085
3090
3086 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
3091 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
3087
3092
3088 * setup.py: added download_url to setup(). This registers the
3093 * setup.py: added download_url to setup(). This registers the
3089 download address at PyPI, which is not only useful to humans
3094 download address at PyPI, which is not only useful to humans
3090 browsing the site, but is also picked up by setuptools (the Eggs
3095 browsing the site, but is also picked up by setuptools (the Eggs
3091 machinery). Thanks to Ville and R. Kern for the info/discussion
3096 machinery). Thanks to Ville and R. Kern for the info/discussion
3092 on this.
3097 on this.
3093
3098
3094 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
3099 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
3095
3100
3096 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
3101 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
3097 This brings a lot of nice functionality to the pdb mode, which now
3102 This brings a lot of nice functionality to the pdb mode, which now
3098 has tab-completion, syntax highlighting, and better stack handling
3103 has tab-completion, syntax highlighting, and better stack handling
3099 than before. Many thanks to Vivian De Smedt
3104 than before. Many thanks to Vivian De Smedt
3100 <vivian-AT-vdesmedt.com> for the original patches.
3105 <vivian-AT-vdesmedt.com> for the original patches.
3101
3106
3102 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
3107 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
3103
3108
3104 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
3109 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
3105 sequence to consistently accept the banner argument. The
3110 sequence to consistently accept the banner argument. The
3106 inconsistency was tripping SAGE, thanks to Gary Zablackis
3111 inconsistency was tripping SAGE, thanks to Gary Zablackis
3107 <gzabl-AT-yahoo.com> for the report.
3112 <gzabl-AT-yahoo.com> for the report.
3108
3113
3109 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3114 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3110
3115
3111 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3116 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3112 Fix bug where a naked 'alias' call in the ipythonrc file would
3117 Fix bug where a naked 'alias' call in the ipythonrc file would
3113 cause a crash. Bug reported by Jorgen Stenarson.
3118 cause a crash. Bug reported by Jorgen Stenarson.
3114
3119
3115 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3120 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3116
3121
3117 * IPython/ipmaker.py (make_IPython): cleanups which should improve
3122 * IPython/ipmaker.py (make_IPython): cleanups which should improve
3118 startup time.
3123 startup time.
3119
3124
3120 * IPython/iplib.py (runcode): my globals 'fix' for embedded
3125 * IPython/iplib.py (runcode): my globals 'fix' for embedded
3121 instances had introduced a bug with globals in normal code. Now
3126 instances had introduced a bug with globals in normal code. Now
3122 it's working in all cases.
3127 it's working in all cases.
3123
3128
3124 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
3129 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
3125 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
3130 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
3126 has been introduced to set the default case sensitivity of the
3131 has been introduced to set the default case sensitivity of the
3127 searches. Users can still select either mode at runtime on a
3132 searches. Users can still select either mode at runtime on a
3128 per-search basis.
3133 per-search basis.
3129
3134
3130 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
3135 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
3131
3136
3132 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
3137 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
3133 attributes in wildcard searches for subclasses. Modified version
3138 attributes in wildcard searches for subclasses. Modified version
3134 of a patch by Jorgen.
3139 of a patch by Jorgen.
3135
3140
3136 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
3141 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
3137
3142
3138 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
3143 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
3139 embedded instances. I added a user_global_ns attribute to the
3144 embedded instances. I added a user_global_ns attribute to the
3140 InteractiveShell class to handle this.
3145 InteractiveShell class to handle this.
3141
3146
3142 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
3147 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
3143
3148
3144 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
3149 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
3145 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
3150 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
3146 (reported under win32, but may happen also in other platforms).
3151 (reported under win32, but may happen also in other platforms).
3147 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
3152 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
3148
3153
3149 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
3154 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
3150
3155
3151 * IPython/Magic.py (magic_psearch): new support for wildcard
3156 * IPython/Magic.py (magic_psearch): new support for wildcard
3152 patterns. Now, typing ?a*b will list all names which begin with a
3157 patterns. Now, typing ?a*b will list all names which begin with a
3153 and end in b, for example. The %psearch magic has full
3158 and end in b, for example. The %psearch magic has full
3154 docstrings. Many thanks to JΓΆrgen Stenarson
3159 docstrings. Many thanks to JΓΆrgen Stenarson
3155 <jorgen.stenarson-AT-bostream.nu>, author of the patches
3160 <jorgen.stenarson-AT-bostream.nu>, author of the patches
3156 implementing this functionality.
3161 implementing this functionality.
3157
3162
3158 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3163 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3159
3164
3160 * Manual: fixed long-standing annoyance of double-dashes (as in
3165 * Manual: fixed long-standing annoyance of double-dashes (as in
3161 --prefix=~, for example) being stripped in the HTML version. This
3166 --prefix=~, for example) being stripped in the HTML version. This
3162 is a latex2html bug, but a workaround was provided. Many thanks
3167 is a latex2html bug, but a workaround was provided. Many thanks
3163 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
3168 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
3164 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
3169 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
3165 rolling. This seemingly small issue had tripped a number of users
3170 rolling. This seemingly small issue had tripped a number of users
3166 when first installing, so I'm glad to see it gone.
3171 when first installing, so I'm glad to see it gone.
3167
3172
3168 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3173 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3169
3174
3170 * IPython/Extensions/numeric_formats.py: fix missing import,
3175 * IPython/Extensions/numeric_formats.py: fix missing import,
3171 reported by Stephen Walton.
3176 reported by Stephen Walton.
3172
3177
3173 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
3178 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
3174
3179
3175 * IPython/demo.py: finish demo module, fully documented now.
3180 * IPython/demo.py: finish demo module, fully documented now.
3176
3181
3177 * IPython/genutils.py (file_read): simple little utility to read a
3182 * IPython/genutils.py (file_read): simple little utility to read a
3178 file and ensure it's closed afterwards.
3183 file and ensure it's closed afterwards.
3179
3184
3180 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
3185 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
3181
3186
3182 * IPython/demo.py (Demo.__init__): added support for individually
3187 * IPython/demo.py (Demo.__init__): added support for individually
3183 tagging blocks for automatic execution.
3188 tagging blocks for automatic execution.
3184
3189
3185 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
3190 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
3186 syntax-highlighted python sources, requested by John.
3191 syntax-highlighted python sources, requested by John.
3187
3192
3188 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
3193 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
3189
3194
3190 * IPython/demo.py (Demo.again): fix bug where again() blocks after
3195 * IPython/demo.py (Demo.again): fix bug where again() blocks after
3191 finishing.
3196 finishing.
3192
3197
3193 * IPython/genutils.py (shlex_split): moved from Magic to here,
3198 * IPython/genutils.py (shlex_split): moved from Magic to here,
3194 where all 2.2 compatibility stuff lives. I needed it for demo.py.
3199 where all 2.2 compatibility stuff lives. I needed it for demo.py.
3195
3200
3196 * IPython/demo.py (Demo.__init__): added support for silent
3201 * IPython/demo.py (Demo.__init__): added support for silent
3197 blocks, improved marks as regexps, docstrings written.
3202 blocks, improved marks as regexps, docstrings written.
3198 (Demo.__init__): better docstring, added support for sys.argv.
3203 (Demo.__init__): better docstring, added support for sys.argv.
3199
3204
3200 * IPython/genutils.py (marquee): little utility used by the demo
3205 * IPython/genutils.py (marquee): little utility used by the demo
3201 code, handy in general.
3206 code, handy in general.
3202
3207
3203 * IPython/demo.py (Demo.__init__): new class for interactive
3208 * IPython/demo.py (Demo.__init__): new class for interactive
3204 demos. Not documented yet, I just wrote it in a hurry for
3209 demos. Not documented yet, I just wrote it in a hurry for
3205 scipy'05. Will docstring later.
3210 scipy'05. Will docstring later.
3206
3211
3207 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
3212 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
3208
3213
3209 * IPython/Shell.py (sigint_handler): Drastic simplification which
3214 * IPython/Shell.py (sigint_handler): Drastic simplification which
3210 also seems to make Ctrl-C work correctly across threads! This is
3215 also seems to make Ctrl-C work correctly across threads! This is
3211 so simple, that I can't beleive I'd missed it before. Needs more
3216 so simple, that I can't beleive I'd missed it before. Needs more
3212 testing, though.
3217 testing, though.
3213 (KBINT): Never mind, revert changes. I'm sure I'd tried something
3218 (KBINT): Never mind, revert changes. I'm sure I'd tried something
3214 like this before...
3219 like this before...
3215
3220
3216 * IPython/genutils.py (get_home_dir): add protection against
3221 * IPython/genutils.py (get_home_dir): add protection against
3217 non-dirs in win32 registry.
3222 non-dirs in win32 registry.
3218
3223
3219 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
3224 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
3220 bug where dict was mutated while iterating (pysh crash).
3225 bug where dict was mutated while iterating (pysh crash).
3221
3226
3222 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
3227 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
3223
3228
3224 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
3229 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
3225 spurious newlines added by this routine. After a report by
3230 spurious newlines added by this routine. After a report by
3226 F. Mantegazza.
3231 F. Mantegazza.
3227
3232
3228 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
3233 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
3229
3234
3230 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
3235 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
3231 calls. These were a leftover from the GTK 1.x days, and can cause
3236 calls. These were a leftover from the GTK 1.x days, and can cause
3232 problems in certain cases (after a report by John Hunter).
3237 problems in certain cases (after a report by John Hunter).
3233
3238
3234 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
3239 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
3235 os.getcwd() fails at init time. Thanks to patch from David Remahl
3240 os.getcwd() fails at init time. Thanks to patch from David Remahl
3236 <chmod007-AT-mac.com>.
3241 <chmod007-AT-mac.com>.
3237 (InteractiveShell.__init__): prevent certain special magics from
3242 (InteractiveShell.__init__): prevent certain special magics from
3238 being shadowed by aliases. Closes
3243 being shadowed by aliases. Closes
3239 http://www.scipy.net/roundup/ipython/issue41.
3244 http://www.scipy.net/roundup/ipython/issue41.
3240
3245
3241 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
3246 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
3242
3247
3243 * IPython/iplib.py (InteractiveShell.complete): Added new
3248 * IPython/iplib.py (InteractiveShell.complete): Added new
3244 top-level completion method to expose the completion mechanism
3249 top-level completion method to expose the completion mechanism
3245 beyond readline-based environments.
3250 beyond readline-based environments.
3246
3251
3247 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
3252 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
3248
3253
3249 * tools/ipsvnc (svnversion): fix svnversion capture.
3254 * tools/ipsvnc (svnversion): fix svnversion capture.
3250
3255
3251 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
3256 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
3252 attribute to self, which was missing. Before, it was set by a
3257 attribute to self, which was missing. Before, it was set by a
3253 routine which in certain cases wasn't being called, so the
3258 routine which in certain cases wasn't being called, so the
3254 instance could end up missing the attribute. This caused a crash.
3259 instance could end up missing the attribute. This caused a crash.
3255 Closes http://www.scipy.net/roundup/ipython/issue40.
3260 Closes http://www.scipy.net/roundup/ipython/issue40.
3256
3261
3257 2005-08-16 Fernando Perez <fperez@colorado.edu>
3262 2005-08-16 Fernando Perez <fperez@colorado.edu>
3258
3263
3259 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
3264 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
3260 contains non-string attribute. Closes
3265 contains non-string attribute. Closes
3261 http://www.scipy.net/roundup/ipython/issue38.
3266 http://www.scipy.net/roundup/ipython/issue38.
3262
3267
3263 2005-08-14 Fernando Perez <fperez@colorado.edu>
3268 2005-08-14 Fernando Perez <fperez@colorado.edu>
3264
3269
3265 * tools/ipsvnc: Minor improvements, to add changeset info.
3270 * tools/ipsvnc: Minor improvements, to add changeset info.
3266
3271
3267 2005-08-12 Fernando Perez <fperez@colorado.edu>
3272 2005-08-12 Fernando Perez <fperez@colorado.edu>
3268
3273
3269 * IPython/iplib.py (runsource): remove self.code_to_run_src
3274 * IPython/iplib.py (runsource): remove self.code_to_run_src
3270 attribute. I realized this is nothing more than
3275 attribute. I realized this is nothing more than
3271 '\n'.join(self.buffer), and having the same data in two different
3276 '\n'.join(self.buffer), and having the same data in two different
3272 places is just asking for synchronization bugs. This may impact
3277 places is just asking for synchronization bugs. This may impact
3273 people who have custom exception handlers, so I need to warn
3278 people who have custom exception handlers, so I need to warn
3274 ipython-dev about it (F. Mantegazza may use them).
3279 ipython-dev about it (F. Mantegazza may use them).
3275
3280
3276 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
3281 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
3277
3282
3278 * IPython/genutils.py: fix 2.2 compatibility (generators)
3283 * IPython/genutils.py: fix 2.2 compatibility (generators)
3279
3284
3280 2005-07-18 Fernando Perez <fperez@colorado.edu>
3285 2005-07-18 Fernando Perez <fperez@colorado.edu>
3281
3286
3282 * IPython/genutils.py (get_home_dir): fix to help users with
3287 * IPython/genutils.py (get_home_dir): fix to help users with
3283 invalid $HOME under win32.
3288 invalid $HOME under win32.
3284
3289
3285 2005-07-17 Fernando Perez <fperez@colorado.edu>
3290 2005-07-17 Fernando Perez <fperez@colorado.edu>
3286
3291
3287 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
3292 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
3288 some old hacks and clean up a bit other routines; code should be
3293 some old hacks and clean up a bit other routines; code should be
3289 simpler and a bit faster.
3294 simpler and a bit faster.
3290
3295
3291 * IPython/iplib.py (interact): removed some last-resort attempts
3296 * IPython/iplib.py (interact): removed some last-resort attempts
3292 to survive broken stdout/stderr. That code was only making it
3297 to survive broken stdout/stderr. That code was only making it
3293 harder to abstract out the i/o (necessary for gui integration),
3298 harder to abstract out the i/o (necessary for gui integration),
3294 and the crashes it could prevent were extremely rare in practice
3299 and the crashes it could prevent were extremely rare in practice
3295 (besides being fully user-induced in a pretty violent manner).
3300 (besides being fully user-induced in a pretty violent manner).
3296
3301
3297 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
3302 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
3298 Nothing major yet, but the code is simpler to read; this should
3303 Nothing major yet, but the code is simpler to read; this should
3299 make it easier to do more serious modifications in the future.
3304 make it easier to do more serious modifications in the future.
3300
3305
3301 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
3306 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
3302 which broke in .15 (thanks to a report by Ville).
3307 which broke in .15 (thanks to a report by Ville).
3303
3308
3304 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
3309 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
3305 be quite correct, I know next to nothing about unicode). This
3310 be quite correct, I know next to nothing about unicode). This
3306 will allow unicode strings to be used in prompts, amongst other
3311 will allow unicode strings to be used in prompts, amongst other
3307 cases. It also will prevent ipython from crashing when unicode
3312 cases. It also will prevent ipython from crashing when unicode
3308 shows up unexpectedly in many places. If ascii encoding fails, we
3313 shows up unexpectedly in many places. If ascii encoding fails, we
3309 assume utf_8. Currently the encoding is not a user-visible
3314 assume utf_8. Currently the encoding is not a user-visible
3310 setting, though it could be made so if there is demand for it.
3315 setting, though it could be made so if there is demand for it.
3311
3316
3312 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
3317 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
3313
3318
3314 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
3319 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
3315
3320
3316 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
3321 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
3317
3322
3318 * IPython/genutils.py: Add 2.2 compatibility here, so all other
3323 * IPython/genutils.py: Add 2.2 compatibility here, so all other
3319 code can work transparently for 2.2/2.3.
3324 code can work transparently for 2.2/2.3.
3320
3325
3321 2005-07-16 Fernando Perez <fperez@colorado.edu>
3326 2005-07-16 Fernando Perez <fperez@colorado.edu>
3322
3327
3323 * IPython/ultraTB.py (ExceptionColors): Make a global variable
3328 * IPython/ultraTB.py (ExceptionColors): Make a global variable
3324 out of the color scheme table used for coloring exception
3329 out of the color scheme table used for coloring exception
3325 tracebacks. This allows user code to add new schemes at runtime.
3330 tracebacks. This allows user code to add new schemes at runtime.
3326 This is a minimally modified version of the patch at
3331 This is a minimally modified version of the patch at
3327 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
3332 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
3328 for the contribution.
3333 for the contribution.
3329
3334
3330 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
3335 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
3331 slightly modified version of the patch in
3336 slightly modified version of the patch in
3332 http://www.scipy.net/roundup/ipython/issue34, which also allows me
3337 http://www.scipy.net/roundup/ipython/issue34, which also allows me
3333 to remove the previous try/except solution (which was costlier).
3338 to remove the previous try/except solution (which was costlier).
3334 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
3339 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
3335
3340
3336 2005-06-08 Fernando Perez <fperez@colorado.edu>
3341 2005-06-08 Fernando Perez <fperez@colorado.edu>
3337
3342
3338 * IPython/iplib.py (write/write_err): Add methods to abstract all
3343 * IPython/iplib.py (write/write_err): Add methods to abstract all
3339 I/O a bit more.
3344 I/O a bit more.
3340
3345
3341 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
3346 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
3342 warning, reported by Aric Hagberg, fix by JD Hunter.
3347 warning, reported by Aric Hagberg, fix by JD Hunter.
3343
3348
3344 2005-06-02 *** Released version 0.6.15
3349 2005-06-02 *** Released version 0.6.15
3345
3350
3346 2005-06-01 Fernando Perez <fperez@colorado.edu>
3351 2005-06-01 Fernando Perez <fperez@colorado.edu>
3347
3352
3348 * IPython/iplib.py (MagicCompleter.file_matches): Fix
3353 * IPython/iplib.py (MagicCompleter.file_matches): Fix
3349 tab-completion of filenames within open-quoted strings. Note that
3354 tab-completion of filenames within open-quoted strings. Note that
3350 this requires that in ~/.ipython/ipythonrc, users change the
3355 this requires that in ~/.ipython/ipythonrc, users change the
3351 readline delimiters configuration to read:
3356 readline delimiters configuration to read:
3352
3357
3353 readline_remove_delims -/~
3358 readline_remove_delims -/~
3354
3359
3355
3360
3356 2005-05-31 *** Released version 0.6.14
3361 2005-05-31 *** Released version 0.6.14
3357
3362
3358 2005-05-29 Fernando Perez <fperez@colorado.edu>
3363 2005-05-29 Fernando Perez <fperez@colorado.edu>
3359
3364
3360 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
3365 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
3361 with files not on the filesystem. Reported by Eliyahu Sandler
3366 with files not on the filesystem. Reported by Eliyahu Sandler
3362 <eli@gondolin.net>
3367 <eli@gondolin.net>
3363
3368
3364 2005-05-22 Fernando Perez <fperez@colorado.edu>
3369 2005-05-22 Fernando Perez <fperez@colorado.edu>
3365
3370
3366 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
3371 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
3367 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
3372 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
3368
3373
3369 2005-05-19 Fernando Perez <fperez@colorado.edu>
3374 2005-05-19 Fernando Perez <fperez@colorado.edu>
3370
3375
3371 * IPython/iplib.py (safe_execfile): close a file which could be
3376 * IPython/iplib.py (safe_execfile): close a file which could be
3372 left open (causing problems in win32, which locks open files).
3377 left open (causing problems in win32, which locks open files).
3373 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
3378 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
3374
3379
3375 2005-05-18 Fernando Perez <fperez@colorado.edu>
3380 2005-05-18 Fernando Perez <fperez@colorado.edu>
3376
3381
3377 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
3382 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
3378 keyword arguments correctly to safe_execfile().
3383 keyword arguments correctly to safe_execfile().
3379
3384
3380 2005-05-13 Fernando Perez <fperez@colorado.edu>
3385 2005-05-13 Fernando Perez <fperez@colorado.edu>
3381
3386
3382 * ipython.1: Added info about Qt to manpage, and threads warning
3387 * ipython.1: Added info about Qt to manpage, and threads warning
3383 to usage page (invoked with --help).
3388 to usage page (invoked with --help).
3384
3389
3385 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
3390 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
3386 new matcher (it goes at the end of the priority list) to do
3391 new matcher (it goes at the end of the priority list) to do
3387 tab-completion on named function arguments. Submitted by George
3392 tab-completion on named function arguments. Submitted by George
3388 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3393 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3389 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3394 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3390 for more details.
3395 for more details.
3391
3396
3392 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3397 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3393 SystemExit exceptions in the script being run. Thanks to a report
3398 SystemExit exceptions in the script being run. Thanks to a report
3394 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3399 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3395 producing very annoying behavior when running unit tests.
3400 producing very annoying behavior when running unit tests.
3396
3401
3397 2005-05-12 Fernando Perez <fperez@colorado.edu>
3402 2005-05-12 Fernando Perez <fperez@colorado.edu>
3398
3403
3399 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3404 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3400 which I'd broken (again) due to a changed regexp. In the process,
3405 which I'd broken (again) due to a changed regexp. In the process,
3401 added ';' as an escape to auto-quote the whole line without
3406 added ';' as an escape to auto-quote the whole line without
3402 splitting its arguments. Thanks to a report by Jerry McRae
3407 splitting its arguments. Thanks to a report by Jerry McRae
3403 <qrs0xyc02-AT-sneakemail.com>.
3408 <qrs0xyc02-AT-sneakemail.com>.
3404
3409
3405 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3410 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3406 possible crashes caused by a TokenError. Reported by Ed Schofield
3411 possible crashes caused by a TokenError. Reported by Ed Schofield
3407 <schofield-AT-ftw.at>.
3412 <schofield-AT-ftw.at>.
3408
3413
3409 2005-05-06 Fernando Perez <fperez@colorado.edu>
3414 2005-05-06 Fernando Perez <fperez@colorado.edu>
3410
3415
3411 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3416 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3412
3417
3413 2005-04-29 Fernando Perez <fperez@colorado.edu>
3418 2005-04-29 Fernando Perez <fperez@colorado.edu>
3414
3419
3415 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3420 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3416 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3421 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3417 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3422 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3418 which provides support for Qt interactive usage (similar to the
3423 which provides support for Qt interactive usage (similar to the
3419 existing one for WX and GTK). This had been often requested.
3424 existing one for WX and GTK). This had been often requested.
3420
3425
3421 2005-04-14 *** Released version 0.6.13
3426 2005-04-14 *** Released version 0.6.13
3422
3427
3423 2005-04-08 Fernando Perez <fperez@colorado.edu>
3428 2005-04-08 Fernando Perez <fperez@colorado.edu>
3424
3429
3425 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3430 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3426 from _ofind, which gets called on almost every input line. Now,
3431 from _ofind, which gets called on almost every input line. Now,
3427 we only try to get docstrings if they are actually going to be
3432 we only try to get docstrings if they are actually going to be
3428 used (the overhead of fetching unnecessary docstrings can be
3433 used (the overhead of fetching unnecessary docstrings can be
3429 noticeable for certain objects, such as Pyro proxies).
3434 noticeable for certain objects, such as Pyro proxies).
3430
3435
3431 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3436 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3432 for completers. For some reason I had been passing them the state
3437 for completers. For some reason I had been passing them the state
3433 variable, which completers never actually need, and was in
3438 variable, which completers never actually need, and was in
3434 conflict with the rlcompleter API. Custom completers ONLY need to
3439 conflict with the rlcompleter API. Custom completers ONLY need to
3435 take the text parameter.
3440 take the text parameter.
3436
3441
3437 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3442 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3438 work correctly in pysh. I've also moved all the logic which used
3443 work correctly in pysh. I've also moved all the logic which used
3439 to be in pysh.py here, which will prevent problems with future
3444 to be in pysh.py here, which will prevent problems with future
3440 upgrades. However, this time I must warn users to update their
3445 upgrades. However, this time I must warn users to update their
3441 pysh profile to include the line
3446 pysh profile to include the line
3442
3447
3443 import_all IPython.Extensions.InterpreterExec
3448 import_all IPython.Extensions.InterpreterExec
3444
3449
3445 because otherwise things won't work for them. They MUST also
3450 because otherwise things won't work for them. They MUST also
3446 delete pysh.py and the line
3451 delete pysh.py and the line
3447
3452
3448 execfile pysh.py
3453 execfile pysh.py
3449
3454
3450 from their ipythonrc-pysh.
3455 from their ipythonrc-pysh.
3451
3456
3452 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3457 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3453 robust in the face of objects whose dir() returns non-strings
3458 robust in the face of objects whose dir() returns non-strings
3454 (which it shouldn't, but some broken libs like ITK do). Thanks to
3459 (which it shouldn't, but some broken libs like ITK do). Thanks to
3455 a patch by John Hunter (implemented differently, though). Also
3460 a patch by John Hunter (implemented differently, though). Also
3456 minor improvements by using .extend instead of + on lists.
3461 minor improvements by using .extend instead of + on lists.
3457
3462
3458 * pysh.py:
3463 * pysh.py:
3459
3464
3460 2005-04-06 Fernando Perez <fperez@colorado.edu>
3465 2005-04-06 Fernando Perez <fperez@colorado.edu>
3461
3466
3462 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3467 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3463 by default, so that all users benefit from it. Those who don't
3468 by default, so that all users benefit from it. Those who don't
3464 want it can still turn it off.
3469 want it can still turn it off.
3465
3470
3466 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3471 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3467 config file, I'd forgotten about this, so users were getting it
3472 config file, I'd forgotten about this, so users were getting it
3468 off by default.
3473 off by default.
3469
3474
3470 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3475 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3471 consistency. Now magics can be called in multiline statements,
3476 consistency. Now magics can be called in multiline statements,
3472 and python variables can be expanded in magic calls via $var.
3477 and python variables can be expanded in magic calls via $var.
3473 This makes the magic system behave just like aliases or !system
3478 This makes the magic system behave just like aliases or !system
3474 calls.
3479 calls.
3475
3480
3476 2005-03-28 Fernando Perez <fperez@colorado.edu>
3481 2005-03-28 Fernando Perez <fperez@colorado.edu>
3477
3482
3478 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3483 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3479 expensive string additions for building command. Add support for
3484 expensive string additions for building command. Add support for
3480 trailing ';' when autocall is used.
3485 trailing ';' when autocall is used.
3481
3486
3482 2005-03-26 Fernando Perez <fperez@colorado.edu>
3487 2005-03-26 Fernando Perez <fperez@colorado.edu>
3483
3488
3484 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3489 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3485 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3490 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3486 ipython.el robust against prompts with any number of spaces
3491 ipython.el robust against prompts with any number of spaces
3487 (including 0) after the ':' character.
3492 (including 0) after the ':' character.
3488
3493
3489 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3494 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3490 continuation prompt, which misled users to think the line was
3495 continuation prompt, which misled users to think the line was
3491 already indented. Closes debian Bug#300847, reported to me by
3496 already indented. Closes debian Bug#300847, reported to me by
3492 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3497 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3493
3498
3494 2005-03-23 Fernando Perez <fperez@colorado.edu>
3499 2005-03-23 Fernando Perez <fperez@colorado.edu>
3495
3500
3496 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3501 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3497 properly aligned if they have embedded newlines.
3502 properly aligned if they have embedded newlines.
3498
3503
3499 * IPython/iplib.py (runlines): Add a public method to expose
3504 * IPython/iplib.py (runlines): Add a public method to expose
3500 IPython's code execution machinery, so that users can run strings
3505 IPython's code execution machinery, so that users can run strings
3501 as if they had been typed at the prompt interactively.
3506 as if they had been typed at the prompt interactively.
3502 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3507 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3503 methods which can call the system shell, but with python variable
3508 methods which can call the system shell, but with python variable
3504 expansion. The three such methods are: __IPYTHON__.system,
3509 expansion. The three such methods are: __IPYTHON__.system,
3505 .getoutput and .getoutputerror. These need to be documented in a
3510 .getoutput and .getoutputerror. These need to be documented in a
3506 'public API' section (to be written) of the manual.
3511 'public API' section (to be written) of the manual.
3507
3512
3508 2005-03-20 Fernando Perez <fperez@colorado.edu>
3513 2005-03-20 Fernando Perez <fperez@colorado.edu>
3509
3514
3510 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3515 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3511 for custom exception handling. This is quite powerful, and it
3516 for custom exception handling. This is quite powerful, and it
3512 allows for user-installable exception handlers which can trap
3517 allows for user-installable exception handlers which can trap
3513 custom exceptions at runtime and treat them separately from
3518 custom exceptions at runtime and treat them separately from
3514 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3519 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3515 Mantegazza <mantegazza-AT-ill.fr>.
3520 Mantegazza <mantegazza-AT-ill.fr>.
3516 (InteractiveShell.set_custom_completer): public API function to
3521 (InteractiveShell.set_custom_completer): public API function to
3517 add new completers at runtime.
3522 add new completers at runtime.
3518
3523
3519 2005-03-19 Fernando Perez <fperez@colorado.edu>
3524 2005-03-19 Fernando Perez <fperez@colorado.edu>
3520
3525
3521 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3526 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3522 allow objects which provide their docstrings via non-standard
3527 allow objects which provide their docstrings via non-standard
3523 mechanisms (like Pyro proxies) to still be inspected by ipython's
3528 mechanisms (like Pyro proxies) to still be inspected by ipython's
3524 ? system.
3529 ? system.
3525
3530
3526 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3531 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3527 automatic capture system. I tried quite hard to make it work
3532 automatic capture system. I tried quite hard to make it work
3528 reliably, and simply failed. I tried many combinations with the
3533 reliably, and simply failed. I tried many combinations with the
3529 subprocess module, but eventually nothing worked in all needed
3534 subprocess module, but eventually nothing worked in all needed
3530 cases (not blocking stdin for the child, duplicating stdout
3535 cases (not blocking stdin for the child, duplicating stdout
3531 without blocking, etc). The new %sc/%sx still do capture to these
3536 without blocking, etc). The new %sc/%sx still do capture to these
3532 magical list/string objects which make shell use much more
3537 magical list/string objects which make shell use much more
3533 conveninent, so not all is lost.
3538 conveninent, so not all is lost.
3534
3539
3535 XXX - FIX MANUAL for the change above!
3540 XXX - FIX MANUAL for the change above!
3536
3541
3537 (runsource): I copied code.py's runsource() into ipython to modify
3542 (runsource): I copied code.py's runsource() into ipython to modify
3538 it a bit. Now the code object and source to be executed are
3543 it a bit. Now the code object and source to be executed are
3539 stored in ipython. This makes this info accessible to third-party
3544 stored in ipython. This makes this info accessible to third-party
3540 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3545 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3541 Mantegazza <mantegazza-AT-ill.fr>.
3546 Mantegazza <mantegazza-AT-ill.fr>.
3542
3547
3543 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3548 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3544 history-search via readline (like C-p/C-n). I'd wanted this for a
3549 history-search via readline (like C-p/C-n). I'd wanted this for a
3545 long time, but only recently found out how to do it. For users
3550 long time, but only recently found out how to do it. For users
3546 who already have their ipythonrc files made and want this, just
3551 who already have their ipythonrc files made and want this, just
3547 add:
3552 add:
3548
3553
3549 readline_parse_and_bind "\e[A": history-search-backward
3554 readline_parse_and_bind "\e[A": history-search-backward
3550 readline_parse_and_bind "\e[B": history-search-forward
3555 readline_parse_and_bind "\e[B": history-search-forward
3551
3556
3552 2005-03-18 Fernando Perez <fperez@colorado.edu>
3557 2005-03-18 Fernando Perez <fperez@colorado.edu>
3553
3558
3554 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3559 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3555 LSString and SList classes which allow transparent conversions
3560 LSString and SList classes which allow transparent conversions
3556 between list mode and whitespace-separated string.
3561 between list mode and whitespace-separated string.
3557 (magic_r): Fix recursion problem in %r.
3562 (magic_r): Fix recursion problem in %r.
3558
3563
3559 * IPython/genutils.py (LSString): New class to be used for
3564 * IPython/genutils.py (LSString): New class to be used for
3560 automatic storage of the results of all alias/system calls in _o
3565 automatic storage of the results of all alias/system calls in _o
3561 and _e (stdout/err). These provide a .l/.list attribute which
3566 and _e (stdout/err). These provide a .l/.list attribute which
3562 does automatic splitting on newlines. This means that for most
3567 does automatic splitting on newlines. This means that for most
3563 uses, you'll never need to do capturing of output with %sc/%sx
3568 uses, you'll never need to do capturing of output with %sc/%sx
3564 anymore, since ipython keeps this always done for you. Note that
3569 anymore, since ipython keeps this always done for you. Note that
3565 only the LAST results are stored, the _o/e variables are
3570 only the LAST results are stored, the _o/e variables are
3566 overwritten on each call. If you need to save their contents
3571 overwritten on each call. If you need to save their contents
3567 further, simply bind them to any other name.
3572 further, simply bind them to any other name.
3568
3573
3569 2005-03-17 Fernando Perez <fperez@colorado.edu>
3574 2005-03-17 Fernando Perez <fperez@colorado.edu>
3570
3575
3571 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3576 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3572 prompt namespace handling.
3577 prompt namespace handling.
3573
3578
3574 2005-03-16 Fernando Perez <fperez@colorado.edu>
3579 2005-03-16 Fernando Perez <fperez@colorado.edu>
3575
3580
3576 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3581 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3577 classic prompts to be '>>> ' (final space was missing, and it
3582 classic prompts to be '>>> ' (final space was missing, and it
3578 trips the emacs python mode).
3583 trips the emacs python mode).
3579 (BasePrompt.__str__): Added safe support for dynamic prompt
3584 (BasePrompt.__str__): Added safe support for dynamic prompt
3580 strings. Now you can set your prompt string to be '$x', and the
3585 strings. Now you can set your prompt string to be '$x', and the
3581 value of x will be printed from your interactive namespace. The
3586 value of x will be printed from your interactive namespace. The
3582 interpolation syntax includes the full Itpl support, so
3587 interpolation syntax includes the full Itpl support, so
3583 ${foo()+x+bar()} is a valid prompt string now, and the function
3588 ${foo()+x+bar()} is a valid prompt string now, and the function
3584 calls will be made at runtime.
3589 calls will be made at runtime.
3585
3590
3586 2005-03-15 Fernando Perez <fperez@colorado.edu>
3591 2005-03-15 Fernando Perez <fperez@colorado.edu>
3587
3592
3588 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3593 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3589 avoid name clashes in pylab. %hist still works, it just forwards
3594 avoid name clashes in pylab. %hist still works, it just forwards
3590 the call to %history.
3595 the call to %history.
3591
3596
3592 2005-03-02 *** Released version 0.6.12
3597 2005-03-02 *** Released version 0.6.12
3593
3598
3594 2005-03-02 Fernando Perez <fperez@colorado.edu>
3599 2005-03-02 Fernando Perez <fperez@colorado.edu>
3595
3600
3596 * IPython/iplib.py (handle_magic): log magic calls properly as
3601 * IPython/iplib.py (handle_magic): log magic calls properly as
3597 ipmagic() function calls.
3602 ipmagic() function calls.
3598
3603
3599 * IPython/Magic.py (magic_time): Improved %time to support
3604 * IPython/Magic.py (magic_time): Improved %time to support
3600 statements and provide wall-clock as well as CPU time.
3605 statements and provide wall-clock as well as CPU time.
3601
3606
3602 2005-02-27 Fernando Perez <fperez@colorado.edu>
3607 2005-02-27 Fernando Perez <fperez@colorado.edu>
3603
3608
3604 * IPython/hooks.py: New hooks module, to expose user-modifiable
3609 * IPython/hooks.py: New hooks module, to expose user-modifiable
3605 IPython functionality in a clean manner. For now only the editor
3610 IPython functionality in a clean manner. For now only the editor
3606 hook is actually written, and other thigns which I intend to turn
3611 hook is actually written, and other thigns which I intend to turn
3607 into proper hooks aren't yet there. The display and prefilter
3612 into proper hooks aren't yet there. The display and prefilter
3608 stuff, for example, should be hooks. But at least now the
3613 stuff, for example, should be hooks. But at least now the
3609 framework is in place, and the rest can be moved here with more
3614 framework is in place, and the rest can be moved here with more
3610 time later. IPython had had a .hooks variable for a long time for
3615 time later. IPython had had a .hooks variable for a long time for
3611 this purpose, but I'd never actually used it for anything.
3616 this purpose, but I'd never actually used it for anything.
3612
3617
3613 2005-02-26 Fernando Perez <fperez@colorado.edu>
3618 2005-02-26 Fernando Perez <fperez@colorado.edu>
3614
3619
3615 * IPython/ipmaker.py (make_IPython): make the default ipython
3620 * IPython/ipmaker.py (make_IPython): make the default ipython
3616 directory be called _ipython under win32, to follow more the
3621 directory be called _ipython under win32, to follow more the
3617 naming peculiarities of that platform (where buggy software like
3622 naming peculiarities of that platform (where buggy software like
3618 Visual Sourcesafe breaks with .named directories). Reported by
3623 Visual Sourcesafe breaks with .named directories). Reported by
3619 Ville Vainio.
3624 Ville Vainio.
3620
3625
3621 2005-02-23 Fernando Perez <fperez@colorado.edu>
3626 2005-02-23 Fernando Perez <fperez@colorado.edu>
3622
3627
3623 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3628 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3624 auto_aliases for win32 which were causing problems. Users can
3629 auto_aliases for win32 which were causing problems. Users can
3625 define the ones they personally like.
3630 define the ones they personally like.
3626
3631
3627 2005-02-21 Fernando Perez <fperez@colorado.edu>
3632 2005-02-21 Fernando Perez <fperez@colorado.edu>
3628
3633
3629 * IPython/Magic.py (magic_time): new magic to time execution of
3634 * IPython/Magic.py (magic_time): new magic to time execution of
3630 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3635 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3631
3636
3632 2005-02-19 Fernando Perez <fperez@colorado.edu>
3637 2005-02-19 Fernando Perez <fperez@colorado.edu>
3633
3638
3634 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3639 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3635 into keys (for prompts, for example).
3640 into keys (for prompts, for example).
3636
3641
3637 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3642 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3638 prompts in case users want them. This introduces a small behavior
3643 prompts in case users want them. This introduces a small behavior
3639 change: ipython does not automatically add a space to all prompts
3644 change: ipython does not automatically add a space to all prompts
3640 anymore. To get the old prompts with a space, users should add it
3645 anymore. To get the old prompts with a space, users should add it
3641 manually to their ipythonrc file, so for example prompt_in1 should
3646 manually to their ipythonrc file, so for example prompt_in1 should
3642 now read 'In [\#]: ' instead of 'In [\#]:'.
3647 now read 'In [\#]: ' instead of 'In [\#]:'.
3643 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3648 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3644 file) to control left-padding of secondary prompts.
3649 file) to control left-padding of secondary prompts.
3645
3650
3646 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3651 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3647 the profiler can't be imported. Fix for Debian, which removed
3652 the profiler can't be imported. Fix for Debian, which removed
3648 profile.py because of License issues. I applied a slightly
3653 profile.py because of License issues. I applied a slightly
3649 modified version of the original Debian patch at
3654 modified version of the original Debian patch at
3650 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3655 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3651
3656
3652 2005-02-17 Fernando Perez <fperez@colorado.edu>
3657 2005-02-17 Fernando Perez <fperez@colorado.edu>
3653
3658
3654 * IPython/genutils.py (native_line_ends): Fix bug which would
3659 * IPython/genutils.py (native_line_ends): Fix bug which would
3655 cause improper line-ends under win32 b/c I was not opening files
3660 cause improper line-ends under win32 b/c I was not opening files
3656 in binary mode. Bug report and fix thanks to Ville.
3661 in binary mode. Bug report and fix thanks to Ville.
3657
3662
3658 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3663 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3659 trying to catch spurious foo[1] autocalls. My fix actually broke
3664 trying to catch spurious foo[1] autocalls. My fix actually broke
3660 ',/' autoquote/call with explicit escape (bad regexp).
3665 ',/' autoquote/call with explicit escape (bad regexp).
3661
3666
3662 2005-02-15 *** Released version 0.6.11
3667 2005-02-15 *** Released version 0.6.11
3663
3668
3664 2005-02-14 Fernando Perez <fperez@colorado.edu>
3669 2005-02-14 Fernando Perez <fperez@colorado.edu>
3665
3670
3666 * IPython/background_jobs.py: New background job management
3671 * IPython/background_jobs.py: New background job management
3667 subsystem. This is implemented via a new set of classes, and
3672 subsystem. This is implemented via a new set of classes, and
3668 IPython now provides a builtin 'jobs' object for background job
3673 IPython now provides a builtin 'jobs' object for background job
3669 execution. A convenience %bg magic serves as a lightweight
3674 execution. A convenience %bg magic serves as a lightweight
3670 frontend for starting the more common type of calls. This was
3675 frontend for starting the more common type of calls. This was
3671 inspired by discussions with B. Granger and the BackgroundCommand
3676 inspired by discussions with B. Granger and the BackgroundCommand
3672 class described in the book Python Scripting for Computational
3677 class described in the book Python Scripting for Computational
3673 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3678 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3674 (although ultimately no code from this text was used, as IPython's
3679 (although ultimately no code from this text was used, as IPython's
3675 system is a separate implementation).
3680 system is a separate implementation).
3676
3681
3677 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3682 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3678 to control the completion of single/double underscore names
3683 to control the completion of single/double underscore names
3679 separately. As documented in the example ipytonrc file, the
3684 separately. As documented in the example ipytonrc file, the
3680 readline_omit__names variable can now be set to 2, to omit even
3685 readline_omit__names variable can now be set to 2, to omit even
3681 single underscore names. Thanks to a patch by Brian Wong
3686 single underscore names. Thanks to a patch by Brian Wong
3682 <BrianWong-AT-AirgoNetworks.Com>.
3687 <BrianWong-AT-AirgoNetworks.Com>.
3683 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3688 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3684 be autocalled as foo([1]) if foo were callable. A problem for
3689 be autocalled as foo([1]) if foo were callable. A problem for
3685 things which are both callable and implement __getitem__.
3690 things which are both callable and implement __getitem__.
3686 (init_readline): Fix autoindentation for win32. Thanks to a patch
3691 (init_readline): Fix autoindentation for win32. Thanks to a patch
3687 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3692 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3688
3693
3689 2005-02-12 Fernando Perez <fperez@colorado.edu>
3694 2005-02-12 Fernando Perez <fperez@colorado.edu>
3690
3695
3691 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3696 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3692 which I had written long ago to sort out user error messages which
3697 which I had written long ago to sort out user error messages which
3693 may occur during startup. This seemed like a good idea initially,
3698 may occur during startup. This seemed like a good idea initially,
3694 but it has proven a disaster in retrospect. I don't want to
3699 but it has proven a disaster in retrospect. I don't want to
3695 change much code for now, so my fix is to set the internal 'debug'
3700 change much code for now, so my fix is to set the internal 'debug'
3696 flag to true everywhere, whose only job was precisely to control
3701 flag to true everywhere, whose only job was precisely to control
3697 this subsystem. This closes issue 28 (as well as avoiding all
3702 this subsystem. This closes issue 28 (as well as avoiding all
3698 sorts of strange hangups which occur from time to time).
3703 sorts of strange hangups which occur from time to time).
3699
3704
3700 2005-02-07 Fernando Perez <fperez@colorado.edu>
3705 2005-02-07 Fernando Perez <fperez@colorado.edu>
3701
3706
3702 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3707 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3703 previous call produced a syntax error.
3708 previous call produced a syntax error.
3704
3709
3705 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3710 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3706 classes without constructor.
3711 classes without constructor.
3707
3712
3708 2005-02-06 Fernando Perez <fperez@colorado.edu>
3713 2005-02-06 Fernando Perez <fperez@colorado.edu>
3709
3714
3710 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3715 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3711 completions with the results of each matcher, so we return results
3716 completions with the results of each matcher, so we return results
3712 to the user from all namespaces. This breaks with ipython
3717 to the user from all namespaces. This breaks with ipython
3713 tradition, but I think it's a nicer behavior. Now you get all
3718 tradition, but I think it's a nicer behavior. Now you get all
3714 possible completions listed, from all possible namespaces (python,
3719 possible completions listed, from all possible namespaces (python,
3715 filesystem, magics...) After a request by John Hunter
3720 filesystem, magics...) After a request by John Hunter
3716 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3721 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3717
3722
3718 2005-02-05 Fernando Perez <fperez@colorado.edu>
3723 2005-02-05 Fernando Perez <fperez@colorado.edu>
3719
3724
3720 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3725 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3721 the call had quote characters in it (the quotes were stripped).
3726 the call had quote characters in it (the quotes were stripped).
3722
3727
3723 2005-01-31 Fernando Perez <fperez@colorado.edu>
3728 2005-01-31 Fernando Perez <fperez@colorado.edu>
3724
3729
3725 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3730 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3726 Itpl.itpl() to make the code more robust against psyco
3731 Itpl.itpl() to make the code more robust against psyco
3727 optimizations.
3732 optimizations.
3728
3733
3729 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3734 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3730 of causing an exception. Quicker, cleaner.
3735 of causing an exception. Quicker, cleaner.
3731
3736
3732 2005-01-28 Fernando Perez <fperez@colorado.edu>
3737 2005-01-28 Fernando Perez <fperez@colorado.edu>
3733
3738
3734 * scripts/ipython_win_post_install.py (install): hardcode
3739 * scripts/ipython_win_post_install.py (install): hardcode
3735 sys.prefix+'python.exe' as the executable path. It turns out that
3740 sys.prefix+'python.exe' as the executable path. It turns out that
3736 during the post-installation run, sys.executable resolves to the
3741 during the post-installation run, sys.executable resolves to the
3737 name of the binary installer! I should report this as a distutils
3742 name of the binary installer! I should report this as a distutils
3738 bug, I think. I updated the .10 release with this tiny fix, to
3743 bug, I think. I updated the .10 release with this tiny fix, to
3739 avoid annoying the lists further.
3744 avoid annoying the lists further.
3740
3745
3741 2005-01-27 *** Released version 0.6.10
3746 2005-01-27 *** Released version 0.6.10
3742
3747
3743 2005-01-27 Fernando Perez <fperez@colorado.edu>
3748 2005-01-27 Fernando Perez <fperez@colorado.edu>
3744
3749
3745 * IPython/numutils.py (norm): Added 'inf' as optional name for
3750 * IPython/numutils.py (norm): Added 'inf' as optional name for
3746 L-infinity norm, included references to mathworld.com for vector
3751 L-infinity norm, included references to mathworld.com for vector
3747 norm definitions.
3752 norm definitions.
3748 (amin/amax): added amin/amax for array min/max. Similar to what
3753 (amin/amax): added amin/amax for array min/max. Similar to what
3749 pylab ships with after the recent reorganization of names.
3754 pylab ships with after the recent reorganization of names.
3750 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3755 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3751
3756
3752 * ipython.el: committed Alex's recent fixes and improvements.
3757 * ipython.el: committed Alex's recent fixes and improvements.
3753 Tested with python-mode from CVS, and it looks excellent. Since
3758 Tested with python-mode from CVS, and it looks excellent. Since
3754 python-mode hasn't released anything in a while, I'm temporarily
3759 python-mode hasn't released anything in a while, I'm temporarily
3755 putting a copy of today's CVS (v 4.70) of python-mode in:
3760 putting a copy of today's CVS (v 4.70) of python-mode in:
3756 http://ipython.scipy.org/tmp/python-mode.el
3761 http://ipython.scipy.org/tmp/python-mode.el
3757
3762
3758 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3763 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3759 sys.executable for the executable name, instead of assuming it's
3764 sys.executable for the executable name, instead of assuming it's
3760 called 'python.exe' (the post-installer would have produced broken
3765 called 'python.exe' (the post-installer would have produced broken
3761 setups on systems with a differently named python binary).
3766 setups on systems with a differently named python binary).
3762
3767
3763 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3768 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3764 references to os.linesep, to make the code more
3769 references to os.linesep, to make the code more
3765 platform-independent. This is also part of the win32 coloring
3770 platform-independent. This is also part of the win32 coloring
3766 fixes.
3771 fixes.
3767
3772
3768 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3773 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3769 lines, which actually cause coloring bugs because the length of
3774 lines, which actually cause coloring bugs because the length of
3770 the line is very difficult to correctly compute with embedded
3775 the line is very difficult to correctly compute with embedded
3771 escapes. This was the source of all the coloring problems under
3776 escapes. This was the source of all the coloring problems under
3772 Win32. I think that _finally_, Win32 users have a properly
3777 Win32. I think that _finally_, Win32 users have a properly
3773 working ipython in all respects. This would never have happened
3778 working ipython in all respects. This would never have happened
3774 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3779 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3775
3780
3776 2005-01-26 *** Released version 0.6.9
3781 2005-01-26 *** Released version 0.6.9
3777
3782
3778 2005-01-25 Fernando Perez <fperez@colorado.edu>
3783 2005-01-25 Fernando Perez <fperez@colorado.edu>
3779
3784
3780 * setup.py: finally, we have a true Windows installer, thanks to
3785 * setup.py: finally, we have a true Windows installer, thanks to
3781 the excellent work of Viktor Ransmayr
3786 the excellent work of Viktor Ransmayr
3782 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3787 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3783 Windows users. The setup routine is quite a bit cleaner thanks to
3788 Windows users. The setup routine is quite a bit cleaner thanks to
3784 this, and the post-install script uses the proper functions to
3789 this, and the post-install script uses the proper functions to
3785 allow a clean de-installation using the standard Windows Control
3790 allow a clean de-installation using the standard Windows Control
3786 Panel.
3791 Panel.
3787
3792
3788 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3793 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3789 environment variable under all OSes (including win32) if
3794 environment variable under all OSes (including win32) if
3790 available. This will give consistency to win32 users who have set
3795 available. This will give consistency to win32 users who have set
3791 this variable for any reason. If os.environ['HOME'] fails, the
3796 this variable for any reason. If os.environ['HOME'] fails, the
3792 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3797 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3793
3798
3794 2005-01-24 Fernando Perez <fperez@colorado.edu>
3799 2005-01-24 Fernando Perez <fperez@colorado.edu>
3795
3800
3796 * IPython/numutils.py (empty_like): add empty_like(), similar to
3801 * IPython/numutils.py (empty_like): add empty_like(), similar to
3797 zeros_like() but taking advantage of the new empty() Numeric routine.
3802 zeros_like() but taking advantage of the new empty() Numeric routine.
3798
3803
3799 2005-01-23 *** Released version 0.6.8
3804 2005-01-23 *** Released version 0.6.8
3800
3805
3801 2005-01-22 Fernando Perez <fperez@colorado.edu>
3806 2005-01-22 Fernando Perez <fperez@colorado.edu>
3802
3807
3803 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3808 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3804 automatic show() calls. After discussing things with JDH, it
3809 automatic show() calls. After discussing things with JDH, it
3805 turns out there are too many corner cases where this can go wrong.
3810 turns out there are too many corner cases where this can go wrong.
3806 It's best not to try to be 'too smart', and simply have ipython
3811 It's best not to try to be 'too smart', and simply have ipython
3807 reproduce as much as possible the default behavior of a normal
3812 reproduce as much as possible the default behavior of a normal
3808 python shell.
3813 python shell.
3809
3814
3810 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3815 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3811 line-splitting regexp and _prefilter() to avoid calling getattr()
3816 line-splitting regexp and _prefilter() to avoid calling getattr()
3812 on assignments. This closes
3817 on assignments. This closes
3813 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3818 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3814 readline uses getattr(), so a simple <TAB> keypress is still
3819 readline uses getattr(), so a simple <TAB> keypress is still
3815 enough to trigger getattr() calls on an object.
3820 enough to trigger getattr() calls on an object.
3816
3821
3817 2005-01-21 Fernando Perez <fperez@colorado.edu>
3822 2005-01-21 Fernando Perez <fperez@colorado.edu>
3818
3823
3819 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3824 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3820 docstring under pylab so it doesn't mask the original.
3825 docstring under pylab so it doesn't mask the original.
3821
3826
3822 2005-01-21 *** Released version 0.6.7
3827 2005-01-21 *** Released version 0.6.7
3823
3828
3824 2005-01-21 Fernando Perez <fperez@colorado.edu>
3829 2005-01-21 Fernando Perez <fperez@colorado.edu>
3825
3830
3826 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3831 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3827 signal handling for win32 users in multithreaded mode.
3832 signal handling for win32 users in multithreaded mode.
3828
3833
3829 2005-01-17 Fernando Perez <fperez@colorado.edu>
3834 2005-01-17 Fernando Perez <fperez@colorado.edu>
3830
3835
3831 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3836 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3832 instances with no __init__. After a crash report by Norbert Nemec
3837 instances with no __init__. After a crash report by Norbert Nemec
3833 <Norbert-AT-nemec-online.de>.
3838 <Norbert-AT-nemec-online.de>.
3834
3839
3835 2005-01-14 Fernando Perez <fperez@colorado.edu>
3840 2005-01-14 Fernando Perez <fperez@colorado.edu>
3836
3841
3837 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3842 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3838 names for verbose exceptions, when multiple dotted names and the
3843 names for verbose exceptions, when multiple dotted names and the
3839 'parent' object were present on the same line.
3844 'parent' object were present on the same line.
3840
3845
3841 2005-01-11 Fernando Perez <fperez@colorado.edu>
3846 2005-01-11 Fernando Perez <fperez@colorado.edu>
3842
3847
3843 * IPython/genutils.py (flag_calls): new utility to trap and flag
3848 * IPython/genutils.py (flag_calls): new utility to trap and flag
3844 calls in functions. I need it to clean up matplotlib support.
3849 calls in functions. I need it to clean up matplotlib support.
3845 Also removed some deprecated code in genutils.
3850 Also removed some deprecated code in genutils.
3846
3851
3847 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3852 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3848 that matplotlib scripts called with %run, which don't call show()
3853 that matplotlib scripts called with %run, which don't call show()
3849 themselves, still have their plotting windows open.
3854 themselves, still have their plotting windows open.
3850
3855
3851 2005-01-05 Fernando Perez <fperez@colorado.edu>
3856 2005-01-05 Fernando Perez <fperez@colorado.edu>
3852
3857
3853 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3858 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3854 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3859 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3855
3860
3856 2004-12-19 Fernando Perez <fperez@colorado.edu>
3861 2004-12-19 Fernando Perez <fperez@colorado.edu>
3857
3862
3858 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3863 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3859 parent_runcode, which was an eyesore. The same result can be
3864 parent_runcode, which was an eyesore. The same result can be
3860 obtained with Python's regular superclass mechanisms.
3865 obtained with Python's regular superclass mechanisms.
3861
3866
3862 2004-12-17 Fernando Perez <fperez@colorado.edu>
3867 2004-12-17 Fernando Perez <fperez@colorado.edu>
3863
3868
3864 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3869 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3865 reported by Prabhu.
3870 reported by Prabhu.
3866 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3871 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3867 sys.stderr) instead of explicitly calling sys.stderr. This helps
3872 sys.stderr) instead of explicitly calling sys.stderr. This helps
3868 maintain our I/O abstractions clean, for future GUI embeddings.
3873 maintain our I/O abstractions clean, for future GUI embeddings.
3869
3874
3870 * IPython/genutils.py (info): added new utility for sys.stderr
3875 * IPython/genutils.py (info): added new utility for sys.stderr
3871 unified info message handling (thin wrapper around warn()).
3876 unified info message handling (thin wrapper around warn()).
3872
3877
3873 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3878 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3874 composite (dotted) names on verbose exceptions.
3879 composite (dotted) names on verbose exceptions.
3875 (VerboseTB.nullrepr): harden against another kind of errors which
3880 (VerboseTB.nullrepr): harden against another kind of errors which
3876 Python's inspect module can trigger, and which were crashing
3881 Python's inspect module can trigger, and which were crashing
3877 IPython. Thanks to a report by Marco Lombardi
3882 IPython. Thanks to a report by Marco Lombardi
3878 <mlombard-AT-ma010192.hq.eso.org>.
3883 <mlombard-AT-ma010192.hq.eso.org>.
3879
3884
3880 2004-12-13 *** Released version 0.6.6
3885 2004-12-13 *** Released version 0.6.6
3881
3886
3882 2004-12-12 Fernando Perez <fperez@colorado.edu>
3887 2004-12-12 Fernando Perez <fperez@colorado.edu>
3883
3888
3884 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3889 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3885 generated by pygtk upon initialization if it was built without
3890 generated by pygtk upon initialization if it was built without
3886 threads (for matplotlib users). After a crash reported by
3891 threads (for matplotlib users). After a crash reported by
3887 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3892 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3888
3893
3889 * IPython/ipmaker.py (make_IPython): fix small bug in the
3894 * IPython/ipmaker.py (make_IPython): fix small bug in the
3890 import_some parameter for multiple imports.
3895 import_some parameter for multiple imports.
3891
3896
3892 * IPython/iplib.py (ipmagic): simplified the interface of
3897 * IPython/iplib.py (ipmagic): simplified the interface of
3893 ipmagic() to take a single string argument, just as it would be
3898 ipmagic() to take a single string argument, just as it would be
3894 typed at the IPython cmd line.
3899 typed at the IPython cmd line.
3895 (ipalias): Added new ipalias() with an interface identical to
3900 (ipalias): Added new ipalias() with an interface identical to
3896 ipmagic(). This completes exposing a pure python interface to the
3901 ipmagic(). This completes exposing a pure python interface to the
3897 alias and magic system, which can be used in loops or more complex
3902 alias and magic system, which can be used in loops or more complex
3898 code where IPython's automatic line mangling is not active.
3903 code where IPython's automatic line mangling is not active.
3899
3904
3900 * IPython/genutils.py (timing): changed interface of timing to
3905 * IPython/genutils.py (timing): changed interface of timing to
3901 simply run code once, which is the most common case. timings()
3906 simply run code once, which is the most common case. timings()
3902 remains unchanged, for the cases where you want multiple runs.
3907 remains unchanged, for the cases where you want multiple runs.
3903
3908
3904 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3909 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3905 bug where Python2.2 crashes with exec'ing code which does not end
3910 bug where Python2.2 crashes with exec'ing code which does not end
3906 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3911 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3907 before.
3912 before.
3908
3913
3909 2004-12-10 Fernando Perez <fperez@colorado.edu>
3914 2004-12-10 Fernando Perez <fperez@colorado.edu>
3910
3915
3911 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3916 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3912 -t to -T, to accomodate the new -t flag in %run (the %run and
3917 -t to -T, to accomodate the new -t flag in %run (the %run and
3913 %prun options are kind of intermixed, and it's not easy to change
3918 %prun options are kind of intermixed, and it's not easy to change
3914 this with the limitations of python's getopt).
3919 this with the limitations of python's getopt).
3915
3920
3916 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3921 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3917 the execution of scripts. It's not as fine-tuned as timeit.py,
3922 the execution of scripts. It's not as fine-tuned as timeit.py,
3918 but it works from inside ipython (and under 2.2, which lacks
3923 but it works from inside ipython (and under 2.2, which lacks
3919 timeit.py). Optionally a number of runs > 1 can be given for
3924 timeit.py). Optionally a number of runs > 1 can be given for
3920 timing very short-running code.
3925 timing very short-running code.
3921
3926
3922 * IPython/genutils.py (uniq_stable): new routine which returns a
3927 * IPython/genutils.py (uniq_stable): new routine which returns a
3923 list of unique elements in any iterable, but in stable order of
3928 list of unique elements in any iterable, but in stable order of
3924 appearance. I needed this for the ultraTB fixes, and it's a handy
3929 appearance. I needed this for the ultraTB fixes, and it's a handy
3925 utility.
3930 utility.
3926
3931
3927 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3932 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3928 dotted names in Verbose exceptions. This had been broken since
3933 dotted names in Verbose exceptions. This had been broken since
3929 the very start, now x.y will properly be printed in a Verbose
3934 the very start, now x.y will properly be printed in a Verbose
3930 traceback, instead of x being shown and y appearing always as an
3935 traceback, instead of x being shown and y appearing always as an
3931 'undefined global'. Getting this to work was a bit tricky,
3936 'undefined global'. Getting this to work was a bit tricky,
3932 because by default python tokenizers are stateless. Saved by
3937 because by default python tokenizers are stateless. Saved by
3933 python's ability to easily add a bit of state to an arbitrary
3938 python's ability to easily add a bit of state to an arbitrary
3934 function (without needing to build a full-blown callable object).
3939 function (without needing to build a full-blown callable object).
3935
3940
3936 Also big cleanup of this code, which had horrendous runtime
3941 Also big cleanup of this code, which had horrendous runtime
3937 lookups of zillions of attributes for colorization. Moved all
3942 lookups of zillions of attributes for colorization. Moved all
3938 this code into a few templates, which make it cleaner and quicker.
3943 this code into a few templates, which make it cleaner and quicker.
3939
3944
3940 Printout quality was also improved for Verbose exceptions: one
3945 Printout quality was also improved for Verbose exceptions: one
3941 variable per line, and memory addresses are printed (this can be
3946 variable per line, and memory addresses are printed (this can be
3942 quite handy in nasty debugging situations, which is what Verbose
3947 quite handy in nasty debugging situations, which is what Verbose
3943 is for).
3948 is for).
3944
3949
3945 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3950 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3946 the command line as scripts to be loaded by embedded instances.
3951 the command line as scripts to be loaded by embedded instances.
3947 Doing so has the potential for an infinite recursion if there are
3952 Doing so has the potential for an infinite recursion if there are
3948 exceptions thrown in the process. This fixes a strange crash
3953 exceptions thrown in the process. This fixes a strange crash
3949 reported by Philippe MULLER <muller-AT-irit.fr>.
3954 reported by Philippe MULLER <muller-AT-irit.fr>.
3950
3955
3951 2004-12-09 Fernando Perez <fperez@colorado.edu>
3956 2004-12-09 Fernando Perez <fperez@colorado.edu>
3952
3957
3953 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3958 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3954 to reflect new names in matplotlib, which now expose the
3959 to reflect new names in matplotlib, which now expose the
3955 matlab-compatible interface via a pylab module instead of the
3960 matlab-compatible interface via a pylab module instead of the
3956 'matlab' name. The new code is backwards compatible, so users of
3961 'matlab' name. The new code is backwards compatible, so users of
3957 all matplotlib versions are OK. Patch by J. Hunter.
3962 all matplotlib versions are OK. Patch by J. Hunter.
3958
3963
3959 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3964 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3960 of __init__ docstrings for instances (class docstrings are already
3965 of __init__ docstrings for instances (class docstrings are already
3961 automatically printed). Instances with customized docstrings
3966 automatically printed). Instances with customized docstrings
3962 (indep. of the class) are also recognized and all 3 separate
3967 (indep. of the class) are also recognized and all 3 separate
3963 docstrings are printed (instance, class, constructor). After some
3968 docstrings are printed (instance, class, constructor). After some
3964 comments/suggestions by J. Hunter.
3969 comments/suggestions by J. Hunter.
3965
3970
3966 2004-12-05 Fernando Perez <fperez@colorado.edu>
3971 2004-12-05 Fernando Perez <fperez@colorado.edu>
3967
3972
3968 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3973 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3969 warnings when tab-completion fails and triggers an exception.
3974 warnings when tab-completion fails and triggers an exception.
3970
3975
3971 2004-12-03 Fernando Perez <fperez@colorado.edu>
3976 2004-12-03 Fernando Perez <fperez@colorado.edu>
3972
3977
3973 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3978 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3974 be triggered when using 'run -p'. An incorrect option flag was
3979 be triggered when using 'run -p'. An incorrect option flag was
3975 being set ('d' instead of 'D').
3980 being set ('d' instead of 'D').
3976 (manpage): fix missing escaped \- sign.
3981 (manpage): fix missing escaped \- sign.
3977
3982
3978 2004-11-30 *** Released version 0.6.5
3983 2004-11-30 *** Released version 0.6.5
3979
3984
3980 2004-11-30 Fernando Perez <fperez@colorado.edu>
3985 2004-11-30 Fernando Perez <fperez@colorado.edu>
3981
3986
3982 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3987 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3983 setting with -d option.
3988 setting with -d option.
3984
3989
3985 * setup.py (docfiles): Fix problem where the doc glob I was using
3990 * setup.py (docfiles): Fix problem where the doc glob I was using
3986 was COMPLETELY BROKEN. It was giving the right files by pure
3991 was COMPLETELY BROKEN. It was giving the right files by pure
3987 accident, but failed once I tried to include ipython.el. Note:
3992 accident, but failed once I tried to include ipython.el. Note:
3988 glob() does NOT allow you to do exclusion on multiple endings!
3993 glob() does NOT allow you to do exclusion on multiple endings!
3989
3994
3990 2004-11-29 Fernando Perez <fperez@colorado.edu>
3995 2004-11-29 Fernando Perez <fperez@colorado.edu>
3991
3996
3992 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3997 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3993 the manpage as the source. Better formatting & consistency.
3998 the manpage as the source. Better formatting & consistency.
3994
3999
3995 * IPython/Magic.py (magic_run): Added new -d option, to run
4000 * IPython/Magic.py (magic_run): Added new -d option, to run
3996 scripts under the control of the python pdb debugger. Note that
4001 scripts under the control of the python pdb debugger. Note that
3997 this required changing the %prun option -d to -D, to avoid a clash
4002 this required changing the %prun option -d to -D, to avoid a clash
3998 (since %run must pass options to %prun, and getopt is too dumb to
4003 (since %run must pass options to %prun, and getopt is too dumb to
3999 handle options with string values with embedded spaces). Thanks
4004 handle options with string values with embedded spaces). Thanks
4000 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
4005 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
4001 (magic_who_ls): added type matching to %who and %whos, so that one
4006 (magic_who_ls): added type matching to %who and %whos, so that one
4002 can filter their output to only include variables of certain
4007 can filter their output to only include variables of certain
4003 types. Another suggestion by Matthew.
4008 types. Another suggestion by Matthew.
4004 (magic_whos): Added memory summaries in kb and Mb for arrays.
4009 (magic_whos): Added memory summaries in kb and Mb for arrays.
4005 (magic_who): Improve formatting (break lines every 9 vars).
4010 (magic_who): Improve formatting (break lines every 9 vars).
4006
4011
4007 2004-11-28 Fernando Perez <fperez@colorado.edu>
4012 2004-11-28 Fernando Perez <fperez@colorado.edu>
4008
4013
4009 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
4014 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
4010 cache when empty lines were present.
4015 cache when empty lines were present.
4011
4016
4012 2004-11-24 Fernando Perez <fperez@colorado.edu>
4017 2004-11-24 Fernando Perez <fperez@colorado.edu>
4013
4018
4014 * IPython/usage.py (__doc__): document the re-activated threading
4019 * IPython/usage.py (__doc__): document the re-activated threading
4015 options for WX and GTK.
4020 options for WX and GTK.
4016
4021
4017 2004-11-23 Fernando Perez <fperez@colorado.edu>
4022 2004-11-23 Fernando Perez <fperez@colorado.edu>
4018
4023
4019 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
4024 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
4020 the -wthread and -gthread options, along with a new -tk one to try
4025 the -wthread and -gthread options, along with a new -tk one to try
4021 and coordinate Tk threading with wx/gtk. The tk support is very
4026 and coordinate Tk threading with wx/gtk. The tk support is very
4022 platform dependent, since it seems to require Tcl and Tk to be
4027 platform dependent, since it seems to require Tcl and Tk to be
4023 built with threads (Fedora1/2 appears NOT to have it, but in
4028 built with threads (Fedora1/2 appears NOT to have it, but in
4024 Prabhu's Debian boxes it works OK). But even with some Tk
4029 Prabhu's Debian boxes it works OK). But even with some Tk
4025 limitations, this is a great improvement.
4030 limitations, this is a great improvement.
4026
4031
4027 * IPython/Prompts.py (prompt_specials_color): Added \t for time
4032 * IPython/Prompts.py (prompt_specials_color): Added \t for time
4028 info in user prompts. Patch by Prabhu.
4033 info in user prompts. Patch by Prabhu.
4029
4034
4030 2004-11-18 Fernando Perez <fperez@colorado.edu>
4035 2004-11-18 Fernando Perez <fperez@colorado.edu>
4031
4036
4032 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
4037 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
4033 EOFErrors and bail, to avoid infinite loops if a non-terminating
4038 EOFErrors and bail, to avoid infinite loops if a non-terminating
4034 file is fed into ipython. Patch submitted in issue 19 by user,
4039 file is fed into ipython. Patch submitted in issue 19 by user,
4035 many thanks.
4040 many thanks.
4036
4041
4037 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
4042 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
4038 autoquote/parens in continuation prompts, which can cause lots of
4043 autoquote/parens in continuation prompts, which can cause lots of
4039 problems. Closes roundup issue 20.
4044 problems. Closes roundup issue 20.
4040
4045
4041 2004-11-17 Fernando Perez <fperez@colorado.edu>
4046 2004-11-17 Fernando Perez <fperez@colorado.edu>
4042
4047
4043 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
4048 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
4044 reported as debian bug #280505. I'm not sure my local changelog
4049 reported as debian bug #280505. I'm not sure my local changelog
4045 entry has the proper debian format (Jack?).
4050 entry has the proper debian format (Jack?).
4046
4051
4047 2004-11-08 *** Released version 0.6.4
4052 2004-11-08 *** Released version 0.6.4
4048
4053
4049 2004-11-08 Fernando Perez <fperez@colorado.edu>
4054 2004-11-08 Fernando Perez <fperez@colorado.edu>
4050
4055
4051 * IPython/iplib.py (init_readline): Fix exit message for Windows
4056 * IPython/iplib.py (init_readline): Fix exit message for Windows
4052 when readline is active. Thanks to a report by Eric Jones
4057 when readline is active. Thanks to a report by Eric Jones
4053 <eric-AT-enthought.com>.
4058 <eric-AT-enthought.com>.
4054
4059
4055 2004-11-07 Fernando Perez <fperez@colorado.edu>
4060 2004-11-07 Fernando Perez <fperez@colorado.edu>
4056
4061
4057 * IPython/genutils.py (page): Add a trap for OSError exceptions,
4062 * IPython/genutils.py (page): Add a trap for OSError exceptions,
4058 sometimes seen by win2k/cygwin users.
4063 sometimes seen by win2k/cygwin users.
4059
4064
4060 2004-11-06 Fernando Perez <fperez@colorado.edu>
4065 2004-11-06 Fernando Perez <fperez@colorado.edu>
4061
4066
4062 * IPython/iplib.py (interact): Change the handling of %Exit from
4067 * IPython/iplib.py (interact): Change the handling of %Exit from
4063 trying to propagate a SystemExit to an internal ipython flag.
4068 trying to propagate a SystemExit to an internal ipython flag.
4064 This is less elegant than using Python's exception mechanism, but
4069 This is less elegant than using Python's exception mechanism, but
4065 I can't get that to work reliably with threads, so under -pylab
4070 I can't get that to work reliably with threads, so under -pylab
4066 %Exit was hanging IPython. Cross-thread exception handling is
4071 %Exit was hanging IPython. Cross-thread exception handling is
4067 really a bitch. Thaks to a bug report by Stephen Walton
4072 really a bitch. Thaks to a bug report by Stephen Walton
4068 <stephen.walton-AT-csun.edu>.
4073 <stephen.walton-AT-csun.edu>.
4069
4074
4070 2004-11-04 Fernando Perez <fperez@colorado.edu>
4075 2004-11-04 Fernando Perez <fperez@colorado.edu>
4071
4076
4072 * IPython/iplib.py (raw_input_original): store a pointer to the
4077 * IPython/iplib.py (raw_input_original): store a pointer to the
4073 true raw_input to harden against code which can modify it
4078 true raw_input to harden against code which can modify it
4074 (wx.py.PyShell does this and would otherwise crash ipython).
4079 (wx.py.PyShell does this and would otherwise crash ipython).
4075 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
4080 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
4076
4081
4077 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
4082 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
4078 Ctrl-C problem, which does not mess up the input line.
4083 Ctrl-C problem, which does not mess up the input line.
4079
4084
4080 2004-11-03 Fernando Perez <fperez@colorado.edu>
4085 2004-11-03 Fernando Perez <fperez@colorado.edu>
4081
4086
4082 * IPython/Release.py: Changed licensing to BSD, in all files.
4087 * IPython/Release.py: Changed licensing to BSD, in all files.
4083 (name): lowercase name for tarball/RPM release.
4088 (name): lowercase name for tarball/RPM release.
4084
4089
4085 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
4090 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
4086 use throughout ipython.
4091 use throughout ipython.
4087
4092
4088 * IPython/Magic.py (Magic._ofind): Switch to using the new
4093 * IPython/Magic.py (Magic._ofind): Switch to using the new
4089 OInspect.getdoc() function.
4094 OInspect.getdoc() function.
4090
4095
4091 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
4096 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
4092 of the line currently being canceled via Ctrl-C. It's extremely
4097 of the line currently being canceled via Ctrl-C. It's extremely
4093 ugly, but I don't know how to do it better (the problem is one of
4098 ugly, but I don't know how to do it better (the problem is one of
4094 handling cross-thread exceptions).
4099 handling cross-thread exceptions).
4095
4100
4096 2004-10-28 Fernando Perez <fperez@colorado.edu>
4101 2004-10-28 Fernando Perez <fperez@colorado.edu>
4097
4102
4098 * IPython/Shell.py (signal_handler): add signal handlers to trap
4103 * IPython/Shell.py (signal_handler): add signal handlers to trap
4099 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
4104 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
4100 report by Francesc Alted.
4105 report by Francesc Alted.
4101
4106
4102 2004-10-21 Fernando Perez <fperez@colorado.edu>
4107 2004-10-21 Fernando Perez <fperez@colorado.edu>
4103
4108
4104 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
4109 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
4105 to % for pysh syntax extensions.
4110 to % for pysh syntax extensions.
4106
4111
4107 2004-10-09 Fernando Perez <fperez@colorado.edu>
4112 2004-10-09 Fernando Perez <fperez@colorado.edu>
4108
4113
4109 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
4114 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
4110 arrays to print a more useful summary, without calling str(arr).
4115 arrays to print a more useful summary, without calling str(arr).
4111 This avoids the problem of extremely lengthy computations which
4116 This avoids the problem of extremely lengthy computations which
4112 occur if arr is large, and appear to the user as a system lockup
4117 occur if arr is large, and appear to the user as a system lockup
4113 with 100% cpu activity. After a suggestion by Kristian Sandberg
4118 with 100% cpu activity. After a suggestion by Kristian Sandberg
4114 <Kristian.Sandberg@colorado.edu>.
4119 <Kristian.Sandberg@colorado.edu>.
4115 (Magic.__init__): fix bug in global magic escapes not being
4120 (Magic.__init__): fix bug in global magic escapes not being
4116 correctly set.
4121 correctly set.
4117
4122
4118 2004-10-08 Fernando Perez <fperez@colorado.edu>
4123 2004-10-08 Fernando Perez <fperez@colorado.edu>
4119
4124
4120 * IPython/Magic.py (__license__): change to absolute imports of
4125 * IPython/Magic.py (__license__): change to absolute imports of
4121 ipython's own internal packages, to start adapting to the absolute
4126 ipython's own internal packages, to start adapting to the absolute
4122 import requirement of PEP-328.
4127 import requirement of PEP-328.
4123
4128
4124 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
4129 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
4125 files, and standardize author/license marks through the Release
4130 files, and standardize author/license marks through the Release
4126 module instead of having per/file stuff (except for files with
4131 module instead of having per/file stuff (except for files with
4127 particular licenses, like the MIT/PSF-licensed codes).
4132 particular licenses, like the MIT/PSF-licensed codes).
4128
4133
4129 * IPython/Debugger.py: remove dead code for python 2.1
4134 * IPython/Debugger.py: remove dead code for python 2.1
4130
4135
4131 2004-10-04 Fernando Perez <fperez@colorado.edu>
4136 2004-10-04 Fernando Perez <fperez@colorado.edu>
4132
4137
4133 * IPython/iplib.py (ipmagic): New function for accessing magics
4138 * IPython/iplib.py (ipmagic): New function for accessing magics
4134 via a normal python function call.
4139 via a normal python function call.
4135
4140
4136 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
4141 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
4137 from '@' to '%', to accomodate the new @decorator syntax of python
4142 from '@' to '%', to accomodate the new @decorator syntax of python
4138 2.4.
4143 2.4.
4139
4144
4140 2004-09-29 Fernando Perez <fperez@colorado.edu>
4145 2004-09-29 Fernando Perez <fperez@colorado.edu>
4141
4146
4142 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
4147 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
4143 matplotlib.use to prevent running scripts which try to switch
4148 matplotlib.use to prevent running scripts which try to switch
4144 interactive backends from within ipython. This will just crash
4149 interactive backends from within ipython. This will just crash
4145 the python interpreter, so we can't allow it (but a detailed error
4150 the python interpreter, so we can't allow it (but a detailed error
4146 is given to the user).
4151 is given to the user).
4147
4152
4148 2004-09-28 Fernando Perez <fperez@colorado.edu>
4153 2004-09-28 Fernando Perez <fperez@colorado.edu>
4149
4154
4150 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
4155 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
4151 matplotlib-related fixes so that using @run with non-matplotlib
4156 matplotlib-related fixes so that using @run with non-matplotlib
4152 scripts doesn't pop up spurious plot windows. This requires
4157 scripts doesn't pop up spurious plot windows. This requires
4153 matplotlib >= 0.63, where I had to make some changes as well.
4158 matplotlib >= 0.63, where I had to make some changes as well.
4154
4159
4155 * IPython/ipmaker.py (make_IPython): update version requirement to
4160 * IPython/ipmaker.py (make_IPython): update version requirement to
4156 python 2.2.
4161 python 2.2.
4157
4162
4158 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
4163 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
4159 banner arg for embedded customization.
4164 banner arg for embedded customization.
4160
4165
4161 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
4166 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
4162 explicit uses of __IP as the IPython's instance name. Now things
4167 explicit uses of __IP as the IPython's instance name. Now things
4163 are properly handled via the shell.name value. The actual code
4168 are properly handled via the shell.name value. The actual code
4164 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
4169 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
4165 is much better than before. I'll clean things completely when the
4170 is much better than before. I'll clean things completely when the
4166 magic stuff gets a real overhaul.
4171 magic stuff gets a real overhaul.
4167
4172
4168 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
4173 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
4169 minor changes to debian dir.
4174 minor changes to debian dir.
4170
4175
4171 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
4176 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
4172 pointer to the shell itself in the interactive namespace even when
4177 pointer to the shell itself in the interactive namespace even when
4173 a user-supplied dict is provided. This is needed for embedding
4178 a user-supplied dict is provided. This is needed for embedding
4174 purposes (found by tests with Michel Sanner).
4179 purposes (found by tests with Michel Sanner).
4175
4180
4176 2004-09-27 Fernando Perez <fperez@colorado.edu>
4181 2004-09-27 Fernando Perez <fperez@colorado.edu>
4177
4182
4178 * IPython/UserConfig/ipythonrc: remove []{} from
4183 * IPython/UserConfig/ipythonrc: remove []{} from
4179 readline_remove_delims, so that things like [modname.<TAB> do
4184 readline_remove_delims, so that things like [modname.<TAB> do
4180 proper completion. This disables [].TAB, but that's a less common
4185 proper completion. This disables [].TAB, but that's a less common
4181 case than module names in list comprehensions, for example.
4186 case than module names in list comprehensions, for example.
4182 Thanks to a report by Andrea Riciputi.
4187 Thanks to a report by Andrea Riciputi.
4183
4188
4184 2004-09-09 Fernando Perez <fperez@colorado.edu>
4189 2004-09-09 Fernando Perez <fperez@colorado.edu>
4185
4190
4186 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
4191 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
4187 blocking problems in win32 and osx. Fix by John.
4192 blocking problems in win32 and osx. Fix by John.
4188
4193
4189 2004-09-08 Fernando Perez <fperez@colorado.edu>
4194 2004-09-08 Fernando Perez <fperez@colorado.edu>
4190
4195
4191 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
4196 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
4192 for Win32 and OSX. Fix by John Hunter.
4197 for Win32 and OSX. Fix by John Hunter.
4193
4198
4194 2004-08-30 *** Released version 0.6.3
4199 2004-08-30 *** Released version 0.6.3
4195
4200
4196 2004-08-30 Fernando Perez <fperez@colorado.edu>
4201 2004-08-30 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * setup.py (isfile): Add manpages to list of dependent files to be
4203 * setup.py (isfile): Add manpages to list of dependent files to be
4199 updated.
4204 updated.
4200
4205
4201 2004-08-27 Fernando Perez <fperez@colorado.edu>
4206 2004-08-27 Fernando Perez <fperez@colorado.edu>
4202
4207
4203 * IPython/Shell.py (start): I've disabled -wthread and -gthread
4208 * IPython/Shell.py (start): I've disabled -wthread and -gthread
4204 for now. They don't really work with standalone WX/GTK code
4209 for now. They don't really work with standalone WX/GTK code
4205 (though matplotlib IS working fine with both of those backends).
4210 (though matplotlib IS working fine with both of those backends).
4206 This will neeed much more testing. I disabled most things with
4211 This will neeed much more testing. I disabled most things with
4207 comments, so turning it back on later should be pretty easy.
4212 comments, so turning it back on later should be pretty easy.
4208
4213
4209 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
4214 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
4210 autocalling of expressions like r'foo', by modifying the line
4215 autocalling of expressions like r'foo', by modifying the line
4211 split regexp. Closes
4216 split regexp. Closes
4212 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
4217 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
4213 Riley <ipythonbugs-AT-sabi.net>.
4218 Riley <ipythonbugs-AT-sabi.net>.
4214 (InteractiveShell.mainloop): honor --nobanner with banner
4219 (InteractiveShell.mainloop): honor --nobanner with banner
4215 extensions.
4220 extensions.
4216
4221
4217 * IPython/Shell.py: Significant refactoring of all classes, so
4222 * IPython/Shell.py: Significant refactoring of all classes, so
4218 that we can really support ALL matplotlib backends and threading
4223 that we can really support ALL matplotlib backends and threading
4219 models (John spotted a bug with Tk which required this). Now we
4224 models (John spotted a bug with Tk which required this). Now we
4220 should support single-threaded, WX-threads and GTK-threads, both
4225 should support single-threaded, WX-threads and GTK-threads, both
4221 for generic code and for matplotlib.
4226 for generic code and for matplotlib.
4222
4227
4223 * IPython/ipmaker.py (__call__): Changed -mpthread option to
4228 * IPython/ipmaker.py (__call__): Changed -mpthread option to
4224 -pylab, to simplify things for users. Will also remove the pylab
4229 -pylab, to simplify things for users. Will also remove the pylab
4225 profile, since now all of matplotlib configuration is directly
4230 profile, since now all of matplotlib configuration is directly
4226 handled here. This also reduces startup time.
4231 handled here. This also reduces startup time.
4227
4232
4228 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
4233 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
4229 shell wasn't being correctly called. Also in IPShellWX.
4234 shell wasn't being correctly called. Also in IPShellWX.
4230
4235
4231 * IPython/iplib.py (InteractiveShell.__init__): Added option to
4236 * IPython/iplib.py (InteractiveShell.__init__): Added option to
4232 fine-tune banner.
4237 fine-tune banner.
4233
4238
4234 * IPython/numutils.py (spike): Deprecate these spike functions,
4239 * IPython/numutils.py (spike): Deprecate these spike functions,
4235 delete (long deprecated) gnuplot_exec handler.
4240 delete (long deprecated) gnuplot_exec handler.
4236
4241
4237 2004-08-26 Fernando Perez <fperez@colorado.edu>
4242 2004-08-26 Fernando Perez <fperez@colorado.edu>
4238
4243
4239 * ipython.1: Update for threading options, plus some others which
4244 * ipython.1: Update for threading options, plus some others which
4240 were missing.
4245 were missing.
4241
4246
4242 * IPython/ipmaker.py (__call__): Added -wthread option for
4247 * IPython/ipmaker.py (__call__): Added -wthread option for
4243 wxpython thread handling. Make sure threading options are only
4248 wxpython thread handling. Make sure threading options are only
4244 valid at the command line.
4249 valid at the command line.
4245
4250
4246 * scripts/ipython: moved shell selection into a factory function
4251 * scripts/ipython: moved shell selection into a factory function
4247 in Shell.py, to keep the starter script to a minimum.
4252 in Shell.py, to keep the starter script to a minimum.
4248
4253
4249 2004-08-25 Fernando Perez <fperez@colorado.edu>
4254 2004-08-25 Fernando Perez <fperez@colorado.edu>
4250
4255
4251 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
4256 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
4252 John. Along with some recent changes he made to matplotlib, the
4257 John. Along with some recent changes he made to matplotlib, the
4253 next versions of both systems should work very well together.
4258 next versions of both systems should work very well together.
4254
4259
4255 2004-08-24 Fernando Perez <fperez@colorado.edu>
4260 2004-08-24 Fernando Perez <fperez@colorado.edu>
4256
4261
4257 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
4262 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
4258 tried to switch the profiling to using hotshot, but I'm getting
4263 tried to switch the profiling to using hotshot, but I'm getting
4259 strange errors from prof.runctx() there. I may be misreading the
4264 strange errors from prof.runctx() there. I may be misreading the
4260 docs, but it looks weird. For now the profiling code will
4265 docs, but it looks weird. For now the profiling code will
4261 continue to use the standard profiler.
4266 continue to use the standard profiler.
4262
4267
4263 2004-08-23 Fernando Perez <fperez@colorado.edu>
4268 2004-08-23 Fernando Perez <fperez@colorado.edu>
4264
4269
4265 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
4270 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
4266 threaded shell, by John Hunter. It's not quite ready yet, but
4271 threaded shell, by John Hunter. It's not quite ready yet, but
4267 close.
4272 close.
4268
4273
4269 2004-08-22 Fernando Perez <fperez@colorado.edu>
4274 2004-08-22 Fernando Perez <fperez@colorado.edu>
4270
4275
4271 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
4276 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
4272 in Magic and ultraTB.
4277 in Magic and ultraTB.
4273
4278
4274 * ipython.1: document threading options in manpage.
4279 * ipython.1: document threading options in manpage.
4275
4280
4276 * scripts/ipython: Changed name of -thread option to -gthread,
4281 * scripts/ipython: Changed name of -thread option to -gthread,
4277 since this is GTK specific. I want to leave the door open for a
4282 since this is GTK specific. I want to leave the door open for a
4278 -wthread option for WX, which will most likely be necessary. This
4283 -wthread option for WX, which will most likely be necessary. This
4279 change affects usage and ipmaker as well.
4284 change affects usage and ipmaker as well.
4280
4285
4281 * IPython/Shell.py (matplotlib_shell): Add a factory function to
4286 * IPython/Shell.py (matplotlib_shell): Add a factory function to
4282 handle the matplotlib shell issues. Code by John Hunter
4287 handle the matplotlib shell issues. Code by John Hunter
4283 <jdhunter-AT-nitace.bsd.uchicago.edu>.
4288 <jdhunter-AT-nitace.bsd.uchicago.edu>.
4284 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
4289 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
4285 broken (and disabled for end users) for now, but it puts the
4290 broken (and disabled for end users) for now, but it puts the
4286 infrastructure in place.
4291 infrastructure in place.
4287
4292
4288 2004-08-21 Fernando Perez <fperez@colorado.edu>
4293 2004-08-21 Fernando Perez <fperez@colorado.edu>
4289
4294
4290 * ipythonrc-pylab: Add matplotlib support.
4295 * ipythonrc-pylab: Add matplotlib support.
4291
4296
4292 * matplotlib_config.py: new files for matplotlib support, part of
4297 * matplotlib_config.py: new files for matplotlib support, part of
4293 the pylab profile.
4298 the pylab profile.
4294
4299
4295 * IPython/usage.py (__doc__): documented the threading options.
4300 * IPython/usage.py (__doc__): documented the threading options.
4296
4301
4297 2004-08-20 Fernando Perez <fperez@colorado.edu>
4302 2004-08-20 Fernando Perez <fperez@colorado.edu>
4298
4303
4299 * ipython: Modified the main calling routine to handle the -thread
4304 * ipython: Modified the main calling routine to handle the -thread
4300 and -mpthread options. This needs to be done as a top-level hack,
4305 and -mpthread options. This needs to be done as a top-level hack,
4301 because it determines which class to instantiate for IPython
4306 because it determines which class to instantiate for IPython
4302 itself.
4307 itself.
4303
4308
4304 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
4309 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
4305 classes to support multithreaded GTK operation without blocking,
4310 classes to support multithreaded GTK operation without blocking,
4306 and matplotlib with all backends. This is a lot of still very
4311 and matplotlib with all backends. This is a lot of still very
4307 experimental code, and threads are tricky. So it may still have a
4312 experimental code, and threads are tricky. So it may still have a
4308 few rough edges... This code owes a lot to
4313 few rough edges... This code owes a lot to
4309 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
4314 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
4310 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
4315 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
4311 to John Hunter for all the matplotlib work.
4316 to John Hunter for all the matplotlib work.
4312
4317
4313 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
4318 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
4314 options for gtk thread and matplotlib support.
4319 options for gtk thread and matplotlib support.
4315
4320
4316 2004-08-16 Fernando Perez <fperez@colorado.edu>
4321 2004-08-16 Fernando Perez <fperez@colorado.edu>
4317
4322
4318 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
4323 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
4319 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
4324 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
4320 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
4325 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
4321
4326
4322 2004-08-11 Fernando Perez <fperez@colorado.edu>
4327 2004-08-11 Fernando Perez <fperez@colorado.edu>
4323
4328
4324 * setup.py (isfile): Fix build so documentation gets updated for
4329 * setup.py (isfile): Fix build so documentation gets updated for
4325 rpms (it was only done for .tgz builds).
4330 rpms (it was only done for .tgz builds).
4326
4331
4327 2004-08-10 Fernando Perez <fperez@colorado.edu>
4332 2004-08-10 Fernando Perez <fperez@colorado.edu>
4328
4333
4329 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
4334 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
4330
4335
4331 * iplib.py : Silence syntax error exceptions in tab-completion.
4336 * iplib.py : Silence syntax error exceptions in tab-completion.
4332
4337
4333 2004-08-05 Fernando Perez <fperez@colorado.edu>
4338 2004-08-05 Fernando Perez <fperez@colorado.edu>
4334
4339
4335 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
4340 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
4336 'color off' mark for continuation prompts. This was causing long
4341 'color off' mark for continuation prompts. This was causing long
4337 continuation lines to mis-wrap.
4342 continuation lines to mis-wrap.
4338
4343
4339 2004-08-01 Fernando Perez <fperez@colorado.edu>
4344 2004-08-01 Fernando Perez <fperez@colorado.edu>
4340
4345
4341 * IPython/ipmaker.py (make_IPython): Allow the shell class used
4346 * IPython/ipmaker.py (make_IPython): Allow the shell class used
4342 for building ipython to be a parameter. All this is necessary
4347 for building ipython to be a parameter. All this is necessary
4343 right now to have a multithreaded version, but this insane
4348 right now to have a multithreaded version, but this insane
4344 non-design will be cleaned up soon. For now, it's a hack that
4349 non-design will be cleaned up soon. For now, it's a hack that
4345 works.
4350 works.
4346
4351
4347 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
4352 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
4348 args in various places. No bugs so far, but it's a dangerous
4353 args in various places. No bugs so far, but it's a dangerous
4349 practice.
4354 practice.
4350
4355
4351 2004-07-31 Fernando Perez <fperez@colorado.edu>
4356 2004-07-31 Fernando Perez <fperez@colorado.edu>
4352
4357
4353 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
4358 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
4354 fix completion of files with dots in their names under most
4359 fix completion of files with dots in their names under most
4355 profiles (pysh was OK because the completion order is different).
4360 profiles (pysh was OK because the completion order is different).
4356
4361
4357 2004-07-27 Fernando Perez <fperez@colorado.edu>
4362 2004-07-27 Fernando Perez <fperez@colorado.edu>
4358
4363
4359 * IPython/iplib.py (InteractiveShell.__init__): build dict of
4364 * IPython/iplib.py (InteractiveShell.__init__): build dict of
4360 keywords manually, b/c the one in keyword.py was removed in python
4365 keywords manually, b/c the one in keyword.py was removed in python
4361 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
4366 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
4362 This is NOT a bug under python 2.3 and earlier.
4367 This is NOT a bug under python 2.3 and earlier.
4363
4368
4364 2004-07-26 Fernando Perez <fperez@colorado.edu>
4369 2004-07-26 Fernando Perez <fperez@colorado.edu>
4365
4370
4366 * IPython/ultraTB.py (VerboseTB.text): Add another
4371 * IPython/ultraTB.py (VerboseTB.text): Add another
4367 linecache.checkcache() call to try to prevent inspect.py from
4372 linecache.checkcache() call to try to prevent inspect.py from
4368 crashing under python 2.3. I think this fixes
4373 crashing under python 2.3. I think this fixes
4369 http://www.scipy.net/roundup/ipython/issue17.
4374 http://www.scipy.net/roundup/ipython/issue17.
4370
4375
4371 2004-07-26 *** Released version 0.6.2
4376 2004-07-26 *** Released version 0.6.2
4372
4377
4373 2004-07-26 Fernando Perez <fperez@colorado.edu>
4378 2004-07-26 Fernando Perez <fperez@colorado.edu>
4374
4379
4375 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
4380 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
4376 fail for any number.
4381 fail for any number.
4377 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
4382 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
4378 empty bookmarks.
4383 empty bookmarks.
4379
4384
4380 2004-07-26 *** Released version 0.6.1
4385 2004-07-26 *** Released version 0.6.1
4381
4386
4382 2004-07-26 Fernando Perez <fperez@colorado.edu>
4387 2004-07-26 Fernando Perez <fperez@colorado.edu>
4383
4388
4384 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
4389 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
4385
4390
4386 * IPython/iplib.py (protect_filename): Applied Ville's patch for
4391 * IPython/iplib.py (protect_filename): Applied Ville's patch for
4387 escaping '()[]{}' in filenames.
4392 escaping '()[]{}' in filenames.
4388
4393
4389 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4394 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4390 Python 2.2 users who lack a proper shlex.split.
4395 Python 2.2 users who lack a proper shlex.split.
4391
4396
4392 2004-07-19 Fernando Perez <fperez@colorado.edu>
4397 2004-07-19 Fernando Perez <fperez@colorado.edu>
4393
4398
4394 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4399 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4395 for reading readline's init file. I follow the normal chain:
4400 for reading readline's init file. I follow the normal chain:
4396 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4401 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4397 report by Mike Heeter. This closes
4402 report by Mike Heeter. This closes
4398 http://www.scipy.net/roundup/ipython/issue16.
4403 http://www.scipy.net/roundup/ipython/issue16.
4399
4404
4400 2004-07-18 Fernando Perez <fperez@colorado.edu>
4405 2004-07-18 Fernando Perez <fperez@colorado.edu>
4401
4406
4402 * IPython/iplib.py (__init__): Add better handling of '\' under
4407 * IPython/iplib.py (__init__): Add better handling of '\' under
4403 Win32 for filenames. After a patch by Ville.
4408 Win32 for filenames. After a patch by Ville.
4404
4409
4405 2004-07-17 Fernando Perez <fperez@colorado.edu>
4410 2004-07-17 Fernando Perez <fperez@colorado.edu>
4406
4411
4407 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4412 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4408 autocalling would be triggered for 'foo is bar' if foo is
4413 autocalling would be triggered for 'foo is bar' if foo is
4409 callable. I also cleaned up the autocall detection code to use a
4414 callable. I also cleaned up the autocall detection code to use a
4410 regexp, which is faster. Bug reported by Alexander Schmolck.
4415 regexp, which is faster. Bug reported by Alexander Schmolck.
4411
4416
4412 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4417 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4413 '?' in them would confuse the help system. Reported by Alex
4418 '?' in them would confuse the help system. Reported by Alex
4414 Schmolck.
4419 Schmolck.
4415
4420
4416 2004-07-16 Fernando Perez <fperez@colorado.edu>
4421 2004-07-16 Fernando Perez <fperez@colorado.edu>
4417
4422
4418 * IPython/GnuplotInteractive.py (__all__): added plot2.
4423 * IPython/GnuplotInteractive.py (__all__): added plot2.
4419
4424
4420 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4425 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4421 plotting dictionaries, lists or tuples of 1d arrays.
4426 plotting dictionaries, lists or tuples of 1d arrays.
4422
4427
4423 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4428 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4424 optimizations.
4429 optimizations.
4425
4430
4426 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4431 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4427 the information which was there from Janko's original IPP code:
4432 the information which was there from Janko's original IPP code:
4428
4433
4429 03.05.99 20:53 porto.ifm.uni-kiel.de
4434 03.05.99 20:53 porto.ifm.uni-kiel.de
4430 --Started changelog.
4435 --Started changelog.
4431 --make clear do what it say it does
4436 --make clear do what it say it does
4432 --added pretty output of lines from inputcache
4437 --added pretty output of lines from inputcache
4433 --Made Logger a mixin class, simplifies handling of switches
4438 --Made Logger a mixin class, simplifies handling of switches
4434 --Added own completer class. .string<TAB> expands to last history
4439 --Added own completer class. .string<TAB> expands to last history
4435 line which starts with string. The new expansion is also present
4440 line which starts with string. The new expansion is also present
4436 with Ctrl-r from the readline library. But this shows, who this
4441 with Ctrl-r from the readline library. But this shows, who this
4437 can be done for other cases.
4442 can be done for other cases.
4438 --Added convention that all shell functions should accept a
4443 --Added convention that all shell functions should accept a
4439 parameter_string This opens the door for different behaviour for
4444 parameter_string This opens the door for different behaviour for
4440 each function. @cd is a good example of this.
4445 each function. @cd is a good example of this.
4441
4446
4442 04.05.99 12:12 porto.ifm.uni-kiel.de
4447 04.05.99 12:12 porto.ifm.uni-kiel.de
4443 --added logfile rotation
4448 --added logfile rotation
4444 --added new mainloop method which freezes first the namespace
4449 --added new mainloop method which freezes first the namespace
4445
4450
4446 07.05.99 21:24 porto.ifm.uni-kiel.de
4451 07.05.99 21:24 porto.ifm.uni-kiel.de
4447 --added the docreader classes. Now there is a help system.
4452 --added the docreader classes. Now there is a help system.
4448 -This is only a first try. Currently it's not easy to put new
4453 -This is only a first try. Currently it's not easy to put new
4449 stuff in the indices. But this is the way to go. Info would be
4454 stuff in the indices. But this is the way to go. Info would be
4450 better, but HTML is every where and not everybody has an info
4455 better, but HTML is every where and not everybody has an info
4451 system installed and it's not so easy to change html-docs to info.
4456 system installed and it's not so easy to change html-docs to info.
4452 --added global logfile option
4457 --added global logfile option
4453 --there is now a hook for object inspection method pinfo needs to
4458 --there is now a hook for object inspection method pinfo needs to
4454 be provided for this. Can be reached by two '??'.
4459 be provided for this. Can be reached by two '??'.
4455
4460
4456 08.05.99 20:51 porto.ifm.uni-kiel.de
4461 08.05.99 20:51 porto.ifm.uni-kiel.de
4457 --added a README
4462 --added a README
4458 --bug in rc file. Something has changed so functions in the rc
4463 --bug in rc file. Something has changed so functions in the rc
4459 file need to reference the shell and not self. Not clear if it's a
4464 file need to reference the shell and not self. Not clear if it's a
4460 bug or feature.
4465 bug or feature.
4461 --changed rc file for new behavior
4466 --changed rc file for new behavior
4462
4467
4463 2004-07-15 Fernando Perez <fperez@colorado.edu>
4468 2004-07-15 Fernando Perez <fperez@colorado.edu>
4464
4469
4465 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4470 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4466 cache was falling out of sync in bizarre manners when multi-line
4471 cache was falling out of sync in bizarre manners when multi-line
4467 input was present. Minor optimizations and cleanup.
4472 input was present. Minor optimizations and cleanup.
4468
4473
4469 (Logger): Remove old Changelog info for cleanup. This is the
4474 (Logger): Remove old Changelog info for cleanup. This is the
4470 information which was there from Janko's original code:
4475 information which was there from Janko's original code:
4471
4476
4472 Changes to Logger: - made the default log filename a parameter
4477 Changes to Logger: - made the default log filename a parameter
4473
4478
4474 - put a check for lines beginning with !@? in log(). Needed
4479 - put a check for lines beginning with !@? in log(). Needed
4475 (even if the handlers properly log their lines) for mid-session
4480 (even if the handlers properly log their lines) for mid-session
4476 logging activation to work properly. Without this, lines logged
4481 logging activation to work properly. Without this, lines logged
4477 in mid session, which get read from the cache, would end up
4482 in mid session, which get read from the cache, would end up
4478 'bare' (with !@? in the open) in the log. Now they are caught
4483 'bare' (with !@? in the open) in the log. Now they are caught
4479 and prepended with a #.
4484 and prepended with a #.
4480
4485
4481 * IPython/iplib.py (InteractiveShell.init_readline): added check
4486 * IPython/iplib.py (InteractiveShell.init_readline): added check
4482 in case MagicCompleter fails to be defined, so we don't crash.
4487 in case MagicCompleter fails to be defined, so we don't crash.
4483
4488
4484 2004-07-13 Fernando Perez <fperez@colorado.edu>
4489 2004-07-13 Fernando Perez <fperez@colorado.edu>
4485
4490
4486 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4491 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4487 of EPS if the requested filename ends in '.eps'.
4492 of EPS if the requested filename ends in '.eps'.
4488
4493
4489 2004-07-04 Fernando Perez <fperez@colorado.edu>
4494 2004-07-04 Fernando Perez <fperez@colorado.edu>
4490
4495
4491 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4496 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4492 escaping of quotes when calling the shell.
4497 escaping of quotes when calling the shell.
4493
4498
4494 2004-07-02 Fernando Perez <fperez@colorado.edu>
4499 2004-07-02 Fernando Perez <fperez@colorado.edu>
4495
4500
4496 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4501 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4497 gettext not working because we were clobbering '_'. Fixes
4502 gettext not working because we were clobbering '_'. Fixes
4498 http://www.scipy.net/roundup/ipython/issue6.
4503 http://www.scipy.net/roundup/ipython/issue6.
4499
4504
4500 2004-07-01 Fernando Perez <fperez@colorado.edu>
4505 2004-07-01 Fernando Perez <fperez@colorado.edu>
4501
4506
4502 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4507 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4503 into @cd. Patch by Ville.
4508 into @cd. Patch by Ville.
4504
4509
4505 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4510 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4506 new function to store things after ipmaker runs. Patch by Ville.
4511 new function to store things after ipmaker runs. Patch by Ville.
4507 Eventually this will go away once ipmaker is removed and the class
4512 Eventually this will go away once ipmaker is removed and the class
4508 gets cleaned up, but for now it's ok. Key functionality here is
4513 gets cleaned up, but for now it's ok. Key functionality here is
4509 the addition of the persistent storage mechanism, a dict for
4514 the addition of the persistent storage mechanism, a dict for
4510 keeping data across sessions (for now just bookmarks, but more can
4515 keeping data across sessions (for now just bookmarks, but more can
4511 be implemented later).
4516 be implemented later).
4512
4517
4513 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4518 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4514 persistent across sections. Patch by Ville, I modified it
4519 persistent across sections. Patch by Ville, I modified it
4515 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4520 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4516 added a '-l' option to list all bookmarks.
4521 added a '-l' option to list all bookmarks.
4517
4522
4518 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4523 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4519 center for cleanup. Registered with atexit.register(). I moved
4524 center for cleanup. Registered with atexit.register(). I moved
4520 here the old exit_cleanup(). After a patch by Ville.
4525 here the old exit_cleanup(). After a patch by Ville.
4521
4526
4522 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4527 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4523 characters in the hacked shlex_split for python 2.2.
4528 characters in the hacked shlex_split for python 2.2.
4524
4529
4525 * IPython/iplib.py (file_matches): more fixes to filenames with
4530 * IPython/iplib.py (file_matches): more fixes to filenames with
4526 whitespace in them. It's not perfect, but limitations in python's
4531 whitespace in them. It's not perfect, but limitations in python's
4527 readline make it impossible to go further.
4532 readline make it impossible to go further.
4528
4533
4529 2004-06-29 Fernando Perez <fperez@colorado.edu>
4534 2004-06-29 Fernando Perez <fperez@colorado.edu>
4530
4535
4531 * IPython/iplib.py (file_matches): escape whitespace correctly in
4536 * IPython/iplib.py (file_matches): escape whitespace correctly in
4532 filename completions. Bug reported by Ville.
4537 filename completions. Bug reported by Ville.
4533
4538
4534 2004-06-28 Fernando Perez <fperez@colorado.edu>
4539 2004-06-28 Fernando Perez <fperez@colorado.edu>
4535
4540
4536 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4541 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4537 the history file will be called 'history-PROFNAME' (or just
4542 the history file will be called 'history-PROFNAME' (or just
4538 'history' if no profile is loaded). I was getting annoyed at
4543 'history' if no profile is loaded). I was getting annoyed at
4539 getting my Numerical work history clobbered by pysh sessions.
4544 getting my Numerical work history clobbered by pysh sessions.
4540
4545
4541 * IPython/iplib.py (InteractiveShell.__init__): Internal
4546 * IPython/iplib.py (InteractiveShell.__init__): Internal
4542 getoutputerror() function so that we can honor the system_verbose
4547 getoutputerror() function so that we can honor the system_verbose
4543 flag for _all_ system calls. I also added escaping of #
4548 flag for _all_ system calls. I also added escaping of #
4544 characters here to avoid confusing Itpl.
4549 characters here to avoid confusing Itpl.
4545
4550
4546 * IPython/Magic.py (shlex_split): removed call to shell in
4551 * IPython/Magic.py (shlex_split): removed call to shell in
4547 parse_options and replaced it with shlex.split(). The annoying
4552 parse_options and replaced it with shlex.split(). The annoying
4548 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4553 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4549 to backport it from 2.3, with several frail hacks (the shlex
4554 to backport it from 2.3, with several frail hacks (the shlex
4550 module is rather limited in 2.2). Thanks to a suggestion by Ville
4555 module is rather limited in 2.2). Thanks to a suggestion by Ville
4551 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4556 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4552 problem.
4557 problem.
4553
4558
4554 (Magic.magic_system_verbose): new toggle to print the actual
4559 (Magic.magic_system_verbose): new toggle to print the actual
4555 system calls made by ipython. Mainly for debugging purposes.
4560 system calls made by ipython. Mainly for debugging purposes.
4556
4561
4557 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4562 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4558 doesn't support persistence. Reported (and fix suggested) by
4563 doesn't support persistence. Reported (and fix suggested) by
4559 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4564 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4560
4565
4561 2004-06-26 Fernando Perez <fperez@colorado.edu>
4566 2004-06-26 Fernando Perez <fperez@colorado.edu>
4562
4567
4563 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4568 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4564 continue prompts.
4569 continue prompts.
4565
4570
4566 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4571 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4567 function (basically a big docstring) and a few more things here to
4572 function (basically a big docstring) and a few more things here to
4568 speedup startup. pysh.py is now very lightweight. We want because
4573 speedup startup. pysh.py is now very lightweight. We want because
4569 it gets execfile'd, while InterpreterExec gets imported, so
4574 it gets execfile'd, while InterpreterExec gets imported, so
4570 byte-compilation saves time.
4575 byte-compilation saves time.
4571
4576
4572 2004-06-25 Fernando Perez <fperez@colorado.edu>
4577 2004-06-25 Fernando Perez <fperez@colorado.edu>
4573
4578
4574 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4579 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4575 -NUM', which was recently broken.
4580 -NUM', which was recently broken.
4576
4581
4577 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4582 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4578 in multi-line input (but not !!, which doesn't make sense there).
4583 in multi-line input (but not !!, which doesn't make sense there).
4579
4584
4580 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4585 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4581 It's just too useful, and people can turn it off in the less
4586 It's just too useful, and people can turn it off in the less
4582 common cases where it's a problem.
4587 common cases where it's a problem.
4583
4588
4584 2004-06-24 Fernando Perez <fperez@colorado.edu>
4589 2004-06-24 Fernando Perez <fperez@colorado.edu>
4585
4590
4586 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4591 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4587 special syntaxes (like alias calling) is now allied in multi-line
4592 special syntaxes (like alias calling) is now allied in multi-line
4588 input. This is still _very_ experimental, but it's necessary for
4593 input. This is still _very_ experimental, but it's necessary for
4589 efficient shell usage combining python looping syntax with system
4594 efficient shell usage combining python looping syntax with system
4590 calls. For now it's restricted to aliases, I don't think it
4595 calls. For now it's restricted to aliases, I don't think it
4591 really even makes sense to have this for magics.
4596 really even makes sense to have this for magics.
4592
4597
4593 2004-06-23 Fernando Perez <fperez@colorado.edu>
4598 2004-06-23 Fernando Perez <fperez@colorado.edu>
4594
4599
4595 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4600 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4596 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4601 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4597
4602
4598 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4603 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4599 extensions under Windows (after code sent by Gary Bishop). The
4604 extensions under Windows (after code sent by Gary Bishop). The
4600 extensions considered 'executable' are stored in IPython's rc
4605 extensions considered 'executable' are stored in IPython's rc
4601 structure as win_exec_ext.
4606 structure as win_exec_ext.
4602
4607
4603 * IPython/genutils.py (shell): new function, like system() but
4608 * IPython/genutils.py (shell): new function, like system() but
4604 without return value. Very useful for interactive shell work.
4609 without return value. Very useful for interactive shell work.
4605
4610
4606 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4611 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4607 delete aliases.
4612 delete aliases.
4608
4613
4609 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4614 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4610 sure that the alias table doesn't contain python keywords.
4615 sure that the alias table doesn't contain python keywords.
4611
4616
4612 2004-06-21 Fernando Perez <fperez@colorado.edu>
4617 2004-06-21 Fernando Perez <fperez@colorado.edu>
4613
4618
4614 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4619 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4615 non-existent items are found in $PATH. Reported by Thorsten.
4620 non-existent items are found in $PATH. Reported by Thorsten.
4616
4621
4617 2004-06-20 Fernando Perez <fperez@colorado.edu>
4622 2004-06-20 Fernando Perez <fperez@colorado.edu>
4618
4623
4619 * IPython/iplib.py (complete): modified the completer so that the
4624 * IPython/iplib.py (complete): modified the completer so that the
4620 order of priorities can be easily changed at runtime.
4625 order of priorities can be easily changed at runtime.
4621
4626
4622 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4627 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4623 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4628 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4624
4629
4625 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4630 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4626 expand Python variables prepended with $ in all system calls. The
4631 expand Python variables prepended with $ in all system calls. The
4627 same was done to InteractiveShell.handle_shell_escape. Now all
4632 same was done to InteractiveShell.handle_shell_escape. Now all
4628 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4633 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4629 expansion of python variables and expressions according to the
4634 expansion of python variables and expressions according to the
4630 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4635 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4631
4636
4632 Though PEP-215 has been rejected, a similar (but simpler) one
4637 Though PEP-215 has been rejected, a similar (but simpler) one
4633 seems like it will go into Python 2.4, PEP-292 -
4638 seems like it will go into Python 2.4, PEP-292 -
4634 http://www.python.org/peps/pep-0292.html.
4639 http://www.python.org/peps/pep-0292.html.
4635
4640
4636 I'll keep the full syntax of PEP-215, since IPython has since the
4641 I'll keep the full syntax of PEP-215, since IPython has since the
4637 start used Ka-Ping Yee's reference implementation discussed there
4642 start used Ka-Ping Yee's reference implementation discussed there
4638 (Itpl), and I actually like the powerful semantics it offers.
4643 (Itpl), and I actually like the powerful semantics it offers.
4639
4644
4640 In order to access normal shell variables, the $ has to be escaped
4645 In order to access normal shell variables, the $ has to be escaped
4641 via an extra $. For example:
4646 via an extra $. For example:
4642
4647
4643 In [7]: PATH='a python variable'
4648 In [7]: PATH='a python variable'
4644
4649
4645 In [8]: !echo $PATH
4650 In [8]: !echo $PATH
4646 a python variable
4651 a python variable
4647
4652
4648 In [9]: !echo $$PATH
4653 In [9]: !echo $$PATH
4649 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4654 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4650
4655
4651 (Magic.parse_options): escape $ so the shell doesn't evaluate
4656 (Magic.parse_options): escape $ so the shell doesn't evaluate
4652 things prematurely.
4657 things prematurely.
4653
4658
4654 * IPython/iplib.py (InteractiveShell.call_alias): added the
4659 * IPython/iplib.py (InteractiveShell.call_alias): added the
4655 ability for aliases to expand python variables via $.
4660 ability for aliases to expand python variables via $.
4656
4661
4657 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4662 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4658 system, now there's a @rehash/@rehashx pair of magics. These work
4663 system, now there's a @rehash/@rehashx pair of magics. These work
4659 like the csh rehash command, and can be invoked at any time. They
4664 like the csh rehash command, and can be invoked at any time. They
4660 build a table of aliases to everything in the user's $PATH
4665 build a table of aliases to everything in the user's $PATH
4661 (@rehash uses everything, @rehashx is slower but only adds
4666 (@rehash uses everything, @rehashx is slower but only adds
4662 executable files). With this, the pysh.py-based shell profile can
4667 executable files). With this, the pysh.py-based shell profile can
4663 now simply call rehash upon startup, and full access to all
4668 now simply call rehash upon startup, and full access to all
4664 programs in the user's path is obtained.
4669 programs in the user's path is obtained.
4665
4670
4666 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4671 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4667 functionality is now fully in place. I removed the old dynamic
4672 functionality is now fully in place. I removed the old dynamic
4668 code generation based approach, in favor of a much lighter one
4673 code generation based approach, in favor of a much lighter one
4669 based on a simple dict. The advantage is that this allows me to
4674 based on a simple dict. The advantage is that this allows me to
4670 now have thousands of aliases with negligible cost (unthinkable
4675 now have thousands of aliases with negligible cost (unthinkable
4671 with the old system).
4676 with the old system).
4672
4677
4673 2004-06-19 Fernando Perez <fperez@colorado.edu>
4678 2004-06-19 Fernando Perez <fperez@colorado.edu>
4674
4679
4675 * IPython/iplib.py (__init__): extended MagicCompleter class to
4680 * IPython/iplib.py (__init__): extended MagicCompleter class to
4676 also complete (last in priority) on user aliases.
4681 also complete (last in priority) on user aliases.
4677
4682
4678 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4683 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4679 call to eval.
4684 call to eval.
4680 (ItplNS.__init__): Added a new class which functions like Itpl,
4685 (ItplNS.__init__): Added a new class which functions like Itpl,
4681 but allows configuring the namespace for the evaluation to occur
4686 but allows configuring the namespace for the evaluation to occur
4682 in.
4687 in.
4683
4688
4684 2004-06-18 Fernando Perez <fperez@colorado.edu>
4689 2004-06-18 Fernando Perez <fperez@colorado.edu>
4685
4690
4686 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4691 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4687 better message when 'exit' or 'quit' are typed (a common newbie
4692 better message when 'exit' or 'quit' are typed (a common newbie
4688 confusion).
4693 confusion).
4689
4694
4690 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4695 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4691 check for Windows users.
4696 check for Windows users.
4692
4697
4693 * IPython/iplib.py (InteractiveShell.user_setup): removed
4698 * IPython/iplib.py (InteractiveShell.user_setup): removed
4694 disabling of colors for Windows. I'll test at runtime and issue a
4699 disabling of colors for Windows. I'll test at runtime and issue a
4695 warning if Gary's readline isn't found, as to nudge users to
4700 warning if Gary's readline isn't found, as to nudge users to
4696 download it.
4701 download it.
4697
4702
4698 2004-06-16 Fernando Perez <fperez@colorado.edu>
4703 2004-06-16 Fernando Perez <fperez@colorado.edu>
4699
4704
4700 * IPython/genutils.py (Stream.__init__): changed to print errors
4705 * IPython/genutils.py (Stream.__init__): changed to print errors
4701 to sys.stderr. I had a circular dependency here. Now it's
4706 to sys.stderr. I had a circular dependency here. Now it's
4702 possible to run ipython as IDLE's shell (consider this pre-alpha,
4707 possible to run ipython as IDLE's shell (consider this pre-alpha,
4703 since true stdout things end up in the starting terminal instead
4708 since true stdout things end up in the starting terminal instead
4704 of IDLE's out).
4709 of IDLE's out).
4705
4710
4706 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4711 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4707 users who haven't # updated their prompt_in2 definitions. Remove
4712 users who haven't # updated their prompt_in2 definitions. Remove
4708 eventually.
4713 eventually.
4709 (multiple_replace): added credit to original ASPN recipe.
4714 (multiple_replace): added credit to original ASPN recipe.
4710
4715
4711 2004-06-15 Fernando Perez <fperez@colorado.edu>
4716 2004-06-15 Fernando Perez <fperez@colorado.edu>
4712
4717
4713 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4718 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4714 list of auto-defined aliases.
4719 list of auto-defined aliases.
4715
4720
4716 2004-06-13 Fernando Perez <fperez@colorado.edu>
4721 2004-06-13 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4723 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4719 install was really requested (so setup.py can be used for other
4724 install was really requested (so setup.py can be used for other
4720 things under Windows).
4725 things under Windows).
4721
4726
4722 2004-06-10 Fernando Perez <fperez@colorado.edu>
4727 2004-06-10 Fernando Perez <fperez@colorado.edu>
4723
4728
4724 * IPython/Logger.py (Logger.create_log): Manually remove any old
4729 * IPython/Logger.py (Logger.create_log): Manually remove any old
4725 backup, since os.remove may fail under Windows. Fixes bug
4730 backup, since os.remove may fail under Windows. Fixes bug
4726 reported by Thorsten.
4731 reported by Thorsten.
4727
4732
4728 2004-06-09 Fernando Perez <fperez@colorado.edu>
4733 2004-06-09 Fernando Perez <fperez@colorado.edu>
4729
4734
4730 * examples/example-embed.py: fixed all references to %n (replaced
4735 * examples/example-embed.py: fixed all references to %n (replaced
4731 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4736 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4732 for all examples and the manual as well.
4737 for all examples and the manual as well.
4733
4738
4734 2004-06-08 Fernando Perez <fperez@colorado.edu>
4739 2004-06-08 Fernando Perez <fperez@colorado.edu>
4735
4740
4736 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4741 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4737 alignment and color management. All 3 prompt subsystems now
4742 alignment and color management. All 3 prompt subsystems now
4738 inherit from BasePrompt.
4743 inherit from BasePrompt.
4739
4744
4740 * tools/release: updates for windows installer build and tag rpms
4745 * tools/release: updates for windows installer build and tag rpms
4741 with python version (since paths are fixed).
4746 with python version (since paths are fixed).
4742
4747
4743 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4748 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4744 which will become eventually obsolete. Also fixed the default
4749 which will become eventually obsolete. Also fixed the default
4745 prompt_in2 to use \D, so at least new users start with the correct
4750 prompt_in2 to use \D, so at least new users start with the correct
4746 defaults.
4751 defaults.
4747 WARNING: Users with existing ipythonrc files will need to apply
4752 WARNING: Users with existing ipythonrc files will need to apply
4748 this fix manually!
4753 this fix manually!
4749
4754
4750 * setup.py: make windows installer (.exe). This is finally the
4755 * setup.py: make windows installer (.exe). This is finally the
4751 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4756 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4752 which I hadn't included because it required Python 2.3 (or recent
4757 which I hadn't included because it required Python 2.3 (or recent
4753 distutils).
4758 distutils).
4754
4759
4755 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4760 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4756 usage of new '\D' escape.
4761 usage of new '\D' escape.
4757
4762
4758 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4763 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4759 lacks os.getuid())
4764 lacks os.getuid())
4760 (CachedOutput.set_colors): Added the ability to turn coloring
4765 (CachedOutput.set_colors): Added the ability to turn coloring
4761 on/off with @colors even for manually defined prompt colors. It
4766 on/off with @colors even for manually defined prompt colors. It
4762 uses a nasty global, but it works safely and via the generic color
4767 uses a nasty global, but it works safely and via the generic color
4763 handling mechanism.
4768 handling mechanism.
4764 (Prompt2.__init__): Introduced new escape '\D' for continuation
4769 (Prompt2.__init__): Introduced new escape '\D' for continuation
4765 prompts. It represents the counter ('\#') as dots.
4770 prompts. It represents the counter ('\#') as dots.
4766 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4771 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4767 need to update their ipythonrc files and replace '%n' with '\D' in
4772 need to update their ipythonrc files and replace '%n' with '\D' in
4768 their prompt_in2 settings everywhere. Sorry, but there's
4773 their prompt_in2 settings everywhere. Sorry, but there's
4769 otherwise no clean way to get all prompts to properly align. The
4774 otherwise no clean way to get all prompts to properly align. The
4770 ipythonrc shipped with IPython has been updated.
4775 ipythonrc shipped with IPython has been updated.
4771
4776
4772 2004-06-07 Fernando Perez <fperez@colorado.edu>
4777 2004-06-07 Fernando Perez <fperez@colorado.edu>
4773
4778
4774 * setup.py (isfile): Pass local_icons option to latex2html, so the
4779 * setup.py (isfile): Pass local_icons option to latex2html, so the
4775 resulting HTML file is self-contained. Thanks to
4780 resulting HTML file is self-contained. Thanks to
4776 dryice-AT-liu.com.cn for the tip.
4781 dryice-AT-liu.com.cn for the tip.
4777
4782
4778 * pysh.py: I created a new profile 'shell', which implements a
4783 * pysh.py: I created a new profile 'shell', which implements a
4779 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4784 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4780 system shell, nor will it become one anytime soon. It's mainly
4785 system shell, nor will it become one anytime soon. It's mainly
4781 meant to illustrate the use of the new flexible bash-like prompts.
4786 meant to illustrate the use of the new flexible bash-like prompts.
4782 I guess it could be used by hardy souls for true shell management,
4787 I guess it could be used by hardy souls for true shell management,
4783 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4788 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4784 profile. This uses the InterpreterExec extension provided by
4789 profile. This uses the InterpreterExec extension provided by
4785 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4790 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4786
4791
4787 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4792 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4788 auto-align itself with the length of the previous input prompt
4793 auto-align itself with the length of the previous input prompt
4789 (taking into account the invisible color escapes).
4794 (taking into account the invisible color escapes).
4790 (CachedOutput.__init__): Large restructuring of this class. Now
4795 (CachedOutput.__init__): Large restructuring of this class. Now
4791 all three prompts (primary1, primary2, output) are proper objects,
4796 all three prompts (primary1, primary2, output) are proper objects,
4792 managed by the 'parent' CachedOutput class. The code is still a
4797 managed by the 'parent' CachedOutput class. The code is still a
4793 bit hackish (all prompts share state via a pointer to the cache),
4798 bit hackish (all prompts share state via a pointer to the cache),
4794 but it's overall far cleaner than before.
4799 but it's overall far cleaner than before.
4795
4800
4796 * IPython/genutils.py (getoutputerror): modified to add verbose,
4801 * IPython/genutils.py (getoutputerror): modified to add verbose,
4797 debug and header options. This makes the interface of all getout*
4802 debug and header options. This makes the interface of all getout*
4798 functions uniform.
4803 functions uniform.
4799 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4804 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4800
4805
4801 * IPython/Magic.py (Magic.default_option): added a function to
4806 * IPython/Magic.py (Magic.default_option): added a function to
4802 allow registering default options for any magic command. This
4807 allow registering default options for any magic command. This
4803 makes it easy to have profiles which customize the magics globally
4808 makes it easy to have profiles which customize the magics globally
4804 for a certain use. The values set through this function are
4809 for a certain use. The values set through this function are
4805 picked up by the parse_options() method, which all magics should
4810 picked up by the parse_options() method, which all magics should
4806 use to parse their options.
4811 use to parse their options.
4807
4812
4808 * IPython/genutils.py (warn): modified the warnings framework to
4813 * IPython/genutils.py (warn): modified the warnings framework to
4809 use the Term I/O class. I'm trying to slowly unify all of
4814 use the Term I/O class. I'm trying to slowly unify all of
4810 IPython's I/O operations to pass through Term.
4815 IPython's I/O operations to pass through Term.
4811
4816
4812 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4817 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4813 the secondary prompt to correctly match the length of the primary
4818 the secondary prompt to correctly match the length of the primary
4814 one for any prompt. Now multi-line code will properly line up
4819 one for any prompt. Now multi-line code will properly line up
4815 even for path dependent prompts, such as the new ones available
4820 even for path dependent prompts, such as the new ones available
4816 via the prompt_specials.
4821 via the prompt_specials.
4817
4822
4818 2004-06-06 Fernando Perez <fperez@colorado.edu>
4823 2004-06-06 Fernando Perez <fperez@colorado.edu>
4819
4824
4820 * IPython/Prompts.py (prompt_specials): Added the ability to have
4825 * IPython/Prompts.py (prompt_specials): Added the ability to have
4821 bash-like special sequences in the prompts, which get
4826 bash-like special sequences in the prompts, which get
4822 automatically expanded. Things like hostname, current working
4827 automatically expanded. Things like hostname, current working
4823 directory and username are implemented already, but it's easy to
4828 directory and username are implemented already, but it's easy to
4824 add more in the future. Thanks to a patch by W.J. van der Laan
4829 add more in the future. Thanks to a patch by W.J. van der Laan
4825 <gnufnork-AT-hetdigitalegat.nl>
4830 <gnufnork-AT-hetdigitalegat.nl>
4826 (prompt_specials): Added color support for prompt strings, so
4831 (prompt_specials): Added color support for prompt strings, so
4827 users can define arbitrary color setups for their prompts.
4832 users can define arbitrary color setups for their prompts.
4828
4833
4829 2004-06-05 Fernando Perez <fperez@colorado.edu>
4834 2004-06-05 Fernando Perez <fperez@colorado.edu>
4830
4835
4831 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4836 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4832 code to load Gary Bishop's readline and configure it
4837 code to load Gary Bishop's readline and configure it
4833 automatically. Thanks to Gary for help on this.
4838 automatically. Thanks to Gary for help on this.
4834
4839
4835 2004-06-01 Fernando Perez <fperez@colorado.edu>
4840 2004-06-01 Fernando Perez <fperez@colorado.edu>
4836
4841
4837 * IPython/Logger.py (Logger.create_log): fix bug for logging
4842 * IPython/Logger.py (Logger.create_log): fix bug for logging
4838 with no filename (previous fix was incomplete).
4843 with no filename (previous fix was incomplete).
4839
4844
4840 2004-05-25 Fernando Perez <fperez@colorado.edu>
4845 2004-05-25 Fernando Perez <fperez@colorado.edu>
4841
4846
4842 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4847 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4843 parens would get passed to the shell.
4848 parens would get passed to the shell.
4844
4849
4845 2004-05-20 Fernando Perez <fperez@colorado.edu>
4850 2004-05-20 Fernando Perez <fperez@colorado.edu>
4846
4851
4847 * IPython/Magic.py (Magic.magic_prun): changed default profile
4852 * IPython/Magic.py (Magic.magic_prun): changed default profile
4848 sort order to 'time' (the more common profiling need).
4853 sort order to 'time' (the more common profiling need).
4849
4854
4850 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4855 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4851 so that source code shown is guaranteed in sync with the file on
4856 so that source code shown is guaranteed in sync with the file on
4852 disk (also changed in psource). Similar fix to the one for
4857 disk (also changed in psource). Similar fix to the one for
4853 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4858 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4854 <yann.ledu-AT-noos.fr>.
4859 <yann.ledu-AT-noos.fr>.
4855
4860
4856 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4861 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4857 with a single option would not be correctly parsed. Closes
4862 with a single option would not be correctly parsed. Closes
4858 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4863 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4859 introduced in 0.6.0 (on 2004-05-06).
4864 introduced in 0.6.0 (on 2004-05-06).
4860
4865
4861 2004-05-13 *** Released version 0.6.0
4866 2004-05-13 *** Released version 0.6.0
4862
4867
4863 2004-05-13 Fernando Perez <fperez@colorado.edu>
4868 2004-05-13 Fernando Perez <fperez@colorado.edu>
4864
4869
4865 * debian/: Added debian/ directory to CVS, so that debian support
4870 * debian/: Added debian/ directory to CVS, so that debian support
4866 is publicly accessible. The debian package is maintained by Jack
4871 is publicly accessible. The debian package is maintained by Jack
4867 Moffit <jack-AT-xiph.org>.
4872 Moffit <jack-AT-xiph.org>.
4868
4873
4869 * Documentation: included the notes about an ipython-based system
4874 * Documentation: included the notes about an ipython-based system
4870 shell (the hypothetical 'pysh') into the new_design.pdf document,
4875 shell (the hypothetical 'pysh') into the new_design.pdf document,
4871 so that these ideas get distributed to users along with the
4876 so that these ideas get distributed to users along with the
4872 official documentation.
4877 official documentation.
4873
4878
4874 2004-05-10 Fernando Perez <fperez@colorado.edu>
4879 2004-05-10 Fernando Perez <fperez@colorado.edu>
4875
4880
4876 * IPython/Logger.py (Logger.create_log): fix recently introduced
4881 * IPython/Logger.py (Logger.create_log): fix recently introduced
4877 bug (misindented line) where logstart would fail when not given an
4882 bug (misindented line) where logstart would fail when not given an
4878 explicit filename.
4883 explicit filename.
4879
4884
4880 2004-05-09 Fernando Perez <fperez@colorado.edu>
4885 2004-05-09 Fernando Perez <fperez@colorado.edu>
4881
4886
4882 * IPython/Magic.py (Magic.parse_options): skip system call when
4887 * IPython/Magic.py (Magic.parse_options): skip system call when
4883 there are no options to look for. Faster, cleaner for the common
4888 there are no options to look for. Faster, cleaner for the common
4884 case.
4889 case.
4885
4890
4886 * Documentation: many updates to the manual: describing Windows
4891 * Documentation: many updates to the manual: describing Windows
4887 support better, Gnuplot updates, credits, misc small stuff. Also
4892 support better, Gnuplot updates, credits, misc small stuff. Also
4888 updated the new_design doc a bit.
4893 updated the new_design doc a bit.
4889
4894
4890 2004-05-06 *** Released version 0.6.0.rc1
4895 2004-05-06 *** Released version 0.6.0.rc1
4891
4896
4892 2004-05-06 Fernando Perez <fperez@colorado.edu>
4897 2004-05-06 Fernando Perez <fperez@colorado.edu>
4893
4898
4894 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4899 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4895 operations to use the vastly more efficient list/''.join() method.
4900 operations to use the vastly more efficient list/''.join() method.
4896 (FormattedTB.text): Fix
4901 (FormattedTB.text): Fix
4897 http://www.scipy.net/roundup/ipython/issue12 - exception source
4902 http://www.scipy.net/roundup/ipython/issue12 - exception source
4898 extract not updated after reload. Thanks to Mike Salib
4903 extract not updated after reload. Thanks to Mike Salib
4899 <msalib-AT-mit.edu> for pinning the source of the problem.
4904 <msalib-AT-mit.edu> for pinning the source of the problem.
4900 Fortunately, the solution works inside ipython and doesn't require
4905 Fortunately, the solution works inside ipython and doesn't require
4901 any changes to python proper.
4906 any changes to python proper.
4902
4907
4903 * IPython/Magic.py (Magic.parse_options): Improved to process the
4908 * IPython/Magic.py (Magic.parse_options): Improved to process the
4904 argument list as a true shell would (by actually using the
4909 argument list as a true shell would (by actually using the
4905 underlying system shell). This way, all @magics automatically get
4910 underlying system shell). This way, all @magics automatically get
4906 shell expansion for variables. Thanks to a comment by Alex
4911 shell expansion for variables. Thanks to a comment by Alex
4907 Schmolck.
4912 Schmolck.
4908
4913
4909 2004-04-04 Fernando Perez <fperez@colorado.edu>
4914 2004-04-04 Fernando Perez <fperez@colorado.edu>
4910
4915
4911 * IPython/iplib.py (InteractiveShell.interact): Added a special
4916 * IPython/iplib.py (InteractiveShell.interact): Added a special
4912 trap for a debugger quit exception, which is basically impossible
4917 trap for a debugger quit exception, which is basically impossible
4913 to handle by normal mechanisms, given what pdb does to the stack.
4918 to handle by normal mechanisms, given what pdb does to the stack.
4914 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4919 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4915
4920
4916 2004-04-03 Fernando Perez <fperez@colorado.edu>
4921 2004-04-03 Fernando Perez <fperez@colorado.edu>
4917
4922
4918 * IPython/genutils.py (Term): Standardized the names of the Term
4923 * IPython/genutils.py (Term): Standardized the names of the Term
4919 class streams to cin/cout/cerr, following C++ naming conventions
4924 class streams to cin/cout/cerr, following C++ naming conventions
4920 (I can't use in/out/err because 'in' is not a valid attribute
4925 (I can't use in/out/err because 'in' is not a valid attribute
4921 name).
4926 name).
4922
4927
4923 * IPython/iplib.py (InteractiveShell.interact): don't increment
4928 * IPython/iplib.py (InteractiveShell.interact): don't increment
4924 the prompt if there's no user input. By Daniel 'Dang' Griffith
4929 the prompt if there's no user input. By Daniel 'Dang' Griffith
4925 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4930 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4926 Francois Pinard.
4931 Francois Pinard.
4927
4932
4928 2004-04-02 Fernando Perez <fperez@colorado.edu>
4933 2004-04-02 Fernando Perez <fperez@colorado.edu>
4929
4934
4930 * IPython/genutils.py (Stream.__init__): Modified to survive at
4935 * IPython/genutils.py (Stream.__init__): Modified to survive at
4931 least importing in contexts where stdin/out/err aren't true file
4936 least importing in contexts where stdin/out/err aren't true file
4932 objects, such as PyCrust (they lack fileno() and mode). However,
4937 objects, such as PyCrust (they lack fileno() and mode). However,
4933 the recovery facilities which rely on these things existing will
4938 the recovery facilities which rely on these things existing will
4934 not work.
4939 not work.
4935
4940
4936 2004-04-01 Fernando Perez <fperez@colorado.edu>
4941 2004-04-01 Fernando Perez <fperez@colorado.edu>
4937
4942
4938 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4943 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4939 use the new getoutputerror() function, so it properly
4944 use the new getoutputerror() function, so it properly
4940 distinguishes stdout/err.
4945 distinguishes stdout/err.
4941
4946
4942 * IPython/genutils.py (getoutputerror): added a function to
4947 * IPython/genutils.py (getoutputerror): added a function to
4943 capture separately the standard output and error of a command.
4948 capture separately the standard output and error of a command.
4944 After a comment from dang on the mailing lists. This code is
4949 After a comment from dang on the mailing lists. This code is
4945 basically a modified version of commands.getstatusoutput(), from
4950 basically a modified version of commands.getstatusoutput(), from
4946 the standard library.
4951 the standard library.
4947
4952
4948 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4953 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4949 '!!' as a special syntax (shorthand) to access @sx.
4954 '!!' as a special syntax (shorthand) to access @sx.
4950
4955
4951 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4956 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4952 command and return its output as a list split on '\n'.
4957 command and return its output as a list split on '\n'.
4953
4958
4954 2004-03-31 Fernando Perez <fperez@colorado.edu>
4959 2004-03-31 Fernando Perez <fperez@colorado.edu>
4955
4960
4956 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4961 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4957 method to dictionaries used as FakeModule instances if they lack
4962 method to dictionaries used as FakeModule instances if they lack
4958 it. At least pydoc in python2.3 breaks for runtime-defined
4963 it. At least pydoc in python2.3 breaks for runtime-defined
4959 functions without this hack. At some point I need to _really_
4964 functions without this hack. At some point I need to _really_
4960 understand what FakeModule is doing, because it's a gross hack.
4965 understand what FakeModule is doing, because it's a gross hack.
4961 But it solves Arnd's problem for now...
4966 But it solves Arnd's problem for now...
4962
4967
4963 2004-02-27 Fernando Perez <fperez@colorado.edu>
4968 2004-02-27 Fernando Perez <fperez@colorado.edu>
4964
4969
4965 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4970 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4966 mode would behave erratically. Also increased the number of
4971 mode would behave erratically. Also increased the number of
4967 possible logs in rotate mod to 999. Thanks to Rod Holland
4972 possible logs in rotate mod to 999. Thanks to Rod Holland
4968 <rhh@StructureLABS.com> for the report and fixes.
4973 <rhh@StructureLABS.com> for the report and fixes.
4969
4974
4970 2004-02-26 Fernando Perez <fperez@colorado.edu>
4975 2004-02-26 Fernando Perez <fperez@colorado.edu>
4971
4976
4972 * IPython/genutils.py (page): Check that the curses module really
4977 * IPython/genutils.py (page): Check that the curses module really
4973 has the initscr attribute before trying to use it. For some
4978 has the initscr attribute before trying to use it. For some
4974 reason, the Solaris curses module is missing this. I think this
4979 reason, the Solaris curses module is missing this. I think this
4975 should be considered a Solaris python bug, but I'm not sure.
4980 should be considered a Solaris python bug, but I'm not sure.
4976
4981
4977 2004-01-17 Fernando Perez <fperez@colorado.edu>
4982 2004-01-17 Fernando Perez <fperez@colorado.edu>
4978
4983
4979 * IPython/genutils.py (Stream.__init__): Changes to try to make
4984 * IPython/genutils.py (Stream.__init__): Changes to try to make
4980 ipython robust against stdin/out/err being closed by the user.
4985 ipython robust against stdin/out/err being closed by the user.
4981 This is 'user error' (and blocks a normal python session, at least
4986 This is 'user error' (and blocks a normal python session, at least
4982 the stdout case). However, Ipython should be able to survive such
4987 the stdout case). However, Ipython should be able to survive such
4983 instances of abuse as gracefully as possible. To simplify the
4988 instances of abuse as gracefully as possible. To simplify the
4984 coding and maintain compatibility with Gary Bishop's Term
4989 coding and maintain compatibility with Gary Bishop's Term
4985 contributions, I've made use of classmethods for this. I think
4990 contributions, I've made use of classmethods for this. I think
4986 this introduces a dependency on python 2.2.
4991 this introduces a dependency on python 2.2.
4987
4992
4988 2004-01-13 Fernando Perez <fperez@colorado.edu>
4993 2004-01-13 Fernando Perez <fperez@colorado.edu>
4989
4994
4990 * IPython/numutils.py (exp_safe): simplified the code a bit and
4995 * IPython/numutils.py (exp_safe): simplified the code a bit and
4991 removed the need for importing the kinds module altogether.
4996 removed the need for importing the kinds module altogether.
4992
4997
4993 2004-01-06 Fernando Perez <fperez@colorado.edu>
4998 2004-01-06 Fernando Perez <fperez@colorado.edu>
4994
4999
4995 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
5000 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4996 a magic function instead, after some community feedback. No
5001 a magic function instead, after some community feedback. No
4997 special syntax will exist for it, but its name is deliberately
5002 special syntax will exist for it, but its name is deliberately
4998 very short.
5003 very short.
4999
5004
5000 2003-12-20 Fernando Perez <fperez@colorado.edu>
5005 2003-12-20 Fernando Perez <fperez@colorado.edu>
5001
5006
5002 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
5007 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
5003 new functionality, to automagically assign the result of a shell
5008 new functionality, to automagically assign the result of a shell
5004 command to a variable. I'll solicit some community feedback on
5009 command to a variable. I'll solicit some community feedback on
5005 this before making it permanent.
5010 this before making it permanent.
5006
5011
5007 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
5012 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
5008 requested about callables for which inspect couldn't obtain a
5013 requested about callables for which inspect couldn't obtain a
5009 proper argspec. Thanks to a crash report sent by Etienne
5014 proper argspec. Thanks to a crash report sent by Etienne
5010 Posthumus <etienne-AT-apple01.cs.vu.nl>.
5015 Posthumus <etienne-AT-apple01.cs.vu.nl>.
5011
5016
5012 2003-12-09 Fernando Perez <fperez@colorado.edu>
5017 2003-12-09 Fernando Perez <fperez@colorado.edu>
5013
5018
5014 * IPython/genutils.py (page): patch for the pager to work across
5019 * IPython/genutils.py (page): patch for the pager to work across
5015 various versions of Windows. By Gary Bishop.
5020 various versions of Windows. By Gary Bishop.
5016
5021
5017 2003-12-04 Fernando Perez <fperez@colorado.edu>
5022 2003-12-04 Fernando Perez <fperez@colorado.edu>
5018
5023
5019 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
5024 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
5020 Gnuplot.py version 1.7, whose internal names changed quite a bit.
5025 Gnuplot.py version 1.7, whose internal names changed quite a bit.
5021 While I tested this and it looks ok, there may still be corner
5026 While I tested this and it looks ok, there may still be corner
5022 cases I've missed.
5027 cases I've missed.
5023
5028
5024 2003-12-01 Fernando Perez <fperez@colorado.edu>
5029 2003-12-01 Fernando Perez <fperez@colorado.edu>
5025
5030
5026 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
5031 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
5027 where a line like 'p,q=1,2' would fail because the automagic
5032 where a line like 'p,q=1,2' would fail because the automagic
5028 system would be triggered for @p.
5033 system would be triggered for @p.
5029
5034
5030 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
5035 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
5031 cleanups, code unmodified.
5036 cleanups, code unmodified.
5032
5037
5033 * IPython/genutils.py (Term): added a class for IPython to handle
5038 * IPython/genutils.py (Term): added a class for IPython to handle
5034 output. In most cases it will just be a proxy for stdout/err, but
5039 output. In most cases it will just be a proxy for stdout/err, but
5035 having this allows modifications to be made for some platforms,
5040 having this allows modifications to be made for some platforms,
5036 such as handling color escapes under Windows. All of this code
5041 such as handling color escapes under Windows. All of this code
5037 was contributed by Gary Bishop, with minor modifications by me.
5042 was contributed by Gary Bishop, with minor modifications by me.
5038 The actual changes affect many files.
5043 The actual changes affect many files.
5039
5044
5040 2003-11-30 Fernando Perez <fperez@colorado.edu>
5045 2003-11-30 Fernando Perez <fperez@colorado.edu>
5041
5046
5042 * IPython/iplib.py (file_matches): new completion code, courtesy
5047 * IPython/iplib.py (file_matches): new completion code, courtesy
5043 of Jeff Collins. This enables filename completion again under
5048 of Jeff Collins. This enables filename completion again under
5044 python 2.3, which disabled it at the C level.
5049 python 2.3, which disabled it at the C level.
5045
5050
5046 2003-11-11 Fernando Perez <fperez@colorado.edu>
5051 2003-11-11 Fernando Perez <fperez@colorado.edu>
5047
5052
5048 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
5053 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
5049 for Numeric.array(map(...)), but often convenient.
5054 for Numeric.array(map(...)), but often convenient.
5050
5055
5051 2003-11-05 Fernando Perez <fperez@colorado.edu>
5056 2003-11-05 Fernando Perez <fperez@colorado.edu>
5052
5057
5053 * IPython/numutils.py (frange): Changed a call from int() to
5058 * IPython/numutils.py (frange): Changed a call from int() to
5054 int(round()) to prevent a problem reported with arange() in the
5059 int(round()) to prevent a problem reported with arange() in the
5055 numpy list.
5060 numpy list.
5056
5061
5057 2003-10-06 Fernando Perez <fperez@colorado.edu>
5062 2003-10-06 Fernando Perez <fperez@colorado.edu>
5058
5063
5059 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
5064 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
5060 prevent crashes if sys lacks an argv attribute (it happens with
5065 prevent crashes if sys lacks an argv attribute (it happens with
5061 embedded interpreters which build a bare-bones sys module).
5066 embedded interpreters which build a bare-bones sys module).
5062 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
5067 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
5063
5068
5064 2003-09-24 Fernando Perez <fperez@colorado.edu>
5069 2003-09-24 Fernando Perez <fperez@colorado.edu>
5065
5070
5066 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
5071 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
5067 to protect against poorly written user objects where __getattr__
5072 to protect against poorly written user objects where __getattr__
5068 raises exceptions other than AttributeError. Thanks to a bug
5073 raises exceptions other than AttributeError. Thanks to a bug
5069 report by Oliver Sander <osander-AT-gmx.de>.
5074 report by Oliver Sander <osander-AT-gmx.de>.
5070
5075
5071 * IPython/FakeModule.py (FakeModule.__repr__): this method was
5076 * IPython/FakeModule.py (FakeModule.__repr__): this method was
5072 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
5077 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
5073
5078
5074 2003-09-09 Fernando Perez <fperez@colorado.edu>
5079 2003-09-09 Fernando Perez <fperez@colorado.edu>
5075
5080
5076 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
5081 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
5077 unpacking a list whith a callable as first element would
5082 unpacking a list whith a callable as first element would
5078 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
5083 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
5079 Collins.
5084 Collins.
5080
5085
5081 2003-08-25 *** Released version 0.5.0
5086 2003-08-25 *** Released version 0.5.0
5082
5087
5083 2003-08-22 Fernando Perez <fperez@colorado.edu>
5088 2003-08-22 Fernando Perez <fperez@colorado.edu>
5084
5089
5085 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
5090 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
5086 improperly defined user exceptions. Thanks to feedback from Mark
5091 improperly defined user exceptions. Thanks to feedback from Mark
5087 Russell <mrussell-AT-verio.net>.
5092 Russell <mrussell-AT-verio.net>.
5088
5093
5089 2003-08-20 Fernando Perez <fperez@colorado.edu>
5094 2003-08-20 Fernando Perez <fperez@colorado.edu>
5090
5095
5091 * IPython/OInspect.py (Inspector.pinfo): changed String Form
5096 * IPython/OInspect.py (Inspector.pinfo): changed String Form
5092 printing so that it would print multi-line string forms starting
5097 printing so that it would print multi-line string forms starting
5093 with a new line. This way the formatting is better respected for
5098 with a new line. This way the formatting is better respected for
5094 objects which work hard to make nice string forms.
5099 objects which work hard to make nice string forms.
5095
5100
5096 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
5101 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
5097 autocall would overtake data access for objects with both
5102 autocall would overtake data access for objects with both
5098 __getitem__ and __call__.
5103 __getitem__ and __call__.
5099
5104
5100 2003-08-19 *** Released version 0.5.0-rc1
5105 2003-08-19 *** Released version 0.5.0-rc1
5101
5106
5102 2003-08-19 Fernando Perez <fperez@colorado.edu>
5107 2003-08-19 Fernando Perez <fperez@colorado.edu>
5103
5108
5104 * IPython/deep_reload.py (load_tail): single tiny change here
5109 * IPython/deep_reload.py (load_tail): single tiny change here
5105 seems to fix the long-standing bug of dreload() failing to work
5110 seems to fix the long-standing bug of dreload() failing to work
5106 for dotted names. But this module is pretty tricky, so I may have
5111 for dotted names. But this module is pretty tricky, so I may have
5107 missed some subtlety. Needs more testing!.
5112 missed some subtlety. Needs more testing!.
5108
5113
5109 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
5114 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
5110 exceptions which have badly implemented __str__ methods.
5115 exceptions which have badly implemented __str__ methods.
5111 (VerboseTB.text): harden against inspect.getinnerframes crashing,
5116 (VerboseTB.text): harden against inspect.getinnerframes crashing,
5112 which I've been getting reports about from Python 2.3 users. I
5117 which I've been getting reports about from Python 2.3 users. I
5113 wish I had a simple test case to reproduce the problem, so I could
5118 wish I had a simple test case to reproduce the problem, so I could
5114 either write a cleaner workaround or file a bug report if
5119 either write a cleaner workaround or file a bug report if
5115 necessary.
5120 necessary.
5116
5121
5117 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
5122 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
5118 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
5123 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
5119 a bug report by Tjabo Kloppenburg.
5124 a bug report by Tjabo Kloppenburg.
5120
5125
5121 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
5126 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
5122 crashes. Wrapped the pdb call in a blanket try/except, since pdb
5127 crashes. Wrapped the pdb call in a blanket try/except, since pdb
5123 seems rather unstable. Thanks to a bug report by Tjabo
5128 seems rather unstable. Thanks to a bug report by Tjabo
5124 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
5129 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
5125
5130
5126 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
5131 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
5127 this out soon because of the critical fixes in the inner loop for
5132 this out soon because of the critical fixes in the inner loop for
5128 generators.
5133 generators.
5129
5134
5130 * IPython/Magic.py (Magic.getargspec): removed. This (and
5135 * IPython/Magic.py (Magic.getargspec): removed. This (and
5131 _get_def) have been obsoleted by OInspect for a long time, I
5136 _get_def) have been obsoleted by OInspect for a long time, I
5132 hadn't noticed that they were dead code.
5137 hadn't noticed that they were dead code.
5133 (Magic._ofind): restored _ofind functionality for a few literals
5138 (Magic._ofind): restored _ofind functionality for a few literals
5134 (those in ["''",'""','[]','{}','()']). But it won't work anymore
5139 (those in ["''",'""','[]','{}','()']). But it won't work anymore
5135 for things like "hello".capitalize?, since that would require a
5140 for things like "hello".capitalize?, since that would require a
5136 potentially dangerous eval() again.
5141 potentially dangerous eval() again.
5137
5142
5138 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
5143 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
5139 logic a bit more to clean up the escapes handling and minimize the
5144 logic a bit more to clean up the escapes handling and minimize the
5140 use of _ofind to only necessary cases. The interactive 'feel' of
5145 use of _ofind to only necessary cases. The interactive 'feel' of
5141 IPython should have improved quite a bit with the changes in
5146 IPython should have improved quite a bit with the changes in
5142 _prefilter and _ofind (besides being far safer than before).
5147 _prefilter and _ofind (besides being far safer than before).
5143
5148
5144 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
5149 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
5145 obscure, never reported). Edit would fail to find the object to
5150 obscure, never reported). Edit would fail to find the object to
5146 edit under some circumstances.
5151 edit under some circumstances.
5147 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
5152 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
5148 which were causing double-calling of generators. Those eval calls
5153 which were causing double-calling of generators. Those eval calls
5149 were _very_ dangerous, since code with side effects could be
5154 were _very_ dangerous, since code with side effects could be
5150 triggered. As they say, 'eval is evil'... These were the
5155 triggered. As they say, 'eval is evil'... These were the
5151 nastiest evals in IPython. Besides, _ofind is now far simpler,
5156 nastiest evals in IPython. Besides, _ofind is now far simpler,
5152 and it should also be quite a bit faster. Its use of inspect is
5157 and it should also be quite a bit faster. Its use of inspect is
5153 also safer, so perhaps some of the inspect-related crashes I've
5158 also safer, so perhaps some of the inspect-related crashes I've
5154 seen lately with Python 2.3 might be taken care of. That will
5159 seen lately with Python 2.3 might be taken care of. That will
5155 need more testing.
5160 need more testing.
5156
5161
5157 2003-08-17 Fernando Perez <fperez@colorado.edu>
5162 2003-08-17 Fernando Perez <fperez@colorado.edu>
5158
5163
5159 * IPython/iplib.py (InteractiveShell._prefilter): significant
5164 * IPython/iplib.py (InteractiveShell._prefilter): significant
5160 simplifications to the logic for handling user escapes. Faster
5165 simplifications to the logic for handling user escapes. Faster
5161 and simpler code.
5166 and simpler code.
5162
5167
5163 2003-08-14 Fernando Perez <fperez@colorado.edu>
5168 2003-08-14 Fernando Perez <fperez@colorado.edu>
5164
5169
5165 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
5170 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
5166 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
5171 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
5167 but it should be quite a bit faster. And the recursive version
5172 but it should be quite a bit faster. And the recursive version
5168 generated O(log N) intermediate storage for all rank>1 arrays,
5173 generated O(log N) intermediate storage for all rank>1 arrays,
5169 even if they were contiguous.
5174 even if they were contiguous.
5170 (l1norm): Added this function.
5175 (l1norm): Added this function.
5171 (norm): Added this function for arbitrary norms (including
5176 (norm): Added this function for arbitrary norms (including
5172 l-infinity). l1 and l2 are still special cases for convenience
5177 l-infinity). l1 and l2 are still special cases for convenience
5173 and speed.
5178 and speed.
5174
5179
5175 2003-08-03 Fernando Perez <fperez@colorado.edu>
5180 2003-08-03 Fernando Perez <fperez@colorado.edu>
5176
5181
5177 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
5182 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
5178 exceptions, which now raise PendingDeprecationWarnings in Python
5183 exceptions, which now raise PendingDeprecationWarnings in Python
5179 2.3. There were some in Magic and some in Gnuplot2.
5184 2.3. There were some in Magic and some in Gnuplot2.
5180
5185
5181 2003-06-30 Fernando Perez <fperez@colorado.edu>
5186 2003-06-30 Fernando Perez <fperez@colorado.edu>
5182
5187
5183 * IPython/genutils.py (page): modified to call curses only for
5188 * IPython/genutils.py (page): modified to call curses only for
5184 terminals where TERM=='xterm'. After problems under many other
5189 terminals where TERM=='xterm'. After problems under many other
5185 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
5190 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
5186
5191
5187 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
5192 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
5188 would be triggered when readline was absent. This was just an old
5193 would be triggered when readline was absent. This was just an old
5189 debugging statement I'd forgotten to take out.
5194 debugging statement I'd forgotten to take out.
5190
5195
5191 2003-06-20 Fernando Perez <fperez@colorado.edu>
5196 2003-06-20 Fernando Perez <fperez@colorado.edu>
5192
5197
5193 * IPython/genutils.py (clock): modified to return only user time
5198 * IPython/genutils.py (clock): modified to return only user time
5194 (not counting system time), after a discussion on scipy. While
5199 (not counting system time), after a discussion on scipy. While
5195 system time may be a useful quantity occasionally, it may much
5200 system time may be a useful quantity occasionally, it may much
5196 more easily be skewed by occasional swapping or other similar
5201 more easily be skewed by occasional swapping or other similar
5197 activity.
5202 activity.
5198
5203
5199 2003-06-05 Fernando Perez <fperez@colorado.edu>
5204 2003-06-05 Fernando Perez <fperez@colorado.edu>
5200
5205
5201 * IPython/numutils.py (identity): new function, for building
5206 * IPython/numutils.py (identity): new function, for building
5202 arbitrary rank Kronecker deltas (mostly backwards compatible with
5207 arbitrary rank Kronecker deltas (mostly backwards compatible with
5203 Numeric.identity)
5208 Numeric.identity)
5204
5209
5205 2003-06-03 Fernando Perez <fperez@colorado.edu>
5210 2003-06-03 Fernando Perez <fperez@colorado.edu>
5206
5211
5207 * IPython/iplib.py (InteractiveShell.handle_magic): protect
5212 * IPython/iplib.py (InteractiveShell.handle_magic): protect
5208 arguments passed to magics with spaces, to allow trailing '\' to
5213 arguments passed to magics with spaces, to allow trailing '\' to
5209 work normally (mainly for Windows users).
5214 work normally (mainly for Windows users).
5210
5215
5211 2003-05-29 Fernando Perez <fperez@colorado.edu>
5216 2003-05-29 Fernando Perez <fperez@colorado.edu>
5212
5217
5213 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
5218 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
5214 instead of pydoc.help. This fixes a bizarre behavior where
5219 instead of pydoc.help. This fixes a bizarre behavior where
5215 printing '%s' % locals() would trigger the help system. Now
5220 printing '%s' % locals() would trigger the help system. Now
5216 ipython behaves like normal python does.
5221 ipython behaves like normal python does.
5217
5222
5218 Note that if one does 'from pydoc import help', the bizarre
5223 Note that if one does 'from pydoc import help', the bizarre
5219 behavior returns, but this will also happen in normal python, so
5224 behavior returns, but this will also happen in normal python, so
5220 it's not an ipython bug anymore (it has to do with how pydoc.help
5225 it's not an ipython bug anymore (it has to do with how pydoc.help
5221 is implemented).
5226 is implemented).
5222
5227
5223 2003-05-22 Fernando Perez <fperez@colorado.edu>
5228 2003-05-22 Fernando Perez <fperez@colorado.edu>
5224
5229
5225 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
5230 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
5226 return [] instead of None when nothing matches, also match to end
5231 return [] instead of None when nothing matches, also match to end
5227 of line. Patch by Gary Bishop.
5232 of line. Patch by Gary Bishop.
5228
5233
5229 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
5234 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
5230 protection as before, for files passed on the command line. This
5235 protection as before, for files passed on the command line. This
5231 prevents the CrashHandler from kicking in if user files call into
5236 prevents the CrashHandler from kicking in if user files call into
5232 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
5237 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
5233 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
5238 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
5234
5239
5235 2003-05-20 *** Released version 0.4.0
5240 2003-05-20 *** Released version 0.4.0
5236
5241
5237 2003-05-20 Fernando Perez <fperez@colorado.edu>
5242 2003-05-20 Fernando Perez <fperez@colorado.edu>
5238
5243
5239 * setup.py: added support for manpages. It's a bit hackish b/c of
5244 * setup.py: added support for manpages. It's a bit hackish b/c of
5240 a bug in the way the bdist_rpm distutils target handles gzipped
5245 a bug in the way the bdist_rpm distutils target handles gzipped
5241 manpages, but it works. After a patch by Jack.
5246 manpages, but it works. After a patch by Jack.
5242
5247
5243 2003-05-19 Fernando Perez <fperez@colorado.edu>
5248 2003-05-19 Fernando Perez <fperez@colorado.edu>
5244
5249
5245 * IPython/numutils.py: added a mockup of the kinds module, since
5250 * IPython/numutils.py: added a mockup of the kinds module, since
5246 it was recently removed from Numeric. This way, numutils will
5251 it was recently removed from Numeric. This way, numutils will
5247 work for all users even if they are missing kinds.
5252 work for all users even if they are missing kinds.
5248
5253
5249 * IPython/Magic.py (Magic._ofind): Harden against an inspect
5254 * IPython/Magic.py (Magic._ofind): Harden against an inspect
5250 failure, which can occur with SWIG-wrapped extensions. After a
5255 failure, which can occur with SWIG-wrapped extensions. After a
5251 crash report from Prabhu.
5256 crash report from Prabhu.
5252
5257
5253 2003-05-16 Fernando Perez <fperez@colorado.edu>
5258 2003-05-16 Fernando Perez <fperez@colorado.edu>
5254
5259
5255 * IPython/iplib.py (InteractiveShell.excepthook): New method to
5260 * IPython/iplib.py (InteractiveShell.excepthook): New method to
5256 protect ipython from user code which may call directly
5261 protect ipython from user code which may call directly
5257 sys.excepthook (this looks like an ipython crash to the user, even
5262 sys.excepthook (this looks like an ipython crash to the user, even
5258 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5263 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5259 This is especially important to help users of WxWindows, but may
5264 This is especially important to help users of WxWindows, but may
5260 also be useful in other cases.
5265 also be useful in other cases.
5261
5266
5262 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
5267 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
5263 an optional tb_offset to be specified, and to preserve exception
5268 an optional tb_offset to be specified, and to preserve exception
5264 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5269 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5265
5270
5266 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
5271 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
5267
5272
5268 2003-05-15 Fernando Perez <fperez@colorado.edu>
5273 2003-05-15 Fernando Perez <fperez@colorado.edu>
5269
5274
5270 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
5275 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
5271 installing for a new user under Windows.
5276 installing for a new user under Windows.
5272
5277
5273 2003-05-12 Fernando Perez <fperez@colorado.edu>
5278 2003-05-12 Fernando Perez <fperez@colorado.edu>
5274
5279
5275 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
5280 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
5276 handler for Emacs comint-based lines. Currently it doesn't do
5281 handler for Emacs comint-based lines. Currently it doesn't do
5277 much (but importantly, it doesn't update the history cache). In
5282 much (but importantly, it doesn't update the history cache). In
5278 the future it may be expanded if Alex needs more functionality
5283 the future it may be expanded if Alex needs more functionality
5279 there.
5284 there.
5280
5285
5281 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
5286 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
5282 info to crash reports.
5287 info to crash reports.
5283
5288
5284 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
5289 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
5285 just like Python's -c. Also fixed crash with invalid -color
5290 just like Python's -c. Also fixed crash with invalid -color
5286 option value at startup. Thanks to Will French
5291 option value at startup. Thanks to Will French
5287 <wfrench-AT-bestweb.net> for the bug report.
5292 <wfrench-AT-bestweb.net> for the bug report.
5288
5293
5289 2003-05-09 Fernando Perez <fperez@colorado.edu>
5294 2003-05-09 Fernando Perez <fperez@colorado.edu>
5290
5295
5291 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
5296 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
5292 to EvalDict (it's a mapping, after all) and simplified its code
5297 to EvalDict (it's a mapping, after all) and simplified its code
5293 quite a bit, after a nice discussion on c.l.py where Gustavo
5298 quite a bit, after a nice discussion on c.l.py where Gustavo
5294 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
5299 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
5295
5300
5296 2003-04-30 Fernando Perez <fperez@colorado.edu>
5301 2003-04-30 Fernando Perez <fperez@colorado.edu>
5297
5302
5298 * IPython/genutils.py (timings_out): modified it to reduce its
5303 * IPython/genutils.py (timings_out): modified it to reduce its
5299 overhead in the common reps==1 case.
5304 overhead in the common reps==1 case.
5300
5305
5301 2003-04-29 Fernando Perez <fperez@colorado.edu>
5306 2003-04-29 Fernando Perez <fperez@colorado.edu>
5302
5307
5303 * IPython/genutils.py (timings_out): Modified to use the resource
5308 * IPython/genutils.py (timings_out): Modified to use the resource
5304 module, which avoids the wraparound problems of time.clock().
5309 module, which avoids the wraparound problems of time.clock().
5305
5310
5306 2003-04-17 *** Released version 0.2.15pre4
5311 2003-04-17 *** Released version 0.2.15pre4
5307
5312
5308 2003-04-17 Fernando Perez <fperez@colorado.edu>
5313 2003-04-17 Fernando Perez <fperez@colorado.edu>
5309
5314
5310 * setup.py (scriptfiles): Split windows-specific stuff over to a
5315 * setup.py (scriptfiles): Split windows-specific stuff over to a
5311 separate file, in an attempt to have a Windows GUI installer.
5316 separate file, in an attempt to have a Windows GUI installer.
5312 That didn't work, but part of the groundwork is done.
5317 That didn't work, but part of the groundwork is done.
5313
5318
5314 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
5319 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
5315 indent/unindent with 4 spaces. Particularly useful in combination
5320 indent/unindent with 4 spaces. Particularly useful in combination
5316 with the new auto-indent option.
5321 with the new auto-indent option.
5317
5322
5318 2003-04-16 Fernando Perez <fperez@colorado.edu>
5323 2003-04-16 Fernando Perez <fperez@colorado.edu>
5319
5324
5320 * IPython/Magic.py: various replacements of self.rc for
5325 * IPython/Magic.py: various replacements of self.rc for
5321 self.shell.rc. A lot more remains to be done to fully disentangle
5326 self.shell.rc. A lot more remains to be done to fully disentangle
5322 this class from the main Shell class.
5327 this class from the main Shell class.
5323
5328
5324 * IPython/GnuplotRuntime.py: added checks for mouse support so
5329 * IPython/GnuplotRuntime.py: added checks for mouse support so
5325 that we don't try to enable it if the current gnuplot doesn't
5330 that we don't try to enable it if the current gnuplot doesn't
5326 really support it. Also added checks so that we don't try to
5331 really support it. Also added checks so that we don't try to
5327 enable persist under Windows (where Gnuplot doesn't recognize the
5332 enable persist under Windows (where Gnuplot doesn't recognize the
5328 option).
5333 option).
5329
5334
5330 * IPython/iplib.py (InteractiveShell.interact): Added optional
5335 * IPython/iplib.py (InteractiveShell.interact): Added optional
5331 auto-indenting code, after a patch by King C. Shu
5336 auto-indenting code, after a patch by King C. Shu
5332 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
5337 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
5333 get along well with pasting indented code. If I ever figure out
5338 get along well with pasting indented code. If I ever figure out
5334 how to make that part go well, it will become on by default.
5339 how to make that part go well, it will become on by default.
5335
5340
5336 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
5341 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
5337 crash ipython if there was an unmatched '%' in the user's prompt
5342 crash ipython if there was an unmatched '%' in the user's prompt
5338 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5343 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5339
5344
5340 * IPython/iplib.py (InteractiveShell.interact): removed the
5345 * IPython/iplib.py (InteractiveShell.interact): removed the
5341 ability to ask the user whether he wants to crash or not at the
5346 ability to ask the user whether he wants to crash or not at the
5342 'last line' exception handler. Calling functions at that point
5347 'last line' exception handler. Calling functions at that point
5343 changes the stack, and the error reports would have incorrect
5348 changes the stack, and the error reports would have incorrect
5344 tracebacks.
5349 tracebacks.
5345
5350
5346 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
5351 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
5347 pass through a peger a pretty-printed form of any object. After a
5352 pass through a peger a pretty-printed form of any object. After a
5348 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
5353 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
5349
5354
5350 2003-04-14 Fernando Perez <fperez@colorado.edu>
5355 2003-04-14 Fernando Perez <fperez@colorado.edu>
5351
5356
5352 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
5357 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
5353 all files in ~ would be modified at first install (instead of
5358 all files in ~ would be modified at first install (instead of
5354 ~/.ipython). This could be potentially disastrous, as the
5359 ~/.ipython). This could be potentially disastrous, as the
5355 modification (make line-endings native) could damage binary files.
5360 modification (make line-endings native) could damage binary files.
5356
5361
5357 2003-04-10 Fernando Perez <fperez@colorado.edu>
5362 2003-04-10 Fernando Perez <fperez@colorado.edu>
5358
5363
5359 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
5364 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
5360 handle only lines which are invalid python. This now means that
5365 handle only lines which are invalid python. This now means that
5361 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
5366 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
5362 for the bug report.
5367 for the bug report.
5363
5368
5364 2003-04-01 Fernando Perez <fperez@colorado.edu>
5369 2003-04-01 Fernando Perez <fperez@colorado.edu>
5365
5370
5366 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
5371 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
5367 where failing to set sys.last_traceback would crash pdb.pm().
5372 where failing to set sys.last_traceback would crash pdb.pm().
5368 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
5373 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
5369 report.
5374 report.
5370
5375
5371 2003-03-25 Fernando Perez <fperez@colorado.edu>
5376 2003-03-25 Fernando Perez <fperez@colorado.edu>
5372
5377
5373 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
5378 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
5374 before printing it (it had a lot of spurious blank lines at the
5379 before printing it (it had a lot of spurious blank lines at the
5375 end).
5380 end).
5376
5381
5377 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
5382 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
5378 output would be sent 21 times! Obviously people don't use this
5383 output would be sent 21 times! Obviously people don't use this
5379 too often, or I would have heard about it.
5384 too often, or I would have heard about it.
5380
5385
5381 2003-03-24 Fernando Perez <fperez@colorado.edu>
5386 2003-03-24 Fernando Perez <fperez@colorado.edu>
5382
5387
5383 * setup.py (scriptfiles): renamed the data_files parameter from
5388 * setup.py (scriptfiles): renamed the data_files parameter from
5384 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
5389 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
5385 for the patch.
5390 for the patch.
5386
5391
5387 2003-03-20 Fernando Perez <fperez@colorado.edu>
5392 2003-03-20 Fernando Perez <fperez@colorado.edu>
5388
5393
5389 * IPython/genutils.py (error): added error() and fatal()
5394 * IPython/genutils.py (error): added error() and fatal()
5390 functions.
5395 functions.
5391
5396
5392 2003-03-18 *** Released version 0.2.15pre3
5397 2003-03-18 *** Released version 0.2.15pre3
5393
5398
5394 2003-03-18 Fernando Perez <fperez@colorado.edu>
5399 2003-03-18 Fernando Perez <fperez@colorado.edu>
5395
5400
5396 * setupext/install_data_ext.py
5401 * setupext/install_data_ext.py
5397 (install_data_ext.initialize_options): Class contributed by Jack
5402 (install_data_ext.initialize_options): Class contributed by Jack
5398 Moffit for fixing the old distutils hack. He is sending this to
5403 Moffit for fixing the old distutils hack. He is sending this to
5399 the distutils folks so in the future we may not need it as a
5404 the distutils folks so in the future we may not need it as a
5400 private fix.
5405 private fix.
5401
5406
5402 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5407 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5403 changes for Debian packaging. See his patch for full details.
5408 changes for Debian packaging. See his patch for full details.
5404 The old distutils hack of making the ipythonrc* files carry a
5409 The old distutils hack of making the ipythonrc* files carry a
5405 bogus .py extension is gone, at last. Examples were moved to a
5410 bogus .py extension is gone, at last. Examples were moved to a
5406 separate subdir under doc/, and the separate executable scripts
5411 separate subdir under doc/, and the separate executable scripts
5407 now live in their own directory. Overall a great cleanup. The
5412 now live in their own directory. Overall a great cleanup. The
5408 manual was updated to use the new files, and setup.py has been
5413 manual was updated to use the new files, and setup.py has been
5409 fixed for this setup.
5414 fixed for this setup.
5410
5415
5411 * IPython/PyColorize.py (Parser.usage): made non-executable and
5416 * IPython/PyColorize.py (Parser.usage): made non-executable and
5412 created a pycolor wrapper around it to be included as a script.
5417 created a pycolor wrapper around it to be included as a script.
5413
5418
5414 2003-03-12 *** Released version 0.2.15pre2
5419 2003-03-12 *** Released version 0.2.15pre2
5415
5420
5416 2003-03-12 Fernando Perez <fperez@colorado.edu>
5421 2003-03-12 Fernando Perez <fperez@colorado.edu>
5417
5422
5418 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5423 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5419 long-standing problem with garbage characters in some terminals.
5424 long-standing problem with garbage characters in some terminals.
5420 The issue was really that the \001 and \002 escapes must _only_ be
5425 The issue was really that the \001 and \002 escapes must _only_ be
5421 passed to input prompts (which call readline), but _never_ to
5426 passed to input prompts (which call readline), but _never_ to
5422 normal text to be printed on screen. I changed ColorANSI to have
5427 normal text to be printed on screen. I changed ColorANSI to have
5423 two classes: TermColors and InputTermColors, each with the
5428 two classes: TermColors and InputTermColors, each with the
5424 appropriate escapes for input prompts or normal text. The code in
5429 appropriate escapes for input prompts or normal text. The code in
5425 Prompts.py got slightly more complicated, but this very old and
5430 Prompts.py got slightly more complicated, but this very old and
5426 annoying bug is finally fixed.
5431 annoying bug is finally fixed.
5427
5432
5428 All the credit for nailing down the real origin of this problem
5433 All the credit for nailing down the real origin of this problem
5429 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5434 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5430 *Many* thanks to him for spending quite a bit of effort on this.
5435 *Many* thanks to him for spending quite a bit of effort on this.
5431
5436
5432 2003-03-05 *** Released version 0.2.15pre1
5437 2003-03-05 *** Released version 0.2.15pre1
5433
5438
5434 2003-03-03 Fernando Perez <fperez@colorado.edu>
5439 2003-03-03 Fernando Perez <fperez@colorado.edu>
5435
5440
5436 * IPython/FakeModule.py: Moved the former _FakeModule to a
5441 * IPython/FakeModule.py: Moved the former _FakeModule to a
5437 separate file, because it's also needed by Magic (to fix a similar
5442 separate file, because it's also needed by Magic (to fix a similar
5438 pickle-related issue in @run).
5443 pickle-related issue in @run).
5439
5444
5440 2003-03-02 Fernando Perez <fperez@colorado.edu>
5445 2003-03-02 Fernando Perez <fperez@colorado.edu>
5441
5446
5442 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5447 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5443 the autocall option at runtime.
5448 the autocall option at runtime.
5444 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5449 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5445 across Magic.py to start separating Magic from InteractiveShell.
5450 across Magic.py to start separating Magic from InteractiveShell.
5446 (Magic._ofind): Fixed to return proper namespace for dotted
5451 (Magic._ofind): Fixed to return proper namespace for dotted
5447 names. Before, a dotted name would always return 'not currently
5452 names. Before, a dotted name would always return 'not currently
5448 defined', because it would find the 'parent'. s.x would be found,
5453 defined', because it would find the 'parent'. s.x would be found,
5449 but since 'x' isn't defined by itself, it would get confused.
5454 but since 'x' isn't defined by itself, it would get confused.
5450 (Magic.magic_run): Fixed pickling problems reported by Ralf
5455 (Magic.magic_run): Fixed pickling problems reported by Ralf
5451 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5456 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5452 that I'd used when Mike Heeter reported similar issues at the
5457 that I'd used when Mike Heeter reported similar issues at the
5453 top-level, but now for @run. It boils down to injecting the
5458 top-level, but now for @run. It boils down to injecting the
5454 namespace where code is being executed with something that looks
5459 namespace where code is being executed with something that looks
5455 enough like a module to fool pickle.dump(). Since a pickle stores
5460 enough like a module to fool pickle.dump(). Since a pickle stores
5456 a named reference to the importing module, we need this for
5461 a named reference to the importing module, we need this for
5457 pickles to save something sensible.
5462 pickles to save something sensible.
5458
5463
5459 * IPython/ipmaker.py (make_IPython): added an autocall option.
5464 * IPython/ipmaker.py (make_IPython): added an autocall option.
5460
5465
5461 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5466 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5462 the auto-eval code. Now autocalling is an option, and the code is
5467 the auto-eval code. Now autocalling is an option, and the code is
5463 also vastly safer. There is no more eval() involved at all.
5468 also vastly safer. There is no more eval() involved at all.
5464
5469
5465 2003-03-01 Fernando Perez <fperez@colorado.edu>
5470 2003-03-01 Fernando Perez <fperez@colorado.edu>
5466
5471
5467 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5472 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5468 dict with named keys instead of a tuple.
5473 dict with named keys instead of a tuple.
5469
5474
5470 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5475 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5471
5476
5472 * setup.py (make_shortcut): Fixed message about directories
5477 * setup.py (make_shortcut): Fixed message about directories
5473 created during Windows installation (the directories were ok, just
5478 created during Windows installation (the directories were ok, just
5474 the printed message was misleading). Thanks to Chris Liechti
5479 the printed message was misleading). Thanks to Chris Liechti
5475 <cliechti-AT-gmx.net> for the heads up.
5480 <cliechti-AT-gmx.net> for the heads up.
5476
5481
5477 2003-02-21 Fernando Perez <fperez@colorado.edu>
5482 2003-02-21 Fernando Perez <fperez@colorado.edu>
5478
5483
5479 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5484 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5480 of ValueError exception when checking for auto-execution. This
5485 of ValueError exception when checking for auto-execution. This
5481 one is raised by things like Numeric arrays arr.flat when the
5486 one is raised by things like Numeric arrays arr.flat when the
5482 array is non-contiguous.
5487 array is non-contiguous.
5483
5488
5484 2003-01-31 Fernando Perez <fperez@colorado.edu>
5489 2003-01-31 Fernando Perez <fperez@colorado.edu>
5485
5490
5486 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5491 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5487 not return any value at all (even though the command would get
5492 not return any value at all (even though the command would get
5488 executed).
5493 executed).
5489 (xsys): Flush stdout right after printing the command to ensure
5494 (xsys): Flush stdout right after printing the command to ensure
5490 proper ordering of commands and command output in the total
5495 proper ordering of commands and command output in the total
5491 output.
5496 output.
5492 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5497 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5493 system/getoutput as defaults. The old ones are kept for
5498 system/getoutput as defaults. The old ones are kept for
5494 compatibility reasons, so no code which uses this library needs
5499 compatibility reasons, so no code which uses this library needs
5495 changing.
5500 changing.
5496
5501
5497 2003-01-27 *** Released version 0.2.14
5502 2003-01-27 *** Released version 0.2.14
5498
5503
5499 2003-01-25 Fernando Perez <fperez@colorado.edu>
5504 2003-01-25 Fernando Perez <fperez@colorado.edu>
5500
5505
5501 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5506 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5502 functions defined in previous edit sessions could not be re-edited
5507 functions defined in previous edit sessions could not be re-edited
5503 (because the temp files were immediately removed). Now temp files
5508 (because the temp files were immediately removed). Now temp files
5504 are removed only at IPython's exit.
5509 are removed only at IPython's exit.
5505 (Magic.magic_run): Improved @run to perform shell-like expansions
5510 (Magic.magic_run): Improved @run to perform shell-like expansions
5506 on its arguments (~users and $VARS). With this, @run becomes more
5511 on its arguments (~users and $VARS). With this, @run becomes more
5507 like a normal command-line.
5512 like a normal command-line.
5508
5513
5509 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5514 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5510 bugs related to embedding and cleaned up that code. A fairly
5515 bugs related to embedding and cleaned up that code. A fairly
5511 important one was the impossibility to access the global namespace
5516 important one was the impossibility to access the global namespace
5512 through the embedded IPython (only local variables were visible).
5517 through the embedded IPython (only local variables were visible).
5513
5518
5514 2003-01-14 Fernando Perez <fperez@colorado.edu>
5519 2003-01-14 Fernando Perez <fperez@colorado.edu>
5515
5520
5516 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5521 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5517 auto-calling to be a bit more conservative. Now it doesn't get
5522 auto-calling to be a bit more conservative. Now it doesn't get
5518 triggered if any of '!=()<>' are in the rest of the input line, to
5523 triggered if any of '!=()<>' are in the rest of the input line, to
5519 allow comparing callables. Thanks to Alex for the heads up.
5524 allow comparing callables. Thanks to Alex for the heads up.
5520
5525
5521 2003-01-07 Fernando Perez <fperez@colorado.edu>
5526 2003-01-07 Fernando Perez <fperez@colorado.edu>
5522
5527
5523 * IPython/genutils.py (page): fixed estimation of the number of
5528 * IPython/genutils.py (page): fixed estimation of the number of
5524 lines in a string to be paged to simply count newlines. This
5529 lines in a string to be paged to simply count newlines. This
5525 prevents over-guessing due to embedded escape sequences. A better
5530 prevents over-guessing due to embedded escape sequences. A better
5526 long-term solution would involve stripping out the control chars
5531 long-term solution would involve stripping out the control chars
5527 for the count, but it's potentially so expensive I just don't
5532 for the count, but it's potentially so expensive I just don't
5528 think it's worth doing.
5533 think it's worth doing.
5529
5534
5530 2002-12-19 *** Released version 0.2.14pre50
5535 2002-12-19 *** Released version 0.2.14pre50
5531
5536
5532 2002-12-19 Fernando Perez <fperez@colorado.edu>
5537 2002-12-19 Fernando Perez <fperez@colorado.edu>
5533
5538
5534 * tools/release (version): Changed release scripts to inform
5539 * tools/release (version): Changed release scripts to inform
5535 Andrea and build a NEWS file with a list of recent changes.
5540 Andrea and build a NEWS file with a list of recent changes.
5536
5541
5537 * IPython/ColorANSI.py (__all__): changed terminal detection
5542 * IPython/ColorANSI.py (__all__): changed terminal detection
5538 code. Seems to work better for xterms without breaking
5543 code. Seems to work better for xterms without breaking
5539 konsole. Will need more testing to determine if WinXP and Mac OSX
5544 konsole. Will need more testing to determine if WinXP and Mac OSX
5540 also work ok.
5545 also work ok.
5541
5546
5542 2002-12-18 *** Released version 0.2.14pre49
5547 2002-12-18 *** Released version 0.2.14pre49
5543
5548
5544 2002-12-18 Fernando Perez <fperez@colorado.edu>
5549 2002-12-18 Fernando Perez <fperez@colorado.edu>
5545
5550
5546 * Docs: added new info about Mac OSX, from Andrea.
5551 * Docs: added new info about Mac OSX, from Andrea.
5547
5552
5548 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5553 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5549 allow direct plotting of python strings whose format is the same
5554 allow direct plotting of python strings whose format is the same
5550 of gnuplot data files.
5555 of gnuplot data files.
5551
5556
5552 2002-12-16 Fernando Perez <fperez@colorado.edu>
5557 2002-12-16 Fernando Perez <fperez@colorado.edu>
5553
5558
5554 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5559 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5555 value of exit question to be acknowledged.
5560 value of exit question to be acknowledged.
5556
5561
5557 2002-12-03 Fernando Perez <fperez@colorado.edu>
5562 2002-12-03 Fernando Perez <fperez@colorado.edu>
5558
5563
5559 * IPython/ipmaker.py: removed generators, which had been added
5564 * IPython/ipmaker.py: removed generators, which had been added
5560 by mistake in an earlier debugging run. This was causing trouble
5565 by mistake in an earlier debugging run. This was causing trouble
5561 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5566 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5562 for pointing this out.
5567 for pointing this out.
5563
5568
5564 2002-11-17 Fernando Perez <fperez@colorado.edu>
5569 2002-11-17 Fernando Perez <fperez@colorado.edu>
5565
5570
5566 * Manual: updated the Gnuplot section.
5571 * Manual: updated the Gnuplot section.
5567
5572
5568 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5573 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5569 a much better split of what goes in Runtime and what goes in
5574 a much better split of what goes in Runtime and what goes in
5570 Interactive.
5575 Interactive.
5571
5576
5572 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5577 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5573 being imported from iplib.
5578 being imported from iplib.
5574
5579
5575 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5580 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5576 for command-passing. Now the global Gnuplot instance is called
5581 for command-passing. Now the global Gnuplot instance is called
5577 'gp' instead of 'g', which was really a far too fragile and
5582 'gp' instead of 'g', which was really a far too fragile and
5578 common name.
5583 common name.
5579
5584
5580 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5585 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5581 bounding boxes generated by Gnuplot for square plots.
5586 bounding boxes generated by Gnuplot for square plots.
5582
5587
5583 * IPython/genutils.py (popkey): new function added. I should
5588 * IPython/genutils.py (popkey): new function added. I should
5584 suggest this on c.l.py as a dict method, it seems useful.
5589 suggest this on c.l.py as a dict method, it seems useful.
5585
5590
5586 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5591 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5587 to transparently handle PostScript generation. MUCH better than
5592 to transparently handle PostScript generation. MUCH better than
5588 the previous plot_eps/replot_eps (which I removed now). The code
5593 the previous plot_eps/replot_eps (which I removed now). The code
5589 is also fairly clean and well documented now (including
5594 is also fairly clean and well documented now (including
5590 docstrings).
5595 docstrings).
5591
5596
5592 2002-11-13 Fernando Perez <fperez@colorado.edu>
5597 2002-11-13 Fernando Perez <fperez@colorado.edu>
5593
5598
5594 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5599 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5595 (inconsistent with options).
5600 (inconsistent with options).
5596
5601
5597 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5602 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5598 manually disabled, I don't know why. Fixed it.
5603 manually disabled, I don't know why. Fixed it.
5599 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5604 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5600 eps output.
5605 eps output.
5601
5606
5602 2002-11-12 Fernando Perez <fperez@colorado.edu>
5607 2002-11-12 Fernando Perez <fperez@colorado.edu>
5603
5608
5604 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5609 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5605 don't propagate up to caller. Fixes crash reported by François
5610 don't propagate up to caller. Fixes crash reported by François
5606 Pinard.
5611 Pinard.
5607
5612
5608 2002-11-09 Fernando Perez <fperez@colorado.edu>
5613 2002-11-09 Fernando Perez <fperez@colorado.edu>
5609
5614
5610 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5615 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5611 history file for new users.
5616 history file for new users.
5612 (make_IPython): fixed bug where initial install would leave the
5617 (make_IPython): fixed bug where initial install would leave the
5613 user running in the .ipython dir.
5618 user running in the .ipython dir.
5614 (make_IPython): fixed bug where config dir .ipython would be
5619 (make_IPython): fixed bug where config dir .ipython would be
5615 created regardless of the given -ipythondir option. Thanks to Cory
5620 created regardless of the given -ipythondir option. Thanks to Cory
5616 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5621 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5617
5622
5618 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5623 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5619 type confirmations. Will need to use it in all of IPython's code
5624 type confirmations. Will need to use it in all of IPython's code
5620 consistently.
5625 consistently.
5621
5626
5622 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5627 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5623 context to print 31 lines instead of the default 5. This will make
5628 context to print 31 lines instead of the default 5. This will make
5624 the crash reports extremely detailed in case the problem is in
5629 the crash reports extremely detailed in case the problem is in
5625 libraries I don't have access to.
5630 libraries I don't have access to.
5626
5631
5627 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5632 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5628 line of defense' code to still crash, but giving users fair
5633 line of defense' code to still crash, but giving users fair
5629 warning. I don't want internal errors to go unreported: if there's
5634 warning. I don't want internal errors to go unreported: if there's
5630 an internal problem, IPython should crash and generate a full
5635 an internal problem, IPython should crash and generate a full
5631 report.
5636 report.
5632
5637
5633 2002-11-08 Fernando Perez <fperez@colorado.edu>
5638 2002-11-08 Fernando Perez <fperez@colorado.edu>
5634
5639
5635 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5640 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5636 otherwise uncaught exceptions which can appear if people set
5641 otherwise uncaught exceptions which can appear if people set
5637 sys.stdout to something badly broken. Thanks to a crash report
5642 sys.stdout to something badly broken. Thanks to a crash report
5638 from henni-AT-mail.brainbot.com.
5643 from henni-AT-mail.brainbot.com.
5639
5644
5640 2002-11-04 Fernando Perez <fperez@colorado.edu>
5645 2002-11-04 Fernando Perez <fperez@colorado.edu>
5641
5646
5642 * IPython/iplib.py (InteractiveShell.interact): added
5647 * IPython/iplib.py (InteractiveShell.interact): added
5643 __IPYTHON__active to the builtins. It's a flag which goes on when
5648 __IPYTHON__active to the builtins. It's a flag which goes on when
5644 the interaction starts and goes off again when it stops. This
5649 the interaction starts and goes off again when it stops. This
5645 allows embedding code to detect being inside IPython. Before this
5650 allows embedding code to detect being inside IPython. Before this
5646 was done via __IPYTHON__, but that only shows that an IPython
5651 was done via __IPYTHON__, but that only shows that an IPython
5647 instance has been created.
5652 instance has been created.
5648
5653
5649 * IPython/Magic.py (Magic.magic_env): I realized that in a
5654 * IPython/Magic.py (Magic.magic_env): I realized that in a
5650 UserDict, instance.data holds the data as a normal dict. So I
5655 UserDict, instance.data holds the data as a normal dict. So I
5651 modified @env to return os.environ.data instead of rebuilding a
5656 modified @env to return os.environ.data instead of rebuilding a
5652 dict by hand.
5657 dict by hand.
5653
5658
5654 2002-11-02 Fernando Perez <fperez@colorado.edu>
5659 2002-11-02 Fernando Perez <fperez@colorado.edu>
5655
5660
5656 * IPython/genutils.py (warn): changed so that level 1 prints no
5661 * IPython/genutils.py (warn): changed so that level 1 prints no
5657 header. Level 2 is now the default (with 'WARNING' header, as
5662 header. Level 2 is now the default (with 'WARNING' header, as
5658 before). I think I tracked all places where changes were needed in
5663 before). I think I tracked all places where changes were needed in
5659 IPython, but outside code using the old level numbering may have
5664 IPython, but outside code using the old level numbering may have
5660 broken.
5665 broken.
5661
5666
5662 * IPython/iplib.py (InteractiveShell.runcode): added this to
5667 * IPython/iplib.py (InteractiveShell.runcode): added this to
5663 handle the tracebacks in SystemExit traps correctly. The previous
5668 handle the tracebacks in SystemExit traps correctly. The previous
5664 code (through interact) was printing more of the stack than
5669 code (through interact) was printing more of the stack than
5665 necessary, showing IPython internal code to the user.
5670 necessary, showing IPython internal code to the user.
5666
5671
5667 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5672 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5668 default. Now that the default at the confirmation prompt is yes,
5673 default. Now that the default at the confirmation prompt is yes,
5669 it's not so intrusive. François' argument that ipython sessions
5674 it's not so intrusive. François' argument that ipython sessions
5670 tend to be complex enough not to lose them from an accidental C-d,
5675 tend to be complex enough not to lose them from an accidental C-d,
5671 is a valid one.
5676 is a valid one.
5672
5677
5673 * IPython/iplib.py (InteractiveShell.interact): added a
5678 * IPython/iplib.py (InteractiveShell.interact): added a
5674 showtraceback() call to the SystemExit trap, and modified the exit
5679 showtraceback() call to the SystemExit trap, and modified the exit
5675 confirmation to have yes as the default.
5680 confirmation to have yes as the default.
5676
5681
5677 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5682 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5678 this file. It's been gone from the code for a long time, this was
5683 this file. It's been gone from the code for a long time, this was
5679 simply leftover junk.
5684 simply leftover junk.
5680
5685
5681 2002-11-01 Fernando Perez <fperez@colorado.edu>
5686 2002-11-01 Fernando Perez <fperez@colorado.edu>
5682
5687
5683 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5688 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5684 added. If set, IPython now traps EOF and asks for
5689 added. If set, IPython now traps EOF and asks for
5685 confirmation. After a request by François Pinard.
5690 confirmation. After a request by François Pinard.
5686
5691
5687 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5692 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5688 of @abort, and with a new (better) mechanism for handling the
5693 of @abort, and with a new (better) mechanism for handling the
5689 exceptions.
5694 exceptions.
5690
5695
5691 2002-10-27 Fernando Perez <fperez@colorado.edu>
5696 2002-10-27 Fernando Perez <fperez@colorado.edu>
5692
5697
5693 * IPython/usage.py (__doc__): updated the --help information and
5698 * IPython/usage.py (__doc__): updated the --help information and
5694 the ipythonrc file to indicate that -log generates
5699 the ipythonrc file to indicate that -log generates
5695 ./ipython.log. Also fixed the corresponding info in @logstart.
5700 ./ipython.log. Also fixed the corresponding info in @logstart.
5696 This and several other fixes in the manuals thanks to reports by
5701 This and several other fixes in the manuals thanks to reports by
5697 François Pinard <pinard-AT-iro.umontreal.ca>.
5702 François Pinard <pinard-AT-iro.umontreal.ca>.
5698
5703
5699 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5704 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5700 refer to @logstart (instead of @log, which doesn't exist).
5705 refer to @logstart (instead of @log, which doesn't exist).
5701
5706
5702 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5707 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5703 AttributeError crash. Thanks to Christopher Armstrong
5708 AttributeError crash. Thanks to Christopher Armstrong
5704 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5709 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5705 introduced recently (in 0.2.14pre37) with the fix to the eval
5710 introduced recently (in 0.2.14pre37) with the fix to the eval
5706 problem mentioned below.
5711 problem mentioned below.
5707
5712
5708 2002-10-17 Fernando Perez <fperez@colorado.edu>
5713 2002-10-17 Fernando Perez <fperez@colorado.edu>
5709
5714
5710 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5715 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5711 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5716 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5712
5717
5713 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5718 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5714 this function to fix a problem reported by Alex Schmolck. He saw
5719 this function to fix a problem reported by Alex Schmolck. He saw
5715 it with list comprehensions and generators, which were getting
5720 it with list comprehensions and generators, which were getting
5716 called twice. The real problem was an 'eval' call in testing for
5721 called twice. The real problem was an 'eval' call in testing for
5717 automagic which was evaluating the input line silently.
5722 automagic which was evaluating the input line silently.
5718
5723
5719 This is a potentially very nasty bug, if the input has side
5724 This is a potentially very nasty bug, if the input has side
5720 effects which must not be repeated. The code is much cleaner now,
5725 effects which must not be repeated. The code is much cleaner now,
5721 without any blanket 'except' left and with a regexp test for
5726 without any blanket 'except' left and with a regexp test for
5722 actual function names.
5727 actual function names.
5723
5728
5724 But an eval remains, which I'm not fully comfortable with. I just
5729 But an eval remains, which I'm not fully comfortable with. I just
5725 don't know how to find out if an expression could be a callable in
5730 don't know how to find out if an expression could be a callable in
5726 the user's namespace without doing an eval on the string. However
5731 the user's namespace without doing an eval on the string. However
5727 that string is now much more strictly checked so that no code
5732 that string is now much more strictly checked so that no code
5728 slips by, so the eval should only happen for things that can
5733 slips by, so the eval should only happen for things that can
5729 really be only function/method names.
5734 really be only function/method names.
5730
5735
5731 2002-10-15 Fernando Perez <fperez@colorado.edu>
5736 2002-10-15 Fernando Perez <fperez@colorado.edu>
5732
5737
5733 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5738 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5734 OSX information to main manual, removed README_Mac_OSX file from
5739 OSX information to main manual, removed README_Mac_OSX file from
5735 distribution. Also updated credits for recent additions.
5740 distribution. Also updated credits for recent additions.
5736
5741
5737 2002-10-10 Fernando Perez <fperez@colorado.edu>
5742 2002-10-10 Fernando Perez <fperez@colorado.edu>
5738
5743
5739 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5744 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5740 terminal-related issues. Many thanks to Andrea Riciputi
5745 terminal-related issues. Many thanks to Andrea Riciputi
5741 <andrea.riciputi-AT-libero.it> for writing it.
5746 <andrea.riciputi-AT-libero.it> for writing it.
5742
5747
5743 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5748 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5744 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5749 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5745
5750
5746 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5751 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5747 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5752 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5748 <syver-en-AT-online.no> who both submitted patches for this problem.
5753 <syver-en-AT-online.no> who both submitted patches for this problem.
5749
5754
5750 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5755 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5751 global embedding to make sure that things don't overwrite user
5756 global embedding to make sure that things don't overwrite user
5752 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5757 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5753
5758
5754 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5759 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5755 compatibility. Thanks to Hayden Callow
5760 compatibility. Thanks to Hayden Callow
5756 <h.callow-AT-elec.canterbury.ac.nz>
5761 <h.callow-AT-elec.canterbury.ac.nz>
5757
5762
5758 2002-10-04 Fernando Perez <fperez@colorado.edu>
5763 2002-10-04 Fernando Perez <fperez@colorado.edu>
5759
5764
5760 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5765 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5761 Gnuplot.File objects.
5766 Gnuplot.File objects.
5762
5767
5763 2002-07-23 Fernando Perez <fperez@colorado.edu>
5768 2002-07-23 Fernando Perez <fperez@colorado.edu>
5764
5769
5765 * IPython/genutils.py (timing): Added timings() and timing() for
5770 * IPython/genutils.py (timing): Added timings() and timing() for
5766 quick access to the most commonly needed data, the execution
5771 quick access to the most commonly needed data, the execution
5767 times. Old timing() renamed to timings_out().
5772 times. Old timing() renamed to timings_out().
5768
5773
5769 2002-07-18 Fernando Perez <fperez@colorado.edu>
5774 2002-07-18 Fernando Perez <fperez@colorado.edu>
5770
5775
5771 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5776 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5772 bug with nested instances disrupting the parent's tab completion.
5777 bug with nested instances disrupting the parent's tab completion.
5773
5778
5774 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5779 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5775 all_completions code to begin the emacs integration.
5780 all_completions code to begin the emacs integration.
5776
5781
5777 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5782 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5778 argument to allow titling individual arrays when plotting.
5783 argument to allow titling individual arrays when plotting.
5779
5784
5780 2002-07-15 Fernando Perez <fperez@colorado.edu>
5785 2002-07-15 Fernando Perez <fperez@colorado.edu>
5781
5786
5782 * setup.py (make_shortcut): changed to retrieve the value of
5787 * setup.py (make_shortcut): changed to retrieve the value of
5783 'Program Files' directory from the registry (this value changes in
5788 'Program Files' directory from the registry (this value changes in
5784 non-english versions of Windows). Thanks to Thomas Fanslau
5789 non-english versions of Windows). Thanks to Thomas Fanslau
5785 <tfanslau-AT-gmx.de> for the report.
5790 <tfanslau-AT-gmx.de> for the report.
5786
5791
5787 2002-07-10 Fernando Perez <fperez@colorado.edu>
5792 2002-07-10 Fernando Perez <fperez@colorado.edu>
5788
5793
5789 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5794 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5790 a bug in pdb, which crashes if a line with only whitespace is
5795 a bug in pdb, which crashes if a line with only whitespace is
5791 entered. Bug report submitted to sourceforge.
5796 entered. Bug report submitted to sourceforge.
5792
5797
5793 2002-07-09 Fernando Perez <fperez@colorado.edu>
5798 2002-07-09 Fernando Perez <fperez@colorado.edu>
5794
5799
5795 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5800 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5796 reporting exceptions (it's a bug in inspect.py, I just set a
5801 reporting exceptions (it's a bug in inspect.py, I just set a
5797 workaround).
5802 workaround).
5798
5803
5799 2002-07-08 Fernando Perez <fperez@colorado.edu>
5804 2002-07-08 Fernando Perez <fperez@colorado.edu>
5800
5805
5801 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5806 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5802 __IPYTHON__ in __builtins__ to show up in user_ns.
5807 __IPYTHON__ in __builtins__ to show up in user_ns.
5803
5808
5804 2002-07-03 Fernando Perez <fperez@colorado.edu>
5809 2002-07-03 Fernando Perez <fperez@colorado.edu>
5805
5810
5806 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5811 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5807 name from @gp_set_instance to @gp_set_default.
5812 name from @gp_set_instance to @gp_set_default.
5808
5813
5809 * IPython/ipmaker.py (make_IPython): default editor value set to
5814 * IPython/ipmaker.py (make_IPython): default editor value set to
5810 '0' (a string), to match the rc file. Otherwise will crash when
5815 '0' (a string), to match the rc file. Otherwise will crash when
5811 .strip() is called on it.
5816 .strip() is called on it.
5812
5817
5813
5818
5814 2002-06-28 Fernando Perez <fperez@colorado.edu>
5819 2002-06-28 Fernando Perez <fperez@colorado.edu>
5815
5820
5816 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5821 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5817 of files in current directory when a file is executed via
5822 of files in current directory when a file is executed via
5818 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5823 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5819
5824
5820 * setup.py (manfiles): fix for rpm builds, submitted by RA
5825 * setup.py (manfiles): fix for rpm builds, submitted by RA
5821 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5826 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5822
5827
5823 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5828 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5824 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5829 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5825 string!). A. Schmolck caught this one.
5830 string!). A. Schmolck caught this one.
5826
5831
5827 2002-06-27 Fernando Perez <fperez@colorado.edu>
5832 2002-06-27 Fernando Perez <fperez@colorado.edu>
5828
5833
5829 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5834 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5830 defined files at the cmd line. __name__ wasn't being set to
5835 defined files at the cmd line. __name__ wasn't being set to
5831 __main__.
5836 __main__.
5832
5837
5833 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5838 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5834 regular lists and tuples besides Numeric arrays.
5839 regular lists and tuples besides Numeric arrays.
5835
5840
5836 * IPython/Prompts.py (CachedOutput.__call__): Added output
5841 * IPython/Prompts.py (CachedOutput.__call__): Added output
5837 supression for input ending with ';'. Similar to Mathematica and
5842 supression for input ending with ';'. Similar to Mathematica and
5838 Matlab. The _* vars and Out[] list are still updated, just like
5843 Matlab. The _* vars and Out[] list are still updated, just like
5839 Mathematica behaves.
5844 Mathematica behaves.
5840
5845
5841 2002-06-25 Fernando Perez <fperez@colorado.edu>
5846 2002-06-25 Fernando Perez <fperez@colorado.edu>
5842
5847
5843 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5848 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5844 .ini extensions for profiels under Windows.
5849 .ini extensions for profiels under Windows.
5845
5850
5846 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5851 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5847 string form. Fix contributed by Alexander Schmolck
5852 string form. Fix contributed by Alexander Schmolck
5848 <a.schmolck-AT-gmx.net>
5853 <a.schmolck-AT-gmx.net>
5849
5854
5850 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5855 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5851 pre-configured Gnuplot instance.
5856 pre-configured Gnuplot instance.
5852
5857
5853 2002-06-21 Fernando Perez <fperez@colorado.edu>
5858 2002-06-21 Fernando Perez <fperez@colorado.edu>
5854
5859
5855 * IPython/numutils.py (exp_safe): new function, works around the
5860 * IPython/numutils.py (exp_safe): new function, works around the
5856 underflow problems in Numeric.
5861 underflow problems in Numeric.
5857 (log2): New fn. Safe log in base 2: returns exact integer answer
5862 (log2): New fn. Safe log in base 2: returns exact integer answer
5858 for exact integer powers of 2.
5863 for exact integer powers of 2.
5859
5864
5860 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5865 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5861 properly.
5866 properly.
5862
5867
5863 2002-06-20 Fernando Perez <fperez@colorado.edu>
5868 2002-06-20 Fernando Perez <fperez@colorado.edu>
5864
5869
5865 * IPython/genutils.py (timing): new function like
5870 * IPython/genutils.py (timing): new function like
5866 Mathematica's. Similar to time_test, but returns more info.
5871 Mathematica's. Similar to time_test, but returns more info.
5867
5872
5868 2002-06-18 Fernando Perez <fperez@colorado.edu>
5873 2002-06-18 Fernando Perez <fperez@colorado.edu>
5869
5874
5870 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5875 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5871 according to Mike Heeter's suggestions.
5876 according to Mike Heeter's suggestions.
5872
5877
5873 2002-06-16 Fernando Perez <fperez@colorado.edu>
5878 2002-06-16 Fernando Perez <fperez@colorado.edu>
5874
5879
5875 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5880 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5876 system. GnuplotMagic is gone as a user-directory option. New files
5881 system. GnuplotMagic is gone as a user-directory option. New files
5877 make it easier to use all the gnuplot stuff both from external
5882 make it easier to use all the gnuplot stuff both from external
5878 programs as well as from IPython. Had to rewrite part of
5883 programs as well as from IPython. Had to rewrite part of
5879 hardcopy() b/c of a strange bug: often the ps files simply don't
5884 hardcopy() b/c of a strange bug: often the ps files simply don't
5880 get created, and require a repeat of the command (often several
5885 get created, and require a repeat of the command (often several
5881 times).
5886 times).
5882
5887
5883 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5888 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5884 resolve output channel at call time, so that if sys.stderr has
5889 resolve output channel at call time, so that if sys.stderr has
5885 been redirected by user this gets honored.
5890 been redirected by user this gets honored.
5886
5891
5887 2002-06-13 Fernando Perez <fperez@colorado.edu>
5892 2002-06-13 Fernando Perez <fperez@colorado.edu>
5888
5893
5889 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5894 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5890 IPShell. Kept a copy with the old names to avoid breaking people's
5895 IPShell. Kept a copy with the old names to avoid breaking people's
5891 embedded code.
5896 embedded code.
5892
5897
5893 * IPython/ipython: simplified it to the bare minimum after
5898 * IPython/ipython: simplified it to the bare minimum after
5894 Holger's suggestions. Added info about how to use it in
5899 Holger's suggestions. Added info about how to use it in
5895 PYTHONSTARTUP.
5900 PYTHONSTARTUP.
5896
5901
5897 * IPython/Shell.py (IPythonShell): changed the options passing
5902 * IPython/Shell.py (IPythonShell): changed the options passing
5898 from a string with funky %s replacements to a straight list. Maybe
5903 from a string with funky %s replacements to a straight list. Maybe
5899 a bit more typing, but it follows sys.argv conventions, so there's
5904 a bit more typing, but it follows sys.argv conventions, so there's
5900 less special-casing to remember.
5905 less special-casing to remember.
5901
5906
5902 2002-06-12 Fernando Perez <fperez@colorado.edu>
5907 2002-06-12 Fernando Perez <fperez@colorado.edu>
5903
5908
5904 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5909 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5905 command. Thanks to a suggestion by Mike Heeter.
5910 command. Thanks to a suggestion by Mike Heeter.
5906 (Magic.magic_pfile): added behavior to look at filenames if given
5911 (Magic.magic_pfile): added behavior to look at filenames if given
5907 arg is not a defined object.
5912 arg is not a defined object.
5908 (Magic.magic_save): New @save function to save code snippets. Also
5913 (Magic.magic_save): New @save function to save code snippets. Also
5909 a Mike Heeter idea.
5914 a Mike Heeter idea.
5910
5915
5911 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5916 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5912 plot() and replot(). Much more convenient now, especially for
5917 plot() and replot(). Much more convenient now, especially for
5913 interactive use.
5918 interactive use.
5914
5919
5915 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5920 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5916 filenames.
5921 filenames.
5917
5922
5918 2002-06-02 Fernando Perez <fperez@colorado.edu>
5923 2002-06-02 Fernando Perez <fperez@colorado.edu>
5919
5924
5920 * IPython/Struct.py (Struct.__init__): modified to admit
5925 * IPython/Struct.py (Struct.__init__): modified to admit
5921 initialization via another struct.
5926 initialization via another struct.
5922
5927
5923 * IPython/genutils.py (SystemExec.__init__): New stateful
5928 * IPython/genutils.py (SystemExec.__init__): New stateful
5924 interface to xsys and bq. Useful for writing system scripts.
5929 interface to xsys and bq. Useful for writing system scripts.
5925
5930
5926 2002-05-30 Fernando Perez <fperez@colorado.edu>
5931 2002-05-30 Fernando Perez <fperez@colorado.edu>
5927
5932
5928 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5933 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5929 documents. This will make the user download smaller (it's getting
5934 documents. This will make the user download smaller (it's getting
5930 too big).
5935 too big).
5931
5936
5932 2002-05-29 Fernando Perez <fperez@colorado.edu>
5937 2002-05-29 Fernando Perez <fperez@colorado.edu>
5933
5938
5934 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5939 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5935 fix problems with shelve and pickle. Seems to work, but I don't
5940 fix problems with shelve and pickle. Seems to work, but I don't
5936 know if corner cases break it. Thanks to Mike Heeter
5941 know if corner cases break it. Thanks to Mike Heeter
5937 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5942 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5938
5943
5939 2002-05-24 Fernando Perez <fperez@colorado.edu>
5944 2002-05-24 Fernando Perez <fperez@colorado.edu>
5940
5945
5941 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5946 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5942 macros having broken.
5947 macros having broken.
5943
5948
5944 2002-05-21 Fernando Perez <fperez@colorado.edu>
5949 2002-05-21 Fernando Perez <fperez@colorado.edu>
5945
5950
5946 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5951 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5947 introduced logging bug: all history before logging started was
5952 introduced logging bug: all history before logging started was
5948 being written one character per line! This came from the redesign
5953 being written one character per line! This came from the redesign
5949 of the input history as a special list which slices to strings,
5954 of the input history as a special list which slices to strings,
5950 not to lists.
5955 not to lists.
5951
5956
5952 2002-05-20 Fernando Perez <fperez@colorado.edu>
5957 2002-05-20 Fernando Perez <fperez@colorado.edu>
5953
5958
5954 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5959 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5955 be an attribute of all classes in this module. The design of these
5960 be an attribute of all classes in this module. The design of these
5956 classes needs some serious overhauling.
5961 classes needs some serious overhauling.
5957
5962
5958 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5963 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5959 which was ignoring '_' in option names.
5964 which was ignoring '_' in option names.
5960
5965
5961 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5966 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5962 'Verbose_novars' to 'Context' and made it the new default. It's a
5967 'Verbose_novars' to 'Context' and made it the new default. It's a
5963 bit more readable and also safer than verbose.
5968 bit more readable and also safer than verbose.
5964
5969
5965 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5970 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5966 triple-quoted strings.
5971 triple-quoted strings.
5967
5972
5968 * IPython/OInspect.py (__all__): new module exposing the object
5973 * IPython/OInspect.py (__all__): new module exposing the object
5969 introspection facilities. Now the corresponding magics are dummy
5974 introspection facilities. Now the corresponding magics are dummy
5970 wrappers around this. Having this module will make it much easier
5975 wrappers around this. Having this module will make it much easier
5971 to put these functions into our modified pdb.
5976 to put these functions into our modified pdb.
5972 This new object inspector system uses the new colorizing module,
5977 This new object inspector system uses the new colorizing module,
5973 so source code and other things are nicely syntax highlighted.
5978 so source code and other things are nicely syntax highlighted.
5974
5979
5975 2002-05-18 Fernando Perez <fperez@colorado.edu>
5980 2002-05-18 Fernando Perez <fperez@colorado.edu>
5976
5981
5977 * IPython/ColorANSI.py: Split the coloring tools into a separate
5982 * IPython/ColorANSI.py: Split the coloring tools into a separate
5978 module so I can use them in other code easier (they were part of
5983 module so I can use them in other code easier (they were part of
5979 ultraTB).
5984 ultraTB).
5980
5985
5981 2002-05-17 Fernando Perez <fperez@colorado.edu>
5986 2002-05-17 Fernando Perez <fperez@colorado.edu>
5982
5987
5983 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5988 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5984 fixed it to set the global 'g' also to the called instance, as
5989 fixed it to set the global 'g' also to the called instance, as
5985 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5990 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5986 user's 'g' variables).
5991 user's 'g' variables).
5987
5992
5988 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5993 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5989 global variables (aliases to _ih,_oh) so that users which expect
5994 global variables (aliases to _ih,_oh) so that users which expect
5990 In[5] or Out[7] to work aren't unpleasantly surprised.
5995 In[5] or Out[7] to work aren't unpleasantly surprised.
5991 (InputList.__getslice__): new class to allow executing slices of
5996 (InputList.__getslice__): new class to allow executing slices of
5992 input history directly. Very simple class, complements the use of
5997 input history directly. Very simple class, complements the use of
5993 macros.
5998 macros.
5994
5999
5995 2002-05-16 Fernando Perez <fperez@colorado.edu>
6000 2002-05-16 Fernando Perez <fperez@colorado.edu>
5996
6001
5997 * setup.py (docdirbase): make doc directory be just doc/IPython
6002 * setup.py (docdirbase): make doc directory be just doc/IPython
5998 without version numbers, it will reduce clutter for users.
6003 without version numbers, it will reduce clutter for users.
5999
6004
6000 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
6005 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
6001 execfile call to prevent possible memory leak. See for details:
6006 execfile call to prevent possible memory leak. See for details:
6002 http://mail.python.org/pipermail/python-list/2002-February/088476.html
6007 http://mail.python.org/pipermail/python-list/2002-February/088476.html
6003
6008
6004 2002-05-15 Fernando Perez <fperez@colorado.edu>
6009 2002-05-15 Fernando Perez <fperez@colorado.edu>
6005
6010
6006 * IPython/Magic.py (Magic.magic_psource): made the object
6011 * IPython/Magic.py (Magic.magic_psource): made the object
6007 introspection names be more standard: pdoc, pdef, pfile and
6012 introspection names be more standard: pdoc, pdef, pfile and
6008 psource. They all print/page their output, and it makes
6013 psource. They all print/page their output, and it makes
6009 remembering them easier. Kept old names for compatibility as
6014 remembering them easier. Kept old names for compatibility as
6010 aliases.
6015 aliases.
6011
6016
6012 2002-05-14 Fernando Perez <fperez@colorado.edu>
6017 2002-05-14 Fernando Perez <fperez@colorado.edu>
6013
6018
6014 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
6019 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
6015 what the mouse problem was. The trick is to use gnuplot with temp
6020 what the mouse problem was. The trick is to use gnuplot with temp
6016 files and NOT with pipes (for data communication), because having
6021 files and NOT with pipes (for data communication), because having
6017 both pipes and the mouse on is bad news.
6022 both pipes and the mouse on is bad news.
6018
6023
6019 2002-05-13 Fernando Perez <fperez@colorado.edu>
6024 2002-05-13 Fernando Perez <fperez@colorado.edu>
6020
6025
6021 * IPython/Magic.py (Magic._ofind): fixed namespace order search
6026 * IPython/Magic.py (Magic._ofind): fixed namespace order search
6022 bug. Information would be reported about builtins even when
6027 bug. Information would be reported about builtins even when
6023 user-defined functions overrode them.
6028 user-defined functions overrode them.
6024
6029
6025 2002-05-11 Fernando Perez <fperez@colorado.edu>
6030 2002-05-11 Fernando Perez <fperez@colorado.edu>
6026
6031
6027 * IPython/__init__.py (__all__): removed FlexCompleter from
6032 * IPython/__init__.py (__all__): removed FlexCompleter from
6028 __all__ so that things don't fail in platforms without readline.
6033 __all__ so that things don't fail in platforms without readline.
6029
6034
6030 2002-05-10 Fernando Perez <fperez@colorado.edu>
6035 2002-05-10 Fernando Perez <fperez@colorado.edu>
6031
6036
6032 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
6037 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
6033 it requires Numeric, effectively making Numeric a dependency for
6038 it requires Numeric, effectively making Numeric a dependency for
6034 IPython.
6039 IPython.
6035
6040
6036 * Released 0.2.13
6041 * Released 0.2.13
6037
6042
6038 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
6043 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
6039 profiler interface. Now all the major options from the profiler
6044 profiler interface. Now all the major options from the profiler
6040 module are directly supported in IPython, both for single
6045 module are directly supported in IPython, both for single
6041 expressions (@prun) and for full programs (@run -p).
6046 expressions (@prun) and for full programs (@run -p).
6042
6047
6043 2002-05-09 Fernando Perez <fperez@colorado.edu>
6048 2002-05-09 Fernando Perez <fperez@colorado.edu>
6044
6049
6045 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
6050 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
6046 magic properly formatted for screen.
6051 magic properly formatted for screen.
6047
6052
6048 * setup.py (make_shortcut): Changed things to put pdf version in
6053 * setup.py (make_shortcut): Changed things to put pdf version in
6049 doc/ instead of doc/manual (had to change lyxport a bit).
6054 doc/ instead of doc/manual (had to change lyxport a bit).
6050
6055
6051 * IPython/Magic.py (Profile.string_stats): made profile runs go
6056 * IPython/Magic.py (Profile.string_stats): made profile runs go
6052 through pager (they are long and a pager allows searching, saving,
6057 through pager (they are long and a pager allows searching, saving,
6053 etc.)
6058 etc.)
6054
6059
6055 2002-05-08 Fernando Perez <fperez@colorado.edu>
6060 2002-05-08 Fernando Perez <fperez@colorado.edu>
6056
6061
6057 * Released 0.2.12
6062 * Released 0.2.12
6058
6063
6059 2002-05-06 Fernando Perez <fperez@colorado.edu>
6064 2002-05-06 Fernando Perez <fperez@colorado.edu>
6060
6065
6061 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
6066 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
6062 introduced); 'hist n1 n2' was broken.
6067 introduced); 'hist n1 n2' was broken.
6063 (Magic.magic_pdb): added optional on/off arguments to @pdb
6068 (Magic.magic_pdb): added optional on/off arguments to @pdb
6064 (Magic.magic_run): added option -i to @run, which executes code in
6069 (Magic.magic_run): added option -i to @run, which executes code in
6065 the IPython namespace instead of a clean one. Also added @irun as
6070 the IPython namespace instead of a clean one. Also added @irun as
6066 an alias to @run -i.
6071 an alias to @run -i.
6067
6072
6068 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
6073 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
6069 fixed (it didn't really do anything, the namespaces were wrong).
6074 fixed (it didn't really do anything, the namespaces were wrong).
6070
6075
6071 * IPython/Debugger.py (__init__): Added workaround for python 2.1
6076 * IPython/Debugger.py (__init__): Added workaround for python 2.1
6072
6077
6073 * IPython/__init__.py (__all__): Fixed package namespace, now
6078 * IPython/__init__.py (__all__): Fixed package namespace, now
6074 'import IPython' does give access to IPython.<all> as
6079 'import IPython' does give access to IPython.<all> as
6075 expected. Also renamed __release__ to Release.
6080 expected. Also renamed __release__ to Release.
6076
6081
6077 * IPython/Debugger.py (__license__): created new Pdb class which
6082 * IPython/Debugger.py (__license__): created new Pdb class which
6078 functions like a drop-in for the normal pdb.Pdb but does NOT
6083 functions like a drop-in for the normal pdb.Pdb but does NOT
6079 import readline by default. This way it doesn't muck up IPython's
6084 import readline by default. This way it doesn't muck up IPython's
6080 readline handling, and now tab-completion finally works in the
6085 readline handling, and now tab-completion finally works in the
6081 debugger -- sort of. It completes things globally visible, but the
6086 debugger -- sort of. It completes things globally visible, but the
6082 completer doesn't track the stack as pdb walks it. That's a bit
6087 completer doesn't track the stack as pdb walks it. That's a bit
6083 tricky, and I'll have to implement it later.
6088 tricky, and I'll have to implement it later.
6084
6089
6085 2002-05-05 Fernando Perez <fperez@colorado.edu>
6090 2002-05-05 Fernando Perez <fperez@colorado.edu>
6086
6091
6087 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
6092 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
6088 magic docstrings when printed via ? (explicit \'s were being
6093 magic docstrings when printed via ? (explicit \'s were being
6089 printed).
6094 printed).
6090
6095
6091 * IPython/ipmaker.py (make_IPython): fixed namespace
6096 * IPython/ipmaker.py (make_IPython): fixed namespace
6092 identification bug. Now variables loaded via logs or command-line
6097 identification bug. Now variables loaded via logs or command-line
6093 files are recognized in the interactive namespace by @who.
6098 files are recognized in the interactive namespace by @who.
6094
6099
6095 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
6100 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
6096 log replay system stemming from the string form of Structs.
6101 log replay system stemming from the string form of Structs.
6097
6102
6098 * IPython/Magic.py (Macro.__init__): improved macros to properly
6103 * IPython/Magic.py (Macro.__init__): improved macros to properly
6099 handle magic commands in them.
6104 handle magic commands in them.
6100 (Magic.magic_logstart): usernames are now expanded so 'logstart
6105 (Magic.magic_logstart): usernames are now expanded so 'logstart
6101 ~/mylog' now works.
6106 ~/mylog' now works.
6102
6107
6103 * IPython/iplib.py (complete): fixed bug where paths starting with
6108 * IPython/iplib.py (complete): fixed bug where paths starting with
6104 '/' would be completed as magic names.
6109 '/' would be completed as magic names.
6105
6110
6106 2002-05-04 Fernando Perez <fperez@colorado.edu>
6111 2002-05-04 Fernando Perez <fperez@colorado.edu>
6107
6112
6108 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
6113 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
6109 allow running full programs under the profiler's control.
6114 allow running full programs under the profiler's control.
6110
6115
6111 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
6116 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
6112 mode to report exceptions verbosely but without formatting
6117 mode to report exceptions verbosely but without formatting
6113 variables. This addresses the issue of ipython 'freezing' (it's
6118 variables. This addresses the issue of ipython 'freezing' (it's
6114 not frozen, but caught in an expensive formatting loop) when huge
6119 not frozen, but caught in an expensive formatting loop) when huge
6115 variables are in the context of an exception.
6120 variables are in the context of an exception.
6116 (VerboseTB.text): Added '--->' markers at line where exception was
6121 (VerboseTB.text): Added '--->' markers at line where exception was
6117 triggered. Much clearer to read, especially in NoColor modes.
6122 triggered. Much clearer to read, especially in NoColor modes.
6118
6123
6119 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
6124 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
6120 implemented in reverse when changing to the new parse_options().
6125 implemented in reverse when changing to the new parse_options().
6121
6126
6122 2002-05-03 Fernando Perez <fperez@colorado.edu>
6127 2002-05-03 Fernando Perez <fperez@colorado.edu>
6123
6128
6124 * IPython/Magic.py (Magic.parse_options): new function so that
6129 * IPython/Magic.py (Magic.parse_options): new function so that
6125 magics can parse options easier.
6130 magics can parse options easier.
6126 (Magic.magic_prun): new function similar to profile.run(),
6131 (Magic.magic_prun): new function similar to profile.run(),
6127 suggested by Chris Hart.
6132 suggested by Chris Hart.
6128 (Magic.magic_cd): fixed behavior so that it only changes if
6133 (Magic.magic_cd): fixed behavior so that it only changes if
6129 directory actually is in history.
6134 directory actually is in history.
6130
6135
6131 * IPython/usage.py (__doc__): added information about potential
6136 * IPython/usage.py (__doc__): added information about potential
6132 slowness of Verbose exception mode when there are huge data
6137 slowness of Verbose exception mode when there are huge data
6133 structures to be formatted (thanks to Archie Paulson).
6138 structures to be formatted (thanks to Archie Paulson).
6134
6139
6135 * IPython/ipmaker.py (make_IPython): Changed default logging
6140 * IPython/ipmaker.py (make_IPython): Changed default logging
6136 (when simply called with -log) to use curr_dir/ipython.log in
6141 (when simply called with -log) to use curr_dir/ipython.log in
6137 rotate mode. Fixed crash which was occuring with -log before
6142 rotate mode. Fixed crash which was occuring with -log before
6138 (thanks to Jim Boyle).
6143 (thanks to Jim Boyle).
6139
6144
6140 2002-05-01 Fernando Perez <fperez@colorado.edu>
6145 2002-05-01 Fernando Perez <fperez@colorado.edu>
6141
6146
6142 * Released 0.2.11 for these fixes (mainly the ultraTB one which
6147 * Released 0.2.11 for these fixes (mainly the ultraTB one which
6143 was nasty -- though somewhat of a corner case).
6148 was nasty -- though somewhat of a corner case).
6144
6149
6145 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
6150 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
6146 text (was a bug).
6151 text (was a bug).
6147
6152
6148 2002-04-30 Fernando Perez <fperez@colorado.edu>
6153 2002-04-30 Fernando Perez <fperez@colorado.edu>
6149
6154
6150 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
6155 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
6151 a print after ^D or ^C from the user so that the In[] prompt
6156 a print after ^D or ^C from the user so that the In[] prompt
6152 doesn't over-run the gnuplot one.
6157 doesn't over-run the gnuplot one.
6153
6158
6154 2002-04-29 Fernando Perez <fperez@colorado.edu>
6159 2002-04-29 Fernando Perez <fperez@colorado.edu>
6155
6160
6156 * Released 0.2.10
6161 * Released 0.2.10
6157
6162
6158 * IPython/__release__.py (version): get date dynamically.
6163 * IPython/__release__.py (version): get date dynamically.
6159
6164
6160 * Misc. documentation updates thanks to Arnd's comments. Also ran
6165 * Misc. documentation updates thanks to Arnd's comments. Also ran
6161 a full spellcheck on the manual (hadn't been done in a while).
6166 a full spellcheck on the manual (hadn't been done in a while).
6162
6167
6163 2002-04-27 Fernando Perez <fperez@colorado.edu>
6168 2002-04-27 Fernando Perez <fperez@colorado.edu>
6164
6169
6165 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
6170 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
6166 starting a log in mid-session would reset the input history list.
6171 starting a log in mid-session would reset the input history list.
6167
6172
6168 2002-04-26 Fernando Perez <fperez@colorado.edu>
6173 2002-04-26 Fernando Perez <fperez@colorado.edu>
6169
6174
6170 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
6175 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
6171 all files were being included in an update. Now anything in
6176 all files were being included in an update. Now anything in
6172 UserConfig that matches [A-Za-z]*.py will go (this excludes
6177 UserConfig that matches [A-Za-z]*.py will go (this excludes
6173 __init__.py)
6178 __init__.py)
6174
6179
6175 2002-04-25 Fernando Perez <fperez@colorado.edu>
6180 2002-04-25 Fernando Perez <fperez@colorado.edu>
6176
6181
6177 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
6182 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
6178 to __builtins__ so that any form of embedded or imported code can
6183 to __builtins__ so that any form of embedded or imported code can
6179 test for being inside IPython.
6184 test for being inside IPython.
6180
6185
6181 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
6186 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
6182 changed to GnuplotMagic because it's now an importable module,
6187 changed to GnuplotMagic because it's now an importable module,
6183 this makes the name follow that of the standard Gnuplot module.
6188 this makes the name follow that of the standard Gnuplot module.
6184 GnuplotMagic can now be loaded at any time in mid-session.
6189 GnuplotMagic can now be loaded at any time in mid-session.
6185
6190
6186 2002-04-24 Fernando Perez <fperez@colorado.edu>
6191 2002-04-24 Fernando Perez <fperez@colorado.edu>
6187
6192
6188 * IPython/numutils.py: removed SIUnits. It doesn't properly set
6193 * IPython/numutils.py: removed SIUnits. It doesn't properly set
6189 the globals (IPython has its own namespace) and the
6194 the globals (IPython has its own namespace) and the
6190 PhysicalQuantity stuff is much better anyway.
6195 PhysicalQuantity stuff is much better anyway.
6191
6196
6192 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
6197 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
6193 embedding example to standard user directory for
6198 embedding example to standard user directory for
6194 distribution. Also put it in the manual.
6199 distribution. Also put it in the manual.
6195
6200
6196 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
6201 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
6197 instance as first argument (so it doesn't rely on some obscure
6202 instance as first argument (so it doesn't rely on some obscure
6198 hidden global).
6203 hidden global).
6199
6204
6200 * IPython/UserConfig/ipythonrc.py: put () back in accepted
6205 * IPython/UserConfig/ipythonrc.py: put () back in accepted
6201 delimiters. While it prevents ().TAB from working, it allows
6206 delimiters. While it prevents ().TAB from working, it allows
6202 completions in open (... expressions. This is by far a more common
6207 completions in open (... expressions. This is by far a more common
6203 case.
6208 case.
6204
6209
6205 2002-04-23 Fernando Perez <fperez@colorado.edu>
6210 2002-04-23 Fernando Perez <fperez@colorado.edu>
6206
6211
6207 * IPython/Extensions/InterpreterPasteInput.py: new
6212 * IPython/Extensions/InterpreterPasteInput.py: new
6208 syntax-processing module for pasting lines with >>> or ... at the
6213 syntax-processing module for pasting lines with >>> or ... at the
6209 start.
6214 start.
6210
6215
6211 * IPython/Extensions/PhysicalQ_Interactive.py
6216 * IPython/Extensions/PhysicalQ_Interactive.py
6212 (PhysicalQuantityInteractive.__int__): fixed to work with either
6217 (PhysicalQuantityInteractive.__int__): fixed to work with either
6213 Numeric or math.
6218 Numeric or math.
6214
6219
6215 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
6220 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
6216 provided profiles. Now we have:
6221 provided profiles. Now we have:
6217 -math -> math module as * and cmath with its own namespace.
6222 -math -> math module as * and cmath with its own namespace.
6218 -numeric -> Numeric as *, plus gnuplot & grace
6223 -numeric -> Numeric as *, plus gnuplot & grace
6219 -physics -> same as before
6224 -physics -> same as before
6220
6225
6221 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
6226 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
6222 user-defined magics wouldn't be found by @magic if they were
6227 user-defined magics wouldn't be found by @magic if they were
6223 defined as class methods. Also cleaned up the namespace search
6228 defined as class methods. Also cleaned up the namespace search
6224 logic and the string building (to use %s instead of many repeated
6229 logic and the string building (to use %s instead of many repeated
6225 string adds).
6230 string adds).
6226
6231
6227 * IPython/UserConfig/example-magic.py (magic_foo): updated example
6232 * IPython/UserConfig/example-magic.py (magic_foo): updated example
6228 of user-defined magics to operate with class methods (cleaner, in
6233 of user-defined magics to operate with class methods (cleaner, in
6229 line with the gnuplot code).
6234 line with the gnuplot code).
6230
6235
6231 2002-04-22 Fernando Perez <fperez@colorado.edu>
6236 2002-04-22 Fernando Perez <fperez@colorado.edu>
6232
6237
6233 * setup.py: updated dependency list so that manual is updated when
6238 * setup.py: updated dependency list so that manual is updated when
6234 all included files change.
6239 all included files change.
6235
6240
6236 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
6241 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
6237 the delimiter removal option (the fix is ugly right now).
6242 the delimiter removal option (the fix is ugly right now).
6238
6243
6239 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
6244 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
6240 all of the math profile (quicker loading, no conflict between
6245 all of the math profile (quicker loading, no conflict between
6241 g-9.8 and g-gnuplot).
6246 g-9.8 and g-gnuplot).
6242
6247
6243 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
6248 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
6244 name of post-mortem files to IPython_crash_report.txt.
6249 name of post-mortem files to IPython_crash_report.txt.
6245
6250
6246 * Cleanup/update of the docs. Added all the new readline info and
6251 * Cleanup/update of the docs. Added all the new readline info and
6247 formatted all lists as 'real lists'.
6252 formatted all lists as 'real lists'.
6248
6253
6249 * IPython/ipmaker.py (make_IPython): removed now-obsolete
6254 * IPython/ipmaker.py (make_IPython): removed now-obsolete
6250 tab-completion options, since the full readline parse_and_bind is
6255 tab-completion options, since the full readline parse_and_bind is
6251 now accessible.
6256 now accessible.
6252
6257
6253 * IPython/iplib.py (InteractiveShell.init_readline): Changed
6258 * IPython/iplib.py (InteractiveShell.init_readline): Changed
6254 handling of readline options. Now users can specify any string to
6259 handling of readline options. Now users can specify any string to
6255 be passed to parse_and_bind(), as well as the delimiters to be
6260 be passed to parse_and_bind(), as well as the delimiters to be
6256 removed.
6261 removed.
6257 (InteractiveShell.__init__): Added __name__ to the global
6262 (InteractiveShell.__init__): Added __name__ to the global
6258 namespace so that things like Itpl which rely on its existence
6263 namespace so that things like Itpl which rely on its existence
6259 don't crash.
6264 don't crash.
6260 (InteractiveShell._prefilter): Defined the default with a _ so
6265 (InteractiveShell._prefilter): Defined the default with a _ so
6261 that prefilter() is easier to override, while the default one
6266 that prefilter() is easier to override, while the default one
6262 remains available.
6267 remains available.
6263
6268
6264 2002-04-18 Fernando Perez <fperez@colorado.edu>
6269 2002-04-18 Fernando Perez <fperez@colorado.edu>
6265
6270
6266 * Added information about pdb in the docs.
6271 * Added information about pdb in the docs.
6267
6272
6268 2002-04-17 Fernando Perez <fperez@colorado.edu>
6273 2002-04-17 Fernando Perez <fperez@colorado.edu>
6269
6274
6270 * IPython/ipmaker.py (make_IPython): added rc_override option to
6275 * IPython/ipmaker.py (make_IPython): added rc_override option to
6271 allow passing config options at creation time which may override
6276 allow passing config options at creation time which may override
6272 anything set in the config files or command line. This is
6277 anything set in the config files or command line. This is
6273 particularly useful for configuring embedded instances.
6278 particularly useful for configuring embedded instances.
6274
6279
6275 2002-04-15 Fernando Perez <fperez@colorado.edu>
6280 2002-04-15 Fernando Perez <fperez@colorado.edu>
6276
6281
6277 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
6282 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
6278 crash embedded instances because of the input cache falling out of
6283 crash embedded instances because of the input cache falling out of
6279 sync with the output counter.
6284 sync with the output counter.
6280
6285
6281 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
6286 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
6282 mode which calls pdb after an uncaught exception in IPython itself.
6287 mode which calls pdb after an uncaught exception in IPython itself.
6283
6288
6284 2002-04-14 Fernando Perez <fperez@colorado.edu>
6289 2002-04-14 Fernando Perez <fperez@colorado.edu>
6285
6290
6286 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
6291 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
6287 readline, fix it back after each call.
6292 readline, fix it back after each call.
6288
6293
6289 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
6294 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
6290 method to force all access via __call__(), which guarantees that
6295 method to force all access via __call__(), which guarantees that
6291 traceback references are properly deleted.
6296 traceback references are properly deleted.
6292
6297
6293 * IPython/Prompts.py (CachedOutput._display): minor fixes to
6298 * IPython/Prompts.py (CachedOutput._display): minor fixes to
6294 improve printing when pprint is in use.
6299 improve printing when pprint is in use.
6295
6300
6296 2002-04-13 Fernando Perez <fperez@colorado.edu>
6301 2002-04-13 Fernando Perez <fperez@colorado.edu>
6297
6302
6298 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
6303 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
6299 exceptions aren't caught anymore. If the user triggers one, he
6304 exceptions aren't caught anymore. If the user triggers one, he
6300 should know why he's doing it and it should go all the way up,
6305 should know why he's doing it and it should go all the way up,
6301 just like any other exception. So now @abort will fully kill the
6306 just like any other exception. So now @abort will fully kill the
6302 embedded interpreter and the embedding code (unless that happens
6307 embedded interpreter and the embedding code (unless that happens
6303 to catch SystemExit).
6308 to catch SystemExit).
6304
6309
6305 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
6310 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
6306 and a debugger() method to invoke the interactive pdb debugger
6311 and a debugger() method to invoke the interactive pdb debugger
6307 after printing exception information. Also added the corresponding
6312 after printing exception information. Also added the corresponding
6308 -pdb option and @pdb magic to control this feature, and updated
6313 -pdb option and @pdb magic to control this feature, and updated
6309 the docs. After a suggestion from Christopher Hart
6314 the docs. After a suggestion from Christopher Hart
6310 (hart-AT-caltech.edu).
6315 (hart-AT-caltech.edu).
6311
6316
6312 2002-04-12 Fernando Perez <fperez@colorado.edu>
6317 2002-04-12 Fernando Perez <fperez@colorado.edu>
6313
6318
6314 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
6319 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
6315 the exception handlers defined by the user (not the CrashHandler)
6320 the exception handlers defined by the user (not the CrashHandler)
6316 so that user exceptions don't trigger an ipython bug report.
6321 so that user exceptions don't trigger an ipython bug report.
6317
6322
6318 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
6323 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
6319 configurable (it should have always been so).
6324 configurable (it should have always been so).
6320
6325
6321 2002-03-26 Fernando Perez <fperez@colorado.edu>
6326 2002-03-26 Fernando Perez <fperez@colorado.edu>
6322
6327
6323 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
6328 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
6324 and there to fix embedding namespace issues. This should all be
6329 and there to fix embedding namespace issues. This should all be
6325 done in a more elegant way.
6330 done in a more elegant way.
6326
6331
6327 2002-03-25 Fernando Perez <fperez@colorado.edu>
6332 2002-03-25 Fernando Perez <fperez@colorado.edu>
6328
6333
6329 * IPython/genutils.py (get_home_dir): Try to make it work under
6334 * IPython/genutils.py (get_home_dir): Try to make it work under
6330 win9x also.
6335 win9x also.
6331
6336
6332 2002-03-20 Fernando Perez <fperez@colorado.edu>
6337 2002-03-20 Fernando Perez <fperez@colorado.edu>
6333
6338
6334 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
6339 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
6335 sys.displayhook untouched upon __init__.
6340 sys.displayhook untouched upon __init__.
6336
6341
6337 2002-03-19 Fernando Perez <fperez@colorado.edu>
6342 2002-03-19 Fernando Perez <fperez@colorado.edu>
6338
6343
6339 * Released 0.2.9 (for embedding bug, basically).
6344 * Released 0.2.9 (for embedding bug, basically).
6340
6345
6341 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
6346 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
6342 exceptions so that enclosing shell's state can be restored.
6347 exceptions so that enclosing shell's state can be restored.
6343
6348
6344 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
6349 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
6345 naming conventions in the .ipython/ dir.
6350 naming conventions in the .ipython/ dir.
6346
6351
6347 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
6352 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
6348 from delimiters list so filenames with - in them get expanded.
6353 from delimiters list so filenames with - in them get expanded.
6349
6354
6350 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
6355 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
6351 sys.displayhook not being properly restored after an embedded call.
6356 sys.displayhook not being properly restored after an embedded call.
6352
6357
6353 2002-03-18 Fernando Perez <fperez@colorado.edu>
6358 2002-03-18 Fernando Perez <fperez@colorado.edu>
6354
6359
6355 * Released 0.2.8
6360 * Released 0.2.8
6356
6361
6357 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
6362 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
6358 some files weren't being included in a -upgrade.
6363 some files weren't being included in a -upgrade.
6359 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
6364 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
6360 on' so that the first tab completes.
6365 on' so that the first tab completes.
6361 (InteractiveShell.handle_magic): fixed bug with spaces around
6366 (InteractiveShell.handle_magic): fixed bug with spaces around
6362 quotes breaking many magic commands.
6367 quotes breaking many magic commands.
6363
6368
6364 * setup.py: added note about ignoring the syntax error messages at
6369 * setup.py: added note about ignoring the syntax error messages at
6365 installation.
6370 installation.
6366
6371
6367 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
6372 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
6368 streamlining the gnuplot interface, now there's only one magic @gp.
6373 streamlining the gnuplot interface, now there's only one magic @gp.
6369
6374
6370 2002-03-17 Fernando Perez <fperez@colorado.edu>
6375 2002-03-17 Fernando Perez <fperez@colorado.edu>
6371
6376
6372 * IPython/UserConfig/magic_gnuplot.py: new name for the
6377 * IPython/UserConfig/magic_gnuplot.py: new name for the
6373 example-magic_pm.py file. Much enhanced system, now with a shell
6378 example-magic_pm.py file. Much enhanced system, now with a shell
6374 for communicating directly with gnuplot, one command at a time.
6379 for communicating directly with gnuplot, one command at a time.
6375
6380
6376 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
6381 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
6377 setting __name__=='__main__'.
6382 setting __name__=='__main__'.
6378
6383
6379 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
6384 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
6380 mini-shell for accessing gnuplot from inside ipython. Should
6385 mini-shell for accessing gnuplot from inside ipython. Should
6381 extend it later for grace access too. Inspired by Arnd's
6386 extend it later for grace access too. Inspired by Arnd's
6382 suggestion.
6387 suggestion.
6383
6388
6384 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
6389 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
6385 calling magic functions with () in their arguments. Thanks to Arnd
6390 calling magic functions with () in their arguments. Thanks to Arnd
6386 Baecker for pointing this to me.
6391 Baecker for pointing this to me.
6387
6392
6388 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6393 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6389 infinitely for integer or complex arrays (only worked with floats).
6394 infinitely for integer or complex arrays (only worked with floats).
6390
6395
6391 2002-03-16 Fernando Perez <fperez@colorado.edu>
6396 2002-03-16 Fernando Perez <fperez@colorado.edu>
6392
6397
6393 * setup.py: Merged setup and setup_windows into a single script
6398 * setup.py: Merged setup and setup_windows into a single script
6394 which properly handles things for windows users.
6399 which properly handles things for windows users.
6395
6400
6396 2002-03-15 Fernando Perez <fperez@colorado.edu>
6401 2002-03-15 Fernando Perez <fperez@colorado.edu>
6397
6402
6398 * Big change to the manual: now the magics are all automatically
6403 * Big change to the manual: now the magics are all automatically
6399 documented. This information is generated from their docstrings
6404 documented. This information is generated from their docstrings
6400 and put in a latex file included by the manual lyx file. This way
6405 and put in a latex file included by the manual lyx file. This way
6401 we get always up to date information for the magics. The manual
6406 we get always up to date information for the magics. The manual
6402 now also has proper version information, also auto-synced.
6407 now also has proper version information, also auto-synced.
6403
6408
6404 For this to work, an undocumented --magic_docstrings option was added.
6409 For this to work, an undocumented --magic_docstrings option was added.
6405
6410
6406 2002-03-13 Fernando Perez <fperez@colorado.edu>
6411 2002-03-13 Fernando Perez <fperez@colorado.edu>
6407
6412
6408 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6413 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6409 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6414 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6410
6415
6411 2002-03-12 Fernando Perez <fperez@colorado.edu>
6416 2002-03-12 Fernando Perez <fperez@colorado.edu>
6412
6417
6413 * IPython/ultraTB.py (TermColors): changed color escapes again to
6418 * IPython/ultraTB.py (TermColors): changed color escapes again to
6414 fix the (old, reintroduced) line-wrapping bug. Basically, if
6419 fix the (old, reintroduced) line-wrapping bug. Basically, if
6415 \001..\002 aren't given in the color escapes, lines get wrapped
6420 \001..\002 aren't given in the color escapes, lines get wrapped
6416 weirdly. But giving those screws up old xterms and emacs terms. So
6421 weirdly. But giving those screws up old xterms and emacs terms. So
6417 I added some logic for emacs terms to be ok, but I can't identify old
6422 I added some logic for emacs terms to be ok, but I can't identify old
6418 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6423 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6419
6424
6420 2002-03-10 Fernando Perez <fperez@colorado.edu>
6425 2002-03-10 Fernando Perez <fperez@colorado.edu>
6421
6426
6422 * IPython/usage.py (__doc__): Various documentation cleanups and
6427 * IPython/usage.py (__doc__): Various documentation cleanups and
6423 updates, both in usage docstrings and in the manual.
6428 updates, both in usage docstrings and in the manual.
6424
6429
6425 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6430 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6426 handling of caching. Set minimum acceptabe value for having a
6431 handling of caching. Set minimum acceptabe value for having a
6427 cache at 20 values.
6432 cache at 20 values.
6428
6433
6429 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6434 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6430 install_first_time function to a method, renamed it and added an
6435 install_first_time function to a method, renamed it and added an
6431 'upgrade' mode. Now people can update their config directory with
6436 'upgrade' mode. Now people can update their config directory with
6432 a simple command line switch (-upgrade, also new).
6437 a simple command line switch (-upgrade, also new).
6433
6438
6434 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6439 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6435 @file (convenient for automagic users under Python >= 2.2).
6440 @file (convenient for automagic users under Python >= 2.2).
6436 Removed @files (it seemed more like a plural than an abbrev. of
6441 Removed @files (it seemed more like a plural than an abbrev. of
6437 'file show').
6442 'file show').
6438
6443
6439 * IPython/iplib.py (install_first_time): Fixed crash if there were
6444 * IPython/iplib.py (install_first_time): Fixed crash if there were
6440 backup files ('~') in .ipython/ install directory.
6445 backup files ('~') in .ipython/ install directory.
6441
6446
6442 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6447 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6443 system. Things look fine, but these changes are fairly
6448 system. Things look fine, but these changes are fairly
6444 intrusive. Test them for a few days.
6449 intrusive. Test them for a few days.
6445
6450
6446 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6451 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6447 the prompts system. Now all in/out prompt strings are user
6452 the prompts system. Now all in/out prompt strings are user
6448 controllable. This is particularly useful for embedding, as one
6453 controllable. This is particularly useful for embedding, as one
6449 can tag embedded instances with particular prompts.
6454 can tag embedded instances with particular prompts.
6450
6455
6451 Also removed global use of sys.ps1/2, which now allows nested
6456 Also removed global use of sys.ps1/2, which now allows nested
6452 embeddings without any problems. Added command-line options for
6457 embeddings without any problems. Added command-line options for
6453 the prompt strings.
6458 the prompt strings.
6454
6459
6455 2002-03-08 Fernando Perez <fperez@colorado.edu>
6460 2002-03-08 Fernando Perez <fperez@colorado.edu>
6456
6461
6457 * IPython/UserConfig/example-embed-short.py (ipshell): added
6462 * IPython/UserConfig/example-embed-short.py (ipshell): added
6458 example file with the bare minimum code for embedding.
6463 example file with the bare minimum code for embedding.
6459
6464
6460 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6465 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6461 functionality for the embeddable shell to be activated/deactivated
6466 functionality for the embeddable shell to be activated/deactivated
6462 either globally or at each call.
6467 either globally or at each call.
6463
6468
6464 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6469 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6465 rewriting the prompt with '--->' for auto-inputs with proper
6470 rewriting the prompt with '--->' for auto-inputs with proper
6466 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6471 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6467 this is handled by the prompts class itself, as it should.
6472 this is handled by the prompts class itself, as it should.
6468
6473
6469 2002-03-05 Fernando Perez <fperez@colorado.edu>
6474 2002-03-05 Fernando Perez <fperez@colorado.edu>
6470
6475
6471 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6476 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6472 @logstart to avoid name clashes with the math log function.
6477 @logstart to avoid name clashes with the math log function.
6473
6478
6474 * Big updates to X/Emacs section of the manual.
6479 * Big updates to X/Emacs section of the manual.
6475
6480
6476 * Removed ipython_emacs. Milan explained to me how to pass
6481 * Removed ipython_emacs. Milan explained to me how to pass
6477 arguments to ipython through Emacs. Some day I'm going to end up
6482 arguments to ipython through Emacs. Some day I'm going to end up
6478 learning some lisp...
6483 learning some lisp...
6479
6484
6480 2002-03-04 Fernando Perez <fperez@colorado.edu>
6485 2002-03-04 Fernando Perez <fperez@colorado.edu>
6481
6486
6482 * IPython/ipython_emacs: Created script to be used as the
6487 * IPython/ipython_emacs: Created script to be used as the
6483 py-python-command Emacs variable so we can pass IPython
6488 py-python-command Emacs variable so we can pass IPython
6484 parameters. I can't figure out how to tell Emacs directly to pass
6489 parameters. I can't figure out how to tell Emacs directly to pass
6485 parameters to IPython, so a dummy shell script will do it.
6490 parameters to IPython, so a dummy shell script will do it.
6486
6491
6487 Other enhancements made for things to work better under Emacs'
6492 Other enhancements made for things to work better under Emacs'
6488 various types of terminals. Many thanks to Milan Zamazal
6493 various types of terminals. Many thanks to Milan Zamazal
6489 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6494 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6490
6495
6491 2002-03-01 Fernando Perez <fperez@colorado.edu>
6496 2002-03-01 Fernando Perez <fperez@colorado.edu>
6492
6497
6493 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6498 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6494 that loading of readline is now optional. This gives better
6499 that loading of readline is now optional. This gives better
6495 control to emacs users.
6500 control to emacs users.
6496
6501
6497 * IPython/ultraTB.py (__date__): Modified color escape sequences
6502 * IPython/ultraTB.py (__date__): Modified color escape sequences
6498 and now things work fine under xterm and in Emacs' term buffers
6503 and now things work fine under xterm and in Emacs' term buffers
6499 (though not shell ones). Well, in emacs you get colors, but all
6504 (though not shell ones). Well, in emacs you get colors, but all
6500 seem to be 'light' colors (no difference between dark and light
6505 seem to be 'light' colors (no difference between dark and light
6501 ones). But the garbage chars are gone, and also in xterms. It
6506 ones). But the garbage chars are gone, and also in xterms. It
6502 seems that now I'm using 'cleaner' ansi sequences.
6507 seems that now I'm using 'cleaner' ansi sequences.
6503
6508
6504 2002-02-21 Fernando Perez <fperez@colorado.edu>
6509 2002-02-21 Fernando Perez <fperez@colorado.edu>
6505
6510
6506 * Released 0.2.7 (mainly to publish the scoping fix).
6511 * Released 0.2.7 (mainly to publish the scoping fix).
6507
6512
6508 * IPython/Logger.py (Logger.logstate): added. A corresponding
6513 * IPython/Logger.py (Logger.logstate): added. A corresponding
6509 @logstate magic was created.
6514 @logstate magic was created.
6510
6515
6511 * IPython/Magic.py: fixed nested scoping problem under Python
6516 * IPython/Magic.py: fixed nested scoping problem under Python
6512 2.1.x (automagic wasn't working).
6517 2.1.x (automagic wasn't working).
6513
6518
6514 2002-02-20 Fernando Perez <fperez@colorado.edu>
6519 2002-02-20 Fernando Perez <fperez@colorado.edu>
6515
6520
6516 * Released 0.2.6.
6521 * Released 0.2.6.
6517
6522
6518 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6523 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6519 option so that logs can come out without any headers at all.
6524 option so that logs can come out without any headers at all.
6520
6525
6521 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6526 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6522 SciPy.
6527 SciPy.
6523
6528
6524 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6529 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6525 that embedded IPython calls don't require vars() to be explicitly
6530 that embedded IPython calls don't require vars() to be explicitly
6526 passed. Now they are extracted from the caller's frame (code
6531 passed. Now they are extracted from the caller's frame (code
6527 snatched from Eric Jones' weave). Added better documentation to
6532 snatched from Eric Jones' weave). Added better documentation to
6528 the section on embedding and the example file.
6533 the section on embedding and the example file.
6529
6534
6530 * IPython/genutils.py (page): Changed so that under emacs, it just
6535 * IPython/genutils.py (page): Changed so that under emacs, it just
6531 prints the string. You can then page up and down in the emacs
6536 prints the string. You can then page up and down in the emacs
6532 buffer itself. This is how the builtin help() works.
6537 buffer itself. This is how the builtin help() works.
6533
6538
6534 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6539 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6535 macro scoping: macros need to be executed in the user's namespace
6540 macro scoping: macros need to be executed in the user's namespace
6536 to work as if they had been typed by the user.
6541 to work as if they had been typed by the user.
6537
6542
6538 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6543 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6539 execute automatically (no need to type 'exec...'). They then
6544 execute automatically (no need to type 'exec...'). They then
6540 behave like 'true macros'. The printing system was also modified
6545 behave like 'true macros'. The printing system was also modified
6541 for this to work.
6546 for this to work.
6542
6547
6543 2002-02-19 Fernando Perez <fperez@colorado.edu>
6548 2002-02-19 Fernando Perez <fperez@colorado.edu>
6544
6549
6545 * IPython/genutils.py (page_file): new function for paging files
6550 * IPython/genutils.py (page_file): new function for paging files
6546 in an OS-independent way. Also necessary for file viewing to work
6551 in an OS-independent way. Also necessary for file viewing to work
6547 well inside Emacs buffers.
6552 well inside Emacs buffers.
6548 (page): Added checks for being in an emacs buffer.
6553 (page): Added checks for being in an emacs buffer.
6549 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6554 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6550 same bug in iplib.
6555 same bug in iplib.
6551
6556
6552 2002-02-18 Fernando Perez <fperez@colorado.edu>
6557 2002-02-18 Fernando Perez <fperez@colorado.edu>
6553
6558
6554 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6559 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6555 of readline so that IPython can work inside an Emacs buffer.
6560 of readline so that IPython can work inside an Emacs buffer.
6556
6561
6557 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6562 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6558 method signatures (they weren't really bugs, but it looks cleaner
6563 method signatures (they weren't really bugs, but it looks cleaner
6559 and keeps PyChecker happy).
6564 and keeps PyChecker happy).
6560
6565
6561 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6566 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6562 for implementing various user-defined hooks. Currently only
6567 for implementing various user-defined hooks. Currently only
6563 display is done.
6568 display is done.
6564
6569
6565 * IPython/Prompts.py (CachedOutput._display): changed display
6570 * IPython/Prompts.py (CachedOutput._display): changed display
6566 functions so that they can be dynamically changed by users easily.
6571 functions so that they can be dynamically changed by users easily.
6567
6572
6568 * IPython/Extensions/numeric_formats.py (num_display): added an
6573 * IPython/Extensions/numeric_formats.py (num_display): added an
6569 extension for printing NumPy arrays in flexible manners. It
6574 extension for printing NumPy arrays in flexible manners. It
6570 doesn't do anything yet, but all the structure is in
6575 doesn't do anything yet, but all the structure is in
6571 place. Ultimately the plan is to implement output format control
6576 place. Ultimately the plan is to implement output format control
6572 like in Octave.
6577 like in Octave.
6573
6578
6574 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6579 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6575 methods are found at run-time by all the automatic machinery.
6580 methods are found at run-time by all the automatic machinery.
6576
6581
6577 2002-02-17 Fernando Perez <fperez@colorado.edu>
6582 2002-02-17 Fernando Perez <fperez@colorado.edu>
6578
6583
6579 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6584 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6580 whole file a little.
6585 whole file a little.
6581
6586
6582 * ToDo: closed this document. Now there's a new_design.lyx
6587 * ToDo: closed this document. Now there's a new_design.lyx
6583 document for all new ideas. Added making a pdf of it for the
6588 document for all new ideas. Added making a pdf of it for the
6584 end-user distro.
6589 end-user distro.
6585
6590
6586 * IPython/Logger.py (Logger.switch_log): Created this to replace
6591 * IPython/Logger.py (Logger.switch_log): Created this to replace
6587 logon() and logoff(). It also fixes a nasty crash reported by
6592 logon() and logoff(). It also fixes a nasty crash reported by
6588 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6593 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6589
6594
6590 * IPython/iplib.py (complete): got auto-completion to work with
6595 * IPython/iplib.py (complete): got auto-completion to work with
6591 automagic (I had wanted this for a long time).
6596 automagic (I had wanted this for a long time).
6592
6597
6593 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6598 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6594 to @file, since file() is now a builtin and clashes with automagic
6599 to @file, since file() is now a builtin and clashes with automagic
6595 for @file.
6600 for @file.
6596
6601
6597 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6602 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6598 of this was previously in iplib, which had grown to more than 2000
6603 of this was previously in iplib, which had grown to more than 2000
6599 lines, way too long. No new functionality, but it makes managing
6604 lines, way too long. No new functionality, but it makes managing
6600 the code a bit easier.
6605 the code a bit easier.
6601
6606
6602 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6607 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6603 information to crash reports.
6608 information to crash reports.
6604
6609
6605 2002-02-12 Fernando Perez <fperez@colorado.edu>
6610 2002-02-12 Fernando Perez <fperez@colorado.edu>
6606
6611
6607 * Released 0.2.5.
6612 * Released 0.2.5.
6608
6613
6609 2002-02-11 Fernando Perez <fperez@colorado.edu>
6614 2002-02-11 Fernando Perez <fperez@colorado.edu>
6610
6615
6611 * Wrote a relatively complete Windows installer. It puts
6616 * Wrote a relatively complete Windows installer. It puts
6612 everything in place, creates Start Menu entries and fixes the
6617 everything in place, creates Start Menu entries and fixes the
6613 color issues. Nothing fancy, but it works.
6618 color issues. Nothing fancy, but it works.
6614
6619
6615 2002-02-10 Fernando Perez <fperez@colorado.edu>
6620 2002-02-10 Fernando Perez <fperez@colorado.edu>
6616
6621
6617 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6622 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6618 os.path.expanduser() call so that we can type @run ~/myfile.py and
6623 os.path.expanduser() call so that we can type @run ~/myfile.py and
6619 have thigs work as expected.
6624 have thigs work as expected.
6620
6625
6621 * IPython/genutils.py (page): fixed exception handling so things
6626 * IPython/genutils.py (page): fixed exception handling so things
6622 work both in Unix and Windows correctly. Quitting a pager triggers
6627 work both in Unix and Windows correctly. Quitting a pager triggers
6623 an IOError/broken pipe in Unix, and in windows not finding a pager
6628 an IOError/broken pipe in Unix, and in windows not finding a pager
6624 is also an IOError, so I had to actually look at the return value
6629 is also an IOError, so I had to actually look at the return value
6625 of the exception, not just the exception itself. Should be ok now.
6630 of the exception, not just the exception itself. Should be ok now.
6626
6631
6627 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6632 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6628 modified to allow case-insensitive color scheme changes.
6633 modified to allow case-insensitive color scheme changes.
6629
6634
6630 2002-02-09 Fernando Perez <fperez@colorado.edu>
6635 2002-02-09 Fernando Perez <fperez@colorado.edu>
6631
6636
6632 * IPython/genutils.py (native_line_ends): new function to leave
6637 * IPython/genutils.py (native_line_ends): new function to leave
6633 user config files with os-native line-endings.
6638 user config files with os-native line-endings.
6634
6639
6635 * README and manual updates.
6640 * README and manual updates.
6636
6641
6637 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6642 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6638 instead of StringType to catch Unicode strings.
6643 instead of StringType to catch Unicode strings.
6639
6644
6640 * IPython/genutils.py (filefind): fixed bug for paths with
6645 * IPython/genutils.py (filefind): fixed bug for paths with
6641 embedded spaces (very common in Windows).
6646 embedded spaces (very common in Windows).
6642
6647
6643 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6648 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6644 files under Windows, so that they get automatically associated
6649 files under Windows, so that they get automatically associated
6645 with a text editor. Windows makes it a pain to handle
6650 with a text editor. Windows makes it a pain to handle
6646 extension-less files.
6651 extension-less files.
6647
6652
6648 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6653 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6649 warning about readline only occur for Posix. In Windows there's no
6654 warning about readline only occur for Posix. In Windows there's no
6650 way to get readline, so why bother with the warning.
6655 way to get readline, so why bother with the warning.
6651
6656
6652 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6657 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6653 for __str__ instead of dir(self), since dir() changed in 2.2.
6658 for __str__ instead of dir(self), since dir() changed in 2.2.
6654
6659
6655 * Ported to Windows! Tested on XP, I suspect it should work fine
6660 * Ported to Windows! Tested on XP, I suspect it should work fine
6656 on NT/2000, but I don't think it will work on 98 et al. That
6661 on NT/2000, but I don't think it will work on 98 et al. That
6657 series of Windows is such a piece of junk anyway that I won't try
6662 series of Windows is such a piece of junk anyway that I won't try
6658 porting it there. The XP port was straightforward, showed a few
6663 porting it there. The XP port was straightforward, showed a few
6659 bugs here and there (fixed all), in particular some string
6664 bugs here and there (fixed all), in particular some string
6660 handling stuff which required considering Unicode strings (which
6665 handling stuff which required considering Unicode strings (which
6661 Windows uses). This is good, but hasn't been too tested :) No
6666 Windows uses). This is good, but hasn't been too tested :) No
6662 fancy installer yet, I'll put a note in the manual so people at
6667 fancy installer yet, I'll put a note in the manual so people at
6663 least make manually a shortcut.
6668 least make manually a shortcut.
6664
6669
6665 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6670 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6666 into a single one, "colors". This now controls both prompt and
6671 into a single one, "colors". This now controls both prompt and
6667 exception color schemes, and can be changed both at startup
6672 exception color schemes, and can be changed both at startup
6668 (either via command-line switches or via ipythonrc files) and at
6673 (either via command-line switches or via ipythonrc files) and at
6669 runtime, with @colors.
6674 runtime, with @colors.
6670 (Magic.magic_run): renamed @prun to @run and removed the old
6675 (Magic.magic_run): renamed @prun to @run and removed the old
6671 @run. The two were too similar to warrant keeping both.
6676 @run. The two were too similar to warrant keeping both.
6672
6677
6673 2002-02-03 Fernando Perez <fperez@colorado.edu>
6678 2002-02-03 Fernando Perez <fperez@colorado.edu>
6674
6679
6675 * IPython/iplib.py (install_first_time): Added comment on how to
6680 * IPython/iplib.py (install_first_time): Added comment on how to
6676 configure the color options for first-time users. Put a <return>
6681 configure the color options for first-time users. Put a <return>
6677 request at the end so that small-terminal users get a chance to
6682 request at the end so that small-terminal users get a chance to
6678 read the startup info.
6683 read the startup info.
6679
6684
6680 2002-01-23 Fernando Perez <fperez@colorado.edu>
6685 2002-01-23 Fernando Perez <fperez@colorado.edu>
6681
6686
6682 * IPython/iplib.py (CachedOutput.update): Changed output memory
6687 * IPython/iplib.py (CachedOutput.update): Changed output memory
6683 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6688 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6684 input history we still use _i. Did this b/c these variable are
6689 input history we still use _i. Did this b/c these variable are
6685 very commonly used in interactive work, so the less we need to
6690 very commonly used in interactive work, so the less we need to
6686 type the better off we are.
6691 type the better off we are.
6687 (Magic.magic_prun): updated @prun to better handle the namespaces
6692 (Magic.magic_prun): updated @prun to better handle the namespaces
6688 the file will run in, including a fix for __name__ not being set
6693 the file will run in, including a fix for __name__ not being set
6689 before.
6694 before.
6690
6695
6691 2002-01-20 Fernando Perez <fperez@colorado.edu>
6696 2002-01-20 Fernando Perez <fperez@colorado.edu>
6692
6697
6693 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6698 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6694 extra garbage for Python 2.2. Need to look more carefully into
6699 extra garbage for Python 2.2. Need to look more carefully into
6695 this later.
6700 this later.
6696
6701
6697 2002-01-19 Fernando Perez <fperez@colorado.edu>
6702 2002-01-19 Fernando Perez <fperez@colorado.edu>
6698
6703
6699 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6704 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6700 display SyntaxError exceptions properly formatted when they occur
6705 display SyntaxError exceptions properly formatted when they occur
6701 (they can be triggered by imported code).
6706 (they can be triggered by imported code).
6702
6707
6703 2002-01-18 Fernando Perez <fperez@colorado.edu>
6708 2002-01-18 Fernando Perez <fperez@colorado.edu>
6704
6709
6705 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6710 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6706 SyntaxError exceptions are reported nicely formatted, instead of
6711 SyntaxError exceptions are reported nicely formatted, instead of
6707 spitting out only offset information as before.
6712 spitting out only offset information as before.
6708 (Magic.magic_prun): Added the @prun function for executing
6713 (Magic.magic_prun): Added the @prun function for executing
6709 programs with command line args inside IPython.
6714 programs with command line args inside IPython.
6710
6715
6711 2002-01-16 Fernando Perez <fperez@colorado.edu>
6716 2002-01-16 Fernando Perez <fperez@colorado.edu>
6712
6717
6713 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6718 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6714 to *not* include the last item given in a range. This brings their
6719 to *not* include the last item given in a range. This brings their
6715 behavior in line with Python's slicing:
6720 behavior in line with Python's slicing:
6716 a[n1:n2] -> a[n1]...a[n2-1]
6721 a[n1:n2] -> a[n1]...a[n2-1]
6717 It may be a bit less convenient, but I prefer to stick to Python's
6722 It may be a bit less convenient, but I prefer to stick to Python's
6718 conventions *everywhere*, so users never have to wonder.
6723 conventions *everywhere*, so users never have to wonder.
6719 (Magic.magic_macro): Added @macro function to ease the creation of
6724 (Magic.magic_macro): Added @macro function to ease the creation of
6720 macros.
6725 macros.
6721
6726
6722 2002-01-05 Fernando Perez <fperez@colorado.edu>
6727 2002-01-05 Fernando Perez <fperez@colorado.edu>
6723
6728
6724 * Released 0.2.4.
6729 * Released 0.2.4.
6725
6730
6726 * IPython/iplib.py (Magic.magic_pdef):
6731 * IPython/iplib.py (Magic.magic_pdef):
6727 (InteractiveShell.safe_execfile): report magic lines and error
6732 (InteractiveShell.safe_execfile): report magic lines and error
6728 lines without line numbers so one can easily copy/paste them for
6733 lines without line numbers so one can easily copy/paste them for
6729 re-execution.
6734 re-execution.
6730
6735
6731 * Updated manual with recent changes.
6736 * Updated manual with recent changes.
6732
6737
6733 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6738 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6734 docstring printing when class? is called. Very handy for knowing
6739 docstring printing when class? is called. Very handy for knowing
6735 how to create class instances (as long as __init__ is well
6740 how to create class instances (as long as __init__ is well
6736 documented, of course :)
6741 documented, of course :)
6737 (Magic.magic_doc): print both class and constructor docstrings.
6742 (Magic.magic_doc): print both class and constructor docstrings.
6738 (Magic.magic_pdef): give constructor info if passed a class and
6743 (Magic.magic_pdef): give constructor info if passed a class and
6739 __call__ info for callable object instances.
6744 __call__ info for callable object instances.
6740
6745
6741 2002-01-04 Fernando Perez <fperez@colorado.edu>
6746 2002-01-04 Fernando Perez <fperez@colorado.edu>
6742
6747
6743 * Made deep_reload() off by default. It doesn't always work
6748 * Made deep_reload() off by default. It doesn't always work
6744 exactly as intended, so it's probably safer to have it off. It's
6749 exactly as intended, so it's probably safer to have it off. It's
6745 still available as dreload() anyway, so nothing is lost.
6750 still available as dreload() anyway, so nothing is lost.
6746
6751
6747 2002-01-02 Fernando Perez <fperez@colorado.edu>
6752 2002-01-02 Fernando Perez <fperez@colorado.edu>
6748
6753
6749 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6754 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6750 so I wanted an updated release).
6755 so I wanted an updated release).
6751
6756
6752 2001-12-27 Fernando Perez <fperez@colorado.edu>
6757 2001-12-27 Fernando Perez <fperez@colorado.edu>
6753
6758
6754 * IPython/iplib.py (InteractiveShell.interact): Added the original
6759 * IPython/iplib.py (InteractiveShell.interact): Added the original
6755 code from 'code.py' for this module in order to change the
6760 code from 'code.py' for this module in order to change the
6756 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6761 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6757 the history cache would break when the user hit Ctrl-C, and
6762 the history cache would break when the user hit Ctrl-C, and
6758 interact() offers no way to add any hooks to it.
6763 interact() offers no way to add any hooks to it.
6759
6764
6760 2001-12-23 Fernando Perez <fperez@colorado.edu>
6765 2001-12-23 Fernando Perez <fperez@colorado.edu>
6761
6766
6762 * setup.py: added check for 'MANIFEST' before trying to remove
6767 * setup.py: added check for 'MANIFEST' before trying to remove
6763 it. Thanks to Sean Reifschneider.
6768 it. Thanks to Sean Reifschneider.
6764
6769
6765 2001-12-22 Fernando Perez <fperez@colorado.edu>
6770 2001-12-22 Fernando Perez <fperez@colorado.edu>
6766
6771
6767 * Released 0.2.2.
6772 * Released 0.2.2.
6768
6773
6769 * Finished (reasonably) writing the manual. Later will add the
6774 * Finished (reasonably) writing the manual. Later will add the
6770 python-standard navigation stylesheets, but for the time being
6775 python-standard navigation stylesheets, but for the time being
6771 it's fairly complete. Distribution will include html and pdf
6776 it's fairly complete. Distribution will include html and pdf
6772 versions.
6777 versions.
6773
6778
6774 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6779 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6775 (MayaVi author).
6780 (MayaVi author).
6776
6781
6777 2001-12-21 Fernando Perez <fperez@colorado.edu>
6782 2001-12-21 Fernando Perez <fperez@colorado.edu>
6778
6783
6779 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6784 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6780 good public release, I think (with the manual and the distutils
6785 good public release, I think (with the manual and the distutils
6781 installer). The manual can use some work, but that can go
6786 installer). The manual can use some work, but that can go
6782 slowly. Otherwise I think it's quite nice for end users. Next
6787 slowly. Otherwise I think it's quite nice for end users. Next
6783 summer, rewrite the guts of it...
6788 summer, rewrite the guts of it...
6784
6789
6785 * Changed format of ipythonrc files to use whitespace as the
6790 * Changed format of ipythonrc files to use whitespace as the
6786 separator instead of an explicit '='. Cleaner.
6791 separator instead of an explicit '='. Cleaner.
6787
6792
6788 2001-12-20 Fernando Perez <fperez@colorado.edu>
6793 2001-12-20 Fernando Perez <fperez@colorado.edu>
6789
6794
6790 * Started a manual in LyX. For now it's just a quick merge of the
6795 * Started a manual in LyX. For now it's just a quick merge of the
6791 various internal docstrings and READMEs. Later it may grow into a
6796 various internal docstrings and READMEs. Later it may grow into a
6792 nice, full-blown manual.
6797 nice, full-blown manual.
6793
6798
6794 * Set up a distutils based installer. Installation should now be
6799 * Set up a distutils based installer. Installation should now be
6795 trivially simple for end-users.
6800 trivially simple for end-users.
6796
6801
6797 2001-12-11 Fernando Perez <fperez@colorado.edu>
6802 2001-12-11 Fernando Perez <fperez@colorado.edu>
6798
6803
6799 * Released 0.2.0. First public release, announced it at
6804 * Released 0.2.0. First public release, announced it at
6800 comp.lang.python. From now on, just bugfixes...
6805 comp.lang.python. From now on, just bugfixes...
6801
6806
6802 * Went through all the files, set copyright/license notices and
6807 * Went through all the files, set copyright/license notices and
6803 cleaned up things. Ready for release.
6808 cleaned up things. Ready for release.
6804
6809
6805 2001-12-10 Fernando Perez <fperez@colorado.edu>
6810 2001-12-10 Fernando Perez <fperez@colorado.edu>
6806
6811
6807 * Changed the first-time installer not to use tarfiles. It's more
6812 * Changed the first-time installer not to use tarfiles. It's more
6808 robust now and less unix-dependent. Also makes it easier for
6813 robust now and less unix-dependent. Also makes it easier for
6809 people to later upgrade versions.
6814 people to later upgrade versions.
6810
6815
6811 * Changed @exit to @abort to reflect the fact that it's pretty
6816 * Changed @exit to @abort to reflect the fact that it's pretty
6812 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6817 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6813 becomes significant only when IPyhton is embedded: in that case,
6818 becomes significant only when IPyhton is embedded: in that case,
6814 C-D closes IPython only, but @abort kills the enclosing program
6819 C-D closes IPython only, but @abort kills the enclosing program
6815 too (unless it had called IPython inside a try catching
6820 too (unless it had called IPython inside a try catching
6816 SystemExit).
6821 SystemExit).
6817
6822
6818 * Created Shell module which exposes the actuall IPython Shell
6823 * Created Shell module which exposes the actuall IPython Shell
6819 classes, currently the normal and the embeddable one. This at
6824 classes, currently the normal and the embeddable one. This at
6820 least offers a stable interface we won't need to change when
6825 least offers a stable interface we won't need to change when
6821 (later) the internals are rewritten. That rewrite will be confined
6826 (later) the internals are rewritten. That rewrite will be confined
6822 to iplib and ipmaker, but the Shell interface should remain as is.
6827 to iplib and ipmaker, but the Shell interface should remain as is.
6823
6828
6824 * Added embed module which offers an embeddable IPShell object,
6829 * Added embed module which offers an embeddable IPShell object,
6825 useful to fire up IPython *inside* a running program. Great for
6830 useful to fire up IPython *inside* a running program. Great for
6826 debugging or dynamical data analysis.
6831 debugging or dynamical data analysis.
6827
6832
6828 2001-12-08 Fernando Perez <fperez@colorado.edu>
6833 2001-12-08 Fernando Perez <fperez@colorado.edu>
6829
6834
6830 * Fixed small bug preventing seeing info from methods of defined
6835 * Fixed small bug preventing seeing info from methods of defined
6831 objects (incorrect namespace in _ofind()).
6836 objects (incorrect namespace in _ofind()).
6832
6837
6833 * Documentation cleanup. Moved the main usage docstrings to a
6838 * Documentation cleanup. Moved the main usage docstrings to a
6834 separate file, usage.py (cleaner to maintain, and hopefully in the
6839 separate file, usage.py (cleaner to maintain, and hopefully in the
6835 future some perlpod-like way of producing interactive, man and
6840 future some perlpod-like way of producing interactive, man and
6836 html docs out of it will be found).
6841 html docs out of it will be found).
6837
6842
6838 * Added @profile to see your profile at any time.
6843 * Added @profile to see your profile at any time.
6839
6844
6840 * Added @p as an alias for 'print'. It's especially convenient if
6845 * Added @p as an alias for 'print'. It's especially convenient if
6841 using automagic ('p x' prints x).
6846 using automagic ('p x' prints x).
6842
6847
6843 * Small cleanups and fixes after a pychecker run.
6848 * Small cleanups and fixes after a pychecker run.
6844
6849
6845 * Changed the @cd command to handle @cd - and @cd -<n> for
6850 * Changed the @cd command to handle @cd - and @cd -<n> for
6846 visiting any directory in _dh.
6851 visiting any directory in _dh.
6847
6852
6848 * Introduced _dh, a history of visited directories. @dhist prints
6853 * Introduced _dh, a history of visited directories. @dhist prints
6849 it out with numbers.
6854 it out with numbers.
6850
6855
6851 2001-12-07 Fernando Perez <fperez@colorado.edu>
6856 2001-12-07 Fernando Perez <fperez@colorado.edu>
6852
6857
6853 * Released 0.1.22
6858 * Released 0.1.22
6854
6859
6855 * Made initialization a bit more robust against invalid color
6860 * Made initialization a bit more robust against invalid color
6856 options in user input (exit, not traceback-crash).
6861 options in user input (exit, not traceback-crash).
6857
6862
6858 * Changed the bug crash reporter to write the report only in the
6863 * Changed the bug crash reporter to write the report only in the
6859 user's .ipython directory. That way IPython won't litter people's
6864 user's .ipython directory. That way IPython won't litter people's
6860 hard disks with crash files all over the place. Also print on
6865 hard disks with crash files all over the place. Also print on
6861 screen the necessary mail command.
6866 screen the necessary mail command.
6862
6867
6863 * With the new ultraTB, implemented LightBG color scheme for light
6868 * With the new ultraTB, implemented LightBG color scheme for light
6864 background terminals. A lot of people like white backgrounds, so I
6869 background terminals. A lot of people like white backgrounds, so I
6865 guess we should at least give them something readable.
6870 guess we should at least give them something readable.
6866
6871
6867 2001-12-06 Fernando Perez <fperez@colorado.edu>
6872 2001-12-06 Fernando Perez <fperez@colorado.edu>
6868
6873
6869 * Modified the structure of ultraTB. Now there's a proper class
6874 * Modified the structure of ultraTB. Now there's a proper class
6870 for tables of color schemes which allow adding schemes easily and
6875 for tables of color schemes which allow adding schemes easily and
6871 switching the active scheme without creating a new instance every
6876 switching the active scheme without creating a new instance every
6872 time (which was ridiculous). The syntax for creating new schemes
6877 time (which was ridiculous). The syntax for creating new schemes
6873 is also cleaner. I think ultraTB is finally done, with a clean
6878 is also cleaner. I think ultraTB is finally done, with a clean
6874 class structure. Names are also much cleaner (now there's proper
6879 class structure. Names are also much cleaner (now there's proper
6875 color tables, no need for every variable to also have 'color' in
6880 color tables, no need for every variable to also have 'color' in
6876 its name).
6881 its name).
6877
6882
6878 * Broke down genutils into separate files. Now genutils only
6883 * Broke down genutils into separate files. Now genutils only
6879 contains utility functions, and classes have been moved to their
6884 contains utility functions, and classes have been moved to their
6880 own files (they had enough independent functionality to warrant
6885 own files (they had enough independent functionality to warrant
6881 it): ConfigLoader, OutputTrap, Struct.
6886 it): ConfigLoader, OutputTrap, Struct.
6882
6887
6883 2001-12-05 Fernando Perez <fperez@colorado.edu>
6888 2001-12-05 Fernando Perez <fperez@colorado.edu>
6884
6889
6885 * IPython turns 21! Released version 0.1.21, as a candidate for
6890 * IPython turns 21! Released version 0.1.21, as a candidate for
6886 public consumption. If all goes well, release in a few days.
6891 public consumption. If all goes well, release in a few days.
6887
6892
6888 * Fixed path bug (files in Extensions/ directory wouldn't be found
6893 * Fixed path bug (files in Extensions/ directory wouldn't be found
6889 unless IPython/ was explicitly in sys.path).
6894 unless IPython/ was explicitly in sys.path).
6890
6895
6891 * Extended the FlexCompleter class as MagicCompleter to allow
6896 * Extended the FlexCompleter class as MagicCompleter to allow
6892 completion of @-starting lines.
6897 completion of @-starting lines.
6893
6898
6894 * Created __release__.py file as a central repository for release
6899 * Created __release__.py file as a central repository for release
6895 info that other files can read from.
6900 info that other files can read from.
6896
6901
6897 * Fixed small bug in logging: when logging was turned on in
6902 * Fixed small bug in logging: when logging was turned on in
6898 mid-session, old lines with special meanings (!@?) were being
6903 mid-session, old lines with special meanings (!@?) were being
6899 logged without the prepended comment, which is necessary since
6904 logged without the prepended comment, which is necessary since
6900 they are not truly valid python syntax. This should make session
6905 they are not truly valid python syntax. This should make session
6901 restores produce less errors.
6906 restores produce less errors.
6902
6907
6903 * The namespace cleanup forced me to make a FlexCompleter class
6908 * The namespace cleanup forced me to make a FlexCompleter class
6904 which is nothing but a ripoff of rlcompleter, but with selectable
6909 which is nothing but a ripoff of rlcompleter, but with selectable
6905 namespace (rlcompleter only works in __main__.__dict__). I'll try
6910 namespace (rlcompleter only works in __main__.__dict__). I'll try
6906 to submit a note to the authors to see if this change can be
6911 to submit a note to the authors to see if this change can be
6907 incorporated in future rlcompleter releases (Dec.6: done)
6912 incorporated in future rlcompleter releases (Dec.6: done)
6908
6913
6909 * More fixes to namespace handling. It was a mess! Now all
6914 * More fixes to namespace handling. It was a mess! Now all
6910 explicit references to __main__.__dict__ are gone (except when
6915 explicit references to __main__.__dict__ are gone (except when
6911 really needed) and everything is handled through the namespace
6916 really needed) and everything is handled through the namespace
6912 dicts in the IPython instance. We seem to be getting somewhere
6917 dicts in the IPython instance. We seem to be getting somewhere
6913 with this, finally...
6918 with this, finally...
6914
6919
6915 * Small documentation updates.
6920 * Small documentation updates.
6916
6921
6917 * Created the Extensions directory under IPython (with an
6922 * Created the Extensions directory under IPython (with an
6918 __init__.py). Put the PhysicalQ stuff there. This directory should
6923 __init__.py). Put the PhysicalQ stuff there. This directory should
6919 be used for all special-purpose extensions.
6924 be used for all special-purpose extensions.
6920
6925
6921 * File renaming:
6926 * File renaming:
6922 ipythonlib --> ipmaker
6927 ipythonlib --> ipmaker
6923 ipplib --> iplib
6928 ipplib --> iplib
6924 This makes a bit more sense in terms of what these files actually do.
6929 This makes a bit more sense in terms of what these files actually do.
6925
6930
6926 * Moved all the classes and functions in ipythonlib to ipplib, so
6931 * Moved all the classes and functions in ipythonlib to ipplib, so
6927 now ipythonlib only has make_IPython(). This will ease up its
6932 now ipythonlib only has make_IPython(). This will ease up its
6928 splitting in smaller functional chunks later.
6933 splitting in smaller functional chunks later.
6929
6934
6930 * Cleaned up (done, I think) output of @whos. Better column
6935 * Cleaned up (done, I think) output of @whos. Better column
6931 formatting, and now shows str(var) for as much as it can, which is
6936 formatting, and now shows str(var) for as much as it can, which is
6932 typically what one gets with a 'print var'.
6937 typically what one gets with a 'print var'.
6933
6938
6934 2001-12-04 Fernando Perez <fperez@colorado.edu>
6939 2001-12-04 Fernando Perez <fperez@colorado.edu>
6935
6940
6936 * Fixed namespace problems. Now builtin/IPyhton/user names get
6941 * Fixed namespace problems. Now builtin/IPyhton/user names get
6937 properly reported in their namespace. Internal namespace handling
6942 properly reported in their namespace. Internal namespace handling
6938 is finally getting decent (not perfect yet, but much better than
6943 is finally getting decent (not perfect yet, but much better than
6939 the ad-hoc mess we had).
6944 the ad-hoc mess we had).
6940
6945
6941 * Removed -exit option. If people just want to run a python
6946 * Removed -exit option. If people just want to run a python
6942 script, that's what the normal interpreter is for. Less
6947 script, that's what the normal interpreter is for. Less
6943 unnecessary options, less chances for bugs.
6948 unnecessary options, less chances for bugs.
6944
6949
6945 * Added a crash handler which generates a complete post-mortem if
6950 * Added a crash handler which generates a complete post-mortem if
6946 IPython crashes. This will help a lot in tracking bugs down the
6951 IPython crashes. This will help a lot in tracking bugs down the
6947 road.
6952 road.
6948
6953
6949 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6954 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6950 which were boud to functions being reassigned would bypass the
6955 which were boud to functions being reassigned would bypass the
6951 logger, breaking the sync of _il with the prompt counter. This
6956 logger, breaking the sync of _il with the prompt counter. This
6952 would then crash IPython later when a new line was logged.
6957 would then crash IPython later when a new line was logged.
6953
6958
6954 2001-12-02 Fernando Perez <fperez@colorado.edu>
6959 2001-12-02 Fernando Perez <fperez@colorado.edu>
6955
6960
6956 * Made IPython a package. This means people don't have to clutter
6961 * Made IPython a package. This means people don't have to clutter
6957 their sys.path with yet another directory. Changed the INSTALL
6962 their sys.path with yet another directory. Changed the INSTALL
6958 file accordingly.
6963 file accordingly.
6959
6964
6960 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6965 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6961 sorts its output (so @who shows it sorted) and @whos formats the
6966 sorts its output (so @who shows it sorted) and @whos formats the
6962 table according to the width of the first column. Nicer, easier to
6967 table according to the width of the first column. Nicer, easier to
6963 read. Todo: write a generic table_format() which takes a list of
6968 read. Todo: write a generic table_format() which takes a list of
6964 lists and prints it nicely formatted, with optional row/column
6969 lists and prints it nicely formatted, with optional row/column
6965 separators and proper padding and justification.
6970 separators and proper padding and justification.
6966
6971
6967 * Released 0.1.20
6972 * Released 0.1.20
6968
6973
6969 * Fixed bug in @log which would reverse the inputcache list (a
6974 * Fixed bug in @log which would reverse the inputcache list (a
6970 copy operation was missing).
6975 copy operation was missing).
6971
6976
6972 * Code cleanup. @config was changed to use page(). Better, since
6977 * Code cleanup. @config was changed to use page(). Better, since
6973 its output is always quite long.
6978 its output is always quite long.
6974
6979
6975 * Itpl is back as a dependency. I was having too many problems
6980 * Itpl is back as a dependency. I was having too many problems
6976 getting the parametric aliases to work reliably, and it's just
6981 getting the parametric aliases to work reliably, and it's just
6977 easier to code weird string operations with it than playing %()s
6982 easier to code weird string operations with it than playing %()s
6978 games. It's only ~6k, so I don't think it's too big a deal.
6983 games. It's only ~6k, so I don't think it's too big a deal.
6979
6984
6980 * Found (and fixed) a very nasty bug with history. !lines weren't
6985 * Found (and fixed) a very nasty bug with history. !lines weren't
6981 getting cached, and the out of sync caches would crash
6986 getting cached, and the out of sync caches would crash
6982 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6987 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6983 division of labor a bit better. Bug fixed, cleaner structure.
6988 division of labor a bit better. Bug fixed, cleaner structure.
6984
6989
6985 2001-12-01 Fernando Perez <fperez@colorado.edu>
6990 2001-12-01 Fernando Perez <fperez@colorado.edu>
6986
6991
6987 * Released 0.1.19
6992 * Released 0.1.19
6988
6993
6989 * Added option -n to @hist to prevent line number printing. Much
6994 * Added option -n to @hist to prevent line number printing. Much
6990 easier to copy/paste code this way.
6995 easier to copy/paste code this way.
6991
6996
6992 * Created global _il to hold the input list. Allows easy
6997 * Created global _il to hold the input list. Allows easy
6993 re-execution of blocks of code by slicing it (inspired by Janko's
6998 re-execution of blocks of code by slicing it (inspired by Janko's
6994 comment on 'macros').
6999 comment on 'macros').
6995
7000
6996 * Small fixes and doc updates.
7001 * Small fixes and doc updates.
6997
7002
6998 * Rewrote @history function (was @h). Renamed it to @hist, @h is
7003 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6999 much too fragile with automagic. Handles properly multi-line
7004 much too fragile with automagic. Handles properly multi-line
7000 statements and takes parameters.
7005 statements and takes parameters.
7001
7006
7002 2001-11-30 Fernando Perez <fperez@colorado.edu>
7007 2001-11-30 Fernando Perez <fperez@colorado.edu>
7003
7008
7004 * Version 0.1.18 released.
7009 * Version 0.1.18 released.
7005
7010
7006 * Fixed nasty namespace bug in initial module imports.
7011 * Fixed nasty namespace bug in initial module imports.
7007
7012
7008 * Added copyright/license notes to all code files (except
7013 * Added copyright/license notes to all code files (except
7009 DPyGetOpt). For the time being, LGPL. That could change.
7014 DPyGetOpt). For the time being, LGPL. That could change.
7010
7015
7011 * Rewrote a much nicer README, updated INSTALL, cleaned up
7016 * Rewrote a much nicer README, updated INSTALL, cleaned up
7012 ipythonrc-* samples.
7017 ipythonrc-* samples.
7013
7018
7014 * Overall code/documentation cleanup. Basically ready for
7019 * Overall code/documentation cleanup. Basically ready for
7015 release. Only remaining thing: licence decision (LGPL?).
7020 release. Only remaining thing: licence decision (LGPL?).
7016
7021
7017 * Converted load_config to a class, ConfigLoader. Now recursion
7022 * Converted load_config to a class, ConfigLoader. Now recursion
7018 control is better organized. Doesn't include the same file twice.
7023 control is better organized. Doesn't include the same file twice.
7019
7024
7020 2001-11-29 Fernando Perez <fperez@colorado.edu>
7025 2001-11-29 Fernando Perez <fperez@colorado.edu>
7021
7026
7022 * Got input history working. Changed output history variables from
7027 * Got input history working. Changed output history variables from
7023 _p to _o so that _i is for input and _o for output. Just cleaner
7028 _p to _o so that _i is for input and _o for output. Just cleaner
7024 convention.
7029 convention.
7025
7030
7026 * Implemented parametric aliases. This pretty much allows the
7031 * Implemented parametric aliases. This pretty much allows the
7027 alias system to offer full-blown shell convenience, I think.
7032 alias system to offer full-blown shell convenience, I think.
7028
7033
7029 * Version 0.1.17 released, 0.1.18 opened.
7034 * Version 0.1.17 released, 0.1.18 opened.
7030
7035
7031 * dot_ipython/ipythonrc (alias): added documentation.
7036 * dot_ipython/ipythonrc (alias): added documentation.
7032 (xcolor): Fixed small bug (xcolors -> xcolor)
7037 (xcolor): Fixed small bug (xcolors -> xcolor)
7033
7038
7034 * Changed the alias system. Now alias is a magic command to define
7039 * Changed the alias system. Now alias is a magic command to define
7035 aliases just like the shell. Rationale: the builtin magics should
7040 aliases just like the shell. Rationale: the builtin magics should
7036 be there for things deeply connected to IPython's
7041 be there for things deeply connected to IPython's
7037 architecture. And this is a much lighter system for what I think
7042 architecture. And this is a much lighter system for what I think
7038 is the really important feature: allowing users to define quickly
7043 is the really important feature: allowing users to define quickly
7039 magics that will do shell things for them, so they can customize
7044 magics that will do shell things for them, so they can customize
7040 IPython easily to match their work habits. If someone is really
7045 IPython easily to match their work habits. If someone is really
7041 desperate to have another name for a builtin alias, they can
7046 desperate to have another name for a builtin alias, they can
7042 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
7047 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
7043 works.
7048 works.
7044
7049
7045 2001-11-28 Fernando Perez <fperez@colorado.edu>
7050 2001-11-28 Fernando Perez <fperez@colorado.edu>
7046
7051
7047 * Changed @file so that it opens the source file at the proper
7052 * Changed @file so that it opens the source file at the proper
7048 line. Since it uses less, if your EDITOR environment is
7053 line. Since it uses less, if your EDITOR environment is
7049 configured, typing v will immediately open your editor of choice
7054 configured, typing v will immediately open your editor of choice
7050 right at the line where the object is defined. Not as quick as
7055 right at the line where the object is defined. Not as quick as
7051 having a direct @edit command, but for all intents and purposes it
7056 having a direct @edit command, but for all intents and purposes it
7052 works. And I don't have to worry about writing @edit to deal with
7057 works. And I don't have to worry about writing @edit to deal with
7053 all the editors, less does that.
7058 all the editors, less does that.
7054
7059
7055 * Version 0.1.16 released, 0.1.17 opened.
7060 * Version 0.1.16 released, 0.1.17 opened.
7056
7061
7057 * Fixed some nasty bugs in the page/page_dumb combo that could
7062 * Fixed some nasty bugs in the page/page_dumb combo that could
7058 crash IPython.
7063 crash IPython.
7059
7064
7060 2001-11-27 Fernando Perez <fperez@colorado.edu>
7065 2001-11-27 Fernando Perez <fperez@colorado.edu>
7061
7066
7062 * Version 0.1.15 released, 0.1.16 opened.
7067 * Version 0.1.15 released, 0.1.16 opened.
7063
7068
7064 * Finally got ? and ?? to work for undefined things: now it's
7069 * Finally got ? and ?? to work for undefined things: now it's
7065 possible to type {}.get? and get information about the get method
7070 possible to type {}.get? and get information about the get method
7066 of dicts, or os.path? even if only os is defined (so technically
7071 of dicts, or os.path? even if only os is defined (so technically
7067 os.path isn't). Works at any level. For example, after import os,
7072 os.path isn't). Works at any level. For example, after import os,
7068 os?, os.path?, os.path.abspath? all work. This is great, took some
7073 os?, os.path?, os.path.abspath? all work. This is great, took some
7069 work in _ofind.
7074 work in _ofind.
7070
7075
7071 * Fixed more bugs with logging. The sanest way to do it was to add
7076 * Fixed more bugs with logging. The sanest way to do it was to add
7072 to @log a 'mode' parameter. Killed two in one shot (this mode
7077 to @log a 'mode' parameter. Killed two in one shot (this mode
7073 option was a request of Janko's). I think it's finally clean
7078 option was a request of Janko's). I think it's finally clean
7074 (famous last words).
7079 (famous last words).
7075
7080
7076 * Added a page_dumb() pager which does a decent job of paging on
7081 * Added a page_dumb() pager which does a decent job of paging on
7077 screen, if better things (like less) aren't available. One less
7082 screen, if better things (like less) aren't available. One less
7078 unix dependency (someday maybe somebody will port this to
7083 unix dependency (someday maybe somebody will port this to
7079 windows).
7084 windows).
7080
7085
7081 * Fixed problem in magic_log: would lock of logging out if log
7086 * Fixed problem in magic_log: would lock of logging out if log
7082 creation failed (because it would still think it had succeeded).
7087 creation failed (because it would still think it had succeeded).
7083
7088
7084 * Improved the page() function using curses to auto-detect screen
7089 * Improved the page() function using curses to auto-detect screen
7085 size. Now it can make a much better decision on whether to print
7090 size. Now it can make a much better decision on whether to print
7086 or page a string. Option screen_length was modified: a value 0
7091 or page a string. Option screen_length was modified: a value 0
7087 means auto-detect, and that's the default now.
7092 means auto-detect, and that's the default now.
7088
7093
7089 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
7094 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
7090 go out. I'll test it for a few days, then talk to Janko about
7095 go out. I'll test it for a few days, then talk to Janko about
7091 licences and announce it.
7096 licences and announce it.
7092
7097
7093 * Fixed the length of the auto-generated ---> prompt which appears
7098 * Fixed the length of the auto-generated ---> prompt which appears
7094 for auto-parens and auto-quotes. Getting this right isn't trivial,
7099 for auto-parens and auto-quotes. Getting this right isn't trivial,
7095 with all the color escapes, different prompt types and optional
7100 with all the color escapes, different prompt types and optional
7096 separators. But it seems to be working in all the combinations.
7101 separators. But it seems to be working in all the combinations.
7097
7102
7098 2001-11-26 Fernando Perez <fperez@colorado.edu>
7103 2001-11-26 Fernando Perez <fperez@colorado.edu>
7099
7104
7100 * Wrote a regexp filter to get option types from the option names
7105 * Wrote a regexp filter to get option types from the option names
7101 string. This eliminates the need to manually keep two duplicate
7106 string. This eliminates the need to manually keep two duplicate
7102 lists.
7107 lists.
7103
7108
7104 * Removed the unneeded check_option_names. Now options are handled
7109 * Removed the unneeded check_option_names. Now options are handled
7105 in a much saner manner and it's easy to visually check that things
7110 in a much saner manner and it's easy to visually check that things
7106 are ok.
7111 are ok.
7107
7112
7108 * Updated version numbers on all files I modified to carry a
7113 * Updated version numbers on all files I modified to carry a
7109 notice so Janko and Nathan have clear version markers.
7114 notice so Janko and Nathan have clear version markers.
7110
7115
7111 * Updated docstring for ultraTB with my changes. I should send
7116 * Updated docstring for ultraTB with my changes. I should send
7112 this to Nathan.
7117 this to Nathan.
7113
7118
7114 * Lots of small fixes. Ran everything through pychecker again.
7119 * Lots of small fixes. Ran everything through pychecker again.
7115
7120
7116 * Made loading of deep_reload an cmd line option. If it's not too
7121 * Made loading of deep_reload an cmd line option. If it's not too
7117 kosher, now people can just disable it. With -nodeep_reload it's
7122 kosher, now people can just disable it. With -nodeep_reload it's
7118 still available as dreload(), it just won't overwrite reload().
7123 still available as dreload(), it just won't overwrite reload().
7119
7124
7120 * Moved many options to the no| form (-opt and -noopt
7125 * Moved many options to the no| form (-opt and -noopt
7121 accepted). Cleaner.
7126 accepted). Cleaner.
7122
7127
7123 * Changed magic_log so that if called with no parameters, it uses
7128 * Changed magic_log so that if called with no parameters, it uses
7124 'rotate' mode. That way auto-generated logs aren't automatically
7129 'rotate' mode. That way auto-generated logs aren't automatically
7125 over-written. For normal logs, now a backup is made if it exists
7130 over-written. For normal logs, now a backup is made if it exists
7126 (only 1 level of backups). A new 'backup' mode was added to the
7131 (only 1 level of backups). A new 'backup' mode was added to the
7127 Logger class to support this. This was a request by Janko.
7132 Logger class to support this. This was a request by Janko.
7128
7133
7129 * Added @logoff/@logon to stop/restart an active log.
7134 * Added @logoff/@logon to stop/restart an active log.
7130
7135
7131 * Fixed a lot of bugs in log saving/replay. It was pretty
7136 * Fixed a lot of bugs in log saving/replay. It was pretty
7132 broken. Now special lines (!@,/) appear properly in the command
7137 broken. Now special lines (!@,/) appear properly in the command
7133 history after a log replay.
7138 history after a log replay.
7134
7139
7135 * Tried and failed to implement full session saving via pickle. My
7140 * Tried and failed to implement full session saving via pickle. My
7136 idea was to pickle __main__.__dict__, but modules can't be
7141 idea was to pickle __main__.__dict__, but modules can't be
7137 pickled. This would be a better alternative to replaying logs, but
7142 pickled. This would be a better alternative to replaying logs, but
7138 seems quite tricky to get to work. Changed -session to be called
7143 seems quite tricky to get to work. Changed -session to be called
7139 -logplay, which more accurately reflects what it does. And if we
7144 -logplay, which more accurately reflects what it does. And if we
7140 ever get real session saving working, -session is now available.
7145 ever get real session saving working, -session is now available.
7141
7146
7142 * Implemented color schemes for prompts also. As for tracebacks,
7147 * Implemented color schemes for prompts also. As for tracebacks,
7143 currently only NoColor and Linux are supported. But now the
7148 currently only NoColor and Linux are supported. But now the
7144 infrastructure is in place, based on a generic ColorScheme
7149 infrastructure is in place, based on a generic ColorScheme
7145 class. So writing and activating new schemes both for the prompts
7150 class. So writing and activating new schemes both for the prompts
7146 and the tracebacks should be straightforward.
7151 and the tracebacks should be straightforward.
7147
7152
7148 * Version 0.1.13 released, 0.1.14 opened.
7153 * Version 0.1.13 released, 0.1.14 opened.
7149
7154
7150 * Changed handling of options for output cache. Now counter is
7155 * Changed handling of options for output cache. Now counter is
7151 hardwired starting at 1 and one specifies the maximum number of
7156 hardwired starting at 1 and one specifies the maximum number of
7152 entries *in the outcache* (not the max prompt counter). This is
7157 entries *in the outcache* (not the max prompt counter). This is
7153 much better, since many statements won't increase the cache
7158 much better, since many statements won't increase the cache
7154 count. It also eliminated some confusing options, now there's only
7159 count. It also eliminated some confusing options, now there's only
7155 one: cache_size.
7160 one: cache_size.
7156
7161
7157 * Added 'alias' magic function and magic_alias option in the
7162 * Added 'alias' magic function and magic_alias option in the
7158 ipythonrc file. Now the user can easily define whatever names he
7163 ipythonrc file. Now the user can easily define whatever names he
7159 wants for the magic functions without having to play weird
7164 wants for the magic functions without having to play weird
7160 namespace games. This gives IPython a real shell-like feel.
7165 namespace games. This gives IPython a real shell-like feel.
7161
7166
7162 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
7167 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
7163 @ or not).
7168 @ or not).
7164
7169
7165 This was one of the last remaining 'visible' bugs (that I know
7170 This was one of the last remaining 'visible' bugs (that I know
7166 of). I think if I can clean up the session loading so it works
7171 of). I think if I can clean up the session loading so it works
7167 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
7172 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
7168 about licensing).
7173 about licensing).
7169
7174
7170 2001-11-25 Fernando Perez <fperez@colorado.edu>
7175 2001-11-25 Fernando Perez <fperez@colorado.edu>
7171
7176
7172 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
7177 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
7173 there's a cleaner distinction between what ? and ?? show.
7178 there's a cleaner distinction between what ? and ?? show.
7174
7179
7175 * Added screen_length option. Now the user can define his own
7180 * Added screen_length option. Now the user can define his own
7176 screen size for page() operations.
7181 screen size for page() operations.
7177
7182
7178 * Implemented magic shell-like functions with automatic code
7183 * Implemented magic shell-like functions with automatic code
7179 generation. Now adding another function is just a matter of adding
7184 generation. Now adding another function is just a matter of adding
7180 an entry to a dict, and the function is dynamically generated at
7185 an entry to a dict, and the function is dynamically generated at
7181 run-time. Python has some really cool features!
7186 run-time. Python has some really cool features!
7182
7187
7183 * Renamed many options to cleanup conventions a little. Now all
7188 * Renamed many options to cleanup conventions a little. Now all
7184 are lowercase, and only underscores where needed. Also in the code
7189 are lowercase, and only underscores where needed. Also in the code
7185 option name tables are clearer.
7190 option name tables are clearer.
7186
7191
7187 * Changed prompts a little. Now input is 'In [n]:' instead of
7192 * Changed prompts a little. Now input is 'In [n]:' instead of
7188 'In[n]:='. This allows it the numbers to be aligned with the
7193 'In[n]:='. This allows it the numbers to be aligned with the
7189 Out[n] numbers, and removes usage of ':=' which doesn't exist in
7194 Out[n] numbers, and removes usage of ':=' which doesn't exist in
7190 Python (it was a Mathematica thing). The '...' continuation prompt
7195 Python (it was a Mathematica thing). The '...' continuation prompt
7191 was also changed a little to align better.
7196 was also changed a little to align better.
7192
7197
7193 * Fixed bug when flushing output cache. Not all _p<n> variables
7198 * Fixed bug when flushing output cache. Not all _p<n> variables
7194 exist, so their deletion needs to be wrapped in a try:
7199 exist, so their deletion needs to be wrapped in a try:
7195
7200
7196 * Figured out how to properly use inspect.formatargspec() (it
7201 * Figured out how to properly use inspect.formatargspec() (it
7197 requires the args preceded by *). So I removed all the code from
7202 requires the args preceded by *). So I removed all the code from
7198 _get_pdef in Magic, which was just replicating that.
7203 _get_pdef in Magic, which was just replicating that.
7199
7204
7200 * Added test to prefilter to allow redefining magic function names
7205 * Added test to prefilter to allow redefining magic function names
7201 as variables. This is ok, since the @ form is always available,
7206 as variables. This is ok, since the @ form is always available,
7202 but whe should allow the user to define a variable called 'ls' if
7207 but whe should allow the user to define a variable called 'ls' if
7203 he needs it.
7208 he needs it.
7204
7209
7205 * Moved the ToDo information from README into a separate ToDo.
7210 * Moved the ToDo information from README into a separate ToDo.
7206
7211
7207 * General code cleanup and small bugfixes. I think it's close to a
7212 * General code cleanup and small bugfixes. I think it's close to a
7208 state where it can be released, obviously with a big 'beta'
7213 state where it can be released, obviously with a big 'beta'
7209 warning on it.
7214 warning on it.
7210
7215
7211 * Got the magic function split to work. Now all magics are defined
7216 * Got the magic function split to work. Now all magics are defined
7212 in a separate class. It just organizes things a bit, and now
7217 in a separate class. It just organizes things a bit, and now
7213 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
7218 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
7214 was too long).
7219 was too long).
7215
7220
7216 * Changed @clear to @reset to avoid potential confusions with
7221 * Changed @clear to @reset to avoid potential confusions with
7217 the shell command clear. Also renamed @cl to @clear, which does
7222 the shell command clear. Also renamed @cl to @clear, which does
7218 exactly what people expect it to from their shell experience.
7223 exactly what people expect it to from their shell experience.
7219
7224
7220 Added a check to the @reset command (since it's so
7225 Added a check to the @reset command (since it's so
7221 destructive, it's probably a good idea to ask for confirmation).
7226 destructive, it's probably a good idea to ask for confirmation).
7222 But now reset only works for full namespace resetting. Since the
7227 But now reset only works for full namespace resetting. Since the
7223 del keyword is already there for deleting a few specific
7228 del keyword is already there for deleting a few specific
7224 variables, I don't see the point of having a redundant magic
7229 variables, I don't see the point of having a redundant magic
7225 function for the same task.
7230 function for the same task.
7226
7231
7227 2001-11-24 Fernando Perez <fperez@colorado.edu>
7232 2001-11-24 Fernando Perez <fperez@colorado.edu>
7228
7233
7229 * Updated the builtin docs (esp. the ? ones).
7234 * Updated the builtin docs (esp. the ? ones).
7230
7235
7231 * Ran all the code through pychecker. Not terribly impressed with
7236 * Ran all the code through pychecker. Not terribly impressed with
7232 it: lots of spurious warnings and didn't really find anything of
7237 it: lots of spurious warnings and didn't really find anything of
7233 substance (just a few modules being imported and not used).
7238 substance (just a few modules being imported and not used).
7234
7239
7235 * Implemented the new ultraTB functionality into IPython. New
7240 * Implemented the new ultraTB functionality into IPython. New
7236 option: xcolors. This chooses color scheme. xmode now only selects
7241 option: xcolors. This chooses color scheme. xmode now only selects
7237 between Plain and Verbose. Better orthogonality.
7242 between Plain and Verbose. Better orthogonality.
7238
7243
7239 * Large rewrite of ultraTB. Much cleaner now, with a separation of
7244 * Large rewrite of ultraTB. Much cleaner now, with a separation of
7240 mode and color scheme for the exception handlers. Now it's
7245 mode and color scheme for the exception handlers. Now it's
7241 possible to have the verbose traceback with no coloring.
7246 possible to have the verbose traceback with no coloring.
7242
7247
7243 2001-11-23 Fernando Perez <fperez@colorado.edu>
7248 2001-11-23 Fernando Perez <fperez@colorado.edu>
7244
7249
7245 * Version 0.1.12 released, 0.1.13 opened.
7250 * Version 0.1.12 released, 0.1.13 opened.
7246
7251
7247 * Removed option to set auto-quote and auto-paren escapes by
7252 * Removed option to set auto-quote and auto-paren escapes by
7248 user. The chances of breaking valid syntax are just too high. If
7253 user. The chances of breaking valid syntax are just too high. If
7249 someone *really* wants, they can always dig into the code.
7254 someone *really* wants, they can always dig into the code.
7250
7255
7251 * Made prompt separators configurable.
7256 * Made prompt separators configurable.
7252
7257
7253 2001-11-22 Fernando Perez <fperez@colorado.edu>
7258 2001-11-22 Fernando Perez <fperez@colorado.edu>
7254
7259
7255 * Small bugfixes in many places.
7260 * Small bugfixes in many places.
7256
7261
7257 * Removed the MyCompleter class from ipplib. It seemed redundant
7262 * Removed the MyCompleter class from ipplib. It seemed redundant
7258 with the C-p,C-n history search functionality. Less code to
7263 with the C-p,C-n history search functionality. Less code to
7259 maintain.
7264 maintain.
7260
7265
7261 * Moved all the original ipython.py code into ipythonlib.py. Right
7266 * Moved all the original ipython.py code into ipythonlib.py. Right
7262 now it's just one big dump into a function called make_IPython, so
7267 now it's just one big dump into a function called make_IPython, so
7263 no real modularity has been gained. But at least it makes the
7268 no real modularity has been gained. But at least it makes the
7264 wrapper script tiny, and since ipythonlib is a module, it gets
7269 wrapper script tiny, and since ipythonlib is a module, it gets
7265 compiled and startup is much faster.
7270 compiled and startup is much faster.
7266
7271
7267 This is a reasobably 'deep' change, so we should test it for a
7272 This is a reasobably 'deep' change, so we should test it for a
7268 while without messing too much more with the code.
7273 while without messing too much more with the code.
7269
7274
7270 2001-11-21 Fernando Perez <fperez@colorado.edu>
7275 2001-11-21 Fernando Perez <fperez@colorado.edu>
7271
7276
7272 * Version 0.1.11 released, 0.1.12 opened for further work.
7277 * Version 0.1.11 released, 0.1.12 opened for further work.
7273
7278
7274 * Removed dependency on Itpl. It was only needed in one place. It
7279 * Removed dependency on Itpl. It was only needed in one place. It
7275 would be nice if this became part of python, though. It makes life
7280 would be nice if this became part of python, though. It makes life
7276 *a lot* easier in some cases.
7281 *a lot* easier in some cases.
7277
7282
7278 * Simplified the prefilter code a bit. Now all handlers are
7283 * Simplified the prefilter code a bit. Now all handlers are
7279 expected to explicitly return a value (at least a blank string).
7284 expected to explicitly return a value (at least a blank string).
7280
7285
7281 * Heavy edits in ipplib. Removed the help system altogether. Now
7286 * Heavy edits in ipplib. Removed the help system altogether. Now
7282 obj?/?? is used for inspecting objects, a magic @doc prints
7287 obj?/?? is used for inspecting objects, a magic @doc prints
7283 docstrings, and full-blown Python help is accessed via the 'help'
7288 docstrings, and full-blown Python help is accessed via the 'help'
7284 keyword. This cleans up a lot of code (less to maintain) and does
7289 keyword. This cleans up a lot of code (less to maintain) and does
7285 the job. Since 'help' is now a standard Python component, might as
7290 the job. Since 'help' is now a standard Python component, might as
7286 well use it and remove duplicate functionality.
7291 well use it and remove duplicate functionality.
7287
7292
7288 Also removed the option to use ipplib as a standalone program. By
7293 Also removed the option to use ipplib as a standalone program. By
7289 now it's too dependent on other parts of IPython to function alone.
7294 now it's too dependent on other parts of IPython to function alone.
7290
7295
7291 * Fixed bug in genutils.pager. It would crash if the pager was
7296 * Fixed bug in genutils.pager. It would crash if the pager was
7292 exited immediately after opening (broken pipe).
7297 exited immediately after opening (broken pipe).
7293
7298
7294 * Trimmed down the VerboseTB reporting a little. The header is
7299 * Trimmed down the VerboseTB reporting a little. The header is
7295 much shorter now and the repeated exception arguments at the end
7300 much shorter now and the repeated exception arguments at the end
7296 have been removed. For interactive use the old header seemed a bit
7301 have been removed. For interactive use the old header seemed a bit
7297 excessive.
7302 excessive.
7298
7303
7299 * Fixed small bug in output of @whos for variables with multi-word
7304 * Fixed small bug in output of @whos for variables with multi-word
7300 types (only first word was displayed).
7305 types (only first word was displayed).
7301
7306
7302 2001-11-17 Fernando Perez <fperez@colorado.edu>
7307 2001-11-17 Fernando Perez <fperez@colorado.edu>
7303
7308
7304 * Version 0.1.10 released, 0.1.11 opened for further work.
7309 * Version 0.1.10 released, 0.1.11 opened for further work.
7305
7310
7306 * Modified dirs and friends. dirs now *returns* the stack (not
7311 * Modified dirs and friends. dirs now *returns* the stack (not
7307 prints), so one can manipulate it as a variable. Convenient to
7312 prints), so one can manipulate it as a variable. Convenient to
7308 travel along many directories.
7313 travel along many directories.
7309
7314
7310 * Fixed bug in magic_pdef: would only work with functions with
7315 * Fixed bug in magic_pdef: would only work with functions with
7311 arguments with default values.
7316 arguments with default values.
7312
7317
7313 2001-11-14 Fernando Perez <fperez@colorado.edu>
7318 2001-11-14 Fernando Perez <fperez@colorado.edu>
7314
7319
7315 * Added the PhysicsInput stuff to dot_ipython so it ships as an
7320 * Added the PhysicsInput stuff to dot_ipython so it ships as an
7316 example with IPython. Various other minor fixes and cleanups.
7321 example with IPython. Various other minor fixes and cleanups.
7317
7322
7318 * Version 0.1.9 released, 0.1.10 opened for further work.
7323 * Version 0.1.9 released, 0.1.10 opened for further work.
7319
7324
7320 * Added sys.path to the list of directories searched in the
7325 * Added sys.path to the list of directories searched in the
7321 execfile= option. It used to be the current directory and the
7326 execfile= option. It used to be the current directory and the
7322 user's IPYTHONDIR only.
7327 user's IPYTHONDIR only.
7323
7328
7324 2001-11-13 Fernando Perez <fperez@colorado.edu>
7329 2001-11-13 Fernando Perez <fperez@colorado.edu>
7325
7330
7326 * Reinstated the raw_input/prefilter separation that Janko had
7331 * Reinstated the raw_input/prefilter separation that Janko had
7327 initially. This gives a more convenient setup for extending the
7332 initially. This gives a more convenient setup for extending the
7328 pre-processor from the outside: raw_input always gets a string,
7333 pre-processor from the outside: raw_input always gets a string,
7329 and prefilter has to process it. We can then redefine prefilter
7334 and prefilter has to process it. We can then redefine prefilter
7330 from the outside and implement extensions for special
7335 from the outside and implement extensions for special
7331 purposes.
7336 purposes.
7332
7337
7333 Today I got one for inputting PhysicalQuantity objects
7338 Today I got one for inputting PhysicalQuantity objects
7334 (from Scientific) without needing any function calls at
7339 (from Scientific) without needing any function calls at
7335 all. Extremely convenient, and it's all done as a user-level
7340 all. Extremely convenient, and it's all done as a user-level
7336 extension (no IPython code was touched). Now instead of:
7341 extension (no IPython code was touched). Now instead of:
7337 a = PhysicalQuantity(4.2,'m/s**2')
7342 a = PhysicalQuantity(4.2,'m/s**2')
7338 one can simply say
7343 one can simply say
7339 a = 4.2 m/s**2
7344 a = 4.2 m/s**2
7340 or even
7345 or even
7341 a = 4.2 m/s^2
7346 a = 4.2 m/s^2
7342
7347
7343 I use this, but it's also a proof of concept: IPython really is
7348 I use this, but it's also a proof of concept: IPython really is
7344 fully user-extensible, even at the level of the parsing of the
7349 fully user-extensible, even at the level of the parsing of the
7345 command line. It's not trivial, but it's perfectly doable.
7350 command line. It's not trivial, but it's perfectly doable.
7346
7351
7347 * Added 'add_flip' method to inclusion conflict resolver. Fixes
7352 * Added 'add_flip' method to inclusion conflict resolver. Fixes
7348 the problem of modules being loaded in the inverse order in which
7353 the problem of modules being loaded in the inverse order in which
7349 they were defined in
7354 they were defined in
7350
7355
7351 * Version 0.1.8 released, 0.1.9 opened for further work.
7356 * Version 0.1.8 released, 0.1.9 opened for further work.
7352
7357
7353 * Added magics pdef, source and file. They respectively show the
7358 * Added magics pdef, source and file. They respectively show the
7354 definition line ('prototype' in C), source code and full python
7359 definition line ('prototype' in C), source code and full python
7355 file for any callable object. The object inspector oinfo uses
7360 file for any callable object. The object inspector oinfo uses
7356 these to show the same information.
7361 these to show the same information.
7357
7362
7358 * Version 0.1.7 released, 0.1.8 opened for further work.
7363 * Version 0.1.7 released, 0.1.8 opened for further work.
7359
7364
7360 * Separated all the magic functions into a class called Magic. The
7365 * Separated all the magic functions into a class called Magic. The
7361 InteractiveShell class was becoming too big for Xemacs to handle
7366 InteractiveShell class was becoming too big for Xemacs to handle
7362 (de-indenting a line would lock it up for 10 seconds while it
7367 (de-indenting a line would lock it up for 10 seconds while it
7363 backtracked on the whole class!)
7368 backtracked on the whole class!)
7364
7369
7365 FIXME: didn't work. It can be done, but right now namespaces are
7370 FIXME: didn't work. It can be done, but right now namespaces are
7366 all messed up. Do it later (reverted it for now, so at least
7371 all messed up. Do it later (reverted it for now, so at least
7367 everything works as before).
7372 everything works as before).
7368
7373
7369 * Got the object introspection system (magic_oinfo) working! I
7374 * Got the object introspection system (magic_oinfo) working! I
7370 think this is pretty much ready for release to Janko, so he can
7375 think this is pretty much ready for release to Janko, so he can
7371 test it for a while and then announce it. Pretty much 100% of what
7376 test it for a while and then announce it. Pretty much 100% of what
7372 I wanted for the 'phase 1' release is ready. Happy, tired.
7377 I wanted for the 'phase 1' release is ready. Happy, tired.
7373
7378
7374 2001-11-12 Fernando Perez <fperez@colorado.edu>
7379 2001-11-12 Fernando Perez <fperez@colorado.edu>
7375
7380
7376 * Version 0.1.6 released, 0.1.7 opened for further work.
7381 * Version 0.1.6 released, 0.1.7 opened for further work.
7377
7382
7378 * Fixed bug in printing: it used to test for truth before
7383 * Fixed bug in printing: it used to test for truth before
7379 printing, so 0 wouldn't print. Now checks for None.
7384 printing, so 0 wouldn't print. Now checks for None.
7380
7385
7381 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
7386 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
7382 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
7387 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
7383 reaches by hand into the outputcache. Think of a better way to do
7388 reaches by hand into the outputcache. Think of a better way to do
7384 this later.
7389 this later.
7385
7390
7386 * Various small fixes thanks to Nathan's comments.
7391 * Various small fixes thanks to Nathan's comments.
7387
7392
7388 * Changed magic_pprint to magic_Pprint. This way it doesn't
7393 * Changed magic_pprint to magic_Pprint. This way it doesn't
7389 collide with pprint() and the name is consistent with the command
7394 collide with pprint() and the name is consistent with the command
7390 line option.
7395 line option.
7391
7396
7392 * Changed prompt counter behavior to be fully like
7397 * Changed prompt counter behavior to be fully like
7393 Mathematica's. That is, even input that doesn't return a result
7398 Mathematica's. That is, even input that doesn't return a result
7394 raises the prompt counter. The old behavior was kind of confusing
7399 raises the prompt counter. The old behavior was kind of confusing
7395 (getting the same prompt number several times if the operation
7400 (getting the same prompt number several times if the operation
7396 didn't return a result).
7401 didn't return a result).
7397
7402
7398 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7403 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7399
7404
7400 * Fixed -Classic mode (wasn't working anymore).
7405 * Fixed -Classic mode (wasn't working anymore).
7401
7406
7402 * Added colored prompts using Nathan's new code. Colors are
7407 * Added colored prompts using Nathan's new code. Colors are
7403 currently hardwired, they can be user-configurable. For
7408 currently hardwired, they can be user-configurable. For
7404 developers, they can be chosen in file ipythonlib.py, at the
7409 developers, they can be chosen in file ipythonlib.py, at the
7405 beginning of the CachedOutput class def.
7410 beginning of the CachedOutput class def.
7406
7411
7407 2001-11-11 Fernando Perez <fperez@colorado.edu>
7412 2001-11-11 Fernando Perez <fperez@colorado.edu>
7408
7413
7409 * Version 0.1.5 released, 0.1.6 opened for further work.
7414 * Version 0.1.5 released, 0.1.6 opened for further work.
7410
7415
7411 * Changed magic_env to *return* the environment as a dict (not to
7416 * Changed magic_env to *return* the environment as a dict (not to
7412 print it). This way it prints, but it can also be processed.
7417 print it). This way it prints, but it can also be processed.
7413
7418
7414 * Added Verbose exception reporting to interactive
7419 * Added Verbose exception reporting to interactive
7415 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7420 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7416 traceback. Had to make some changes to the ultraTB file. This is
7421 traceback. Had to make some changes to the ultraTB file. This is
7417 probably the last 'big' thing in my mental todo list. This ties
7422 probably the last 'big' thing in my mental todo list. This ties
7418 in with the next entry:
7423 in with the next entry:
7419
7424
7420 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7425 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7421 has to specify is Plain, Color or Verbose for all exception
7426 has to specify is Plain, Color or Verbose for all exception
7422 handling.
7427 handling.
7423
7428
7424 * Removed ShellServices option. All this can really be done via
7429 * Removed ShellServices option. All this can really be done via
7425 the magic system. It's easier to extend, cleaner and has automatic
7430 the magic system. It's easier to extend, cleaner and has automatic
7426 namespace protection and documentation.
7431 namespace protection and documentation.
7427
7432
7428 2001-11-09 Fernando Perez <fperez@colorado.edu>
7433 2001-11-09 Fernando Perez <fperez@colorado.edu>
7429
7434
7430 * Fixed bug in output cache flushing (missing parameter to
7435 * Fixed bug in output cache flushing (missing parameter to
7431 __init__). Other small bugs fixed (found using pychecker).
7436 __init__). Other small bugs fixed (found using pychecker).
7432
7437
7433 * Version 0.1.4 opened for bugfixing.
7438 * Version 0.1.4 opened for bugfixing.
7434
7439
7435 2001-11-07 Fernando Perez <fperez@colorado.edu>
7440 2001-11-07 Fernando Perez <fperez@colorado.edu>
7436
7441
7437 * Version 0.1.3 released, mainly because of the raw_input bug.
7442 * Version 0.1.3 released, mainly because of the raw_input bug.
7438
7443
7439 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7444 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7440 and when testing for whether things were callable, a call could
7445 and when testing for whether things were callable, a call could
7441 actually be made to certain functions. They would get called again
7446 actually be made to certain functions. They would get called again
7442 once 'really' executed, with a resulting double call. A disaster
7447 once 'really' executed, with a resulting double call. A disaster
7443 in many cases (list.reverse() would never work!).
7448 in many cases (list.reverse() would never work!).
7444
7449
7445 * Removed prefilter() function, moved its code to raw_input (which
7450 * Removed prefilter() function, moved its code to raw_input (which
7446 after all was just a near-empty caller for prefilter). This saves
7451 after all was just a near-empty caller for prefilter). This saves
7447 a function call on every prompt, and simplifies the class a tiny bit.
7452 a function call on every prompt, and simplifies the class a tiny bit.
7448
7453
7449 * Fix _ip to __ip name in magic example file.
7454 * Fix _ip to __ip name in magic example file.
7450
7455
7451 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7456 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7452 work with non-gnu versions of tar.
7457 work with non-gnu versions of tar.
7453
7458
7454 2001-11-06 Fernando Perez <fperez@colorado.edu>
7459 2001-11-06 Fernando Perez <fperez@colorado.edu>
7455
7460
7456 * Version 0.1.2. Just to keep track of the recent changes.
7461 * Version 0.1.2. Just to keep track of the recent changes.
7457
7462
7458 * Fixed nasty bug in output prompt routine. It used to check 'if
7463 * Fixed nasty bug in output prompt routine. It used to check 'if
7459 arg != None...'. Problem is, this fails if arg implements a
7464 arg != None...'. Problem is, this fails if arg implements a
7460 special comparison (__cmp__) which disallows comparing to
7465 special comparison (__cmp__) which disallows comparing to
7461 None. Found it when trying to use the PhysicalQuantity module from
7466 None. Found it when trying to use the PhysicalQuantity module from
7462 ScientificPython.
7467 ScientificPython.
7463
7468
7464 2001-11-05 Fernando Perez <fperez@colorado.edu>
7469 2001-11-05 Fernando Perez <fperez@colorado.edu>
7465
7470
7466 * Also added dirs. Now the pushd/popd/dirs family functions
7471 * Also added dirs. Now the pushd/popd/dirs family functions
7467 basically like the shell, with the added convenience of going home
7472 basically like the shell, with the added convenience of going home
7468 when called with no args.
7473 when called with no args.
7469
7474
7470 * pushd/popd slightly modified to mimic shell behavior more
7475 * pushd/popd slightly modified to mimic shell behavior more
7471 closely.
7476 closely.
7472
7477
7473 * Added env,pushd,popd from ShellServices as magic functions. I
7478 * Added env,pushd,popd from ShellServices as magic functions. I
7474 think the cleanest will be to port all desired functions from
7479 think the cleanest will be to port all desired functions from
7475 ShellServices as magics and remove ShellServices altogether. This
7480 ShellServices as magics and remove ShellServices altogether. This
7476 will provide a single, clean way of adding functionality
7481 will provide a single, clean way of adding functionality
7477 (shell-type or otherwise) to IP.
7482 (shell-type or otherwise) to IP.
7478
7483
7479 2001-11-04 Fernando Perez <fperez@colorado.edu>
7484 2001-11-04 Fernando Perez <fperez@colorado.edu>
7480
7485
7481 * Added .ipython/ directory to sys.path. This way users can keep
7486 * Added .ipython/ directory to sys.path. This way users can keep
7482 customizations there and access them via import.
7487 customizations there and access them via import.
7483
7488
7484 2001-11-03 Fernando Perez <fperez@colorado.edu>
7489 2001-11-03 Fernando Perez <fperez@colorado.edu>
7485
7490
7486 * Opened version 0.1.1 for new changes.
7491 * Opened version 0.1.1 for new changes.
7487
7492
7488 * Changed version number to 0.1.0: first 'public' release, sent to
7493 * Changed version number to 0.1.0: first 'public' release, sent to
7489 Nathan and Janko.
7494 Nathan and Janko.
7490
7495
7491 * Lots of small fixes and tweaks.
7496 * Lots of small fixes and tweaks.
7492
7497
7493 * Minor changes to whos format. Now strings are shown, snipped if
7498 * Minor changes to whos format. Now strings are shown, snipped if
7494 too long.
7499 too long.
7495
7500
7496 * Changed ShellServices to work on __main__ so they show up in @who
7501 * Changed ShellServices to work on __main__ so they show up in @who
7497
7502
7498 * Help also works with ? at the end of a line:
7503 * Help also works with ? at the end of a line:
7499 ?sin and sin?
7504 ?sin and sin?
7500 both produce the same effect. This is nice, as often I use the
7505 both produce the same effect. This is nice, as often I use the
7501 tab-complete to find the name of a method, but I used to then have
7506 tab-complete to find the name of a method, but I used to then have
7502 to go to the beginning of the line to put a ? if I wanted more
7507 to go to the beginning of the line to put a ? if I wanted more
7503 info. Now I can just add the ? and hit return. Convenient.
7508 info. Now I can just add the ? and hit return. Convenient.
7504
7509
7505 2001-11-02 Fernando Perez <fperez@colorado.edu>
7510 2001-11-02 Fernando Perez <fperez@colorado.edu>
7506
7511
7507 * Python version check (>=2.1) added.
7512 * Python version check (>=2.1) added.
7508
7513
7509 * Added LazyPython documentation. At this point the docs are quite
7514 * Added LazyPython documentation. At this point the docs are quite
7510 a mess. A cleanup is in order.
7515 a mess. A cleanup is in order.
7511
7516
7512 * Auto-installer created. For some bizarre reason, the zipfiles
7517 * Auto-installer created. For some bizarre reason, the zipfiles
7513 module isn't working on my system. So I made a tar version
7518 module isn't working on my system. So I made a tar version
7514 (hopefully the command line options in various systems won't kill
7519 (hopefully the command line options in various systems won't kill
7515 me).
7520 me).
7516
7521
7517 * Fixes to Struct in genutils. Now all dictionary-like methods are
7522 * Fixes to Struct in genutils. Now all dictionary-like methods are
7518 protected (reasonably).
7523 protected (reasonably).
7519
7524
7520 * Added pager function to genutils and changed ? to print usage
7525 * Added pager function to genutils and changed ? to print usage
7521 note through it (it was too long).
7526 note through it (it was too long).
7522
7527
7523 * Added the LazyPython functionality. Works great! I changed the
7528 * Added the LazyPython functionality. Works great! I changed the
7524 auto-quote escape to ';', it's on home row and next to '. But
7529 auto-quote escape to ';', it's on home row and next to '. But
7525 both auto-quote and auto-paren (still /) escapes are command-line
7530 both auto-quote and auto-paren (still /) escapes are command-line
7526 parameters.
7531 parameters.
7527
7532
7528
7533
7529 2001-11-01 Fernando Perez <fperez@colorado.edu>
7534 2001-11-01 Fernando Perez <fperez@colorado.edu>
7530
7535
7531 * Version changed to 0.0.7. Fairly large change: configuration now
7536 * Version changed to 0.0.7. Fairly large change: configuration now
7532 is all stored in a directory, by default .ipython. There, all
7537 is all stored in a directory, by default .ipython. There, all
7533 config files have normal looking names (not .names)
7538 config files have normal looking names (not .names)
7534
7539
7535 * Version 0.0.6 Released first to Lucas and Archie as a test
7540 * Version 0.0.6 Released first to Lucas and Archie as a test
7536 run. Since it's the first 'semi-public' release, change version to
7541 run. Since it's the first 'semi-public' release, change version to
7537 > 0.0.6 for any changes now.
7542 > 0.0.6 for any changes now.
7538
7543
7539 * Stuff I had put in the ipplib.py changelog:
7544 * Stuff I had put in the ipplib.py changelog:
7540
7545
7541 Changes to InteractiveShell:
7546 Changes to InteractiveShell:
7542
7547
7543 - Made the usage message a parameter.
7548 - Made the usage message a parameter.
7544
7549
7545 - Require the name of the shell variable to be given. It's a bit
7550 - Require the name of the shell variable to be given. It's a bit
7546 of a hack, but allows the name 'shell' not to be hardwired in the
7551 of a hack, but allows the name 'shell' not to be hardwired in the
7547 magic (@) handler, which is problematic b/c it requires
7552 magic (@) handler, which is problematic b/c it requires
7548 polluting the global namespace with 'shell'. This in turn is
7553 polluting the global namespace with 'shell'. This in turn is
7549 fragile: if a user redefines a variable called shell, things
7554 fragile: if a user redefines a variable called shell, things
7550 break.
7555 break.
7551
7556
7552 - magic @: all functions available through @ need to be defined
7557 - magic @: all functions available through @ need to be defined
7553 as magic_<name>, even though they can be called simply as
7558 as magic_<name>, even though they can be called simply as
7554 @<name>. This allows the special command @magic to gather
7559 @<name>. This allows the special command @magic to gather
7555 information automatically about all existing magic functions,
7560 information automatically about all existing magic functions,
7556 even if they are run-time user extensions, by parsing the shell
7561 even if they are run-time user extensions, by parsing the shell
7557 instance __dict__ looking for special magic_ names.
7562 instance __dict__ looking for special magic_ names.
7558
7563
7559 - mainloop: added *two* local namespace parameters. This allows
7564 - mainloop: added *two* local namespace parameters. This allows
7560 the class to differentiate between parameters which were there
7565 the class to differentiate between parameters which were there
7561 before and after command line initialization was processed. This
7566 before and after command line initialization was processed. This
7562 way, later @who can show things loaded at startup by the
7567 way, later @who can show things loaded at startup by the
7563 user. This trick was necessary to make session saving/reloading
7568 user. This trick was necessary to make session saving/reloading
7564 really work: ideally after saving/exiting/reloading a session,
7569 really work: ideally after saving/exiting/reloading a session,
7565 *everything* should look the same, including the output of @who. I
7570 *everything* should look the same, including the output of @who. I
7566 was only able to make this work with this double namespace
7571 was only able to make this work with this double namespace
7567 trick.
7572 trick.
7568
7573
7569 - added a header to the logfile which allows (almost) full
7574 - added a header to the logfile which allows (almost) full
7570 session restoring.
7575 session restoring.
7571
7576
7572 - prepend lines beginning with @ or !, with a and log
7577 - prepend lines beginning with @ or !, with a and log
7573 them. Why? !lines: may be useful to know what you did @lines:
7578 them. Why? !lines: may be useful to know what you did @lines:
7574 they may affect session state. So when restoring a session, at
7579 they may affect session state. So when restoring a session, at
7575 least inform the user of their presence. I couldn't quite get
7580 least inform the user of their presence. I couldn't quite get
7576 them to properly re-execute, but at least the user is warned.
7581 them to properly re-execute, but at least the user is warned.
7577
7582
7578 * Started ChangeLog.
7583 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now