##// END OF EJS Templates
%save works again
vivainio -
Show More
@@ -1,2808 +1,2808 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 1166 2006-02-15 19:20:58Z vivainio $"""
4 $Id: Magic.py 1173 2006-02-21 16:24:01Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54
55 #***************************************************************************
55 #***************************************************************************
56 # Utility functions
56 # Utility functions
57 def on_off(tag):
57 def on_off(tag):
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
60
60
61 class Bunch: pass
61 class Bunch: pass
62
62
63 #***************************************************************************
63 #***************************************************************************
64 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
65 class Magic:
65 class Magic:
66 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
67
67
68 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
69 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
70 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
71 vs. `%cd("../")`
71 vs. `%cd("../")`
72
72
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
75
75
76 # class globals
76 # class globals
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
79
79
80 #......................................................................
80 #......................................................................
81 # some utility functions
81 # some utility functions
82
82
83 def __init__(self,shell):
83 def __init__(self,shell):
84
84
85 self.options_table = {}
85 self.options_table = {}
86 if profile is None:
86 if profile is None:
87 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
88 self.shell = shell
88 self.shell = shell
89
89
90 # namespace for holding state we may need
90 # namespace for holding state we may need
91 self._magic_state = Bunch()
91 self._magic_state = Bunch()
92
92
93 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
94 error("""\
94 error("""\
95 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
96 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98
98
99 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
100 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
101
101
102 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
103 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
104 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
105
105
106 def lsmagic(self):
106 def lsmagic(self):
107 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
108
108
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
111
111
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
113
113
114 # magics in class definition
114 # magics in class definition
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
116 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
117 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
120 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 out = []
126 out = []
127 for fn in magics:
127 for fn in magics:
128 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
129 out.sort()
129 out.sort()
130 return out
130 return out
131
131
132 def extract_input_slices(self,slices,raw=False):
132 def extract_input_slices(self,slices,raw=False):
133 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
134
134
135 Inputs:
135 Inputs:
136
136
137 - slices: the set of slices is given as a list of strings (like
137 - slices: the set of slices is given as a list of strings (like
138 ['1','4:8','9'], since this function is for use by magic functions
138 ['1','4:8','9'], since this function is for use by magic functions
139 which get their arguments as strings.
139 which get their arguments as strings.
140
140
141 Optional inputs:
141 Optional inputs:
142
142
143 - raw(False): by default, the processed input is used. If this is
143 - raw(False): by default, the processed input is used. If this is
144 true, the raw input history is used instead.
144 true, the raw input history is used instead.
145
145
146 Note that slices can be called with two notations:
146 Note that slices can be called with two notations:
147
147
148 N:M -> standard python form, means including items N...(M-1).
148 N:M -> standard python form, means including items N...(M-1).
149
149
150 N-M -> include items N..M (closed endpoint)."""
150 N-M -> include items N..M (closed endpoint)."""
151
151
152 if raw:
152 if raw:
153 hist = self.shell.input_hist_raw
153 hist = self.shell.input_hist_raw
154 else:
154 else:
155 hist = self.shell.input_hist
155 hist = self.shell.input_hist
156
156
157 cmds = []
157 cmds = []
158 for chunk in slices:
158 for chunk in slices:
159 if ':' in chunk:
159 if ':' in chunk:
160 ini,fin = map(int,chunk.split(':'))
160 ini,fin = map(int,chunk.split(':'))
161 elif '-' in chunk:
161 elif '-' in chunk:
162 ini,fin = map(int,chunk.split('-'))
162 ini,fin = map(int,chunk.split('-'))
163 fin += 1
163 fin += 1
164 else:
164 else:
165 ini = int(chunk)
165 ini = int(chunk)
166 fin = ini+1
166 fin = ini+1
167 cmds.append(hist[ini:fin])
167 cmds.append(hist[ini:fin])
168 return cmds
168 return cmds
169
169
170 def _ofind(self,oname):
170 def _ofind(self,oname):
171 """Find an object in the available namespaces.
171 """Find an object in the available namespaces.
172
172
173 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
173 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
174
174
175 Has special code to detect magic functions.
175 Has special code to detect magic functions.
176 """
176 """
177
177
178 oname = oname.strip()
178 oname = oname.strip()
179
179
180 # Namespaces to search in:
180 # Namespaces to search in:
181 user_ns = self.shell.user_ns
181 user_ns = self.shell.user_ns
182 internal_ns = self.shell.internal_ns
182 internal_ns = self.shell.internal_ns
183 builtin_ns = __builtin__.__dict__
183 builtin_ns = __builtin__.__dict__
184 alias_ns = self.shell.alias_table
184 alias_ns = self.shell.alias_table
185
185
186 # Put them in a list. The order is important so that we find things in
186 # Put them in a list. The order is important so that we find things in
187 # the same order that Python finds them.
187 # the same order that Python finds them.
188 namespaces = [ ('Interactive',user_ns),
188 namespaces = [ ('Interactive',user_ns),
189 ('IPython internal',internal_ns),
189 ('IPython internal',internal_ns),
190 ('Python builtin',builtin_ns),
190 ('Python builtin',builtin_ns),
191 ('Alias',alias_ns),
191 ('Alias',alias_ns),
192 ]
192 ]
193
193
194 # initialize results to 'null'
194 # initialize results to 'null'
195 found = 0; obj = None; ospace = None; ds = None;
195 found = 0; obj = None; ospace = None; ds = None;
196 ismagic = 0; isalias = 0
196 ismagic = 0; isalias = 0
197
197
198 # Look for the given name by splitting it in parts. If the head is
198 # Look for the given name by splitting it in parts. If the head is
199 # found, then we look for all the remaining parts as members, and only
199 # found, then we look for all the remaining parts as members, and only
200 # declare success if we can find them all.
200 # declare success if we can find them all.
201 oname_parts = oname.split('.')
201 oname_parts = oname.split('.')
202 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
202 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
203 for nsname,ns in namespaces:
203 for nsname,ns in namespaces:
204 try:
204 try:
205 obj = ns[oname_head]
205 obj = ns[oname_head]
206 except KeyError:
206 except KeyError:
207 continue
207 continue
208 else:
208 else:
209 for part in oname_rest:
209 for part in oname_rest:
210 try:
210 try:
211 obj = getattr(obj,part)
211 obj = getattr(obj,part)
212 except:
212 except:
213 # Blanket except b/c some badly implemented objects
213 # Blanket except b/c some badly implemented objects
214 # allow __getattr__ to raise exceptions other than
214 # allow __getattr__ to raise exceptions other than
215 # AttributeError, which then crashes IPython.
215 # AttributeError, which then crashes IPython.
216 break
216 break
217 else:
217 else:
218 # If we finish the for loop (no break), we got all members
218 # If we finish the for loop (no break), we got all members
219 found = 1
219 found = 1
220 ospace = nsname
220 ospace = nsname
221 if ns == alias_ns:
221 if ns == alias_ns:
222 isalias = 1
222 isalias = 1
223 break # namespace loop
223 break # namespace loop
224
224
225 # Try to see if it's magic
225 # Try to see if it's magic
226 if not found:
226 if not found:
227 if oname.startswith(self.shell.ESC_MAGIC):
227 if oname.startswith(self.shell.ESC_MAGIC):
228 oname = oname[1:]
228 oname = oname[1:]
229 obj = getattr(self,'magic_'+oname,None)
229 obj = getattr(self,'magic_'+oname,None)
230 if obj is not None:
230 if obj is not None:
231 found = 1
231 found = 1
232 ospace = 'IPython internal'
232 ospace = 'IPython internal'
233 ismagic = 1
233 ismagic = 1
234
234
235 # Last try: special-case some literals like '', [], {}, etc:
235 # Last try: special-case some literals like '', [], {}, etc:
236 if not found and oname_head in ["''",'""','[]','{}','()']:
236 if not found and oname_head in ["''",'""','[]','{}','()']:
237 obj = eval(oname_head)
237 obj = eval(oname_head)
238 found = 1
238 found = 1
239 ospace = 'Interactive'
239 ospace = 'Interactive'
240
240
241 return {'found':found, 'obj':obj, 'namespace':ospace,
241 return {'found':found, 'obj':obj, 'namespace':ospace,
242 'ismagic':ismagic, 'isalias':isalias}
242 'ismagic':ismagic, 'isalias':isalias}
243
243
244 def arg_err(self,func):
244 def arg_err(self,func):
245 """Print docstring if incorrect arguments were passed"""
245 """Print docstring if incorrect arguments were passed"""
246 print 'Error in arguments:'
246 print 'Error in arguments:'
247 print OInspect.getdoc(func)
247 print OInspect.getdoc(func)
248
248
249 def format_latex(self,strng):
249 def format_latex(self,strng):
250 """Format a string for latex inclusion."""
250 """Format a string for latex inclusion."""
251
251
252 # Characters that need to be escaped for latex:
252 # Characters that need to be escaped for latex:
253 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
253 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
254 # Magic command names as headers:
254 # Magic command names as headers:
255 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
255 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
256 re.MULTILINE)
256 re.MULTILINE)
257 # Magic commands
257 # Magic commands
258 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
258 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
259 re.MULTILINE)
259 re.MULTILINE)
260 # Paragraph continue
260 # Paragraph continue
261 par_re = re.compile(r'\\$',re.MULTILINE)
261 par_re = re.compile(r'\\$',re.MULTILINE)
262
262
263 # The "\n" symbol
263 # The "\n" symbol
264 newline_re = re.compile(r'\\n')
264 newline_re = re.compile(r'\\n')
265
265
266 # Now build the string for output:
266 # Now build the string for output:
267 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
267 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
268 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
268 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
269 strng)
269 strng)
270 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
270 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
271 strng = par_re.sub(r'\\\\',strng)
271 strng = par_re.sub(r'\\\\',strng)
272 strng = escape_re.sub(r'\\\1',strng)
272 strng = escape_re.sub(r'\\\1',strng)
273 strng = newline_re.sub(r'\\textbackslash{}n',strng)
273 strng = newline_re.sub(r'\\textbackslash{}n',strng)
274 return strng
274 return strng
275
275
276 def format_screen(self,strng):
276 def format_screen(self,strng):
277 """Format a string for screen printing.
277 """Format a string for screen printing.
278
278
279 This removes some latex-type format codes."""
279 This removes some latex-type format codes."""
280 # Paragraph continue
280 # Paragraph continue
281 par_re = re.compile(r'\\$',re.MULTILINE)
281 par_re = re.compile(r'\\$',re.MULTILINE)
282 strng = par_re.sub('',strng)
282 strng = par_re.sub('',strng)
283 return strng
283 return strng
284
284
285 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
285 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
286 """Parse options passed to an argument string.
286 """Parse options passed to an argument string.
287
287
288 The interface is similar to that of getopt(), but it returns back a
288 The interface is similar to that of getopt(), but it returns back a
289 Struct with the options as keys and the stripped argument string still
289 Struct with the options as keys and the stripped argument string still
290 as a string.
290 as a string.
291
291
292 arg_str is quoted as a true sys.argv vector by using shlex.split.
292 arg_str is quoted as a true sys.argv vector by using shlex.split.
293 This allows us to easily expand variables, glob files, quote
293 This allows us to easily expand variables, glob files, quote
294 arguments, etc.
294 arguments, etc.
295
295
296 Options:
296 Options:
297 -mode: default 'string'. If given as 'list', the argument string is
297 -mode: default 'string'. If given as 'list', the argument string is
298 returned as a list (split on whitespace) instead of a string.
298 returned as a list (split on whitespace) instead of a string.
299
299
300 -list_all: put all option values in lists. Normally only options
300 -list_all: put all option values in lists. Normally only options
301 appearing more than once are put in a list."""
301 appearing more than once are put in a list."""
302
302
303 # inject default options at the beginning of the input line
303 # inject default options at the beginning of the input line
304 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
304 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
305 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
305 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
306
306
307 mode = kw.get('mode','string')
307 mode = kw.get('mode','string')
308 if mode not in ['string','list']:
308 if mode not in ['string','list']:
309 raise ValueError,'incorrect mode given: %s' % mode
309 raise ValueError,'incorrect mode given: %s' % mode
310 # Get options
310 # Get options
311 list_all = kw.get('list_all',0)
311 list_all = kw.get('list_all',0)
312
312
313 # Check if we have more than one argument to warrant extra processing:
313 # Check if we have more than one argument to warrant extra processing:
314 odict = {} # Dictionary with options
314 odict = {} # Dictionary with options
315 args = arg_str.split()
315 args = arg_str.split()
316 if len(args) >= 1:
316 if len(args) >= 1:
317 # If the list of inputs only has 0 or 1 thing in it, there's no
317 # If the list of inputs only has 0 or 1 thing in it, there's no
318 # need to look for options
318 # need to look for options
319 argv = shlex_split(arg_str)
319 argv = shlex_split(arg_str)
320 # Do regular option processing
320 # Do regular option processing
321 try:
321 try:
322 opts,args = getopt(argv,opt_str,*long_opts)
322 opts,args = getopt(argv,opt_str,*long_opts)
323 except GetoptError,e:
323 except GetoptError,e:
324 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
324 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
325 " ".join(long_opts)))
325 " ".join(long_opts)))
326 for o,a in opts:
326 for o,a in opts:
327 if o.startswith('--'):
327 if o.startswith('--'):
328 o = o[2:]
328 o = o[2:]
329 else:
329 else:
330 o = o[1:]
330 o = o[1:]
331 try:
331 try:
332 odict[o].append(a)
332 odict[o].append(a)
333 except AttributeError:
333 except AttributeError:
334 odict[o] = [odict[o],a]
334 odict[o] = [odict[o],a]
335 except KeyError:
335 except KeyError:
336 if list_all:
336 if list_all:
337 odict[o] = [a]
337 odict[o] = [a]
338 else:
338 else:
339 odict[o] = a
339 odict[o] = a
340
340
341 # Prepare opts,args for return
341 # Prepare opts,args for return
342 opts = Struct(odict)
342 opts = Struct(odict)
343 if mode == 'string':
343 if mode == 'string':
344 args = ' '.join(args)
344 args = ' '.join(args)
345
345
346 return opts,args
346 return opts,args
347
347
348 #......................................................................
348 #......................................................................
349 # And now the actual magic functions
349 # And now the actual magic functions
350
350
351 # Functions for IPython shell work (vars,funcs, config, etc)
351 # Functions for IPython shell work (vars,funcs, config, etc)
352 def magic_lsmagic(self, parameter_s = ''):
352 def magic_lsmagic(self, parameter_s = ''):
353 """List currently available magic functions."""
353 """List currently available magic functions."""
354 mesc = self.shell.ESC_MAGIC
354 mesc = self.shell.ESC_MAGIC
355 print 'Available magic functions:\n'+mesc+\
355 print 'Available magic functions:\n'+mesc+\
356 (' '+mesc).join(self.lsmagic())
356 (' '+mesc).join(self.lsmagic())
357 print '\n' + Magic.auto_status[self.shell.rc.automagic]
357 print '\n' + Magic.auto_status[self.shell.rc.automagic]
358 return None
358 return None
359
359
360 def magic_magic(self, parameter_s = ''):
360 def magic_magic(self, parameter_s = ''):
361 """Print information about the magic function system."""
361 """Print information about the magic function system."""
362
362
363 mode = ''
363 mode = ''
364 try:
364 try:
365 if parameter_s.split()[0] == '-latex':
365 if parameter_s.split()[0] == '-latex':
366 mode = 'latex'
366 mode = 'latex'
367 except:
367 except:
368 pass
368 pass
369
369
370 magic_docs = []
370 magic_docs = []
371 for fname in self.lsmagic():
371 for fname in self.lsmagic():
372 mname = 'magic_' + fname
372 mname = 'magic_' + fname
373 for space in (Magic,self,self.__class__):
373 for space in (Magic,self,self.__class__):
374 try:
374 try:
375 fn = space.__dict__[mname]
375 fn = space.__dict__[mname]
376 except KeyError:
376 except KeyError:
377 pass
377 pass
378 else:
378 else:
379 break
379 break
380 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
380 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
381 fname,fn.__doc__))
381 fname,fn.__doc__))
382 magic_docs = ''.join(magic_docs)
382 magic_docs = ''.join(magic_docs)
383
383
384 if mode == 'latex':
384 if mode == 'latex':
385 print self.format_latex(magic_docs)
385 print self.format_latex(magic_docs)
386 return
386 return
387 else:
387 else:
388 magic_docs = self.format_screen(magic_docs)
388 magic_docs = self.format_screen(magic_docs)
389
389
390 outmsg = """
390 outmsg = """
391 IPython's 'magic' functions
391 IPython's 'magic' functions
392 ===========================
392 ===========================
393
393
394 The magic function system provides a series of functions which allow you to
394 The magic function system provides a series of functions which allow you to
395 control the behavior of IPython itself, plus a lot of system-type
395 control the behavior of IPython itself, plus a lot of system-type
396 features. All these functions are prefixed with a % character, but parameters
396 features. All these functions are prefixed with a % character, but parameters
397 are given without parentheses or quotes.
397 are given without parentheses or quotes.
398
398
399 NOTE: If you have 'automagic' enabled (via the command line option or with the
399 NOTE: If you have 'automagic' enabled (via the command line option or with the
400 %automagic function), you don't need to type in the % explicitly. By default,
400 %automagic function), you don't need to type in the % explicitly. By default,
401 IPython ships with automagic on, so you should only rarely need the % escape.
401 IPython ships with automagic on, so you should only rarely need the % escape.
402
402
403 Example: typing '%cd mydir' (without the quotes) changes you working directory
403 Example: typing '%cd mydir' (without the quotes) changes you working directory
404 to 'mydir', if it exists.
404 to 'mydir', if it exists.
405
405
406 You can define your own magic functions to extend the system. See the supplied
406 You can define your own magic functions to extend the system. See the supplied
407 ipythonrc and example-magic.py files for details (in your ipython
407 ipythonrc and example-magic.py files for details (in your ipython
408 configuration directory, typically $HOME/.ipython/).
408 configuration directory, typically $HOME/.ipython/).
409
409
410 You can also define your own aliased names for magic functions. In your
410 You can also define your own aliased names for magic functions. In your
411 ipythonrc file, placing a line like:
411 ipythonrc file, placing a line like:
412
412
413 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
413 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
414
414
415 will define %pf as a new name for %profile.
415 will define %pf as a new name for %profile.
416
416
417 You can also call magics in code using the ipmagic() function, which IPython
417 You can also call magics in code using the ipmagic() function, which IPython
418 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
418 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
419
419
420 For a list of the available magic functions, use %lsmagic. For a description
420 For a list of the available magic functions, use %lsmagic. For a description
421 of any of them, type %magic_name?, e.g. '%cd?'.
421 of any of them, type %magic_name?, e.g. '%cd?'.
422
422
423 Currently the magic system has the following functions:\n"""
423 Currently the magic system has the following functions:\n"""
424
424
425 mesc = self.shell.ESC_MAGIC
425 mesc = self.shell.ESC_MAGIC
426 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
426 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
427 "\n\n%s%s\n\n%s" % (outmsg,
427 "\n\n%s%s\n\n%s" % (outmsg,
428 magic_docs,mesc,mesc,
428 magic_docs,mesc,mesc,
429 (' '+mesc).join(self.lsmagic()),
429 (' '+mesc).join(self.lsmagic()),
430 Magic.auto_status[self.shell.rc.automagic] ) )
430 Magic.auto_status[self.shell.rc.automagic] ) )
431
431
432 page(outmsg,screen_lines=self.shell.rc.screen_length)
432 page(outmsg,screen_lines=self.shell.rc.screen_length)
433
433
434 def magic_automagic(self, parameter_s = ''):
434 def magic_automagic(self, parameter_s = ''):
435 """Make magic functions callable without having to type the initial %.
435 """Make magic functions callable without having to type the initial %.
436
436
437 Toggles on/off (when off, you must call it as %automagic, of
437 Toggles on/off (when off, you must call it as %automagic, of
438 course). Note that magic functions have lowest priority, so if there's
438 course). Note that magic functions have lowest priority, so if there's
439 a variable whose name collides with that of a magic fn, automagic
439 a variable whose name collides with that of a magic fn, automagic
440 won't work for that function (you get the variable instead). However,
440 won't work for that function (you get the variable instead). However,
441 if you delete the variable (del var), the previously shadowed magic
441 if you delete the variable (del var), the previously shadowed magic
442 function becomes visible to automagic again."""
442 function becomes visible to automagic again."""
443
443
444 rc = self.shell.rc
444 rc = self.shell.rc
445 rc.automagic = not rc.automagic
445 rc.automagic = not rc.automagic
446 print '\n' + Magic.auto_status[rc.automagic]
446 print '\n' + Magic.auto_status[rc.automagic]
447
447
448 def magic_autocall(self, parameter_s = ''):
448 def magic_autocall(self, parameter_s = ''):
449 """Make functions callable without having to type parentheses.
449 """Make functions callable without having to type parentheses.
450
450
451 Usage:
451 Usage:
452
452
453 %autocall [mode]
453 %autocall [mode]
454
454
455 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
455 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
456 value is toggled on and off (remembering the previous state)."""
456 value is toggled on and off (remembering the previous state)."""
457
457
458 rc = self.shell.rc
458 rc = self.shell.rc
459
459
460 if parameter_s:
460 if parameter_s:
461 arg = int(parameter_s)
461 arg = int(parameter_s)
462 else:
462 else:
463 arg = 'toggle'
463 arg = 'toggle'
464
464
465 if not arg in (0,1,2,'toggle'):
465 if not arg in (0,1,2,'toggle'):
466 error('Valid modes: (0->Off, 1->Smart, 2->Full')
466 error('Valid modes: (0->Off, 1->Smart, 2->Full')
467 return
467 return
468
468
469 if arg in (0,1,2):
469 if arg in (0,1,2):
470 rc.autocall = arg
470 rc.autocall = arg
471 else: # toggle
471 else: # toggle
472 if rc.autocall:
472 if rc.autocall:
473 self._magic_state.autocall_save = rc.autocall
473 self._magic_state.autocall_save = rc.autocall
474 rc.autocall = 0
474 rc.autocall = 0
475 else:
475 else:
476 try:
476 try:
477 rc.autocall = self._magic_state.autocall_save
477 rc.autocall = self._magic_state.autocall_save
478 except AttributeError:
478 except AttributeError:
479 rc.autocall = self._magic_state.autocall_save = 1
479 rc.autocall = self._magic_state.autocall_save = 1
480
480
481 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
481 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
482
482
483 def magic_autoindent(self, parameter_s = ''):
483 def magic_autoindent(self, parameter_s = ''):
484 """Toggle autoindent on/off (if available)."""
484 """Toggle autoindent on/off (if available)."""
485
485
486 self.shell.set_autoindent()
486 self.shell.set_autoindent()
487 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
487 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
488
488
489 def magic_system_verbose(self, parameter_s = ''):
489 def magic_system_verbose(self, parameter_s = ''):
490 """Toggle verbose printing of system calls on/off."""
490 """Toggle verbose printing of system calls on/off."""
491
491
492 self.shell.rc_set_toggle('system_verbose')
492 self.shell.rc_set_toggle('system_verbose')
493 print "System verbose printing is:",\
493 print "System verbose printing is:",\
494 ['OFF','ON'][self.shell.rc.system_verbose]
494 ['OFF','ON'][self.shell.rc.system_verbose]
495
495
496 def magic_history(self, parameter_s = ''):
496 def magic_history(self, parameter_s = ''):
497 """Print input history (_i<n> variables), with most recent last.
497 """Print input history (_i<n> variables), with most recent last.
498
498
499 %history -> print at most 40 inputs (some may be multi-line)\\
499 %history -> print at most 40 inputs (some may be multi-line)\\
500 %history n -> print at most n inputs\\
500 %history n -> print at most n inputs\\
501 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
501 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
502
502
503 Each input's number <n> is shown, and is accessible as the
503 Each input's number <n> is shown, and is accessible as the
504 automatically generated variable _i<n>. Multi-line statements are
504 automatically generated variable _i<n>. Multi-line statements are
505 printed starting at a new line for easy copy/paste.
505 printed starting at a new line for easy copy/paste.
506
506
507
507
508 Options:
508 Options:
509
509
510 -n: do NOT print line numbers. This is useful if you want to get a
510 -n: do NOT print line numbers. This is useful if you want to get a
511 printout of many lines which can be directly pasted into a text
511 printout of many lines which can be directly pasted into a text
512 editor.
512 editor.
513
513
514 This feature is only available if numbered prompts are in use.
514 This feature is only available if numbered prompts are in use.
515
515
516 -r: print the 'raw' history. IPython filters your input and
516 -r: print the 'raw' history. IPython filters your input and
517 converts it all into valid Python source before executing it (things
517 converts it all into valid Python source before executing it (things
518 like magics or aliases are turned into function calls, for
518 like magics or aliases are turned into function calls, for
519 example). With this option, you'll see the unfiltered history
519 example). With this option, you'll see the unfiltered history
520 instead of the filtered version: '%cd /' will be seen as '%cd /'
520 instead of the filtered version: '%cd /' will be seen as '%cd /'
521 instead of '_ip.magic("%cd /")'.
521 instead of '_ip.magic("%cd /")'.
522 """
522 """
523
523
524 shell = self.shell
524 shell = self.shell
525 if not shell.outputcache.do_full_cache:
525 if not shell.outputcache.do_full_cache:
526 print 'This feature is only available if numbered prompts are in use.'
526 print 'This feature is only available if numbered prompts are in use.'
527 return
527 return
528 opts,args = self.parse_options(parameter_s,'nr',mode='list')
528 opts,args = self.parse_options(parameter_s,'nr',mode='list')
529
529
530 if opts.has_key('r'):
530 if opts.has_key('r'):
531 input_hist = shell.input_hist_raw
531 input_hist = shell.input_hist_raw
532 else:
532 else:
533 input_hist = shell.input_hist
533 input_hist = shell.input_hist
534
534
535 default_length = 40
535 default_length = 40
536 if len(args) == 0:
536 if len(args) == 0:
537 final = len(input_hist)
537 final = len(input_hist)
538 init = max(1,final-default_length)
538 init = max(1,final-default_length)
539 elif len(args) == 1:
539 elif len(args) == 1:
540 final = len(input_hist)
540 final = len(input_hist)
541 init = max(1,final-int(args[0]))
541 init = max(1,final-int(args[0]))
542 elif len(args) == 2:
542 elif len(args) == 2:
543 init,final = map(int,args)
543 init,final = map(int,args)
544 else:
544 else:
545 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
545 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
546 print self.magic_hist.__doc__
546 print self.magic_hist.__doc__
547 return
547 return
548 width = len(str(final))
548 width = len(str(final))
549 line_sep = ['','\n']
549 line_sep = ['','\n']
550 print_nums = not opts.has_key('n')
550 print_nums = not opts.has_key('n')
551 for in_num in range(init,final):
551 for in_num in range(init,final):
552 inline = input_hist[in_num]
552 inline = input_hist[in_num]
553 multiline = int(inline.count('\n') > 1)
553 multiline = int(inline.count('\n') > 1)
554 if print_nums:
554 if print_nums:
555 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
555 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
556 print inline,
556 print inline,
557
557
558 def magic_hist(self, parameter_s=''):
558 def magic_hist(self, parameter_s=''):
559 """Alternate name for %history."""
559 """Alternate name for %history."""
560 return self.magic_history(parameter_s)
560 return self.magic_history(parameter_s)
561
561
562 def magic_p(self, parameter_s=''):
562 def magic_p(self, parameter_s=''):
563 """Just a short alias for Python's 'print'."""
563 """Just a short alias for Python's 'print'."""
564 exec 'print ' + parameter_s in self.shell.user_ns
564 exec 'print ' + parameter_s in self.shell.user_ns
565
565
566 def magic_r(self, parameter_s=''):
566 def magic_r(self, parameter_s=''):
567 """Repeat previous input.
567 """Repeat previous input.
568
568
569 If given an argument, repeats the previous command which starts with
569 If given an argument, repeats the previous command which starts with
570 the same string, otherwise it just repeats the previous input.
570 the same string, otherwise it just repeats the previous input.
571
571
572 Shell escaped commands (with ! as first character) are not recognized
572 Shell escaped commands (with ! as first character) are not recognized
573 by this system, only pure python code and magic commands.
573 by this system, only pure python code and magic commands.
574 """
574 """
575
575
576 start = parameter_s.strip()
576 start = parameter_s.strip()
577 esc_magic = self.shell.ESC_MAGIC
577 esc_magic = self.shell.ESC_MAGIC
578 # Identify magic commands even if automagic is on (which means
578 # Identify magic commands even if automagic is on (which means
579 # the in-memory version is different from that typed by the user).
579 # the in-memory version is different from that typed by the user).
580 if self.shell.rc.automagic:
580 if self.shell.rc.automagic:
581 start_magic = esc_magic+start
581 start_magic = esc_magic+start
582 else:
582 else:
583 start_magic = start
583 start_magic = start
584 # Look through the input history in reverse
584 # Look through the input history in reverse
585 for n in range(len(self.shell.input_hist)-2,0,-1):
585 for n in range(len(self.shell.input_hist)-2,0,-1):
586 input = self.shell.input_hist[n]
586 input = self.shell.input_hist[n]
587 # skip plain 'r' lines so we don't recurse to infinity
587 # skip plain 'r' lines so we don't recurse to infinity
588 if input != '_ip.magic("r")\n' and \
588 if input != '_ip.magic("r")\n' and \
589 (input.startswith(start) or input.startswith(start_magic)):
589 (input.startswith(start) or input.startswith(start_magic)):
590 #print 'match',`input` # dbg
590 #print 'match',`input` # dbg
591 print 'Executing:',input,
591 print 'Executing:',input,
592 self.shell.runlines(input)
592 self.shell.runlines(input)
593 return
593 return
594 print 'No previous input matching `%s` found.' % start
594 print 'No previous input matching `%s` found.' % start
595
595
596 def magic_page(self, parameter_s=''):
596 def magic_page(self, parameter_s=''):
597 """Pretty print the object and display it through a pager.
597 """Pretty print the object and display it through a pager.
598
598
599 If no parameter is given, use _ (last output)."""
599 If no parameter is given, use _ (last output)."""
600 # After a function contributed by Olivier Aubert, slightly modified.
600 # After a function contributed by Olivier Aubert, slightly modified.
601
601
602 oname = parameter_s and parameter_s or '_'
602 oname = parameter_s and parameter_s or '_'
603 info = self._ofind(oname)
603 info = self._ofind(oname)
604 if info['found']:
604 if info['found']:
605 page(pformat(info['obj']))
605 page(pformat(info['obj']))
606 else:
606 else:
607 print 'Object `%s` not found' % oname
607 print 'Object `%s` not found' % oname
608
608
609 def magic_profile(self, parameter_s=''):
609 def magic_profile(self, parameter_s=''):
610 """Print your currently active IPyhton profile."""
610 """Print your currently active IPyhton profile."""
611 if self.shell.rc.profile:
611 if self.shell.rc.profile:
612 printpl('Current IPython profile: $self.shell.rc.profile.')
612 printpl('Current IPython profile: $self.shell.rc.profile.')
613 else:
613 else:
614 print 'No profile active.'
614 print 'No profile active.'
615
615
616 def _inspect(self,meth,oname,**kw):
616 def _inspect(self,meth,oname,**kw):
617 """Generic interface to the inspector system.
617 """Generic interface to the inspector system.
618
618
619 This function is meant to be called by pdef, pdoc & friends."""
619 This function is meant to be called by pdef, pdoc & friends."""
620
620
621 oname = oname.strip()
621 oname = oname.strip()
622 info = Struct(self._ofind(oname))
622 info = Struct(self._ofind(oname))
623 if info.found:
623 if info.found:
624 pmethod = getattr(self.shell.inspector,meth)
624 pmethod = getattr(self.shell.inspector,meth)
625 formatter = info.ismagic and self.format_screen or None
625 formatter = info.ismagic and self.format_screen or None
626 if meth == 'pdoc':
626 if meth == 'pdoc':
627 pmethod(info.obj,oname,formatter)
627 pmethod(info.obj,oname,formatter)
628 elif meth == 'pinfo':
628 elif meth == 'pinfo':
629 pmethod(info.obj,oname,formatter,info,**kw)
629 pmethod(info.obj,oname,formatter,info,**kw)
630 else:
630 else:
631 pmethod(info.obj,oname)
631 pmethod(info.obj,oname)
632 else:
632 else:
633 print 'Object `%s` not found.' % oname
633 print 'Object `%s` not found.' % oname
634 return 'not found' # so callers can take other action
634 return 'not found' # so callers can take other action
635
635
636 def magic_pdef(self, parameter_s=''):
636 def magic_pdef(self, parameter_s=''):
637 """Print the definition header for any callable object.
637 """Print the definition header for any callable object.
638
638
639 If the object is a class, print the constructor information."""
639 If the object is a class, print the constructor information."""
640 self._inspect('pdef',parameter_s)
640 self._inspect('pdef',parameter_s)
641
641
642 def magic_pdoc(self, parameter_s=''):
642 def magic_pdoc(self, parameter_s=''):
643 """Print the docstring for an object.
643 """Print the docstring for an object.
644
644
645 If the given object is a class, it will print both the class and the
645 If the given object is a class, it will print both the class and the
646 constructor docstrings."""
646 constructor docstrings."""
647 self._inspect('pdoc',parameter_s)
647 self._inspect('pdoc',parameter_s)
648
648
649 def magic_psource(self, parameter_s=''):
649 def magic_psource(self, parameter_s=''):
650 """Print (or run through pager) the source code for an object."""
650 """Print (or run through pager) the source code for an object."""
651 self._inspect('psource',parameter_s)
651 self._inspect('psource',parameter_s)
652
652
653 def magic_pfile(self, parameter_s=''):
653 def magic_pfile(self, parameter_s=''):
654 """Print (or run through pager) the file where an object is defined.
654 """Print (or run through pager) the file where an object is defined.
655
655
656 The file opens at the line where the object definition begins. IPython
656 The file opens at the line where the object definition begins. IPython
657 will honor the environment variable PAGER if set, and otherwise will
657 will honor the environment variable PAGER if set, and otherwise will
658 do its best to print the file in a convenient form.
658 do its best to print the file in a convenient form.
659
659
660 If the given argument is not an object currently defined, IPython will
660 If the given argument is not an object currently defined, IPython will
661 try to interpret it as a filename (automatically adding a .py extension
661 try to interpret it as a filename (automatically adding a .py extension
662 if needed). You can thus use %pfile as a syntax highlighting code
662 if needed). You can thus use %pfile as a syntax highlighting code
663 viewer."""
663 viewer."""
664
664
665 # first interpret argument as an object name
665 # first interpret argument as an object name
666 out = self._inspect('pfile',parameter_s)
666 out = self._inspect('pfile',parameter_s)
667 # if not, try the input as a filename
667 # if not, try the input as a filename
668 if out == 'not found':
668 if out == 'not found':
669 try:
669 try:
670 filename = get_py_filename(parameter_s)
670 filename = get_py_filename(parameter_s)
671 except IOError,msg:
671 except IOError,msg:
672 print msg
672 print msg
673 return
673 return
674 page(self.shell.inspector.format(file(filename).read()))
674 page(self.shell.inspector.format(file(filename).read()))
675
675
676 def magic_pinfo(self, parameter_s=''):
676 def magic_pinfo(self, parameter_s=''):
677 """Provide detailed information about an object.
677 """Provide detailed information about an object.
678
678
679 '%pinfo object' is just a synonym for object? or ?object."""
679 '%pinfo object' is just a synonym for object? or ?object."""
680
680
681 #print 'pinfo par: <%s>' % parameter_s # dbg
681 #print 'pinfo par: <%s>' % parameter_s # dbg
682
682
683 # detail_level: 0 -> obj? , 1 -> obj??
683 # detail_level: 0 -> obj? , 1 -> obj??
684 detail_level = 0
684 detail_level = 0
685 # We need to detect if we got called as 'pinfo pinfo foo', which can
685 # We need to detect if we got called as 'pinfo pinfo foo', which can
686 # happen if the user types 'pinfo foo?' at the cmd line.
686 # happen if the user types 'pinfo foo?' at the cmd line.
687 pinfo,qmark1,oname,qmark2 = \
687 pinfo,qmark1,oname,qmark2 = \
688 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
688 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
689 if pinfo or qmark1 or qmark2:
689 if pinfo or qmark1 or qmark2:
690 detail_level = 1
690 detail_level = 1
691 if "*" in oname:
691 if "*" in oname:
692 self.magic_psearch(oname)
692 self.magic_psearch(oname)
693 else:
693 else:
694 self._inspect('pinfo',oname,detail_level=detail_level)
694 self._inspect('pinfo',oname,detail_level=detail_level)
695
695
696 def magic_psearch(self, parameter_s=''):
696 def magic_psearch(self, parameter_s=''):
697 """Search for object in namespaces by wildcard.
697 """Search for object in namespaces by wildcard.
698
698
699 %psearch [options] PATTERN [OBJECT TYPE]
699 %psearch [options] PATTERN [OBJECT TYPE]
700
700
701 Note: ? can be used as a synonym for %psearch, at the beginning or at
701 Note: ? can be used as a synonym for %psearch, at the beginning or at
702 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
702 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
703 rest of the command line must be unchanged (options come first), so
703 rest of the command line must be unchanged (options come first), so
704 for example the following forms are equivalent
704 for example the following forms are equivalent
705
705
706 %psearch -i a* function
706 %psearch -i a* function
707 -i a* function?
707 -i a* function?
708 ?-i a* function
708 ?-i a* function
709
709
710 Arguments:
710 Arguments:
711
711
712 PATTERN
712 PATTERN
713
713
714 where PATTERN is a string containing * as a wildcard similar to its
714 where PATTERN is a string containing * as a wildcard similar to its
715 use in a shell. The pattern is matched in all namespaces on the
715 use in a shell. The pattern is matched in all namespaces on the
716 search path. By default objects starting with a single _ are not
716 search path. By default objects starting with a single _ are not
717 matched, many IPython generated objects have a single
717 matched, many IPython generated objects have a single
718 underscore. The default is case insensitive matching. Matching is
718 underscore. The default is case insensitive matching. Matching is
719 also done on the attributes of objects and not only on the objects
719 also done on the attributes of objects and not only on the objects
720 in a module.
720 in a module.
721
721
722 [OBJECT TYPE]
722 [OBJECT TYPE]
723
723
724 Is the name of a python type from the types module. The name is
724 Is the name of a python type from the types module. The name is
725 given in lowercase without the ending type, ex. StringType is
725 given in lowercase without the ending type, ex. StringType is
726 written string. By adding a type here only objects matching the
726 written string. By adding a type here only objects matching the
727 given type are matched. Using all here makes the pattern match all
727 given type are matched. Using all here makes the pattern match all
728 types (this is the default).
728 types (this is the default).
729
729
730 Options:
730 Options:
731
731
732 -a: makes the pattern match even objects whose names start with a
732 -a: makes the pattern match even objects whose names start with a
733 single underscore. These names are normally ommitted from the
733 single underscore. These names are normally ommitted from the
734 search.
734 search.
735
735
736 -i/-c: make the pattern case insensitive/sensitive. If neither of
736 -i/-c: make the pattern case insensitive/sensitive. If neither of
737 these options is given, the default is read from your ipythonrc
737 these options is given, the default is read from your ipythonrc
738 file. The option name which sets this value is
738 file. The option name which sets this value is
739 'wildcards_case_sensitive'. If this option is not specified in your
739 'wildcards_case_sensitive'. If this option is not specified in your
740 ipythonrc file, IPython's internal default is to do a case sensitive
740 ipythonrc file, IPython's internal default is to do a case sensitive
741 search.
741 search.
742
742
743 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
743 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
744 specifiy can be searched in any of the following namespaces:
744 specifiy can be searched in any of the following namespaces:
745 'builtin', 'user', 'user_global','internal', 'alias', where
745 'builtin', 'user', 'user_global','internal', 'alias', where
746 'builtin' and 'user' are the search defaults. Note that you should
746 'builtin' and 'user' are the search defaults. Note that you should
747 not use quotes when specifying namespaces.
747 not use quotes when specifying namespaces.
748
748
749 'Builtin' contains the python module builtin, 'user' contains all
749 'Builtin' contains the python module builtin, 'user' contains all
750 user data, 'alias' only contain the shell aliases and no python
750 user data, 'alias' only contain the shell aliases and no python
751 objects, 'internal' contains objects used by IPython. The
751 objects, 'internal' contains objects used by IPython. The
752 'user_global' namespace is only used by embedded IPython instances,
752 'user_global' namespace is only used by embedded IPython instances,
753 and it contains module-level globals. You can add namespaces to the
753 and it contains module-level globals. You can add namespaces to the
754 search with -s or exclude them with -e (these options can be given
754 search with -s or exclude them with -e (these options can be given
755 more than once).
755 more than once).
756
756
757 Examples:
757 Examples:
758
758
759 %psearch a* -> objects beginning with an a
759 %psearch a* -> objects beginning with an a
760 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
760 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
761 %psearch a* function -> all functions beginning with an a
761 %psearch a* function -> all functions beginning with an a
762 %psearch re.e* -> objects beginning with an e in module re
762 %psearch re.e* -> objects beginning with an e in module re
763 %psearch r*.e* -> objects that start with e in modules starting in r
763 %psearch r*.e* -> objects that start with e in modules starting in r
764 %psearch r*.* string -> all strings in modules beginning with r
764 %psearch r*.* string -> all strings in modules beginning with r
765
765
766 Case sensitve search:
766 Case sensitve search:
767
767
768 %psearch -c a* list all object beginning with lower case a
768 %psearch -c a* list all object beginning with lower case a
769
769
770 Show objects beginning with a single _:
770 Show objects beginning with a single _:
771
771
772 %psearch -a _* list objects beginning with a single underscore"""
772 %psearch -a _* list objects beginning with a single underscore"""
773
773
774 # default namespaces to be searched
774 # default namespaces to be searched
775 def_search = ['user','builtin']
775 def_search = ['user','builtin']
776
776
777 # Process options/args
777 # Process options/args
778 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
778 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
779 opt = opts.get
779 opt = opts.get
780 shell = self.shell
780 shell = self.shell
781 psearch = shell.inspector.psearch
781 psearch = shell.inspector.psearch
782
782
783 # select case options
783 # select case options
784 if opts.has_key('i'):
784 if opts.has_key('i'):
785 ignore_case = True
785 ignore_case = True
786 elif opts.has_key('c'):
786 elif opts.has_key('c'):
787 ignore_case = False
787 ignore_case = False
788 else:
788 else:
789 ignore_case = not shell.rc.wildcards_case_sensitive
789 ignore_case = not shell.rc.wildcards_case_sensitive
790
790
791 # Build list of namespaces to search from user options
791 # Build list of namespaces to search from user options
792 def_search.extend(opt('s',[]))
792 def_search.extend(opt('s',[]))
793 ns_exclude = ns_exclude=opt('e',[])
793 ns_exclude = ns_exclude=opt('e',[])
794 ns_search = [nm for nm in def_search if nm not in ns_exclude]
794 ns_search = [nm for nm in def_search if nm not in ns_exclude]
795
795
796 # Call the actual search
796 # Call the actual search
797 try:
797 try:
798 psearch(args,shell.ns_table,ns_search,
798 psearch(args,shell.ns_table,ns_search,
799 show_all=opt('a'),ignore_case=ignore_case)
799 show_all=opt('a'),ignore_case=ignore_case)
800 except:
800 except:
801 shell.showtraceback()
801 shell.showtraceback()
802
802
803 def magic_who_ls(self, parameter_s=''):
803 def magic_who_ls(self, parameter_s=''):
804 """Return a sorted list of all interactive variables.
804 """Return a sorted list of all interactive variables.
805
805
806 If arguments are given, only variables of types matching these
806 If arguments are given, only variables of types matching these
807 arguments are returned."""
807 arguments are returned."""
808
808
809 user_ns = self.shell.user_ns
809 user_ns = self.shell.user_ns
810 internal_ns = self.shell.internal_ns
810 internal_ns = self.shell.internal_ns
811 user_config_ns = self.shell.user_config_ns
811 user_config_ns = self.shell.user_config_ns
812 out = []
812 out = []
813 typelist = parameter_s.split()
813 typelist = parameter_s.split()
814
814
815 for i in user_ns:
815 for i in user_ns:
816 if not (i.startswith('_') or i.startswith('_i')) \
816 if not (i.startswith('_') or i.startswith('_i')) \
817 and not (i in internal_ns or i in user_config_ns):
817 and not (i in internal_ns or i in user_config_ns):
818 if typelist:
818 if typelist:
819 if type(user_ns[i]).__name__ in typelist:
819 if type(user_ns[i]).__name__ in typelist:
820 out.append(i)
820 out.append(i)
821 else:
821 else:
822 out.append(i)
822 out.append(i)
823 out.sort()
823 out.sort()
824 return out
824 return out
825
825
826 def magic_who(self, parameter_s=''):
826 def magic_who(self, parameter_s=''):
827 """Print all interactive variables, with some minimal formatting.
827 """Print all interactive variables, with some minimal formatting.
828
828
829 If any arguments are given, only variables whose type matches one of
829 If any arguments are given, only variables whose type matches one of
830 these are printed. For example:
830 these are printed. For example:
831
831
832 %who function str
832 %who function str
833
833
834 will only list functions and strings, excluding all other types of
834 will only list functions and strings, excluding all other types of
835 variables. To find the proper type names, simply use type(var) at a
835 variables. To find the proper type names, simply use type(var) at a
836 command line to see how python prints type names. For example:
836 command line to see how python prints type names. For example:
837
837
838 In [1]: type('hello')\\
838 In [1]: type('hello')\\
839 Out[1]: <type 'str'>
839 Out[1]: <type 'str'>
840
840
841 indicates that the type name for strings is 'str'.
841 indicates that the type name for strings is 'str'.
842
842
843 %who always excludes executed names loaded through your configuration
843 %who always excludes executed names loaded through your configuration
844 file and things which are internal to IPython.
844 file and things which are internal to IPython.
845
845
846 This is deliberate, as typically you may load many modules and the
846 This is deliberate, as typically you may load many modules and the
847 purpose of %who is to show you only what you've manually defined."""
847 purpose of %who is to show you only what you've manually defined."""
848
848
849 varlist = self.magic_who_ls(parameter_s)
849 varlist = self.magic_who_ls(parameter_s)
850 if not varlist:
850 if not varlist:
851 print 'Interactive namespace is empty.'
851 print 'Interactive namespace is empty.'
852 return
852 return
853
853
854 # if we have variables, move on...
854 # if we have variables, move on...
855
855
856 # stupid flushing problem: when prompts have no separators, stdout is
856 # stupid flushing problem: when prompts have no separators, stdout is
857 # getting lost. I'm starting to think this is a python bug. I'm having
857 # getting lost. I'm starting to think this is a python bug. I'm having
858 # to force a flush with a print because even a sys.stdout.flush
858 # to force a flush with a print because even a sys.stdout.flush
859 # doesn't seem to do anything!
859 # doesn't seem to do anything!
860
860
861 count = 0
861 count = 0
862 for i in varlist:
862 for i in varlist:
863 print i+'\t',
863 print i+'\t',
864 count += 1
864 count += 1
865 if count > 8:
865 if count > 8:
866 count = 0
866 count = 0
867 print
867 print
868 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
868 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
869
869
870 print # well, this does force a flush at the expense of an extra \n
870 print # well, this does force a flush at the expense of an extra \n
871
871
872 def magic_whos(self, parameter_s=''):
872 def magic_whos(self, parameter_s=''):
873 """Like %who, but gives some extra information about each variable.
873 """Like %who, but gives some extra information about each variable.
874
874
875 The same type filtering of %who can be applied here.
875 The same type filtering of %who can be applied here.
876
876
877 For all variables, the type is printed. Additionally it prints:
877 For all variables, the type is printed. Additionally it prints:
878
878
879 - For {},[],(): their length.
879 - For {},[],(): their length.
880
880
881 - For Numeric arrays, a summary with shape, number of elements,
881 - For Numeric arrays, a summary with shape, number of elements,
882 typecode and size in memory.
882 typecode and size in memory.
883
883
884 - Everything else: a string representation, snipping their middle if
884 - Everything else: a string representation, snipping their middle if
885 too long."""
885 too long."""
886
886
887 varnames = self.magic_who_ls(parameter_s)
887 varnames = self.magic_who_ls(parameter_s)
888 if not varnames:
888 if not varnames:
889 print 'Interactive namespace is empty.'
889 print 'Interactive namespace is empty.'
890 return
890 return
891
891
892 # if we have variables, move on...
892 # if we have variables, move on...
893
893
894 # for these types, show len() instead of data:
894 # for these types, show len() instead of data:
895 seq_types = [types.DictType,types.ListType,types.TupleType]
895 seq_types = [types.DictType,types.ListType,types.TupleType]
896
896
897 # for Numeric arrays, display summary info
897 # for Numeric arrays, display summary info
898 try:
898 try:
899 import Numeric
899 import Numeric
900 except ImportError:
900 except ImportError:
901 array_type = None
901 array_type = None
902 else:
902 else:
903 array_type = Numeric.ArrayType.__name__
903 array_type = Numeric.ArrayType.__name__
904
904
905 # Find all variable names and types so we can figure out column sizes
905 # Find all variable names and types so we can figure out column sizes
906 get_vars = lambda i: self.shell.user_ns[i]
906 get_vars = lambda i: self.shell.user_ns[i]
907 type_name = lambda v: type(v).__name__
907 type_name = lambda v: type(v).__name__
908 varlist = map(get_vars,varnames)
908 varlist = map(get_vars,varnames)
909
909
910 typelist = []
910 typelist = []
911 for vv in varlist:
911 for vv in varlist:
912 tt = type_name(vv)
912 tt = type_name(vv)
913 if tt=='instance':
913 if tt=='instance':
914 typelist.append(str(vv.__class__))
914 typelist.append(str(vv.__class__))
915 else:
915 else:
916 typelist.append(tt)
916 typelist.append(tt)
917
917
918 # column labels and # of spaces as separator
918 # column labels and # of spaces as separator
919 varlabel = 'Variable'
919 varlabel = 'Variable'
920 typelabel = 'Type'
920 typelabel = 'Type'
921 datalabel = 'Data/Info'
921 datalabel = 'Data/Info'
922 colsep = 3
922 colsep = 3
923 # variable format strings
923 # variable format strings
924 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
924 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
925 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
925 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
926 aformat = "%s: %s elems, type `%s`, %s bytes"
926 aformat = "%s: %s elems, type `%s`, %s bytes"
927 # find the size of the columns to format the output nicely
927 # find the size of the columns to format the output nicely
928 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
928 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
929 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
929 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
930 # table header
930 # table header
931 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
931 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
932 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
932 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
933 # and the table itself
933 # and the table itself
934 kb = 1024
934 kb = 1024
935 Mb = 1048576 # kb**2
935 Mb = 1048576 # kb**2
936 for vname,var,vtype in zip(varnames,varlist,typelist):
936 for vname,var,vtype in zip(varnames,varlist,typelist):
937 print itpl(vformat),
937 print itpl(vformat),
938 if vtype in seq_types:
938 if vtype in seq_types:
939 print len(var)
939 print len(var)
940 elif vtype==array_type:
940 elif vtype==array_type:
941 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
941 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
942 vsize = Numeric.size(var)
942 vsize = Numeric.size(var)
943 vbytes = vsize*var.itemsize()
943 vbytes = vsize*var.itemsize()
944 if vbytes < 100000:
944 if vbytes < 100000:
945 print aformat % (vshape,vsize,var.typecode(),vbytes)
945 print aformat % (vshape,vsize,var.typecode(),vbytes)
946 else:
946 else:
947 print aformat % (vshape,vsize,var.typecode(),vbytes),
947 print aformat % (vshape,vsize,var.typecode(),vbytes),
948 if vbytes < Mb:
948 if vbytes < Mb:
949 print '(%s kb)' % (vbytes/kb,)
949 print '(%s kb)' % (vbytes/kb,)
950 else:
950 else:
951 print '(%s Mb)' % (vbytes/Mb,)
951 print '(%s Mb)' % (vbytes/Mb,)
952 else:
952 else:
953 vstr = str(var).replace('\n','\\n')
953 vstr = str(var).replace('\n','\\n')
954 if len(vstr) < 50:
954 if len(vstr) < 50:
955 print vstr
955 print vstr
956 else:
956 else:
957 printpl(vfmt_short)
957 printpl(vfmt_short)
958
958
959 def magic_reset(self, parameter_s=''):
959 def magic_reset(self, parameter_s=''):
960 """Resets the namespace by removing all names defined by the user.
960 """Resets the namespace by removing all names defined by the user.
961
961
962 Input/Output history are left around in case you need them."""
962 Input/Output history are left around in case you need them."""
963
963
964 ans = raw_input(
964 ans = raw_input(
965 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
965 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
966 if not ans.lower() == 'y':
966 if not ans.lower() == 'y':
967 print 'Nothing done.'
967 print 'Nothing done.'
968 return
968 return
969 user_ns = self.shell.user_ns
969 user_ns = self.shell.user_ns
970 for i in self.magic_who_ls():
970 for i in self.magic_who_ls():
971 del(user_ns[i])
971 del(user_ns[i])
972
972
973 def magic_config(self,parameter_s=''):
973 def magic_config(self,parameter_s=''):
974 """Show IPython's internal configuration."""
974 """Show IPython's internal configuration."""
975
975
976 page('Current configuration structure:\n'+
976 page('Current configuration structure:\n'+
977 pformat(self.shell.rc.dict()))
977 pformat(self.shell.rc.dict()))
978
978
979 def magic_logstart(self,parameter_s=''):
979 def magic_logstart(self,parameter_s=''):
980 """Start logging anywhere in a session.
980 """Start logging anywhere in a session.
981
981
982 %logstart [-o|-t] [log_name [log_mode]]
982 %logstart [-o|-t] [log_name [log_mode]]
983
983
984 If no name is given, it defaults to a file named 'ipython_log.py' in your
984 If no name is given, it defaults to a file named 'ipython_log.py' in your
985 current directory, in 'rotate' mode (see below).
985 current directory, in 'rotate' mode (see below).
986
986
987 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
987 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
988 history up to that point and then continues logging.
988 history up to that point and then continues logging.
989
989
990 %logstart takes a second optional parameter: logging mode. This can be one
990 %logstart takes a second optional parameter: logging mode. This can be one
991 of (note that the modes are given unquoted):\\
991 of (note that the modes are given unquoted):\\
992 append: well, that says it.\\
992 append: well, that says it.\\
993 backup: rename (if exists) to name~ and start name.\\
993 backup: rename (if exists) to name~ and start name.\\
994 global: single logfile in your home dir, appended to.\\
994 global: single logfile in your home dir, appended to.\\
995 over : overwrite existing log.\\
995 over : overwrite existing log.\\
996 rotate: create rotating logs name.1~, name.2~, etc.
996 rotate: create rotating logs name.1~, name.2~, etc.
997
997
998 Options:
998 Options:
999
999
1000 -o: log also IPython's output. In this mode, all commands which
1000 -o: log also IPython's output. In this mode, all commands which
1001 generate an Out[NN] prompt are recorded to the logfile, right after
1001 generate an Out[NN] prompt are recorded to the logfile, right after
1002 their corresponding input line. The output lines are always
1002 their corresponding input line. The output lines are always
1003 prepended with a '#[Out]# ' marker, so that the log remains valid
1003 prepended with a '#[Out]# ' marker, so that the log remains valid
1004 Python code.
1004 Python code.
1005
1005
1006 Since this marker is always the same, filtering only the output from
1006 Since this marker is always the same, filtering only the output from
1007 a log is very easy, using for example a simple awk call:
1007 a log is very easy, using for example a simple awk call:
1008
1008
1009 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1009 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1010
1010
1011 -t: put timestamps before each input line logged (these are put in
1011 -t: put timestamps before each input line logged (these are put in
1012 comments)."""
1012 comments)."""
1013
1013
1014 opts,par = self.parse_options(parameter_s,'ot')
1014 opts,par = self.parse_options(parameter_s,'ot')
1015 log_output = 'o' in opts
1015 log_output = 'o' in opts
1016 timestamp = 't' in opts
1016 timestamp = 't' in opts
1017
1017
1018 rc = self.shell.rc
1018 rc = self.shell.rc
1019 logger = self.shell.logger
1019 logger = self.shell.logger
1020
1020
1021 # if no args are given, the defaults set in the logger constructor by
1021 # if no args are given, the defaults set in the logger constructor by
1022 # ipytohn remain valid
1022 # ipytohn remain valid
1023 if par:
1023 if par:
1024 try:
1024 try:
1025 logfname,logmode = par.split()
1025 logfname,logmode = par.split()
1026 except:
1026 except:
1027 logfname = par
1027 logfname = par
1028 logmode = 'backup'
1028 logmode = 'backup'
1029 else:
1029 else:
1030 logfname = logger.logfname
1030 logfname = logger.logfname
1031 logmode = logger.logmode
1031 logmode = logger.logmode
1032 # put logfname into rc struct as if it had been called on the command
1032 # put logfname into rc struct as if it had been called on the command
1033 # line, so it ends up saved in the log header Save it in case we need
1033 # line, so it ends up saved in the log header Save it in case we need
1034 # to restore it...
1034 # to restore it...
1035 old_logfile = rc.opts.get('logfile','')
1035 old_logfile = rc.opts.get('logfile','')
1036 if logfname:
1036 if logfname:
1037 logfname = os.path.expanduser(logfname)
1037 logfname = os.path.expanduser(logfname)
1038 rc.opts.logfile = logfname
1038 rc.opts.logfile = logfname
1039 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1039 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1040 try:
1040 try:
1041 started = logger.logstart(logfname,loghead,logmode,
1041 started = logger.logstart(logfname,loghead,logmode,
1042 log_output,timestamp)
1042 log_output,timestamp)
1043 except:
1043 except:
1044 rc.opts.logfile = old_logfile
1044 rc.opts.logfile = old_logfile
1045 warn("Couldn't start log: %s" % sys.exc_info()[1])
1045 warn("Couldn't start log: %s" % sys.exc_info()[1])
1046 else:
1046 else:
1047 # log input history up to this point, optionally interleaving
1047 # log input history up to this point, optionally interleaving
1048 # output if requested
1048 # output if requested
1049
1049
1050 if timestamp:
1050 if timestamp:
1051 # disable timestamping for the previous history, since we've
1051 # disable timestamping for the previous history, since we've
1052 # lost those already (no time machine here).
1052 # lost those already (no time machine here).
1053 logger.timestamp = False
1053 logger.timestamp = False
1054 if log_output:
1054 if log_output:
1055 log_write = logger.log_write
1055 log_write = logger.log_write
1056 input_hist = self.shell.input_hist
1056 input_hist = self.shell.input_hist
1057 output_hist = self.shell.output_hist
1057 output_hist = self.shell.output_hist
1058 for n in range(1,len(input_hist)-1):
1058 for n in range(1,len(input_hist)-1):
1059 log_write(input_hist[n].rstrip())
1059 log_write(input_hist[n].rstrip())
1060 if n in output_hist:
1060 if n in output_hist:
1061 log_write(repr(output_hist[n]),'output')
1061 log_write(repr(output_hist[n]),'output')
1062 else:
1062 else:
1063 logger.log_write(self.shell.input_hist[1:])
1063 logger.log_write(self.shell.input_hist[1:])
1064 if timestamp:
1064 if timestamp:
1065 # re-enable timestamping
1065 # re-enable timestamping
1066 logger.timestamp = True
1066 logger.timestamp = True
1067
1067
1068 print ('Activating auto-logging. '
1068 print ('Activating auto-logging. '
1069 'Current session state plus future input saved.')
1069 'Current session state plus future input saved.')
1070 logger.logstate()
1070 logger.logstate()
1071
1071
1072 def magic_logoff(self,parameter_s=''):
1072 def magic_logoff(self,parameter_s=''):
1073 """Temporarily stop logging.
1073 """Temporarily stop logging.
1074
1074
1075 You must have previously started logging."""
1075 You must have previously started logging."""
1076 self.shell.logger.switch_log(0)
1076 self.shell.logger.switch_log(0)
1077
1077
1078 def magic_logon(self,parameter_s=''):
1078 def magic_logon(self,parameter_s=''):
1079 """Restart logging.
1079 """Restart logging.
1080
1080
1081 This function is for restarting logging which you've temporarily
1081 This function is for restarting logging which you've temporarily
1082 stopped with %logoff. For starting logging for the first time, you
1082 stopped with %logoff. For starting logging for the first time, you
1083 must use the %logstart function, which allows you to specify an
1083 must use the %logstart function, which allows you to specify an
1084 optional log filename."""
1084 optional log filename."""
1085
1085
1086 self.shell.logger.switch_log(1)
1086 self.shell.logger.switch_log(1)
1087
1087
1088 def magic_logstate(self,parameter_s=''):
1088 def magic_logstate(self,parameter_s=''):
1089 """Print the status of the logging system."""
1089 """Print the status of the logging system."""
1090
1090
1091 self.shell.logger.logstate()
1091 self.shell.logger.logstate()
1092
1092
1093 def magic_pdb(self, parameter_s=''):
1093 def magic_pdb(self, parameter_s=''):
1094 """Control the calling of the pdb interactive debugger.
1094 """Control the calling of the pdb interactive debugger.
1095
1095
1096 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1096 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1097 argument it works as a toggle.
1097 argument it works as a toggle.
1098
1098
1099 When an exception is triggered, IPython can optionally call the
1099 When an exception is triggered, IPython can optionally call the
1100 interactive pdb debugger after the traceback printout. %pdb toggles
1100 interactive pdb debugger after the traceback printout. %pdb toggles
1101 this feature on and off."""
1101 this feature on and off."""
1102
1102
1103 par = parameter_s.strip().lower()
1103 par = parameter_s.strip().lower()
1104
1104
1105 if par:
1105 if par:
1106 try:
1106 try:
1107 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1107 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1108 except KeyError:
1108 except KeyError:
1109 print ('Incorrect argument. Use on/1, off/0, '
1109 print ('Incorrect argument. Use on/1, off/0, '
1110 'or nothing for a toggle.')
1110 'or nothing for a toggle.')
1111 return
1111 return
1112 else:
1112 else:
1113 # toggle
1113 # toggle
1114 new_pdb = not self.shell.InteractiveTB.call_pdb
1114 new_pdb = not self.shell.InteractiveTB.call_pdb
1115
1115
1116 # set on the shell
1116 # set on the shell
1117 self.shell.call_pdb = new_pdb
1117 self.shell.call_pdb = new_pdb
1118 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1118 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1119
1119
1120 def magic_prun(self, parameter_s ='',user_mode=1,
1120 def magic_prun(self, parameter_s ='',user_mode=1,
1121 opts=None,arg_lst=None,prog_ns=None):
1121 opts=None,arg_lst=None,prog_ns=None):
1122
1122
1123 """Run a statement through the python code profiler.
1123 """Run a statement through the python code profiler.
1124
1124
1125 Usage:\\
1125 Usage:\\
1126 %prun [options] statement
1126 %prun [options] statement
1127
1127
1128 The given statement (which doesn't require quote marks) is run via the
1128 The given statement (which doesn't require quote marks) is run via the
1129 python profiler in a manner similar to the profile.run() function.
1129 python profiler in a manner similar to the profile.run() function.
1130 Namespaces are internally managed to work correctly; profile.run
1130 Namespaces are internally managed to work correctly; profile.run
1131 cannot be used in IPython because it makes certain assumptions about
1131 cannot be used in IPython because it makes certain assumptions about
1132 namespaces which do not hold under IPython.
1132 namespaces which do not hold under IPython.
1133
1133
1134 Options:
1134 Options:
1135
1135
1136 -l <limit>: you can place restrictions on what or how much of the
1136 -l <limit>: you can place restrictions on what or how much of the
1137 profile gets printed. The limit value can be:
1137 profile gets printed. The limit value can be:
1138
1138
1139 * A string: only information for function names containing this string
1139 * A string: only information for function names containing this string
1140 is printed.
1140 is printed.
1141
1141
1142 * An integer: only these many lines are printed.
1142 * An integer: only these many lines are printed.
1143
1143
1144 * A float (between 0 and 1): this fraction of the report is printed
1144 * A float (between 0 and 1): this fraction of the report is printed
1145 (for example, use a limit of 0.4 to see the topmost 40% only).
1145 (for example, use a limit of 0.4 to see the topmost 40% only).
1146
1146
1147 You can combine several limits with repeated use of the option. For
1147 You can combine several limits with repeated use of the option. For
1148 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1148 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1149 information about class constructors.
1149 information about class constructors.
1150
1150
1151 -r: return the pstats.Stats object generated by the profiling. This
1151 -r: return the pstats.Stats object generated by the profiling. This
1152 object has all the information about the profile in it, and you can
1152 object has all the information about the profile in it, and you can
1153 later use it for further analysis or in other functions.
1153 later use it for further analysis or in other functions.
1154
1154
1155 Since magic functions have a particular form of calling which prevents
1155 Since magic functions have a particular form of calling which prevents
1156 you from writing something like:\\
1156 you from writing something like:\\
1157 In [1]: p = %prun -r print 4 # invalid!\\
1157 In [1]: p = %prun -r print 4 # invalid!\\
1158 you must instead use IPython's automatic variables to assign this:\\
1158 you must instead use IPython's automatic variables to assign this:\\
1159 In [1]: %prun -r print 4 \\
1159 In [1]: %prun -r print 4 \\
1160 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1160 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1161 In [2]: stats = _
1161 In [2]: stats = _
1162
1162
1163 If you really need to assign this value via an explicit function call,
1163 If you really need to assign this value via an explicit function call,
1164 you can always tap directly into the true name of the magic function
1164 you can always tap directly into the true name of the magic function
1165 by using the _ip.magic function:\\
1165 by using the _ip.magic function:\\
1166 In [3]: stats = _ip.magic('prun','-r print 4')
1166 In [3]: stats = _ip.magic('prun','-r print 4')
1167
1167
1168 You can type _ip.magic? for more details.
1168 You can type _ip.magic? for more details.
1169
1169
1170 -s <key>: sort profile by given key. You can provide more than one key
1170 -s <key>: sort profile by given key. You can provide more than one key
1171 by using the option several times: '-s key1 -s key2 -s key3...'. The
1171 by using the option several times: '-s key1 -s key2 -s key3...'. The
1172 default sorting key is 'time'.
1172 default sorting key is 'time'.
1173
1173
1174 The following is copied verbatim from the profile documentation
1174 The following is copied verbatim from the profile documentation
1175 referenced below:
1175 referenced below:
1176
1176
1177 When more than one key is provided, additional keys are used as
1177 When more than one key is provided, additional keys are used as
1178 secondary criteria when the there is equality in all keys selected
1178 secondary criteria when the there is equality in all keys selected
1179 before them.
1179 before them.
1180
1180
1181 Abbreviations can be used for any key names, as long as the
1181 Abbreviations can be used for any key names, as long as the
1182 abbreviation is unambiguous. The following are the keys currently
1182 abbreviation is unambiguous. The following are the keys currently
1183 defined:
1183 defined:
1184
1184
1185 Valid Arg Meaning\\
1185 Valid Arg Meaning\\
1186 "calls" call count\\
1186 "calls" call count\\
1187 "cumulative" cumulative time\\
1187 "cumulative" cumulative time\\
1188 "file" file name\\
1188 "file" file name\\
1189 "module" file name\\
1189 "module" file name\\
1190 "pcalls" primitive call count\\
1190 "pcalls" primitive call count\\
1191 "line" line number\\
1191 "line" line number\\
1192 "name" function name\\
1192 "name" function name\\
1193 "nfl" name/file/line\\
1193 "nfl" name/file/line\\
1194 "stdname" standard name\\
1194 "stdname" standard name\\
1195 "time" internal time
1195 "time" internal time
1196
1196
1197 Note that all sorts on statistics are in descending order (placing
1197 Note that all sorts on statistics are in descending order (placing
1198 most time consuming items first), where as name, file, and line number
1198 most time consuming items first), where as name, file, and line number
1199 searches are in ascending order (i.e., alphabetical). The subtle
1199 searches are in ascending order (i.e., alphabetical). The subtle
1200 distinction between "nfl" and "stdname" is that the standard name is a
1200 distinction between "nfl" and "stdname" is that the standard name is a
1201 sort of the name as printed, which means that the embedded line
1201 sort of the name as printed, which means that the embedded line
1202 numbers get compared in an odd way. For example, lines 3, 20, and 40
1202 numbers get compared in an odd way. For example, lines 3, 20, and 40
1203 would (if the file names were the same) appear in the string order
1203 would (if the file names were the same) appear in the string order
1204 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1204 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1205 line numbers. In fact, sort_stats("nfl") is the same as
1205 line numbers. In fact, sort_stats("nfl") is the same as
1206 sort_stats("name", "file", "line").
1206 sort_stats("name", "file", "line").
1207
1207
1208 -T <filename>: save profile results as shown on screen to a text
1208 -T <filename>: save profile results as shown on screen to a text
1209 file. The profile is still shown on screen.
1209 file. The profile is still shown on screen.
1210
1210
1211 -D <filename>: save (via dump_stats) profile statistics to given
1211 -D <filename>: save (via dump_stats) profile statistics to given
1212 filename. This data is in a format understod by the pstats module, and
1212 filename. This data is in a format understod by the pstats module, and
1213 is generated by a call to the dump_stats() method of profile
1213 is generated by a call to the dump_stats() method of profile
1214 objects. The profile is still shown on screen.
1214 objects. The profile is still shown on screen.
1215
1215
1216 If you want to run complete programs under the profiler's control, use
1216 If you want to run complete programs under the profiler's control, use
1217 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1217 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1218 contains profiler specific options as described here.
1218 contains profiler specific options as described here.
1219
1219
1220 You can read the complete documentation for the profile module with:\\
1220 You can read the complete documentation for the profile module with:\\
1221 In [1]: import profile; profile.help() """
1221 In [1]: import profile; profile.help() """
1222
1222
1223 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1223 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1224 # protect user quote marks
1224 # protect user quote marks
1225 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1225 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1226
1226
1227 if user_mode: # regular user call
1227 if user_mode: # regular user call
1228 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1228 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1229 list_all=1)
1229 list_all=1)
1230 namespace = self.shell.user_ns
1230 namespace = self.shell.user_ns
1231 else: # called to run a program by %run -p
1231 else: # called to run a program by %run -p
1232 try:
1232 try:
1233 filename = get_py_filename(arg_lst[0])
1233 filename = get_py_filename(arg_lst[0])
1234 except IOError,msg:
1234 except IOError,msg:
1235 error(msg)
1235 error(msg)
1236 return
1236 return
1237
1237
1238 arg_str = 'execfile(filename,prog_ns)'
1238 arg_str = 'execfile(filename,prog_ns)'
1239 namespace = locals()
1239 namespace = locals()
1240
1240
1241 opts.merge(opts_def)
1241 opts.merge(opts_def)
1242
1242
1243 prof = profile.Profile()
1243 prof = profile.Profile()
1244 try:
1244 try:
1245 prof = prof.runctx(arg_str,namespace,namespace)
1245 prof = prof.runctx(arg_str,namespace,namespace)
1246 sys_exit = ''
1246 sys_exit = ''
1247 except SystemExit:
1247 except SystemExit:
1248 sys_exit = """*** SystemExit exception caught in code being profiled."""
1248 sys_exit = """*** SystemExit exception caught in code being profiled."""
1249
1249
1250 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1250 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1251
1251
1252 lims = opts.l
1252 lims = opts.l
1253 if lims:
1253 if lims:
1254 lims = [] # rebuild lims with ints/floats/strings
1254 lims = [] # rebuild lims with ints/floats/strings
1255 for lim in opts.l:
1255 for lim in opts.l:
1256 try:
1256 try:
1257 lims.append(int(lim))
1257 lims.append(int(lim))
1258 except ValueError:
1258 except ValueError:
1259 try:
1259 try:
1260 lims.append(float(lim))
1260 lims.append(float(lim))
1261 except ValueError:
1261 except ValueError:
1262 lims.append(lim)
1262 lims.append(lim)
1263
1263
1264 # trap output
1264 # trap output
1265 sys_stdout = sys.stdout
1265 sys_stdout = sys.stdout
1266 stdout_trap = StringIO()
1266 stdout_trap = StringIO()
1267 try:
1267 try:
1268 sys.stdout = stdout_trap
1268 sys.stdout = stdout_trap
1269 stats.print_stats(*lims)
1269 stats.print_stats(*lims)
1270 finally:
1270 finally:
1271 sys.stdout = sys_stdout
1271 sys.stdout = sys_stdout
1272 output = stdout_trap.getvalue()
1272 output = stdout_trap.getvalue()
1273 output = output.rstrip()
1273 output = output.rstrip()
1274
1274
1275 page(output,screen_lines=self.shell.rc.screen_length)
1275 page(output,screen_lines=self.shell.rc.screen_length)
1276 print sys_exit,
1276 print sys_exit,
1277
1277
1278 dump_file = opts.D[0]
1278 dump_file = opts.D[0]
1279 text_file = opts.T[0]
1279 text_file = opts.T[0]
1280 if dump_file:
1280 if dump_file:
1281 prof.dump_stats(dump_file)
1281 prof.dump_stats(dump_file)
1282 print '\n*** Profile stats marshalled to file',\
1282 print '\n*** Profile stats marshalled to file',\
1283 `dump_file`+'.',sys_exit
1283 `dump_file`+'.',sys_exit
1284 if text_file:
1284 if text_file:
1285 file(text_file,'w').write(output)
1285 file(text_file,'w').write(output)
1286 print '\n*** Profile printout saved to text file',\
1286 print '\n*** Profile printout saved to text file',\
1287 `text_file`+'.',sys_exit
1287 `text_file`+'.',sys_exit
1288
1288
1289 if opts.has_key('r'):
1289 if opts.has_key('r'):
1290 return stats
1290 return stats
1291 else:
1291 else:
1292 return None
1292 return None
1293
1293
1294 def magic_run(self, parameter_s ='',runner=None):
1294 def magic_run(self, parameter_s ='',runner=None):
1295 """Run the named file inside IPython as a program.
1295 """Run the named file inside IPython as a program.
1296
1296
1297 Usage:\\
1297 Usage:\\
1298 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1298 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1299
1299
1300 Parameters after the filename are passed as command-line arguments to
1300 Parameters after the filename are passed as command-line arguments to
1301 the program (put in sys.argv). Then, control returns to IPython's
1301 the program (put in sys.argv). Then, control returns to IPython's
1302 prompt.
1302 prompt.
1303
1303
1304 This is similar to running at a system prompt:\\
1304 This is similar to running at a system prompt:\\
1305 $ python file args\\
1305 $ python file args\\
1306 but with the advantage of giving you IPython's tracebacks, and of
1306 but with the advantage of giving you IPython's tracebacks, and of
1307 loading all variables into your interactive namespace for further use
1307 loading all variables into your interactive namespace for further use
1308 (unless -p is used, see below).
1308 (unless -p is used, see below).
1309
1309
1310 The file is executed in a namespace initially consisting only of
1310 The file is executed in a namespace initially consisting only of
1311 __name__=='__main__' and sys.argv constructed as indicated. It thus
1311 __name__=='__main__' and sys.argv constructed as indicated. It thus
1312 sees its environment as if it were being run as a stand-alone
1312 sees its environment as if it were being run as a stand-alone
1313 program. But after execution, the IPython interactive namespace gets
1313 program. But after execution, the IPython interactive namespace gets
1314 updated with all variables defined in the program (except for __name__
1314 updated with all variables defined in the program (except for __name__
1315 and sys.argv). This allows for very convenient loading of code for
1315 and sys.argv). This allows for very convenient loading of code for
1316 interactive work, while giving each program a 'clean sheet' to run in.
1316 interactive work, while giving each program a 'clean sheet' to run in.
1317
1317
1318 Options:
1318 Options:
1319
1319
1320 -n: __name__ is NOT set to '__main__', but to the running file's name
1320 -n: __name__ is NOT set to '__main__', but to the running file's name
1321 without extension (as python does under import). This allows running
1321 without extension (as python does under import). This allows running
1322 scripts and reloading the definitions in them without calling code
1322 scripts and reloading the definitions in them without calling code
1323 protected by an ' if __name__ == "__main__" ' clause.
1323 protected by an ' if __name__ == "__main__" ' clause.
1324
1324
1325 -i: run the file in IPython's namespace instead of an empty one. This
1325 -i: run the file in IPython's namespace instead of an empty one. This
1326 is useful if you are experimenting with code written in a text editor
1326 is useful if you are experimenting with code written in a text editor
1327 which depends on variables defined interactively.
1327 which depends on variables defined interactively.
1328
1328
1329 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1329 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1330 being run. This is particularly useful if IPython is being used to
1330 being run. This is particularly useful if IPython is being used to
1331 run unittests, which always exit with a sys.exit() call. In such
1331 run unittests, which always exit with a sys.exit() call. In such
1332 cases you are interested in the output of the test results, not in
1332 cases you are interested in the output of the test results, not in
1333 seeing a traceback of the unittest module.
1333 seeing a traceback of the unittest module.
1334
1334
1335 -t: print timing information at the end of the run. IPython will give
1335 -t: print timing information at the end of the run. IPython will give
1336 you an estimated CPU time consumption for your script, which under
1336 you an estimated CPU time consumption for your script, which under
1337 Unix uses the resource module to avoid the wraparound problems of
1337 Unix uses the resource module to avoid the wraparound problems of
1338 time.clock(). Under Unix, an estimate of time spent on system tasks
1338 time.clock(). Under Unix, an estimate of time spent on system tasks
1339 is also given (for Windows platforms this is reported as 0.0).
1339 is also given (for Windows platforms this is reported as 0.0).
1340
1340
1341 If -t is given, an additional -N<N> option can be given, where <N>
1341 If -t is given, an additional -N<N> option can be given, where <N>
1342 must be an integer indicating how many times you want the script to
1342 must be an integer indicating how many times you want the script to
1343 run. The final timing report will include total and per run results.
1343 run. The final timing report will include total and per run results.
1344
1344
1345 For example (testing the script uniq_stable.py):
1345 For example (testing the script uniq_stable.py):
1346
1346
1347 In [1]: run -t uniq_stable
1347 In [1]: run -t uniq_stable
1348
1348
1349 IPython CPU timings (estimated):\\
1349 IPython CPU timings (estimated):\\
1350 User : 0.19597 s.\\
1350 User : 0.19597 s.\\
1351 System: 0.0 s.\\
1351 System: 0.0 s.\\
1352
1352
1353 In [2]: run -t -N5 uniq_stable
1353 In [2]: run -t -N5 uniq_stable
1354
1354
1355 IPython CPU timings (estimated):\\
1355 IPython CPU timings (estimated):\\
1356 Total runs performed: 5\\
1356 Total runs performed: 5\\
1357 Times : Total Per run\\
1357 Times : Total Per run\\
1358 User : 0.910862 s, 0.1821724 s.\\
1358 User : 0.910862 s, 0.1821724 s.\\
1359 System: 0.0 s, 0.0 s.
1359 System: 0.0 s, 0.0 s.
1360
1360
1361 -d: run your program under the control of pdb, the Python debugger.
1361 -d: run your program under the control of pdb, the Python debugger.
1362 This allows you to execute your program step by step, watch variables,
1362 This allows you to execute your program step by step, watch variables,
1363 etc. Internally, what IPython does is similar to calling:
1363 etc. Internally, what IPython does is similar to calling:
1364
1364
1365 pdb.run('execfile("YOURFILENAME")')
1365 pdb.run('execfile("YOURFILENAME")')
1366
1366
1367 with a breakpoint set on line 1 of your file. You can change the line
1367 with a breakpoint set on line 1 of your file. You can change the line
1368 number for this automatic breakpoint to be <N> by using the -bN option
1368 number for this automatic breakpoint to be <N> by using the -bN option
1369 (where N must be an integer). For example:
1369 (where N must be an integer). For example:
1370
1370
1371 %run -d -b40 myscript
1371 %run -d -b40 myscript
1372
1372
1373 will set the first breakpoint at line 40 in myscript.py. Note that
1373 will set the first breakpoint at line 40 in myscript.py. Note that
1374 the first breakpoint must be set on a line which actually does
1374 the first breakpoint must be set on a line which actually does
1375 something (not a comment or docstring) for it to stop execution.
1375 something (not a comment or docstring) for it to stop execution.
1376
1376
1377 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1377 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1378 first enter 'c' (without qoutes) to start execution up to the first
1378 first enter 'c' (without qoutes) to start execution up to the first
1379 breakpoint.
1379 breakpoint.
1380
1380
1381 Entering 'help' gives information about the use of the debugger. You
1381 Entering 'help' gives information about the use of the debugger. You
1382 can easily see pdb's full documentation with "import pdb;pdb.help()"
1382 can easily see pdb's full documentation with "import pdb;pdb.help()"
1383 at a prompt.
1383 at a prompt.
1384
1384
1385 -p: run program under the control of the Python profiler module (which
1385 -p: run program under the control of the Python profiler module (which
1386 prints a detailed report of execution times, function calls, etc).
1386 prints a detailed report of execution times, function calls, etc).
1387
1387
1388 You can pass other options after -p which affect the behavior of the
1388 You can pass other options after -p which affect the behavior of the
1389 profiler itself. See the docs for %prun for details.
1389 profiler itself. See the docs for %prun for details.
1390
1390
1391 In this mode, the program's variables do NOT propagate back to the
1391 In this mode, the program's variables do NOT propagate back to the
1392 IPython interactive namespace (because they remain in the namespace
1392 IPython interactive namespace (because they remain in the namespace
1393 where the profiler executes them).
1393 where the profiler executes them).
1394
1394
1395 Internally this triggers a call to %prun, see its documentation for
1395 Internally this triggers a call to %prun, see its documentation for
1396 details on the options available specifically for profiling."""
1396 details on the options available specifically for profiling."""
1397
1397
1398 # get arguments and set sys.argv for program to be run.
1398 # get arguments and set sys.argv for program to be run.
1399 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1399 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1400 mode='list',list_all=1)
1400 mode='list',list_all=1)
1401
1401
1402 try:
1402 try:
1403 filename = get_py_filename(arg_lst[0])
1403 filename = get_py_filename(arg_lst[0])
1404 except IndexError:
1404 except IndexError:
1405 warn('you must provide at least a filename.')
1405 warn('you must provide at least a filename.')
1406 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1406 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1407 return
1407 return
1408 except IOError,msg:
1408 except IOError,msg:
1409 error(msg)
1409 error(msg)
1410 return
1410 return
1411
1411
1412 # Control the response to exit() calls made by the script being run
1412 # Control the response to exit() calls made by the script being run
1413 exit_ignore = opts.has_key('e')
1413 exit_ignore = opts.has_key('e')
1414
1414
1415 # Make sure that the running script gets a proper sys.argv as if it
1415 # Make sure that the running script gets a proper sys.argv as if it
1416 # were run from a system shell.
1416 # were run from a system shell.
1417 save_argv = sys.argv # save it for later restoring
1417 save_argv = sys.argv # save it for later restoring
1418 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1418 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1419
1419
1420 if opts.has_key('i'):
1420 if opts.has_key('i'):
1421 prog_ns = self.shell.user_ns
1421 prog_ns = self.shell.user_ns
1422 __name__save = self.shell.user_ns['__name__']
1422 __name__save = self.shell.user_ns['__name__']
1423 prog_ns['__name__'] = '__main__'
1423 prog_ns['__name__'] = '__main__'
1424 else:
1424 else:
1425 if opts.has_key('n'):
1425 if opts.has_key('n'):
1426 name = os.path.splitext(os.path.basename(filename))[0]
1426 name = os.path.splitext(os.path.basename(filename))[0]
1427 else:
1427 else:
1428 name = '__main__'
1428 name = '__main__'
1429 prog_ns = {'__name__':name}
1429 prog_ns = {'__name__':name}
1430
1430
1431 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1431 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1432 # set the __file__ global in the script's namespace
1432 # set the __file__ global in the script's namespace
1433 prog_ns['__file__'] = filename
1433 prog_ns['__file__'] = filename
1434
1434
1435 # pickle fix. See iplib for an explanation. But we need to make sure
1435 # pickle fix. See iplib for an explanation. But we need to make sure
1436 # that, if we overwrite __main__, we replace it at the end
1436 # that, if we overwrite __main__, we replace it at the end
1437 if prog_ns['__name__'] == '__main__':
1437 if prog_ns['__name__'] == '__main__':
1438 restore_main = sys.modules['__main__']
1438 restore_main = sys.modules['__main__']
1439 else:
1439 else:
1440 restore_main = False
1440 restore_main = False
1441
1441
1442 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1442 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1443
1443
1444 stats = None
1444 stats = None
1445 try:
1445 try:
1446 if opts.has_key('p'):
1446 if opts.has_key('p'):
1447 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1447 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1448 else:
1448 else:
1449 if opts.has_key('d'):
1449 if opts.has_key('d'):
1450 deb = Debugger.Pdb(self.shell.rc.colors)
1450 deb = Debugger.Pdb(self.shell.rc.colors)
1451 # reset Breakpoint state, which is moronically kept
1451 # reset Breakpoint state, which is moronically kept
1452 # in a class
1452 # in a class
1453 bdb.Breakpoint.next = 1
1453 bdb.Breakpoint.next = 1
1454 bdb.Breakpoint.bplist = {}
1454 bdb.Breakpoint.bplist = {}
1455 bdb.Breakpoint.bpbynumber = [None]
1455 bdb.Breakpoint.bpbynumber = [None]
1456 # Set an initial breakpoint to stop execution
1456 # Set an initial breakpoint to stop execution
1457 maxtries = 10
1457 maxtries = 10
1458 bp = int(opts.get('b',[1])[0])
1458 bp = int(opts.get('b',[1])[0])
1459 checkline = deb.checkline(filename,bp)
1459 checkline = deb.checkline(filename,bp)
1460 if not checkline:
1460 if not checkline:
1461 for bp in range(bp+1,bp+maxtries+1):
1461 for bp in range(bp+1,bp+maxtries+1):
1462 if deb.checkline(filename,bp):
1462 if deb.checkline(filename,bp):
1463 break
1463 break
1464 else:
1464 else:
1465 msg = ("\nI failed to find a valid line to set "
1465 msg = ("\nI failed to find a valid line to set "
1466 "a breakpoint\n"
1466 "a breakpoint\n"
1467 "after trying up to line: %s.\n"
1467 "after trying up to line: %s.\n"
1468 "Please set a valid breakpoint manually "
1468 "Please set a valid breakpoint manually "
1469 "with the -b option." % bp)
1469 "with the -b option." % bp)
1470 error(msg)
1470 error(msg)
1471 return
1471 return
1472 # if we find a good linenumber, set the breakpoint
1472 # if we find a good linenumber, set the breakpoint
1473 deb.do_break('%s:%s' % (filename,bp))
1473 deb.do_break('%s:%s' % (filename,bp))
1474 # Start file run
1474 # Start file run
1475 print "NOTE: Enter 'c' at the",
1475 print "NOTE: Enter 'c' at the",
1476 print "ipdb> prompt to start your script."
1476 print "ipdb> prompt to start your script."
1477 try:
1477 try:
1478 deb.run('execfile("%s")' % filename,prog_ns)
1478 deb.run('execfile("%s")' % filename,prog_ns)
1479 except:
1479 except:
1480 etype, value, tb = sys.exc_info()
1480 etype, value, tb = sys.exc_info()
1481 # Skip three frames in the traceback: the %run one,
1481 # Skip three frames in the traceback: the %run one,
1482 # one inside bdb.py, and the command-line typed by the
1482 # one inside bdb.py, and the command-line typed by the
1483 # user (run by exec in pdb itself).
1483 # user (run by exec in pdb itself).
1484 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1484 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1485 else:
1485 else:
1486 if runner is None:
1486 if runner is None:
1487 runner = self.shell.safe_execfile
1487 runner = self.shell.safe_execfile
1488 if opts.has_key('t'):
1488 if opts.has_key('t'):
1489 try:
1489 try:
1490 nruns = int(opts['N'][0])
1490 nruns = int(opts['N'][0])
1491 if nruns < 1:
1491 if nruns < 1:
1492 error('Number of runs must be >=1')
1492 error('Number of runs must be >=1')
1493 return
1493 return
1494 except (KeyError):
1494 except (KeyError):
1495 nruns = 1
1495 nruns = 1
1496 if nruns == 1:
1496 if nruns == 1:
1497 t0 = clock2()
1497 t0 = clock2()
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1499 t1 = clock2()
1499 t1 = clock2()
1500 t_usr = t1[0]-t0[0]
1500 t_usr = t1[0]-t0[0]
1501 t_sys = t1[1]-t1[1]
1501 t_sys = t1[1]-t1[1]
1502 print "\nIPython CPU timings (estimated):"
1502 print "\nIPython CPU timings (estimated):"
1503 print " User : %10s s." % t_usr
1503 print " User : %10s s." % t_usr
1504 print " System: %10s s." % t_sys
1504 print " System: %10s s." % t_sys
1505 else:
1505 else:
1506 runs = range(nruns)
1506 runs = range(nruns)
1507 t0 = clock2()
1507 t0 = clock2()
1508 for nr in runs:
1508 for nr in runs:
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1510 t1 = clock2()
1510 t1 = clock2()
1511 t_usr = t1[0]-t0[0]
1511 t_usr = t1[0]-t0[0]
1512 t_sys = t1[1]-t1[1]
1512 t_sys = t1[1]-t1[1]
1513 print "\nIPython CPU timings (estimated):"
1513 print "\nIPython CPU timings (estimated):"
1514 print "Total runs performed:",nruns
1514 print "Total runs performed:",nruns
1515 print " Times : %10s %10s" % ('Total','Per run')
1515 print " Times : %10s %10s" % ('Total','Per run')
1516 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1516 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1517 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1517 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1518
1518
1519 else:
1519 else:
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1521 if opts.has_key('i'):
1521 if opts.has_key('i'):
1522 self.shell.user_ns['__name__'] = __name__save
1522 self.shell.user_ns['__name__'] = __name__save
1523 else:
1523 else:
1524 # update IPython interactive namespace
1524 # update IPython interactive namespace
1525 del prog_ns['__name__']
1525 del prog_ns['__name__']
1526 self.shell.user_ns.update(prog_ns)
1526 self.shell.user_ns.update(prog_ns)
1527 finally:
1527 finally:
1528 sys.argv = save_argv
1528 sys.argv = save_argv
1529 if restore_main:
1529 if restore_main:
1530 sys.modules['__main__'] = restore_main
1530 sys.modules['__main__'] = restore_main
1531 return stats
1531 return stats
1532
1532
1533 def magic_runlog(self, parameter_s =''):
1533 def magic_runlog(self, parameter_s =''):
1534 """Run files as logs.
1534 """Run files as logs.
1535
1535
1536 Usage:\\
1536 Usage:\\
1537 %runlog file1 file2 ...
1537 %runlog file1 file2 ...
1538
1538
1539 Run the named files (treating them as log files) in sequence inside
1539 Run the named files (treating them as log files) in sequence inside
1540 the interpreter, and return to the prompt. This is much slower than
1540 the interpreter, and return to the prompt. This is much slower than
1541 %run because each line is executed in a try/except block, but it
1541 %run because each line is executed in a try/except block, but it
1542 allows running files with syntax errors in them.
1542 allows running files with syntax errors in them.
1543
1543
1544 Normally IPython will guess when a file is one of its own logfiles, so
1544 Normally IPython will guess when a file is one of its own logfiles, so
1545 you can typically use %run even for logs. This shorthand allows you to
1545 you can typically use %run even for logs. This shorthand allows you to
1546 force any file to be treated as a log file."""
1546 force any file to be treated as a log file."""
1547
1547
1548 for f in parameter_s.split():
1548 for f in parameter_s.split():
1549 self.shell.safe_execfile(f,self.shell.user_ns,
1549 self.shell.safe_execfile(f,self.shell.user_ns,
1550 self.shell.user_ns,islog=1)
1550 self.shell.user_ns,islog=1)
1551
1551
1552 def magic_time(self,parameter_s = ''):
1552 def magic_time(self,parameter_s = ''):
1553 """Time execution of a Python statement or expression.
1553 """Time execution of a Python statement or expression.
1554
1554
1555 The CPU and wall clock times are printed, and the value of the
1555 The CPU and wall clock times are printed, and the value of the
1556 expression (if any) is returned. Note that under Win32, system time
1556 expression (if any) is returned. Note that under Win32, system time
1557 is always reported as 0, since it can not be measured.
1557 is always reported as 0, since it can not be measured.
1558
1558
1559 This function provides very basic timing functionality. In Python
1559 This function provides very basic timing functionality. In Python
1560 2.3, the timeit module offers more control and sophistication, but for
1560 2.3, the timeit module offers more control and sophistication, but for
1561 now IPython supports Python 2.2, so we can not rely on timeit being
1561 now IPython supports Python 2.2, so we can not rely on timeit being
1562 present.
1562 present.
1563
1563
1564 Some examples:
1564 Some examples:
1565
1565
1566 In [1]: time 2**128
1566 In [1]: time 2**128
1567 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1567 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1568 Wall time: 0.00
1568 Wall time: 0.00
1569 Out[1]: 340282366920938463463374607431768211456L
1569 Out[1]: 340282366920938463463374607431768211456L
1570
1570
1571 In [2]: n = 1000000
1571 In [2]: n = 1000000
1572
1572
1573 In [3]: time sum(range(n))
1573 In [3]: time sum(range(n))
1574 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1574 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1575 Wall time: 1.37
1575 Wall time: 1.37
1576 Out[3]: 499999500000L
1576 Out[3]: 499999500000L
1577
1577
1578 In [4]: time print 'hello world'
1578 In [4]: time print 'hello world'
1579 hello world
1579 hello world
1580 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1580 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1581 Wall time: 0.00
1581 Wall time: 0.00
1582 """
1582 """
1583
1583
1584 # fail immediately if the given expression can't be compiled
1584 # fail immediately if the given expression can't be compiled
1585 try:
1585 try:
1586 mode = 'eval'
1586 mode = 'eval'
1587 code = compile(parameter_s,'<timed eval>',mode)
1587 code = compile(parameter_s,'<timed eval>',mode)
1588 except SyntaxError:
1588 except SyntaxError:
1589 mode = 'exec'
1589 mode = 'exec'
1590 code = compile(parameter_s,'<timed exec>',mode)
1590 code = compile(parameter_s,'<timed exec>',mode)
1591 # skew measurement as little as possible
1591 # skew measurement as little as possible
1592 glob = self.shell.user_ns
1592 glob = self.shell.user_ns
1593 clk = clock2
1593 clk = clock2
1594 wtime = time.time
1594 wtime = time.time
1595 # time execution
1595 # time execution
1596 wall_st = wtime()
1596 wall_st = wtime()
1597 if mode=='eval':
1597 if mode=='eval':
1598 st = clk()
1598 st = clk()
1599 out = eval(code,glob)
1599 out = eval(code,glob)
1600 end = clk()
1600 end = clk()
1601 else:
1601 else:
1602 st = clk()
1602 st = clk()
1603 exec code in glob
1603 exec code in glob
1604 end = clk()
1604 end = clk()
1605 out = None
1605 out = None
1606 wall_end = wtime()
1606 wall_end = wtime()
1607 # Compute actual times and report
1607 # Compute actual times and report
1608 wall_time = wall_end-wall_st
1608 wall_time = wall_end-wall_st
1609 cpu_user = end[0]-st[0]
1609 cpu_user = end[0]-st[0]
1610 cpu_sys = end[1]-st[1]
1610 cpu_sys = end[1]-st[1]
1611 cpu_tot = cpu_user+cpu_sys
1611 cpu_tot = cpu_user+cpu_sys
1612 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1612 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1613 (cpu_user,cpu_sys,cpu_tot)
1613 (cpu_user,cpu_sys,cpu_tot)
1614 print "Wall time: %.2f" % wall_time
1614 print "Wall time: %.2f" % wall_time
1615 return out
1615 return out
1616
1616
1617 def magic_macro(self,parameter_s = ''):
1617 def magic_macro(self,parameter_s = ''):
1618 """Define a set of input lines as a macro for future re-execution.
1618 """Define a set of input lines as a macro for future re-execution.
1619
1619
1620 Usage:\\
1620 Usage:\\
1621 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1621 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1622
1622
1623 Options:
1623 Options:
1624
1624
1625 -r: use 'raw' input. By default, the 'processed' history is used,
1625 -r: use 'raw' input. By default, the 'processed' history is used,
1626 so that magics are loaded in their transformed version to valid
1626 so that magics are loaded in their transformed version to valid
1627 Python. If this option is given, the raw input as typed as the
1627 Python. If this option is given, the raw input as typed as the
1628 command line is used instead.
1628 command line is used instead.
1629
1629
1630 This will define a global variable called `name` which is a string
1630 This will define a global variable called `name` which is a string
1631 made of joining the slices and lines you specify (n1,n2,... numbers
1631 made of joining the slices and lines you specify (n1,n2,... numbers
1632 above) from your input history into a single string. This variable
1632 above) from your input history into a single string. This variable
1633 acts like an automatic function which re-executes those lines as if
1633 acts like an automatic function which re-executes those lines as if
1634 you had typed them. You just type 'name' at the prompt and the code
1634 you had typed them. You just type 'name' at the prompt and the code
1635 executes.
1635 executes.
1636
1636
1637 The notation for indicating number ranges is: n1-n2 means 'use line
1637 The notation for indicating number ranges is: n1-n2 means 'use line
1638 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1638 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1639 using the lines numbered 5,6 and 7.
1639 using the lines numbered 5,6 and 7.
1640
1640
1641 Note: as a 'hidden' feature, you can also use traditional python slice
1641 Note: as a 'hidden' feature, you can also use traditional python slice
1642 notation, where N:M means numbers N through M-1.
1642 notation, where N:M means numbers N through M-1.
1643
1643
1644 For example, if your history contains (%hist prints it):
1644 For example, if your history contains (%hist prints it):
1645
1645
1646 44: x=1\\
1646 44: x=1\\
1647 45: y=3\\
1647 45: y=3\\
1648 46: z=x+y\\
1648 46: z=x+y\\
1649 47: print x\\
1649 47: print x\\
1650 48: a=5\\
1650 48: a=5\\
1651 49: print 'x',x,'y',y\\
1651 49: print 'x',x,'y',y\\
1652
1652
1653 you can create a macro with lines 44 through 47 (included) and line 49
1653 you can create a macro with lines 44 through 47 (included) and line 49
1654 called my_macro with:
1654 called my_macro with:
1655
1655
1656 In [51]: %macro my_macro 44-47 49
1656 In [51]: %macro my_macro 44-47 49
1657
1657
1658 Now, typing `my_macro` (without quotes) will re-execute all this code
1658 Now, typing `my_macro` (without quotes) will re-execute all this code
1659 in one pass.
1659 in one pass.
1660
1660
1661 You don't need to give the line-numbers in order, and any given line
1661 You don't need to give the line-numbers in order, and any given line
1662 number can appear multiple times. You can assemble macros with any
1662 number can appear multiple times. You can assemble macros with any
1663 lines from your input history in any order.
1663 lines from your input history in any order.
1664
1664
1665 The macro is a simple object which holds its value in an attribute,
1665 The macro is a simple object which holds its value in an attribute,
1666 but IPython's display system checks for macros and executes them as
1666 but IPython's display system checks for macros and executes them as
1667 code instead of printing them when you type their name.
1667 code instead of printing them when you type their name.
1668
1668
1669 You can view a macro's contents by explicitly printing it with:
1669 You can view a macro's contents by explicitly printing it with:
1670
1670
1671 'print macro_name'.
1671 'print macro_name'.
1672
1672
1673 For one-off cases which DON'T contain magic function calls in them you
1673 For one-off cases which DON'T contain magic function calls in them you
1674 can obtain similar results by explicitly executing slices from your
1674 can obtain similar results by explicitly executing slices from your
1675 input history with:
1675 input history with:
1676
1676
1677 In [60]: exec In[44:48]+In[49]"""
1677 In [60]: exec In[44:48]+In[49]"""
1678
1678
1679 opts,args = self.parse_options(parameter_s,'r')
1679 opts,args = self.parse_options(parameter_s,'r')
1680 name,ranges = args[0], args[1:]
1680 name,ranges = args[0], args[1:]
1681 #print 'rng',ranges # dbg
1681 #print 'rng',ranges # dbg
1682 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1682 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1683 macro = Macro(lines)
1683 macro = Macro(lines)
1684 self.shell.user_ns.update({name:macro})
1684 self.shell.user_ns.update({name:macro})
1685 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1685 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1686 print 'Macro contents:'
1686 print 'Macro contents:'
1687 print macro,
1687 print macro,
1688
1688
1689 def magic_save(self,parameter_s = ''):
1689 def magic_save(self,parameter_s = ''):
1690 """Save a set of lines to a given filename.
1690 """Save a set of lines to a given filename.
1691
1691
1692 Usage:\\
1692 Usage:\\
1693 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1693 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1694
1694
1695 Options:
1695 Options:
1696
1696
1697 -r: use 'raw' input. By default, the 'processed' history is used,
1697 -r: use 'raw' input. By default, the 'processed' history is used,
1698 so that magics are loaded in their transformed version to valid
1698 so that magics are loaded in their transformed version to valid
1699 Python. If this option is given, the raw input as typed as the
1699 Python. If this option is given, the raw input as typed as the
1700 command line is used instead.
1700 command line is used instead.
1701
1701
1702 This function uses the same syntax as %macro for line extraction, but
1702 This function uses the same syntax as %macro for line extraction, but
1703 instead of creating a macro it saves the resulting string to the
1703 instead of creating a macro it saves the resulting string to the
1704 filename you specify.
1704 filename you specify.
1705
1705
1706 It adds a '.py' extension to the file if you don't do so yourself, and
1706 It adds a '.py' extension to the file if you don't do so yourself, and
1707 it asks for confirmation before overwriting existing files."""
1707 it asks for confirmation before overwriting existing files."""
1708
1708
1709 opts,args = self.parse_options(parameter_s,'r')
1709 opts,args = self.parse_options(parameter_s,'r', mode = 'list')
1710 fname,ranges = args[0], args[1:]
1710 fname,ranges = args[0], args[1:]
1711 if not fname.endswith('.py'):
1711 if not fname.endswith('.py'):
1712 fname += '.py'
1712 fname += '.py'
1713 if os.path.isfile(fname):
1713 if os.path.isfile(fname):
1714 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1714 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1715 if ans.lower() not in ['y','yes']:
1715 if ans.lower() not in ['y','yes']:
1716 print 'Operation cancelled.'
1716 print 'Operation cancelled.'
1717 return
1717 return
1718 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1718 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1719 f = file(fname,'w')
1719 f = file(fname,'w')
1720 f.write(cmds)
1720 f.write(cmds)
1721 f.close()
1721 f.close()
1722 print 'The following commands were written to file `%s`:' % fname
1722 print 'The following commands were written to file `%s`:' % fname
1723 print cmds
1723 print cmds
1724
1724
1725 def _edit_macro(self,mname,macro):
1725 def _edit_macro(self,mname,macro):
1726 """open an editor with the macro data in a file"""
1726 """open an editor with the macro data in a file"""
1727 filename = self.shell.mktempfile(macro.value)
1727 filename = self.shell.mktempfile(macro.value)
1728 self.shell.hooks.editor(filename)
1728 self.shell.hooks.editor(filename)
1729
1729
1730 # and make a new macro object, to replace the old one
1730 # and make a new macro object, to replace the old one
1731 mfile = open(filename)
1731 mfile = open(filename)
1732 mvalue = mfile.read()
1732 mvalue = mfile.read()
1733 mfile.close()
1733 mfile.close()
1734 self.shell.user_ns[mname] = Macro(mvalue)
1734 self.shell.user_ns[mname] = Macro(mvalue)
1735
1735
1736 def magic_ed(self,parameter_s=''):
1736 def magic_ed(self,parameter_s=''):
1737 """Alias to %edit."""
1737 """Alias to %edit."""
1738 return self.magic_edit(parameter_s)
1738 return self.magic_edit(parameter_s)
1739
1739
1740 def magic_edit(self,parameter_s='',last_call=['','']):
1740 def magic_edit(self,parameter_s='',last_call=['','']):
1741 """Bring up an editor and execute the resulting code.
1741 """Bring up an editor and execute the resulting code.
1742
1742
1743 Usage:
1743 Usage:
1744 %edit [options] [args]
1744 %edit [options] [args]
1745
1745
1746 %edit runs IPython's editor hook. The default version of this hook is
1746 %edit runs IPython's editor hook. The default version of this hook is
1747 set to call the __IPYTHON__.rc.editor command. This is read from your
1747 set to call the __IPYTHON__.rc.editor command. This is read from your
1748 environment variable $EDITOR. If this isn't found, it will default to
1748 environment variable $EDITOR. If this isn't found, it will default to
1749 vi under Linux/Unix and to notepad under Windows. See the end of this
1749 vi under Linux/Unix and to notepad under Windows. See the end of this
1750 docstring for how to change the editor hook.
1750 docstring for how to change the editor hook.
1751
1751
1752 You can also set the value of this editor via the command line option
1752 You can also set the value of this editor via the command line option
1753 '-editor' or in your ipythonrc file. This is useful if you wish to use
1753 '-editor' or in your ipythonrc file. This is useful if you wish to use
1754 specifically for IPython an editor different from your typical default
1754 specifically for IPython an editor different from your typical default
1755 (and for Windows users who typically don't set environment variables).
1755 (and for Windows users who typically don't set environment variables).
1756
1756
1757 This command allows you to conveniently edit multi-line code right in
1757 This command allows you to conveniently edit multi-line code right in
1758 your IPython session.
1758 your IPython session.
1759
1759
1760 If called without arguments, %edit opens up an empty editor with a
1760 If called without arguments, %edit opens up an empty editor with a
1761 temporary file and will execute the contents of this file when you
1761 temporary file and will execute the contents of this file when you
1762 close it (don't forget to save it!).
1762 close it (don't forget to save it!).
1763
1763
1764
1764
1765 Options:
1765 Options:
1766
1766
1767 -p: this will call the editor with the same data as the previous time
1767 -p: this will call the editor with the same data as the previous time
1768 it was used, regardless of how long ago (in your current session) it
1768 it was used, regardless of how long ago (in your current session) it
1769 was.
1769 was.
1770
1770
1771 -r: use 'raw' input. This option only applies to input taken from the
1771 -r: use 'raw' input. This option only applies to input taken from the
1772 user's history. By default, the 'processed' history is used, so that
1772 user's history. By default, the 'processed' history is used, so that
1773 magics are loaded in their transformed version to valid Python. If
1773 magics are loaded in their transformed version to valid Python. If
1774 this option is given, the raw input as typed as the command line is
1774 this option is given, the raw input as typed as the command line is
1775 used instead. When you exit the editor, it will be executed by
1775 used instead. When you exit the editor, it will be executed by
1776 IPython's own processor.
1776 IPython's own processor.
1777
1777
1778 -x: do not execute the edited code immediately upon exit. This is
1778 -x: do not execute the edited code immediately upon exit. This is
1779 mainly useful if you are editing programs which need to be called with
1779 mainly useful if you are editing programs which need to be called with
1780 command line arguments, which you can then do using %run.
1780 command line arguments, which you can then do using %run.
1781
1781
1782
1782
1783 Arguments:
1783 Arguments:
1784
1784
1785 If arguments are given, the following possibilites exist:
1785 If arguments are given, the following possibilites exist:
1786
1786
1787 - The arguments are numbers or pairs of colon-separated numbers (like
1787 - The arguments are numbers or pairs of colon-separated numbers (like
1788 1 4:8 9). These are interpreted as lines of previous input to be
1788 1 4:8 9). These are interpreted as lines of previous input to be
1789 loaded into the editor. The syntax is the same of the %macro command.
1789 loaded into the editor. The syntax is the same of the %macro command.
1790
1790
1791 - If the argument doesn't start with a number, it is evaluated as a
1791 - If the argument doesn't start with a number, it is evaluated as a
1792 variable and its contents loaded into the editor. You can thus edit
1792 variable and its contents loaded into the editor. You can thus edit
1793 any string which contains python code (including the result of
1793 any string which contains python code (including the result of
1794 previous edits).
1794 previous edits).
1795
1795
1796 - If the argument is the name of an object (other than a string),
1796 - If the argument is the name of an object (other than a string),
1797 IPython will try to locate the file where it was defined and open the
1797 IPython will try to locate the file where it was defined and open the
1798 editor at the point where it is defined. You can use `%edit function`
1798 editor at the point where it is defined. You can use `%edit function`
1799 to load an editor exactly at the point where 'function' is defined,
1799 to load an editor exactly at the point where 'function' is defined,
1800 edit it and have the file be executed automatically.
1800 edit it and have the file be executed automatically.
1801
1801
1802 If the object is a macro (see %macro for details), this opens up your
1802 If the object is a macro (see %macro for details), this opens up your
1803 specified editor with a temporary file containing the macro's data.
1803 specified editor with a temporary file containing the macro's data.
1804 Upon exit, the macro is reloaded with the contents of the file.
1804 Upon exit, the macro is reloaded with the contents of the file.
1805
1805
1806 Note: opening at an exact line is only supported under Unix, and some
1806 Note: opening at an exact line is only supported under Unix, and some
1807 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1807 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1808 '+NUMBER' parameter necessary for this feature. Good editors like
1808 '+NUMBER' parameter necessary for this feature. Good editors like
1809 (X)Emacs, vi, jed, pico and joe all do.
1809 (X)Emacs, vi, jed, pico and joe all do.
1810
1810
1811 - If the argument is not found as a variable, IPython will look for a
1811 - If the argument is not found as a variable, IPython will look for a
1812 file with that name (adding .py if necessary) and load it into the
1812 file with that name (adding .py if necessary) and load it into the
1813 editor. It will execute its contents with execfile() when you exit,
1813 editor. It will execute its contents with execfile() when you exit,
1814 loading any code in the file into your interactive namespace.
1814 loading any code in the file into your interactive namespace.
1815
1815
1816 After executing your code, %edit will return as output the code you
1816 After executing your code, %edit will return as output the code you
1817 typed in the editor (except when it was an existing file). This way
1817 typed in the editor (except when it was an existing file). This way
1818 you can reload the code in further invocations of %edit as a variable,
1818 you can reload the code in further invocations of %edit as a variable,
1819 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1819 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1820 the output.
1820 the output.
1821
1821
1822 Note that %edit is also available through the alias %ed.
1822 Note that %edit is also available through the alias %ed.
1823
1823
1824 This is an example of creating a simple function inside the editor and
1824 This is an example of creating a simple function inside the editor and
1825 then modifying it. First, start up the editor:
1825 then modifying it. First, start up the editor:
1826
1826
1827 In [1]: ed\\
1827 In [1]: ed\\
1828 Editing... done. Executing edited code...\\
1828 Editing... done. Executing edited code...\\
1829 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1829 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1830
1830
1831 We can then call the function foo():
1831 We can then call the function foo():
1832
1832
1833 In [2]: foo()\\
1833 In [2]: foo()\\
1834 foo() was defined in an editing session
1834 foo() was defined in an editing session
1835
1835
1836 Now we edit foo. IPython automatically loads the editor with the
1836 Now we edit foo. IPython automatically loads the editor with the
1837 (temporary) file where foo() was previously defined:
1837 (temporary) file where foo() was previously defined:
1838
1838
1839 In [3]: ed foo\\
1839 In [3]: ed foo\\
1840 Editing... done. Executing edited code...
1840 Editing... done. Executing edited code...
1841
1841
1842 And if we call foo() again we get the modified version:
1842 And if we call foo() again we get the modified version:
1843
1843
1844 In [4]: foo()\\
1844 In [4]: foo()\\
1845 foo() has now been changed!
1845 foo() has now been changed!
1846
1846
1847 Here is an example of how to edit a code snippet successive
1847 Here is an example of how to edit a code snippet successive
1848 times. First we call the editor:
1848 times. First we call the editor:
1849
1849
1850 In [8]: ed\\
1850 In [8]: ed\\
1851 Editing... done. Executing edited code...\\
1851 Editing... done. Executing edited code...\\
1852 hello\\
1852 hello\\
1853 Out[8]: "print 'hello'\\n"
1853 Out[8]: "print 'hello'\\n"
1854
1854
1855 Now we call it again with the previous output (stored in _):
1855 Now we call it again with the previous output (stored in _):
1856
1856
1857 In [9]: ed _\\
1857 In [9]: ed _\\
1858 Editing... done. Executing edited code...\\
1858 Editing... done. Executing edited code...\\
1859 hello world\\
1859 hello world\\
1860 Out[9]: "print 'hello world'\\n"
1860 Out[9]: "print 'hello world'\\n"
1861
1861
1862 Now we call it with the output #8 (stored in _8, also as Out[8]):
1862 Now we call it with the output #8 (stored in _8, also as Out[8]):
1863
1863
1864 In [10]: ed _8\\
1864 In [10]: ed _8\\
1865 Editing... done. Executing edited code...\\
1865 Editing... done. Executing edited code...\\
1866 hello again\\
1866 hello again\\
1867 Out[10]: "print 'hello again'\\n"
1867 Out[10]: "print 'hello again'\\n"
1868
1868
1869
1869
1870 Changing the default editor hook:
1870 Changing the default editor hook:
1871
1871
1872 If you wish to write your own editor hook, you can put it in a
1872 If you wish to write your own editor hook, you can put it in a
1873 configuration file which you load at startup time. The default hook
1873 configuration file which you load at startup time. The default hook
1874 is defined in the IPython.hooks module, and you can use that as a
1874 is defined in the IPython.hooks module, and you can use that as a
1875 starting example for further modifications. That file also has
1875 starting example for further modifications. That file also has
1876 general instructions on how to set a new hook for use once you've
1876 general instructions on how to set a new hook for use once you've
1877 defined it."""
1877 defined it."""
1878
1878
1879 # FIXME: This function has become a convoluted mess. It needs a
1879 # FIXME: This function has become a convoluted mess. It needs a
1880 # ground-up rewrite with clean, simple logic.
1880 # ground-up rewrite with clean, simple logic.
1881
1881
1882 def make_filename(arg):
1882 def make_filename(arg):
1883 "Make a filename from the given args"
1883 "Make a filename from the given args"
1884 try:
1884 try:
1885 filename = get_py_filename(arg)
1885 filename = get_py_filename(arg)
1886 except IOError:
1886 except IOError:
1887 if args.endswith('.py'):
1887 if args.endswith('.py'):
1888 filename = arg
1888 filename = arg
1889 else:
1889 else:
1890 filename = None
1890 filename = None
1891 return filename
1891 return filename
1892
1892
1893 # custom exceptions
1893 # custom exceptions
1894 class DataIsObject(Exception): pass
1894 class DataIsObject(Exception): pass
1895
1895
1896 opts,args = self.parse_options(parameter_s,'prx')
1896 opts,args = self.parse_options(parameter_s,'prx')
1897 # Set a few locals from the options for convenience:
1897 # Set a few locals from the options for convenience:
1898 opts_p = opts.has_key('p')
1898 opts_p = opts.has_key('p')
1899 opts_r = opts.has_key('r')
1899 opts_r = opts.has_key('r')
1900
1900
1901 # Default line number value
1901 # Default line number value
1902 lineno = None
1902 lineno = None
1903 if opts_p:
1903 if opts_p:
1904 args = '_%s' % last_call[0]
1904 args = '_%s' % last_call[0]
1905 if not self.shell.user_ns.has_key(args):
1905 if not self.shell.user_ns.has_key(args):
1906 args = last_call[1]
1906 args = last_call[1]
1907
1907
1908 # use last_call to remember the state of the previous call, but don't
1908 # use last_call to remember the state of the previous call, but don't
1909 # let it be clobbered by successive '-p' calls.
1909 # let it be clobbered by successive '-p' calls.
1910 try:
1910 try:
1911 last_call[0] = self.shell.outputcache.prompt_count
1911 last_call[0] = self.shell.outputcache.prompt_count
1912 if not opts_p:
1912 if not opts_p:
1913 last_call[1] = parameter_s
1913 last_call[1] = parameter_s
1914 except:
1914 except:
1915 pass
1915 pass
1916
1916
1917 # by default this is done with temp files, except when the given
1917 # by default this is done with temp files, except when the given
1918 # arg is a filename
1918 # arg is a filename
1919 use_temp = 1
1919 use_temp = 1
1920
1920
1921 if re.match(r'\d',args):
1921 if re.match(r'\d',args):
1922 # Mode where user specifies ranges of lines, like in %macro.
1922 # Mode where user specifies ranges of lines, like in %macro.
1923 # This means that you can't edit files whose names begin with
1923 # This means that you can't edit files whose names begin with
1924 # numbers this way. Tough.
1924 # numbers this way. Tough.
1925 ranges = args.split()
1925 ranges = args.split()
1926 data = ''.join(self.extract_input_slices(ranges,opts_r))
1926 data = ''.join(self.extract_input_slices(ranges,opts_r))
1927 elif args.endswith('.py'):
1927 elif args.endswith('.py'):
1928 filename = make_filename(args)
1928 filename = make_filename(args)
1929 data = ''
1929 data = ''
1930 use_temp = 0
1930 use_temp = 0
1931 elif args:
1931 elif args:
1932 try:
1932 try:
1933 # Load the parameter given as a variable. If not a string,
1933 # Load the parameter given as a variable. If not a string,
1934 # process it as an object instead (below)
1934 # process it as an object instead (below)
1935
1935
1936 #print '*** args',args,'type',type(args) # dbg
1936 #print '*** args',args,'type',type(args) # dbg
1937 data = eval(args,self.shell.user_ns)
1937 data = eval(args,self.shell.user_ns)
1938 if not type(data) in StringTypes:
1938 if not type(data) in StringTypes:
1939 raise DataIsObject
1939 raise DataIsObject
1940
1940
1941 except (NameError,SyntaxError):
1941 except (NameError,SyntaxError):
1942 # given argument is not a variable, try as a filename
1942 # given argument is not a variable, try as a filename
1943 filename = make_filename(args)
1943 filename = make_filename(args)
1944 if filename is None:
1944 if filename is None:
1945 warn("Argument given (%s) can't be found as a variable "
1945 warn("Argument given (%s) can't be found as a variable "
1946 "or as a filename." % args)
1946 "or as a filename." % args)
1947 return
1947 return
1948
1948
1949 data = ''
1949 data = ''
1950 use_temp = 0
1950 use_temp = 0
1951 except DataIsObject:
1951 except DataIsObject:
1952
1952
1953 # macros have a special edit function
1953 # macros have a special edit function
1954 if isinstance(data,Macro):
1954 if isinstance(data,Macro):
1955 self._edit_macro(args,data)
1955 self._edit_macro(args,data)
1956 return
1956 return
1957
1957
1958 # For objects, try to edit the file where they are defined
1958 # For objects, try to edit the file where they are defined
1959 try:
1959 try:
1960 filename = inspect.getabsfile(data)
1960 filename = inspect.getabsfile(data)
1961 datafile = 1
1961 datafile = 1
1962 except TypeError:
1962 except TypeError:
1963 filename = make_filename(args)
1963 filename = make_filename(args)
1964 datafile = 1
1964 datafile = 1
1965 warn('Could not find file where `%s` is defined.\n'
1965 warn('Could not find file where `%s` is defined.\n'
1966 'Opening a file named `%s`' % (args,filename))
1966 'Opening a file named `%s`' % (args,filename))
1967 # Now, make sure we can actually read the source (if it was in
1967 # Now, make sure we can actually read the source (if it was in
1968 # a temp file it's gone by now).
1968 # a temp file it's gone by now).
1969 if datafile:
1969 if datafile:
1970 try:
1970 try:
1971 lineno = inspect.getsourcelines(data)[1]
1971 lineno = inspect.getsourcelines(data)[1]
1972 except IOError:
1972 except IOError:
1973 filename = make_filename(args)
1973 filename = make_filename(args)
1974 if filename is None:
1974 if filename is None:
1975 warn('The file `%s` where `%s` was defined cannot '
1975 warn('The file `%s` where `%s` was defined cannot '
1976 'be read.' % (filename,data))
1976 'be read.' % (filename,data))
1977 return
1977 return
1978 use_temp = 0
1978 use_temp = 0
1979 else:
1979 else:
1980 data = ''
1980 data = ''
1981
1981
1982 if use_temp:
1982 if use_temp:
1983 filename = self.shell.mktempfile(data)
1983 filename = self.shell.mktempfile(data)
1984 print 'IPython will make a temporary file named:',filename
1984 print 'IPython will make a temporary file named:',filename
1985
1985
1986 # do actual editing here
1986 # do actual editing here
1987 print 'Editing...',
1987 print 'Editing...',
1988 sys.stdout.flush()
1988 sys.stdout.flush()
1989 self.shell.hooks.editor(filename,lineno)
1989 self.shell.hooks.editor(filename,lineno)
1990 if opts.has_key('x'): # -x prevents actual execution
1990 if opts.has_key('x'): # -x prevents actual execution
1991 print
1991 print
1992 else:
1992 else:
1993 print 'done. Executing edited code...'
1993 print 'done. Executing edited code...'
1994 if opts_r:
1994 if opts_r:
1995 self.shell.runlines(file_read(filename))
1995 self.shell.runlines(file_read(filename))
1996 else:
1996 else:
1997 self.shell.safe_execfile(filename,self.shell.user_ns)
1997 self.shell.safe_execfile(filename,self.shell.user_ns)
1998 if use_temp:
1998 if use_temp:
1999 try:
1999 try:
2000 return open(filename).read()
2000 return open(filename).read()
2001 except IOError,msg:
2001 except IOError,msg:
2002 if msg.filename == filename:
2002 if msg.filename == filename:
2003 warn('File not found. Did you forget to save?')
2003 warn('File not found. Did you forget to save?')
2004 return
2004 return
2005 else:
2005 else:
2006 self.shell.showtraceback()
2006 self.shell.showtraceback()
2007
2007
2008 def magic_xmode(self,parameter_s = ''):
2008 def magic_xmode(self,parameter_s = ''):
2009 """Switch modes for the exception handlers.
2009 """Switch modes for the exception handlers.
2010
2010
2011 Valid modes: Plain, Context and Verbose.
2011 Valid modes: Plain, Context and Verbose.
2012
2012
2013 If called without arguments, acts as a toggle."""
2013 If called without arguments, acts as a toggle."""
2014
2014
2015 def xmode_switch_err(name):
2015 def xmode_switch_err(name):
2016 warn('Error changing %s exception modes.\n%s' %
2016 warn('Error changing %s exception modes.\n%s' %
2017 (name,sys.exc_info()[1]))
2017 (name,sys.exc_info()[1]))
2018
2018
2019 shell = self.shell
2019 shell = self.shell
2020 new_mode = parameter_s.strip().capitalize()
2020 new_mode = parameter_s.strip().capitalize()
2021 try:
2021 try:
2022 shell.InteractiveTB.set_mode(mode=new_mode)
2022 shell.InteractiveTB.set_mode(mode=new_mode)
2023 print 'Exception reporting mode:',shell.InteractiveTB.mode
2023 print 'Exception reporting mode:',shell.InteractiveTB.mode
2024 except:
2024 except:
2025 xmode_switch_err('user')
2025 xmode_switch_err('user')
2026
2026
2027 # threaded shells use a special handler in sys.excepthook
2027 # threaded shells use a special handler in sys.excepthook
2028 if shell.isthreaded:
2028 if shell.isthreaded:
2029 try:
2029 try:
2030 shell.sys_excepthook.set_mode(mode=new_mode)
2030 shell.sys_excepthook.set_mode(mode=new_mode)
2031 except:
2031 except:
2032 xmode_switch_err('threaded')
2032 xmode_switch_err('threaded')
2033
2033
2034 def magic_colors(self,parameter_s = ''):
2034 def magic_colors(self,parameter_s = ''):
2035 """Switch color scheme for prompts, info system and exception handlers.
2035 """Switch color scheme for prompts, info system and exception handlers.
2036
2036
2037 Currently implemented schemes: NoColor, Linux, LightBG.
2037 Currently implemented schemes: NoColor, Linux, LightBG.
2038
2038
2039 Color scheme names are not case-sensitive."""
2039 Color scheme names are not case-sensitive."""
2040
2040
2041 def color_switch_err(name):
2041 def color_switch_err(name):
2042 warn('Error changing %s color schemes.\n%s' %
2042 warn('Error changing %s color schemes.\n%s' %
2043 (name,sys.exc_info()[1]))
2043 (name,sys.exc_info()[1]))
2044
2044
2045
2045
2046 new_scheme = parameter_s.strip()
2046 new_scheme = parameter_s.strip()
2047 if not new_scheme:
2047 if not new_scheme:
2048 print 'You must specify a color scheme.'
2048 print 'You must specify a color scheme.'
2049 return
2049 return
2050 import IPython.rlineimpl as readline
2050 import IPython.rlineimpl as readline
2051 if not readline.have_readline:
2051 if not readline.have_readline:
2052 msg = """\
2052 msg = """\
2053 Proper color support under MS Windows requires Gary Bishop's readline library.
2053 Proper color support under MS Windows requires Gary Bishop's readline library.
2054 You can find it at:
2054 You can find it at:
2055 http://sourceforge.net/projects/uncpythontools
2055 http://sourceforge.net/projects/uncpythontools
2056 Gary's readline needs the ctypes module, from:
2056 Gary's readline needs the ctypes module, from:
2057 http://starship.python.net/crew/theller/ctypes
2057 http://starship.python.net/crew/theller/ctypes
2058
2058
2059 Defaulting color scheme to 'NoColor'"""
2059 Defaulting color scheme to 'NoColor'"""
2060 new_scheme = 'NoColor'
2060 new_scheme = 'NoColor'
2061 warn(msg)
2061 warn(msg)
2062 # local shortcut
2062 # local shortcut
2063 shell = self.shell
2063 shell = self.shell
2064
2064
2065 # Set prompt colors
2065 # Set prompt colors
2066 try:
2066 try:
2067 shell.outputcache.set_colors(new_scheme)
2067 shell.outputcache.set_colors(new_scheme)
2068 except:
2068 except:
2069 color_switch_err('prompt')
2069 color_switch_err('prompt')
2070 else:
2070 else:
2071 shell.rc.colors = \
2071 shell.rc.colors = \
2072 shell.outputcache.color_table.active_scheme_name
2072 shell.outputcache.color_table.active_scheme_name
2073 # Set exception colors
2073 # Set exception colors
2074 try:
2074 try:
2075 shell.InteractiveTB.set_colors(scheme = new_scheme)
2075 shell.InteractiveTB.set_colors(scheme = new_scheme)
2076 shell.SyntaxTB.set_colors(scheme = new_scheme)
2076 shell.SyntaxTB.set_colors(scheme = new_scheme)
2077 except:
2077 except:
2078 color_switch_err('exception')
2078 color_switch_err('exception')
2079
2079
2080 # threaded shells use a verbose traceback in sys.excepthook
2080 # threaded shells use a verbose traceback in sys.excepthook
2081 if shell.isthreaded:
2081 if shell.isthreaded:
2082 try:
2082 try:
2083 shell.sys_excepthook.set_colors(scheme=new_scheme)
2083 shell.sys_excepthook.set_colors(scheme=new_scheme)
2084 except:
2084 except:
2085 color_switch_err('system exception handler')
2085 color_switch_err('system exception handler')
2086
2086
2087 # Set info (for 'object?') colors
2087 # Set info (for 'object?') colors
2088 if shell.rc.color_info:
2088 if shell.rc.color_info:
2089 try:
2089 try:
2090 shell.inspector.set_active_scheme(new_scheme)
2090 shell.inspector.set_active_scheme(new_scheme)
2091 except:
2091 except:
2092 color_switch_err('object inspector')
2092 color_switch_err('object inspector')
2093 else:
2093 else:
2094 shell.inspector.set_active_scheme('NoColor')
2094 shell.inspector.set_active_scheme('NoColor')
2095
2095
2096 def magic_color_info(self,parameter_s = ''):
2096 def magic_color_info(self,parameter_s = ''):
2097 """Toggle color_info.
2097 """Toggle color_info.
2098
2098
2099 The color_info configuration parameter controls whether colors are
2099 The color_info configuration parameter controls whether colors are
2100 used for displaying object details (by things like %psource, %pfile or
2100 used for displaying object details (by things like %psource, %pfile or
2101 the '?' system). This function toggles this value with each call.
2101 the '?' system). This function toggles this value with each call.
2102
2102
2103 Note that unless you have a fairly recent pager (less works better
2103 Note that unless you have a fairly recent pager (less works better
2104 than more) in your system, using colored object information displays
2104 than more) in your system, using colored object information displays
2105 will not work properly. Test it and see."""
2105 will not work properly. Test it and see."""
2106
2106
2107 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2107 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2108 self.magic_colors(self.shell.rc.colors)
2108 self.magic_colors(self.shell.rc.colors)
2109 print 'Object introspection functions have now coloring:',
2109 print 'Object introspection functions have now coloring:',
2110 print ['OFF','ON'][self.shell.rc.color_info]
2110 print ['OFF','ON'][self.shell.rc.color_info]
2111
2111
2112 def magic_Pprint(self, parameter_s=''):
2112 def magic_Pprint(self, parameter_s=''):
2113 """Toggle pretty printing on/off."""
2113 """Toggle pretty printing on/off."""
2114
2114
2115 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2115 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2116 print 'Pretty printing has been turned', \
2116 print 'Pretty printing has been turned', \
2117 ['OFF','ON'][self.shell.rc.pprint]
2117 ['OFF','ON'][self.shell.rc.pprint]
2118
2118
2119 def magic_exit(self, parameter_s=''):
2119 def magic_exit(self, parameter_s=''):
2120 """Exit IPython, confirming if configured to do so.
2120 """Exit IPython, confirming if configured to do so.
2121
2121
2122 You can configure whether IPython asks for confirmation upon exit by
2122 You can configure whether IPython asks for confirmation upon exit by
2123 setting the confirm_exit flag in the ipythonrc file."""
2123 setting the confirm_exit flag in the ipythonrc file."""
2124
2124
2125 self.shell.exit()
2125 self.shell.exit()
2126
2126
2127 def magic_quit(self, parameter_s=''):
2127 def magic_quit(self, parameter_s=''):
2128 """Exit IPython, confirming if configured to do so (like %exit)"""
2128 """Exit IPython, confirming if configured to do so (like %exit)"""
2129
2129
2130 self.shell.exit()
2130 self.shell.exit()
2131
2131
2132 def magic_Exit(self, parameter_s=''):
2132 def magic_Exit(self, parameter_s=''):
2133 """Exit IPython without confirmation."""
2133 """Exit IPython without confirmation."""
2134
2134
2135 self.shell.exit_now = True
2135 self.shell.exit_now = True
2136
2136
2137 def magic_Quit(self, parameter_s=''):
2137 def magic_Quit(self, parameter_s=''):
2138 """Exit IPython without confirmation (like %Exit)."""
2138 """Exit IPython without confirmation (like %Exit)."""
2139
2139
2140 self.shell.exit_now = True
2140 self.shell.exit_now = True
2141
2141
2142 #......................................................................
2142 #......................................................................
2143 # Functions to implement unix shell-type things
2143 # Functions to implement unix shell-type things
2144
2144
2145 def magic_alias(self, parameter_s = ''):
2145 def magic_alias(self, parameter_s = ''):
2146 """Define an alias for a system command.
2146 """Define an alias for a system command.
2147
2147
2148 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2148 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2149
2149
2150 Then, typing 'alias_name params' will execute the system command 'cmd
2150 Then, typing 'alias_name params' will execute the system command 'cmd
2151 params' (from your underlying operating system).
2151 params' (from your underlying operating system).
2152
2152
2153 Aliases have lower precedence than magic functions and Python normal
2153 Aliases have lower precedence than magic functions and Python normal
2154 variables, so if 'foo' is both a Python variable and an alias, the
2154 variables, so if 'foo' is both a Python variable and an alias, the
2155 alias can not be executed until 'del foo' removes the Python variable.
2155 alias can not be executed until 'del foo' removes the Python variable.
2156
2156
2157 You can use the %l specifier in an alias definition to represent the
2157 You can use the %l specifier in an alias definition to represent the
2158 whole line when the alias is called. For example:
2158 whole line when the alias is called. For example:
2159
2159
2160 In [2]: alias all echo "Input in brackets: <%l>"\\
2160 In [2]: alias all echo "Input in brackets: <%l>"\\
2161 In [3]: all hello world\\
2161 In [3]: all hello world\\
2162 Input in brackets: <hello world>
2162 Input in brackets: <hello world>
2163
2163
2164 You can also define aliases with parameters using %s specifiers (one
2164 You can also define aliases with parameters using %s specifiers (one
2165 per parameter):
2165 per parameter):
2166
2166
2167 In [1]: alias parts echo first %s second %s\\
2167 In [1]: alias parts echo first %s second %s\\
2168 In [2]: %parts A B\\
2168 In [2]: %parts A B\\
2169 first A second B\\
2169 first A second B\\
2170 In [3]: %parts A\\
2170 In [3]: %parts A\\
2171 Incorrect number of arguments: 2 expected.\\
2171 Incorrect number of arguments: 2 expected.\\
2172 parts is an alias to: 'echo first %s second %s'
2172 parts is an alias to: 'echo first %s second %s'
2173
2173
2174 Note that %l and %s are mutually exclusive. You can only use one or
2174 Note that %l and %s are mutually exclusive. You can only use one or
2175 the other in your aliases.
2175 the other in your aliases.
2176
2176
2177 Aliases expand Python variables just like system calls using ! or !!
2177 Aliases expand Python variables just like system calls using ! or !!
2178 do: all expressions prefixed with '$' get expanded. For details of
2178 do: all expressions prefixed with '$' get expanded. For details of
2179 the semantic rules, see PEP-215:
2179 the semantic rules, see PEP-215:
2180 http://www.python.org/peps/pep-0215.html. This is the library used by
2180 http://www.python.org/peps/pep-0215.html. This is the library used by
2181 IPython for variable expansion. If you want to access a true shell
2181 IPython for variable expansion. If you want to access a true shell
2182 variable, an extra $ is necessary to prevent its expansion by IPython:
2182 variable, an extra $ is necessary to prevent its expansion by IPython:
2183
2183
2184 In [6]: alias show echo\\
2184 In [6]: alias show echo\\
2185 In [7]: PATH='A Python string'\\
2185 In [7]: PATH='A Python string'\\
2186 In [8]: show $PATH\\
2186 In [8]: show $PATH\\
2187 A Python string\\
2187 A Python string\\
2188 In [9]: show $$PATH\\
2188 In [9]: show $$PATH\\
2189 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2189 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2190
2190
2191 You can use the alias facility to acess all of $PATH. See the %rehash
2191 You can use the alias facility to acess all of $PATH. See the %rehash
2192 and %rehashx functions, which automatically create aliases for the
2192 and %rehashx functions, which automatically create aliases for the
2193 contents of your $PATH.
2193 contents of your $PATH.
2194
2194
2195 If called with no parameters, %alias prints the current alias table."""
2195 If called with no parameters, %alias prints the current alias table."""
2196
2196
2197 par = parameter_s.strip()
2197 par = parameter_s.strip()
2198 if not par:
2198 if not par:
2199 if self.shell.rc.automagic:
2199 if self.shell.rc.automagic:
2200 prechar = ''
2200 prechar = ''
2201 else:
2201 else:
2202 prechar = self.shell.ESC_MAGIC
2202 prechar = self.shell.ESC_MAGIC
2203 #print 'Alias\t\tSystem Command\n'+'-'*30
2203 #print 'Alias\t\tSystem Command\n'+'-'*30
2204 atab = self.shell.alias_table
2204 atab = self.shell.alias_table
2205 aliases = atab.keys()
2205 aliases = atab.keys()
2206 aliases.sort()
2206 aliases.sort()
2207 res = []
2207 res = []
2208 for alias in aliases:
2208 for alias in aliases:
2209 res.append((alias, atab[alias][1]))
2209 res.append((alias, atab[alias][1]))
2210 print "Total number of aliases:",len(aliases)
2210 print "Total number of aliases:",len(aliases)
2211 return res
2211 return res
2212 try:
2212 try:
2213 alias,cmd = par.split(None,1)
2213 alias,cmd = par.split(None,1)
2214 except:
2214 except:
2215 print OInspect.getdoc(self.magic_alias)
2215 print OInspect.getdoc(self.magic_alias)
2216 else:
2216 else:
2217 nargs = cmd.count('%s')
2217 nargs = cmd.count('%s')
2218 if nargs>0 and cmd.find('%l')>=0:
2218 if nargs>0 and cmd.find('%l')>=0:
2219 error('The %s and %l specifiers are mutually exclusive '
2219 error('The %s and %l specifiers are mutually exclusive '
2220 'in alias definitions.')
2220 'in alias definitions.')
2221 else: # all looks OK
2221 else: # all looks OK
2222 self.shell.alias_table[alias] = (nargs,cmd)
2222 self.shell.alias_table[alias] = (nargs,cmd)
2223 self.shell.alias_table_validate(verbose=0)
2223 self.shell.alias_table_validate(verbose=0)
2224 # end magic_alias
2224 # end magic_alias
2225
2225
2226 def magic_unalias(self, parameter_s = ''):
2226 def magic_unalias(self, parameter_s = ''):
2227 """Remove an alias"""
2227 """Remove an alias"""
2228
2228
2229 aname = parameter_s.strip()
2229 aname = parameter_s.strip()
2230 if aname in self.shell.alias_table:
2230 if aname in self.shell.alias_table:
2231 del self.shell.alias_table[aname]
2231 del self.shell.alias_table[aname]
2232
2232
2233 def magic_rehash(self, parameter_s = ''):
2233 def magic_rehash(self, parameter_s = ''):
2234 """Update the alias table with all entries in $PATH.
2234 """Update the alias table with all entries in $PATH.
2235
2235
2236 This version does no checks on execute permissions or whether the
2236 This version does no checks on execute permissions or whether the
2237 contents of $PATH are truly files (instead of directories or something
2237 contents of $PATH are truly files (instead of directories or something
2238 else). For such a safer (but slower) version, use %rehashx."""
2238 else). For such a safer (but slower) version, use %rehashx."""
2239
2239
2240 # This function (and rehashx) manipulate the alias_table directly
2240 # This function (and rehashx) manipulate the alias_table directly
2241 # rather than calling magic_alias, for speed reasons. A rehash on a
2241 # rather than calling magic_alias, for speed reasons. A rehash on a
2242 # typical Linux box involves several thousand entries, so efficiency
2242 # typical Linux box involves several thousand entries, so efficiency
2243 # here is a top concern.
2243 # here is a top concern.
2244
2244
2245 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2245 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2246 alias_table = self.shell.alias_table
2246 alias_table = self.shell.alias_table
2247 for pdir in path:
2247 for pdir in path:
2248 for ff in os.listdir(pdir):
2248 for ff in os.listdir(pdir):
2249 # each entry in the alias table must be (N,name), where
2249 # each entry in the alias table must be (N,name), where
2250 # N is the number of positional arguments of the alias.
2250 # N is the number of positional arguments of the alias.
2251 alias_table[ff] = (0,ff)
2251 alias_table[ff] = (0,ff)
2252 # Make sure the alias table doesn't contain keywords or builtins
2252 # Make sure the alias table doesn't contain keywords or builtins
2253 self.shell.alias_table_validate()
2253 self.shell.alias_table_validate()
2254 # Call again init_auto_alias() so we get 'rm -i' and other modified
2254 # Call again init_auto_alias() so we get 'rm -i' and other modified
2255 # aliases since %rehash will probably clobber them
2255 # aliases since %rehash will probably clobber them
2256 self.shell.init_auto_alias()
2256 self.shell.init_auto_alias()
2257
2257
2258 def magic_rehashx(self, parameter_s = ''):
2258 def magic_rehashx(self, parameter_s = ''):
2259 """Update the alias table with all executable files in $PATH.
2259 """Update the alias table with all executable files in $PATH.
2260
2260
2261 This version explicitly checks that every entry in $PATH is a file
2261 This version explicitly checks that every entry in $PATH is a file
2262 with execute access (os.X_OK), so it is much slower than %rehash.
2262 with execute access (os.X_OK), so it is much slower than %rehash.
2263
2263
2264 Under Windows, it checks executability as a match agains a
2264 Under Windows, it checks executability as a match agains a
2265 '|'-separated string of extensions, stored in the IPython config
2265 '|'-separated string of extensions, stored in the IPython config
2266 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2266 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2267
2267
2268 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2268 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2269 alias_table = self.shell.alias_table
2269 alias_table = self.shell.alias_table
2270 syscmdlist = []
2270 syscmdlist = []
2271 if os.name == 'posix':
2271 if os.name == 'posix':
2272 isexec = lambda fname:os.path.isfile(fname) and \
2272 isexec = lambda fname:os.path.isfile(fname) and \
2273 os.access(fname,os.X_OK)
2273 os.access(fname,os.X_OK)
2274 else:
2274 else:
2275
2275
2276 try:
2276 try:
2277 winext = os.environ['pathext'].replace(';','|').replace('.','')
2277 winext = os.environ['pathext'].replace(';','|').replace('.','')
2278 except KeyError:
2278 except KeyError:
2279 winext = 'exe|com|bat'
2279 winext = 'exe|com|bat'
2280
2280
2281 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2281 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2282 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2282 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2283 savedir = os.getcwd()
2283 savedir = os.getcwd()
2284 try:
2284 try:
2285 # write the whole loop for posix/Windows so we don't have an if in
2285 # write the whole loop for posix/Windows so we don't have an if in
2286 # the innermost part
2286 # the innermost part
2287 if os.name == 'posix':
2287 if os.name == 'posix':
2288 for pdir in path:
2288 for pdir in path:
2289 os.chdir(pdir)
2289 os.chdir(pdir)
2290 for ff in os.listdir(pdir):
2290 for ff in os.listdir(pdir):
2291 if isexec(ff):
2291 if isexec(ff):
2292 # each entry in the alias table must be (N,name),
2292 # each entry in the alias table must be (N,name),
2293 # where N is the number of positional arguments of the
2293 # where N is the number of positional arguments of the
2294 # alias.
2294 # alias.
2295 alias_table[ff] = (0,ff)
2295 alias_table[ff] = (0,ff)
2296 syscmdlist.append(ff)
2296 syscmdlist.append(ff)
2297 else:
2297 else:
2298 for pdir in path:
2298 for pdir in path:
2299 os.chdir(pdir)
2299 os.chdir(pdir)
2300 for ff in os.listdir(pdir):
2300 for ff in os.listdir(pdir):
2301 if isexec(ff):
2301 if isexec(ff):
2302 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2302 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2303 syscmdlist.append(ff)
2303 syscmdlist.append(ff)
2304 # Make sure the alias table doesn't contain keywords or builtins
2304 # Make sure the alias table doesn't contain keywords or builtins
2305 self.shell.alias_table_validate()
2305 self.shell.alias_table_validate()
2306 # Call again init_auto_alias() so we get 'rm -i' and other
2306 # Call again init_auto_alias() so we get 'rm -i' and other
2307 # modified aliases since %rehashx will probably clobber them
2307 # modified aliases since %rehashx will probably clobber them
2308 self.shell.init_auto_alias()
2308 self.shell.init_auto_alias()
2309 db = self.getapi().getdb()
2309 db = self.getapi().getdb()
2310 db['syscmdlist'] = syscmdlist
2310 db['syscmdlist'] = syscmdlist
2311 finally:
2311 finally:
2312 os.chdir(savedir)
2312 os.chdir(savedir)
2313
2313
2314 def magic_pwd(self, parameter_s = ''):
2314 def magic_pwd(self, parameter_s = ''):
2315 """Return the current working directory path."""
2315 """Return the current working directory path."""
2316 return os.getcwd()
2316 return os.getcwd()
2317
2317
2318 def magic_cd(self, parameter_s=''):
2318 def magic_cd(self, parameter_s=''):
2319 """Change the current working directory.
2319 """Change the current working directory.
2320
2320
2321 This command automatically maintains an internal list of directories
2321 This command automatically maintains an internal list of directories
2322 you visit during your IPython session, in the variable _dh. The
2322 you visit during your IPython session, in the variable _dh. The
2323 command %dhist shows this history nicely formatted.
2323 command %dhist shows this history nicely formatted.
2324
2324
2325 Usage:
2325 Usage:
2326
2326
2327 cd 'dir': changes to directory 'dir'.
2327 cd 'dir': changes to directory 'dir'.
2328
2328
2329 cd -: changes to the last visited directory.
2329 cd -: changes to the last visited directory.
2330
2330
2331 cd -<n>: changes to the n-th directory in the directory history.
2331 cd -<n>: changes to the n-th directory in the directory history.
2332
2332
2333 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2333 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2334 (note: cd <bookmark_name> is enough if there is no
2334 (note: cd <bookmark_name> is enough if there is no
2335 directory <bookmark_name>, but a bookmark with the name exists.)
2335 directory <bookmark_name>, but a bookmark with the name exists.)
2336
2336
2337 Options:
2337 Options:
2338
2338
2339 -q: quiet. Do not print the working directory after the cd command is
2339 -q: quiet. Do not print the working directory after the cd command is
2340 executed. By default IPython's cd command does print this directory,
2340 executed. By default IPython's cd command does print this directory,
2341 since the default prompts do not display path information.
2341 since the default prompts do not display path information.
2342
2342
2343 Note that !cd doesn't work for this purpose because the shell where
2343 Note that !cd doesn't work for this purpose because the shell where
2344 !command runs is immediately discarded after executing 'command'."""
2344 !command runs is immediately discarded after executing 'command'."""
2345
2345
2346 parameter_s = parameter_s.strip()
2346 parameter_s = parameter_s.strip()
2347 #bkms = self.shell.persist.get("bookmarks",{})
2347 #bkms = self.shell.persist.get("bookmarks",{})
2348
2348
2349 numcd = re.match(r'(-)(\d+)$',parameter_s)
2349 numcd = re.match(r'(-)(\d+)$',parameter_s)
2350 # jump in directory history by number
2350 # jump in directory history by number
2351 if numcd:
2351 if numcd:
2352 nn = int(numcd.group(2))
2352 nn = int(numcd.group(2))
2353 try:
2353 try:
2354 ps = self.shell.user_ns['_dh'][nn]
2354 ps = self.shell.user_ns['_dh'][nn]
2355 except IndexError:
2355 except IndexError:
2356 print 'The requested directory does not exist in history.'
2356 print 'The requested directory does not exist in history.'
2357 return
2357 return
2358 else:
2358 else:
2359 opts = {}
2359 opts = {}
2360 else:
2360 else:
2361 #turn all non-space-escaping backslashes to slashes,
2361 #turn all non-space-escaping backslashes to slashes,
2362 # for c:\windows\directory\names\
2362 # for c:\windows\directory\names\
2363 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2363 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2364 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2364 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2365 # jump to previous
2365 # jump to previous
2366 if ps == '-':
2366 if ps == '-':
2367 try:
2367 try:
2368 ps = self.shell.user_ns['_dh'][-2]
2368 ps = self.shell.user_ns['_dh'][-2]
2369 except IndexError:
2369 except IndexError:
2370 print 'No previous directory to change to.'
2370 print 'No previous directory to change to.'
2371 return
2371 return
2372 # jump to bookmark if needed
2372 # jump to bookmark if needed
2373 else:
2373 else:
2374 if not os.path.isdir(ps) or opts.has_key('b'):
2374 if not os.path.isdir(ps) or opts.has_key('b'):
2375 bkms = self.db.get('bookmarks', {})
2375 bkms = self.db.get('bookmarks', {})
2376
2376
2377 if bkms.has_key(ps):
2377 if bkms.has_key(ps):
2378 target = bkms[ps]
2378 target = bkms[ps]
2379 print '(bookmark:%s) -> %s' % (ps,target)
2379 print '(bookmark:%s) -> %s' % (ps,target)
2380 ps = target
2380 ps = target
2381 else:
2381 else:
2382 if opts.has_key('b'):
2382 if opts.has_key('b'):
2383 error("Bookmark '%s' not found. "
2383 error("Bookmark '%s' not found. "
2384 "Use '%%bookmark -l' to see your bookmarks." % ps)
2384 "Use '%%bookmark -l' to see your bookmarks." % ps)
2385 return
2385 return
2386
2386
2387 # at this point ps should point to the target dir
2387 # at this point ps should point to the target dir
2388 if ps:
2388 if ps:
2389 try:
2389 try:
2390 os.chdir(os.path.expanduser(ps))
2390 os.chdir(os.path.expanduser(ps))
2391 ttitle = ("IPy:" + (
2391 ttitle = ("IPy:" + (
2392 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2392 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2393 platutils.set_term_title(ttitle)
2393 platutils.set_term_title(ttitle)
2394 except OSError:
2394 except OSError:
2395 print sys.exc_info()[1]
2395 print sys.exc_info()[1]
2396 else:
2396 else:
2397 self.shell.user_ns['_dh'].append(os.getcwd())
2397 self.shell.user_ns['_dh'].append(os.getcwd())
2398 else:
2398 else:
2399 os.chdir(self.shell.home_dir)
2399 os.chdir(self.shell.home_dir)
2400 platutils.set_term_title("IPy:~")
2400 platutils.set_term_title("IPy:~")
2401 self.shell.user_ns['_dh'].append(os.getcwd())
2401 self.shell.user_ns['_dh'].append(os.getcwd())
2402 if not 'q' in opts:
2402 if not 'q' in opts:
2403 print self.shell.user_ns['_dh'][-1]
2403 print self.shell.user_ns['_dh'][-1]
2404
2404
2405 def magic_dhist(self, parameter_s=''):
2405 def magic_dhist(self, parameter_s=''):
2406 """Print your history of visited directories.
2406 """Print your history of visited directories.
2407
2407
2408 %dhist -> print full history\\
2408 %dhist -> print full history\\
2409 %dhist n -> print last n entries only\\
2409 %dhist n -> print last n entries only\\
2410 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2410 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2411
2411
2412 This history is automatically maintained by the %cd command, and
2412 This history is automatically maintained by the %cd command, and
2413 always available as the global list variable _dh. You can use %cd -<n>
2413 always available as the global list variable _dh. You can use %cd -<n>
2414 to go to directory number <n>."""
2414 to go to directory number <n>."""
2415
2415
2416 dh = self.shell.user_ns['_dh']
2416 dh = self.shell.user_ns['_dh']
2417 if parameter_s:
2417 if parameter_s:
2418 try:
2418 try:
2419 args = map(int,parameter_s.split())
2419 args = map(int,parameter_s.split())
2420 except:
2420 except:
2421 self.arg_err(Magic.magic_dhist)
2421 self.arg_err(Magic.magic_dhist)
2422 return
2422 return
2423 if len(args) == 1:
2423 if len(args) == 1:
2424 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2424 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2425 elif len(args) == 2:
2425 elif len(args) == 2:
2426 ini,fin = args
2426 ini,fin = args
2427 else:
2427 else:
2428 self.arg_err(Magic.magic_dhist)
2428 self.arg_err(Magic.magic_dhist)
2429 return
2429 return
2430 else:
2430 else:
2431 ini,fin = 0,len(dh)
2431 ini,fin = 0,len(dh)
2432 nlprint(dh,
2432 nlprint(dh,
2433 header = 'Directory history (kept in _dh)',
2433 header = 'Directory history (kept in _dh)',
2434 start=ini,stop=fin)
2434 start=ini,stop=fin)
2435
2435
2436 def magic_env(self, parameter_s=''):
2436 def magic_env(self, parameter_s=''):
2437 """List environment variables."""
2437 """List environment variables."""
2438
2438
2439 return os.environ.data
2439 return os.environ.data
2440
2440
2441 def magic_pushd(self, parameter_s=''):
2441 def magic_pushd(self, parameter_s=''):
2442 """Place the current dir on stack and change directory.
2442 """Place the current dir on stack and change directory.
2443
2443
2444 Usage:\\
2444 Usage:\\
2445 %pushd ['dirname']
2445 %pushd ['dirname']
2446
2446
2447 %pushd with no arguments does a %pushd to your home directory.
2447 %pushd with no arguments does a %pushd to your home directory.
2448 """
2448 """
2449 if parameter_s == '': parameter_s = '~'
2449 if parameter_s == '': parameter_s = '~'
2450 dir_s = self.shell.dir_stack
2450 dir_s = self.shell.dir_stack
2451 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2451 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2452 os.path.expanduser(self.shell.dir_stack[0]):
2452 os.path.expanduser(self.shell.dir_stack[0]):
2453 try:
2453 try:
2454 self.magic_cd(parameter_s)
2454 self.magic_cd(parameter_s)
2455 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2455 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2456 self.magic_dirs()
2456 self.magic_dirs()
2457 except:
2457 except:
2458 print 'Invalid directory'
2458 print 'Invalid directory'
2459 else:
2459 else:
2460 print 'You are already there!'
2460 print 'You are already there!'
2461
2461
2462 def magic_popd(self, parameter_s=''):
2462 def magic_popd(self, parameter_s=''):
2463 """Change to directory popped off the top of the stack.
2463 """Change to directory popped off the top of the stack.
2464 """
2464 """
2465 if len (self.shell.dir_stack) > 1:
2465 if len (self.shell.dir_stack) > 1:
2466 self.shell.dir_stack.pop(0)
2466 self.shell.dir_stack.pop(0)
2467 self.magic_cd(self.shell.dir_stack[0])
2467 self.magic_cd(self.shell.dir_stack[0])
2468 print self.shell.dir_stack[0]
2468 print self.shell.dir_stack[0]
2469 else:
2469 else:
2470 print "You can't remove the starting directory from the stack:",\
2470 print "You can't remove the starting directory from the stack:",\
2471 self.shell.dir_stack
2471 self.shell.dir_stack
2472
2472
2473 def magic_dirs(self, parameter_s=''):
2473 def magic_dirs(self, parameter_s=''):
2474 """Return the current directory stack."""
2474 """Return the current directory stack."""
2475
2475
2476 return self.shell.dir_stack[:]
2476 return self.shell.dir_stack[:]
2477
2477
2478 def magic_sc(self, parameter_s=''):
2478 def magic_sc(self, parameter_s=''):
2479 """Shell capture - execute a shell command and capture its output.
2479 """Shell capture - execute a shell command and capture its output.
2480
2480
2481 DEPRECATED. Suboptimal, retained for backwards compatibility.
2481 DEPRECATED. Suboptimal, retained for backwards compatibility.
2482
2482
2483 You should use the form 'var = !command' instead. Example:
2483 You should use the form 'var = !command' instead. Example:
2484
2484
2485 "%sc -l myfiles = ls ~" should now be written as
2485 "%sc -l myfiles = ls ~" should now be written as
2486
2486
2487 "myfiles = !ls ~"
2487 "myfiles = !ls ~"
2488
2488
2489 myfiles.s, myfiles.l and myfiles.n still apply as documented
2489 myfiles.s, myfiles.l and myfiles.n still apply as documented
2490 below.
2490 below.
2491
2491
2492 --
2492 --
2493 %sc [options] varname=command
2493 %sc [options] varname=command
2494
2494
2495 IPython will run the given command using commands.getoutput(), and
2495 IPython will run the given command using commands.getoutput(), and
2496 will then update the user's interactive namespace with a variable
2496 will then update the user's interactive namespace with a variable
2497 called varname, containing the value of the call. Your command can
2497 called varname, containing the value of the call. Your command can
2498 contain shell wildcards, pipes, etc.
2498 contain shell wildcards, pipes, etc.
2499
2499
2500 The '=' sign in the syntax is mandatory, and the variable name you
2500 The '=' sign in the syntax is mandatory, and the variable name you
2501 supply must follow Python's standard conventions for valid names.
2501 supply must follow Python's standard conventions for valid names.
2502
2502
2503 (A special format without variable name exists for internal use)
2503 (A special format without variable name exists for internal use)
2504
2504
2505 Options:
2505 Options:
2506
2506
2507 -l: list output. Split the output on newlines into a list before
2507 -l: list output. Split the output on newlines into a list before
2508 assigning it to the given variable. By default the output is stored
2508 assigning it to the given variable. By default the output is stored
2509 as a single string.
2509 as a single string.
2510
2510
2511 -v: verbose. Print the contents of the variable.
2511 -v: verbose. Print the contents of the variable.
2512
2512
2513 In most cases you should not need to split as a list, because the
2513 In most cases you should not need to split as a list, because the
2514 returned value is a special type of string which can automatically
2514 returned value is a special type of string which can automatically
2515 provide its contents either as a list (split on newlines) or as a
2515 provide its contents either as a list (split on newlines) or as a
2516 space-separated string. These are convenient, respectively, either
2516 space-separated string. These are convenient, respectively, either
2517 for sequential processing or to be passed to a shell command.
2517 for sequential processing or to be passed to a shell command.
2518
2518
2519 For example:
2519 For example:
2520
2520
2521 # Capture into variable a
2521 # Capture into variable a
2522 In [9]: sc a=ls *py
2522 In [9]: sc a=ls *py
2523
2523
2524 # a is a string with embedded newlines
2524 # a is a string with embedded newlines
2525 In [10]: a
2525 In [10]: a
2526 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2526 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2527
2527
2528 # which can be seen as a list:
2528 # which can be seen as a list:
2529 In [11]: a.l
2529 In [11]: a.l
2530 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2530 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2531
2531
2532 # or as a whitespace-separated string:
2532 # or as a whitespace-separated string:
2533 In [12]: a.s
2533 In [12]: a.s
2534 Out[12]: 'setup.py win32_manual_post_install.py'
2534 Out[12]: 'setup.py win32_manual_post_install.py'
2535
2535
2536 # a.s is useful to pass as a single command line:
2536 # a.s is useful to pass as a single command line:
2537 In [13]: !wc -l $a.s
2537 In [13]: !wc -l $a.s
2538 146 setup.py
2538 146 setup.py
2539 130 win32_manual_post_install.py
2539 130 win32_manual_post_install.py
2540 276 total
2540 276 total
2541
2541
2542 # while the list form is useful to loop over:
2542 # while the list form is useful to loop over:
2543 In [14]: for f in a.l:
2543 In [14]: for f in a.l:
2544 ....: !wc -l $f
2544 ....: !wc -l $f
2545 ....:
2545 ....:
2546 146 setup.py
2546 146 setup.py
2547 130 win32_manual_post_install.py
2547 130 win32_manual_post_install.py
2548
2548
2549 Similiarly, the lists returned by the -l option are also special, in
2549 Similiarly, the lists returned by the -l option are also special, in
2550 the sense that you can equally invoke the .s attribute on them to
2550 the sense that you can equally invoke the .s attribute on them to
2551 automatically get a whitespace-separated string from their contents:
2551 automatically get a whitespace-separated string from their contents:
2552
2552
2553 In [1]: sc -l b=ls *py
2553 In [1]: sc -l b=ls *py
2554
2554
2555 In [2]: b
2555 In [2]: b
2556 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2556 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2557
2557
2558 In [3]: b.s
2558 In [3]: b.s
2559 Out[3]: 'setup.py win32_manual_post_install.py'
2559 Out[3]: 'setup.py win32_manual_post_install.py'
2560
2560
2561 In summary, both the lists and strings used for ouptut capture have
2561 In summary, both the lists and strings used for ouptut capture have
2562 the following special attributes:
2562 the following special attributes:
2563
2563
2564 .l (or .list) : value as list.
2564 .l (or .list) : value as list.
2565 .n (or .nlstr): value as newline-separated string.
2565 .n (or .nlstr): value as newline-separated string.
2566 .s (or .spstr): value as space-separated string.
2566 .s (or .spstr): value as space-separated string.
2567 """
2567 """
2568
2568
2569 opts,args = self.parse_options(parameter_s,'lv')
2569 opts,args = self.parse_options(parameter_s,'lv')
2570 # Try to get a variable name and command to run
2570 # Try to get a variable name and command to run
2571 try:
2571 try:
2572 # the variable name must be obtained from the parse_options
2572 # the variable name must be obtained from the parse_options
2573 # output, which uses shlex.split to strip options out.
2573 # output, which uses shlex.split to strip options out.
2574 var,_ = args.split('=',1)
2574 var,_ = args.split('=',1)
2575 var = var.strip()
2575 var = var.strip()
2576 # But the the command has to be extracted from the original input
2576 # But the the command has to be extracted from the original input
2577 # parameter_s, not on what parse_options returns, to avoid the
2577 # parameter_s, not on what parse_options returns, to avoid the
2578 # quote stripping which shlex.split performs on it.
2578 # quote stripping which shlex.split performs on it.
2579 _,cmd = parameter_s.split('=',1)
2579 _,cmd = parameter_s.split('=',1)
2580 except ValueError:
2580 except ValueError:
2581 var,cmd = '',''
2581 var,cmd = '',''
2582 # If all looks ok, proceed
2582 # If all looks ok, proceed
2583 out,err = self.shell.getoutputerror(cmd)
2583 out,err = self.shell.getoutputerror(cmd)
2584 if err:
2584 if err:
2585 print >> Term.cerr,err
2585 print >> Term.cerr,err
2586 if opts.has_key('l'):
2586 if opts.has_key('l'):
2587 out = SList(out.split('\n'))
2587 out = SList(out.split('\n'))
2588 else:
2588 else:
2589 out = LSString(out)
2589 out = LSString(out)
2590 if opts.has_key('v'):
2590 if opts.has_key('v'):
2591 print '%s ==\n%s' % (var,pformat(out))
2591 print '%s ==\n%s' % (var,pformat(out))
2592 if var:
2592 if var:
2593 self.shell.user_ns.update({var:out})
2593 self.shell.user_ns.update({var:out})
2594 else:
2594 else:
2595 return out
2595 return out
2596
2596
2597 def magic_sx(self, parameter_s=''):
2597 def magic_sx(self, parameter_s=''):
2598 """Shell execute - run a shell command and capture its output.
2598 """Shell execute - run a shell command and capture its output.
2599
2599
2600 %sx command
2600 %sx command
2601
2601
2602 IPython will run the given command using commands.getoutput(), and
2602 IPython will run the given command using commands.getoutput(), and
2603 return the result formatted as a list (split on '\\n'). Since the
2603 return the result formatted as a list (split on '\\n'). Since the
2604 output is _returned_, it will be stored in ipython's regular output
2604 output is _returned_, it will be stored in ipython's regular output
2605 cache Out[N] and in the '_N' automatic variables.
2605 cache Out[N] and in the '_N' automatic variables.
2606
2606
2607 Notes:
2607 Notes:
2608
2608
2609 1) If an input line begins with '!!', then %sx is automatically
2609 1) If an input line begins with '!!', then %sx is automatically
2610 invoked. That is, while:
2610 invoked. That is, while:
2611 !ls
2611 !ls
2612 causes ipython to simply issue system('ls'), typing
2612 causes ipython to simply issue system('ls'), typing
2613 !!ls
2613 !!ls
2614 is a shorthand equivalent to:
2614 is a shorthand equivalent to:
2615 %sx ls
2615 %sx ls
2616
2616
2617 2) %sx differs from %sc in that %sx automatically splits into a list,
2617 2) %sx differs from %sc in that %sx automatically splits into a list,
2618 like '%sc -l'. The reason for this is to make it as easy as possible
2618 like '%sc -l'. The reason for this is to make it as easy as possible
2619 to process line-oriented shell output via further python commands.
2619 to process line-oriented shell output via further python commands.
2620 %sc is meant to provide much finer control, but requires more
2620 %sc is meant to provide much finer control, but requires more
2621 typing.
2621 typing.
2622
2622
2623 3) Just like %sc -l, this is a list with special attributes:
2623 3) Just like %sc -l, this is a list with special attributes:
2624
2624
2625 .l (or .list) : value as list.
2625 .l (or .list) : value as list.
2626 .n (or .nlstr): value as newline-separated string.
2626 .n (or .nlstr): value as newline-separated string.
2627 .s (or .spstr): value as whitespace-separated string.
2627 .s (or .spstr): value as whitespace-separated string.
2628
2628
2629 This is very useful when trying to use such lists as arguments to
2629 This is very useful when trying to use such lists as arguments to
2630 system commands."""
2630 system commands."""
2631
2631
2632 if parameter_s:
2632 if parameter_s:
2633 out,err = self.shell.getoutputerror(parameter_s)
2633 out,err = self.shell.getoutputerror(parameter_s)
2634 if err:
2634 if err:
2635 print >> Term.cerr,err
2635 print >> Term.cerr,err
2636 return SList(out.split('\n'))
2636 return SList(out.split('\n'))
2637
2637
2638 def magic_bg(self, parameter_s=''):
2638 def magic_bg(self, parameter_s=''):
2639 """Run a job in the background, in a separate thread.
2639 """Run a job in the background, in a separate thread.
2640
2640
2641 For example,
2641 For example,
2642
2642
2643 %bg myfunc(x,y,z=1)
2643 %bg myfunc(x,y,z=1)
2644
2644
2645 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2645 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2646 execution starts, a message will be printed indicating the job
2646 execution starts, a message will be printed indicating the job
2647 number. If your job number is 5, you can use
2647 number. If your job number is 5, you can use
2648
2648
2649 myvar = jobs.result(5) or myvar = jobs[5].result
2649 myvar = jobs.result(5) or myvar = jobs[5].result
2650
2650
2651 to assign this result to variable 'myvar'.
2651 to assign this result to variable 'myvar'.
2652
2652
2653 IPython has a job manager, accessible via the 'jobs' object. You can
2653 IPython has a job manager, accessible via the 'jobs' object. You can
2654 type jobs? to get more information about it, and use jobs.<TAB> to see
2654 type jobs? to get more information about it, and use jobs.<TAB> to see
2655 its attributes. All attributes not starting with an underscore are
2655 its attributes. All attributes not starting with an underscore are
2656 meant for public use.
2656 meant for public use.
2657
2657
2658 In particular, look at the jobs.new() method, which is used to create
2658 In particular, look at the jobs.new() method, which is used to create
2659 new jobs. This magic %bg function is just a convenience wrapper
2659 new jobs. This magic %bg function is just a convenience wrapper
2660 around jobs.new(), for expression-based jobs. If you want to create a
2660 around jobs.new(), for expression-based jobs. If you want to create a
2661 new job with an explicit function object and arguments, you must call
2661 new job with an explicit function object and arguments, you must call
2662 jobs.new() directly.
2662 jobs.new() directly.
2663
2663
2664 The jobs.new docstring also describes in detail several important
2664 The jobs.new docstring also describes in detail several important
2665 caveats associated with a thread-based model for background job
2665 caveats associated with a thread-based model for background job
2666 execution. Type jobs.new? for details.
2666 execution. Type jobs.new? for details.
2667
2667
2668 You can check the status of all jobs with jobs.status().
2668 You can check the status of all jobs with jobs.status().
2669
2669
2670 The jobs variable is set by IPython into the Python builtin namespace.
2670 The jobs variable is set by IPython into the Python builtin namespace.
2671 If you ever declare a variable named 'jobs', you will shadow this
2671 If you ever declare a variable named 'jobs', you will shadow this
2672 name. You can either delete your global jobs variable to regain
2672 name. You can either delete your global jobs variable to regain
2673 access to the job manager, or make a new name and assign it manually
2673 access to the job manager, or make a new name and assign it manually
2674 to the manager (stored in IPython's namespace). For example, to
2674 to the manager (stored in IPython's namespace). For example, to
2675 assign the job manager to the Jobs name, use:
2675 assign the job manager to the Jobs name, use:
2676
2676
2677 Jobs = __builtins__.jobs"""
2677 Jobs = __builtins__.jobs"""
2678
2678
2679 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2679 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2680
2680
2681
2681
2682 def magic_bookmark(self, parameter_s=''):
2682 def magic_bookmark(self, parameter_s=''):
2683 """Manage IPython's bookmark system.
2683 """Manage IPython's bookmark system.
2684
2684
2685 %bookmark <name> - set bookmark to current dir
2685 %bookmark <name> - set bookmark to current dir
2686 %bookmark <name> <dir> - set bookmark to <dir>
2686 %bookmark <name> <dir> - set bookmark to <dir>
2687 %bookmark -l - list all bookmarks
2687 %bookmark -l - list all bookmarks
2688 %bookmark -d <name> - remove bookmark
2688 %bookmark -d <name> - remove bookmark
2689 %bookmark -r - remove all bookmarks
2689 %bookmark -r - remove all bookmarks
2690
2690
2691 You can later on access a bookmarked folder with:
2691 You can later on access a bookmarked folder with:
2692 %cd -b <name>
2692 %cd -b <name>
2693 or simply '%cd <name>' if there is no directory called <name> AND
2693 or simply '%cd <name>' if there is no directory called <name> AND
2694 there is such a bookmark defined.
2694 there is such a bookmark defined.
2695
2695
2696 Your bookmarks persist through IPython sessions, but they are
2696 Your bookmarks persist through IPython sessions, but they are
2697 associated with each profile."""
2697 associated with each profile."""
2698
2698
2699 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2699 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2700 if len(args) > 2:
2700 if len(args) > 2:
2701 error('You can only give at most two arguments')
2701 error('You can only give at most two arguments')
2702 return
2702 return
2703
2703
2704 bkms = self.db.get('bookmarks',{})
2704 bkms = self.db.get('bookmarks',{})
2705
2705
2706 if opts.has_key('d'):
2706 if opts.has_key('d'):
2707 try:
2707 try:
2708 todel = args[0]
2708 todel = args[0]
2709 except IndexError:
2709 except IndexError:
2710 error('You must provide a bookmark to delete')
2710 error('You must provide a bookmark to delete')
2711 else:
2711 else:
2712 try:
2712 try:
2713 del bkms[todel]
2713 del bkms[todel]
2714 except:
2714 except:
2715 error("Can't delete bookmark '%s'" % todel)
2715 error("Can't delete bookmark '%s'" % todel)
2716 elif opts.has_key('r'):
2716 elif opts.has_key('r'):
2717 bkms = {}
2717 bkms = {}
2718 elif opts.has_key('l'):
2718 elif opts.has_key('l'):
2719 bks = bkms.keys()
2719 bks = bkms.keys()
2720 bks.sort()
2720 bks.sort()
2721 if bks:
2721 if bks:
2722 size = max(map(len,bks))
2722 size = max(map(len,bks))
2723 else:
2723 else:
2724 size = 0
2724 size = 0
2725 fmt = '%-'+str(size)+'s -> %s'
2725 fmt = '%-'+str(size)+'s -> %s'
2726 print 'Current bookmarks:'
2726 print 'Current bookmarks:'
2727 for bk in bks:
2727 for bk in bks:
2728 print fmt % (bk,bkms[bk])
2728 print fmt % (bk,bkms[bk])
2729 else:
2729 else:
2730 if not args:
2730 if not args:
2731 error("You must specify the bookmark name")
2731 error("You must specify the bookmark name")
2732 elif len(args)==1:
2732 elif len(args)==1:
2733 bkms[args[0]] = os.getcwd()
2733 bkms[args[0]] = os.getcwd()
2734 elif len(args)==2:
2734 elif len(args)==2:
2735 bkms[args[0]] = args[1]
2735 bkms[args[0]] = args[1]
2736 self.db['bookmarks'] = bkms
2736 self.db['bookmarks'] = bkms
2737
2737
2738 def magic_pycat(self, parameter_s=''):
2738 def magic_pycat(self, parameter_s=''):
2739 """Show a syntax-highlighted file through a pager.
2739 """Show a syntax-highlighted file through a pager.
2740
2740
2741 This magic is similar to the cat utility, but it will assume the file
2741 This magic is similar to the cat utility, but it will assume the file
2742 to be Python source and will show it with syntax highlighting. """
2742 to be Python source and will show it with syntax highlighting. """
2743
2743
2744 try:
2744 try:
2745 filename = get_py_filename(parameter_s)
2745 filename = get_py_filename(parameter_s)
2746 cont = file_read(filename)
2746 cont = file_read(filename)
2747 except IOError:
2747 except IOError:
2748 try:
2748 try:
2749 cont = eval(parameter_s,self.user_ns)
2749 cont = eval(parameter_s,self.user_ns)
2750 except NameError:
2750 except NameError:
2751 cont = None
2751 cont = None
2752 if cont is None:
2752 if cont is None:
2753 print "Error: no such file or variable"
2753 print "Error: no such file or variable"
2754 return
2754 return
2755
2755
2756 page(self.shell.pycolorize(cont),
2756 page(self.shell.pycolorize(cont),
2757 screen_lines=self.shell.rc.screen_length)
2757 screen_lines=self.shell.rc.screen_length)
2758
2758
2759 def magic_cpaste(self, parameter_s=''):
2759 def magic_cpaste(self, parameter_s=''):
2760 """Allows you to paste & execute a pre-formatted code block from
2760 """Allows you to paste & execute a pre-formatted code block from
2761 clipboard.
2761 clipboard.
2762
2762
2763 You must terminate the block with '--' (two minus-signs) alone on the
2763 You must terminate the block with '--' (two minus-signs) alone on the
2764 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2764 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2765 is the new sentinel for this operation)
2765 is the new sentinel for this operation)
2766
2766
2767 The block is dedented prior to execution to enable execution of
2767 The block is dedented prior to execution to enable execution of
2768 method definitions. The executed block is also assigned to variable
2768 method definitions. The executed block is also assigned to variable
2769 named 'pasted_block' for later editing with '%edit pasted_block'.
2769 named 'pasted_block' for later editing with '%edit pasted_block'.
2770
2770
2771 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2771 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2772 This assigns the pasted block to variable 'foo' as string, without
2772 This assigns the pasted block to variable 'foo' as string, without
2773 dedenting or executing it.
2773 dedenting or executing it.
2774
2774
2775 Do not be alarmed by garbled output on Windows (it's a readline bug).
2775 Do not be alarmed by garbled output on Windows (it's a readline bug).
2776 Just press enter and type -- (and press enter again) and the block
2776 Just press enter and type -- (and press enter again) and the block
2777 will be what was just pasted.
2777 will be what was just pasted.
2778
2778
2779 IPython statements (magics, shell escapes) are not supported (yet).
2779 IPython statements (magics, shell escapes) are not supported (yet).
2780 """
2780 """
2781 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2781 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2782 par = args.strip()
2782 par = args.strip()
2783 sentinel = opts.get('s','--')
2783 sentinel = opts.get('s','--')
2784
2784
2785 from IPython import iplib
2785 from IPython import iplib
2786 lines = []
2786 lines = []
2787 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2787 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2788 while 1:
2788 while 1:
2789 l = iplib.raw_input_original(':')
2789 l = iplib.raw_input_original(':')
2790 if l ==sentinel:
2790 if l ==sentinel:
2791 break
2791 break
2792 lines.append(l)
2792 lines.append(l)
2793 block = "\n".join(lines) + '\n'
2793 block = "\n".join(lines) + '\n'
2794 #print "block:\n",block
2794 #print "block:\n",block
2795 if not par:
2795 if not par:
2796 b = textwrap.dedent(block)
2796 b = textwrap.dedent(block)
2797 exec b in self.user_ns
2797 exec b in self.user_ns
2798 self.user_ns['pasted_block'] = b
2798 self.user_ns['pasted_block'] = b
2799 else:
2799 else:
2800 self.user_ns[par] = block
2800 self.user_ns[par] = block
2801 print "Block assigned to '%s'" % par
2801 print "Block assigned to '%s'" % par
2802 def magic_quickref(self,arg):
2802 def magic_quickref(self,arg):
2803 import IPython.usage
2803 import IPython.usage
2804 page(IPython.usage.quick_reference)
2804 page(IPython.usage.quick_reference)
2805
2805
2806
2806
2807
2807
2808 # end Magic
2808 # end Magic
@@ -1,5221 +1,5225 b''
1 2006-02-21 Ville Vainio <vivainio@gmail.com>
2
3 * Magic.py: %save works again.
4
1 2006-02-15 Ville Vainio <vivainio@gmail.com>
5 2006-02-15 Ville Vainio <vivainio@gmail.com>
2
6
3 * Magic.py: %Pprint works again
7 * Magic.py: %Pprint works again
4
8
5 * Extensions/ipy_sane_defaults.py: Provide everything provided
9 * Extensions/ipy_sane_defaults.py: Provide everything provided
6 in default ipythonrc, to make it possible to have a completely empty
10 in default ipythonrc, to make it possible to have a completely empty
7 ipythonrc (and thus completely rc-file free configuration)
11 ipythonrc (and thus completely rc-file free configuration)
8
12
9
13
10 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
14 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
11
15
12 * IPython/hooks.py (editor): quote the call to the editor command,
16 * IPython/hooks.py (editor): quote the call to the editor command,
13 to allow commands with spaces in them. Problem noted by watching
17 to allow commands with spaces in them. Problem noted by watching
14 Ian Oswald's video about textpad under win32 at
18 Ian Oswald's video about textpad under win32 at
15 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
19 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
16
20
17 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
21 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
18 describing magics (we haven't used @ for a loong time).
22 describing magics (we haven't used @ for a loong time).
19
23
20 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
24 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
21 contributed by marienz to close
25 contributed by marienz to close
22 http://www.scipy.net/roundup/ipython/issue53.
26 http://www.scipy.net/roundup/ipython/issue53.
23
27
24 2006-02-10 Ville Vainio <vivainio@gmail.com>
28 2006-02-10 Ville Vainio <vivainio@gmail.com>
25
29
26 * genutils.py: getoutput now works in win32 too
30 * genutils.py: getoutput now works in win32 too
27
31
28 * completer.py: alias and magic completion only invoked
32 * completer.py: alias and magic completion only invoked
29 at the first "item" in the line, to avoid "cd %store"
33 at the first "item" in the line, to avoid "cd %store"
30 nonsense.
34 nonsense.
31
35
32 2006-02-09 Ville Vainio <vivainio@gmail.com>
36 2006-02-09 Ville Vainio <vivainio@gmail.com>
33
37
34 * test/*: Added a unit testing framework (finally).
38 * test/*: Added a unit testing framework (finally).
35 '%run runtests.py' to run test_*.
39 '%run runtests.py' to run test_*.
36
40
37 * ipapi.py: Exposed runlines and set_custom_exc
41 * ipapi.py: Exposed runlines and set_custom_exc
38
42
39 2006-02-07 Ville Vainio <vivainio@gmail.com>
43 2006-02-07 Ville Vainio <vivainio@gmail.com>
40
44
41 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
45 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
42 instead use "f(1 2)" as before.
46 instead use "f(1 2)" as before.
43
47
44 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
48 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
45
49
46 * IPython/demo.py (IPythonDemo): Add new classes to the demo
50 * IPython/demo.py (IPythonDemo): Add new classes to the demo
47 facilities, for demos processed by the IPython input filter
51 facilities, for demos processed by the IPython input filter
48 (IPythonDemo), and for running a script one-line-at-a-time as a
52 (IPythonDemo), and for running a script one-line-at-a-time as a
49 demo, both for pure Python (LineDemo) and for IPython-processed
53 demo, both for pure Python (LineDemo) and for IPython-processed
50 input (IPythonLineDemo). After a request by Dave Kohel, from the
54 input (IPythonLineDemo). After a request by Dave Kohel, from the
51 SAGE team.
55 SAGE team.
52 (Demo.edit): added and edit() method to the demo objects, to edit
56 (Demo.edit): added and edit() method to the demo objects, to edit
53 the in-memory copy of the last executed block.
57 the in-memory copy of the last executed block.
54
58
55 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
59 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
56 processing to %edit, %macro and %save. These commands can now be
60 processing to %edit, %macro and %save. These commands can now be
57 invoked on the unprocessed input as it was typed by the user
61 invoked on the unprocessed input as it was typed by the user
58 (without any prefilters applied). After requests by the SAGE team
62 (without any prefilters applied). After requests by the SAGE team
59 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
63 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
60
64
61 2006-02-01 Ville Vainio <vivainio@gmail.com>
65 2006-02-01 Ville Vainio <vivainio@gmail.com>
62
66
63 * setup.py, eggsetup.py: easy_install ipython==dev works
67 * setup.py, eggsetup.py: easy_install ipython==dev works
64 correctly now (on Linux)
68 correctly now (on Linux)
65
69
66 * ipy_user_conf,ipmaker: user config changes, removed spurious
70 * ipy_user_conf,ipmaker: user config changes, removed spurious
67 warnings
71 warnings
68
72
69 * iplib: if rc.banner is string, use it as is.
73 * iplib: if rc.banner is string, use it as is.
70
74
71 * Magic: %pycat accepts a string argument and pages it's contents.
75 * Magic: %pycat accepts a string argument and pages it's contents.
72
76
73
77
74 2006-01-30 Ville Vainio <vivainio@gmail.com>
78 2006-01-30 Ville Vainio <vivainio@gmail.com>
75
79
76 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
80 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
77 Now %store and bookmarks work through PickleShare, meaning that
81 Now %store and bookmarks work through PickleShare, meaning that
78 concurrent access is possible and all ipython sessions see the
82 concurrent access is possible and all ipython sessions see the
79 same database situation all the time, instead of snapshot of
83 same database situation all the time, instead of snapshot of
80 the situation when the session was started. Hence, %bookmark
84 the situation when the session was started. Hence, %bookmark
81 results are immediately accessible from othes sessions. The database
85 results are immediately accessible from othes sessions. The database
82 is also available for use by user extensions. See:
86 is also available for use by user extensions. See:
83 http://www.python.org/pypi/pickleshare
87 http://www.python.org/pypi/pickleshare
84
88
85 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
89 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
86
90
87 * aliases can now be %store'd
91 * aliases can now be %store'd
88
92
89 * path.py move to Extensions so that pickleshare does not need
93 * path.py move to Extensions so that pickleshare does not need
90 IPython-specific import. Extensions added to pythonpath right
94 IPython-specific import. Extensions added to pythonpath right
91 at __init__.
95 at __init__.
92
96
93 * iplib.py: ipalias deprecated/redundant; aliases are converted and
97 * iplib.py: ipalias deprecated/redundant; aliases are converted and
94 called with _ip.system and the pre-transformed command string.
98 called with _ip.system and the pre-transformed command string.
95
99
96 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
100 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
97
101
98 * IPython/iplib.py (interact): Fix that we were not catching
102 * IPython/iplib.py (interact): Fix that we were not catching
99 KeyboardInterrupt exceptions properly. I'm not quite sure why the
103 KeyboardInterrupt exceptions properly. I'm not quite sure why the
100 logic here had to change, but it's fixed now.
104 logic here had to change, but it's fixed now.
101
105
102 2006-01-29 Ville Vainio <vivainio@gmail.com>
106 2006-01-29 Ville Vainio <vivainio@gmail.com>
103
107
104 * iplib.py: Try to import pyreadline on Windows.
108 * iplib.py: Try to import pyreadline on Windows.
105
109
106 2006-01-27 Ville Vainio <vivainio@gmail.com>
110 2006-01-27 Ville Vainio <vivainio@gmail.com>
107
111
108 * iplib.py: Expose ipapi as _ip in builtin namespace.
112 * iplib.py: Expose ipapi as _ip in builtin namespace.
109 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
113 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
110 and ip_set_hook (-> _ip.set_hook) redundant. % and !
114 and ip_set_hook (-> _ip.set_hook) redundant. % and !
111 syntax now produce _ip.* variant of the commands.
115 syntax now produce _ip.* variant of the commands.
112
116
113 * "_ip.options().autoedit_syntax = 2" automatically throws
117 * "_ip.options().autoedit_syntax = 2" automatically throws
114 user to editor for syntax error correction without prompting.
118 user to editor for syntax error correction without prompting.
115
119
116 2006-01-27 Ville Vainio <vivainio@gmail.com>
120 2006-01-27 Ville Vainio <vivainio@gmail.com>
117
121
118 * ipmaker.py: Give "realistic" sys.argv for scripts (without
122 * ipmaker.py: Give "realistic" sys.argv for scripts (without
119 'ipython' at argv[0]) executed through command line.
123 'ipython' at argv[0]) executed through command line.
120 NOTE: this DEPRECATES calling ipython with multiple scripts
124 NOTE: this DEPRECATES calling ipython with multiple scripts
121 ("ipython a.py b.py c.py")
125 ("ipython a.py b.py c.py")
122
126
123 * iplib.py, hooks.py: Added configurable input prefilter,
127 * iplib.py, hooks.py: Added configurable input prefilter,
124 named 'input_prefilter'. See ext_rescapture.py for example
128 named 'input_prefilter'. See ext_rescapture.py for example
125 usage.
129 usage.
126
130
127 * ext_rescapture.py, Magic.py: Better system command output capture
131 * ext_rescapture.py, Magic.py: Better system command output capture
128 through 'var = !ls' (deprecates user-visible %sc). Same notation
132 through 'var = !ls' (deprecates user-visible %sc). Same notation
129 applies for magics, 'var = %alias' assigns alias list to var.
133 applies for magics, 'var = %alias' assigns alias list to var.
130
134
131 * ipapi.py: added meta() for accessing extension-usable data store.
135 * ipapi.py: added meta() for accessing extension-usable data store.
132
136
133 * iplib.py: added InteractiveShell.getapi(). New magics should be
137 * iplib.py: added InteractiveShell.getapi(). New magics should be
134 written doing self.getapi() instead of using the shell directly.
138 written doing self.getapi() instead of using the shell directly.
135
139
136 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
140 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
137 %store foo >> ~/myfoo.txt to store variables to files (in clean
141 %store foo >> ~/myfoo.txt to store variables to files (in clean
138 textual form, not a restorable pickle).
142 textual form, not a restorable pickle).
139
143
140 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
144 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
141
145
142 * usage.py, Magic.py: added %quickref
146 * usage.py, Magic.py: added %quickref
143
147
144 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
148 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
145
149
146 * GetoptErrors when invoking magics etc. with wrong args
150 * GetoptErrors when invoking magics etc. with wrong args
147 are now more helpful:
151 are now more helpful:
148 GetoptError: option -l not recognized (allowed: "qb" )
152 GetoptError: option -l not recognized (allowed: "qb" )
149
153
150 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
154 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
151
155
152 * IPython/demo.py (Demo.show): Flush stdout after each block, so
156 * IPython/demo.py (Demo.show): Flush stdout after each block, so
153 computationally intensive blocks don't appear to stall the demo.
157 computationally intensive blocks don't appear to stall the demo.
154
158
155 2006-01-24 Ville Vainio <vivainio@gmail.com>
159 2006-01-24 Ville Vainio <vivainio@gmail.com>
156
160
157 * iplib.py, hooks.py: 'result_display' hook can return a non-None
161 * iplib.py, hooks.py: 'result_display' hook can return a non-None
158 value to manipulate resulting history entry.
162 value to manipulate resulting history entry.
159
163
160 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
164 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
161 to instance methods of IPApi class, to make extending an embedded
165 to instance methods of IPApi class, to make extending an embedded
162 IPython feasible. See ext_rehashdir.py for example usage.
166 IPython feasible. See ext_rehashdir.py for example usage.
163
167
164 * Merged 1071-1076 from banches/0.7.1
168 * Merged 1071-1076 from banches/0.7.1
165
169
166
170
167 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
171 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
168
172
169 * tools/release (daystamp): Fix build tools to use the new
173 * tools/release (daystamp): Fix build tools to use the new
170 eggsetup.py script to build lightweight eggs.
174 eggsetup.py script to build lightweight eggs.
171
175
172 * Applied changesets 1062 and 1064 before 0.7.1 release.
176 * Applied changesets 1062 and 1064 before 0.7.1 release.
173
177
174 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
178 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
175 see the raw input history (without conversions like %ls ->
179 see the raw input history (without conversions like %ls ->
176 ipmagic("ls")). After a request from W. Stein, SAGE
180 ipmagic("ls")). After a request from W. Stein, SAGE
177 (http://modular.ucsd.edu/sage) developer. This information is
181 (http://modular.ucsd.edu/sage) developer. This information is
178 stored in the input_hist_raw attribute of the IPython instance, so
182 stored in the input_hist_raw attribute of the IPython instance, so
179 developers can access it if needed (it's an InputList instance).
183 developers can access it if needed (it's an InputList instance).
180
184
181 * Versionstring = 0.7.2.svn
185 * Versionstring = 0.7.2.svn
182
186
183 * eggsetup.py: A separate script for constructing eggs, creates
187 * eggsetup.py: A separate script for constructing eggs, creates
184 proper launch scripts even on Windows (an .exe file in
188 proper launch scripts even on Windows (an .exe file in
185 \python24\scripts).
189 \python24\scripts).
186
190
187 * ipapi.py: launch_new_instance, launch entry point needed for the
191 * ipapi.py: launch_new_instance, launch entry point needed for the
188 egg.
192 egg.
189
193
190 2006-01-23 Ville Vainio <vivainio@gmail.com>
194 2006-01-23 Ville Vainio <vivainio@gmail.com>
191
195
192 * Added %cpaste magic for pasting python code
196 * Added %cpaste magic for pasting python code
193
197
194 2006-01-22 Ville Vainio <vivainio@gmail.com>
198 2006-01-22 Ville Vainio <vivainio@gmail.com>
195
199
196 * Merge from branches/0.7.1 into trunk, revs 1052-1057
200 * Merge from branches/0.7.1 into trunk, revs 1052-1057
197
201
198 * Versionstring = 0.7.2.svn
202 * Versionstring = 0.7.2.svn
199
203
200 * eggsetup.py: A separate script for constructing eggs, creates
204 * eggsetup.py: A separate script for constructing eggs, creates
201 proper launch scripts even on Windows (an .exe file in
205 proper launch scripts even on Windows (an .exe file in
202 \python24\scripts).
206 \python24\scripts).
203
207
204 * ipapi.py: launch_new_instance, launch entry point needed for the
208 * ipapi.py: launch_new_instance, launch entry point needed for the
205 egg.
209 egg.
206
210
207 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
211 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
208
212
209 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
213 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
210 %pfile foo would print the file for foo even if it was a binary.
214 %pfile foo would print the file for foo even if it was a binary.
211 Now, extensions '.so' and '.dll' are skipped.
215 Now, extensions '.so' and '.dll' are skipped.
212
216
213 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
217 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
214 bug, where macros would fail in all threaded modes. I'm not 100%
218 bug, where macros would fail in all threaded modes. I'm not 100%
215 sure, so I'm going to put out an rc instead of making a release
219 sure, so I'm going to put out an rc instead of making a release
216 today, and wait for feedback for at least a few days.
220 today, and wait for feedback for at least a few days.
217
221
218 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
222 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
219 it...) the handling of pasting external code with autoindent on.
223 it...) the handling of pasting external code with autoindent on.
220 To get out of a multiline input, the rule will appear for most
224 To get out of a multiline input, the rule will appear for most
221 users unchanged: two blank lines or change the indent level
225 users unchanged: two blank lines or change the indent level
222 proposed by IPython. But there is a twist now: you can
226 proposed by IPython. But there is a twist now: you can
223 add/subtract only *one or two spaces*. If you add/subtract three
227 add/subtract only *one or two spaces*. If you add/subtract three
224 or more (unless you completely delete the line), IPython will
228 or more (unless you completely delete the line), IPython will
225 accept that line, and you'll need to enter a second one of pure
229 accept that line, and you'll need to enter a second one of pure
226 whitespace. I know it sounds complicated, but I can't find a
230 whitespace. I know it sounds complicated, but I can't find a
227 different solution that covers all the cases, with the right
231 different solution that covers all the cases, with the right
228 heuristics. Hopefully in actual use, nobody will really notice
232 heuristics. Hopefully in actual use, nobody will really notice
229 all these strange rules and things will 'just work'.
233 all these strange rules and things will 'just work'.
230
234
231 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
235 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
232
236
233 * IPython/iplib.py (interact): catch exceptions which can be
237 * IPython/iplib.py (interact): catch exceptions which can be
234 triggered asynchronously by signal handlers. Thanks to an
238 triggered asynchronously by signal handlers. Thanks to an
235 automatic crash report, submitted by Colin Kingsley
239 automatic crash report, submitted by Colin Kingsley
236 <tercel-AT-gentoo.org>.
240 <tercel-AT-gentoo.org>.
237
241
238 2006-01-20 Ville Vainio <vivainio@gmail.com>
242 2006-01-20 Ville Vainio <vivainio@gmail.com>
239
243
240 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
244 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
241 (%rehashdir, very useful, try it out) of how to extend ipython
245 (%rehashdir, very useful, try it out) of how to extend ipython
242 with new magics. Also added Extensions dir to pythonpath to make
246 with new magics. Also added Extensions dir to pythonpath to make
243 importing extensions easy.
247 importing extensions easy.
244
248
245 * %store now complains when trying to store interactively declared
249 * %store now complains when trying to store interactively declared
246 classes / instances of those classes.
250 classes / instances of those classes.
247
251
248 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
252 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
249 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
253 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
250 if they exist, and ipy_user_conf.py with some defaults is created for
254 if they exist, and ipy_user_conf.py with some defaults is created for
251 the user.
255 the user.
252
256
253 * Startup rehashing done by the config file, not InterpreterExec.
257 * Startup rehashing done by the config file, not InterpreterExec.
254 This means system commands are available even without selecting the
258 This means system commands are available even without selecting the
255 pysh profile. It's the sensible default after all.
259 pysh profile. It's the sensible default after all.
256
260
257 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
261 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
258
262
259 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
263 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
260 multiline code with autoindent on working. But I am really not
264 multiline code with autoindent on working. But I am really not
261 sure, so this needs more testing. Will commit a debug-enabled
265 sure, so this needs more testing. Will commit a debug-enabled
262 version for now, while I test it some more, so that Ville and
266 version for now, while I test it some more, so that Ville and
263 others may also catch any problems. Also made
267 others may also catch any problems. Also made
264 self.indent_current_str() a method, to ensure that there's no
268 self.indent_current_str() a method, to ensure that there's no
265 chance of the indent space count and the corresponding string
269 chance of the indent space count and the corresponding string
266 falling out of sync. All code needing the string should just call
270 falling out of sync. All code needing the string should just call
267 the method.
271 the method.
268
272
269 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
273 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
270
274
271 * IPython/Magic.py (magic_edit): fix check for when users don't
275 * IPython/Magic.py (magic_edit): fix check for when users don't
272 save their output files, the try/except was in the wrong section.
276 save their output files, the try/except was in the wrong section.
273
277
274 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
278 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
275
279
276 * IPython/Magic.py (magic_run): fix __file__ global missing from
280 * IPython/Magic.py (magic_run): fix __file__ global missing from
277 script's namespace when executed via %run. After a report by
281 script's namespace when executed via %run. After a report by
278 Vivian.
282 Vivian.
279
283
280 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
284 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
281 when using python 2.4. The parent constructor changed in 2.4, and
285 when using python 2.4. The parent constructor changed in 2.4, and
282 we need to track it directly (we can't call it, as it messes up
286 we need to track it directly (we can't call it, as it messes up
283 readline and tab-completion inside our pdb would stop working).
287 readline and tab-completion inside our pdb would stop working).
284 After a bug report by R. Bernstein <rocky-AT-panix.com>.
288 After a bug report by R. Bernstein <rocky-AT-panix.com>.
285
289
286 2006-01-16 Ville Vainio <vivainio@gmail.com>
290 2006-01-16 Ville Vainio <vivainio@gmail.com>
287
291
288 * Ipython/magic.py:Reverted back to old %edit functionality
292 * Ipython/magic.py:Reverted back to old %edit functionality
289 that returns file contents on exit.
293 that returns file contents on exit.
290
294
291 * IPython/path.py: Added Jason Orendorff's "path" module to
295 * IPython/path.py: Added Jason Orendorff's "path" module to
292 IPython tree, http://www.jorendorff.com/articles/python/path/.
296 IPython tree, http://www.jorendorff.com/articles/python/path/.
293 You can get path objects conveniently through %sc, and !!, e.g.:
297 You can get path objects conveniently through %sc, and !!, e.g.:
294 sc files=ls
298 sc files=ls
295 for p in files.paths: # or files.p
299 for p in files.paths: # or files.p
296 print p,p.mtime
300 print p,p.mtime
297
301
298 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
302 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
299 now work again without considering the exclusion regexp -
303 now work again without considering the exclusion regexp -
300 hence, things like ',foo my/path' turn to 'foo("my/path")'
304 hence, things like ',foo my/path' turn to 'foo("my/path")'
301 instead of syntax error.
305 instead of syntax error.
302
306
303
307
304 2006-01-14 Ville Vainio <vivainio@gmail.com>
308 2006-01-14 Ville Vainio <vivainio@gmail.com>
305
309
306 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
310 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
307 ipapi decorators for python 2.4 users, options() provides access to rc
311 ipapi decorators for python 2.4 users, options() provides access to rc
308 data.
312 data.
309
313
310 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
314 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
311 as path separators (even on Linux ;-). Space character after
315 as path separators (even on Linux ;-). Space character after
312 backslash (as yielded by tab completer) is still space;
316 backslash (as yielded by tab completer) is still space;
313 "%cd long\ name" works as expected.
317 "%cd long\ name" works as expected.
314
318
315 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
319 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
316 as "chain of command", with priority. API stays the same,
320 as "chain of command", with priority. API stays the same,
317 TryNext exception raised by a hook function signals that
321 TryNext exception raised by a hook function signals that
318 current hook failed and next hook should try handling it, as
322 current hook failed and next hook should try handling it, as
319 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
323 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
320 requested configurable display hook, which is now implemented.
324 requested configurable display hook, which is now implemented.
321
325
322 2006-01-13 Ville Vainio <vivainio@gmail.com>
326 2006-01-13 Ville Vainio <vivainio@gmail.com>
323
327
324 * IPython/platutils*.py: platform specific utility functions,
328 * IPython/platutils*.py: platform specific utility functions,
325 so far only set_term_title is implemented (change terminal
329 so far only set_term_title is implemented (change terminal
326 label in windowing systems). %cd now changes the title to
330 label in windowing systems). %cd now changes the title to
327 current dir.
331 current dir.
328
332
329 * IPython/Release.py: Added myself to "authors" list,
333 * IPython/Release.py: Added myself to "authors" list,
330 had to create new files.
334 had to create new files.
331
335
332 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
336 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
333 shell escape; not a known bug but had potential to be one in the
337 shell escape; not a known bug but had potential to be one in the
334 future.
338 future.
335
339
336 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
340 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
337 extension API for IPython! See the module for usage example. Fix
341 extension API for IPython! See the module for usage example. Fix
338 OInspect for docstring-less magic functions.
342 OInspect for docstring-less magic functions.
339
343
340
344
341 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
345 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
342
346
343 * IPython/iplib.py (raw_input): temporarily deactivate all
347 * IPython/iplib.py (raw_input): temporarily deactivate all
344 attempts at allowing pasting of code with autoindent on. It
348 attempts at allowing pasting of code with autoindent on. It
345 introduced bugs (reported by Prabhu) and I can't seem to find a
349 introduced bugs (reported by Prabhu) and I can't seem to find a
346 robust combination which works in all cases. Will have to revisit
350 robust combination which works in all cases. Will have to revisit
347 later.
351 later.
348
352
349 * IPython/genutils.py: remove isspace() function. We've dropped
353 * IPython/genutils.py: remove isspace() function. We've dropped
350 2.2 compatibility, so it's OK to use the string method.
354 2.2 compatibility, so it's OK to use the string method.
351
355
352 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
356 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
353
357
354 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
358 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
355 matching what NOT to autocall on, to include all python binary
359 matching what NOT to autocall on, to include all python binary
356 operators (including things like 'and', 'or', 'is' and 'in').
360 operators (including things like 'and', 'or', 'is' and 'in').
357 Prompted by a bug report on 'foo & bar', but I realized we had
361 Prompted by a bug report on 'foo & bar', but I realized we had
358 many more potential bug cases with other operators. The regexp is
362 many more potential bug cases with other operators. The regexp is
359 self.re_exclude_auto, it's fairly commented.
363 self.re_exclude_auto, it's fairly commented.
360
364
361 2006-01-12 Ville Vainio <vivainio@gmail.com>
365 2006-01-12 Ville Vainio <vivainio@gmail.com>
362
366
363 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
367 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
364 Prettified and hardened string/backslash quoting with ipsystem(),
368 Prettified and hardened string/backslash quoting with ipsystem(),
365 ipalias() and ipmagic(). Now even \ characters are passed to
369 ipalias() and ipmagic(). Now even \ characters are passed to
366 %magics, !shell escapes and aliases exactly as they are in the
370 %magics, !shell escapes and aliases exactly as they are in the
367 ipython command line. Should improve backslash experience,
371 ipython command line. Should improve backslash experience,
368 particularly in Windows (path delimiter for some commands that
372 particularly in Windows (path delimiter for some commands that
369 won't understand '/'), but Unix benefits as well (regexps). %cd
373 won't understand '/'), but Unix benefits as well (regexps). %cd
370 magic still doesn't support backslash path delimiters, though. Also
374 magic still doesn't support backslash path delimiters, though. Also
371 deleted all pretense of supporting multiline command strings in
375 deleted all pretense of supporting multiline command strings in
372 !system or %magic commands. Thanks to Jerry McRae for suggestions.
376 !system or %magic commands. Thanks to Jerry McRae for suggestions.
373
377
374 * doc/build_doc_instructions.txt added. Documentation on how to
378 * doc/build_doc_instructions.txt added. Documentation on how to
375 use doc/update_manual.py, added yesterday. Both files contributed
379 use doc/update_manual.py, added yesterday. Both files contributed
376 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
380 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
377 doc/*.sh for deprecation at a later date.
381 doc/*.sh for deprecation at a later date.
378
382
379 * /ipython.py Added ipython.py to root directory for
383 * /ipython.py Added ipython.py to root directory for
380 zero-installation (tar xzvf ipython.tgz; cd ipython; python
384 zero-installation (tar xzvf ipython.tgz; cd ipython; python
381 ipython.py) and development convenience (no need to kee doing
385 ipython.py) and development convenience (no need to kee doing
382 "setup.py install" between changes).
386 "setup.py install" between changes).
383
387
384 * Made ! and !! shell escapes work (again) in multiline expressions:
388 * Made ! and !! shell escapes work (again) in multiline expressions:
385 if 1:
389 if 1:
386 !ls
390 !ls
387 !!ls
391 !!ls
388
392
389 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
393 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
390
394
391 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
395 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
392 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
396 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
393 module in case-insensitive installation. Was causing crashes
397 module in case-insensitive installation. Was causing crashes
394 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
398 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
395
399
396 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
400 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
397 <marienz-AT-gentoo.org>, closes
401 <marienz-AT-gentoo.org>, closes
398 http://www.scipy.net/roundup/ipython/issue51.
402 http://www.scipy.net/roundup/ipython/issue51.
399
403
400 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
404 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
401
405
402 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
406 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
403 problem of excessive CPU usage under *nix and keyboard lag under
407 problem of excessive CPU usage under *nix and keyboard lag under
404 win32.
408 win32.
405
409
406 2006-01-10 *** Released version 0.7.0
410 2006-01-10 *** Released version 0.7.0
407
411
408 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
412 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
409
413
410 * IPython/Release.py (revision): tag version number to 0.7.0,
414 * IPython/Release.py (revision): tag version number to 0.7.0,
411 ready for release.
415 ready for release.
412
416
413 * IPython/Magic.py (magic_edit): Add print statement to %edit so
417 * IPython/Magic.py (magic_edit): Add print statement to %edit so
414 it informs the user of the name of the temp. file used. This can
418 it informs the user of the name of the temp. file used. This can
415 help if you decide later to reuse that same file, so you know
419 help if you decide later to reuse that same file, so you know
416 where to copy the info from.
420 where to copy the info from.
417
421
418 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
422 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
419
423
420 * setup_bdist_egg.py: little script to build an egg. Added
424 * setup_bdist_egg.py: little script to build an egg. Added
421 support in the release tools as well.
425 support in the release tools as well.
422
426
423 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
427 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
424
428
425 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
429 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
426 version selection (new -wxversion command line and ipythonrc
430 version selection (new -wxversion command line and ipythonrc
427 parameter). Patch contributed by Arnd Baecker
431 parameter). Patch contributed by Arnd Baecker
428 <arnd.baecker-AT-web.de>.
432 <arnd.baecker-AT-web.de>.
429
433
430 * IPython/iplib.py (embed_mainloop): fix tab-completion in
434 * IPython/iplib.py (embed_mainloop): fix tab-completion in
431 embedded instances, for variables defined at the interactive
435 embedded instances, for variables defined at the interactive
432 prompt of the embedded ipython. Reported by Arnd.
436 prompt of the embedded ipython. Reported by Arnd.
433
437
434 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
438 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
435 it can be used as a (stateful) toggle, or with a direct parameter.
439 it can be used as a (stateful) toggle, or with a direct parameter.
436
440
437 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
441 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
438 could be triggered in certain cases and cause the traceback
442 could be triggered in certain cases and cause the traceback
439 printer not to work.
443 printer not to work.
440
444
441 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
445 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
442
446
443 * IPython/iplib.py (_should_recompile): Small fix, closes
447 * IPython/iplib.py (_should_recompile): Small fix, closes
444 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
448 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
445
449
446 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
450 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
447
451
448 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
452 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
449 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
453 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
450 Moad for help with tracking it down.
454 Moad for help with tracking it down.
451
455
452 * IPython/iplib.py (handle_auto): fix autocall handling for
456 * IPython/iplib.py (handle_auto): fix autocall handling for
453 objects which support BOTH __getitem__ and __call__ (so that f [x]
457 objects which support BOTH __getitem__ and __call__ (so that f [x]
454 is left alone, instead of becoming f([x]) automatically).
458 is left alone, instead of becoming f([x]) automatically).
455
459
456 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
460 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
457 Ville's patch.
461 Ville's patch.
458
462
459 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
463 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
460
464
461 * IPython/iplib.py (handle_auto): changed autocall semantics to
465 * IPython/iplib.py (handle_auto): changed autocall semantics to
462 include 'smart' mode, where the autocall transformation is NOT
466 include 'smart' mode, where the autocall transformation is NOT
463 applied if there are no arguments on the line. This allows you to
467 applied if there are no arguments on the line. This allows you to
464 just type 'foo' if foo is a callable to see its internal form,
468 just type 'foo' if foo is a callable to see its internal form,
465 instead of having it called with no arguments (typically a
469 instead of having it called with no arguments (typically a
466 mistake). The old 'full' autocall still exists: for that, you
470 mistake). The old 'full' autocall still exists: for that, you
467 need to set the 'autocall' parameter to 2 in your ipythonrc file.
471 need to set the 'autocall' parameter to 2 in your ipythonrc file.
468
472
469 * IPython/completer.py (Completer.attr_matches): add
473 * IPython/completer.py (Completer.attr_matches): add
470 tab-completion support for Enthoughts' traits. After a report by
474 tab-completion support for Enthoughts' traits. After a report by
471 Arnd and a patch by Prabhu.
475 Arnd and a patch by Prabhu.
472
476
473 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
477 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
474
478
475 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
479 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
476 Schmolck's patch to fix inspect.getinnerframes().
480 Schmolck's patch to fix inspect.getinnerframes().
477
481
478 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
482 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
479 for embedded instances, regarding handling of namespaces and items
483 for embedded instances, regarding handling of namespaces and items
480 added to the __builtin__ one. Multiple embedded instances and
484 added to the __builtin__ one. Multiple embedded instances and
481 recursive embeddings should work better now (though I'm not sure
485 recursive embeddings should work better now (though I'm not sure
482 I've got all the corner cases fixed, that code is a bit of a brain
486 I've got all the corner cases fixed, that code is a bit of a brain
483 twister).
487 twister).
484
488
485 * IPython/Magic.py (magic_edit): added support to edit in-memory
489 * IPython/Magic.py (magic_edit): added support to edit in-memory
486 macros (automatically creates the necessary temp files). %edit
490 macros (automatically creates the necessary temp files). %edit
487 also doesn't return the file contents anymore, it's just noise.
491 also doesn't return the file contents anymore, it's just noise.
488
492
489 * IPython/completer.py (Completer.attr_matches): revert change to
493 * IPython/completer.py (Completer.attr_matches): revert change to
490 complete only on attributes listed in __all__. I realized it
494 complete only on attributes listed in __all__. I realized it
491 cripples the tab-completion system as a tool for exploring the
495 cripples the tab-completion system as a tool for exploring the
492 internals of unknown libraries (it renders any non-__all__
496 internals of unknown libraries (it renders any non-__all__
493 attribute off-limits). I got bit by this when trying to see
497 attribute off-limits). I got bit by this when trying to see
494 something inside the dis module.
498 something inside the dis module.
495
499
496 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
500 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
497
501
498 * IPython/iplib.py (InteractiveShell.__init__): add .meta
502 * IPython/iplib.py (InteractiveShell.__init__): add .meta
499 namespace for users and extension writers to hold data in. This
503 namespace for users and extension writers to hold data in. This
500 follows the discussion in
504 follows the discussion in
501 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
505 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
502
506
503 * IPython/completer.py (IPCompleter.complete): small patch to help
507 * IPython/completer.py (IPCompleter.complete): small patch to help
504 tab-completion under Emacs, after a suggestion by John Barnard
508 tab-completion under Emacs, after a suggestion by John Barnard
505 <barnarj-AT-ccf.org>.
509 <barnarj-AT-ccf.org>.
506
510
507 * IPython/Magic.py (Magic.extract_input_slices): added support for
511 * IPython/Magic.py (Magic.extract_input_slices): added support for
508 the slice notation in magics to use N-M to represent numbers N...M
512 the slice notation in magics to use N-M to represent numbers N...M
509 (closed endpoints). This is used by %macro and %save.
513 (closed endpoints). This is used by %macro and %save.
510
514
511 * IPython/completer.py (Completer.attr_matches): for modules which
515 * IPython/completer.py (Completer.attr_matches): for modules which
512 define __all__, complete only on those. After a patch by Jeffrey
516 define __all__, complete only on those. After a patch by Jeffrey
513 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
517 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
514 speed up this routine.
518 speed up this routine.
515
519
516 * IPython/Logger.py (Logger.log): fix a history handling bug. I
520 * IPython/Logger.py (Logger.log): fix a history handling bug. I
517 don't know if this is the end of it, but the behavior now is
521 don't know if this is the end of it, but the behavior now is
518 certainly much more correct. Note that coupled with macros,
522 certainly much more correct. Note that coupled with macros,
519 slightly surprising (at first) behavior may occur: a macro will in
523 slightly surprising (at first) behavior may occur: a macro will in
520 general expand to multiple lines of input, so upon exiting, the
524 general expand to multiple lines of input, so upon exiting, the
521 in/out counters will both be bumped by the corresponding amount
525 in/out counters will both be bumped by the corresponding amount
522 (as if the macro's contents had been typed interactively). Typing
526 (as if the macro's contents had been typed interactively). Typing
523 %hist will reveal the intermediate (silently processed) lines.
527 %hist will reveal the intermediate (silently processed) lines.
524
528
525 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
529 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
526 pickle to fail (%run was overwriting __main__ and not restoring
530 pickle to fail (%run was overwriting __main__ and not restoring
527 it, but pickle relies on __main__ to operate).
531 it, but pickle relies on __main__ to operate).
528
532
529 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
533 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
530 using properties, but forgot to make the main InteractiveShell
534 using properties, but forgot to make the main InteractiveShell
531 class a new-style class. Properties fail silently, and
535 class a new-style class. Properties fail silently, and
532 misteriously, with old-style class (getters work, but
536 misteriously, with old-style class (getters work, but
533 setters don't do anything).
537 setters don't do anything).
534
538
535 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
539 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
536
540
537 * IPython/Magic.py (magic_history): fix history reporting bug (I
541 * IPython/Magic.py (magic_history): fix history reporting bug (I
538 know some nasties are still there, I just can't seem to find a
542 know some nasties are still there, I just can't seem to find a
539 reproducible test case to track them down; the input history is
543 reproducible test case to track them down; the input history is
540 falling out of sync...)
544 falling out of sync...)
541
545
542 * IPython/iplib.py (handle_shell_escape): fix bug where both
546 * IPython/iplib.py (handle_shell_escape): fix bug where both
543 aliases and system accesses where broken for indented code (such
547 aliases and system accesses where broken for indented code (such
544 as loops).
548 as loops).
545
549
546 * IPython/genutils.py (shell): fix small but critical bug for
550 * IPython/genutils.py (shell): fix small but critical bug for
547 win32 system access.
551 win32 system access.
548
552
549 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
553 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
550
554
551 * IPython/iplib.py (showtraceback): remove use of the
555 * IPython/iplib.py (showtraceback): remove use of the
552 sys.last_{type/value/traceback} structures, which are non
556 sys.last_{type/value/traceback} structures, which are non
553 thread-safe.
557 thread-safe.
554 (_prefilter): change control flow to ensure that we NEVER
558 (_prefilter): change control flow to ensure that we NEVER
555 introspect objects when autocall is off. This will guarantee that
559 introspect objects when autocall is off. This will guarantee that
556 having an input line of the form 'x.y', where access to attribute
560 having an input line of the form 'x.y', where access to attribute
557 'y' has side effects, doesn't trigger the side effect TWICE. It
561 'y' has side effects, doesn't trigger the side effect TWICE. It
558 is important to note that, with autocall on, these side effects
562 is important to note that, with autocall on, these side effects
559 can still happen.
563 can still happen.
560 (ipsystem): new builtin, to complete the ip{magic/alias/system}
564 (ipsystem): new builtin, to complete the ip{magic/alias/system}
561 trio. IPython offers these three kinds of special calls which are
565 trio. IPython offers these three kinds of special calls which are
562 not python code, and it's a good thing to have their call method
566 not python code, and it's a good thing to have their call method
563 be accessible as pure python functions (not just special syntax at
567 be accessible as pure python functions (not just special syntax at
564 the command line). It gives us a better internal implementation
568 the command line). It gives us a better internal implementation
565 structure, as well as exposing these for user scripting more
569 structure, as well as exposing these for user scripting more
566 cleanly.
570 cleanly.
567
571
568 * IPython/macro.py (Macro.__init__): moved macros to a standalone
572 * IPython/macro.py (Macro.__init__): moved macros to a standalone
569 file. Now that they'll be more likely to be used with the
573 file. Now that they'll be more likely to be used with the
570 persistance system (%store), I want to make sure their module path
574 persistance system (%store), I want to make sure their module path
571 doesn't change in the future, so that we don't break things for
575 doesn't change in the future, so that we don't break things for
572 users' persisted data.
576 users' persisted data.
573
577
574 * IPython/iplib.py (autoindent_update): move indentation
578 * IPython/iplib.py (autoindent_update): move indentation
575 management into the _text_ processing loop, not the keyboard
579 management into the _text_ processing loop, not the keyboard
576 interactive one. This is necessary to correctly process non-typed
580 interactive one. This is necessary to correctly process non-typed
577 multiline input (such as macros).
581 multiline input (such as macros).
578
582
579 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
583 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
580 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
584 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
581 which was producing problems in the resulting manual.
585 which was producing problems in the resulting manual.
582 (magic_whos): improve reporting of instances (show their class,
586 (magic_whos): improve reporting of instances (show their class,
583 instead of simply printing 'instance' which isn't terribly
587 instead of simply printing 'instance' which isn't terribly
584 informative).
588 informative).
585
589
586 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
590 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
587 (minor mods) to support network shares under win32.
591 (minor mods) to support network shares under win32.
588
592
589 * IPython/winconsole.py (get_console_size): add new winconsole
593 * IPython/winconsole.py (get_console_size): add new winconsole
590 module and fixes to page_dumb() to improve its behavior under
594 module and fixes to page_dumb() to improve its behavior under
591 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
595 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
592
596
593 * IPython/Magic.py (Macro): simplified Macro class to just
597 * IPython/Magic.py (Macro): simplified Macro class to just
594 subclass list. We've had only 2.2 compatibility for a very long
598 subclass list. We've had only 2.2 compatibility for a very long
595 time, yet I was still avoiding subclassing the builtin types. No
599 time, yet I was still avoiding subclassing the builtin types. No
596 more (I'm also starting to use properties, though I won't shift to
600 more (I'm also starting to use properties, though I won't shift to
597 2.3-specific features quite yet).
601 2.3-specific features quite yet).
598 (magic_store): added Ville's patch for lightweight variable
602 (magic_store): added Ville's patch for lightweight variable
599 persistence, after a request on the user list by Matt Wilkie
603 persistence, after a request on the user list by Matt Wilkie
600 <maphew-AT-gmail.com>. The new %store magic's docstring has full
604 <maphew-AT-gmail.com>. The new %store magic's docstring has full
601 details.
605 details.
602
606
603 * IPython/iplib.py (InteractiveShell.post_config_initialization):
607 * IPython/iplib.py (InteractiveShell.post_config_initialization):
604 changed the default logfile name from 'ipython.log' to
608 changed the default logfile name from 'ipython.log' to
605 'ipython_log.py'. These logs are real python files, and now that
609 'ipython_log.py'. These logs are real python files, and now that
606 we have much better multiline support, people are more likely to
610 we have much better multiline support, people are more likely to
607 want to use them as such. Might as well name them correctly.
611 want to use them as such. Might as well name them correctly.
608
612
609 * IPython/Magic.py: substantial cleanup. While we can't stop
613 * IPython/Magic.py: substantial cleanup. While we can't stop
610 using magics as mixins, due to the existing customizations 'out
614 using magics as mixins, due to the existing customizations 'out
611 there' which rely on the mixin naming conventions, at least I
615 there' which rely on the mixin naming conventions, at least I
612 cleaned out all cross-class name usage. So once we are OK with
616 cleaned out all cross-class name usage. So once we are OK with
613 breaking compatibility, the two systems can be separated.
617 breaking compatibility, the two systems can be separated.
614
618
615 * IPython/Logger.py: major cleanup. This one is NOT a mixin
619 * IPython/Logger.py: major cleanup. This one is NOT a mixin
616 anymore, and the class is a fair bit less hideous as well. New
620 anymore, and the class is a fair bit less hideous as well. New
617 features were also introduced: timestamping of input, and logging
621 features were also introduced: timestamping of input, and logging
618 of output results. These are user-visible with the -t and -o
622 of output results. These are user-visible with the -t and -o
619 options to %logstart. Closes
623 options to %logstart. Closes
620 http://www.scipy.net/roundup/ipython/issue11 and a request by
624 http://www.scipy.net/roundup/ipython/issue11 and a request by
621 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
625 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
622
626
623 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
627 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
624
628
625 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
629 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
626 better hadnle backslashes in paths. See the thread 'More Windows
630 better hadnle backslashes in paths. See the thread 'More Windows
627 questions part 2 - \/ characters revisited' on the iypthon user
631 questions part 2 - \/ characters revisited' on the iypthon user
628 list:
632 list:
629 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
633 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
630
634
631 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
635 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
632
636
633 (InteractiveShell.__init__): change threaded shells to not use the
637 (InteractiveShell.__init__): change threaded shells to not use the
634 ipython crash handler. This was causing more problems than not,
638 ipython crash handler. This was causing more problems than not,
635 as exceptions in the main thread (GUI code, typically) would
639 as exceptions in the main thread (GUI code, typically) would
636 always show up as a 'crash', when they really weren't.
640 always show up as a 'crash', when they really weren't.
637
641
638 The colors and exception mode commands (%colors/%xmode) have been
642 The colors and exception mode commands (%colors/%xmode) have been
639 synchronized to also take this into account, so users can get
643 synchronized to also take this into account, so users can get
640 verbose exceptions for their threaded code as well. I also added
644 verbose exceptions for their threaded code as well. I also added
641 support for activating pdb inside this exception handler as well,
645 support for activating pdb inside this exception handler as well,
642 so now GUI authors can use IPython's enhanced pdb at runtime.
646 so now GUI authors can use IPython's enhanced pdb at runtime.
643
647
644 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
648 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
645 true by default, and add it to the shipped ipythonrc file. Since
649 true by default, and add it to the shipped ipythonrc file. Since
646 this asks the user before proceeding, I think it's OK to make it
650 this asks the user before proceeding, I think it's OK to make it
647 true by default.
651 true by default.
648
652
649 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
653 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
650 of the previous special-casing of input in the eval loop. I think
654 of the previous special-casing of input in the eval loop. I think
651 this is cleaner, as they really are commands and shouldn't have
655 this is cleaner, as they really are commands and shouldn't have
652 a special role in the middle of the core code.
656 a special role in the middle of the core code.
653
657
654 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
658 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
655
659
656 * IPython/iplib.py (edit_syntax_error): added support for
660 * IPython/iplib.py (edit_syntax_error): added support for
657 automatically reopening the editor if the file had a syntax error
661 automatically reopening the editor if the file had a syntax error
658 in it. Thanks to scottt who provided the patch at:
662 in it. Thanks to scottt who provided the patch at:
659 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
663 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
660 version committed).
664 version committed).
661
665
662 * IPython/iplib.py (handle_normal): add suport for multi-line
666 * IPython/iplib.py (handle_normal): add suport for multi-line
663 input with emtpy lines. This fixes
667 input with emtpy lines. This fixes
664 http://www.scipy.net/roundup/ipython/issue43 and a similar
668 http://www.scipy.net/roundup/ipython/issue43 and a similar
665 discussion on the user list.
669 discussion on the user list.
666
670
667 WARNING: a behavior change is necessarily introduced to support
671 WARNING: a behavior change is necessarily introduced to support
668 blank lines: now a single blank line with whitespace does NOT
672 blank lines: now a single blank line with whitespace does NOT
669 break the input loop, which means that when autoindent is on, by
673 break the input loop, which means that when autoindent is on, by
670 default hitting return on the next (indented) line does NOT exit.
674 default hitting return on the next (indented) line does NOT exit.
671
675
672 Instead, to exit a multiline input you can either have:
676 Instead, to exit a multiline input you can either have:
673
677
674 - TWO whitespace lines (just hit return again), or
678 - TWO whitespace lines (just hit return again), or
675 - a single whitespace line of a different length than provided
679 - a single whitespace line of a different length than provided
676 by the autoindent (add or remove a space).
680 by the autoindent (add or remove a space).
677
681
678 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
682 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
679 module to better organize all readline-related functionality.
683 module to better organize all readline-related functionality.
680 I've deleted FlexCompleter and put all completion clases here.
684 I've deleted FlexCompleter and put all completion clases here.
681
685
682 * IPython/iplib.py (raw_input): improve indentation management.
686 * IPython/iplib.py (raw_input): improve indentation management.
683 It is now possible to paste indented code with autoindent on, and
687 It is now possible to paste indented code with autoindent on, and
684 the code is interpreted correctly (though it still looks bad on
688 the code is interpreted correctly (though it still looks bad on
685 screen, due to the line-oriented nature of ipython).
689 screen, due to the line-oriented nature of ipython).
686 (MagicCompleter.complete): change behavior so that a TAB key on an
690 (MagicCompleter.complete): change behavior so that a TAB key on an
687 otherwise empty line actually inserts a tab, instead of completing
691 otherwise empty line actually inserts a tab, instead of completing
688 on the entire global namespace. This makes it easier to use the
692 on the entire global namespace. This makes it easier to use the
689 TAB key for indentation. After a request by Hans Meine
693 TAB key for indentation. After a request by Hans Meine
690 <hans_meine-AT-gmx.net>
694 <hans_meine-AT-gmx.net>
691 (_prefilter): add support so that typing plain 'exit' or 'quit'
695 (_prefilter): add support so that typing plain 'exit' or 'quit'
692 does a sensible thing. Originally I tried to deviate as little as
696 does a sensible thing. Originally I tried to deviate as little as
693 possible from the default python behavior, but even that one may
697 possible from the default python behavior, but even that one may
694 change in this direction (thread on python-dev to that effect).
698 change in this direction (thread on python-dev to that effect).
695 Regardless, ipython should do the right thing even if CPython's
699 Regardless, ipython should do the right thing even if CPython's
696 '>>>' prompt doesn't.
700 '>>>' prompt doesn't.
697 (InteractiveShell): removed subclassing code.InteractiveConsole
701 (InteractiveShell): removed subclassing code.InteractiveConsole
698 class. By now we'd overridden just about all of its methods: I've
702 class. By now we'd overridden just about all of its methods: I've
699 copied the remaining two over, and now ipython is a standalone
703 copied the remaining two over, and now ipython is a standalone
700 class. This will provide a clearer picture for the chainsaw
704 class. This will provide a clearer picture for the chainsaw
701 branch refactoring.
705 branch refactoring.
702
706
703 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
707 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
704
708
705 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
709 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
706 failures for objects which break when dir() is called on them.
710 failures for objects which break when dir() is called on them.
707
711
708 * IPython/FlexCompleter.py (Completer.__init__): Added support for
712 * IPython/FlexCompleter.py (Completer.__init__): Added support for
709 distinct local and global namespaces in the completer API. This
713 distinct local and global namespaces in the completer API. This
710 change allows us top properly handle completion with distinct
714 change allows us top properly handle completion with distinct
711 scopes, including in embedded instances (this had never really
715 scopes, including in embedded instances (this had never really
712 worked correctly).
716 worked correctly).
713
717
714 Note: this introduces a change in the constructor for
718 Note: this introduces a change in the constructor for
715 MagicCompleter, as a new global_namespace parameter is now the
719 MagicCompleter, as a new global_namespace parameter is now the
716 second argument (the others were bumped one position).
720 second argument (the others were bumped one position).
717
721
718 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
722 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
719
723
720 * IPython/iplib.py (embed_mainloop): fix tab-completion in
724 * IPython/iplib.py (embed_mainloop): fix tab-completion in
721 embedded instances (which can be done now thanks to Vivian's
725 embedded instances (which can be done now thanks to Vivian's
722 frame-handling fixes for pdb).
726 frame-handling fixes for pdb).
723 (InteractiveShell.__init__): Fix namespace handling problem in
727 (InteractiveShell.__init__): Fix namespace handling problem in
724 embedded instances. We were overwriting __main__ unconditionally,
728 embedded instances. We were overwriting __main__ unconditionally,
725 and this should only be done for 'full' (non-embedded) IPython;
729 and this should only be done for 'full' (non-embedded) IPython;
726 embedded instances must respect the caller's __main__. Thanks to
730 embedded instances must respect the caller's __main__. Thanks to
727 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
731 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
728
732
729 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
733 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
730
734
731 * setup.py: added download_url to setup(). This registers the
735 * setup.py: added download_url to setup(). This registers the
732 download address at PyPI, which is not only useful to humans
736 download address at PyPI, which is not only useful to humans
733 browsing the site, but is also picked up by setuptools (the Eggs
737 browsing the site, but is also picked up by setuptools (the Eggs
734 machinery). Thanks to Ville and R. Kern for the info/discussion
738 machinery). Thanks to Ville and R. Kern for the info/discussion
735 on this.
739 on this.
736
740
737 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
741 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
738
742
739 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
743 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
740 This brings a lot of nice functionality to the pdb mode, which now
744 This brings a lot of nice functionality to the pdb mode, which now
741 has tab-completion, syntax highlighting, and better stack handling
745 has tab-completion, syntax highlighting, and better stack handling
742 than before. Many thanks to Vivian De Smedt
746 than before. Many thanks to Vivian De Smedt
743 <vivian-AT-vdesmedt.com> for the original patches.
747 <vivian-AT-vdesmedt.com> for the original patches.
744
748
745 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
749 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
746
750
747 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
751 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
748 sequence to consistently accept the banner argument. The
752 sequence to consistently accept the banner argument. The
749 inconsistency was tripping SAGE, thanks to Gary Zablackis
753 inconsistency was tripping SAGE, thanks to Gary Zablackis
750 <gzabl-AT-yahoo.com> for the report.
754 <gzabl-AT-yahoo.com> for the report.
751
755
752 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
756 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
753
757
754 * IPython/iplib.py (InteractiveShell.post_config_initialization):
758 * IPython/iplib.py (InteractiveShell.post_config_initialization):
755 Fix bug where a naked 'alias' call in the ipythonrc file would
759 Fix bug where a naked 'alias' call in the ipythonrc file would
756 cause a crash. Bug reported by Jorgen Stenarson.
760 cause a crash. Bug reported by Jorgen Stenarson.
757
761
758 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
762 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
759
763
760 * IPython/ipmaker.py (make_IPython): cleanups which should improve
764 * IPython/ipmaker.py (make_IPython): cleanups which should improve
761 startup time.
765 startup time.
762
766
763 * IPython/iplib.py (runcode): my globals 'fix' for embedded
767 * IPython/iplib.py (runcode): my globals 'fix' for embedded
764 instances had introduced a bug with globals in normal code. Now
768 instances had introduced a bug with globals in normal code. Now
765 it's working in all cases.
769 it's working in all cases.
766
770
767 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
771 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
768 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
772 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
769 has been introduced to set the default case sensitivity of the
773 has been introduced to set the default case sensitivity of the
770 searches. Users can still select either mode at runtime on a
774 searches. Users can still select either mode at runtime on a
771 per-search basis.
775 per-search basis.
772
776
773 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
777 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
774
778
775 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
779 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
776 attributes in wildcard searches for subclasses. Modified version
780 attributes in wildcard searches for subclasses. Modified version
777 of a patch by Jorgen.
781 of a patch by Jorgen.
778
782
779 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
783 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
780
784
781 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
785 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
782 embedded instances. I added a user_global_ns attribute to the
786 embedded instances. I added a user_global_ns attribute to the
783 InteractiveShell class to handle this.
787 InteractiveShell class to handle this.
784
788
785 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
789 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
786
790
787 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
791 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
788 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
792 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
789 (reported under win32, but may happen also in other platforms).
793 (reported under win32, but may happen also in other platforms).
790 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
794 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
791
795
792 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
796 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
793
797
794 * IPython/Magic.py (magic_psearch): new support for wildcard
798 * IPython/Magic.py (magic_psearch): new support for wildcard
795 patterns. Now, typing ?a*b will list all names which begin with a
799 patterns. Now, typing ?a*b will list all names which begin with a
796 and end in b, for example. The %psearch magic has full
800 and end in b, for example. The %psearch magic has full
797 docstrings. Many thanks to JΓΆrgen Stenarson
801 docstrings. Many thanks to JΓΆrgen Stenarson
798 <jorgen.stenarson-AT-bostream.nu>, author of the patches
802 <jorgen.stenarson-AT-bostream.nu>, author of the patches
799 implementing this functionality.
803 implementing this functionality.
800
804
801 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
805 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
802
806
803 * Manual: fixed long-standing annoyance of double-dashes (as in
807 * Manual: fixed long-standing annoyance of double-dashes (as in
804 --prefix=~, for example) being stripped in the HTML version. This
808 --prefix=~, for example) being stripped in the HTML version. This
805 is a latex2html bug, but a workaround was provided. Many thanks
809 is a latex2html bug, but a workaround was provided. Many thanks
806 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
810 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
807 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
811 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
808 rolling. This seemingly small issue had tripped a number of users
812 rolling. This seemingly small issue had tripped a number of users
809 when first installing, so I'm glad to see it gone.
813 when first installing, so I'm glad to see it gone.
810
814
811 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
815 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
812
816
813 * IPython/Extensions/numeric_formats.py: fix missing import,
817 * IPython/Extensions/numeric_formats.py: fix missing import,
814 reported by Stephen Walton.
818 reported by Stephen Walton.
815
819
816 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
820 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
817
821
818 * IPython/demo.py: finish demo module, fully documented now.
822 * IPython/demo.py: finish demo module, fully documented now.
819
823
820 * IPython/genutils.py (file_read): simple little utility to read a
824 * IPython/genutils.py (file_read): simple little utility to read a
821 file and ensure it's closed afterwards.
825 file and ensure it's closed afterwards.
822
826
823 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
827 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
824
828
825 * IPython/demo.py (Demo.__init__): added support for individually
829 * IPython/demo.py (Demo.__init__): added support for individually
826 tagging blocks for automatic execution.
830 tagging blocks for automatic execution.
827
831
828 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
832 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
829 syntax-highlighted python sources, requested by John.
833 syntax-highlighted python sources, requested by John.
830
834
831 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
835 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
832
836
833 * IPython/demo.py (Demo.again): fix bug where again() blocks after
837 * IPython/demo.py (Demo.again): fix bug where again() blocks after
834 finishing.
838 finishing.
835
839
836 * IPython/genutils.py (shlex_split): moved from Magic to here,
840 * IPython/genutils.py (shlex_split): moved from Magic to here,
837 where all 2.2 compatibility stuff lives. I needed it for demo.py.
841 where all 2.2 compatibility stuff lives. I needed it for demo.py.
838
842
839 * IPython/demo.py (Demo.__init__): added support for silent
843 * IPython/demo.py (Demo.__init__): added support for silent
840 blocks, improved marks as regexps, docstrings written.
844 blocks, improved marks as regexps, docstrings written.
841 (Demo.__init__): better docstring, added support for sys.argv.
845 (Demo.__init__): better docstring, added support for sys.argv.
842
846
843 * IPython/genutils.py (marquee): little utility used by the demo
847 * IPython/genutils.py (marquee): little utility used by the demo
844 code, handy in general.
848 code, handy in general.
845
849
846 * IPython/demo.py (Demo.__init__): new class for interactive
850 * IPython/demo.py (Demo.__init__): new class for interactive
847 demos. Not documented yet, I just wrote it in a hurry for
851 demos. Not documented yet, I just wrote it in a hurry for
848 scipy'05. Will docstring later.
852 scipy'05. Will docstring later.
849
853
850 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
854 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
851
855
852 * IPython/Shell.py (sigint_handler): Drastic simplification which
856 * IPython/Shell.py (sigint_handler): Drastic simplification which
853 also seems to make Ctrl-C work correctly across threads! This is
857 also seems to make Ctrl-C work correctly across threads! This is
854 so simple, that I can't beleive I'd missed it before. Needs more
858 so simple, that I can't beleive I'd missed it before. Needs more
855 testing, though.
859 testing, though.
856 (KBINT): Never mind, revert changes. I'm sure I'd tried something
860 (KBINT): Never mind, revert changes. I'm sure I'd tried something
857 like this before...
861 like this before...
858
862
859 * IPython/genutils.py (get_home_dir): add protection against
863 * IPython/genutils.py (get_home_dir): add protection against
860 non-dirs in win32 registry.
864 non-dirs in win32 registry.
861
865
862 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
866 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
863 bug where dict was mutated while iterating (pysh crash).
867 bug where dict was mutated while iterating (pysh crash).
864
868
865 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
869 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
866
870
867 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
871 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
868 spurious newlines added by this routine. After a report by
872 spurious newlines added by this routine. After a report by
869 F. Mantegazza.
873 F. Mantegazza.
870
874
871 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
875 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
872
876
873 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
877 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
874 calls. These were a leftover from the GTK 1.x days, and can cause
878 calls. These were a leftover from the GTK 1.x days, and can cause
875 problems in certain cases (after a report by John Hunter).
879 problems in certain cases (after a report by John Hunter).
876
880
877 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
881 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
878 os.getcwd() fails at init time. Thanks to patch from David Remahl
882 os.getcwd() fails at init time. Thanks to patch from David Remahl
879 <chmod007-AT-mac.com>.
883 <chmod007-AT-mac.com>.
880 (InteractiveShell.__init__): prevent certain special magics from
884 (InteractiveShell.__init__): prevent certain special magics from
881 being shadowed by aliases. Closes
885 being shadowed by aliases. Closes
882 http://www.scipy.net/roundup/ipython/issue41.
886 http://www.scipy.net/roundup/ipython/issue41.
883
887
884 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
888 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
885
889
886 * IPython/iplib.py (InteractiveShell.complete): Added new
890 * IPython/iplib.py (InteractiveShell.complete): Added new
887 top-level completion method to expose the completion mechanism
891 top-level completion method to expose the completion mechanism
888 beyond readline-based environments.
892 beyond readline-based environments.
889
893
890 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
894 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
891
895
892 * tools/ipsvnc (svnversion): fix svnversion capture.
896 * tools/ipsvnc (svnversion): fix svnversion capture.
893
897
894 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
898 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
895 attribute to self, which was missing. Before, it was set by a
899 attribute to self, which was missing. Before, it was set by a
896 routine which in certain cases wasn't being called, so the
900 routine which in certain cases wasn't being called, so the
897 instance could end up missing the attribute. This caused a crash.
901 instance could end up missing the attribute. This caused a crash.
898 Closes http://www.scipy.net/roundup/ipython/issue40.
902 Closes http://www.scipy.net/roundup/ipython/issue40.
899
903
900 2005-08-16 Fernando Perez <fperez@colorado.edu>
904 2005-08-16 Fernando Perez <fperez@colorado.edu>
901
905
902 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
906 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
903 contains non-string attribute. Closes
907 contains non-string attribute. Closes
904 http://www.scipy.net/roundup/ipython/issue38.
908 http://www.scipy.net/roundup/ipython/issue38.
905
909
906 2005-08-14 Fernando Perez <fperez@colorado.edu>
910 2005-08-14 Fernando Perez <fperez@colorado.edu>
907
911
908 * tools/ipsvnc: Minor improvements, to add changeset info.
912 * tools/ipsvnc: Minor improvements, to add changeset info.
909
913
910 2005-08-12 Fernando Perez <fperez@colorado.edu>
914 2005-08-12 Fernando Perez <fperez@colorado.edu>
911
915
912 * IPython/iplib.py (runsource): remove self.code_to_run_src
916 * IPython/iplib.py (runsource): remove self.code_to_run_src
913 attribute. I realized this is nothing more than
917 attribute. I realized this is nothing more than
914 '\n'.join(self.buffer), and having the same data in two different
918 '\n'.join(self.buffer), and having the same data in two different
915 places is just asking for synchronization bugs. This may impact
919 places is just asking for synchronization bugs. This may impact
916 people who have custom exception handlers, so I need to warn
920 people who have custom exception handlers, so I need to warn
917 ipython-dev about it (F. Mantegazza may use them).
921 ipython-dev about it (F. Mantegazza may use them).
918
922
919 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
923 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
920
924
921 * IPython/genutils.py: fix 2.2 compatibility (generators)
925 * IPython/genutils.py: fix 2.2 compatibility (generators)
922
926
923 2005-07-18 Fernando Perez <fperez@colorado.edu>
927 2005-07-18 Fernando Perez <fperez@colorado.edu>
924
928
925 * IPython/genutils.py (get_home_dir): fix to help users with
929 * IPython/genutils.py (get_home_dir): fix to help users with
926 invalid $HOME under win32.
930 invalid $HOME under win32.
927
931
928 2005-07-17 Fernando Perez <fperez@colorado.edu>
932 2005-07-17 Fernando Perez <fperez@colorado.edu>
929
933
930 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
934 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
931 some old hacks and clean up a bit other routines; code should be
935 some old hacks and clean up a bit other routines; code should be
932 simpler and a bit faster.
936 simpler and a bit faster.
933
937
934 * IPython/iplib.py (interact): removed some last-resort attempts
938 * IPython/iplib.py (interact): removed some last-resort attempts
935 to survive broken stdout/stderr. That code was only making it
939 to survive broken stdout/stderr. That code was only making it
936 harder to abstract out the i/o (necessary for gui integration),
940 harder to abstract out the i/o (necessary for gui integration),
937 and the crashes it could prevent were extremely rare in practice
941 and the crashes it could prevent were extremely rare in practice
938 (besides being fully user-induced in a pretty violent manner).
942 (besides being fully user-induced in a pretty violent manner).
939
943
940 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
944 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
941 Nothing major yet, but the code is simpler to read; this should
945 Nothing major yet, but the code is simpler to read; this should
942 make it easier to do more serious modifications in the future.
946 make it easier to do more serious modifications in the future.
943
947
944 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
948 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
945 which broke in .15 (thanks to a report by Ville).
949 which broke in .15 (thanks to a report by Ville).
946
950
947 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
951 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
948 be quite correct, I know next to nothing about unicode). This
952 be quite correct, I know next to nothing about unicode). This
949 will allow unicode strings to be used in prompts, amongst other
953 will allow unicode strings to be used in prompts, amongst other
950 cases. It also will prevent ipython from crashing when unicode
954 cases. It also will prevent ipython from crashing when unicode
951 shows up unexpectedly in many places. If ascii encoding fails, we
955 shows up unexpectedly in many places. If ascii encoding fails, we
952 assume utf_8. Currently the encoding is not a user-visible
956 assume utf_8. Currently the encoding is not a user-visible
953 setting, though it could be made so if there is demand for it.
957 setting, though it could be made so if there is demand for it.
954
958
955 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
959 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
956
960
957 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
961 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
958
962
959 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
963 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
960
964
961 * IPython/genutils.py: Add 2.2 compatibility here, so all other
965 * IPython/genutils.py: Add 2.2 compatibility here, so all other
962 code can work transparently for 2.2/2.3.
966 code can work transparently for 2.2/2.3.
963
967
964 2005-07-16 Fernando Perez <fperez@colorado.edu>
968 2005-07-16 Fernando Perez <fperez@colorado.edu>
965
969
966 * IPython/ultraTB.py (ExceptionColors): Make a global variable
970 * IPython/ultraTB.py (ExceptionColors): Make a global variable
967 out of the color scheme table used for coloring exception
971 out of the color scheme table used for coloring exception
968 tracebacks. This allows user code to add new schemes at runtime.
972 tracebacks. This allows user code to add new schemes at runtime.
969 This is a minimally modified version of the patch at
973 This is a minimally modified version of the patch at
970 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
974 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
971 for the contribution.
975 for the contribution.
972
976
973 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
977 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
974 slightly modified version of the patch in
978 slightly modified version of the patch in
975 http://www.scipy.net/roundup/ipython/issue34, which also allows me
979 http://www.scipy.net/roundup/ipython/issue34, which also allows me
976 to remove the previous try/except solution (which was costlier).
980 to remove the previous try/except solution (which was costlier).
977 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
981 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
978
982
979 2005-06-08 Fernando Perez <fperez@colorado.edu>
983 2005-06-08 Fernando Perez <fperez@colorado.edu>
980
984
981 * IPython/iplib.py (write/write_err): Add methods to abstract all
985 * IPython/iplib.py (write/write_err): Add methods to abstract all
982 I/O a bit more.
986 I/O a bit more.
983
987
984 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
988 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
985 warning, reported by Aric Hagberg, fix by JD Hunter.
989 warning, reported by Aric Hagberg, fix by JD Hunter.
986
990
987 2005-06-02 *** Released version 0.6.15
991 2005-06-02 *** Released version 0.6.15
988
992
989 2005-06-01 Fernando Perez <fperez@colorado.edu>
993 2005-06-01 Fernando Perez <fperez@colorado.edu>
990
994
991 * IPython/iplib.py (MagicCompleter.file_matches): Fix
995 * IPython/iplib.py (MagicCompleter.file_matches): Fix
992 tab-completion of filenames within open-quoted strings. Note that
996 tab-completion of filenames within open-quoted strings. Note that
993 this requires that in ~/.ipython/ipythonrc, users change the
997 this requires that in ~/.ipython/ipythonrc, users change the
994 readline delimiters configuration to read:
998 readline delimiters configuration to read:
995
999
996 readline_remove_delims -/~
1000 readline_remove_delims -/~
997
1001
998
1002
999 2005-05-31 *** Released version 0.6.14
1003 2005-05-31 *** Released version 0.6.14
1000
1004
1001 2005-05-29 Fernando Perez <fperez@colorado.edu>
1005 2005-05-29 Fernando Perez <fperez@colorado.edu>
1002
1006
1003 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1007 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1004 with files not on the filesystem. Reported by Eliyahu Sandler
1008 with files not on the filesystem. Reported by Eliyahu Sandler
1005 <eli@gondolin.net>
1009 <eli@gondolin.net>
1006
1010
1007 2005-05-22 Fernando Perez <fperez@colorado.edu>
1011 2005-05-22 Fernando Perez <fperez@colorado.edu>
1008
1012
1009 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1013 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1010 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1014 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1011
1015
1012 2005-05-19 Fernando Perez <fperez@colorado.edu>
1016 2005-05-19 Fernando Perez <fperez@colorado.edu>
1013
1017
1014 * IPython/iplib.py (safe_execfile): close a file which could be
1018 * IPython/iplib.py (safe_execfile): close a file which could be
1015 left open (causing problems in win32, which locks open files).
1019 left open (causing problems in win32, which locks open files).
1016 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1020 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1017
1021
1018 2005-05-18 Fernando Perez <fperez@colorado.edu>
1022 2005-05-18 Fernando Perez <fperez@colorado.edu>
1019
1023
1020 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1024 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1021 keyword arguments correctly to safe_execfile().
1025 keyword arguments correctly to safe_execfile().
1022
1026
1023 2005-05-13 Fernando Perez <fperez@colorado.edu>
1027 2005-05-13 Fernando Perez <fperez@colorado.edu>
1024
1028
1025 * ipython.1: Added info about Qt to manpage, and threads warning
1029 * ipython.1: Added info about Qt to manpage, and threads warning
1026 to usage page (invoked with --help).
1030 to usage page (invoked with --help).
1027
1031
1028 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1032 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1029 new matcher (it goes at the end of the priority list) to do
1033 new matcher (it goes at the end of the priority list) to do
1030 tab-completion on named function arguments. Submitted by George
1034 tab-completion on named function arguments. Submitted by George
1031 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1035 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1032 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1036 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1033 for more details.
1037 for more details.
1034
1038
1035 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1039 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1036 SystemExit exceptions in the script being run. Thanks to a report
1040 SystemExit exceptions in the script being run. Thanks to a report
1037 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1041 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1038 producing very annoying behavior when running unit tests.
1042 producing very annoying behavior when running unit tests.
1039
1043
1040 2005-05-12 Fernando Perez <fperez@colorado.edu>
1044 2005-05-12 Fernando Perez <fperez@colorado.edu>
1041
1045
1042 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1046 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1043 which I'd broken (again) due to a changed regexp. In the process,
1047 which I'd broken (again) due to a changed regexp. In the process,
1044 added ';' as an escape to auto-quote the whole line without
1048 added ';' as an escape to auto-quote the whole line without
1045 splitting its arguments. Thanks to a report by Jerry McRae
1049 splitting its arguments. Thanks to a report by Jerry McRae
1046 <qrs0xyc02-AT-sneakemail.com>.
1050 <qrs0xyc02-AT-sneakemail.com>.
1047
1051
1048 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1052 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1049 possible crashes caused by a TokenError. Reported by Ed Schofield
1053 possible crashes caused by a TokenError. Reported by Ed Schofield
1050 <schofield-AT-ftw.at>.
1054 <schofield-AT-ftw.at>.
1051
1055
1052 2005-05-06 Fernando Perez <fperez@colorado.edu>
1056 2005-05-06 Fernando Perez <fperez@colorado.edu>
1053
1057
1054 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1058 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1055
1059
1056 2005-04-29 Fernando Perez <fperez@colorado.edu>
1060 2005-04-29 Fernando Perez <fperez@colorado.edu>
1057
1061
1058 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1062 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1059 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1063 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1060 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1064 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1061 which provides support for Qt interactive usage (similar to the
1065 which provides support for Qt interactive usage (similar to the
1062 existing one for WX and GTK). This had been often requested.
1066 existing one for WX and GTK). This had been often requested.
1063
1067
1064 2005-04-14 *** Released version 0.6.13
1068 2005-04-14 *** Released version 0.6.13
1065
1069
1066 2005-04-08 Fernando Perez <fperez@colorado.edu>
1070 2005-04-08 Fernando Perez <fperez@colorado.edu>
1067
1071
1068 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1072 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1069 from _ofind, which gets called on almost every input line. Now,
1073 from _ofind, which gets called on almost every input line. Now,
1070 we only try to get docstrings if they are actually going to be
1074 we only try to get docstrings if they are actually going to be
1071 used (the overhead of fetching unnecessary docstrings can be
1075 used (the overhead of fetching unnecessary docstrings can be
1072 noticeable for certain objects, such as Pyro proxies).
1076 noticeable for certain objects, such as Pyro proxies).
1073
1077
1074 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1078 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1075 for completers. For some reason I had been passing them the state
1079 for completers. For some reason I had been passing them the state
1076 variable, which completers never actually need, and was in
1080 variable, which completers never actually need, and was in
1077 conflict with the rlcompleter API. Custom completers ONLY need to
1081 conflict with the rlcompleter API. Custom completers ONLY need to
1078 take the text parameter.
1082 take the text parameter.
1079
1083
1080 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1084 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1081 work correctly in pysh. I've also moved all the logic which used
1085 work correctly in pysh. I've also moved all the logic which used
1082 to be in pysh.py here, which will prevent problems with future
1086 to be in pysh.py here, which will prevent problems with future
1083 upgrades. However, this time I must warn users to update their
1087 upgrades. However, this time I must warn users to update their
1084 pysh profile to include the line
1088 pysh profile to include the line
1085
1089
1086 import_all IPython.Extensions.InterpreterExec
1090 import_all IPython.Extensions.InterpreterExec
1087
1091
1088 because otherwise things won't work for them. They MUST also
1092 because otherwise things won't work for them. They MUST also
1089 delete pysh.py and the line
1093 delete pysh.py and the line
1090
1094
1091 execfile pysh.py
1095 execfile pysh.py
1092
1096
1093 from their ipythonrc-pysh.
1097 from their ipythonrc-pysh.
1094
1098
1095 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1099 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1096 robust in the face of objects whose dir() returns non-strings
1100 robust in the face of objects whose dir() returns non-strings
1097 (which it shouldn't, but some broken libs like ITK do). Thanks to
1101 (which it shouldn't, but some broken libs like ITK do). Thanks to
1098 a patch by John Hunter (implemented differently, though). Also
1102 a patch by John Hunter (implemented differently, though). Also
1099 minor improvements by using .extend instead of + on lists.
1103 minor improvements by using .extend instead of + on lists.
1100
1104
1101 * pysh.py:
1105 * pysh.py:
1102
1106
1103 2005-04-06 Fernando Perez <fperez@colorado.edu>
1107 2005-04-06 Fernando Perez <fperez@colorado.edu>
1104
1108
1105 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1109 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1106 by default, so that all users benefit from it. Those who don't
1110 by default, so that all users benefit from it. Those who don't
1107 want it can still turn it off.
1111 want it can still turn it off.
1108
1112
1109 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1113 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1110 config file, I'd forgotten about this, so users were getting it
1114 config file, I'd forgotten about this, so users were getting it
1111 off by default.
1115 off by default.
1112
1116
1113 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1117 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1114 consistency. Now magics can be called in multiline statements,
1118 consistency. Now magics can be called in multiline statements,
1115 and python variables can be expanded in magic calls via $var.
1119 and python variables can be expanded in magic calls via $var.
1116 This makes the magic system behave just like aliases or !system
1120 This makes the magic system behave just like aliases or !system
1117 calls.
1121 calls.
1118
1122
1119 2005-03-28 Fernando Perez <fperez@colorado.edu>
1123 2005-03-28 Fernando Perez <fperez@colorado.edu>
1120
1124
1121 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1125 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1122 expensive string additions for building command. Add support for
1126 expensive string additions for building command. Add support for
1123 trailing ';' when autocall is used.
1127 trailing ';' when autocall is used.
1124
1128
1125 2005-03-26 Fernando Perez <fperez@colorado.edu>
1129 2005-03-26 Fernando Perez <fperez@colorado.edu>
1126
1130
1127 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1131 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1128 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1132 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1129 ipython.el robust against prompts with any number of spaces
1133 ipython.el robust against prompts with any number of spaces
1130 (including 0) after the ':' character.
1134 (including 0) after the ':' character.
1131
1135
1132 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1136 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1133 continuation prompt, which misled users to think the line was
1137 continuation prompt, which misled users to think the line was
1134 already indented. Closes debian Bug#300847, reported to me by
1138 already indented. Closes debian Bug#300847, reported to me by
1135 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1139 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1136
1140
1137 2005-03-23 Fernando Perez <fperez@colorado.edu>
1141 2005-03-23 Fernando Perez <fperez@colorado.edu>
1138
1142
1139 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1143 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1140 properly aligned if they have embedded newlines.
1144 properly aligned if they have embedded newlines.
1141
1145
1142 * IPython/iplib.py (runlines): Add a public method to expose
1146 * IPython/iplib.py (runlines): Add a public method to expose
1143 IPython's code execution machinery, so that users can run strings
1147 IPython's code execution machinery, so that users can run strings
1144 as if they had been typed at the prompt interactively.
1148 as if they had been typed at the prompt interactively.
1145 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1149 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1146 methods which can call the system shell, but with python variable
1150 methods which can call the system shell, but with python variable
1147 expansion. The three such methods are: __IPYTHON__.system,
1151 expansion. The three such methods are: __IPYTHON__.system,
1148 .getoutput and .getoutputerror. These need to be documented in a
1152 .getoutput and .getoutputerror. These need to be documented in a
1149 'public API' section (to be written) of the manual.
1153 'public API' section (to be written) of the manual.
1150
1154
1151 2005-03-20 Fernando Perez <fperez@colorado.edu>
1155 2005-03-20 Fernando Perez <fperez@colorado.edu>
1152
1156
1153 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1157 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1154 for custom exception handling. This is quite powerful, and it
1158 for custom exception handling. This is quite powerful, and it
1155 allows for user-installable exception handlers which can trap
1159 allows for user-installable exception handlers which can trap
1156 custom exceptions at runtime and treat them separately from
1160 custom exceptions at runtime and treat them separately from
1157 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1161 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1158 Mantegazza <mantegazza-AT-ill.fr>.
1162 Mantegazza <mantegazza-AT-ill.fr>.
1159 (InteractiveShell.set_custom_completer): public API function to
1163 (InteractiveShell.set_custom_completer): public API function to
1160 add new completers at runtime.
1164 add new completers at runtime.
1161
1165
1162 2005-03-19 Fernando Perez <fperez@colorado.edu>
1166 2005-03-19 Fernando Perez <fperez@colorado.edu>
1163
1167
1164 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1168 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1165 allow objects which provide their docstrings via non-standard
1169 allow objects which provide their docstrings via non-standard
1166 mechanisms (like Pyro proxies) to still be inspected by ipython's
1170 mechanisms (like Pyro proxies) to still be inspected by ipython's
1167 ? system.
1171 ? system.
1168
1172
1169 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1173 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1170 automatic capture system. I tried quite hard to make it work
1174 automatic capture system. I tried quite hard to make it work
1171 reliably, and simply failed. I tried many combinations with the
1175 reliably, and simply failed. I tried many combinations with the
1172 subprocess module, but eventually nothing worked in all needed
1176 subprocess module, but eventually nothing worked in all needed
1173 cases (not blocking stdin for the child, duplicating stdout
1177 cases (not blocking stdin for the child, duplicating stdout
1174 without blocking, etc). The new %sc/%sx still do capture to these
1178 without blocking, etc). The new %sc/%sx still do capture to these
1175 magical list/string objects which make shell use much more
1179 magical list/string objects which make shell use much more
1176 conveninent, so not all is lost.
1180 conveninent, so not all is lost.
1177
1181
1178 XXX - FIX MANUAL for the change above!
1182 XXX - FIX MANUAL for the change above!
1179
1183
1180 (runsource): I copied code.py's runsource() into ipython to modify
1184 (runsource): I copied code.py's runsource() into ipython to modify
1181 it a bit. Now the code object and source to be executed are
1185 it a bit. Now the code object and source to be executed are
1182 stored in ipython. This makes this info accessible to third-party
1186 stored in ipython. This makes this info accessible to third-party
1183 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1187 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1184 Mantegazza <mantegazza-AT-ill.fr>.
1188 Mantegazza <mantegazza-AT-ill.fr>.
1185
1189
1186 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1190 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1187 history-search via readline (like C-p/C-n). I'd wanted this for a
1191 history-search via readline (like C-p/C-n). I'd wanted this for a
1188 long time, but only recently found out how to do it. For users
1192 long time, but only recently found out how to do it. For users
1189 who already have their ipythonrc files made and want this, just
1193 who already have their ipythonrc files made and want this, just
1190 add:
1194 add:
1191
1195
1192 readline_parse_and_bind "\e[A": history-search-backward
1196 readline_parse_and_bind "\e[A": history-search-backward
1193 readline_parse_and_bind "\e[B": history-search-forward
1197 readline_parse_and_bind "\e[B": history-search-forward
1194
1198
1195 2005-03-18 Fernando Perez <fperez@colorado.edu>
1199 2005-03-18 Fernando Perez <fperez@colorado.edu>
1196
1200
1197 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1201 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1198 LSString and SList classes which allow transparent conversions
1202 LSString and SList classes which allow transparent conversions
1199 between list mode and whitespace-separated string.
1203 between list mode and whitespace-separated string.
1200 (magic_r): Fix recursion problem in %r.
1204 (magic_r): Fix recursion problem in %r.
1201
1205
1202 * IPython/genutils.py (LSString): New class to be used for
1206 * IPython/genutils.py (LSString): New class to be used for
1203 automatic storage of the results of all alias/system calls in _o
1207 automatic storage of the results of all alias/system calls in _o
1204 and _e (stdout/err). These provide a .l/.list attribute which
1208 and _e (stdout/err). These provide a .l/.list attribute which
1205 does automatic splitting on newlines. This means that for most
1209 does automatic splitting on newlines. This means that for most
1206 uses, you'll never need to do capturing of output with %sc/%sx
1210 uses, you'll never need to do capturing of output with %sc/%sx
1207 anymore, since ipython keeps this always done for you. Note that
1211 anymore, since ipython keeps this always done for you. Note that
1208 only the LAST results are stored, the _o/e variables are
1212 only the LAST results are stored, the _o/e variables are
1209 overwritten on each call. If you need to save their contents
1213 overwritten on each call. If you need to save their contents
1210 further, simply bind them to any other name.
1214 further, simply bind them to any other name.
1211
1215
1212 2005-03-17 Fernando Perez <fperez@colorado.edu>
1216 2005-03-17 Fernando Perez <fperez@colorado.edu>
1213
1217
1214 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1218 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1215 prompt namespace handling.
1219 prompt namespace handling.
1216
1220
1217 2005-03-16 Fernando Perez <fperez@colorado.edu>
1221 2005-03-16 Fernando Perez <fperez@colorado.edu>
1218
1222
1219 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1223 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1220 classic prompts to be '>>> ' (final space was missing, and it
1224 classic prompts to be '>>> ' (final space was missing, and it
1221 trips the emacs python mode).
1225 trips the emacs python mode).
1222 (BasePrompt.__str__): Added safe support for dynamic prompt
1226 (BasePrompt.__str__): Added safe support for dynamic prompt
1223 strings. Now you can set your prompt string to be '$x', and the
1227 strings. Now you can set your prompt string to be '$x', and the
1224 value of x will be printed from your interactive namespace. The
1228 value of x will be printed from your interactive namespace. The
1225 interpolation syntax includes the full Itpl support, so
1229 interpolation syntax includes the full Itpl support, so
1226 ${foo()+x+bar()} is a valid prompt string now, and the function
1230 ${foo()+x+bar()} is a valid prompt string now, and the function
1227 calls will be made at runtime.
1231 calls will be made at runtime.
1228
1232
1229 2005-03-15 Fernando Perez <fperez@colorado.edu>
1233 2005-03-15 Fernando Perez <fperez@colorado.edu>
1230
1234
1231 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1235 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1232 avoid name clashes in pylab. %hist still works, it just forwards
1236 avoid name clashes in pylab. %hist still works, it just forwards
1233 the call to %history.
1237 the call to %history.
1234
1238
1235 2005-03-02 *** Released version 0.6.12
1239 2005-03-02 *** Released version 0.6.12
1236
1240
1237 2005-03-02 Fernando Perez <fperez@colorado.edu>
1241 2005-03-02 Fernando Perez <fperez@colorado.edu>
1238
1242
1239 * IPython/iplib.py (handle_magic): log magic calls properly as
1243 * IPython/iplib.py (handle_magic): log magic calls properly as
1240 ipmagic() function calls.
1244 ipmagic() function calls.
1241
1245
1242 * IPython/Magic.py (magic_time): Improved %time to support
1246 * IPython/Magic.py (magic_time): Improved %time to support
1243 statements and provide wall-clock as well as CPU time.
1247 statements and provide wall-clock as well as CPU time.
1244
1248
1245 2005-02-27 Fernando Perez <fperez@colorado.edu>
1249 2005-02-27 Fernando Perez <fperez@colorado.edu>
1246
1250
1247 * IPython/hooks.py: New hooks module, to expose user-modifiable
1251 * IPython/hooks.py: New hooks module, to expose user-modifiable
1248 IPython functionality in a clean manner. For now only the editor
1252 IPython functionality in a clean manner. For now only the editor
1249 hook is actually written, and other thigns which I intend to turn
1253 hook is actually written, and other thigns which I intend to turn
1250 into proper hooks aren't yet there. The display and prefilter
1254 into proper hooks aren't yet there. The display and prefilter
1251 stuff, for example, should be hooks. But at least now the
1255 stuff, for example, should be hooks. But at least now the
1252 framework is in place, and the rest can be moved here with more
1256 framework is in place, and the rest can be moved here with more
1253 time later. IPython had had a .hooks variable for a long time for
1257 time later. IPython had had a .hooks variable for a long time for
1254 this purpose, but I'd never actually used it for anything.
1258 this purpose, but I'd never actually used it for anything.
1255
1259
1256 2005-02-26 Fernando Perez <fperez@colorado.edu>
1260 2005-02-26 Fernando Perez <fperez@colorado.edu>
1257
1261
1258 * IPython/ipmaker.py (make_IPython): make the default ipython
1262 * IPython/ipmaker.py (make_IPython): make the default ipython
1259 directory be called _ipython under win32, to follow more the
1263 directory be called _ipython under win32, to follow more the
1260 naming peculiarities of that platform (where buggy software like
1264 naming peculiarities of that platform (where buggy software like
1261 Visual Sourcesafe breaks with .named directories). Reported by
1265 Visual Sourcesafe breaks with .named directories). Reported by
1262 Ville Vainio.
1266 Ville Vainio.
1263
1267
1264 2005-02-23 Fernando Perez <fperez@colorado.edu>
1268 2005-02-23 Fernando Perez <fperez@colorado.edu>
1265
1269
1266 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1270 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1267 auto_aliases for win32 which were causing problems. Users can
1271 auto_aliases for win32 which were causing problems. Users can
1268 define the ones they personally like.
1272 define the ones they personally like.
1269
1273
1270 2005-02-21 Fernando Perez <fperez@colorado.edu>
1274 2005-02-21 Fernando Perez <fperez@colorado.edu>
1271
1275
1272 * IPython/Magic.py (magic_time): new magic to time execution of
1276 * IPython/Magic.py (magic_time): new magic to time execution of
1273 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1277 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1274
1278
1275 2005-02-19 Fernando Perez <fperez@colorado.edu>
1279 2005-02-19 Fernando Perez <fperez@colorado.edu>
1276
1280
1277 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1281 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1278 into keys (for prompts, for example).
1282 into keys (for prompts, for example).
1279
1283
1280 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1284 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1281 prompts in case users want them. This introduces a small behavior
1285 prompts in case users want them. This introduces a small behavior
1282 change: ipython does not automatically add a space to all prompts
1286 change: ipython does not automatically add a space to all prompts
1283 anymore. To get the old prompts with a space, users should add it
1287 anymore. To get the old prompts with a space, users should add it
1284 manually to their ipythonrc file, so for example prompt_in1 should
1288 manually to their ipythonrc file, so for example prompt_in1 should
1285 now read 'In [\#]: ' instead of 'In [\#]:'.
1289 now read 'In [\#]: ' instead of 'In [\#]:'.
1286 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1290 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1287 file) to control left-padding of secondary prompts.
1291 file) to control left-padding of secondary prompts.
1288
1292
1289 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1293 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1290 the profiler can't be imported. Fix for Debian, which removed
1294 the profiler can't be imported. Fix for Debian, which removed
1291 profile.py because of License issues. I applied a slightly
1295 profile.py because of License issues. I applied a slightly
1292 modified version of the original Debian patch at
1296 modified version of the original Debian patch at
1293 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1297 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1294
1298
1295 2005-02-17 Fernando Perez <fperez@colorado.edu>
1299 2005-02-17 Fernando Perez <fperez@colorado.edu>
1296
1300
1297 * IPython/genutils.py (native_line_ends): Fix bug which would
1301 * IPython/genutils.py (native_line_ends): Fix bug which would
1298 cause improper line-ends under win32 b/c I was not opening files
1302 cause improper line-ends under win32 b/c I was not opening files
1299 in binary mode. Bug report and fix thanks to Ville.
1303 in binary mode. Bug report and fix thanks to Ville.
1300
1304
1301 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1305 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1302 trying to catch spurious foo[1] autocalls. My fix actually broke
1306 trying to catch spurious foo[1] autocalls. My fix actually broke
1303 ',/' autoquote/call with explicit escape (bad regexp).
1307 ',/' autoquote/call with explicit escape (bad regexp).
1304
1308
1305 2005-02-15 *** Released version 0.6.11
1309 2005-02-15 *** Released version 0.6.11
1306
1310
1307 2005-02-14 Fernando Perez <fperez@colorado.edu>
1311 2005-02-14 Fernando Perez <fperez@colorado.edu>
1308
1312
1309 * IPython/background_jobs.py: New background job management
1313 * IPython/background_jobs.py: New background job management
1310 subsystem. This is implemented via a new set of classes, and
1314 subsystem. This is implemented via a new set of classes, and
1311 IPython now provides a builtin 'jobs' object for background job
1315 IPython now provides a builtin 'jobs' object for background job
1312 execution. A convenience %bg magic serves as a lightweight
1316 execution. A convenience %bg magic serves as a lightweight
1313 frontend for starting the more common type of calls. This was
1317 frontend for starting the more common type of calls. This was
1314 inspired by discussions with B. Granger and the BackgroundCommand
1318 inspired by discussions with B. Granger and the BackgroundCommand
1315 class described in the book Python Scripting for Computational
1319 class described in the book Python Scripting for Computational
1316 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1320 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1317 (although ultimately no code from this text was used, as IPython's
1321 (although ultimately no code from this text was used, as IPython's
1318 system is a separate implementation).
1322 system is a separate implementation).
1319
1323
1320 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1324 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1321 to control the completion of single/double underscore names
1325 to control the completion of single/double underscore names
1322 separately. As documented in the example ipytonrc file, the
1326 separately. As documented in the example ipytonrc file, the
1323 readline_omit__names variable can now be set to 2, to omit even
1327 readline_omit__names variable can now be set to 2, to omit even
1324 single underscore names. Thanks to a patch by Brian Wong
1328 single underscore names. Thanks to a patch by Brian Wong
1325 <BrianWong-AT-AirgoNetworks.Com>.
1329 <BrianWong-AT-AirgoNetworks.Com>.
1326 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1330 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1327 be autocalled as foo([1]) if foo were callable. A problem for
1331 be autocalled as foo([1]) if foo were callable. A problem for
1328 things which are both callable and implement __getitem__.
1332 things which are both callable and implement __getitem__.
1329 (init_readline): Fix autoindentation for win32. Thanks to a patch
1333 (init_readline): Fix autoindentation for win32. Thanks to a patch
1330 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1334 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1331
1335
1332 2005-02-12 Fernando Perez <fperez@colorado.edu>
1336 2005-02-12 Fernando Perez <fperez@colorado.edu>
1333
1337
1334 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1338 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1335 which I had written long ago to sort out user error messages which
1339 which I had written long ago to sort out user error messages which
1336 may occur during startup. This seemed like a good idea initially,
1340 may occur during startup. This seemed like a good idea initially,
1337 but it has proven a disaster in retrospect. I don't want to
1341 but it has proven a disaster in retrospect. I don't want to
1338 change much code for now, so my fix is to set the internal 'debug'
1342 change much code for now, so my fix is to set the internal 'debug'
1339 flag to true everywhere, whose only job was precisely to control
1343 flag to true everywhere, whose only job was precisely to control
1340 this subsystem. This closes issue 28 (as well as avoiding all
1344 this subsystem. This closes issue 28 (as well as avoiding all
1341 sorts of strange hangups which occur from time to time).
1345 sorts of strange hangups which occur from time to time).
1342
1346
1343 2005-02-07 Fernando Perez <fperez@colorado.edu>
1347 2005-02-07 Fernando Perez <fperez@colorado.edu>
1344
1348
1345 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1349 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1346 previous call produced a syntax error.
1350 previous call produced a syntax error.
1347
1351
1348 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1352 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1349 classes without constructor.
1353 classes without constructor.
1350
1354
1351 2005-02-06 Fernando Perez <fperez@colorado.edu>
1355 2005-02-06 Fernando Perez <fperez@colorado.edu>
1352
1356
1353 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1357 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1354 completions with the results of each matcher, so we return results
1358 completions with the results of each matcher, so we return results
1355 to the user from all namespaces. This breaks with ipython
1359 to the user from all namespaces. This breaks with ipython
1356 tradition, but I think it's a nicer behavior. Now you get all
1360 tradition, but I think it's a nicer behavior. Now you get all
1357 possible completions listed, from all possible namespaces (python,
1361 possible completions listed, from all possible namespaces (python,
1358 filesystem, magics...) After a request by John Hunter
1362 filesystem, magics...) After a request by John Hunter
1359 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1363 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1360
1364
1361 2005-02-05 Fernando Perez <fperez@colorado.edu>
1365 2005-02-05 Fernando Perez <fperez@colorado.edu>
1362
1366
1363 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1367 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1364 the call had quote characters in it (the quotes were stripped).
1368 the call had quote characters in it (the quotes were stripped).
1365
1369
1366 2005-01-31 Fernando Perez <fperez@colorado.edu>
1370 2005-01-31 Fernando Perez <fperez@colorado.edu>
1367
1371
1368 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1372 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1369 Itpl.itpl() to make the code more robust against psyco
1373 Itpl.itpl() to make the code more robust against psyco
1370 optimizations.
1374 optimizations.
1371
1375
1372 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1376 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1373 of causing an exception. Quicker, cleaner.
1377 of causing an exception. Quicker, cleaner.
1374
1378
1375 2005-01-28 Fernando Perez <fperez@colorado.edu>
1379 2005-01-28 Fernando Perez <fperez@colorado.edu>
1376
1380
1377 * scripts/ipython_win_post_install.py (install): hardcode
1381 * scripts/ipython_win_post_install.py (install): hardcode
1378 sys.prefix+'python.exe' as the executable path. It turns out that
1382 sys.prefix+'python.exe' as the executable path. It turns out that
1379 during the post-installation run, sys.executable resolves to the
1383 during the post-installation run, sys.executable resolves to the
1380 name of the binary installer! I should report this as a distutils
1384 name of the binary installer! I should report this as a distutils
1381 bug, I think. I updated the .10 release with this tiny fix, to
1385 bug, I think. I updated the .10 release with this tiny fix, to
1382 avoid annoying the lists further.
1386 avoid annoying the lists further.
1383
1387
1384 2005-01-27 *** Released version 0.6.10
1388 2005-01-27 *** Released version 0.6.10
1385
1389
1386 2005-01-27 Fernando Perez <fperez@colorado.edu>
1390 2005-01-27 Fernando Perez <fperez@colorado.edu>
1387
1391
1388 * IPython/numutils.py (norm): Added 'inf' as optional name for
1392 * IPython/numutils.py (norm): Added 'inf' as optional name for
1389 L-infinity norm, included references to mathworld.com for vector
1393 L-infinity norm, included references to mathworld.com for vector
1390 norm definitions.
1394 norm definitions.
1391 (amin/amax): added amin/amax for array min/max. Similar to what
1395 (amin/amax): added amin/amax for array min/max. Similar to what
1392 pylab ships with after the recent reorganization of names.
1396 pylab ships with after the recent reorganization of names.
1393 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1397 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1394
1398
1395 * ipython.el: committed Alex's recent fixes and improvements.
1399 * ipython.el: committed Alex's recent fixes and improvements.
1396 Tested with python-mode from CVS, and it looks excellent. Since
1400 Tested with python-mode from CVS, and it looks excellent. Since
1397 python-mode hasn't released anything in a while, I'm temporarily
1401 python-mode hasn't released anything in a while, I'm temporarily
1398 putting a copy of today's CVS (v 4.70) of python-mode in:
1402 putting a copy of today's CVS (v 4.70) of python-mode in:
1399 http://ipython.scipy.org/tmp/python-mode.el
1403 http://ipython.scipy.org/tmp/python-mode.el
1400
1404
1401 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1405 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1402 sys.executable for the executable name, instead of assuming it's
1406 sys.executable for the executable name, instead of assuming it's
1403 called 'python.exe' (the post-installer would have produced broken
1407 called 'python.exe' (the post-installer would have produced broken
1404 setups on systems with a differently named python binary).
1408 setups on systems with a differently named python binary).
1405
1409
1406 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1410 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1407 references to os.linesep, to make the code more
1411 references to os.linesep, to make the code more
1408 platform-independent. This is also part of the win32 coloring
1412 platform-independent. This is also part of the win32 coloring
1409 fixes.
1413 fixes.
1410
1414
1411 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1415 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1412 lines, which actually cause coloring bugs because the length of
1416 lines, which actually cause coloring bugs because the length of
1413 the line is very difficult to correctly compute with embedded
1417 the line is very difficult to correctly compute with embedded
1414 escapes. This was the source of all the coloring problems under
1418 escapes. This was the source of all the coloring problems under
1415 Win32. I think that _finally_, Win32 users have a properly
1419 Win32. I think that _finally_, Win32 users have a properly
1416 working ipython in all respects. This would never have happened
1420 working ipython in all respects. This would never have happened
1417 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1421 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1418
1422
1419 2005-01-26 *** Released version 0.6.9
1423 2005-01-26 *** Released version 0.6.9
1420
1424
1421 2005-01-25 Fernando Perez <fperez@colorado.edu>
1425 2005-01-25 Fernando Perez <fperez@colorado.edu>
1422
1426
1423 * setup.py: finally, we have a true Windows installer, thanks to
1427 * setup.py: finally, we have a true Windows installer, thanks to
1424 the excellent work of Viktor Ransmayr
1428 the excellent work of Viktor Ransmayr
1425 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1429 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1426 Windows users. The setup routine is quite a bit cleaner thanks to
1430 Windows users. The setup routine is quite a bit cleaner thanks to
1427 this, and the post-install script uses the proper functions to
1431 this, and the post-install script uses the proper functions to
1428 allow a clean de-installation using the standard Windows Control
1432 allow a clean de-installation using the standard Windows Control
1429 Panel.
1433 Panel.
1430
1434
1431 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1435 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1432 environment variable under all OSes (including win32) if
1436 environment variable under all OSes (including win32) if
1433 available. This will give consistency to win32 users who have set
1437 available. This will give consistency to win32 users who have set
1434 this variable for any reason. If os.environ['HOME'] fails, the
1438 this variable for any reason. If os.environ['HOME'] fails, the
1435 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1439 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1436
1440
1437 2005-01-24 Fernando Perez <fperez@colorado.edu>
1441 2005-01-24 Fernando Perez <fperez@colorado.edu>
1438
1442
1439 * IPython/numutils.py (empty_like): add empty_like(), similar to
1443 * IPython/numutils.py (empty_like): add empty_like(), similar to
1440 zeros_like() but taking advantage of the new empty() Numeric routine.
1444 zeros_like() but taking advantage of the new empty() Numeric routine.
1441
1445
1442 2005-01-23 *** Released version 0.6.8
1446 2005-01-23 *** Released version 0.6.8
1443
1447
1444 2005-01-22 Fernando Perez <fperez@colorado.edu>
1448 2005-01-22 Fernando Perez <fperez@colorado.edu>
1445
1449
1446 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1450 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1447 automatic show() calls. After discussing things with JDH, it
1451 automatic show() calls. After discussing things with JDH, it
1448 turns out there are too many corner cases where this can go wrong.
1452 turns out there are too many corner cases where this can go wrong.
1449 It's best not to try to be 'too smart', and simply have ipython
1453 It's best not to try to be 'too smart', and simply have ipython
1450 reproduce as much as possible the default behavior of a normal
1454 reproduce as much as possible the default behavior of a normal
1451 python shell.
1455 python shell.
1452
1456
1453 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1457 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1454 line-splitting regexp and _prefilter() to avoid calling getattr()
1458 line-splitting regexp and _prefilter() to avoid calling getattr()
1455 on assignments. This closes
1459 on assignments. This closes
1456 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1460 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1457 readline uses getattr(), so a simple <TAB> keypress is still
1461 readline uses getattr(), so a simple <TAB> keypress is still
1458 enough to trigger getattr() calls on an object.
1462 enough to trigger getattr() calls on an object.
1459
1463
1460 2005-01-21 Fernando Perez <fperez@colorado.edu>
1464 2005-01-21 Fernando Perez <fperez@colorado.edu>
1461
1465
1462 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1466 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1463 docstring under pylab so it doesn't mask the original.
1467 docstring under pylab so it doesn't mask the original.
1464
1468
1465 2005-01-21 *** Released version 0.6.7
1469 2005-01-21 *** Released version 0.6.7
1466
1470
1467 2005-01-21 Fernando Perez <fperez@colorado.edu>
1471 2005-01-21 Fernando Perez <fperez@colorado.edu>
1468
1472
1469 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1473 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1470 signal handling for win32 users in multithreaded mode.
1474 signal handling for win32 users in multithreaded mode.
1471
1475
1472 2005-01-17 Fernando Perez <fperez@colorado.edu>
1476 2005-01-17 Fernando Perez <fperez@colorado.edu>
1473
1477
1474 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1478 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1475 instances with no __init__. After a crash report by Norbert Nemec
1479 instances with no __init__. After a crash report by Norbert Nemec
1476 <Norbert-AT-nemec-online.de>.
1480 <Norbert-AT-nemec-online.de>.
1477
1481
1478 2005-01-14 Fernando Perez <fperez@colorado.edu>
1482 2005-01-14 Fernando Perez <fperez@colorado.edu>
1479
1483
1480 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1484 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1481 names for verbose exceptions, when multiple dotted names and the
1485 names for verbose exceptions, when multiple dotted names and the
1482 'parent' object were present on the same line.
1486 'parent' object were present on the same line.
1483
1487
1484 2005-01-11 Fernando Perez <fperez@colorado.edu>
1488 2005-01-11 Fernando Perez <fperez@colorado.edu>
1485
1489
1486 * IPython/genutils.py (flag_calls): new utility to trap and flag
1490 * IPython/genutils.py (flag_calls): new utility to trap and flag
1487 calls in functions. I need it to clean up matplotlib support.
1491 calls in functions. I need it to clean up matplotlib support.
1488 Also removed some deprecated code in genutils.
1492 Also removed some deprecated code in genutils.
1489
1493
1490 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1494 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1491 that matplotlib scripts called with %run, which don't call show()
1495 that matplotlib scripts called with %run, which don't call show()
1492 themselves, still have their plotting windows open.
1496 themselves, still have their plotting windows open.
1493
1497
1494 2005-01-05 Fernando Perez <fperez@colorado.edu>
1498 2005-01-05 Fernando Perez <fperez@colorado.edu>
1495
1499
1496 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1500 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1497 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1501 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1498
1502
1499 2004-12-19 Fernando Perez <fperez@colorado.edu>
1503 2004-12-19 Fernando Perez <fperez@colorado.edu>
1500
1504
1501 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1505 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1502 parent_runcode, which was an eyesore. The same result can be
1506 parent_runcode, which was an eyesore. The same result can be
1503 obtained with Python's regular superclass mechanisms.
1507 obtained with Python's regular superclass mechanisms.
1504
1508
1505 2004-12-17 Fernando Perez <fperez@colorado.edu>
1509 2004-12-17 Fernando Perez <fperez@colorado.edu>
1506
1510
1507 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1511 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1508 reported by Prabhu.
1512 reported by Prabhu.
1509 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1513 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1510 sys.stderr) instead of explicitly calling sys.stderr. This helps
1514 sys.stderr) instead of explicitly calling sys.stderr. This helps
1511 maintain our I/O abstractions clean, for future GUI embeddings.
1515 maintain our I/O abstractions clean, for future GUI embeddings.
1512
1516
1513 * IPython/genutils.py (info): added new utility for sys.stderr
1517 * IPython/genutils.py (info): added new utility for sys.stderr
1514 unified info message handling (thin wrapper around warn()).
1518 unified info message handling (thin wrapper around warn()).
1515
1519
1516 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1520 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1517 composite (dotted) names on verbose exceptions.
1521 composite (dotted) names on verbose exceptions.
1518 (VerboseTB.nullrepr): harden against another kind of errors which
1522 (VerboseTB.nullrepr): harden against another kind of errors which
1519 Python's inspect module can trigger, and which were crashing
1523 Python's inspect module can trigger, and which were crashing
1520 IPython. Thanks to a report by Marco Lombardi
1524 IPython. Thanks to a report by Marco Lombardi
1521 <mlombard-AT-ma010192.hq.eso.org>.
1525 <mlombard-AT-ma010192.hq.eso.org>.
1522
1526
1523 2004-12-13 *** Released version 0.6.6
1527 2004-12-13 *** Released version 0.6.6
1524
1528
1525 2004-12-12 Fernando Perez <fperez@colorado.edu>
1529 2004-12-12 Fernando Perez <fperez@colorado.edu>
1526
1530
1527 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1531 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1528 generated by pygtk upon initialization if it was built without
1532 generated by pygtk upon initialization if it was built without
1529 threads (for matplotlib users). After a crash reported by
1533 threads (for matplotlib users). After a crash reported by
1530 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1534 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1531
1535
1532 * IPython/ipmaker.py (make_IPython): fix small bug in the
1536 * IPython/ipmaker.py (make_IPython): fix small bug in the
1533 import_some parameter for multiple imports.
1537 import_some parameter for multiple imports.
1534
1538
1535 * IPython/iplib.py (ipmagic): simplified the interface of
1539 * IPython/iplib.py (ipmagic): simplified the interface of
1536 ipmagic() to take a single string argument, just as it would be
1540 ipmagic() to take a single string argument, just as it would be
1537 typed at the IPython cmd line.
1541 typed at the IPython cmd line.
1538 (ipalias): Added new ipalias() with an interface identical to
1542 (ipalias): Added new ipalias() with an interface identical to
1539 ipmagic(). This completes exposing a pure python interface to the
1543 ipmagic(). This completes exposing a pure python interface to the
1540 alias and magic system, which can be used in loops or more complex
1544 alias and magic system, which can be used in loops or more complex
1541 code where IPython's automatic line mangling is not active.
1545 code where IPython's automatic line mangling is not active.
1542
1546
1543 * IPython/genutils.py (timing): changed interface of timing to
1547 * IPython/genutils.py (timing): changed interface of timing to
1544 simply run code once, which is the most common case. timings()
1548 simply run code once, which is the most common case. timings()
1545 remains unchanged, for the cases where you want multiple runs.
1549 remains unchanged, for the cases where you want multiple runs.
1546
1550
1547 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1551 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1548 bug where Python2.2 crashes with exec'ing code which does not end
1552 bug where Python2.2 crashes with exec'ing code which does not end
1549 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1553 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1550 before.
1554 before.
1551
1555
1552 2004-12-10 Fernando Perez <fperez@colorado.edu>
1556 2004-12-10 Fernando Perez <fperez@colorado.edu>
1553
1557
1554 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1558 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1555 -t to -T, to accomodate the new -t flag in %run (the %run and
1559 -t to -T, to accomodate the new -t flag in %run (the %run and
1556 %prun options are kind of intermixed, and it's not easy to change
1560 %prun options are kind of intermixed, and it's not easy to change
1557 this with the limitations of python's getopt).
1561 this with the limitations of python's getopt).
1558
1562
1559 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1563 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1560 the execution of scripts. It's not as fine-tuned as timeit.py,
1564 the execution of scripts. It's not as fine-tuned as timeit.py,
1561 but it works from inside ipython (and under 2.2, which lacks
1565 but it works from inside ipython (and under 2.2, which lacks
1562 timeit.py). Optionally a number of runs > 1 can be given for
1566 timeit.py). Optionally a number of runs > 1 can be given for
1563 timing very short-running code.
1567 timing very short-running code.
1564
1568
1565 * IPython/genutils.py (uniq_stable): new routine which returns a
1569 * IPython/genutils.py (uniq_stable): new routine which returns a
1566 list of unique elements in any iterable, but in stable order of
1570 list of unique elements in any iterable, but in stable order of
1567 appearance. I needed this for the ultraTB fixes, and it's a handy
1571 appearance. I needed this for the ultraTB fixes, and it's a handy
1568 utility.
1572 utility.
1569
1573
1570 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1574 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1571 dotted names in Verbose exceptions. This had been broken since
1575 dotted names in Verbose exceptions. This had been broken since
1572 the very start, now x.y will properly be printed in a Verbose
1576 the very start, now x.y will properly be printed in a Verbose
1573 traceback, instead of x being shown and y appearing always as an
1577 traceback, instead of x being shown and y appearing always as an
1574 'undefined global'. Getting this to work was a bit tricky,
1578 'undefined global'. Getting this to work was a bit tricky,
1575 because by default python tokenizers are stateless. Saved by
1579 because by default python tokenizers are stateless. Saved by
1576 python's ability to easily add a bit of state to an arbitrary
1580 python's ability to easily add a bit of state to an arbitrary
1577 function (without needing to build a full-blown callable object).
1581 function (without needing to build a full-blown callable object).
1578
1582
1579 Also big cleanup of this code, which had horrendous runtime
1583 Also big cleanup of this code, which had horrendous runtime
1580 lookups of zillions of attributes for colorization. Moved all
1584 lookups of zillions of attributes for colorization. Moved all
1581 this code into a few templates, which make it cleaner and quicker.
1585 this code into a few templates, which make it cleaner and quicker.
1582
1586
1583 Printout quality was also improved for Verbose exceptions: one
1587 Printout quality was also improved for Verbose exceptions: one
1584 variable per line, and memory addresses are printed (this can be
1588 variable per line, and memory addresses are printed (this can be
1585 quite handy in nasty debugging situations, which is what Verbose
1589 quite handy in nasty debugging situations, which is what Verbose
1586 is for).
1590 is for).
1587
1591
1588 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1592 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1589 the command line as scripts to be loaded by embedded instances.
1593 the command line as scripts to be loaded by embedded instances.
1590 Doing so has the potential for an infinite recursion if there are
1594 Doing so has the potential for an infinite recursion if there are
1591 exceptions thrown in the process. This fixes a strange crash
1595 exceptions thrown in the process. This fixes a strange crash
1592 reported by Philippe MULLER <muller-AT-irit.fr>.
1596 reported by Philippe MULLER <muller-AT-irit.fr>.
1593
1597
1594 2004-12-09 Fernando Perez <fperez@colorado.edu>
1598 2004-12-09 Fernando Perez <fperez@colorado.edu>
1595
1599
1596 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1600 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1597 to reflect new names in matplotlib, which now expose the
1601 to reflect new names in matplotlib, which now expose the
1598 matlab-compatible interface via a pylab module instead of the
1602 matlab-compatible interface via a pylab module instead of the
1599 'matlab' name. The new code is backwards compatible, so users of
1603 'matlab' name. The new code is backwards compatible, so users of
1600 all matplotlib versions are OK. Patch by J. Hunter.
1604 all matplotlib versions are OK. Patch by J. Hunter.
1601
1605
1602 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1606 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1603 of __init__ docstrings for instances (class docstrings are already
1607 of __init__ docstrings for instances (class docstrings are already
1604 automatically printed). Instances with customized docstrings
1608 automatically printed). Instances with customized docstrings
1605 (indep. of the class) are also recognized and all 3 separate
1609 (indep. of the class) are also recognized and all 3 separate
1606 docstrings are printed (instance, class, constructor). After some
1610 docstrings are printed (instance, class, constructor). After some
1607 comments/suggestions by J. Hunter.
1611 comments/suggestions by J. Hunter.
1608
1612
1609 2004-12-05 Fernando Perez <fperez@colorado.edu>
1613 2004-12-05 Fernando Perez <fperez@colorado.edu>
1610
1614
1611 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1615 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1612 warnings when tab-completion fails and triggers an exception.
1616 warnings when tab-completion fails and triggers an exception.
1613
1617
1614 2004-12-03 Fernando Perez <fperez@colorado.edu>
1618 2004-12-03 Fernando Perez <fperez@colorado.edu>
1615
1619
1616 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1620 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1617 be triggered when using 'run -p'. An incorrect option flag was
1621 be triggered when using 'run -p'. An incorrect option flag was
1618 being set ('d' instead of 'D').
1622 being set ('d' instead of 'D').
1619 (manpage): fix missing escaped \- sign.
1623 (manpage): fix missing escaped \- sign.
1620
1624
1621 2004-11-30 *** Released version 0.6.5
1625 2004-11-30 *** Released version 0.6.5
1622
1626
1623 2004-11-30 Fernando Perez <fperez@colorado.edu>
1627 2004-11-30 Fernando Perez <fperez@colorado.edu>
1624
1628
1625 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1629 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1626 setting with -d option.
1630 setting with -d option.
1627
1631
1628 * setup.py (docfiles): Fix problem where the doc glob I was using
1632 * setup.py (docfiles): Fix problem where the doc glob I was using
1629 was COMPLETELY BROKEN. It was giving the right files by pure
1633 was COMPLETELY BROKEN. It was giving the right files by pure
1630 accident, but failed once I tried to include ipython.el. Note:
1634 accident, but failed once I tried to include ipython.el. Note:
1631 glob() does NOT allow you to do exclusion on multiple endings!
1635 glob() does NOT allow you to do exclusion on multiple endings!
1632
1636
1633 2004-11-29 Fernando Perez <fperez@colorado.edu>
1637 2004-11-29 Fernando Perez <fperez@colorado.edu>
1634
1638
1635 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1639 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1636 the manpage as the source. Better formatting & consistency.
1640 the manpage as the source. Better formatting & consistency.
1637
1641
1638 * IPython/Magic.py (magic_run): Added new -d option, to run
1642 * IPython/Magic.py (magic_run): Added new -d option, to run
1639 scripts under the control of the python pdb debugger. Note that
1643 scripts under the control of the python pdb debugger. Note that
1640 this required changing the %prun option -d to -D, to avoid a clash
1644 this required changing the %prun option -d to -D, to avoid a clash
1641 (since %run must pass options to %prun, and getopt is too dumb to
1645 (since %run must pass options to %prun, and getopt is too dumb to
1642 handle options with string values with embedded spaces). Thanks
1646 handle options with string values with embedded spaces). Thanks
1643 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1647 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1644 (magic_who_ls): added type matching to %who and %whos, so that one
1648 (magic_who_ls): added type matching to %who and %whos, so that one
1645 can filter their output to only include variables of certain
1649 can filter their output to only include variables of certain
1646 types. Another suggestion by Matthew.
1650 types. Another suggestion by Matthew.
1647 (magic_whos): Added memory summaries in kb and Mb for arrays.
1651 (magic_whos): Added memory summaries in kb and Mb for arrays.
1648 (magic_who): Improve formatting (break lines every 9 vars).
1652 (magic_who): Improve formatting (break lines every 9 vars).
1649
1653
1650 2004-11-28 Fernando Perez <fperez@colorado.edu>
1654 2004-11-28 Fernando Perez <fperez@colorado.edu>
1651
1655
1652 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1656 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1653 cache when empty lines were present.
1657 cache when empty lines were present.
1654
1658
1655 2004-11-24 Fernando Perez <fperez@colorado.edu>
1659 2004-11-24 Fernando Perez <fperez@colorado.edu>
1656
1660
1657 * IPython/usage.py (__doc__): document the re-activated threading
1661 * IPython/usage.py (__doc__): document the re-activated threading
1658 options for WX and GTK.
1662 options for WX and GTK.
1659
1663
1660 2004-11-23 Fernando Perez <fperez@colorado.edu>
1664 2004-11-23 Fernando Perez <fperez@colorado.edu>
1661
1665
1662 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1666 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1663 the -wthread and -gthread options, along with a new -tk one to try
1667 the -wthread and -gthread options, along with a new -tk one to try
1664 and coordinate Tk threading with wx/gtk. The tk support is very
1668 and coordinate Tk threading with wx/gtk. The tk support is very
1665 platform dependent, since it seems to require Tcl and Tk to be
1669 platform dependent, since it seems to require Tcl and Tk to be
1666 built with threads (Fedora1/2 appears NOT to have it, but in
1670 built with threads (Fedora1/2 appears NOT to have it, but in
1667 Prabhu's Debian boxes it works OK). But even with some Tk
1671 Prabhu's Debian boxes it works OK). But even with some Tk
1668 limitations, this is a great improvement.
1672 limitations, this is a great improvement.
1669
1673
1670 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1674 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1671 info in user prompts. Patch by Prabhu.
1675 info in user prompts. Patch by Prabhu.
1672
1676
1673 2004-11-18 Fernando Perez <fperez@colorado.edu>
1677 2004-11-18 Fernando Perez <fperez@colorado.edu>
1674
1678
1675 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1679 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1676 EOFErrors and bail, to avoid infinite loops if a non-terminating
1680 EOFErrors and bail, to avoid infinite loops if a non-terminating
1677 file is fed into ipython. Patch submitted in issue 19 by user,
1681 file is fed into ipython. Patch submitted in issue 19 by user,
1678 many thanks.
1682 many thanks.
1679
1683
1680 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1684 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1681 autoquote/parens in continuation prompts, which can cause lots of
1685 autoquote/parens in continuation prompts, which can cause lots of
1682 problems. Closes roundup issue 20.
1686 problems. Closes roundup issue 20.
1683
1687
1684 2004-11-17 Fernando Perez <fperez@colorado.edu>
1688 2004-11-17 Fernando Perez <fperez@colorado.edu>
1685
1689
1686 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1690 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1687 reported as debian bug #280505. I'm not sure my local changelog
1691 reported as debian bug #280505. I'm not sure my local changelog
1688 entry has the proper debian format (Jack?).
1692 entry has the proper debian format (Jack?).
1689
1693
1690 2004-11-08 *** Released version 0.6.4
1694 2004-11-08 *** Released version 0.6.4
1691
1695
1692 2004-11-08 Fernando Perez <fperez@colorado.edu>
1696 2004-11-08 Fernando Perez <fperez@colorado.edu>
1693
1697
1694 * IPython/iplib.py (init_readline): Fix exit message for Windows
1698 * IPython/iplib.py (init_readline): Fix exit message for Windows
1695 when readline is active. Thanks to a report by Eric Jones
1699 when readline is active. Thanks to a report by Eric Jones
1696 <eric-AT-enthought.com>.
1700 <eric-AT-enthought.com>.
1697
1701
1698 2004-11-07 Fernando Perez <fperez@colorado.edu>
1702 2004-11-07 Fernando Perez <fperez@colorado.edu>
1699
1703
1700 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1704 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1701 sometimes seen by win2k/cygwin users.
1705 sometimes seen by win2k/cygwin users.
1702
1706
1703 2004-11-06 Fernando Perez <fperez@colorado.edu>
1707 2004-11-06 Fernando Perez <fperez@colorado.edu>
1704
1708
1705 * IPython/iplib.py (interact): Change the handling of %Exit from
1709 * IPython/iplib.py (interact): Change the handling of %Exit from
1706 trying to propagate a SystemExit to an internal ipython flag.
1710 trying to propagate a SystemExit to an internal ipython flag.
1707 This is less elegant than using Python's exception mechanism, but
1711 This is less elegant than using Python's exception mechanism, but
1708 I can't get that to work reliably with threads, so under -pylab
1712 I can't get that to work reliably with threads, so under -pylab
1709 %Exit was hanging IPython. Cross-thread exception handling is
1713 %Exit was hanging IPython. Cross-thread exception handling is
1710 really a bitch. Thaks to a bug report by Stephen Walton
1714 really a bitch. Thaks to a bug report by Stephen Walton
1711 <stephen.walton-AT-csun.edu>.
1715 <stephen.walton-AT-csun.edu>.
1712
1716
1713 2004-11-04 Fernando Perez <fperez@colorado.edu>
1717 2004-11-04 Fernando Perez <fperez@colorado.edu>
1714
1718
1715 * IPython/iplib.py (raw_input_original): store a pointer to the
1719 * IPython/iplib.py (raw_input_original): store a pointer to the
1716 true raw_input to harden against code which can modify it
1720 true raw_input to harden against code which can modify it
1717 (wx.py.PyShell does this and would otherwise crash ipython).
1721 (wx.py.PyShell does this and would otherwise crash ipython).
1718 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1722 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1719
1723
1720 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1724 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1721 Ctrl-C problem, which does not mess up the input line.
1725 Ctrl-C problem, which does not mess up the input line.
1722
1726
1723 2004-11-03 Fernando Perez <fperez@colorado.edu>
1727 2004-11-03 Fernando Perez <fperez@colorado.edu>
1724
1728
1725 * IPython/Release.py: Changed licensing to BSD, in all files.
1729 * IPython/Release.py: Changed licensing to BSD, in all files.
1726 (name): lowercase name for tarball/RPM release.
1730 (name): lowercase name for tarball/RPM release.
1727
1731
1728 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1732 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1729 use throughout ipython.
1733 use throughout ipython.
1730
1734
1731 * IPython/Magic.py (Magic._ofind): Switch to using the new
1735 * IPython/Magic.py (Magic._ofind): Switch to using the new
1732 OInspect.getdoc() function.
1736 OInspect.getdoc() function.
1733
1737
1734 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1738 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1735 of the line currently being canceled via Ctrl-C. It's extremely
1739 of the line currently being canceled via Ctrl-C. It's extremely
1736 ugly, but I don't know how to do it better (the problem is one of
1740 ugly, but I don't know how to do it better (the problem is one of
1737 handling cross-thread exceptions).
1741 handling cross-thread exceptions).
1738
1742
1739 2004-10-28 Fernando Perez <fperez@colorado.edu>
1743 2004-10-28 Fernando Perez <fperez@colorado.edu>
1740
1744
1741 * IPython/Shell.py (signal_handler): add signal handlers to trap
1745 * IPython/Shell.py (signal_handler): add signal handlers to trap
1742 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1746 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1743 report by Francesc Alted.
1747 report by Francesc Alted.
1744
1748
1745 2004-10-21 Fernando Perez <fperez@colorado.edu>
1749 2004-10-21 Fernando Perez <fperez@colorado.edu>
1746
1750
1747 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1751 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1748 to % for pysh syntax extensions.
1752 to % for pysh syntax extensions.
1749
1753
1750 2004-10-09 Fernando Perez <fperez@colorado.edu>
1754 2004-10-09 Fernando Perez <fperez@colorado.edu>
1751
1755
1752 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1756 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1753 arrays to print a more useful summary, without calling str(arr).
1757 arrays to print a more useful summary, without calling str(arr).
1754 This avoids the problem of extremely lengthy computations which
1758 This avoids the problem of extremely lengthy computations which
1755 occur if arr is large, and appear to the user as a system lockup
1759 occur if arr is large, and appear to the user as a system lockup
1756 with 100% cpu activity. After a suggestion by Kristian Sandberg
1760 with 100% cpu activity. After a suggestion by Kristian Sandberg
1757 <Kristian.Sandberg@colorado.edu>.
1761 <Kristian.Sandberg@colorado.edu>.
1758 (Magic.__init__): fix bug in global magic escapes not being
1762 (Magic.__init__): fix bug in global magic escapes not being
1759 correctly set.
1763 correctly set.
1760
1764
1761 2004-10-08 Fernando Perez <fperez@colorado.edu>
1765 2004-10-08 Fernando Perez <fperez@colorado.edu>
1762
1766
1763 * IPython/Magic.py (__license__): change to absolute imports of
1767 * IPython/Magic.py (__license__): change to absolute imports of
1764 ipython's own internal packages, to start adapting to the absolute
1768 ipython's own internal packages, to start adapting to the absolute
1765 import requirement of PEP-328.
1769 import requirement of PEP-328.
1766
1770
1767 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1771 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1768 files, and standardize author/license marks through the Release
1772 files, and standardize author/license marks through the Release
1769 module instead of having per/file stuff (except for files with
1773 module instead of having per/file stuff (except for files with
1770 particular licenses, like the MIT/PSF-licensed codes).
1774 particular licenses, like the MIT/PSF-licensed codes).
1771
1775
1772 * IPython/Debugger.py: remove dead code for python 2.1
1776 * IPython/Debugger.py: remove dead code for python 2.1
1773
1777
1774 2004-10-04 Fernando Perez <fperez@colorado.edu>
1778 2004-10-04 Fernando Perez <fperez@colorado.edu>
1775
1779
1776 * IPython/iplib.py (ipmagic): New function for accessing magics
1780 * IPython/iplib.py (ipmagic): New function for accessing magics
1777 via a normal python function call.
1781 via a normal python function call.
1778
1782
1779 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1783 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1780 from '@' to '%', to accomodate the new @decorator syntax of python
1784 from '@' to '%', to accomodate the new @decorator syntax of python
1781 2.4.
1785 2.4.
1782
1786
1783 2004-09-29 Fernando Perez <fperez@colorado.edu>
1787 2004-09-29 Fernando Perez <fperez@colorado.edu>
1784
1788
1785 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1789 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1786 matplotlib.use to prevent running scripts which try to switch
1790 matplotlib.use to prevent running scripts which try to switch
1787 interactive backends from within ipython. This will just crash
1791 interactive backends from within ipython. This will just crash
1788 the python interpreter, so we can't allow it (but a detailed error
1792 the python interpreter, so we can't allow it (but a detailed error
1789 is given to the user).
1793 is given to the user).
1790
1794
1791 2004-09-28 Fernando Perez <fperez@colorado.edu>
1795 2004-09-28 Fernando Perez <fperez@colorado.edu>
1792
1796
1793 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1797 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1794 matplotlib-related fixes so that using @run with non-matplotlib
1798 matplotlib-related fixes so that using @run with non-matplotlib
1795 scripts doesn't pop up spurious plot windows. This requires
1799 scripts doesn't pop up spurious plot windows. This requires
1796 matplotlib >= 0.63, where I had to make some changes as well.
1800 matplotlib >= 0.63, where I had to make some changes as well.
1797
1801
1798 * IPython/ipmaker.py (make_IPython): update version requirement to
1802 * IPython/ipmaker.py (make_IPython): update version requirement to
1799 python 2.2.
1803 python 2.2.
1800
1804
1801 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1805 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1802 banner arg for embedded customization.
1806 banner arg for embedded customization.
1803
1807
1804 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1808 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1805 explicit uses of __IP as the IPython's instance name. Now things
1809 explicit uses of __IP as the IPython's instance name. Now things
1806 are properly handled via the shell.name value. The actual code
1810 are properly handled via the shell.name value. The actual code
1807 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1811 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1808 is much better than before. I'll clean things completely when the
1812 is much better than before. I'll clean things completely when the
1809 magic stuff gets a real overhaul.
1813 magic stuff gets a real overhaul.
1810
1814
1811 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1815 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1812 minor changes to debian dir.
1816 minor changes to debian dir.
1813
1817
1814 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1818 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1815 pointer to the shell itself in the interactive namespace even when
1819 pointer to the shell itself in the interactive namespace even when
1816 a user-supplied dict is provided. This is needed for embedding
1820 a user-supplied dict is provided. This is needed for embedding
1817 purposes (found by tests with Michel Sanner).
1821 purposes (found by tests with Michel Sanner).
1818
1822
1819 2004-09-27 Fernando Perez <fperez@colorado.edu>
1823 2004-09-27 Fernando Perez <fperez@colorado.edu>
1820
1824
1821 * IPython/UserConfig/ipythonrc: remove []{} from
1825 * IPython/UserConfig/ipythonrc: remove []{} from
1822 readline_remove_delims, so that things like [modname.<TAB> do
1826 readline_remove_delims, so that things like [modname.<TAB> do
1823 proper completion. This disables [].TAB, but that's a less common
1827 proper completion. This disables [].TAB, but that's a less common
1824 case than module names in list comprehensions, for example.
1828 case than module names in list comprehensions, for example.
1825 Thanks to a report by Andrea Riciputi.
1829 Thanks to a report by Andrea Riciputi.
1826
1830
1827 2004-09-09 Fernando Perez <fperez@colorado.edu>
1831 2004-09-09 Fernando Perez <fperez@colorado.edu>
1828
1832
1829 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1833 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1830 blocking problems in win32 and osx. Fix by John.
1834 blocking problems in win32 and osx. Fix by John.
1831
1835
1832 2004-09-08 Fernando Perez <fperez@colorado.edu>
1836 2004-09-08 Fernando Perez <fperez@colorado.edu>
1833
1837
1834 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1838 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1835 for Win32 and OSX. Fix by John Hunter.
1839 for Win32 and OSX. Fix by John Hunter.
1836
1840
1837 2004-08-30 *** Released version 0.6.3
1841 2004-08-30 *** Released version 0.6.3
1838
1842
1839 2004-08-30 Fernando Perez <fperez@colorado.edu>
1843 2004-08-30 Fernando Perez <fperez@colorado.edu>
1840
1844
1841 * setup.py (isfile): Add manpages to list of dependent files to be
1845 * setup.py (isfile): Add manpages to list of dependent files to be
1842 updated.
1846 updated.
1843
1847
1844 2004-08-27 Fernando Perez <fperez@colorado.edu>
1848 2004-08-27 Fernando Perez <fperez@colorado.edu>
1845
1849
1846 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1850 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1847 for now. They don't really work with standalone WX/GTK code
1851 for now. They don't really work with standalone WX/GTK code
1848 (though matplotlib IS working fine with both of those backends).
1852 (though matplotlib IS working fine with both of those backends).
1849 This will neeed much more testing. I disabled most things with
1853 This will neeed much more testing. I disabled most things with
1850 comments, so turning it back on later should be pretty easy.
1854 comments, so turning it back on later should be pretty easy.
1851
1855
1852 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1856 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1853 autocalling of expressions like r'foo', by modifying the line
1857 autocalling of expressions like r'foo', by modifying the line
1854 split regexp. Closes
1858 split regexp. Closes
1855 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1859 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1856 Riley <ipythonbugs-AT-sabi.net>.
1860 Riley <ipythonbugs-AT-sabi.net>.
1857 (InteractiveShell.mainloop): honor --nobanner with banner
1861 (InteractiveShell.mainloop): honor --nobanner with banner
1858 extensions.
1862 extensions.
1859
1863
1860 * IPython/Shell.py: Significant refactoring of all classes, so
1864 * IPython/Shell.py: Significant refactoring of all classes, so
1861 that we can really support ALL matplotlib backends and threading
1865 that we can really support ALL matplotlib backends and threading
1862 models (John spotted a bug with Tk which required this). Now we
1866 models (John spotted a bug with Tk which required this). Now we
1863 should support single-threaded, WX-threads and GTK-threads, both
1867 should support single-threaded, WX-threads and GTK-threads, both
1864 for generic code and for matplotlib.
1868 for generic code and for matplotlib.
1865
1869
1866 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1870 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1867 -pylab, to simplify things for users. Will also remove the pylab
1871 -pylab, to simplify things for users. Will also remove the pylab
1868 profile, since now all of matplotlib configuration is directly
1872 profile, since now all of matplotlib configuration is directly
1869 handled here. This also reduces startup time.
1873 handled here. This also reduces startup time.
1870
1874
1871 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1875 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1872 shell wasn't being correctly called. Also in IPShellWX.
1876 shell wasn't being correctly called. Also in IPShellWX.
1873
1877
1874 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1878 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1875 fine-tune banner.
1879 fine-tune banner.
1876
1880
1877 * IPython/numutils.py (spike): Deprecate these spike functions,
1881 * IPython/numutils.py (spike): Deprecate these spike functions,
1878 delete (long deprecated) gnuplot_exec handler.
1882 delete (long deprecated) gnuplot_exec handler.
1879
1883
1880 2004-08-26 Fernando Perez <fperez@colorado.edu>
1884 2004-08-26 Fernando Perez <fperez@colorado.edu>
1881
1885
1882 * ipython.1: Update for threading options, plus some others which
1886 * ipython.1: Update for threading options, plus some others which
1883 were missing.
1887 were missing.
1884
1888
1885 * IPython/ipmaker.py (__call__): Added -wthread option for
1889 * IPython/ipmaker.py (__call__): Added -wthread option for
1886 wxpython thread handling. Make sure threading options are only
1890 wxpython thread handling. Make sure threading options are only
1887 valid at the command line.
1891 valid at the command line.
1888
1892
1889 * scripts/ipython: moved shell selection into a factory function
1893 * scripts/ipython: moved shell selection into a factory function
1890 in Shell.py, to keep the starter script to a minimum.
1894 in Shell.py, to keep the starter script to a minimum.
1891
1895
1892 2004-08-25 Fernando Perez <fperez@colorado.edu>
1896 2004-08-25 Fernando Perez <fperez@colorado.edu>
1893
1897
1894 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1898 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1895 John. Along with some recent changes he made to matplotlib, the
1899 John. Along with some recent changes he made to matplotlib, the
1896 next versions of both systems should work very well together.
1900 next versions of both systems should work very well together.
1897
1901
1898 2004-08-24 Fernando Perez <fperez@colorado.edu>
1902 2004-08-24 Fernando Perez <fperez@colorado.edu>
1899
1903
1900 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1904 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1901 tried to switch the profiling to using hotshot, but I'm getting
1905 tried to switch the profiling to using hotshot, but I'm getting
1902 strange errors from prof.runctx() there. I may be misreading the
1906 strange errors from prof.runctx() there. I may be misreading the
1903 docs, but it looks weird. For now the profiling code will
1907 docs, but it looks weird. For now the profiling code will
1904 continue to use the standard profiler.
1908 continue to use the standard profiler.
1905
1909
1906 2004-08-23 Fernando Perez <fperez@colorado.edu>
1910 2004-08-23 Fernando Perez <fperez@colorado.edu>
1907
1911
1908 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1912 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1909 threaded shell, by John Hunter. It's not quite ready yet, but
1913 threaded shell, by John Hunter. It's not quite ready yet, but
1910 close.
1914 close.
1911
1915
1912 2004-08-22 Fernando Perez <fperez@colorado.edu>
1916 2004-08-22 Fernando Perez <fperez@colorado.edu>
1913
1917
1914 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1918 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1915 in Magic and ultraTB.
1919 in Magic and ultraTB.
1916
1920
1917 * ipython.1: document threading options in manpage.
1921 * ipython.1: document threading options in manpage.
1918
1922
1919 * scripts/ipython: Changed name of -thread option to -gthread,
1923 * scripts/ipython: Changed name of -thread option to -gthread,
1920 since this is GTK specific. I want to leave the door open for a
1924 since this is GTK specific. I want to leave the door open for a
1921 -wthread option for WX, which will most likely be necessary. This
1925 -wthread option for WX, which will most likely be necessary. This
1922 change affects usage and ipmaker as well.
1926 change affects usage and ipmaker as well.
1923
1927
1924 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1928 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1925 handle the matplotlib shell issues. Code by John Hunter
1929 handle the matplotlib shell issues. Code by John Hunter
1926 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1930 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1927 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1931 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1928 broken (and disabled for end users) for now, but it puts the
1932 broken (and disabled for end users) for now, but it puts the
1929 infrastructure in place.
1933 infrastructure in place.
1930
1934
1931 2004-08-21 Fernando Perez <fperez@colorado.edu>
1935 2004-08-21 Fernando Perez <fperez@colorado.edu>
1932
1936
1933 * ipythonrc-pylab: Add matplotlib support.
1937 * ipythonrc-pylab: Add matplotlib support.
1934
1938
1935 * matplotlib_config.py: new files for matplotlib support, part of
1939 * matplotlib_config.py: new files for matplotlib support, part of
1936 the pylab profile.
1940 the pylab profile.
1937
1941
1938 * IPython/usage.py (__doc__): documented the threading options.
1942 * IPython/usage.py (__doc__): documented the threading options.
1939
1943
1940 2004-08-20 Fernando Perez <fperez@colorado.edu>
1944 2004-08-20 Fernando Perez <fperez@colorado.edu>
1941
1945
1942 * ipython: Modified the main calling routine to handle the -thread
1946 * ipython: Modified the main calling routine to handle the -thread
1943 and -mpthread options. This needs to be done as a top-level hack,
1947 and -mpthread options. This needs to be done as a top-level hack,
1944 because it determines which class to instantiate for IPython
1948 because it determines which class to instantiate for IPython
1945 itself.
1949 itself.
1946
1950
1947 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1951 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1948 classes to support multithreaded GTK operation without blocking,
1952 classes to support multithreaded GTK operation without blocking,
1949 and matplotlib with all backends. This is a lot of still very
1953 and matplotlib with all backends. This is a lot of still very
1950 experimental code, and threads are tricky. So it may still have a
1954 experimental code, and threads are tricky. So it may still have a
1951 few rough edges... This code owes a lot to
1955 few rough edges... This code owes a lot to
1952 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1956 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1953 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1957 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1954 to John Hunter for all the matplotlib work.
1958 to John Hunter for all the matplotlib work.
1955
1959
1956 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1960 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1957 options for gtk thread and matplotlib support.
1961 options for gtk thread and matplotlib support.
1958
1962
1959 2004-08-16 Fernando Perez <fperez@colorado.edu>
1963 2004-08-16 Fernando Perez <fperez@colorado.edu>
1960
1964
1961 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1965 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1962 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1966 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1963 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1967 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1964
1968
1965 2004-08-11 Fernando Perez <fperez@colorado.edu>
1969 2004-08-11 Fernando Perez <fperez@colorado.edu>
1966
1970
1967 * setup.py (isfile): Fix build so documentation gets updated for
1971 * setup.py (isfile): Fix build so documentation gets updated for
1968 rpms (it was only done for .tgz builds).
1972 rpms (it was only done for .tgz builds).
1969
1973
1970 2004-08-10 Fernando Perez <fperez@colorado.edu>
1974 2004-08-10 Fernando Perez <fperez@colorado.edu>
1971
1975
1972 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1976 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1973
1977
1974 * iplib.py : Silence syntax error exceptions in tab-completion.
1978 * iplib.py : Silence syntax error exceptions in tab-completion.
1975
1979
1976 2004-08-05 Fernando Perez <fperez@colorado.edu>
1980 2004-08-05 Fernando Perez <fperez@colorado.edu>
1977
1981
1978 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1982 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1979 'color off' mark for continuation prompts. This was causing long
1983 'color off' mark for continuation prompts. This was causing long
1980 continuation lines to mis-wrap.
1984 continuation lines to mis-wrap.
1981
1985
1982 2004-08-01 Fernando Perez <fperez@colorado.edu>
1986 2004-08-01 Fernando Perez <fperez@colorado.edu>
1983
1987
1984 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1988 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1985 for building ipython to be a parameter. All this is necessary
1989 for building ipython to be a parameter. All this is necessary
1986 right now to have a multithreaded version, but this insane
1990 right now to have a multithreaded version, but this insane
1987 non-design will be cleaned up soon. For now, it's a hack that
1991 non-design will be cleaned up soon. For now, it's a hack that
1988 works.
1992 works.
1989
1993
1990 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1994 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1991 args in various places. No bugs so far, but it's a dangerous
1995 args in various places. No bugs so far, but it's a dangerous
1992 practice.
1996 practice.
1993
1997
1994 2004-07-31 Fernando Perez <fperez@colorado.edu>
1998 2004-07-31 Fernando Perez <fperez@colorado.edu>
1995
1999
1996 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2000 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1997 fix completion of files with dots in their names under most
2001 fix completion of files with dots in their names under most
1998 profiles (pysh was OK because the completion order is different).
2002 profiles (pysh was OK because the completion order is different).
1999
2003
2000 2004-07-27 Fernando Perez <fperez@colorado.edu>
2004 2004-07-27 Fernando Perez <fperez@colorado.edu>
2001
2005
2002 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2006 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2003 keywords manually, b/c the one in keyword.py was removed in python
2007 keywords manually, b/c the one in keyword.py was removed in python
2004 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2008 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2005 This is NOT a bug under python 2.3 and earlier.
2009 This is NOT a bug under python 2.3 and earlier.
2006
2010
2007 2004-07-26 Fernando Perez <fperez@colorado.edu>
2011 2004-07-26 Fernando Perez <fperez@colorado.edu>
2008
2012
2009 * IPython/ultraTB.py (VerboseTB.text): Add another
2013 * IPython/ultraTB.py (VerboseTB.text): Add another
2010 linecache.checkcache() call to try to prevent inspect.py from
2014 linecache.checkcache() call to try to prevent inspect.py from
2011 crashing under python 2.3. I think this fixes
2015 crashing under python 2.3. I think this fixes
2012 http://www.scipy.net/roundup/ipython/issue17.
2016 http://www.scipy.net/roundup/ipython/issue17.
2013
2017
2014 2004-07-26 *** Released version 0.6.2
2018 2004-07-26 *** Released version 0.6.2
2015
2019
2016 2004-07-26 Fernando Perez <fperez@colorado.edu>
2020 2004-07-26 Fernando Perez <fperez@colorado.edu>
2017
2021
2018 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2022 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2019 fail for any number.
2023 fail for any number.
2020 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2024 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2021 empty bookmarks.
2025 empty bookmarks.
2022
2026
2023 2004-07-26 *** Released version 0.6.1
2027 2004-07-26 *** Released version 0.6.1
2024
2028
2025 2004-07-26 Fernando Perez <fperez@colorado.edu>
2029 2004-07-26 Fernando Perez <fperez@colorado.edu>
2026
2030
2027 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2031 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2028
2032
2029 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2033 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2030 escaping '()[]{}' in filenames.
2034 escaping '()[]{}' in filenames.
2031
2035
2032 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2036 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2033 Python 2.2 users who lack a proper shlex.split.
2037 Python 2.2 users who lack a proper shlex.split.
2034
2038
2035 2004-07-19 Fernando Perez <fperez@colorado.edu>
2039 2004-07-19 Fernando Perez <fperez@colorado.edu>
2036
2040
2037 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2041 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2038 for reading readline's init file. I follow the normal chain:
2042 for reading readline's init file. I follow the normal chain:
2039 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2043 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2040 report by Mike Heeter. This closes
2044 report by Mike Heeter. This closes
2041 http://www.scipy.net/roundup/ipython/issue16.
2045 http://www.scipy.net/roundup/ipython/issue16.
2042
2046
2043 2004-07-18 Fernando Perez <fperez@colorado.edu>
2047 2004-07-18 Fernando Perez <fperez@colorado.edu>
2044
2048
2045 * IPython/iplib.py (__init__): Add better handling of '\' under
2049 * IPython/iplib.py (__init__): Add better handling of '\' under
2046 Win32 for filenames. After a patch by Ville.
2050 Win32 for filenames. After a patch by Ville.
2047
2051
2048 2004-07-17 Fernando Perez <fperez@colorado.edu>
2052 2004-07-17 Fernando Perez <fperez@colorado.edu>
2049
2053
2050 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2054 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2051 autocalling would be triggered for 'foo is bar' if foo is
2055 autocalling would be triggered for 'foo is bar' if foo is
2052 callable. I also cleaned up the autocall detection code to use a
2056 callable. I also cleaned up the autocall detection code to use a
2053 regexp, which is faster. Bug reported by Alexander Schmolck.
2057 regexp, which is faster. Bug reported by Alexander Schmolck.
2054
2058
2055 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2059 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2056 '?' in them would confuse the help system. Reported by Alex
2060 '?' in them would confuse the help system. Reported by Alex
2057 Schmolck.
2061 Schmolck.
2058
2062
2059 2004-07-16 Fernando Perez <fperez@colorado.edu>
2063 2004-07-16 Fernando Perez <fperez@colorado.edu>
2060
2064
2061 * IPython/GnuplotInteractive.py (__all__): added plot2.
2065 * IPython/GnuplotInteractive.py (__all__): added plot2.
2062
2066
2063 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2067 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2064 plotting dictionaries, lists or tuples of 1d arrays.
2068 plotting dictionaries, lists or tuples of 1d arrays.
2065
2069
2066 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2070 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2067 optimizations.
2071 optimizations.
2068
2072
2069 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2073 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2070 the information which was there from Janko's original IPP code:
2074 the information which was there from Janko's original IPP code:
2071
2075
2072 03.05.99 20:53 porto.ifm.uni-kiel.de
2076 03.05.99 20:53 porto.ifm.uni-kiel.de
2073 --Started changelog.
2077 --Started changelog.
2074 --make clear do what it say it does
2078 --make clear do what it say it does
2075 --added pretty output of lines from inputcache
2079 --added pretty output of lines from inputcache
2076 --Made Logger a mixin class, simplifies handling of switches
2080 --Made Logger a mixin class, simplifies handling of switches
2077 --Added own completer class. .string<TAB> expands to last history
2081 --Added own completer class. .string<TAB> expands to last history
2078 line which starts with string. The new expansion is also present
2082 line which starts with string. The new expansion is also present
2079 with Ctrl-r from the readline library. But this shows, who this
2083 with Ctrl-r from the readline library. But this shows, who this
2080 can be done for other cases.
2084 can be done for other cases.
2081 --Added convention that all shell functions should accept a
2085 --Added convention that all shell functions should accept a
2082 parameter_string This opens the door for different behaviour for
2086 parameter_string This opens the door for different behaviour for
2083 each function. @cd is a good example of this.
2087 each function. @cd is a good example of this.
2084
2088
2085 04.05.99 12:12 porto.ifm.uni-kiel.de
2089 04.05.99 12:12 porto.ifm.uni-kiel.de
2086 --added logfile rotation
2090 --added logfile rotation
2087 --added new mainloop method which freezes first the namespace
2091 --added new mainloop method which freezes first the namespace
2088
2092
2089 07.05.99 21:24 porto.ifm.uni-kiel.de
2093 07.05.99 21:24 porto.ifm.uni-kiel.de
2090 --added the docreader classes. Now there is a help system.
2094 --added the docreader classes. Now there is a help system.
2091 -This is only a first try. Currently it's not easy to put new
2095 -This is only a first try. Currently it's not easy to put new
2092 stuff in the indices. But this is the way to go. Info would be
2096 stuff in the indices. But this is the way to go. Info would be
2093 better, but HTML is every where and not everybody has an info
2097 better, but HTML is every where and not everybody has an info
2094 system installed and it's not so easy to change html-docs to info.
2098 system installed and it's not so easy to change html-docs to info.
2095 --added global logfile option
2099 --added global logfile option
2096 --there is now a hook for object inspection method pinfo needs to
2100 --there is now a hook for object inspection method pinfo needs to
2097 be provided for this. Can be reached by two '??'.
2101 be provided for this. Can be reached by two '??'.
2098
2102
2099 08.05.99 20:51 porto.ifm.uni-kiel.de
2103 08.05.99 20:51 porto.ifm.uni-kiel.de
2100 --added a README
2104 --added a README
2101 --bug in rc file. Something has changed so functions in the rc
2105 --bug in rc file. Something has changed so functions in the rc
2102 file need to reference the shell and not self. Not clear if it's a
2106 file need to reference the shell and not self. Not clear if it's a
2103 bug or feature.
2107 bug or feature.
2104 --changed rc file for new behavior
2108 --changed rc file for new behavior
2105
2109
2106 2004-07-15 Fernando Perez <fperez@colorado.edu>
2110 2004-07-15 Fernando Perez <fperez@colorado.edu>
2107
2111
2108 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2112 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2109 cache was falling out of sync in bizarre manners when multi-line
2113 cache was falling out of sync in bizarre manners when multi-line
2110 input was present. Minor optimizations and cleanup.
2114 input was present. Minor optimizations and cleanup.
2111
2115
2112 (Logger): Remove old Changelog info for cleanup. This is the
2116 (Logger): Remove old Changelog info for cleanup. This is the
2113 information which was there from Janko's original code:
2117 information which was there from Janko's original code:
2114
2118
2115 Changes to Logger: - made the default log filename a parameter
2119 Changes to Logger: - made the default log filename a parameter
2116
2120
2117 - put a check for lines beginning with !@? in log(). Needed
2121 - put a check for lines beginning with !@? in log(). Needed
2118 (even if the handlers properly log their lines) for mid-session
2122 (even if the handlers properly log their lines) for mid-session
2119 logging activation to work properly. Without this, lines logged
2123 logging activation to work properly. Without this, lines logged
2120 in mid session, which get read from the cache, would end up
2124 in mid session, which get read from the cache, would end up
2121 'bare' (with !@? in the open) in the log. Now they are caught
2125 'bare' (with !@? in the open) in the log. Now they are caught
2122 and prepended with a #.
2126 and prepended with a #.
2123
2127
2124 * IPython/iplib.py (InteractiveShell.init_readline): added check
2128 * IPython/iplib.py (InteractiveShell.init_readline): added check
2125 in case MagicCompleter fails to be defined, so we don't crash.
2129 in case MagicCompleter fails to be defined, so we don't crash.
2126
2130
2127 2004-07-13 Fernando Perez <fperez@colorado.edu>
2131 2004-07-13 Fernando Perez <fperez@colorado.edu>
2128
2132
2129 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2133 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2130 of EPS if the requested filename ends in '.eps'.
2134 of EPS if the requested filename ends in '.eps'.
2131
2135
2132 2004-07-04 Fernando Perez <fperez@colorado.edu>
2136 2004-07-04 Fernando Perez <fperez@colorado.edu>
2133
2137
2134 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2138 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2135 escaping of quotes when calling the shell.
2139 escaping of quotes when calling the shell.
2136
2140
2137 2004-07-02 Fernando Perez <fperez@colorado.edu>
2141 2004-07-02 Fernando Perez <fperez@colorado.edu>
2138
2142
2139 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2143 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2140 gettext not working because we were clobbering '_'. Fixes
2144 gettext not working because we were clobbering '_'. Fixes
2141 http://www.scipy.net/roundup/ipython/issue6.
2145 http://www.scipy.net/roundup/ipython/issue6.
2142
2146
2143 2004-07-01 Fernando Perez <fperez@colorado.edu>
2147 2004-07-01 Fernando Perez <fperez@colorado.edu>
2144
2148
2145 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2149 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2146 into @cd. Patch by Ville.
2150 into @cd. Patch by Ville.
2147
2151
2148 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2152 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2149 new function to store things after ipmaker runs. Patch by Ville.
2153 new function to store things after ipmaker runs. Patch by Ville.
2150 Eventually this will go away once ipmaker is removed and the class
2154 Eventually this will go away once ipmaker is removed and the class
2151 gets cleaned up, but for now it's ok. Key functionality here is
2155 gets cleaned up, but for now it's ok. Key functionality here is
2152 the addition of the persistent storage mechanism, a dict for
2156 the addition of the persistent storage mechanism, a dict for
2153 keeping data across sessions (for now just bookmarks, but more can
2157 keeping data across sessions (for now just bookmarks, but more can
2154 be implemented later).
2158 be implemented later).
2155
2159
2156 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2160 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2157 persistent across sections. Patch by Ville, I modified it
2161 persistent across sections. Patch by Ville, I modified it
2158 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2162 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2159 added a '-l' option to list all bookmarks.
2163 added a '-l' option to list all bookmarks.
2160
2164
2161 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2165 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2162 center for cleanup. Registered with atexit.register(). I moved
2166 center for cleanup. Registered with atexit.register(). I moved
2163 here the old exit_cleanup(). After a patch by Ville.
2167 here the old exit_cleanup(). After a patch by Ville.
2164
2168
2165 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2169 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2166 characters in the hacked shlex_split for python 2.2.
2170 characters in the hacked shlex_split for python 2.2.
2167
2171
2168 * IPython/iplib.py (file_matches): more fixes to filenames with
2172 * IPython/iplib.py (file_matches): more fixes to filenames with
2169 whitespace in them. It's not perfect, but limitations in python's
2173 whitespace in them. It's not perfect, but limitations in python's
2170 readline make it impossible to go further.
2174 readline make it impossible to go further.
2171
2175
2172 2004-06-29 Fernando Perez <fperez@colorado.edu>
2176 2004-06-29 Fernando Perez <fperez@colorado.edu>
2173
2177
2174 * IPython/iplib.py (file_matches): escape whitespace correctly in
2178 * IPython/iplib.py (file_matches): escape whitespace correctly in
2175 filename completions. Bug reported by Ville.
2179 filename completions. Bug reported by Ville.
2176
2180
2177 2004-06-28 Fernando Perez <fperez@colorado.edu>
2181 2004-06-28 Fernando Perez <fperez@colorado.edu>
2178
2182
2179 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2183 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2180 the history file will be called 'history-PROFNAME' (or just
2184 the history file will be called 'history-PROFNAME' (or just
2181 'history' if no profile is loaded). I was getting annoyed at
2185 'history' if no profile is loaded). I was getting annoyed at
2182 getting my Numerical work history clobbered by pysh sessions.
2186 getting my Numerical work history clobbered by pysh sessions.
2183
2187
2184 * IPython/iplib.py (InteractiveShell.__init__): Internal
2188 * IPython/iplib.py (InteractiveShell.__init__): Internal
2185 getoutputerror() function so that we can honor the system_verbose
2189 getoutputerror() function so that we can honor the system_verbose
2186 flag for _all_ system calls. I also added escaping of #
2190 flag for _all_ system calls. I also added escaping of #
2187 characters here to avoid confusing Itpl.
2191 characters here to avoid confusing Itpl.
2188
2192
2189 * IPython/Magic.py (shlex_split): removed call to shell in
2193 * IPython/Magic.py (shlex_split): removed call to shell in
2190 parse_options and replaced it with shlex.split(). The annoying
2194 parse_options and replaced it with shlex.split(). The annoying
2191 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2195 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2192 to backport it from 2.3, with several frail hacks (the shlex
2196 to backport it from 2.3, with several frail hacks (the shlex
2193 module is rather limited in 2.2). Thanks to a suggestion by Ville
2197 module is rather limited in 2.2). Thanks to a suggestion by Ville
2194 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2198 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2195 problem.
2199 problem.
2196
2200
2197 (Magic.magic_system_verbose): new toggle to print the actual
2201 (Magic.magic_system_verbose): new toggle to print the actual
2198 system calls made by ipython. Mainly for debugging purposes.
2202 system calls made by ipython. Mainly for debugging purposes.
2199
2203
2200 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2204 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2201 doesn't support persistence. Reported (and fix suggested) by
2205 doesn't support persistence. Reported (and fix suggested) by
2202 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2206 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2203
2207
2204 2004-06-26 Fernando Perez <fperez@colorado.edu>
2208 2004-06-26 Fernando Perez <fperez@colorado.edu>
2205
2209
2206 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2210 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2207 continue prompts.
2211 continue prompts.
2208
2212
2209 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2213 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2210 function (basically a big docstring) and a few more things here to
2214 function (basically a big docstring) and a few more things here to
2211 speedup startup. pysh.py is now very lightweight. We want because
2215 speedup startup. pysh.py is now very lightweight. We want because
2212 it gets execfile'd, while InterpreterExec gets imported, so
2216 it gets execfile'd, while InterpreterExec gets imported, so
2213 byte-compilation saves time.
2217 byte-compilation saves time.
2214
2218
2215 2004-06-25 Fernando Perez <fperez@colorado.edu>
2219 2004-06-25 Fernando Perez <fperez@colorado.edu>
2216
2220
2217 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2221 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2218 -NUM', which was recently broken.
2222 -NUM', which was recently broken.
2219
2223
2220 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2224 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2221 in multi-line input (but not !!, which doesn't make sense there).
2225 in multi-line input (but not !!, which doesn't make sense there).
2222
2226
2223 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2227 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2224 It's just too useful, and people can turn it off in the less
2228 It's just too useful, and people can turn it off in the less
2225 common cases where it's a problem.
2229 common cases where it's a problem.
2226
2230
2227 2004-06-24 Fernando Perez <fperez@colorado.edu>
2231 2004-06-24 Fernando Perez <fperez@colorado.edu>
2228
2232
2229 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2233 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2230 special syntaxes (like alias calling) is now allied in multi-line
2234 special syntaxes (like alias calling) is now allied in multi-line
2231 input. This is still _very_ experimental, but it's necessary for
2235 input. This is still _very_ experimental, but it's necessary for
2232 efficient shell usage combining python looping syntax with system
2236 efficient shell usage combining python looping syntax with system
2233 calls. For now it's restricted to aliases, I don't think it
2237 calls. For now it's restricted to aliases, I don't think it
2234 really even makes sense to have this for magics.
2238 really even makes sense to have this for magics.
2235
2239
2236 2004-06-23 Fernando Perez <fperez@colorado.edu>
2240 2004-06-23 Fernando Perez <fperez@colorado.edu>
2237
2241
2238 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2242 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2239 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2243 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2240
2244
2241 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2245 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2242 extensions under Windows (after code sent by Gary Bishop). The
2246 extensions under Windows (after code sent by Gary Bishop). The
2243 extensions considered 'executable' are stored in IPython's rc
2247 extensions considered 'executable' are stored in IPython's rc
2244 structure as win_exec_ext.
2248 structure as win_exec_ext.
2245
2249
2246 * IPython/genutils.py (shell): new function, like system() but
2250 * IPython/genutils.py (shell): new function, like system() but
2247 without return value. Very useful for interactive shell work.
2251 without return value. Very useful for interactive shell work.
2248
2252
2249 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2253 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2250 delete aliases.
2254 delete aliases.
2251
2255
2252 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2256 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2253 sure that the alias table doesn't contain python keywords.
2257 sure that the alias table doesn't contain python keywords.
2254
2258
2255 2004-06-21 Fernando Perez <fperez@colorado.edu>
2259 2004-06-21 Fernando Perez <fperez@colorado.edu>
2256
2260
2257 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2261 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2258 non-existent items are found in $PATH. Reported by Thorsten.
2262 non-existent items are found in $PATH. Reported by Thorsten.
2259
2263
2260 2004-06-20 Fernando Perez <fperez@colorado.edu>
2264 2004-06-20 Fernando Perez <fperez@colorado.edu>
2261
2265
2262 * IPython/iplib.py (complete): modified the completer so that the
2266 * IPython/iplib.py (complete): modified the completer so that the
2263 order of priorities can be easily changed at runtime.
2267 order of priorities can be easily changed at runtime.
2264
2268
2265 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2269 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2266 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2270 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2267
2271
2268 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2272 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2269 expand Python variables prepended with $ in all system calls. The
2273 expand Python variables prepended with $ in all system calls. The
2270 same was done to InteractiveShell.handle_shell_escape. Now all
2274 same was done to InteractiveShell.handle_shell_escape. Now all
2271 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2275 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2272 expansion of python variables and expressions according to the
2276 expansion of python variables and expressions according to the
2273 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2277 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2274
2278
2275 Though PEP-215 has been rejected, a similar (but simpler) one
2279 Though PEP-215 has been rejected, a similar (but simpler) one
2276 seems like it will go into Python 2.4, PEP-292 -
2280 seems like it will go into Python 2.4, PEP-292 -
2277 http://www.python.org/peps/pep-0292.html.
2281 http://www.python.org/peps/pep-0292.html.
2278
2282
2279 I'll keep the full syntax of PEP-215, since IPython has since the
2283 I'll keep the full syntax of PEP-215, since IPython has since the
2280 start used Ka-Ping Yee's reference implementation discussed there
2284 start used Ka-Ping Yee's reference implementation discussed there
2281 (Itpl), and I actually like the powerful semantics it offers.
2285 (Itpl), and I actually like the powerful semantics it offers.
2282
2286
2283 In order to access normal shell variables, the $ has to be escaped
2287 In order to access normal shell variables, the $ has to be escaped
2284 via an extra $. For example:
2288 via an extra $. For example:
2285
2289
2286 In [7]: PATH='a python variable'
2290 In [7]: PATH='a python variable'
2287
2291
2288 In [8]: !echo $PATH
2292 In [8]: !echo $PATH
2289 a python variable
2293 a python variable
2290
2294
2291 In [9]: !echo $$PATH
2295 In [9]: !echo $$PATH
2292 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2296 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2293
2297
2294 (Magic.parse_options): escape $ so the shell doesn't evaluate
2298 (Magic.parse_options): escape $ so the shell doesn't evaluate
2295 things prematurely.
2299 things prematurely.
2296
2300
2297 * IPython/iplib.py (InteractiveShell.call_alias): added the
2301 * IPython/iplib.py (InteractiveShell.call_alias): added the
2298 ability for aliases to expand python variables via $.
2302 ability for aliases to expand python variables via $.
2299
2303
2300 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2304 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2301 system, now there's a @rehash/@rehashx pair of magics. These work
2305 system, now there's a @rehash/@rehashx pair of magics. These work
2302 like the csh rehash command, and can be invoked at any time. They
2306 like the csh rehash command, and can be invoked at any time. They
2303 build a table of aliases to everything in the user's $PATH
2307 build a table of aliases to everything in the user's $PATH
2304 (@rehash uses everything, @rehashx is slower but only adds
2308 (@rehash uses everything, @rehashx is slower but only adds
2305 executable files). With this, the pysh.py-based shell profile can
2309 executable files). With this, the pysh.py-based shell profile can
2306 now simply call rehash upon startup, and full access to all
2310 now simply call rehash upon startup, and full access to all
2307 programs in the user's path is obtained.
2311 programs in the user's path is obtained.
2308
2312
2309 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2313 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2310 functionality is now fully in place. I removed the old dynamic
2314 functionality is now fully in place. I removed the old dynamic
2311 code generation based approach, in favor of a much lighter one
2315 code generation based approach, in favor of a much lighter one
2312 based on a simple dict. The advantage is that this allows me to
2316 based on a simple dict. The advantage is that this allows me to
2313 now have thousands of aliases with negligible cost (unthinkable
2317 now have thousands of aliases with negligible cost (unthinkable
2314 with the old system).
2318 with the old system).
2315
2319
2316 2004-06-19 Fernando Perez <fperez@colorado.edu>
2320 2004-06-19 Fernando Perez <fperez@colorado.edu>
2317
2321
2318 * IPython/iplib.py (__init__): extended MagicCompleter class to
2322 * IPython/iplib.py (__init__): extended MagicCompleter class to
2319 also complete (last in priority) on user aliases.
2323 also complete (last in priority) on user aliases.
2320
2324
2321 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2325 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2322 call to eval.
2326 call to eval.
2323 (ItplNS.__init__): Added a new class which functions like Itpl,
2327 (ItplNS.__init__): Added a new class which functions like Itpl,
2324 but allows configuring the namespace for the evaluation to occur
2328 but allows configuring the namespace for the evaluation to occur
2325 in.
2329 in.
2326
2330
2327 2004-06-18 Fernando Perez <fperez@colorado.edu>
2331 2004-06-18 Fernando Perez <fperez@colorado.edu>
2328
2332
2329 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2333 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2330 better message when 'exit' or 'quit' are typed (a common newbie
2334 better message when 'exit' or 'quit' are typed (a common newbie
2331 confusion).
2335 confusion).
2332
2336
2333 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2337 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2334 check for Windows users.
2338 check for Windows users.
2335
2339
2336 * IPython/iplib.py (InteractiveShell.user_setup): removed
2340 * IPython/iplib.py (InteractiveShell.user_setup): removed
2337 disabling of colors for Windows. I'll test at runtime and issue a
2341 disabling of colors for Windows. I'll test at runtime and issue a
2338 warning if Gary's readline isn't found, as to nudge users to
2342 warning if Gary's readline isn't found, as to nudge users to
2339 download it.
2343 download it.
2340
2344
2341 2004-06-16 Fernando Perez <fperez@colorado.edu>
2345 2004-06-16 Fernando Perez <fperez@colorado.edu>
2342
2346
2343 * IPython/genutils.py (Stream.__init__): changed to print errors
2347 * IPython/genutils.py (Stream.__init__): changed to print errors
2344 to sys.stderr. I had a circular dependency here. Now it's
2348 to sys.stderr. I had a circular dependency here. Now it's
2345 possible to run ipython as IDLE's shell (consider this pre-alpha,
2349 possible to run ipython as IDLE's shell (consider this pre-alpha,
2346 since true stdout things end up in the starting terminal instead
2350 since true stdout things end up in the starting terminal instead
2347 of IDLE's out).
2351 of IDLE's out).
2348
2352
2349 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2353 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2350 users who haven't # updated their prompt_in2 definitions. Remove
2354 users who haven't # updated their prompt_in2 definitions. Remove
2351 eventually.
2355 eventually.
2352 (multiple_replace): added credit to original ASPN recipe.
2356 (multiple_replace): added credit to original ASPN recipe.
2353
2357
2354 2004-06-15 Fernando Perez <fperez@colorado.edu>
2358 2004-06-15 Fernando Perez <fperez@colorado.edu>
2355
2359
2356 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2360 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2357 list of auto-defined aliases.
2361 list of auto-defined aliases.
2358
2362
2359 2004-06-13 Fernando Perez <fperez@colorado.edu>
2363 2004-06-13 Fernando Perez <fperez@colorado.edu>
2360
2364
2361 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2365 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2362 install was really requested (so setup.py can be used for other
2366 install was really requested (so setup.py can be used for other
2363 things under Windows).
2367 things under Windows).
2364
2368
2365 2004-06-10 Fernando Perez <fperez@colorado.edu>
2369 2004-06-10 Fernando Perez <fperez@colorado.edu>
2366
2370
2367 * IPython/Logger.py (Logger.create_log): Manually remove any old
2371 * IPython/Logger.py (Logger.create_log): Manually remove any old
2368 backup, since os.remove may fail under Windows. Fixes bug
2372 backup, since os.remove may fail under Windows. Fixes bug
2369 reported by Thorsten.
2373 reported by Thorsten.
2370
2374
2371 2004-06-09 Fernando Perez <fperez@colorado.edu>
2375 2004-06-09 Fernando Perez <fperez@colorado.edu>
2372
2376
2373 * examples/example-embed.py: fixed all references to %n (replaced
2377 * examples/example-embed.py: fixed all references to %n (replaced
2374 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2378 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2375 for all examples and the manual as well.
2379 for all examples and the manual as well.
2376
2380
2377 2004-06-08 Fernando Perez <fperez@colorado.edu>
2381 2004-06-08 Fernando Perez <fperez@colorado.edu>
2378
2382
2379 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2383 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2380 alignment and color management. All 3 prompt subsystems now
2384 alignment and color management. All 3 prompt subsystems now
2381 inherit from BasePrompt.
2385 inherit from BasePrompt.
2382
2386
2383 * tools/release: updates for windows installer build and tag rpms
2387 * tools/release: updates for windows installer build and tag rpms
2384 with python version (since paths are fixed).
2388 with python version (since paths are fixed).
2385
2389
2386 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2390 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2387 which will become eventually obsolete. Also fixed the default
2391 which will become eventually obsolete. Also fixed the default
2388 prompt_in2 to use \D, so at least new users start with the correct
2392 prompt_in2 to use \D, so at least new users start with the correct
2389 defaults.
2393 defaults.
2390 WARNING: Users with existing ipythonrc files will need to apply
2394 WARNING: Users with existing ipythonrc files will need to apply
2391 this fix manually!
2395 this fix manually!
2392
2396
2393 * setup.py: make windows installer (.exe). This is finally the
2397 * setup.py: make windows installer (.exe). This is finally the
2394 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2398 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2395 which I hadn't included because it required Python 2.3 (or recent
2399 which I hadn't included because it required Python 2.3 (or recent
2396 distutils).
2400 distutils).
2397
2401
2398 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2402 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2399 usage of new '\D' escape.
2403 usage of new '\D' escape.
2400
2404
2401 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2405 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2402 lacks os.getuid())
2406 lacks os.getuid())
2403 (CachedOutput.set_colors): Added the ability to turn coloring
2407 (CachedOutput.set_colors): Added the ability to turn coloring
2404 on/off with @colors even for manually defined prompt colors. It
2408 on/off with @colors even for manually defined prompt colors. It
2405 uses a nasty global, but it works safely and via the generic color
2409 uses a nasty global, but it works safely and via the generic color
2406 handling mechanism.
2410 handling mechanism.
2407 (Prompt2.__init__): Introduced new escape '\D' for continuation
2411 (Prompt2.__init__): Introduced new escape '\D' for continuation
2408 prompts. It represents the counter ('\#') as dots.
2412 prompts. It represents the counter ('\#') as dots.
2409 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2413 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2410 need to update their ipythonrc files and replace '%n' with '\D' in
2414 need to update their ipythonrc files and replace '%n' with '\D' in
2411 their prompt_in2 settings everywhere. Sorry, but there's
2415 their prompt_in2 settings everywhere. Sorry, but there's
2412 otherwise no clean way to get all prompts to properly align. The
2416 otherwise no clean way to get all prompts to properly align. The
2413 ipythonrc shipped with IPython has been updated.
2417 ipythonrc shipped with IPython has been updated.
2414
2418
2415 2004-06-07 Fernando Perez <fperez@colorado.edu>
2419 2004-06-07 Fernando Perez <fperez@colorado.edu>
2416
2420
2417 * setup.py (isfile): Pass local_icons option to latex2html, so the
2421 * setup.py (isfile): Pass local_icons option to latex2html, so the
2418 resulting HTML file is self-contained. Thanks to
2422 resulting HTML file is self-contained. Thanks to
2419 dryice-AT-liu.com.cn for the tip.
2423 dryice-AT-liu.com.cn for the tip.
2420
2424
2421 * pysh.py: I created a new profile 'shell', which implements a
2425 * pysh.py: I created a new profile 'shell', which implements a
2422 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2426 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2423 system shell, nor will it become one anytime soon. It's mainly
2427 system shell, nor will it become one anytime soon. It's mainly
2424 meant to illustrate the use of the new flexible bash-like prompts.
2428 meant to illustrate the use of the new flexible bash-like prompts.
2425 I guess it could be used by hardy souls for true shell management,
2429 I guess it could be used by hardy souls for true shell management,
2426 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2430 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2427 profile. This uses the InterpreterExec extension provided by
2431 profile. This uses the InterpreterExec extension provided by
2428 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2432 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2429
2433
2430 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2434 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2431 auto-align itself with the length of the previous input prompt
2435 auto-align itself with the length of the previous input prompt
2432 (taking into account the invisible color escapes).
2436 (taking into account the invisible color escapes).
2433 (CachedOutput.__init__): Large restructuring of this class. Now
2437 (CachedOutput.__init__): Large restructuring of this class. Now
2434 all three prompts (primary1, primary2, output) are proper objects,
2438 all three prompts (primary1, primary2, output) are proper objects,
2435 managed by the 'parent' CachedOutput class. The code is still a
2439 managed by the 'parent' CachedOutput class. The code is still a
2436 bit hackish (all prompts share state via a pointer to the cache),
2440 bit hackish (all prompts share state via a pointer to the cache),
2437 but it's overall far cleaner than before.
2441 but it's overall far cleaner than before.
2438
2442
2439 * IPython/genutils.py (getoutputerror): modified to add verbose,
2443 * IPython/genutils.py (getoutputerror): modified to add verbose,
2440 debug and header options. This makes the interface of all getout*
2444 debug and header options. This makes the interface of all getout*
2441 functions uniform.
2445 functions uniform.
2442 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2446 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2443
2447
2444 * IPython/Magic.py (Magic.default_option): added a function to
2448 * IPython/Magic.py (Magic.default_option): added a function to
2445 allow registering default options for any magic command. This
2449 allow registering default options for any magic command. This
2446 makes it easy to have profiles which customize the magics globally
2450 makes it easy to have profiles which customize the magics globally
2447 for a certain use. The values set through this function are
2451 for a certain use. The values set through this function are
2448 picked up by the parse_options() method, which all magics should
2452 picked up by the parse_options() method, which all magics should
2449 use to parse their options.
2453 use to parse their options.
2450
2454
2451 * IPython/genutils.py (warn): modified the warnings framework to
2455 * IPython/genutils.py (warn): modified the warnings framework to
2452 use the Term I/O class. I'm trying to slowly unify all of
2456 use the Term I/O class. I'm trying to slowly unify all of
2453 IPython's I/O operations to pass through Term.
2457 IPython's I/O operations to pass through Term.
2454
2458
2455 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2459 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2456 the secondary prompt to correctly match the length of the primary
2460 the secondary prompt to correctly match the length of the primary
2457 one for any prompt. Now multi-line code will properly line up
2461 one for any prompt. Now multi-line code will properly line up
2458 even for path dependent prompts, such as the new ones available
2462 even for path dependent prompts, such as the new ones available
2459 via the prompt_specials.
2463 via the prompt_specials.
2460
2464
2461 2004-06-06 Fernando Perez <fperez@colorado.edu>
2465 2004-06-06 Fernando Perez <fperez@colorado.edu>
2462
2466
2463 * IPython/Prompts.py (prompt_specials): Added the ability to have
2467 * IPython/Prompts.py (prompt_specials): Added the ability to have
2464 bash-like special sequences in the prompts, which get
2468 bash-like special sequences in the prompts, which get
2465 automatically expanded. Things like hostname, current working
2469 automatically expanded. Things like hostname, current working
2466 directory and username are implemented already, but it's easy to
2470 directory and username are implemented already, but it's easy to
2467 add more in the future. Thanks to a patch by W.J. van der Laan
2471 add more in the future. Thanks to a patch by W.J. van der Laan
2468 <gnufnork-AT-hetdigitalegat.nl>
2472 <gnufnork-AT-hetdigitalegat.nl>
2469 (prompt_specials): Added color support for prompt strings, so
2473 (prompt_specials): Added color support for prompt strings, so
2470 users can define arbitrary color setups for their prompts.
2474 users can define arbitrary color setups for their prompts.
2471
2475
2472 2004-06-05 Fernando Perez <fperez@colorado.edu>
2476 2004-06-05 Fernando Perez <fperez@colorado.edu>
2473
2477
2474 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2478 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2475 code to load Gary Bishop's readline and configure it
2479 code to load Gary Bishop's readline and configure it
2476 automatically. Thanks to Gary for help on this.
2480 automatically. Thanks to Gary for help on this.
2477
2481
2478 2004-06-01 Fernando Perez <fperez@colorado.edu>
2482 2004-06-01 Fernando Perez <fperez@colorado.edu>
2479
2483
2480 * IPython/Logger.py (Logger.create_log): fix bug for logging
2484 * IPython/Logger.py (Logger.create_log): fix bug for logging
2481 with no filename (previous fix was incomplete).
2485 with no filename (previous fix was incomplete).
2482
2486
2483 2004-05-25 Fernando Perez <fperez@colorado.edu>
2487 2004-05-25 Fernando Perez <fperez@colorado.edu>
2484
2488
2485 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2489 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2486 parens would get passed to the shell.
2490 parens would get passed to the shell.
2487
2491
2488 2004-05-20 Fernando Perez <fperez@colorado.edu>
2492 2004-05-20 Fernando Perez <fperez@colorado.edu>
2489
2493
2490 * IPython/Magic.py (Magic.magic_prun): changed default profile
2494 * IPython/Magic.py (Magic.magic_prun): changed default profile
2491 sort order to 'time' (the more common profiling need).
2495 sort order to 'time' (the more common profiling need).
2492
2496
2493 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2497 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2494 so that source code shown is guaranteed in sync with the file on
2498 so that source code shown is guaranteed in sync with the file on
2495 disk (also changed in psource). Similar fix to the one for
2499 disk (also changed in psource). Similar fix to the one for
2496 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2500 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2497 <yann.ledu-AT-noos.fr>.
2501 <yann.ledu-AT-noos.fr>.
2498
2502
2499 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2503 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2500 with a single option would not be correctly parsed. Closes
2504 with a single option would not be correctly parsed. Closes
2501 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2505 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2502 introduced in 0.6.0 (on 2004-05-06).
2506 introduced in 0.6.0 (on 2004-05-06).
2503
2507
2504 2004-05-13 *** Released version 0.6.0
2508 2004-05-13 *** Released version 0.6.0
2505
2509
2506 2004-05-13 Fernando Perez <fperez@colorado.edu>
2510 2004-05-13 Fernando Perez <fperez@colorado.edu>
2507
2511
2508 * debian/: Added debian/ directory to CVS, so that debian support
2512 * debian/: Added debian/ directory to CVS, so that debian support
2509 is publicly accessible. The debian package is maintained by Jack
2513 is publicly accessible. The debian package is maintained by Jack
2510 Moffit <jack-AT-xiph.org>.
2514 Moffit <jack-AT-xiph.org>.
2511
2515
2512 * Documentation: included the notes about an ipython-based system
2516 * Documentation: included the notes about an ipython-based system
2513 shell (the hypothetical 'pysh') into the new_design.pdf document,
2517 shell (the hypothetical 'pysh') into the new_design.pdf document,
2514 so that these ideas get distributed to users along with the
2518 so that these ideas get distributed to users along with the
2515 official documentation.
2519 official documentation.
2516
2520
2517 2004-05-10 Fernando Perez <fperez@colorado.edu>
2521 2004-05-10 Fernando Perez <fperez@colorado.edu>
2518
2522
2519 * IPython/Logger.py (Logger.create_log): fix recently introduced
2523 * IPython/Logger.py (Logger.create_log): fix recently introduced
2520 bug (misindented line) where logstart would fail when not given an
2524 bug (misindented line) where logstart would fail when not given an
2521 explicit filename.
2525 explicit filename.
2522
2526
2523 2004-05-09 Fernando Perez <fperez@colorado.edu>
2527 2004-05-09 Fernando Perez <fperez@colorado.edu>
2524
2528
2525 * IPython/Magic.py (Magic.parse_options): skip system call when
2529 * IPython/Magic.py (Magic.parse_options): skip system call when
2526 there are no options to look for. Faster, cleaner for the common
2530 there are no options to look for. Faster, cleaner for the common
2527 case.
2531 case.
2528
2532
2529 * Documentation: many updates to the manual: describing Windows
2533 * Documentation: many updates to the manual: describing Windows
2530 support better, Gnuplot updates, credits, misc small stuff. Also
2534 support better, Gnuplot updates, credits, misc small stuff. Also
2531 updated the new_design doc a bit.
2535 updated the new_design doc a bit.
2532
2536
2533 2004-05-06 *** Released version 0.6.0.rc1
2537 2004-05-06 *** Released version 0.6.0.rc1
2534
2538
2535 2004-05-06 Fernando Perez <fperez@colorado.edu>
2539 2004-05-06 Fernando Perez <fperez@colorado.edu>
2536
2540
2537 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2541 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2538 operations to use the vastly more efficient list/''.join() method.
2542 operations to use the vastly more efficient list/''.join() method.
2539 (FormattedTB.text): Fix
2543 (FormattedTB.text): Fix
2540 http://www.scipy.net/roundup/ipython/issue12 - exception source
2544 http://www.scipy.net/roundup/ipython/issue12 - exception source
2541 extract not updated after reload. Thanks to Mike Salib
2545 extract not updated after reload. Thanks to Mike Salib
2542 <msalib-AT-mit.edu> for pinning the source of the problem.
2546 <msalib-AT-mit.edu> for pinning the source of the problem.
2543 Fortunately, the solution works inside ipython and doesn't require
2547 Fortunately, the solution works inside ipython and doesn't require
2544 any changes to python proper.
2548 any changes to python proper.
2545
2549
2546 * IPython/Magic.py (Magic.parse_options): Improved to process the
2550 * IPython/Magic.py (Magic.parse_options): Improved to process the
2547 argument list as a true shell would (by actually using the
2551 argument list as a true shell would (by actually using the
2548 underlying system shell). This way, all @magics automatically get
2552 underlying system shell). This way, all @magics automatically get
2549 shell expansion for variables. Thanks to a comment by Alex
2553 shell expansion for variables. Thanks to a comment by Alex
2550 Schmolck.
2554 Schmolck.
2551
2555
2552 2004-04-04 Fernando Perez <fperez@colorado.edu>
2556 2004-04-04 Fernando Perez <fperez@colorado.edu>
2553
2557
2554 * IPython/iplib.py (InteractiveShell.interact): Added a special
2558 * IPython/iplib.py (InteractiveShell.interact): Added a special
2555 trap for a debugger quit exception, which is basically impossible
2559 trap for a debugger quit exception, which is basically impossible
2556 to handle by normal mechanisms, given what pdb does to the stack.
2560 to handle by normal mechanisms, given what pdb does to the stack.
2557 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2561 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2558
2562
2559 2004-04-03 Fernando Perez <fperez@colorado.edu>
2563 2004-04-03 Fernando Perez <fperez@colorado.edu>
2560
2564
2561 * IPython/genutils.py (Term): Standardized the names of the Term
2565 * IPython/genutils.py (Term): Standardized the names of the Term
2562 class streams to cin/cout/cerr, following C++ naming conventions
2566 class streams to cin/cout/cerr, following C++ naming conventions
2563 (I can't use in/out/err because 'in' is not a valid attribute
2567 (I can't use in/out/err because 'in' is not a valid attribute
2564 name).
2568 name).
2565
2569
2566 * IPython/iplib.py (InteractiveShell.interact): don't increment
2570 * IPython/iplib.py (InteractiveShell.interact): don't increment
2567 the prompt if there's no user input. By Daniel 'Dang' Griffith
2571 the prompt if there's no user input. By Daniel 'Dang' Griffith
2568 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2572 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2569 Francois Pinard.
2573 Francois Pinard.
2570
2574
2571 2004-04-02 Fernando Perez <fperez@colorado.edu>
2575 2004-04-02 Fernando Perez <fperez@colorado.edu>
2572
2576
2573 * IPython/genutils.py (Stream.__init__): Modified to survive at
2577 * IPython/genutils.py (Stream.__init__): Modified to survive at
2574 least importing in contexts where stdin/out/err aren't true file
2578 least importing in contexts where stdin/out/err aren't true file
2575 objects, such as PyCrust (they lack fileno() and mode). However,
2579 objects, such as PyCrust (they lack fileno() and mode). However,
2576 the recovery facilities which rely on these things existing will
2580 the recovery facilities which rely on these things existing will
2577 not work.
2581 not work.
2578
2582
2579 2004-04-01 Fernando Perez <fperez@colorado.edu>
2583 2004-04-01 Fernando Perez <fperez@colorado.edu>
2580
2584
2581 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2585 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2582 use the new getoutputerror() function, so it properly
2586 use the new getoutputerror() function, so it properly
2583 distinguishes stdout/err.
2587 distinguishes stdout/err.
2584
2588
2585 * IPython/genutils.py (getoutputerror): added a function to
2589 * IPython/genutils.py (getoutputerror): added a function to
2586 capture separately the standard output and error of a command.
2590 capture separately the standard output and error of a command.
2587 After a comment from dang on the mailing lists. This code is
2591 After a comment from dang on the mailing lists. This code is
2588 basically a modified version of commands.getstatusoutput(), from
2592 basically a modified version of commands.getstatusoutput(), from
2589 the standard library.
2593 the standard library.
2590
2594
2591 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2595 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2592 '!!' as a special syntax (shorthand) to access @sx.
2596 '!!' as a special syntax (shorthand) to access @sx.
2593
2597
2594 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2598 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2595 command and return its output as a list split on '\n'.
2599 command and return its output as a list split on '\n'.
2596
2600
2597 2004-03-31 Fernando Perez <fperez@colorado.edu>
2601 2004-03-31 Fernando Perez <fperez@colorado.edu>
2598
2602
2599 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2603 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2600 method to dictionaries used as FakeModule instances if they lack
2604 method to dictionaries used as FakeModule instances if they lack
2601 it. At least pydoc in python2.3 breaks for runtime-defined
2605 it. At least pydoc in python2.3 breaks for runtime-defined
2602 functions without this hack. At some point I need to _really_
2606 functions without this hack. At some point I need to _really_
2603 understand what FakeModule is doing, because it's a gross hack.
2607 understand what FakeModule is doing, because it's a gross hack.
2604 But it solves Arnd's problem for now...
2608 But it solves Arnd's problem for now...
2605
2609
2606 2004-02-27 Fernando Perez <fperez@colorado.edu>
2610 2004-02-27 Fernando Perez <fperez@colorado.edu>
2607
2611
2608 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2612 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2609 mode would behave erratically. Also increased the number of
2613 mode would behave erratically. Also increased the number of
2610 possible logs in rotate mod to 999. Thanks to Rod Holland
2614 possible logs in rotate mod to 999. Thanks to Rod Holland
2611 <rhh@StructureLABS.com> for the report and fixes.
2615 <rhh@StructureLABS.com> for the report and fixes.
2612
2616
2613 2004-02-26 Fernando Perez <fperez@colorado.edu>
2617 2004-02-26 Fernando Perez <fperez@colorado.edu>
2614
2618
2615 * IPython/genutils.py (page): Check that the curses module really
2619 * IPython/genutils.py (page): Check that the curses module really
2616 has the initscr attribute before trying to use it. For some
2620 has the initscr attribute before trying to use it. For some
2617 reason, the Solaris curses module is missing this. I think this
2621 reason, the Solaris curses module is missing this. I think this
2618 should be considered a Solaris python bug, but I'm not sure.
2622 should be considered a Solaris python bug, but I'm not sure.
2619
2623
2620 2004-01-17 Fernando Perez <fperez@colorado.edu>
2624 2004-01-17 Fernando Perez <fperez@colorado.edu>
2621
2625
2622 * IPython/genutils.py (Stream.__init__): Changes to try to make
2626 * IPython/genutils.py (Stream.__init__): Changes to try to make
2623 ipython robust against stdin/out/err being closed by the user.
2627 ipython robust against stdin/out/err being closed by the user.
2624 This is 'user error' (and blocks a normal python session, at least
2628 This is 'user error' (and blocks a normal python session, at least
2625 the stdout case). However, Ipython should be able to survive such
2629 the stdout case). However, Ipython should be able to survive such
2626 instances of abuse as gracefully as possible. To simplify the
2630 instances of abuse as gracefully as possible. To simplify the
2627 coding and maintain compatibility with Gary Bishop's Term
2631 coding and maintain compatibility with Gary Bishop's Term
2628 contributions, I've made use of classmethods for this. I think
2632 contributions, I've made use of classmethods for this. I think
2629 this introduces a dependency on python 2.2.
2633 this introduces a dependency on python 2.2.
2630
2634
2631 2004-01-13 Fernando Perez <fperez@colorado.edu>
2635 2004-01-13 Fernando Perez <fperez@colorado.edu>
2632
2636
2633 * IPython/numutils.py (exp_safe): simplified the code a bit and
2637 * IPython/numutils.py (exp_safe): simplified the code a bit and
2634 removed the need for importing the kinds module altogether.
2638 removed the need for importing the kinds module altogether.
2635
2639
2636 2004-01-06 Fernando Perez <fperez@colorado.edu>
2640 2004-01-06 Fernando Perez <fperez@colorado.edu>
2637
2641
2638 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2642 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2639 a magic function instead, after some community feedback. No
2643 a magic function instead, after some community feedback. No
2640 special syntax will exist for it, but its name is deliberately
2644 special syntax will exist for it, but its name is deliberately
2641 very short.
2645 very short.
2642
2646
2643 2003-12-20 Fernando Perez <fperez@colorado.edu>
2647 2003-12-20 Fernando Perez <fperez@colorado.edu>
2644
2648
2645 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2649 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2646 new functionality, to automagically assign the result of a shell
2650 new functionality, to automagically assign the result of a shell
2647 command to a variable. I'll solicit some community feedback on
2651 command to a variable. I'll solicit some community feedback on
2648 this before making it permanent.
2652 this before making it permanent.
2649
2653
2650 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2654 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2651 requested about callables for which inspect couldn't obtain a
2655 requested about callables for which inspect couldn't obtain a
2652 proper argspec. Thanks to a crash report sent by Etienne
2656 proper argspec. Thanks to a crash report sent by Etienne
2653 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2657 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2654
2658
2655 2003-12-09 Fernando Perez <fperez@colorado.edu>
2659 2003-12-09 Fernando Perez <fperez@colorado.edu>
2656
2660
2657 * IPython/genutils.py (page): patch for the pager to work across
2661 * IPython/genutils.py (page): patch for the pager to work across
2658 various versions of Windows. By Gary Bishop.
2662 various versions of Windows. By Gary Bishop.
2659
2663
2660 2003-12-04 Fernando Perez <fperez@colorado.edu>
2664 2003-12-04 Fernando Perez <fperez@colorado.edu>
2661
2665
2662 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2666 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2663 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2667 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2664 While I tested this and it looks ok, there may still be corner
2668 While I tested this and it looks ok, there may still be corner
2665 cases I've missed.
2669 cases I've missed.
2666
2670
2667 2003-12-01 Fernando Perez <fperez@colorado.edu>
2671 2003-12-01 Fernando Perez <fperez@colorado.edu>
2668
2672
2669 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2673 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2670 where a line like 'p,q=1,2' would fail because the automagic
2674 where a line like 'p,q=1,2' would fail because the automagic
2671 system would be triggered for @p.
2675 system would be triggered for @p.
2672
2676
2673 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2677 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2674 cleanups, code unmodified.
2678 cleanups, code unmodified.
2675
2679
2676 * IPython/genutils.py (Term): added a class for IPython to handle
2680 * IPython/genutils.py (Term): added a class for IPython to handle
2677 output. In most cases it will just be a proxy for stdout/err, but
2681 output. In most cases it will just be a proxy for stdout/err, but
2678 having this allows modifications to be made for some platforms,
2682 having this allows modifications to be made for some platforms,
2679 such as handling color escapes under Windows. All of this code
2683 such as handling color escapes under Windows. All of this code
2680 was contributed by Gary Bishop, with minor modifications by me.
2684 was contributed by Gary Bishop, with minor modifications by me.
2681 The actual changes affect many files.
2685 The actual changes affect many files.
2682
2686
2683 2003-11-30 Fernando Perez <fperez@colorado.edu>
2687 2003-11-30 Fernando Perez <fperez@colorado.edu>
2684
2688
2685 * IPython/iplib.py (file_matches): new completion code, courtesy
2689 * IPython/iplib.py (file_matches): new completion code, courtesy
2686 of Jeff Collins. This enables filename completion again under
2690 of Jeff Collins. This enables filename completion again under
2687 python 2.3, which disabled it at the C level.
2691 python 2.3, which disabled it at the C level.
2688
2692
2689 2003-11-11 Fernando Perez <fperez@colorado.edu>
2693 2003-11-11 Fernando Perez <fperez@colorado.edu>
2690
2694
2691 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2695 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2692 for Numeric.array(map(...)), but often convenient.
2696 for Numeric.array(map(...)), but often convenient.
2693
2697
2694 2003-11-05 Fernando Perez <fperez@colorado.edu>
2698 2003-11-05 Fernando Perez <fperez@colorado.edu>
2695
2699
2696 * IPython/numutils.py (frange): Changed a call from int() to
2700 * IPython/numutils.py (frange): Changed a call from int() to
2697 int(round()) to prevent a problem reported with arange() in the
2701 int(round()) to prevent a problem reported with arange() in the
2698 numpy list.
2702 numpy list.
2699
2703
2700 2003-10-06 Fernando Perez <fperez@colorado.edu>
2704 2003-10-06 Fernando Perez <fperez@colorado.edu>
2701
2705
2702 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2706 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2703 prevent crashes if sys lacks an argv attribute (it happens with
2707 prevent crashes if sys lacks an argv attribute (it happens with
2704 embedded interpreters which build a bare-bones sys module).
2708 embedded interpreters which build a bare-bones sys module).
2705 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2709 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2706
2710
2707 2003-09-24 Fernando Perez <fperez@colorado.edu>
2711 2003-09-24 Fernando Perez <fperez@colorado.edu>
2708
2712
2709 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2713 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2710 to protect against poorly written user objects where __getattr__
2714 to protect against poorly written user objects where __getattr__
2711 raises exceptions other than AttributeError. Thanks to a bug
2715 raises exceptions other than AttributeError. Thanks to a bug
2712 report by Oliver Sander <osander-AT-gmx.de>.
2716 report by Oliver Sander <osander-AT-gmx.de>.
2713
2717
2714 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2718 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2715 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2719 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2716
2720
2717 2003-09-09 Fernando Perez <fperez@colorado.edu>
2721 2003-09-09 Fernando Perez <fperez@colorado.edu>
2718
2722
2719 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2723 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2720 unpacking a list whith a callable as first element would
2724 unpacking a list whith a callable as first element would
2721 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2725 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2722 Collins.
2726 Collins.
2723
2727
2724 2003-08-25 *** Released version 0.5.0
2728 2003-08-25 *** Released version 0.5.0
2725
2729
2726 2003-08-22 Fernando Perez <fperez@colorado.edu>
2730 2003-08-22 Fernando Perez <fperez@colorado.edu>
2727
2731
2728 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2732 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2729 improperly defined user exceptions. Thanks to feedback from Mark
2733 improperly defined user exceptions. Thanks to feedback from Mark
2730 Russell <mrussell-AT-verio.net>.
2734 Russell <mrussell-AT-verio.net>.
2731
2735
2732 2003-08-20 Fernando Perez <fperez@colorado.edu>
2736 2003-08-20 Fernando Perez <fperez@colorado.edu>
2733
2737
2734 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2738 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2735 printing so that it would print multi-line string forms starting
2739 printing so that it would print multi-line string forms starting
2736 with a new line. This way the formatting is better respected for
2740 with a new line. This way the formatting is better respected for
2737 objects which work hard to make nice string forms.
2741 objects which work hard to make nice string forms.
2738
2742
2739 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2743 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2740 autocall would overtake data access for objects with both
2744 autocall would overtake data access for objects with both
2741 __getitem__ and __call__.
2745 __getitem__ and __call__.
2742
2746
2743 2003-08-19 *** Released version 0.5.0-rc1
2747 2003-08-19 *** Released version 0.5.0-rc1
2744
2748
2745 2003-08-19 Fernando Perez <fperez@colorado.edu>
2749 2003-08-19 Fernando Perez <fperez@colorado.edu>
2746
2750
2747 * IPython/deep_reload.py (load_tail): single tiny change here
2751 * IPython/deep_reload.py (load_tail): single tiny change here
2748 seems to fix the long-standing bug of dreload() failing to work
2752 seems to fix the long-standing bug of dreload() failing to work
2749 for dotted names. But this module is pretty tricky, so I may have
2753 for dotted names. But this module is pretty tricky, so I may have
2750 missed some subtlety. Needs more testing!.
2754 missed some subtlety. Needs more testing!.
2751
2755
2752 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2756 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2753 exceptions which have badly implemented __str__ methods.
2757 exceptions which have badly implemented __str__ methods.
2754 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2758 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2755 which I've been getting reports about from Python 2.3 users. I
2759 which I've been getting reports about from Python 2.3 users. I
2756 wish I had a simple test case to reproduce the problem, so I could
2760 wish I had a simple test case to reproduce the problem, so I could
2757 either write a cleaner workaround or file a bug report if
2761 either write a cleaner workaround or file a bug report if
2758 necessary.
2762 necessary.
2759
2763
2760 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2764 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2761 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2765 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2762 a bug report by Tjabo Kloppenburg.
2766 a bug report by Tjabo Kloppenburg.
2763
2767
2764 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2768 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2765 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2769 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2766 seems rather unstable. Thanks to a bug report by Tjabo
2770 seems rather unstable. Thanks to a bug report by Tjabo
2767 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2771 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2768
2772
2769 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2773 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2770 this out soon because of the critical fixes in the inner loop for
2774 this out soon because of the critical fixes in the inner loop for
2771 generators.
2775 generators.
2772
2776
2773 * IPython/Magic.py (Magic.getargspec): removed. This (and
2777 * IPython/Magic.py (Magic.getargspec): removed. This (and
2774 _get_def) have been obsoleted by OInspect for a long time, I
2778 _get_def) have been obsoleted by OInspect for a long time, I
2775 hadn't noticed that they were dead code.
2779 hadn't noticed that they were dead code.
2776 (Magic._ofind): restored _ofind functionality for a few literals
2780 (Magic._ofind): restored _ofind functionality for a few literals
2777 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2781 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2778 for things like "hello".capitalize?, since that would require a
2782 for things like "hello".capitalize?, since that would require a
2779 potentially dangerous eval() again.
2783 potentially dangerous eval() again.
2780
2784
2781 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2785 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2782 logic a bit more to clean up the escapes handling and minimize the
2786 logic a bit more to clean up the escapes handling and minimize the
2783 use of _ofind to only necessary cases. The interactive 'feel' of
2787 use of _ofind to only necessary cases. The interactive 'feel' of
2784 IPython should have improved quite a bit with the changes in
2788 IPython should have improved quite a bit with the changes in
2785 _prefilter and _ofind (besides being far safer than before).
2789 _prefilter and _ofind (besides being far safer than before).
2786
2790
2787 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2791 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2788 obscure, never reported). Edit would fail to find the object to
2792 obscure, never reported). Edit would fail to find the object to
2789 edit under some circumstances.
2793 edit under some circumstances.
2790 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2794 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2791 which were causing double-calling of generators. Those eval calls
2795 which were causing double-calling of generators. Those eval calls
2792 were _very_ dangerous, since code with side effects could be
2796 were _very_ dangerous, since code with side effects could be
2793 triggered. As they say, 'eval is evil'... These were the
2797 triggered. As they say, 'eval is evil'... These were the
2794 nastiest evals in IPython. Besides, _ofind is now far simpler,
2798 nastiest evals in IPython. Besides, _ofind is now far simpler,
2795 and it should also be quite a bit faster. Its use of inspect is
2799 and it should also be quite a bit faster. Its use of inspect is
2796 also safer, so perhaps some of the inspect-related crashes I've
2800 also safer, so perhaps some of the inspect-related crashes I've
2797 seen lately with Python 2.3 might be taken care of. That will
2801 seen lately with Python 2.3 might be taken care of. That will
2798 need more testing.
2802 need more testing.
2799
2803
2800 2003-08-17 Fernando Perez <fperez@colorado.edu>
2804 2003-08-17 Fernando Perez <fperez@colorado.edu>
2801
2805
2802 * IPython/iplib.py (InteractiveShell._prefilter): significant
2806 * IPython/iplib.py (InteractiveShell._prefilter): significant
2803 simplifications to the logic for handling user escapes. Faster
2807 simplifications to the logic for handling user escapes. Faster
2804 and simpler code.
2808 and simpler code.
2805
2809
2806 2003-08-14 Fernando Perez <fperez@colorado.edu>
2810 2003-08-14 Fernando Perez <fperez@colorado.edu>
2807
2811
2808 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2812 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2809 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2813 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2810 but it should be quite a bit faster. And the recursive version
2814 but it should be quite a bit faster. And the recursive version
2811 generated O(log N) intermediate storage for all rank>1 arrays,
2815 generated O(log N) intermediate storage for all rank>1 arrays,
2812 even if they were contiguous.
2816 even if they were contiguous.
2813 (l1norm): Added this function.
2817 (l1norm): Added this function.
2814 (norm): Added this function for arbitrary norms (including
2818 (norm): Added this function for arbitrary norms (including
2815 l-infinity). l1 and l2 are still special cases for convenience
2819 l-infinity). l1 and l2 are still special cases for convenience
2816 and speed.
2820 and speed.
2817
2821
2818 2003-08-03 Fernando Perez <fperez@colorado.edu>
2822 2003-08-03 Fernando Perez <fperez@colorado.edu>
2819
2823
2820 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2824 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2821 exceptions, which now raise PendingDeprecationWarnings in Python
2825 exceptions, which now raise PendingDeprecationWarnings in Python
2822 2.3. There were some in Magic and some in Gnuplot2.
2826 2.3. There were some in Magic and some in Gnuplot2.
2823
2827
2824 2003-06-30 Fernando Perez <fperez@colorado.edu>
2828 2003-06-30 Fernando Perez <fperez@colorado.edu>
2825
2829
2826 * IPython/genutils.py (page): modified to call curses only for
2830 * IPython/genutils.py (page): modified to call curses only for
2827 terminals where TERM=='xterm'. After problems under many other
2831 terminals where TERM=='xterm'. After problems under many other
2828 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2832 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2829
2833
2830 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2834 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2831 would be triggered when readline was absent. This was just an old
2835 would be triggered when readline was absent. This was just an old
2832 debugging statement I'd forgotten to take out.
2836 debugging statement I'd forgotten to take out.
2833
2837
2834 2003-06-20 Fernando Perez <fperez@colorado.edu>
2838 2003-06-20 Fernando Perez <fperez@colorado.edu>
2835
2839
2836 * IPython/genutils.py (clock): modified to return only user time
2840 * IPython/genutils.py (clock): modified to return only user time
2837 (not counting system time), after a discussion on scipy. While
2841 (not counting system time), after a discussion on scipy. While
2838 system time may be a useful quantity occasionally, it may much
2842 system time may be a useful quantity occasionally, it may much
2839 more easily be skewed by occasional swapping or other similar
2843 more easily be skewed by occasional swapping or other similar
2840 activity.
2844 activity.
2841
2845
2842 2003-06-05 Fernando Perez <fperez@colorado.edu>
2846 2003-06-05 Fernando Perez <fperez@colorado.edu>
2843
2847
2844 * IPython/numutils.py (identity): new function, for building
2848 * IPython/numutils.py (identity): new function, for building
2845 arbitrary rank Kronecker deltas (mostly backwards compatible with
2849 arbitrary rank Kronecker deltas (mostly backwards compatible with
2846 Numeric.identity)
2850 Numeric.identity)
2847
2851
2848 2003-06-03 Fernando Perez <fperez@colorado.edu>
2852 2003-06-03 Fernando Perez <fperez@colorado.edu>
2849
2853
2850 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2854 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2851 arguments passed to magics with spaces, to allow trailing '\' to
2855 arguments passed to magics with spaces, to allow trailing '\' to
2852 work normally (mainly for Windows users).
2856 work normally (mainly for Windows users).
2853
2857
2854 2003-05-29 Fernando Perez <fperez@colorado.edu>
2858 2003-05-29 Fernando Perez <fperez@colorado.edu>
2855
2859
2856 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2860 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2857 instead of pydoc.help. This fixes a bizarre behavior where
2861 instead of pydoc.help. This fixes a bizarre behavior where
2858 printing '%s' % locals() would trigger the help system. Now
2862 printing '%s' % locals() would trigger the help system. Now
2859 ipython behaves like normal python does.
2863 ipython behaves like normal python does.
2860
2864
2861 Note that if one does 'from pydoc import help', the bizarre
2865 Note that if one does 'from pydoc import help', the bizarre
2862 behavior returns, but this will also happen in normal python, so
2866 behavior returns, but this will also happen in normal python, so
2863 it's not an ipython bug anymore (it has to do with how pydoc.help
2867 it's not an ipython bug anymore (it has to do with how pydoc.help
2864 is implemented).
2868 is implemented).
2865
2869
2866 2003-05-22 Fernando Perez <fperez@colorado.edu>
2870 2003-05-22 Fernando Perez <fperez@colorado.edu>
2867
2871
2868 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2872 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2869 return [] instead of None when nothing matches, also match to end
2873 return [] instead of None when nothing matches, also match to end
2870 of line. Patch by Gary Bishop.
2874 of line. Patch by Gary Bishop.
2871
2875
2872 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2876 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2873 protection as before, for files passed on the command line. This
2877 protection as before, for files passed on the command line. This
2874 prevents the CrashHandler from kicking in if user files call into
2878 prevents the CrashHandler from kicking in if user files call into
2875 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2879 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2876 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2880 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2877
2881
2878 2003-05-20 *** Released version 0.4.0
2882 2003-05-20 *** Released version 0.4.0
2879
2883
2880 2003-05-20 Fernando Perez <fperez@colorado.edu>
2884 2003-05-20 Fernando Perez <fperez@colorado.edu>
2881
2885
2882 * setup.py: added support for manpages. It's a bit hackish b/c of
2886 * setup.py: added support for manpages. It's a bit hackish b/c of
2883 a bug in the way the bdist_rpm distutils target handles gzipped
2887 a bug in the way the bdist_rpm distutils target handles gzipped
2884 manpages, but it works. After a patch by Jack.
2888 manpages, but it works. After a patch by Jack.
2885
2889
2886 2003-05-19 Fernando Perez <fperez@colorado.edu>
2890 2003-05-19 Fernando Perez <fperez@colorado.edu>
2887
2891
2888 * IPython/numutils.py: added a mockup of the kinds module, since
2892 * IPython/numutils.py: added a mockup of the kinds module, since
2889 it was recently removed from Numeric. This way, numutils will
2893 it was recently removed from Numeric. This way, numutils will
2890 work for all users even if they are missing kinds.
2894 work for all users even if they are missing kinds.
2891
2895
2892 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2896 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2893 failure, which can occur with SWIG-wrapped extensions. After a
2897 failure, which can occur with SWIG-wrapped extensions. After a
2894 crash report from Prabhu.
2898 crash report from Prabhu.
2895
2899
2896 2003-05-16 Fernando Perez <fperez@colorado.edu>
2900 2003-05-16 Fernando Perez <fperez@colorado.edu>
2897
2901
2898 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2902 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2899 protect ipython from user code which may call directly
2903 protect ipython from user code which may call directly
2900 sys.excepthook (this looks like an ipython crash to the user, even
2904 sys.excepthook (this looks like an ipython crash to the user, even
2901 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2905 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2902 This is especially important to help users of WxWindows, but may
2906 This is especially important to help users of WxWindows, but may
2903 also be useful in other cases.
2907 also be useful in other cases.
2904
2908
2905 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2909 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2906 an optional tb_offset to be specified, and to preserve exception
2910 an optional tb_offset to be specified, and to preserve exception
2907 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2911 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2908
2912
2909 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2913 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2910
2914
2911 2003-05-15 Fernando Perez <fperez@colorado.edu>
2915 2003-05-15 Fernando Perez <fperez@colorado.edu>
2912
2916
2913 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2917 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2914 installing for a new user under Windows.
2918 installing for a new user under Windows.
2915
2919
2916 2003-05-12 Fernando Perez <fperez@colorado.edu>
2920 2003-05-12 Fernando Perez <fperez@colorado.edu>
2917
2921
2918 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2922 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2919 handler for Emacs comint-based lines. Currently it doesn't do
2923 handler for Emacs comint-based lines. Currently it doesn't do
2920 much (but importantly, it doesn't update the history cache). In
2924 much (but importantly, it doesn't update the history cache). In
2921 the future it may be expanded if Alex needs more functionality
2925 the future it may be expanded if Alex needs more functionality
2922 there.
2926 there.
2923
2927
2924 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2928 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2925 info to crash reports.
2929 info to crash reports.
2926
2930
2927 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2931 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2928 just like Python's -c. Also fixed crash with invalid -color
2932 just like Python's -c. Also fixed crash with invalid -color
2929 option value at startup. Thanks to Will French
2933 option value at startup. Thanks to Will French
2930 <wfrench-AT-bestweb.net> for the bug report.
2934 <wfrench-AT-bestweb.net> for the bug report.
2931
2935
2932 2003-05-09 Fernando Perez <fperez@colorado.edu>
2936 2003-05-09 Fernando Perez <fperez@colorado.edu>
2933
2937
2934 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2938 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2935 to EvalDict (it's a mapping, after all) and simplified its code
2939 to EvalDict (it's a mapping, after all) and simplified its code
2936 quite a bit, after a nice discussion on c.l.py where Gustavo
2940 quite a bit, after a nice discussion on c.l.py where Gustavo
2937 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2941 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2938
2942
2939 2003-04-30 Fernando Perez <fperez@colorado.edu>
2943 2003-04-30 Fernando Perez <fperez@colorado.edu>
2940
2944
2941 * IPython/genutils.py (timings_out): modified it to reduce its
2945 * IPython/genutils.py (timings_out): modified it to reduce its
2942 overhead in the common reps==1 case.
2946 overhead in the common reps==1 case.
2943
2947
2944 2003-04-29 Fernando Perez <fperez@colorado.edu>
2948 2003-04-29 Fernando Perez <fperez@colorado.edu>
2945
2949
2946 * IPython/genutils.py (timings_out): Modified to use the resource
2950 * IPython/genutils.py (timings_out): Modified to use the resource
2947 module, which avoids the wraparound problems of time.clock().
2951 module, which avoids the wraparound problems of time.clock().
2948
2952
2949 2003-04-17 *** Released version 0.2.15pre4
2953 2003-04-17 *** Released version 0.2.15pre4
2950
2954
2951 2003-04-17 Fernando Perez <fperez@colorado.edu>
2955 2003-04-17 Fernando Perez <fperez@colorado.edu>
2952
2956
2953 * setup.py (scriptfiles): Split windows-specific stuff over to a
2957 * setup.py (scriptfiles): Split windows-specific stuff over to a
2954 separate file, in an attempt to have a Windows GUI installer.
2958 separate file, in an attempt to have a Windows GUI installer.
2955 That didn't work, but part of the groundwork is done.
2959 That didn't work, but part of the groundwork is done.
2956
2960
2957 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2961 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2958 indent/unindent with 4 spaces. Particularly useful in combination
2962 indent/unindent with 4 spaces. Particularly useful in combination
2959 with the new auto-indent option.
2963 with the new auto-indent option.
2960
2964
2961 2003-04-16 Fernando Perez <fperez@colorado.edu>
2965 2003-04-16 Fernando Perez <fperez@colorado.edu>
2962
2966
2963 * IPython/Magic.py: various replacements of self.rc for
2967 * IPython/Magic.py: various replacements of self.rc for
2964 self.shell.rc. A lot more remains to be done to fully disentangle
2968 self.shell.rc. A lot more remains to be done to fully disentangle
2965 this class from the main Shell class.
2969 this class from the main Shell class.
2966
2970
2967 * IPython/GnuplotRuntime.py: added checks for mouse support so
2971 * IPython/GnuplotRuntime.py: added checks for mouse support so
2968 that we don't try to enable it if the current gnuplot doesn't
2972 that we don't try to enable it if the current gnuplot doesn't
2969 really support it. Also added checks so that we don't try to
2973 really support it. Also added checks so that we don't try to
2970 enable persist under Windows (where Gnuplot doesn't recognize the
2974 enable persist under Windows (where Gnuplot doesn't recognize the
2971 option).
2975 option).
2972
2976
2973 * IPython/iplib.py (InteractiveShell.interact): Added optional
2977 * IPython/iplib.py (InteractiveShell.interact): Added optional
2974 auto-indenting code, after a patch by King C. Shu
2978 auto-indenting code, after a patch by King C. Shu
2975 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2979 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2976 get along well with pasting indented code. If I ever figure out
2980 get along well with pasting indented code. If I ever figure out
2977 how to make that part go well, it will become on by default.
2981 how to make that part go well, it will become on by default.
2978
2982
2979 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2983 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2980 crash ipython if there was an unmatched '%' in the user's prompt
2984 crash ipython if there was an unmatched '%' in the user's prompt
2981 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2985 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2982
2986
2983 * IPython/iplib.py (InteractiveShell.interact): removed the
2987 * IPython/iplib.py (InteractiveShell.interact): removed the
2984 ability to ask the user whether he wants to crash or not at the
2988 ability to ask the user whether he wants to crash or not at the
2985 'last line' exception handler. Calling functions at that point
2989 'last line' exception handler. Calling functions at that point
2986 changes the stack, and the error reports would have incorrect
2990 changes the stack, and the error reports would have incorrect
2987 tracebacks.
2991 tracebacks.
2988
2992
2989 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2993 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2990 pass through a peger a pretty-printed form of any object. After a
2994 pass through a peger a pretty-printed form of any object. After a
2991 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2995 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2992
2996
2993 2003-04-14 Fernando Perez <fperez@colorado.edu>
2997 2003-04-14 Fernando Perez <fperez@colorado.edu>
2994
2998
2995 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2999 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2996 all files in ~ would be modified at first install (instead of
3000 all files in ~ would be modified at first install (instead of
2997 ~/.ipython). This could be potentially disastrous, as the
3001 ~/.ipython). This could be potentially disastrous, as the
2998 modification (make line-endings native) could damage binary files.
3002 modification (make line-endings native) could damage binary files.
2999
3003
3000 2003-04-10 Fernando Perez <fperez@colorado.edu>
3004 2003-04-10 Fernando Perez <fperez@colorado.edu>
3001
3005
3002 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3006 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3003 handle only lines which are invalid python. This now means that
3007 handle only lines which are invalid python. This now means that
3004 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3008 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3005 for the bug report.
3009 for the bug report.
3006
3010
3007 2003-04-01 Fernando Perez <fperez@colorado.edu>
3011 2003-04-01 Fernando Perez <fperez@colorado.edu>
3008
3012
3009 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3013 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3010 where failing to set sys.last_traceback would crash pdb.pm().
3014 where failing to set sys.last_traceback would crash pdb.pm().
3011 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3015 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3012 report.
3016 report.
3013
3017
3014 2003-03-25 Fernando Perez <fperez@colorado.edu>
3018 2003-03-25 Fernando Perez <fperez@colorado.edu>
3015
3019
3016 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3020 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3017 before printing it (it had a lot of spurious blank lines at the
3021 before printing it (it had a lot of spurious blank lines at the
3018 end).
3022 end).
3019
3023
3020 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3024 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3021 output would be sent 21 times! Obviously people don't use this
3025 output would be sent 21 times! Obviously people don't use this
3022 too often, or I would have heard about it.
3026 too often, or I would have heard about it.
3023
3027
3024 2003-03-24 Fernando Perez <fperez@colorado.edu>
3028 2003-03-24 Fernando Perez <fperez@colorado.edu>
3025
3029
3026 * setup.py (scriptfiles): renamed the data_files parameter from
3030 * setup.py (scriptfiles): renamed the data_files parameter from
3027 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3031 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3028 for the patch.
3032 for the patch.
3029
3033
3030 2003-03-20 Fernando Perez <fperez@colorado.edu>
3034 2003-03-20 Fernando Perez <fperez@colorado.edu>
3031
3035
3032 * IPython/genutils.py (error): added error() and fatal()
3036 * IPython/genutils.py (error): added error() and fatal()
3033 functions.
3037 functions.
3034
3038
3035 2003-03-18 *** Released version 0.2.15pre3
3039 2003-03-18 *** Released version 0.2.15pre3
3036
3040
3037 2003-03-18 Fernando Perez <fperez@colorado.edu>
3041 2003-03-18 Fernando Perez <fperez@colorado.edu>
3038
3042
3039 * setupext/install_data_ext.py
3043 * setupext/install_data_ext.py
3040 (install_data_ext.initialize_options): Class contributed by Jack
3044 (install_data_ext.initialize_options): Class contributed by Jack
3041 Moffit for fixing the old distutils hack. He is sending this to
3045 Moffit for fixing the old distutils hack. He is sending this to
3042 the distutils folks so in the future we may not need it as a
3046 the distutils folks so in the future we may not need it as a
3043 private fix.
3047 private fix.
3044
3048
3045 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3049 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3046 changes for Debian packaging. See his patch for full details.
3050 changes for Debian packaging. See his patch for full details.
3047 The old distutils hack of making the ipythonrc* files carry a
3051 The old distutils hack of making the ipythonrc* files carry a
3048 bogus .py extension is gone, at last. Examples were moved to a
3052 bogus .py extension is gone, at last. Examples were moved to a
3049 separate subdir under doc/, and the separate executable scripts
3053 separate subdir under doc/, and the separate executable scripts
3050 now live in their own directory. Overall a great cleanup. The
3054 now live in their own directory. Overall a great cleanup. The
3051 manual was updated to use the new files, and setup.py has been
3055 manual was updated to use the new files, and setup.py has been
3052 fixed for this setup.
3056 fixed for this setup.
3053
3057
3054 * IPython/PyColorize.py (Parser.usage): made non-executable and
3058 * IPython/PyColorize.py (Parser.usage): made non-executable and
3055 created a pycolor wrapper around it to be included as a script.
3059 created a pycolor wrapper around it to be included as a script.
3056
3060
3057 2003-03-12 *** Released version 0.2.15pre2
3061 2003-03-12 *** Released version 0.2.15pre2
3058
3062
3059 2003-03-12 Fernando Perez <fperez@colorado.edu>
3063 2003-03-12 Fernando Perez <fperez@colorado.edu>
3060
3064
3061 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3065 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3062 long-standing problem with garbage characters in some terminals.
3066 long-standing problem with garbage characters in some terminals.
3063 The issue was really that the \001 and \002 escapes must _only_ be
3067 The issue was really that the \001 and \002 escapes must _only_ be
3064 passed to input prompts (which call readline), but _never_ to
3068 passed to input prompts (which call readline), but _never_ to
3065 normal text to be printed on screen. I changed ColorANSI to have
3069 normal text to be printed on screen. I changed ColorANSI to have
3066 two classes: TermColors and InputTermColors, each with the
3070 two classes: TermColors and InputTermColors, each with the
3067 appropriate escapes for input prompts or normal text. The code in
3071 appropriate escapes for input prompts or normal text. The code in
3068 Prompts.py got slightly more complicated, but this very old and
3072 Prompts.py got slightly more complicated, but this very old and
3069 annoying bug is finally fixed.
3073 annoying bug is finally fixed.
3070
3074
3071 All the credit for nailing down the real origin of this problem
3075 All the credit for nailing down the real origin of this problem
3072 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3076 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3073 *Many* thanks to him for spending quite a bit of effort on this.
3077 *Many* thanks to him for spending quite a bit of effort on this.
3074
3078
3075 2003-03-05 *** Released version 0.2.15pre1
3079 2003-03-05 *** Released version 0.2.15pre1
3076
3080
3077 2003-03-03 Fernando Perez <fperez@colorado.edu>
3081 2003-03-03 Fernando Perez <fperez@colorado.edu>
3078
3082
3079 * IPython/FakeModule.py: Moved the former _FakeModule to a
3083 * IPython/FakeModule.py: Moved the former _FakeModule to a
3080 separate file, because it's also needed by Magic (to fix a similar
3084 separate file, because it's also needed by Magic (to fix a similar
3081 pickle-related issue in @run).
3085 pickle-related issue in @run).
3082
3086
3083 2003-03-02 Fernando Perez <fperez@colorado.edu>
3087 2003-03-02 Fernando Perez <fperez@colorado.edu>
3084
3088
3085 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3089 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3086 the autocall option at runtime.
3090 the autocall option at runtime.
3087 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3091 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3088 across Magic.py to start separating Magic from InteractiveShell.
3092 across Magic.py to start separating Magic from InteractiveShell.
3089 (Magic._ofind): Fixed to return proper namespace for dotted
3093 (Magic._ofind): Fixed to return proper namespace for dotted
3090 names. Before, a dotted name would always return 'not currently
3094 names. Before, a dotted name would always return 'not currently
3091 defined', because it would find the 'parent'. s.x would be found,
3095 defined', because it would find the 'parent'. s.x would be found,
3092 but since 'x' isn't defined by itself, it would get confused.
3096 but since 'x' isn't defined by itself, it would get confused.
3093 (Magic.magic_run): Fixed pickling problems reported by Ralf
3097 (Magic.magic_run): Fixed pickling problems reported by Ralf
3094 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3098 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3095 that I'd used when Mike Heeter reported similar issues at the
3099 that I'd used when Mike Heeter reported similar issues at the
3096 top-level, but now for @run. It boils down to injecting the
3100 top-level, but now for @run. It boils down to injecting the
3097 namespace where code is being executed with something that looks
3101 namespace where code is being executed with something that looks
3098 enough like a module to fool pickle.dump(). Since a pickle stores
3102 enough like a module to fool pickle.dump(). Since a pickle stores
3099 a named reference to the importing module, we need this for
3103 a named reference to the importing module, we need this for
3100 pickles to save something sensible.
3104 pickles to save something sensible.
3101
3105
3102 * IPython/ipmaker.py (make_IPython): added an autocall option.
3106 * IPython/ipmaker.py (make_IPython): added an autocall option.
3103
3107
3104 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3108 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3105 the auto-eval code. Now autocalling is an option, and the code is
3109 the auto-eval code. Now autocalling is an option, and the code is
3106 also vastly safer. There is no more eval() involved at all.
3110 also vastly safer. There is no more eval() involved at all.
3107
3111
3108 2003-03-01 Fernando Perez <fperez@colorado.edu>
3112 2003-03-01 Fernando Perez <fperez@colorado.edu>
3109
3113
3110 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3114 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3111 dict with named keys instead of a tuple.
3115 dict with named keys instead of a tuple.
3112
3116
3113 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3117 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3114
3118
3115 * setup.py (make_shortcut): Fixed message about directories
3119 * setup.py (make_shortcut): Fixed message about directories
3116 created during Windows installation (the directories were ok, just
3120 created during Windows installation (the directories were ok, just
3117 the printed message was misleading). Thanks to Chris Liechti
3121 the printed message was misleading). Thanks to Chris Liechti
3118 <cliechti-AT-gmx.net> for the heads up.
3122 <cliechti-AT-gmx.net> for the heads up.
3119
3123
3120 2003-02-21 Fernando Perez <fperez@colorado.edu>
3124 2003-02-21 Fernando Perez <fperez@colorado.edu>
3121
3125
3122 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3126 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3123 of ValueError exception when checking for auto-execution. This
3127 of ValueError exception when checking for auto-execution. This
3124 one is raised by things like Numeric arrays arr.flat when the
3128 one is raised by things like Numeric arrays arr.flat when the
3125 array is non-contiguous.
3129 array is non-contiguous.
3126
3130
3127 2003-01-31 Fernando Perez <fperez@colorado.edu>
3131 2003-01-31 Fernando Perez <fperez@colorado.edu>
3128
3132
3129 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3133 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3130 not return any value at all (even though the command would get
3134 not return any value at all (even though the command would get
3131 executed).
3135 executed).
3132 (xsys): Flush stdout right after printing the command to ensure
3136 (xsys): Flush stdout right after printing the command to ensure
3133 proper ordering of commands and command output in the total
3137 proper ordering of commands and command output in the total
3134 output.
3138 output.
3135 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3139 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3136 system/getoutput as defaults. The old ones are kept for
3140 system/getoutput as defaults. The old ones are kept for
3137 compatibility reasons, so no code which uses this library needs
3141 compatibility reasons, so no code which uses this library needs
3138 changing.
3142 changing.
3139
3143
3140 2003-01-27 *** Released version 0.2.14
3144 2003-01-27 *** Released version 0.2.14
3141
3145
3142 2003-01-25 Fernando Perez <fperez@colorado.edu>
3146 2003-01-25 Fernando Perez <fperez@colorado.edu>
3143
3147
3144 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3148 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3145 functions defined in previous edit sessions could not be re-edited
3149 functions defined in previous edit sessions could not be re-edited
3146 (because the temp files were immediately removed). Now temp files
3150 (because the temp files were immediately removed). Now temp files
3147 are removed only at IPython's exit.
3151 are removed only at IPython's exit.
3148 (Magic.magic_run): Improved @run to perform shell-like expansions
3152 (Magic.magic_run): Improved @run to perform shell-like expansions
3149 on its arguments (~users and $VARS). With this, @run becomes more
3153 on its arguments (~users and $VARS). With this, @run becomes more
3150 like a normal command-line.
3154 like a normal command-line.
3151
3155
3152 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3156 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3153 bugs related to embedding and cleaned up that code. A fairly
3157 bugs related to embedding and cleaned up that code. A fairly
3154 important one was the impossibility to access the global namespace
3158 important one was the impossibility to access the global namespace
3155 through the embedded IPython (only local variables were visible).
3159 through the embedded IPython (only local variables were visible).
3156
3160
3157 2003-01-14 Fernando Perez <fperez@colorado.edu>
3161 2003-01-14 Fernando Perez <fperez@colorado.edu>
3158
3162
3159 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3163 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3160 auto-calling to be a bit more conservative. Now it doesn't get
3164 auto-calling to be a bit more conservative. Now it doesn't get
3161 triggered if any of '!=()<>' are in the rest of the input line, to
3165 triggered if any of '!=()<>' are in the rest of the input line, to
3162 allow comparing callables. Thanks to Alex for the heads up.
3166 allow comparing callables. Thanks to Alex for the heads up.
3163
3167
3164 2003-01-07 Fernando Perez <fperez@colorado.edu>
3168 2003-01-07 Fernando Perez <fperez@colorado.edu>
3165
3169
3166 * IPython/genutils.py (page): fixed estimation of the number of
3170 * IPython/genutils.py (page): fixed estimation of the number of
3167 lines in a string to be paged to simply count newlines. This
3171 lines in a string to be paged to simply count newlines. This
3168 prevents over-guessing due to embedded escape sequences. A better
3172 prevents over-guessing due to embedded escape sequences. A better
3169 long-term solution would involve stripping out the control chars
3173 long-term solution would involve stripping out the control chars
3170 for the count, but it's potentially so expensive I just don't
3174 for the count, but it's potentially so expensive I just don't
3171 think it's worth doing.
3175 think it's worth doing.
3172
3176
3173 2002-12-19 *** Released version 0.2.14pre50
3177 2002-12-19 *** Released version 0.2.14pre50
3174
3178
3175 2002-12-19 Fernando Perez <fperez@colorado.edu>
3179 2002-12-19 Fernando Perez <fperez@colorado.edu>
3176
3180
3177 * tools/release (version): Changed release scripts to inform
3181 * tools/release (version): Changed release scripts to inform
3178 Andrea and build a NEWS file with a list of recent changes.
3182 Andrea and build a NEWS file with a list of recent changes.
3179
3183
3180 * IPython/ColorANSI.py (__all__): changed terminal detection
3184 * IPython/ColorANSI.py (__all__): changed terminal detection
3181 code. Seems to work better for xterms without breaking
3185 code. Seems to work better for xterms without breaking
3182 konsole. Will need more testing to determine if WinXP and Mac OSX
3186 konsole. Will need more testing to determine if WinXP and Mac OSX
3183 also work ok.
3187 also work ok.
3184
3188
3185 2002-12-18 *** Released version 0.2.14pre49
3189 2002-12-18 *** Released version 0.2.14pre49
3186
3190
3187 2002-12-18 Fernando Perez <fperez@colorado.edu>
3191 2002-12-18 Fernando Perez <fperez@colorado.edu>
3188
3192
3189 * Docs: added new info about Mac OSX, from Andrea.
3193 * Docs: added new info about Mac OSX, from Andrea.
3190
3194
3191 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3195 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3192 allow direct plotting of python strings whose format is the same
3196 allow direct plotting of python strings whose format is the same
3193 of gnuplot data files.
3197 of gnuplot data files.
3194
3198
3195 2002-12-16 Fernando Perez <fperez@colorado.edu>
3199 2002-12-16 Fernando Perez <fperez@colorado.edu>
3196
3200
3197 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3201 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3198 value of exit question to be acknowledged.
3202 value of exit question to be acknowledged.
3199
3203
3200 2002-12-03 Fernando Perez <fperez@colorado.edu>
3204 2002-12-03 Fernando Perez <fperez@colorado.edu>
3201
3205
3202 * IPython/ipmaker.py: removed generators, which had been added
3206 * IPython/ipmaker.py: removed generators, which had been added
3203 by mistake in an earlier debugging run. This was causing trouble
3207 by mistake in an earlier debugging run. This was causing trouble
3204 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3208 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3205 for pointing this out.
3209 for pointing this out.
3206
3210
3207 2002-11-17 Fernando Perez <fperez@colorado.edu>
3211 2002-11-17 Fernando Perez <fperez@colorado.edu>
3208
3212
3209 * Manual: updated the Gnuplot section.
3213 * Manual: updated the Gnuplot section.
3210
3214
3211 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3215 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3212 a much better split of what goes in Runtime and what goes in
3216 a much better split of what goes in Runtime and what goes in
3213 Interactive.
3217 Interactive.
3214
3218
3215 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3219 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3216 being imported from iplib.
3220 being imported from iplib.
3217
3221
3218 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3222 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3219 for command-passing. Now the global Gnuplot instance is called
3223 for command-passing. Now the global Gnuplot instance is called
3220 'gp' instead of 'g', which was really a far too fragile and
3224 'gp' instead of 'g', which was really a far too fragile and
3221 common name.
3225 common name.
3222
3226
3223 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3227 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3224 bounding boxes generated by Gnuplot for square plots.
3228 bounding boxes generated by Gnuplot for square plots.
3225
3229
3226 * IPython/genutils.py (popkey): new function added. I should
3230 * IPython/genutils.py (popkey): new function added. I should
3227 suggest this on c.l.py as a dict method, it seems useful.
3231 suggest this on c.l.py as a dict method, it seems useful.
3228
3232
3229 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3233 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3230 to transparently handle PostScript generation. MUCH better than
3234 to transparently handle PostScript generation. MUCH better than
3231 the previous plot_eps/replot_eps (which I removed now). The code
3235 the previous plot_eps/replot_eps (which I removed now). The code
3232 is also fairly clean and well documented now (including
3236 is also fairly clean and well documented now (including
3233 docstrings).
3237 docstrings).
3234
3238
3235 2002-11-13 Fernando Perez <fperez@colorado.edu>
3239 2002-11-13 Fernando Perez <fperez@colorado.edu>
3236
3240
3237 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3241 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3238 (inconsistent with options).
3242 (inconsistent with options).
3239
3243
3240 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3244 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3241 manually disabled, I don't know why. Fixed it.
3245 manually disabled, I don't know why. Fixed it.
3242 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3246 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3243 eps output.
3247 eps output.
3244
3248
3245 2002-11-12 Fernando Perez <fperez@colorado.edu>
3249 2002-11-12 Fernando Perez <fperez@colorado.edu>
3246
3250
3247 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3251 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3248 don't propagate up to caller. Fixes crash reported by François
3252 don't propagate up to caller. Fixes crash reported by François
3249 Pinard.
3253 Pinard.
3250
3254
3251 2002-11-09 Fernando Perez <fperez@colorado.edu>
3255 2002-11-09 Fernando Perez <fperez@colorado.edu>
3252
3256
3253 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3257 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3254 history file for new users.
3258 history file for new users.
3255 (make_IPython): fixed bug where initial install would leave the
3259 (make_IPython): fixed bug where initial install would leave the
3256 user running in the .ipython dir.
3260 user running in the .ipython dir.
3257 (make_IPython): fixed bug where config dir .ipython would be
3261 (make_IPython): fixed bug where config dir .ipython would be
3258 created regardless of the given -ipythondir option. Thanks to Cory
3262 created regardless of the given -ipythondir option. Thanks to Cory
3259 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3263 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3260
3264
3261 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3265 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3262 type confirmations. Will need to use it in all of IPython's code
3266 type confirmations. Will need to use it in all of IPython's code
3263 consistently.
3267 consistently.
3264
3268
3265 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3269 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3266 context to print 31 lines instead of the default 5. This will make
3270 context to print 31 lines instead of the default 5. This will make
3267 the crash reports extremely detailed in case the problem is in
3271 the crash reports extremely detailed in case the problem is in
3268 libraries I don't have access to.
3272 libraries I don't have access to.
3269
3273
3270 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3274 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3271 line of defense' code to still crash, but giving users fair
3275 line of defense' code to still crash, but giving users fair
3272 warning. I don't want internal errors to go unreported: if there's
3276 warning. I don't want internal errors to go unreported: if there's
3273 an internal problem, IPython should crash and generate a full
3277 an internal problem, IPython should crash and generate a full
3274 report.
3278 report.
3275
3279
3276 2002-11-08 Fernando Perez <fperez@colorado.edu>
3280 2002-11-08 Fernando Perez <fperez@colorado.edu>
3277
3281
3278 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3282 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3279 otherwise uncaught exceptions which can appear if people set
3283 otherwise uncaught exceptions which can appear if people set
3280 sys.stdout to something badly broken. Thanks to a crash report
3284 sys.stdout to something badly broken. Thanks to a crash report
3281 from henni-AT-mail.brainbot.com.
3285 from henni-AT-mail.brainbot.com.
3282
3286
3283 2002-11-04 Fernando Perez <fperez@colorado.edu>
3287 2002-11-04 Fernando Perez <fperez@colorado.edu>
3284
3288
3285 * IPython/iplib.py (InteractiveShell.interact): added
3289 * IPython/iplib.py (InteractiveShell.interact): added
3286 __IPYTHON__active to the builtins. It's a flag which goes on when
3290 __IPYTHON__active to the builtins. It's a flag which goes on when
3287 the interaction starts and goes off again when it stops. This
3291 the interaction starts and goes off again when it stops. This
3288 allows embedding code to detect being inside IPython. Before this
3292 allows embedding code to detect being inside IPython. Before this
3289 was done via __IPYTHON__, but that only shows that an IPython
3293 was done via __IPYTHON__, but that only shows that an IPython
3290 instance has been created.
3294 instance has been created.
3291
3295
3292 * IPython/Magic.py (Magic.magic_env): I realized that in a
3296 * IPython/Magic.py (Magic.magic_env): I realized that in a
3293 UserDict, instance.data holds the data as a normal dict. So I
3297 UserDict, instance.data holds the data as a normal dict. So I
3294 modified @env to return os.environ.data instead of rebuilding a
3298 modified @env to return os.environ.data instead of rebuilding a
3295 dict by hand.
3299 dict by hand.
3296
3300
3297 2002-11-02 Fernando Perez <fperez@colorado.edu>
3301 2002-11-02 Fernando Perez <fperez@colorado.edu>
3298
3302
3299 * IPython/genutils.py (warn): changed so that level 1 prints no
3303 * IPython/genutils.py (warn): changed so that level 1 prints no
3300 header. Level 2 is now the default (with 'WARNING' header, as
3304 header. Level 2 is now the default (with 'WARNING' header, as
3301 before). I think I tracked all places where changes were needed in
3305 before). I think I tracked all places where changes were needed in
3302 IPython, but outside code using the old level numbering may have
3306 IPython, but outside code using the old level numbering may have
3303 broken.
3307 broken.
3304
3308
3305 * IPython/iplib.py (InteractiveShell.runcode): added this to
3309 * IPython/iplib.py (InteractiveShell.runcode): added this to
3306 handle the tracebacks in SystemExit traps correctly. The previous
3310 handle the tracebacks in SystemExit traps correctly. The previous
3307 code (through interact) was printing more of the stack than
3311 code (through interact) was printing more of the stack than
3308 necessary, showing IPython internal code to the user.
3312 necessary, showing IPython internal code to the user.
3309
3313
3310 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3314 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3311 default. Now that the default at the confirmation prompt is yes,
3315 default. Now that the default at the confirmation prompt is yes,
3312 it's not so intrusive. François' argument that ipython sessions
3316 it's not so intrusive. François' argument that ipython sessions
3313 tend to be complex enough not to lose them from an accidental C-d,
3317 tend to be complex enough not to lose them from an accidental C-d,
3314 is a valid one.
3318 is a valid one.
3315
3319
3316 * IPython/iplib.py (InteractiveShell.interact): added a
3320 * IPython/iplib.py (InteractiveShell.interact): added a
3317 showtraceback() call to the SystemExit trap, and modified the exit
3321 showtraceback() call to the SystemExit trap, and modified the exit
3318 confirmation to have yes as the default.
3322 confirmation to have yes as the default.
3319
3323
3320 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3324 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3321 this file. It's been gone from the code for a long time, this was
3325 this file. It's been gone from the code for a long time, this was
3322 simply leftover junk.
3326 simply leftover junk.
3323
3327
3324 2002-11-01 Fernando Perez <fperez@colorado.edu>
3328 2002-11-01 Fernando Perez <fperez@colorado.edu>
3325
3329
3326 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3330 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3327 added. If set, IPython now traps EOF and asks for
3331 added. If set, IPython now traps EOF and asks for
3328 confirmation. After a request by François Pinard.
3332 confirmation. After a request by François Pinard.
3329
3333
3330 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3334 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3331 of @abort, and with a new (better) mechanism for handling the
3335 of @abort, and with a new (better) mechanism for handling the
3332 exceptions.
3336 exceptions.
3333
3337
3334 2002-10-27 Fernando Perez <fperez@colorado.edu>
3338 2002-10-27 Fernando Perez <fperez@colorado.edu>
3335
3339
3336 * IPython/usage.py (__doc__): updated the --help information and
3340 * IPython/usage.py (__doc__): updated the --help information and
3337 the ipythonrc file to indicate that -log generates
3341 the ipythonrc file to indicate that -log generates
3338 ./ipython.log. Also fixed the corresponding info in @logstart.
3342 ./ipython.log. Also fixed the corresponding info in @logstart.
3339 This and several other fixes in the manuals thanks to reports by
3343 This and several other fixes in the manuals thanks to reports by
3340 François Pinard <pinard-AT-iro.umontreal.ca>.
3344 François Pinard <pinard-AT-iro.umontreal.ca>.
3341
3345
3342 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3346 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3343 refer to @logstart (instead of @log, which doesn't exist).
3347 refer to @logstart (instead of @log, which doesn't exist).
3344
3348
3345 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3349 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3346 AttributeError crash. Thanks to Christopher Armstrong
3350 AttributeError crash. Thanks to Christopher Armstrong
3347 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3351 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3348 introduced recently (in 0.2.14pre37) with the fix to the eval
3352 introduced recently (in 0.2.14pre37) with the fix to the eval
3349 problem mentioned below.
3353 problem mentioned below.
3350
3354
3351 2002-10-17 Fernando Perez <fperez@colorado.edu>
3355 2002-10-17 Fernando Perez <fperez@colorado.edu>
3352
3356
3353 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3357 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3354 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3358 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3355
3359
3356 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3360 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3357 this function to fix a problem reported by Alex Schmolck. He saw
3361 this function to fix a problem reported by Alex Schmolck. He saw
3358 it with list comprehensions and generators, which were getting
3362 it with list comprehensions and generators, which were getting
3359 called twice. The real problem was an 'eval' call in testing for
3363 called twice. The real problem was an 'eval' call in testing for
3360 automagic which was evaluating the input line silently.
3364 automagic which was evaluating the input line silently.
3361
3365
3362 This is a potentially very nasty bug, if the input has side
3366 This is a potentially very nasty bug, if the input has side
3363 effects which must not be repeated. The code is much cleaner now,
3367 effects which must not be repeated. The code is much cleaner now,
3364 without any blanket 'except' left and with a regexp test for
3368 without any blanket 'except' left and with a regexp test for
3365 actual function names.
3369 actual function names.
3366
3370
3367 But an eval remains, which I'm not fully comfortable with. I just
3371 But an eval remains, which I'm not fully comfortable with. I just
3368 don't know how to find out if an expression could be a callable in
3372 don't know how to find out if an expression could be a callable in
3369 the user's namespace without doing an eval on the string. However
3373 the user's namespace without doing an eval on the string. However
3370 that string is now much more strictly checked so that no code
3374 that string is now much more strictly checked so that no code
3371 slips by, so the eval should only happen for things that can
3375 slips by, so the eval should only happen for things that can
3372 really be only function/method names.
3376 really be only function/method names.
3373
3377
3374 2002-10-15 Fernando Perez <fperez@colorado.edu>
3378 2002-10-15 Fernando Perez <fperez@colorado.edu>
3375
3379
3376 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3380 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3377 OSX information to main manual, removed README_Mac_OSX file from
3381 OSX information to main manual, removed README_Mac_OSX file from
3378 distribution. Also updated credits for recent additions.
3382 distribution. Also updated credits for recent additions.
3379
3383
3380 2002-10-10 Fernando Perez <fperez@colorado.edu>
3384 2002-10-10 Fernando Perez <fperez@colorado.edu>
3381
3385
3382 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3386 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3383 terminal-related issues. Many thanks to Andrea Riciputi
3387 terminal-related issues. Many thanks to Andrea Riciputi
3384 <andrea.riciputi-AT-libero.it> for writing it.
3388 <andrea.riciputi-AT-libero.it> for writing it.
3385
3389
3386 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3390 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3387 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3391 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3388
3392
3389 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3393 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3390 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3394 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3391 <syver-en-AT-online.no> who both submitted patches for this problem.
3395 <syver-en-AT-online.no> who both submitted patches for this problem.
3392
3396
3393 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3397 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3394 global embedding to make sure that things don't overwrite user
3398 global embedding to make sure that things don't overwrite user
3395 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3399 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3396
3400
3397 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3401 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3398 compatibility. Thanks to Hayden Callow
3402 compatibility. Thanks to Hayden Callow
3399 <h.callow-AT-elec.canterbury.ac.nz>
3403 <h.callow-AT-elec.canterbury.ac.nz>
3400
3404
3401 2002-10-04 Fernando Perez <fperez@colorado.edu>
3405 2002-10-04 Fernando Perez <fperez@colorado.edu>
3402
3406
3403 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3407 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3404 Gnuplot.File objects.
3408 Gnuplot.File objects.
3405
3409
3406 2002-07-23 Fernando Perez <fperez@colorado.edu>
3410 2002-07-23 Fernando Perez <fperez@colorado.edu>
3407
3411
3408 * IPython/genutils.py (timing): Added timings() and timing() for
3412 * IPython/genutils.py (timing): Added timings() and timing() for
3409 quick access to the most commonly needed data, the execution
3413 quick access to the most commonly needed data, the execution
3410 times. Old timing() renamed to timings_out().
3414 times. Old timing() renamed to timings_out().
3411
3415
3412 2002-07-18 Fernando Perez <fperez@colorado.edu>
3416 2002-07-18 Fernando Perez <fperez@colorado.edu>
3413
3417
3414 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3418 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3415 bug with nested instances disrupting the parent's tab completion.
3419 bug with nested instances disrupting the parent's tab completion.
3416
3420
3417 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3421 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3418 all_completions code to begin the emacs integration.
3422 all_completions code to begin the emacs integration.
3419
3423
3420 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3424 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3421 argument to allow titling individual arrays when plotting.
3425 argument to allow titling individual arrays when plotting.
3422
3426
3423 2002-07-15 Fernando Perez <fperez@colorado.edu>
3427 2002-07-15 Fernando Perez <fperez@colorado.edu>
3424
3428
3425 * setup.py (make_shortcut): changed to retrieve the value of
3429 * setup.py (make_shortcut): changed to retrieve the value of
3426 'Program Files' directory from the registry (this value changes in
3430 'Program Files' directory from the registry (this value changes in
3427 non-english versions of Windows). Thanks to Thomas Fanslau
3431 non-english versions of Windows). Thanks to Thomas Fanslau
3428 <tfanslau-AT-gmx.de> for the report.
3432 <tfanslau-AT-gmx.de> for the report.
3429
3433
3430 2002-07-10 Fernando Perez <fperez@colorado.edu>
3434 2002-07-10 Fernando Perez <fperez@colorado.edu>
3431
3435
3432 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3436 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3433 a bug in pdb, which crashes if a line with only whitespace is
3437 a bug in pdb, which crashes if a line with only whitespace is
3434 entered. Bug report submitted to sourceforge.
3438 entered. Bug report submitted to sourceforge.
3435
3439
3436 2002-07-09 Fernando Perez <fperez@colorado.edu>
3440 2002-07-09 Fernando Perez <fperez@colorado.edu>
3437
3441
3438 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3442 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3439 reporting exceptions (it's a bug in inspect.py, I just set a
3443 reporting exceptions (it's a bug in inspect.py, I just set a
3440 workaround).
3444 workaround).
3441
3445
3442 2002-07-08 Fernando Perez <fperez@colorado.edu>
3446 2002-07-08 Fernando Perez <fperez@colorado.edu>
3443
3447
3444 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3448 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3445 __IPYTHON__ in __builtins__ to show up in user_ns.
3449 __IPYTHON__ in __builtins__ to show up in user_ns.
3446
3450
3447 2002-07-03 Fernando Perez <fperez@colorado.edu>
3451 2002-07-03 Fernando Perez <fperez@colorado.edu>
3448
3452
3449 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3453 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3450 name from @gp_set_instance to @gp_set_default.
3454 name from @gp_set_instance to @gp_set_default.
3451
3455
3452 * IPython/ipmaker.py (make_IPython): default editor value set to
3456 * IPython/ipmaker.py (make_IPython): default editor value set to
3453 '0' (a string), to match the rc file. Otherwise will crash when
3457 '0' (a string), to match the rc file. Otherwise will crash when
3454 .strip() is called on it.
3458 .strip() is called on it.
3455
3459
3456
3460
3457 2002-06-28 Fernando Perez <fperez@colorado.edu>
3461 2002-06-28 Fernando Perez <fperez@colorado.edu>
3458
3462
3459 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3463 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3460 of files in current directory when a file is executed via
3464 of files in current directory when a file is executed via
3461 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3465 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3462
3466
3463 * setup.py (manfiles): fix for rpm builds, submitted by RA
3467 * setup.py (manfiles): fix for rpm builds, submitted by RA
3464 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3468 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3465
3469
3466 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3470 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3467 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3471 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3468 string!). A. Schmolck caught this one.
3472 string!). A. Schmolck caught this one.
3469
3473
3470 2002-06-27 Fernando Perez <fperez@colorado.edu>
3474 2002-06-27 Fernando Perez <fperez@colorado.edu>
3471
3475
3472 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3476 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3473 defined files at the cmd line. __name__ wasn't being set to
3477 defined files at the cmd line. __name__ wasn't being set to
3474 __main__.
3478 __main__.
3475
3479
3476 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3480 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3477 regular lists and tuples besides Numeric arrays.
3481 regular lists and tuples besides Numeric arrays.
3478
3482
3479 * IPython/Prompts.py (CachedOutput.__call__): Added output
3483 * IPython/Prompts.py (CachedOutput.__call__): Added output
3480 supression for input ending with ';'. Similar to Mathematica and
3484 supression for input ending with ';'. Similar to Mathematica and
3481 Matlab. The _* vars and Out[] list are still updated, just like
3485 Matlab. The _* vars and Out[] list are still updated, just like
3482 Mathematica behaves.
3486 Mathematica behaves.
3483
3487
3484 2002-06-25 Fernando Perez <fperez@colorado.edu>
3488 2002-06-25 Fernando Perez <fperez@colorado.edu>
3485
3489
3486 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3490 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3487 .ini extensions for profiels under Windows.
3491 .ini extensions for profiels under Windows.
3488
3492
3489 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3493 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3490 string form. Fix contributed by Alexander Schmolck
3494 string form. Fix contributed by Alexander Schmolck
3491 <a.schmolck-AT-gmx.net>
3495 <a.schmolck-AT-gmx.net>
3492
3496
3493 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3497 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3494 pre-configured Gnuplot instance.
3498 pre-configured Gnuplot instance.
3495
3499
3496 2002-06-21 Fernando Perez <fperez@colorado.edu>
3500 2002-06-21 Fernando Perez <fperez@colorado.edu>
3497
3501
3498 * IPython/numutils.py (exp_safe): new function, works around the
3502 * IPython/numutils.py (exp_safe): new function, works around the
3499 underflow problems in Numeric.
3503 underflow problems in Numeric.
3500 (log2): New fn. Safe log in base 2: returns exact integer answer
3504 (log2): New fn. Safe log in base 2: returns exact integer answer
3501 for exact integer powers of 2.
3505 for exact integer powers of 2.
3502
3506
3503 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3507 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3504 properly.
3508 properly.
3505
3509
3506 2002-06-20 Fernando Perez <fperez@colorado.edu>
3510 2002-06-20 Fernando Perez <fperez@colorado.edu>
3507
3511
3508 * IPython/genutils.py (timing): new function like
3512 * IPython/genutils.py (timing): new function like
3509 Mathematica's. Similar to time_test, but returns more info.
3513 Mathematica's. Similar to time_test, but returns more info.
3510
3514
3511 2002-06-18 Fernando Perez <fperez@colorado.edu>
3515 2002-06-18 Fernando Perez <fperez@colorado.edu>
3512
3516
3513 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3517 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3514 according to Mike Heeter's suggestions.
3518 according to Mike Heeter's suggestions.
3515
3519
3516 2002-06-16 Fernando Perez <fperez@colorado.edu>
3520 2002-06-16 Fernando Perez <fperez@colorado.edu>
3517
3521
3518 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3522 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3519 system. GnuplotMagic is gone as a user-directory option. New files
3523 system. GnuplotMagic is gone as a user-directory option. New files
3520 make it easier to use all the gnuplot stuff both from external
3524 make it easier to use all the gnuplot stuff both from external
3521 programs as well as from IPython. Had to rewrite part of
3525 programs as well as from IPython. Had to rewrite part of
3522 hardcopy() b/c of a strange bug: often the ps files simply don't
3526 hardcopy() b/c of a strange bug: often the ps files simply don't
3523 get created, and require a repeat of the command (often several
3527 get created, and require a repeat of the command (often several
3524 times).
3528 times).
3525
3529
3526 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3530 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3527 resolve output channel at call time, so that if sys.stderr has
3531 resolve output channel at call time, so that if sys.stderr has
3528 been redirected by user this gets honored.
3532 been redirected by user this gets honored.
3529
3533
3530 2002-06-13 Fernando Perez <fperez@colorado.edu>
3534 2002-06-13 Fernando Perez <fperez@colorado.edu>
3531
3535
3532 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3536 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3533 IPShell. Kept a copy with the old names to avoid breaking people's
3537 IPShell. Kept a copy with the old names to avoid breaking people's
3534 embedded code.
3538 embedded code.
3535
3539
3536 * IPython/ipython: simplified it to the bare minimum after
3540 * IPython/ipython: simplified it to the bare minimum after
3537 Holger's suggestions. Added info about how to use it in
3541 Holger's suggestions. Added info about how to use it in
3538 PYTHONSTARTUP.
3542 PYTHONSTARTUP.
3539
3543
3540 * IPython/Shell.py (IPythonShell): changed the options passing
3544 * IPython/Shell.py (IPythonShell): changed the options passing
3541 from a string with funky %s replacements to a straight list. Maybe
3545 from a string with funky %s replacements to a straight list. Maybe
3542 a bit more typing, but it follows sys.argv conventions, so there's
3546 a bit more typing, but it follows sys.argv conventions, so there's
3543 less special-casing to remember.
3547 less special-casing to remember.
3544
3548
3545 2002-06-12 Fernando Perez <fperez@colorado.edu>
3549 2002-06-12 Fernando Perez <fperez@colorado.edu>
3546
3550
3547 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3551 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3548 command. Thanks to a suggestion by Mike Heeter.
3552 command. Thanks to a suggestion by Mike Heeter.
3549 (Magic.magic_pfile): added behavior to look at filenames if given
3553 (Magic.magic_pfile): added behavior to look at filenames if given
3550 arg is not a defined object.
3554 arg is not a defined object.
3551 (Magic.magic_save): New @save function to save code snippets. Also
3555 (Magic.magic_save): New @save function to save code snippets. Also
3552 a Mike Heeter idea.
3556 a Mike Heeter idea.
3553
3557
3554 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3558 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3555 plot() and replot(). Much more convenient now, especially for
3559 plot() and replot(). Much more convenient now, especially for
3556 interactive use.
3560 interactive use.
3557
3561
3558 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3562 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3559 filenames.
3563 filenames.
3560
3564
3561 2002-06-02 Fernando Perez <fperez@colorado.edu>
3565 2002-06-02 Fernando Perez <fperez@colorado.edu>
3562
3566
3563 * IPython/Struct.py (Struct.__init__): modified to admit
3567 * IPython/Struct.py (Struct.__init__): modified to admit
3564 initialization via another struct.
3568 initialization via another struct.
3565
3569
3566 * IPython/genutils.py (SystemExec.__init__): New stateful
3570 * IPython/genutils.py (SystemExec.__init__): New stateful
3567 interface to xsys and bq. Useful for writing system scripts.
3571 interface to xsys and bq. Useful for writing system scripts.
3568
3572
3569 2002-05-30 Fernando Perez <fperez@colorado.edu>
3573 2002-05-30 Fernando Perez <fperez@colorado.edu>
3570
3574
3571 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3575 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3572 documents. This will make the user download smaller (it's getting
3576 documents. This will make the user download smaller (it's getting
3573 too big).
3577 too big).
3574
3578
3575 2002-05-29 Fernando Perez <fperez@colorado.edu>
3579 2002-05-29 Fernando Perez <fperez@colorado.edu>
3576
3580
3577 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3581 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3578 fix problems with shelve and pickle. Seems to work, but I don't
3582 fix problems with shelve and pickle. Seems to work, but I don't
3579 know if corner cases break it. Thanks to Mike Heeter
3583 know if corner cases break it. Thanks to Mike Heeter
3580 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3584 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3581
3585
3582 2002-05-24 Fernando Perez <fperez@colorado.edu>
3586 2002-05-24 Fernando Perez <fperez@colorado.edu>
3583
3587
3584 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3588 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3585 macros having broken.
3589 macros having broken.
3586
3590
3587 2002-05-21 Fernando Perez <fperez@colorado.edu>
3591 2002-05-21 Fernando Perez <fperez@colorado.edu>
3588
3592
3589 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3593 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3590 introduced logging bug: all history before logging started was
3594 introduced logging bug: all history before logging started was
3591 being written one character per line! This came from the redesign
3595 being written one character per line! This came from the redesign
3592 of the input history as a special list which slices to strings,
3596 of the input history as a special list which slices to strings,
3593 not to lists.
3597 not to lists.
3594
3598
3595 2002-05-20 Fernando Perez <fperez@colorado.edu>
3599 2002-05-20 Fernando Perez <fperez@colorado.edu>
3596
3600
3597 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3601 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3598 be an attribute of all classes in this module. The design of these
3602 be an attribute of all classes in this module. The design of these
3599 classes needs some serious overhauling.
3603 classes needs some serious overhauling.
3600
3604
3601 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3605 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3602 which was ignoring '_' in option names.
3606 which was ignoring '_' in option names.
3603
3607
3604 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3608 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3605 'Verbose_novars' to 'Context' and made it the new default. It's a
3609 'Verbose_novars' to 'Context' and made it the new default. It's a
3606 bit more readable and also safer than verbose.
3610 bit more readable and also safer than verbose.
3607
3611
3608 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3612 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3609 triple-quoted strings.
3613 triple-quoted strings.
3610
3614
3611 * IPython/OInspect.py (__all__): new module exposing the object
3615 * IPython/OInspect.py (__all__): new module exposing the object
3612 introspection facilities. Now the corresponding magics are dummy
3616 introspection facilities. Now the corresponding magics are dummy
3613 wrappers around this. Having this module will make it much easier
3617 wrappers around this. Having this module will make it much easier
3614 to put these functions into our modified pdb.
3618 to put these functions into our modified pdb.
3615 This new object inspector system uses the new colorizing module,
3619 This new object inspector system uses the new colorizing module,
3616 so source code and other things are nicely syntax highlighted.
3620 so source code and other things are nicely syntax highlighted.
3617
3621
3618 2002-05-18 Fernando Perez <fperez@colorado.edu>
3622 2002-05-18 Fernando Perez <fperez@colorado.edu>
3619
3623
3620 * IPython/ColorANSI.py: Split the coloring tools into a separate
3624 * IPython/ColorANSI.py: Split the coloring tools into a separate
3621 module so I can use them in other code easier (they were part of
3625 module so I can use them in other code easier (they were part of
3622 ultraTB).
3626 ultraTB).
3623
3627
3624 2002-05-17 Fernando Perez <fperez@colorado.edu>
3628 2002-05-17 Fernando Perez <fperez@colorado.edu>
3625
3629
3626 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3630 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3627 fixed it to set the global 'g' also to the called instance, as
3631 fixed it to set the global 'g' also to the called instance, as
3628 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3632 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3629 user's 'g' variables).
3633 user's 'g' variables).
3630
3634
3631 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3635 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3632 global variables (aliases to _ih,_oh) so that users which expect
3636 global variables (aliases to _ih,_oh) so that users which expect
3633 In[5] or Out[7] to work aren't unpleasantly surprised.
3637 In[5] or Out[7] to work aren't unpleasantly surprised.
3634 (InputList.__getslice__): new class to allow executing slices of
3638 (InputList.__getslice__): new class to allow executing slices of
3635 input history directly. Very simple class, complements the use of
3639 input history directly. Very simple class, complements the use of
3636 macros.
3640 macros.
3637
3641
3638 2002-05-16 Fernando Perez <fperez@colorado.edu>
3642 2002-05-16 Fernando Perez <fperez@colorado.edu>
3639
3643
3640 * setup.py (docdirbase): make doc directory be just doc/IPython
3644 * setup.py (docdirbase): make doc directory be just doc/IPython
3641 without version numbers, it will reduce clutter for users.
3645 without version numbers, it will reduce clutter for users.
3642
3646
3643 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3647 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3644 execfile call to prevent possible memory leak. See for details:
3648 execfile call to prevent possible memory leak. See for details:
3645 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3649 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3646
3650
3647 2002-05-15 Fernando Perez <fperez@colorado.edu>
3651 2002-05-15 Fernando Perez <fperez@colorado.edu>
3648
3652
3649 * IPython/Magic.py (Magic.magic_psource): made the object
3653 * IPython/Magic.py (Magic.magic_psource): made the object
3650 introspection names be more standard: pdoc, pdef, pfile and
3654 introspection names be more standard: pdoc, pdef, pfile and
3651 psource. They all print/page their output, and it makes
3655 psource. They all print/page their output, and it makes
3652 remembering them easier. Kept old names for compatibility as
3656 remembering them easier. Kept old names for compatibility as
3653 aliases.
3657 aliases.
3654
3658
3655 2002-05-14 Fernando Perez <fperez@colorado.edu>
3659 2002-05-14 Fernando Perez <fperez@colorado.edu>
3656
3660
3657 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3661 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3658 what the mouse problem was. The trick is to use gnuplot with temp
3662 what the mouse problem was. The trick is to use gnuplot with temp
3659 files and NOT with pipes (for data communication), because having
3663 files and NOT with pipes (for data communication), because having
3660 both pipes and the mouse on is bad news.
3664 both pipes and the mouse on is bad news.
3661
3665
3662 2002-05-13 Fernando Perez <fperez@colorado.edu>
3666 2002-05-13 Fernando Perez <fperez@colorado.edu>
3663
3667
3664 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3668 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3665 bug. Information would be reported about builtins even when
3669 bug. Information would be reported about builtins even when
3666 user-defined functions overrode them.
3670 user-defined functions overrode them.
3667
3671
3668 2002-05-11 Fernando Perez <fperez@colorado.edu>
3672 2002-05-11 Fernando Perez <fperez@colorado.edu>
3669
3673
3670 * IPython/__init__.py (__all__): removed FlexCompleter from
3674 * IPython/__init__.py (__all__): removed FlexCompleter from
3671 __all__ so that things don't fail in platforms without readline.
3675 __all__ so that things don't fail in platforms without readline.
3672
3676
3673 2002-05-10 Fernando Perez <fperez@colorado.edu>
3677 2002-05-10 Fernando Perez <fperez@colorado.edu>
3674
3678
3675 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3679 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3676 it requires Numeric, effectively making Numeric a dependency for
3680 it requires Numeric, effectively making Numeric a dependency for
3677 IPython.
3681 IPython.
3678
3682
3679 * Released 0.2.13
3683 * Released 0.2.13
3680
3684
3681 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3685 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3682 profiler interface. Now all the major options from the profiler
3686 profiler interface. Now all the major options from the profiler
3683 module are directly supported in IPython, both for single
3687 module are directly supported in IPython, both for single
3684 expressions (@prun) and for full programs (@run -p).
3688 expressions (@prun) and for full programs (@run -p).
3685
3689
3686 2002-05-09 Fernando Perez <fperez@colorado.edu>
3690 2002-05-09 Fernando Perez <fperez@colorado.edu>
3687
3691
3688 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3692 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3689 magic properly formatted for screen.
3693 magic properly formatted for screen.
3690
3694
3691 * setup.py (make_shortcut): Changed things to put pdf version in
3695 * setup.py (make_shortcut): Changed things to put pdf version in
3692 doc/ instead of doc/manual (had to change lyxport a bit).
3696 doc/ instead of doc/manual (had to change lyxport a bit).
3693
3697
3694 * IPython/Magic.py (Profile.string_stats): made profile runs go
3698 * IPython/Magic.py (Profile.string_stats): made profile runs go
3695 through pager (they are long and a pager allows searching, saving,
3699 through pager (they are long and a pager allows searching, saving,
3696 etc.)
3700 etc.)
3697
3701
3698 2002-05-08 Fernando Perez <fperez@colorado.edu>
3702 2002-05-08 Fernando Perez <fperez@colorado.edu>
3699
3703
3700 * Released 0.2.12
3704 * Released 0.2.12
3701
3705
3702 2002-05-06 Fernando Perez <fperez@colorado.edu>
3706 2002-05-06 Fernando Perez <fperez@colorado.edu>
3703
3707
3704 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3708 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3705 introduced); 'hist n1 n2' was broken.
3709 introduced); 'hist n1 n2' was broken.
3706 (Magic.magic_pdb): added optional on/off arguments to @pdb
3710 (Magic.magic_pdb): added optional on/off arguments to @pdb
3707 (Magic.magic_run): added option -i to @run, which executes code in
3711 (Magic.magic_run): added option -i to @run, which executes code in
3708 the IPython namespace instead of a clean one. Also added @irun as
3712 the IPython namespace instead of a clean one. Also added @irun as
3709 an alias to @run -i.
3713 an alias to @run -i.
3710
3714
3711 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3715 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3712 fixed (it didn't really do anything, the namespaces were wrong).
3716 fixed (it didn't really do anything, the namespaces were wrong).
3713
3717
3714 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3718 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3715
3719
3716 * IPython/__init__.py (__all__): Fixed package namespace, now
3720 * IPython/__init__.py (__all__): Fixed package namespace, now
3717 'import IPython' does give access to IPython.<all> as
3721 'import IPython' does give access to IPython.<all> as
3718 expected. Also renamed __release__ to Release.
3722 expected. Also renamed __release__ to Release.
3719
3723
3720 * IPython/Debugger.py (__license__): created new Pdb class which
3724 * IPython/Debugger.py (__license__): created new Pdb class which
3721 functions like a drop-in for the normal pdb.Pdb but does NOT
3725 functions like a drop-in for the normal pdb.Pdb but does NOT
3722 import readline by default. This way it doesn't muck up IPython's
3726 import readline by default. This way it doesn't muck up IPython's
3723 readline handling, and now tab-completion finally works in the
3727 readline handling, and now tab-completion finally works in the
3724 debugger -- sort of. It completes things globally visible, but the
3728 debugger -- sort of. It completes things globally visible, but the
3725 completer doesn't track the stack as pdb walks it. That's a bit
3729 completer doesn't track the stack as pdb walks it. That's a bit
3726 tricky, and I'll have to implement it later.
3730 tricky, and I'll have to implement it later.
3727
3731
3728 2002-05-05 Fernando Perez <fperez@colorado.edu>
3732 2002-05-05 Fernando Perez <fperez@colorado.edu>
3729
3733
3730 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3734 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3731 magic docstrings when printed via ? (explicit \'s were being
3735 magic docstrings when printed via ? (explicit \'s were being
3732 printed).
3736 printed).
3733
3737
3734 * IPython/ipmaker.py (make_IPython): fixed namespace
3738 * IPython/ipmaker.py (make_IPython): fixed namespace
3735 identification bug. Now variables loaded via logs or command-line
3739 identification bug. Now variables loaded via logs or command-line
3736 files are recognized in the interactive namespace by @who.
3740 files are recognized in the interactive namespace by @who.
3737
3741
3738 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3742 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3739 log replay system stemming from the string form of Structs.
3743 log replay system stemming from the string form of Structs.
3740
3744
3741 * IPython/Magic.py (Macro.__init__): improved macros to properly
3745 * IPython/Magic.py (Macro.__init__): improved macros to properly
3742 handle magic commands in them.
3746 handle magic commands in them.
3743 (Magic.magic_logstart): usernames are now expanded so 'logstart
3747 (Magic.magic_logstart): usernames are now expanded so 'logstart
3744 ~/mylog' now works.
3748 ~/mylog' now works.
3745
3749
3746 * IPython/iplib.py (complete): fixed bug where paths starting with
3750 * IPython/iplib.py (complete): fixed bug where paths starting with
3747 '/' would be completed as magic names.
3751 '/' would be completed as magic names.
3748
3752
3749 2002-05-04 Fernando Perez <fperez@colorado.edu>
3753 2002-05-04 Fernando Perez <fperez@colorado.edu>
3750
3754
3751 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3755 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3752 allow running full programs under the profiler's control.
3756 allow running full programs under the profiler's control.
3753
3757
3754 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3758 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3755 mode to report exceptions verbosely but without formatting
3759 mode to report exceptions verbosely but without formatting
3756 variables. This addresses the issue of ipython 'freezing' (it's
3760 variables. This addresses the issue of ipython 'freezing' (it's
3757 not frozen, but caught in an expensive formatting loop) when huge
3761 not frozen, but caught in an expensive formatting loop) when huge
3758 variables are in the context of an exception.
3762 variables are in the context of an exception.
3759 (VerboseTB.text): Added '--->' markers at line where exception was
3763 (VerboseTB.text): Added '--->' markers at line where exception was
3760 triggered. Much clearer to read, especially in NoColor modes.
3764 triggered. Much clearer to read, especially in NoColor modes.
3761
3765
3762 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3766 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3763 implemented in reverse when changing to the new parse_options().
3767 implemented in reverse when changing to the new parse_options().
3764
3768
3765 2002-05-03 Fernando Perez <fperez@colorado.edu>
3769 2002-05-03 Fernando Perez <fperez@colorado.edu>
3766
3770
3767 * IPython/Magic.py (Magic.parse_options): new function so that
3771 * IPython/Magic.py (Magic.parse_options): new function so that
3768 magics can parse options easier.
3772 magics can parse options easier.
3769 (Magic.magic_prun): new function similar to profile.run(),
3773 (Magic.magic_prun): new function similar to profile.run(),
3770 suggested by Chris Hart.
3774 suggested by Chris Hart.
3771 (Magic.magic_cd): fixed behavior so that it only changes if
3775 (Magic.magic_cd): fixed behavior so that it only changes if
3772 directory actually is in history.
3776 directory actually is in history.
3773
3777
3774 * IPython/usage.py (__doc__): added information about potential
3778 * IPython/usage.py (__doc__): added information about potential
3775 slowness of Verbose exception mode when there are huge data
3779 slowness of Verbose exception mode when there are huge data
3776 structures to be formatted (thanks to Archie Paulson).
3780 structures to be formatted (thanks to Archie Paulson).
3777
3781
3778 * IPython/ipmaker.py (make_IPython): Changed default logging
3782 * IPython/ipmaker.py (make_IPython): Changed default logging
3779 (when simply called with -log) to use curr_dir/ipython.log in
3783 (when simply called with -log) to use curr_dir/ipython.log in
3780 rotate mode. Fixed crash which was occuring with -log before
3784 rotate mode. Fixed crash which was occuring with -log before
3781 (thanks to Jim Boyle).
3785 (thanks to Jim Boyle).
3782
3786
3783 2002-05-01 Fernando Perez <fperez@colorado.edu>
3787 2002-05-01 Fernando Perez <fperez@colorado.edu>
3784
3788
3785 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3789 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3786 was nasty -- though somewhat of a corner case).
3790 was nasty -- though somewhat of a corner case).
3787
3791
3788 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3792 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3789 text (was a bug).
3793 text (was a bug).
3790
3794
3791 2002-04-30 Fernando Perez <fperez@colorado.edu>
3795 2002-04-30 Fernando Perez <fperez@colorado.edu>
3792
3796
3793 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3797 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3794 a print after ^D or ^C from the user so that the In[] prompt
3798 a print after ^D or ^C from the user so that the In[] prompt
3795 doesn't over-run the gnuplot one.
3799 doesn't over-run the gnuplot one.
3796
3800
3797 2002-04-29 Fernando Perez <fperez@colorado.edu>
3801 2002-04-29 Fernando Perez <fperez@colorado.edu>
3798
3802
3799 * Released 0.2.10
3803 * Released 0.2.10
3800
3804
3801 * IPython/__release__.py (version): get date dynamically.
3805 * IPython/__release__.py (version): get date dynamically.
3802
3806
3803 * Misc. documentation updates thanks to Arnd's comments. Also ran
3807 * Misc. documentation updates thanks to Arnd's comments. Also ran
3804 a full spellcheck on the manual (hadn't been done in a while).
3808 a full spellcheck on the manual (hadn't been done in a while).
3805
3809
3806 2002-04-27 Fernando Perez <fperez@colorado.edu>
3810 2002-04-27 Fernando Perez <fperez@colorado.edu>
3807
3811
3808 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3812 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3809 starting a log in mid-session would reset the input history list.
3813 starting a log in mid-session would reset the input history list.
3810
3814
3811 2002-04-26 Fernando Perez <fperez@colorado.edu>
3815 2002-04-26 Fernando Perez <fperez@colorado.edu>
3812
3816
3813 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3817 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3814 all files were being included in an update. Now anything in
3818 all files were being included in an update. Now anything in
3815 UserConfig that matches [A-Za-z]*.py will go (this excludes
3819 UserConfig that matches [A-Za-z]*.py will go (this excludes
3816 __init__.py)
3820 __init__.py)
3817
3821
3818 2002-04-25 Fernando Perez <fperez@colorado.edu>
3822 2002-04-25 Fernando Perez <fperez@colorado.edu>
3819
3823
3820 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3824 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3821 to __builtins__ so that any form of embedded or imported code can
3825 to __builtins__ so that any form of embedded or imported code can
3822 test for being inside IPython.
3826 test for being inside IPython.
3823
3827
3824 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3828 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3825 changed to GnuplotMagic because it's now an importable module,
3829 changed to GnuplotMagic because it's now an importable module,
3826 this makes the name follow that of the standard Gnuplot module.
3830 this makes the name follow that of the standard Gnuplot module.
3827 GnuplotMagic can now be loaded at any time in mid-session.
3831 GnuplotMagic can now be loaded at any time in mid-session.
3828
3832
3829 2002-04-24 Fernando Perez <fperez@colorado.edu>
3833 2002-04-24 Fernando Perez <fperez@colorado.edu>
3830
3834
3831 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3835 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3832 the globals (IPython has its own namespace) and the
3836 the globals (IPython has its own namespace) and the
3833 PhysicalQuantity stuff is much better anyway.
3837 PhysicalQuantity stuff is much better anyway.
3834
3838
3835 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3839 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3836 embedding example to standard user directory for
3840 embedding example to standard user directory for
3837 distribution. Also put it in the manual.
3841 distribution. Also put it in the manual.
3838
3842
3839 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3843 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3840 instance as first argument (so it doesn't rely on some obscure
3844 instance as first argument (so it doesn't rely on some obscure
3841 hidden global).
3845 hidden global).
3842
3846
3843 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3847 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3844 delimiters. While it prevents ().TAB from working, it allows
3848 delimiters. While it prevents ().TAB from working, it allows
3845 completions in open (... expressions. This is by far a more common
3849 completions in open (... expressions. This is by far a more common
3846 case.
3850 case.
3847
3851
3848 2002-04-23 Fernando Perez <fperez@colorado.edu>
3852 2002-04-23 Fernando Perez <fperez@colorado.edu>
3849
3853
3850 * IPython/Extensions/InterpreterPasteInput.py: new
3854 * IPython/Extensions/InterpreterPasteInput.py: new
3851 syntax-processing module for pasting lines with >>> or ... at the
3855 syntax-processing module for pasting lines with >>> or ... at the
3852 start.
3856 start.
3853
3857
3854 * IPython/Extensions/PhysicalQ_Interactive.py
3858 * IPython/Extensions/PhysicalQ_Interactive.py
3855 (PhysicalQuantityInteractive.__int__): fixed to work with either
3859 (PhysicalQuantityInteractive.__int__): fixed to work with either
3856 Numeric or math.
3860 Numeric or math.
3857
3861
3858 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3862 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3859 provided profiles. Now we have:
3863 provided profiles. Now we have:
3860 -math -> math module as * and cmath with its own namespace.
3864 -math -> math module as * and cmath with its own namespace.
3861 -numeric -> Numeric as *, plus gnuplot & grace
3865 -numeric -> Numeric as *, plus gnuplot & grace
3862 -physics -> same as before
3866 -physics -> same as before
3863
3867
3864 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3868 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3865 user-defined magics wouldn't be found by @magic if they were
3869 user-defined magics wouldn't be found by @magic if they were
3866 defined as class methods. Also cleaned up the namespace search
3870 defined as class methods. Also cleaned up the namespace search
3867 logic and the string building (to use %s instead of many repeated
3871 logic and the string building (to use %s instead of many repeated
3868 string adds).
3872 string adds).
3869
3873
3870 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3874 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3871 of user-defined magics to operate with class methods (cleaner, in
3875 of user-defined magics to operate with class methods (cleaner, in
3872 line with the gnuplot code).
3876 line with the gnuplot code).
3873
3877
3874 2002-04-22 Fernando Perez <fperez@colorado.edu>
3878 2002-04-22 Fernando Perez <fperez@colorado.edu>
3875
3879
3876 * setup.py: updated dependency list so that manual is updated when
3880 * setup.py: updated dependency list so that manual is updated when
3877 all included files change.
3881 all included files change.
3878
3882
3879 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3883 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3880 the delimiter removal option (the fix is ugly right now).
3884 the delimiter removal option (the fix is ugly right now).
3881
3885
3882 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3886 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3883 all of the math profile (quicker loading, no conflict between
3887 all of the math profile (quicker loading, no conflict between
3884 g-9.8 and g-gnuplot).
3888 g-9.8 and g-gnuplot).
3885
3889
3886 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3890 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3887 name of post-mortem files to IPython_crash_report.txt.
3891 name of post-mortem files to IPython_crash_report.txt.
3888
3892
3889 * Cleanup/update of the docs. Added all the new readline info and
3893 * Cleanup/update of the docs. Added all the new readline info and
3890 formatted all lists as 'real lists'.
3894 formatted all lists as 'real lists'.
3891
3895
3892 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3896 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3893 tab-completion options, since the full readline parse_and_bind is
3897 tab-completion options, since the full readline parse_and_bind is
3894 now accessible.
3898 now accessible.
3895
3899
3896 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3900 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3897 handling of readline options. Now users can specify any string to
3901 handling of readline options. Now users can specify any string to
3898 be passed to parse_and_bind(), as well as the delimiters to be
3902 be passed to parse_and_bind(), as well as the delimiters to be
3899 removed.
3903 removed.
3900 (InteractiveShell.__init__): Added __name__ to the global
3904 (InteractiveShell.__init__): Added __name__ to the global
3901 namespace so that things like Itpl which rely on its existence
3905 namespace so that things like Itpl which rely on its existence
3902 don't crash.
3906 don't crash.
3903 (InteractiveShell._prefilter): Defined the default with a _ so
3907 (InteractiveShell._prefilter): Defined the default with a _ so
3904 that prefilter() is easier to override, while the default one
3908 that prefilter() is easier to override, while the default one
3905 remains available.
3909 remains available.
3906
3910
3907 2002-04-18 Fernando Perez <fperez@colorado.edu>
3911 2002-04-18 Fernando Perez <fperez@colorado.edu>
3908
3912
3909 * Added information about pdb in the docs.
3913 * Added information about pdb in the docs.
3910
3914
3911 2002-04-17 Fernando Perez <fperez@colorado.edu>
3915 2002-04-17 Fernando Perez <fperez@colorado.edu>
3912
3916
3913 * IPython/ipmaker.py (make_IPython): added rc_override option to
3917 * IPython/ipmaker.py (make_IPython): added rc_override option to
3914 allow passing config options at creation time which may override
3918 allow passing config options at creation time which may override
3915 anything set in the config files or command line. This is
3919 anything set in the config files or command line. This is
3916 particularly useful for configuring embedded instances.
3920 particularly useful for configuring embedded instances.
3917
3921
3918 2002-04-15 Fernando Perez <fperez@colorado.edu>
3922 2002-04-15 Fernando Perez <fperez@colorado.edu>
3919
3923
3920 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3924 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3921 crash embedded instances because of the input cache falling out of
3925 crash embedded instances because of the input cache falling out of
3922 sync with the output counter.
3926 sync with the output counter.
3923
3927
3924 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3928 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3925 mode which calls pdb after an uncaught exception in IPython itself.
3929 mode which calls pdb after an uncaught exception in IPython itself.
3926
3930
3927 2002-04-14 Fernando Perez <fperez@colorado.edu>
3931 2002-04-14 Fernando Perez <fperez@colorado.edu>
3928
3932
3929 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3933 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3930 readline, fix it back after each call.
3934 readline, fix it back after each call.
3931
3935
3932 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3936 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3933 method to force all access via __call__(), which guarantees that
3937 method to force all access via __call__(), which guarantees that
3934 traceback references are properly deleted.
3938 traceback references are properly deleted.
3935
3939
3936 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3940 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3937 improve printing when pprint is in use.
3941 improve printing when pprint is in use.
3938
3942
3939 2002-04-13 Fernando Perez <fperez@colorado.edu>
3943 2002-04-13 Fernando Perez <fperez@colorado.edu>
3940
3944
3941 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3945 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3942 exceptions aren't caught anymore. If the user triggers one, he
3946 exceptions aren't caught anymore. If the user triggers one, he
3943 should know why he's doing it and it should go all the way up,
3947 should know why he's doing it and it should go all the way up,
3944 just like any other exception. So now @abort will fully kill the
3948 just like any other exception. So now @abort will fully kill the
3945 embedded interpreter and the embedding code (unless that happens
3949 embedded interpreter and the embedding code (unless that happens
3946 to catch SystemExit).
3950 to catch SystemExit).
3947
3951
3948 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3952 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3949 and a debugger() method to invoke the interactive pdb debugger
3953 and a debugger() method to invoke the interactive pdb debugger
3950 after printing exception information. Also added the corresponding
3954 after printing exception information. Also added the corresponding
3951 -pdb option and @pdb magic to control this feature, and updated
3955 -pdb option and @pdb magic to control this feature, and updated
3952 the docs. After a suggestion from Christopher Hart
3956 the docs. After a suggestion from Christopher Hart
3953 (hart-AT-caltech.edu).
3957 (hart-AT-caltech.edu).
3954
3958
3955 2002-04-12 Fernando Perez <fperez@colorado.edu>
3959 2002-04-12 Fernando Perez <fperez@colorado.edu>
3956
3960
3957 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3961 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3958 the exception handlers defined by the user (not the CrashHandler)
3962 the exception handlers defined by the user (not the CrashHandler)
3959 so that user exceptions don't trigger an ipython bug report.
3963 so that user exceptions don't trigger an ipython bug report.
3960
3964
3961 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3965 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3962 configurable (it should have always been so).
3966 configurable (it should have always been so).
3963
3967
3964 2002-03-26 Fernando Perez <fperez@colorado.edu>
3968 2002-03-26 Fernando Perez <fperez@colorado.edu>
3965
3969
3966 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3970 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3967 and there to fix embedding namespace issues. This should all be
3971 and there to fix embedding namespace issues. This should all be
3968 done in a more elegant way.
3972 done in a more elegant way.
3969
3973
3970 2002-03-25 Fernando Perez <fperez@colorado.edu>
3974 2002-03-25 Fernando Perez <fperez@colorado.edu>
3971
3975
3972 * IPython/genutils.py (get_home_dir): Try to make it work under
3976 * IPython/genutils.py (get_home_dir): Try to make it work under
3973 win9x also.
3977 win9x also.
3974
3978
3975 2002-03-20 Fernando Perez <fperez@colorado.edu>
3979 2002-03-20 Fernando Perez <fperez@colorado.edu>
3976
3980
3977 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3981 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3978 sys.displayhook untouched upon __init__.
3982 sys.displayhook untouched upon __init__.
3979
3983
3980 2002-03-19 Fernando Perez <fperez@colorado.edu>
3984 2002-03-19 Fernando Perez <fperez@colorado.edu>
3981
3985
3982 * Released 0.2.9 (for embedding bug, basically).
3986 * Released 0.2.9 (for embedding bug, basically).
3983
3987
3984 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3988 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3985 exceptions so that enclosing shell's state can be restored.
3989 exceptions so that enclosing shell's state can be restored.
3986
3990
3987 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3991 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3988 naming conventions in the .ipython/ dir.
3992 naming conventions in the .ipython/ dir.
3989
3993
3990 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3994 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3991 from delimiters list so filenames with - in them get expanded.
3995 from delimiters list so filenames with - in them get expanded.
3992
3996
3993 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3997 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3994 sys.displayhook not being properly restored after an embedded call.
3998 sys.displayhook not being properly restored after an embedded call.
3995
3999
3996 2002-03-18 Fernando Perez <fperez@colorado.edu>
4000 2002-03-18 Fernando Perez <fperez@colorado.edu>
3997
4001
3998 * Released 0.2.8
4002 * Released 0.2.8
3999
4003
4000 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4004 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4001 some files weren't being included in a -upgrade.
4005 some files weren't being included in a -upgrade.
4002 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4006 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4003 on' so that the first tab completes.
4007 on' so that the first tab completes.
4004 (InteractiveShell.handle_magic): fixed bug with spaces around
4008 (InteractiveShell.handle_magic): fixed bug with spaces around
4005 quotes breaking many magic commands.
4009 quotes breaking many magic commands.
4006
4010
4007 * setup.py: added note about ignoring the syntax error messages at
4011 * setup.py: added note about ignoring the syntax error messages at
4008 installation.
4012 installation.
4009
4013
4010 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4014 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4011 streamlining the gnuplot interface, now there's only one magic @gp.
4015 streamlining the gnuplot interface, now there's only one magic @gp.
4012
4016
4013 2002-03-17 Fernando Perez <fperez@colorado.edu>
4017 2002-03-17 Fernando Perez <fperez@colorado.edu>
4014
4018
4015 * IPython/UserConfig/magic_gnuplot.py: new name for the
4019 * IPython/UserConfig/magic_gnuplot.py: new name for the
4016 example-magic_pm.py file. Much enhanced system, now with a shell
4020 example-magic_pm.py file. Much enhanced system, now with a shell
4017 for communicating directly with gnuplot, one command at a time.
4021 for communicating directly with gnuplot, one command at a time.
4018
4022
4019 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4023 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4020 setting __name__=='__main__'.
4024 setting __name__=='__main__'.
4021
4025
4022 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4026 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4023 mini-shell for accessing gnuplot from inside ipython. Should
4027 mini-shell for accessing gnuplot from inside ipython. Should
4024 extend it later for grace access too. Inspired by Arnd's
4028 extend it later for grace access too. Inspired by Arnd's
4025 suggestion.
4029 suggestion.
4026
4030
4027 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4031 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4028 calling magic functions with () in their arguments. Thanks to Arnd
4032 calling magic functions with () in their arguments. Thanks to Arnd
4029 Baecker for pointing this to me.
4033 Baecker for pointing this to me.
4030
4034
4031 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4035 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4032 infinitely for integer or complex arrays (only worked with floats).
4036 infinitely for integer or complex arrays (only worked with floats).
4033
4037
4034 2002-03-16 Fernando Perez <fperez@colorado.edu>
4038 2002-03-16 Fernando Perez <fperez@colorado.edu>
4035
4039
4036 * setup.py: Merged setup and setup_windows into a single script
4040 * setup.py: Merged setup and setup_windows into a single script
4037 which properly handles things for windows users.
4041 which properly handles things for windows users.
4038
4042
4039 2002-03-15 Fernando Perez <fperez@colorado.edu>
4043 2002-03-15 Fernando Perez <fperez@colorado.edu>
4040
4044
4041 * Big change to the manual: now the magics are all automatically
4045 * Big change to the manual: now the magics are all automatically
4042 documented. This information is generated from their docstrings
4046 documented. This information is generated from their docstrings
4043 and put in a latex file included by the manual lyx file. This way
4047 and put in a latex file included by the manual lyx file. This way
4044 we get always up to date information for the magics. The manual
4048 we get always up to date information for the magics. The manual
4045 now also has proper version information, also auto-synced.
4049 now also has proper version information, also auto-synced.
4046
4050
4047 For this to work, an undocumented --magic_docstrings option was added.
4051 For this to work, an undocumented --magic_docstrings option was added.
4048
4052
4049 2002-03-13 Fernando Perez <fperez@colorado.edu>
4053 2002-03-13 Fernando Perez <fperez@colorado.edu>
4050
4054
4051 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4055 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4052 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4056 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4053
4057
4054 2002-03-12 Fernando Perez <fperez@colorado.edu>
4058 2002-03-12 Fernando Perez <fperez@colorado.edu>
4055
4059
4056 * IPython/ultraTB.py (TermColors): changed color escapes again to
4060 * IPython/ultraTB.py (TermColors): changed color escapes again to
4057 fix the (old, reintroduced) line-wrapping bug. Basically, if
4061 fix the (old, reintroduced) line-wrapping bug. Basically, if
4058 \001..\002 aren't given in the color escapes, lines get wrapped
4062 \001..\002 aren't given in the color escapes, lines get wrapped
4059 weirdly. But giving those screws up old xterms and emacs terms. So
4063 weirdly. But giving those screws up old xterms and emacs terms. So
4060 I added some logic for emacs terms to be ok, but I can't identify old
4064 I added some logic for emacs terms to be ok, but I can't identify old
4061 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4065 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4062
4066
4063 2002-03-10 Fernando Perez <fperez@colorado.edu>
4067 2002-03-10 Fernando Perez <fperez@colorado.edu>
4064
4068
4065 * IPython/usage.py (__doc__): Various documentation cleanups and
4069 * IPython/usage.py (__doc__): Various documentation cleanups and
4066 updates, both in usage docstrings and in the manual.
4070 updates, both in usage docstrings and in the manual.
4067
4071
4068 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4072 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4069 handling of caching. Set minimum acceptabe value for having a
4073 handling of caching. Set minimum acceptabe value for having a
4070 cache at 20 values.
4074 cache at 20 values.
4071
4075
4072 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4076 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4073 install_first_time function to a method, renamed it and added an
4077 install_first_time function to a method, renamed it and added an
4074 'upgrade' mode. Now people can update their config directory with
4078 'upgrade' mode. Now people can update their config directory with
4075 a simple command line switch (-upgrade, also new).
4079 a simple command line switch (-upgrade, also new).
4076
4080
4077 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4081 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4078 @file (convenient for automagic users under Python >= 2.2).
4082 @file (convenient for automagic users under Python >= 2.2).
4079 Removed @files (it seemed more like a plural than an abbrev. of
4083 Removed @files (it seemed more like a plural than an abbrev. of
4080 'file show').
4084 'file show').
4081
4085
4082 * IPython/iplib.py (install_first_time): Fixed crash if there were
4086 * IPython/iplib.py (install_first_time): Fixed crash if there were
4083 backup files ('~') in .ipython/ install directory.
4087 backup files ('~') in .ipython/ install directory.
4084
4088
4085 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4089 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4086 system. Things look fine, but these changes are fairly
4090 system. Things look fine, but these changes are fairly
4087 intrusive. Test them for a few days.
4091 intrusive. Test them for a few days.
4088
4092
4089 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4093 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4090 the prompts system. Now all in/out prompt strings are user
4094 the prompts system. Now all in/out prompt strings are user
4091 controllable. This is particularly useful for embedding, as one
4095 controllable. This is particularly useful for embedding, as one
4092 can tag embedded instances with particular prompts.
4096 can tag embedded instances with particular prompts.
4093
4097
4094 Also removed global use of sys.ps1/2, which now allows nested
4098 Also removed global use of sys.ps1/2, which now allows nested
4095 embeddings without any problems. Added command-line options for
4099 embeddings without any problems. Added command-line options for
4096 the prompt strings.
4100 the prompt strings.
4097
4101
4098 2002-03-08 Fernando Perez <fperez@colorado.edu>
4102 2002-03-08 Fernando Perez <fperez@colorado.edu>
4099
4103
4100 * IPython/UserConfig/example-embed-short.py (ipshell): added
4104 * IPython/UserConfig/example-embed-short.py (ipshell): added
4101 example file with the bare minimum code for embedding.
4105 example file with the bare minimum code for embedding.
4102
4106
4103 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4107 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4104 functionality for the embeddable shell to be activated/deactivated
4108 functionality for the embeddable shell to be activated/deactivated
4105 either globally or at each call.
4109 either globally or at each call.
4106
4110
4107 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4111 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4108 rewriting the prompt with '--->' for auto-inputs with proper
4112 rewriting the prompt with '--->' for auto-inputs with proper
4109 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4113 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4110 this is handled by the prompts class itself, as it should.
4114 this is handled by the prompts class itself, as it should.
4111
4115
4112 2002-03-05 Fernando Perez <fperez@colorado.edu>
4116 2002-03-05 Fernando Perez <fperez@colorado.edu>
4113
4117
4114 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4118 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4115 @logstart to avoid name clashes with the math log function.
4119 @logstart to avoid name clashes with the math log function.
4116
4120
4117 * Big updates to X/Emacs section of the manual.
4121 * Big updates to X/Emacs section of the manual.
4118
4122
4119 * Removed ipython_emacs. Milan explained to me how to pass
4123 * Removed ipython_emacs. Milan explained to me how to pass
4120 arguments to ipython through Emacs. Some day I'm going to end up
4124 arguments to ipython through Emacs. Some day I'm going to end up
4121 learning some lisp...
4125 learning some lisp...
4122
4126
4123 2002-03-04 Fernando Perez <fperez@colorado.edu>
4127 2002-03-04 Fernando Perez <fperez@colorado.edu>
4124
4128
4125 * IPython/ipython_emacs: Created script to be used as the
4129 * IPython/ipython_emacs: Created script to be used as the
4126 py-python-command Emacs variable so we can pass IPython
4130 py-python-command Emacs variable so we can pass IPython
4127 parameters. I can't figure out how to tell Emacs directly to pass
4131 parameters. I can't figure out how to tell Emacs directly to pass
4128 parameters to IPython, so a dummy shell script will do it.
4132 parameters to IPython, so a dummy shell script will do it.
4129
4133
4130 Other enhancements made for things to work better under Emacs'
4134 Other enhancements made for things to work better under Emacs'
4131 various types of terminals. Many thanks to Milan Zamazal
4135 various types of terminals. Many thanks to Milan Zamazal
4132 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4136 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4133
4137
4134 2002-03-01 Fernando Perez <fperez@colorado.edu>
4138 2002-03-01 Fernando Perez <fperez@colorado.edu>
4135
4139
4136 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4140 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4137 that loading of readline is now optional. This gives better
4141 that loading of readline is now optional. This gives better
4138 control to emacs users.
4142 control to emacs users.
4139
4143
4140 * IPython/ultraTB.py (__date__): Modified color escape sequences
4144 * IPython/ultraTB.py (__date__): Modified color escape sequences
4141 and now things work fine under xterm and in Emacs' term buffers
4145 and now things work fine under xterm and in Emacs' term buffers
4142 (though not shell ones). Well, in emacs you get colors, but all
4146 (though not shell ones). Well, in emacs you get colors, but all
4143 seem to be 'light' colors (no difference between dark and light
4147 seem to be 'light' colors (no difference between dark and light
4144 ones). But the garbage chars are gone, and also in xterms. It
4148 ones). But the garbage chars are gone, and also in xterms. It
4145 seems that now I'm using 'cleaner' ansi sequences.
4149 seems that now I'm using 'cleaner' ansi sequences.
4146
4150
4147 2002-02-21 Fernando Perez <fperez@colorado.edu>
4151 2002-02-21 Fernando Perez <fperez@colorado.edu>
4148
4152
4149 * Released 0.2.7 (mainly to publish the scoping fix).
4153 * Released 0.2.7 (mainly to publish the scoping fix).
4150
4154
4151 * IPython/Logger.py (Logger.logstate): added. A corresponding
4155 * IPython/Logger.py (Logger.logstate): added. A corresponding
4152 @logstate magic was created.
4156 @logstate magic was created.
4153
4157
4154 * IPython/Magic.py: fixed nested scoping problem under Python
4158 * IPython/Magic.py: fixed nested scoping problem under Python
4155 2.1.x (automagic wasn't working).
4159 2.1.x (automagic wasn't working).
4156
4160
4157 2002-02-20 Fernando Perez <fperez@colorado.edu>
4161 2002-02-20 Fernando Perez <fperez@colorado.edu>
4158
4162
4159 * Released 0.2.6.
4163 * Released 0.2.6.
4160
4164
4161 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4165 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4162 option so that logs can come out without any headers at all.
4166 option so that logs can come out without any headers at all.
4163
4167
4164 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4168 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4165 SciPy.
4169 SciPy.
4166
4170
4167 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4171 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4168 that embedded IPython calls don't require vars() to be explicitly
4172 that embedded IPython calls don't require vars() to be explicitly
4169 passed. Now they are extracted from the caller's frame (code
4173 passed. Now they are extracted from the caller's frame (code
4170 snatched from Eric Jones' weave). Added better documentation to
4174 snatched from Eric Jones' weave). Added better documentation to
4171 the section on embedding and the example file.
4175 the section on embedding and the example file.
4172
4176
4173 * IPython/genutils.py (page): Changed so that under emacs, it just
4177 * IPython/genutils.py (page): Changed so that under emacs, it just
4174 prints the string. You can then page up and down in the emacs
4178 prints the string. You can then page up and down in the emacs
4175 buffer itself. This is how the builtin help() works.
4179 buffer itself. This is how the builtin help() works.
4176
4180
4177 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4181 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4178 macro scoping: macros need to be executed in the user's namespace
4182 macro scoping: macros need to be executed in the user's namespace
4179 to work as if they had been typed by the user.
4183 to work as if they had been typed by the user.
4180
4184
4181 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4185 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4182 execute automatically (no need to type 'exec...'). They then
4186 execute automatically (no need to type 'exec...'). They then
4183 behave like 'true macros'. The printing system was also modified
4187 behave like 'true macros'. The printing system was also modified
4184 for this to work.
4188 for this to work.
4185
4189
4186 2002-02-19 Fernando Perez <fperez@colorado.edu>
4190 2002-02-19 Fernando Perez <fperez@colorado.edu>
4187
4191
4188 * IPython/genutils.py (page_file): new function for paging files
4192 * IPython/genutils.py (page_file): new function for paging files
4189 in an OS-independent way. Also necessary for file viewing to work
4193 in an OS-independent way. Also necessary for file viewing to work
4190 well inside Emacs buffers.
4194 well inside Emacs buffers.
4191 (page): Added checks for being in an emacs buffer.
4195 (page): Added checks for being in an emacs buffer.
4192 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4196 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4193 same bug in iplib.
4197 same bug in iplib.
4194
4198
4195 2002-02-18 Fernando Perez <fperez@colorado.edu>
4199 2002-02-18 Fernando Perez <fperez@colorado.edu>
4196
4200
4197 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4201 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4198 of readline so that IPython can work inside an Emacs buffer.
4202 of readline so that IPython can work inside an Emacs buffer.
4199
4203
4200 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4204 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4201 method signatures (they weren't really bugs, but it looks cleaner
4205 method signatures (they weren't really bugs, but it looks cleaner
4202 and keeps PyChecker happy).
4206 and keeps PyChecker happy).
4203
4207
4204 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4208 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4205 for implementing various user-defined hooks. Currently only
4209 for implementing various user-defined hooks. Currently only
4206 display is done.
4210 display is done.
4207
4211
4208 * IPython/Prompts.py (CachedOutput._display): changed display
4212 * IPython/Prompts.py (CachedOutput._display): changed display
4209 functions so that they can be dynamically changed by users easily.
4213 functions so that they can be dynamically changed by users easily.
4210
4214
4211 * IPython/Extensions/numeric_formats.py (num_display): added an
4215 * IPython/Extensions/numeric_formats.py (num_display): added an
4212 extension for printing NumPy arrays in flexible manners. It
4216 extension for printing NumPy arrays in flexible manners. It
4213 doesn't do anything yet, but all the structure is in
4217 doesn't do anything yet, but all the structure is in
4214 place. Ultimately the plan is to implement output format control
4218 place. Ultimately the plan is to implement output format control
4215 like in Octave.
4219 like in Octave.
4216
4220
4217 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4221 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4218 methods are found at run-time by all the automatic machinery.
4222 methods are found at run-time by all the automatic machinery.
4219
4223
4220 2002-02-17 Fernando Perez <fperez@colorado.edu>
4224 2002-02-17 Fernando Perez <fperez@colorado.edu>
4221
4225
4222 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4226 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4223 whole file a little.
4227 whole file a little.
4224
4228
4225 * ToDo: closed this document. Now there's a new_design.lyx
4229 * ToDo: closed this document. Now there's a new_design.lyx
4226 document for all new ideas. Added making a pdf of it for the
4230 document for all new ideas. Added making a pdf of it for the
4227 end-user distro.
4231 end-user distro.
4228
4232
4229 * IPython/Logger.py (Logger.switch_log): Created this to replace
4233 * IPython/Logger.py (Logger.switch_log): Created this to replace
4230 logon() and logoff(). It also fixes a nasty crash reported by
4234 logon() and logoff(). It also fixes a nasty crash reported by
4231 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4235 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4232
4236
4233 * IPython/iplib.py (complete): got auto-completion to work with
4237 * IPython/iplib.py (complete): got auto-completion to work with
4234 automagic (I had wanted this for a long time).
4238 automagic (I had wanted this for a long time).
4235
4239
4236 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4240 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4237 to @file, since file() is now a builtin and clashes with automagic
4241 to @file, since file() is now a builtin and clashes with automagic
4238 for @file.
4242 for @file.
4239
4243
4240 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4244 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4241 of this was previously in iplib, which had grown to more than 2000
4245 of this was previously in iplib, which had grown to more than 2000
4242 lines, way too long. No new functionality, but it makes managing
4246 lines, way too long. No new functionality, but it makes managing
4243 the code a bit easier.
4247 the code a bit easier.
4244
4248
4245 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4249 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4246 information to crash reports.
4250 information to crash reports.
4247
4251
4248 2002-02-12 Fernando Perez <fperez@colorado.edu>
4252 2002-02-12 Fernando Perez <fperez@colorado.edu>
4249
4253
4250 * Released 0.2.5.
4254 * Released 0.2.5.
4251
4255
4252 2002-02-11 Fernando Perez <fperez@colorado.edu>
4256 2002-02-11 Fernando Perez <fperez@colorado.edu>
4253
4257
4254 * Wrote a relatively complete Windows installer. It puts
4258 * Wrote a relatively complete Windows installer. It puts
4255 everything in place, creates Start Menu entries and fixes the
4259 everything in place, creates Start Menu entries and fixes the
4256 color issues. Nothing fancy, but it works.
4260 color issues. Nothing fancy, but it works.
4257
4261
4258 2002-02-10 Fernando Perez <fperez@colorado.edu>
4262 2002-02-10 Fernando Perez <fperez@colorado.edu>
4259
4263
4260 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4264 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4261 os.path.expanduser() call so that we can type @run ~/myfile.py and
4265 os.path.expanduser() call so that we can type @run ~/myfile.py and
4262 have thigs work as expected.
4266 have thigs work as expected.
4263
4267
4264 * IPython/genutils.py (page): fixed exception handling so things
4268 * IPython/genutils.py (page): fixed exception handling so things
4265 work both in Unix and Windows correctly. Quitting a pager triggers
4269 work both in Unix and Windows correctly. Quitting a pager triggers
4266 an IOError/broken pipe in Unix, and in windows not finding a pager
4270 an IOError/broken pipe in Unix, and in windows not finding a pager
4267 is also an IOError, so I had to actually look at the return value
4271 is also an IOError, so I had to actually look at the return value
4268 of the exception, not just the exception itself. Should be ok now.
4272 of the exception, not just the exception itself. Should be ok now.
4269
4273
4270 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4274 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4271 modified to allow case-insensitive color scheme changes.
4275 modified to allow case-insensitive color scheme changes.
4272
4276
4273 2002-02-09 Fernando Perez <fperez@colorado.edu>
4277 2002-02-09 Fernando Perez <fperez@colorado.edu>
4274
4278
4275 * IPython/genutils.py (native_line_ends): new function to leave
4279 * IPython/genutils.py (native_line_ends): new function to leave
4276 user config files with os-native line-endings.
4280 user config files with os-native line-endings.
4277
4281
4278 * README and manual updates.
4282 * README and manual updates.
4279
4283
4280 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4284 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4281 instead of StringType to catch Unicode strings.
4285 instead of StringType to catch Unicode strings.
4282
4286
4283 * IPython/genutils.py (filefind): fixed bug for paths with
4287 * IPython/genutils.py (filefind): fixed bug for paths with
4284 embedded spaces (very common in Windows).
4288 embedded spaces (very common in Windows).
4285
4289
4286 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4290 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4287 files under Windows, so that they get automatically associated
4291 files under Windows, so that they get automatically associated
4288 with a text editor. Windows makes it a pain to handle
4292 with a text editor. Windows makes it a pain to handle
4289 extension-less files.
4293 extension-less files.
4290
4294
4291 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4295 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4292 warning about readline only occur for Posix. In Windows there's no
4296 warning about readline only occur for Posix. In Windows there's no
4293 way to get readline, so why bother with the warning.
4297 way to get readline, so why bother with the warning.
4294
4298
4295 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4299 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4296 for __str__ instead of dir(self), since dir() changed in 2.2.
4300 for __str__ instead of dir(self), since dir() changed in 2.2.
4297
4301
4298 * Ported to Windows! Tested on XP, I suspect it should work fine
4302 * Ported to Windows! Tested on XP, I suspect it should work fine
4299 on NT/2000, but I don't think it will work on 98 et al. That
4303 on NT/2000, but I don't think it will work on 98 et al. That
4300 series of Windows is such a piece of junk anyway that I won't try
4304 series of Windows is such a piece of junk anyway that I won't try
4301 porting it there. The XP port was straightforward, showed a few
4305 porting it there. The XP port was straightforward, showed a few
4302 bugs here and there (fixed all), in particular some string
4306 bugs here and there (fixed all), in particular some string
4303 handling stuff which required considering Unicode strings (which
4307 handling stuff which required considering Unicode strings (which
4304 Windows uses). This is good, but hasn't been too tested :) No
4308 Windows uses). This is good, but hasn't been too tested :) No
4305 fancy installer yet, I'll put a note in the manual so people at
4309 fancy installer yet, I'll put a note in the manual so people at
4306 least make manually a shortcut.
4310 least make manually a shortcut.
4307
4311
4308 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4312 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4309 into a single one, "colors". This now controls both prompt and
4313 into a single one, "colors". This now controls both prompt and
4310 exception color schemes, and can be changed both at startup
4314 exception color schemes, and can be changed both at startup
4311 (either via command-line switches or via ipythonrc files) and at
4315 (either via command-line switches or via ipythonrc files) and at
4312 runtime, with @colors.
4316 runtime, with @colors.
4313 (Magic.magic_run): renamed @prun to @run and removed the old
4317 (Magic.magic_run): renamed @prun to @run and removed the old
4314 @run. The two were too similar to warrant keeping both.
4318 @run. The two were too similar to warrant keeping both.
4315
4319
4316 2002-02-03 Fernando Perez <fperez@colorado.edu>
4320 2002-02-03 Fernando Perez <fperez@colorado.edu>
4317
4321
4318 * IPython/iplib.py (install_first_time): Added comment on how to
4322 * IPython/iplib.py (install_first_time): Added comment on how to
4319 configure the color options for first-time users. Put a <return>
4323 configure the color options for first-time users. Put a <return>
4320 request at the end so that small-terminal users get a chance to
4324 request at the end so that small-terminal users get a chance to
4321 read the startup info.
4325 read the startup info.
4322
4326
4323 2002-01-23 Fernando Perez <fperez@colorado.edu>
4327 2002-01-23 Fernando Perez <fperez@colorado.edu>
4324
4328
4325 * IPython/iplib.py (CachedOutput.update): Changed output memory
4329 * IPython/iplib.py (CachedOutput.update): Changed output memory
4326 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4330 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4327 input history we still use _i. Did this b/c these variable are
4331 input history we still use _i. Did this b/c these variable are
4328 very commonly used in interactive work, so the less we need to
4332 very commonly used in interactive work, so the less we need to
4329 type the better off we are.
4333 type the better off we are.
4330 (Magic.magic_prun): updated @prun to better handle the namespaces
4334 (Magic.magic_prun): updated @prun to better handle the namespaces
4331 the file will run in, including a fix for __name__ not being set
4335 the file will run in, including a fix for __name__ not being set
4332 before.
4336 before.
4333
4337
4334 2002-01-20 Fernando Perez <fperez@colorado.edu>
4338 2002-01-20 Fernando Perez <fperez@colorado.edu>
4335
4339
4336 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4340 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4337 extra garbage for Python 2.2. Need to look more carefully into
4341 extra garbage for Python 2.2. Need to look more carefully into
4338 this later.
4342 this later.
4339
4343
4340 2002-01-19 Fernando Perez <fperez@colorado.edu>
4344 2002-01-19 Fernando Perez <fperez@colorado.edu>
4341
4345
4342 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4346 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4343 display SyntaxError exceptions properly formatted when they occur
4347 display SyntaxError exceptions properly formatted when they occur
4344 (they can be triggered by imported code).
4348 (they can be triggered by imported code).
4345
4349
4346 2002-01-18 Fernando Perez <fperez@colorado.edu>
4350 2002-01-18 Fernando Perez <fperez@colorado.edu>
4347
4351
4348 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4352 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4349 SyntaxError exceptions are reported nicely formatted, instead of
4353 SyntaxError exceptions are reported nicely formatted, instead of
4350 spitting out only offset information as before.
4354 spitting out only offset information as before.
4351 (Magic.magic_prun): Added the @prun function for executing
4355 (Magic.magic_prun): Added the @prun function for executing
4352 programs with command line args inside IPython.
4356 programs with command line args inside IPython.
4353
4357
4354 2002-01-16 Fernando Perez <fperez@colorado.edu>
4358 2002-01-16 Fernando Perez <fperez@colorado.edu>
4355
4359
4356 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4360 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4357 to *not* include the last item given in a range. This brings their
4361 to *not* include the last item given in a range. This brings their
4358 behavior in line with Python's slicing:
4362 behavior in line with Python's slicing:
4359 a[n1:n2] -> a[n1]...a[n2-1]
4363 a[n1:n2] -> a[n1]...a[n2-1]
4360 It may be a bit less convenient, but I prefer to stick to Python's
4364 It may be a bit less convenient, but I prefer to stick to Python's
4361 conventions *everywhere*, so users never have to wonder.
4365 conventions *everywhere*, so users never have to wonder.
4362 (Magic.magic_macro): Added @macro function to ease the creation of
4366 (Magic.magic_macro): Added @macro function to ease the creation of
4363 macros.
4367 macros.
4364
4368
4365 2002-01-05 Fernando Perez <fperez@colorado.edu>
4369 2002-01-05 Fernando Perez <fperez@colorado.edu>
4366
4370
4367 * Released 0.2.4.
4371 * Released 0.2.4.
4368
4372
4369 * IPython/iplib.py (Magic.magic_pdef):
4373 * IPython/iplib.py (Magic.magic_pdef):
4370 (InteractiveShell.safe_execfile): report magic lines and error
4374 (InteractiveShell.safe_execfile): report magic lines and error
4371 lines without line numbers so one can easily copy/paste them for
4375 lines without line numbers so one can easily copy/paste them for
4372 re-execution.
4376 re-execution.
4373
4377
4374 * Updated manual with recent changes.
4378 * Updated manual with recent changes.
4375
4379
4376 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4380 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4377 docstring printing when class? is called. Very handy for knowing
4381 docstring printing when class? is called. Very handy for knowing
4378 how to create class instances (as long as __init__ is well
4382 how to create class instances (as long as __init__ is well
4379 documented, of course :)
4383 documented, of course :)
4380 (Magic.magic_doc): print both class and constructor docstrings.
4384 (Magic.magic_doc): print both class and constructor docstrings.
4381 (Magic.magic_pdef): give constructor info if passed a class and
4385 (Magic.magic_pdef): give constructor info if passed a class and
4382 __call__ info for callable object instances.
4386 __call__ info for callable object instances.
4383
4387
4384 2002-01-04 Fernando Perez <fperez@colorado.edu>
4388 2002-01-04 Fernando Perez <fperez@colorado.edu>
4385
4389
4386 * Made deep_reload() off by default. It doesn't always work
4390 * Made deep_reload() off by default. It doesn't always work
4387 exactly as intended, so it's probably safer to have it off. It's
4391 exactly as intended, so it's probably safer to have it off. It's
4388 still available as dreload() anyway, so nothing is lost.
4392 still available as dreload() anyway, so nothing is lost.
4389
4393
4390 2002-01-02 Fernando Perez <fperez@colorado.edu>
4394 2002-01-02 Fernando Perez <fperez@colorado.edu>
4391
4395
4392 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4396 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4393 so I wanted an updated release).
4397 so I wanted an updated release).
4394
4398
4395 2001-12-27 Fernando Perez <fperez@colorado.edu>
4399 2001-12-27 Fernando Perez <fperez@colorado.edu>
4396
4400
4397 * IPython/iplib.py (InteractiveShell.interact): Added the original
4401 * IPython/iplib.py (InteractiveShell.interact): Added the original
4398 code from 'code.py' for this module in order to change the
4402 code from 'code.py' for this module in order to change the
4399 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4403 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4400 the history cache would break when the user hit Ctrl-C, and
4404 the history cache would break when the user hit Ctrl-C, and
4401 interact() offers no way to add any hooks to it.
4405 interact() offers no way to add any hooks to it.
4402
4406
4403 2001-12-23 Fernando Perez <fperez@colorado.edu>
4407 2001-12-23 Fernando Perez <fperez@colorado.edu>
4404
4408
4405 * setup.py: added check for 'MANIFEST' before trying to remove
4409 * setup.py: added check for 'MANIFEST' before trying to remove
4406 it. Thanks to Sean Reifschneider.
4410 it. Thanks to Sean Reifschneider.
4407
4411
4408 2001-12-22 Fernando Perez <fperez@colorado.edu>
4412 2001-12-22 Fernando Perez <fperez@colorado.edu>
4409
4413
4410 * Released 0.2.2.
4414 * Released 0.2.2.
4411
4415
4412 * Finished (reasonably) writing the manual. Later will add the
4416 * Finished (reasonably) writing the manual. Later will add the
4413 python-standard navigation stylesheets, but for the time being
4417 python-standard navigation stylesheets, but for the time being
4414 it's fairly complete. Distribution will include html and pdf
4418 it's fairly complete. Distribution will include html and pdf
4415 versions.
4419 versions.
4416
4420
4417 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4421 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4418 (MayaVi author).
4422 (MayaVi author).
4419
4423
4420 2001-12-21 Fernando Perez <fperez@colorado.edu>
4424 2001-12-21 Fernando Perez <fperez@colorado.edu>
4421
4425
4422 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4426 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4423 good public release, I think (with the manual and the distutils
4427 good public release, I think (with the manual and the distutils
4424 installer). The manual can use some work, but that can go
4428 installer). The manual can use some work, but that can go
4425 slowly. Otherwise I think it's quite nice for end users. Next
4429 slowly. Otherwise I think it's quite nice for end users. Next
4426 summer, rewrite the guts of it...
4430 summer, rewrite the guts of it...
4427
4431
4428 * Changed format of ipythonrc files to use whitespace as the
4432 * Changed format of ipythonrc files to use whitespace as the
4429 separator instead of an explicit '='. Cleaner.
4433 separator instead of an explicit '='. Cleaner.
4430
4434
4431 2001-12-20 Fernando Perez <fperez@colorado.edu>
4435 2001-12-20 Fernando Perez <fperez@colorado.edu>
4432
4436
4433 * Started a manual in LyX. For now it's just a quick merge of the
4437 * Started a manual in LyX. For now it's just a quick merge of the
4434 various internal docstrings and READMEs. Later it may grow into a
4438 various internal docstrings and READMEs. Later it may grow into a
4435 nice, full-blown manual.
4439 nice, full-blown manual.
4436
4440
4437 * Set up a distutils based installer. Installation should now be
4441 * Set up a distutils based installer. Installation should now be
4438 trivially simple for end-users.
4442 trivially simple for end-users.
4439
4443
4440 2001-12-11 Fernando Perez <fperez@colorado.edu>
4444 2001-12-11 Fernando Perez <fperez@colorado.edu>
4441
4445
4442 * Released 0.2.0. First public release, announced it at
4446 * Released 0.2.0. First public release, announced it at
4443 comp.lang.python. From now on, just bugfixes...
4447 comp.lang.python. From now on, just bugfixes...
4444
4448
4445 * Went through all the files, set copyright/license notices and
4449 * Went through all the files, set copyright/license notices and
4446 cleaned up things. Ready for release.
4450 cleaned up things. Ready for release.
4447
4451
4448 2001-12-10 Fernando Perez <fperez@colorado.edu>
4452 2001-12-10 Fernando Perez <fperez@colorado.edu>
4449
4453
4450 * Changed the first-time installer not to use tarfiles. It's more
4454 * Changed the first-time installer not to use tarfiles. It's more
4451 robust now and less unix-dependent. Also makes it easier for
4455 robust now and less unix-dependent. Also makes it easier for
4452 people to later upgrade versions.
4456 people to later upgrade versions.
4453
4457
4454 * Changed @exit to @abort to reflect the fact that it's pretty
4458 * Changed @exit to @abort to reflect the fact that it's pretty
4455 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4459 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4456 becomes significant only when IPyhton is embedded: in that case,
4460 becomes significant only when IPyhton is embedded: in that case,
4457 C-D closes IPython only, but @abort kills the enclosing program
4461 C-D closes IPython only, but @abort kills the enclosing program
4458 too (unless it had called IPython inside a try catching
4462 too (unless it had called IPython inside a try catching
4459 SystemExit).
4463 SystemExit).
4460
4464
4461 * Created Shell module which exposes the actuall IPython Shell
4465 * Created Shell module which exposes the actuall IPython Shell
4462 classes, currently the normal and the embeddable one. This at
4466 classes, currently the normal and the embeddable one. This at
4463 least offers a stable interface we won't need to change when
4467 least offers a stable interface we won't need to change when
4464 (later) the internals are rewritten. That rewrite will be confined
4468 (later) the internals are rewritten. That rewrite will be confined
4465 to iplib and ipmaker, but the Shell interface should remain as is.
4469 to iplib and ipmaker, but the Shell interface should remain as is.
4466
4470
4467 * Added embed module which offers an embeddable IPShell object,
4471 * Added embed module which offers an embeddable IPShell object,
4468 useful to fire up IPython *inside* a running program. Great for
4472 useful to fire up IPython *inside* a running program. Great for
4469 debugging or dynamical data analysis.
4473 debugging or dynamical data analysis.
4470
4474
4471 2001-12-08 Fernando Perez <fperez@colorado.edu>
4475 2001-12-08 Fernando Perez <fperez@colorado.edu>
4472
4476
4473 * Fixed small bug preventing seeing info from methods of defined
4477 * Fixed small bug preventing seeing info from methods of defined
4474 objects (incorrect namespace in _ofind()).
4478 objects (incorrect namespace in _ofind()).
4475
4479
4476 * Documentation cleanup. Moved the main usage docstrings to a
4480 * Documentation cleanup. Moved the main usage docstrings to a
4477 separate file, usage.py (cleaner to maintain, and hopefully in the
4481 separate file, usage.py (cleaner to maintain, and hopefully in the
4478 future some perlpod-like way of producing interactive, man and
4482 future some perlpod-like way of producing interactive, man and
4479 html docs out of it will be found).
4483 html docs out of it will be found).
4480
4484
4481 * Added @profile to see your profile at any time.
4485 * Added @profile to see your profile at any time.
4482
4486
4483 * Added @p as an alias for 'print'. It's especially convenient if
4487 * Added @p as an alias for 'print'. It's especially convenient if
4484 using automagic ('p x' prints x).
4488 using automagic ('p x' prints x).
4485
4489
4486 * Small cleanups and fixes after a pychecker run.
4490 * Small cleanups and fixes after a pychecker run.
4487
4491
4488 * Changed the @cd command to handle @cd - and @cd -<n> for
4492 * Changed the @cd command to handle @cd - and @cd -<n> for
4489 visiting any directory in _dh.
4493 visiting any directory in _dh.
4490
4494
4491 * Introduced _dh, a history of visited directories. @dhist prints
4495 * Introduced _dh, a history of visited directories. @dhist prints
4492 it out with numbers.
4496 it out with numbers.
4493
4497
4494 2001-12-07 Fernando Perez <fperez@colorado.edu>
4498 2001-12-07 Fernando Perez <fperez@colorado.edu>
4495
4499
4496 * Released 0.1.22
4500 * Released 0.1.22
4497
4501
4498 * Made initialization a bit more robust against invalid color
4502 * Made initialization a bit more robust against invalid color
4499 options in user input (exit, not traceback-crash).
4503 options in user input (exit, not traceback-crash).
4500
4504
4501 * Changed the bug crash reporter to write the report only in the
4505 * Changed the bug crash reporter to write the report only in the
4502 user's .ipython directory. That way IPython won't litter people's
4506 user's .ipython directory. That way IPython won't litter people's
4503 hard disks with crash files all over the place. Also print on
4507 hard disks with crash files all over the place. Also print on
4504 screen the necessary mail command.
4508 screen the necessary mail command.
4505
4509
4506 * With the new ultraTB, implemented LightBG color scheme for light
4510 * With the new ultraTB, implemented LightBG color scheme for light
4507 background terminals. A lot of people like white backgrounds, so I
4511 background terminals. A lot of people like white backgrounds, so I
4508 guess we should at least give them something readable.
4512 guess we should at least give them something readable.
4509
4513
4510 2001-12-06 Fernando Perez <fperez@colorado.edu>
4514 2001-12-06 Fernando Perez <fperez@colorado.edu>
4511
4515
4512 * Modified the structure of ultraTB. Now there's a proper class
4516 * Modified the structure of ultraTB. Now there's a proper class
4513 for tables of color schemes which allow adding schemes easily and
4517 for tables of color schemes which allow adding schemes easily and
4514 switching the active scheme without creating a new instance every
4518 switching the active scheme without creating a new instance every
4515 time (which was ridiculous). The syntax for creating new schemes
4519 time (which was ridiculous). The syntax for creating new schemes
4516 is also cleaner. I think ultraTB is finally done, with a clean
4520 is also cleaner. I think ultraTB is finally done, with a clean
4517 class structure. Names are also much cleaner (now there's proper
4521 class structure. Names are also much cleaner (now there's proper
4518 color tables, no need for every variable to also have 'color' in
4522 color tables, no need for every variable to also have 'color' in
4519 its name).
4523 its name).
4520
4524
4521 * Broke down genutils into separate files. Now genutils only
4525 * Broke down genutils into separate files. Now genutils only
4522 contains utility functions, and classes have been moved to their
4526 contains utility functions, and classes have been moved to their
4523 own files (they had enough independent functionality to warrant
4527 own files (they had enough independent functionality to warrant
4524 it): ConfigLoader, OutputTrap, Struct.
4528 it): ConfigLoader, OutputTrap, Struct.
4525
4529
4526 2001-12-05 Fernando Perez <fperez@colorado.edu>
4530 2001-12-05 Fernando Perez <fperez@colorado.edu>
4527
4531
4528 * IPython turns 21! Released version 0.1.21, as a candidate for
4532 * IPython turns 21! Released version 0.1.21, as a candidate for
4529 public consumption. If all goes well, release in a few days.
4533 public consumption. If all goes well, release in a few days.
4530
4534
4531 * Fixed path bug (files in Extensions/ directory wouldn't be found
4535 * Fixed path bug (files in Extensions/ directory wouldn't be found
4532 unless IPython/ was explicitly in sys.path).
4536 unless IPython/ was explicitly in sys.path).
4533
4537
4534 * Extended the FlexCompleter class as MagicCompleter to allow
4538 * Extended the FlexCompleter class as MagicCompleter to allow
4535 completion of @-starting lines.
4539 completion of @-starting lines.
4536
4540
4537 * Created __release__.py file as a central repository for release
4541 * Created __release__.py file as a central repository for release
4538 info that other files can read from.
4542 info that other files can read from.
4539
4543
4540 * Fixed small bug in logging: when logging was turned on in
4544 * Fixed small bug in logging: when logging was turned on in
4541 mid-session, old lines with special meanings (!@?) were being
4545 mid-session, old lines with special meanings (!@?) were being
4542 logged without the prepended comment, which is necessary since
4546 logged without the prepended comment, which is necessary since
4543 they are not truly valid python syntax. This should make session
4547 they are not truly valid python syntax. This should make session
4544 restores produce less errors.
4548 restores produce less errors.
4545
4549
4546 * The namespace cleanup forced me to make a FlexCompleter class
4550 * The namespace cleanup forced me to make a FlexCompleter class
4547 which is nothing but a ripoff of rlcompleter, but with selectable
4551 which is nothing but a ripoff of rlcompleter, but with selectable
4548 namespace (rlcompleter only works in __main__.__dict__). I'll try
4552 namespace (rlcompleter only works in __main__.__dict__). I'll try
4549 to submit a note to the authors to see if this change can be
4553 to submit a note to the authors to see if this change can be
4550 incorporated in future rlcompleter releases (Dec.6: done)
4554 incorporated in future rlcompleter releases (Dec.6: done)
4551
4555
4552 * More fixes to namespace handling. It was a mess! Now all
4556 * More fixes to namespace handling. It was a mess! Now all
4553 explicit references to __main__.__dict__ are gone (except when
4557 explicit references to __main__.__dict__ are gone (except when
4554 really needed) and everything is handled through the namespace
4558 really needed) and everything is handled through the namespace
4555 dicts in the IPython instance. We seem to be getting somewhere
4559 dicts in the IPython instance. We seem to be getting somewhere
4556 with this, finally...
4560 with this, finally...
4557
4561
4558 * Small documentation updates.
4562 * Small documentation updates.
4559
4563
4560 * Created the Extensions directory under IPython (with an
4564 * Created the Extensions directory under IPython (with an
4561 __init__.py). Put the PhysicalQ stuff there. This directory should
4565 __init__.py). Put the PhysicalQ stuff there. This directory should
4562 be used for all special-purpose extensions.
4566 be used for all special-purpose extensions.
4563
4567
4564 * File renaming:
4568 * File renaming:
4565 ipythonlib --> ipmaker
4569 ipythonlib --> ipmaker
4566 ipplib --> iplib
4570 ipplib --> iplib
4567 This makes a bit more sense in terms of what these files actually do.
4571 This makes a bit more sense in terms of what these files actually do.
4568
4572
4569 * Moved all the classes and functions in ipythonlib to ipplib, so
4573 * Moved all the classes and functions in ipythonlib to ipplib, so
4570 now ipythonlib only has make_IPython(). This will ease up its
4574 now ipythonlib only has make_IPython(). This will ease up its
4571 splitting in smaller functional chunks later.
4575 splitting in smaller functional chunks later.
4572
4576
4573 * Cleaned up (done, I think) output of @whos. Better column
4577 * Cleaned up (done, I think) output of @whos. Better column
4574 formatting, and now shows str(var) for as much as it can, which is
4578 formatting, and now shows str(var) for as much as it can, which is
4575 typically what one gets with a 'print var'.
4579 typically what one gets with a 'print var'.
4576
4580
4577 2001-12-04 Fernando Perez <fperez@colorado.edu>
4581 2001-12-04 Fernando Perez <fperez@colorado.edu>
4578
4582
4579 * Fixed namespace problems. Now builtin/IPyhton/user names get
4583 * Fixed namespace problems. Now builtin/IPyhton/user names get
4580 properly reported in their namespace. Internal namespace handling
4584 properly reported in their namespace. Internal namespace handling
4581 is finally getting decent (not perfect yet, but much better than
4585 is finally getting decent (not perfect yet, but much better than
4582 the ad-hoc mess we had).
4586 the ad-hoc mess we had).
4583
4587
4584 * Removed -exit option. If people just want to run a python
4588 * Removed -exit option. If people just want to run a python
4585 script, that's what the normal interpreter is for. Less
4589 script, that's what the normal interpreter is for. Less
4586 unnecessary options, less chances for bugs.
4590 unnecessary options, less chances for bugs.
4587
4591
4588 * Added a crash handler which generates a complete post-mortem if
4592 * Added a crash handler which generates a complete post-mortem if
4589 IPython crashes. This will help a lot in tracking bugs down the
4593 IPython crashes. This will help a lot in tracking bugs down the
4590 road.
4594 road.
4591
4595
4592 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4596 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4593 which were boud to functions being reassigned would bypass the
4597 which were boud to functions being reassigned would bypass the
4594 logger, breaking the sync of _il with the prompt counter. This
4598 logger, breaking the sync of _il with the prompt counter. This
4595 would then crash IPython later when a new line was logged.
4599 would then crash IPython later when a new line was logged.
4596
4600
4597 2001-12-02 Fernando Perez <fperez@colorado.edu>
4601 2001-12-02 Fernando Perez <fperez@colorado.edu>
4598
4602
4599 * Made IPython a package. This means people don't have to clutter
4603 * Made IPython a package. This means people don't have to clutter
4600 their sys.path with yet another directory. Changed the INSTALL
4604 their sys.path with yet another directory. Changed the INSTALL
4601 file accordingly.
4605 file accordingly.
4602
4606
4603 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4607 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4604 sorts its output (so @who shows it sorted) and @whos formats the
4608 sorts its output (so @who shows it sorted) and @whos formats the
4605 table according to the width of the first column. Nicer, easier to
4609 table according to the width of the first column. Nicer, easier to
4606 read. Todo: write a generic table_format() which takes a list of
4610 read. Todo: write a generic table_format() which takes a list of
4607 lists and prints it nicely formatted, with optional row/column
4611 lists and prints it nicely formatted, with optional row/column
4608 separators and proper padding and justification.
4612 separators and proper padding and justification.
4609
4613
4610 * Released 0.1.20
4614 * Released 0.1.20
4611
4615
4612 * Fixed bug in @log which would reverse the inputcache list (a
4616 * Fixed bug in @log which would reverse the inputcache list (a
4613 copy operation was missing).
4617 copy operation was missing).
4614
4618
4615 * Code cleanup. @config was changed to use page(). Better, since
4619 * Code cleanup. @config was changed to use page(). Better, since
4616 its output is always quite long.
4620 its output is always quite long.
4617
4621
4618 * Itpl is back as a dependency. I was having too many problems
4622 * Itpl is back as a dependency. I was having too many problems
4619 getting the parametric aliases to work reliably, and it's just
4623 getting the parametric aliases to work reliably, and it's just
4620 easier to code weird string operations with it than playing %()s
4624 easier to code weird string operations with it than playing %()s
4621 games. It's only ~6k, so I don't think it's too big a deal.
4625 games. It's only ~6k, so I don't think it's too big a deal.
4622
4626
4623 * Found (and fixed) a very nasty bug with history. !lines weren't
4627 * Found (and fixed) a very nasty bug with history. !lines weren't
4624 getting cached, and the out of sync caches would crash
4628 getting cached, and the out of sync caches would crash
4625 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4629 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4626 division of labor a bit better. Bug fixed, cleaner structure.
4630 division of labor a bit better. Bug fixed, cleaner structure.
4627
4631
4628 2001-12-01 Fernando Perez <fperez@colorado.edu>
4632 2001-12-01 Fernando Perez <fperez@colorado.edu>
4629
4633
4630 * Released 0.1.19
4634 * Released 0.1.19
4631
4635
4632 * Added option -n to @hist to prevent line number printing. Much
4636 * Added option -n to @hist to prevent line number printing. Much
4633 easier to copy/paste code this way.
4637 easier to copy/paste code this way.
4634
4638
4635 * Created global _il to hold the input list. Allows easy
4639 * Created global _il to hold the input list. Allows easy
4636 re-execution of blocks of code by slicing it (inspired by Janko's
4640 re-execution of blocks of code by slicing it (inspired by Janko's
4637 comment on 'macros').
4641 comment on 'macros').
4638
4642
4639 * Small fixes and doc updates.
4643 * Small fixes and doc updates.
4640
4644
4641 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4645 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4642 much too fragile with automagic. Handles properly multi-line
4646 much too fragile with automagic. Handles properly multi-line
4643 statements and takes parameters.
4647 statements and takes parameters.
4644
4648
4645 2001-11-30 Fernando Perez <fperez@colorado.edu>
4649 2001-11-30 Fernando Perez <fperez@colorado.edu>
4646
4650
4647 * Version 0.1.18 released.
4651 * Version 0.1.18 released.
4648
4652
4649 * Fixed nasty namespace bug in initial module imports.
4653 * Fixed nasty namespace bug in initial module imports.
4650
4654
4651 * Added copyright/license notes to all code files (except
4655 * Added copyright/license notes to all code files (except
4652 DPyGetOpt). For the time being, LGPL. That could change.
4656 DPyGetOpt). For the time being, LGPL. That could change.
4653
4657
4654 * Rewrote a much nicer README, updated INSTALL, cleaned up
4658 * Rewrote a much nicer README, updated INSTALL, cleaned up
4655 ipythonrc-* samples.
4659 ipythonrc-* samples.
4656
4660
4657 * Overall code/documentation cleanup. Basically ready for
4661 * Overall code/documentation cleanup. Basically ready for
4658 release. Only remaining thing: licence decision (LGPL?).
4662 release. Only remaining thing: licence decision (LGPL?).
4659
4663
4660 * Converted load_config to a class, ConfigLoader. Now recursion
4664 * Converted load_config to a class, ConfigLoader. Now recursion
4661 control is better organized. Doesn't include the same file twice.
4665 control is better organized. Doesn't include the same file twice.
4662
4666
4663 2001-11-29 Fernando Perez <fperez@colorado.edu>
4667 2001-11-29 Fernando Perez <fperez@colorado.edu>
4664
4668
4665 * Got input history working. Changed output history variables from
4669 * Got input history working. Changed output history variables from
4666 _p to _o so that _i is for input and _o for output. Just cleaner
4670 _p to _o so that _i is for input and _o for output. Just cleaner
4667 convention.
4671 convention.
4668
4672
4669 * Implemented parametric aliases. This pretty much allows the
4673 * Implemented parametric aliases. This pretty much allows the
4670 alias system to offer full-blown shell convenience, I think.
4674 alias system to offer full-blown shell convenience, I think.
4671
4675
4672 * Version 0.1.17 released, 0.1.18 opened.
4676 * Version 0.1.17 released, 0.1.18 opened.
4673
4677
4674 * dot_ipython/ipythonrc (alias): added documentation.
4678 * dot_ipython/ipythonrc (alias): added documentation.
4675 (xcolor): Fixed small bug (xcolors -> xcolor)
4679 (xcolor): Fixed small bug (xcolors -> xcolor)
4676
4680
4677 * Changed the alias system. Now alias is a magic command to define
4681 * Changed the alias system. Now alias is a magic command to define
4678 aliases just like the shell. Rationale: the builtin magics should
4682 aliases just like the shell. Rationale: the builtin magics should
4679 be there for things deeply connected to IPython's
4683 be there for things deeply connected to IPython's
4680 architecture. And this is a much lighter system for what I think
4684 architecture. And this is a much lighter system for what I think
4681 is the really important feature: allowing users to define quickly
4685 is the really important feature: allowing users to define quickly
4682 magics that will do shell things for them, so they can customize
4686 magics that will do shell things for them, so they can customize
4683 IPython easily to match their work habits. If someone is really
4687 IPython easily to match their work habits. If someone is really
4684 desperate to have another name for a builtin alias, they can
4688 desperate to have another name for a builtin alias, they can
4685 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4689 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4686 works.
4690 works.
4687
4691
4688 2001-11-28 Fernando Perez <fperez@colorado.edu>
4692 2001-11-28 Fernando Perez <fperez@colorado.edu>
4689
4693
4690 * Changed @file so that it opens the source file at the proper
4694 * Changed @file so that it opens the source file at the proper
4691 line. Since it uses less, if your EDITOR environment is
4695 line. Since it uses less, if your EDITOR environment is
4692 configured, typing v will immediately open your editor of choice
4696 configured, typing v will immediately open your editor of choice
4693 right at the line where the object is defined. Not as quick as
4697 right at the line where the object is defined. Not as quick as
4694 having a direct @edit command, but for all intents and purposes it
4698 having a direct @edit command, but for all intents and purposes it
4695 works. And I don't have to worry about writing @edit to deal with
4699 works. And I don't have to worry about writing @edit to deal with
4696 all the editors, less does that.
4700 all the editors, less does that.
4697
4701
4698 * Version 0.1.16 released, 0.1.17 opened.
4702 * Version 0.1.16 released, 0.1.17 opened.
4699
4703
4700 * Fixed some nasty bugs in the page/page_dumb combo that could
4704 * Fixed some nasty bugs in the page/page_dumb combo that could
4701 crash IPython.
4705 crash IPython.
4702
4706
4703 2001-11-27 Fernando Perez <fperez@colorado.edu>
4707 2001-11-27 Fernando Perez <fperez@colorado.edu>
4704
4708
4705 * Version 0.1.15 released, 0.1.16 opened.
4709 * Version 0.1.15 released, 0.1.16 opened.
4706
4710
4707 * Finally got ? and ?? to work for undefined things: now it's
4711 * Finally got ? and ?? to work for undefined things: now it's
4708 possible to type {}.get? and get information about the get method
4712 possible to type {}.get? and get information about the get method
4709 of dicts, or os.path? even if only os is defined (so technically
4713 of dicts, or os.path? even if only os is defined (so technically
4710 os.path isn't). Works at any level. For example, after import os,
4714 os.path isn't). Works at any level. For example, after import os,
4711 os?, os.path?, os.path.abspath? all work. This is great, took some
4715 os?, os.path?, os.path.abspath? all work. This is great, took some
4712 work in _ofind.
4716 work in _ofind.
4713
4717
4714 * Fixed more bugs with logging. The sanest way to do it was to add
4718 * Fixed more bugs with logging. The sanest way to do it was to add
4715 to @log a 'mode' parameter. Killed two in one shot (this mode
4719 to @log a 'mode' parameter. Killed two in one shot (this mode
4716 option was a request of Janko's). I think it's finally clean
4720 option was a request of Janko's). I think it's finally clean
4717 (famous last words).
4721 (famous last words).
4718
4722
4719 * Added a page_dumb() pager which does a decent job of paging on
4723 * Added a page_dumb() pager which does a decent job of paging on
4720 screen, if better things (like less) aren't available. One less
4724 screen, if better things (like less) aren't available. One less
4721 unix dependency (someday maybe somebody will port this to
4725 unix dependency (someday maybe somebody will port this to
4722 windows).
4726 windows).
4723
4727
4724 * Fixed problem in magic_log: would lock of logging out if log
4728 * Fixed problem in magic_log: would lock of logging out if log
4725 creation failed (because it would still think it had succeeded).
4729 creation failed (because it would still think it had succeeded).
4726
4730
4727 * Improved the page() function using curses to auto-detect screen
4731 * Improved the page() function using curses to auto-detect screen
4728 size. Now it can make a much better decision on whether to print
4732 size. Now it can make a much better decision on whether to print
4729 or page a string. Option screen_length was modified: a value 0
4733 or page a string. Option screen_length was modified: a value 0
4730 means auto-detect, and that's the default now.
4734 means auto-detect, and that's the default now.
4731
4735
4732 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4736 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4733 go out. I'll test it for a few days, then talk to Janko about
4737 go out. I'll test it for a few days, then talk to Janko about
4734 licences and announce it.
4738 licences and announce it.
4735
4739
4736 * Fixed the length of the auto-generated ---> prompt which appears
4740 * Fixed the length of the auto-generated ---> prompt which appears
4737 for auto-parens and auto-quotes. Getting this right isn't trivial,
4741 for auto-parens and auto-quotes. Getting this right isn't trivial,
4738 with all the color escapes, different prompt types and optional
4742 with all the color escapes, different prompt types and optional
4739 separators. But it seems to be working in all the combinations.
4743 separators. But it seems to be working in all the combinations.
4740
4744
4741 2001-11-26 Fernando Perez <fperez@colorado.edu>
4745 2001-11-26 Fernando Perez <fperez@colorado.edu>
4742
4746
4743 * Wrote a regexp filter to get option types from the option names
4747 * Wrote a regexp filter to get option types from the option names
4744 string. This eliminates the need to manually keep two duplicate
4748 string. This eliminates the need to manually keep two duplicate
4745 lists.
4749 lists.
4746
4750
4747 * Removed the unneeded check_option_names. Now options are handled
4751 * Removed the unneeded check_option_names. Now options are handled
4748 in a much saner manner and it's easy to visually check that things
4752 in a much saner manner and it's easy to visually check that things
4749 are ok.
4753 are ok.
4750
4754
4751 * Updated version numbers on all files I modified to carry a
4755 * Updated version numbers on all files I modified to carry a
4752 notice so Janko and Nathan have clear version markers.
4756 notice so Janko and Nathan have clear version markers.
4753
4757
4754 * Updated docstring for ultraTB with my changes. I should send
4758 * Updated docstring for ultraTB with my changes. I should send
4755 this to Nathan.
4759 this to Nathan.
4756
4760
4757 * Lots of small fixes. Ran everything through pychecker again.
4761 * Lots of small fixes. Ran everything through pychecker again.
4758
4762
4759 * Made loading of deep_reload an cmd line option. If it's not too
4763 * Made loading of deep_reload an cmd line option. If it's not too
4760 kosher, now people can just disable it. With -nodeep_reload it's
4764 kosher, now people can just disable it. With -nodeep_reload it's
4761 still available as dreload(), it just won't overwrite reload().
4765 still available as dreload(), it just won't overwrite reload().
4762
4766
4763 * Moved many options to the no| form (-opt and -noopt
4767 * Moved many options to the no| form (-opt and -noopt
4764 accepted). Cleaner.
4768 accepted). Cleaner.
4765
4769
4766 * Changed magic_log so that if called with no parameters, it uses
4770 * Changed magic_log so that if called with no parameters, it uses
4767 'rotate' mode. That way auto-generated logs aren't automatically
4771 'rotate' mode. That way auto-generated logs aren't automatically
4768 over-written. For normal logs, now a backup is made if it exists
4772 over-written. For normal logs, now a backup is made if it exists
4769 (only 1 level of backups). A new 'backup' mode was added to the
4773 (only 1 level of backups). A new 'backup' mode was added to the
4770 Logger class to support this. This was a request by Janko.
4774 Logger class to support this. This was a request by Janko.
4771
4775
4772 * Added @logoff/@logon to stop/restart an active log.
4776 * Added @logoff/@logon to stop/restart an active log.
4773
4777
4774 * Fixed a lot of bugs in log saving/replay. It was pretty
4778 * Fixed a lot of bugs in log saving/replay. It was pretty
4775 broken. Now special lines (!@,/) appear properly in the command
4779 broken. Now special lines (!@,/) appear properly in the command
4776 history after a log replay.
4780 history after a log replay.
4777
4781
4778 * Tried and failed to implement full session saving via pickle. My
4782 * Tried and failed to implement full session saving via pickle. My
4779 idea was to pickle __main__.__dict__, but modules can't be
4783 idea was to pickle __main__.__dict__, but modules can't be
4780 pickled. This would be a better alternative to replaying logs, but
4784 pickled. This would be a better alternative to replaying logs, but
4781 seems quite tricky to get to work. Changed -session to be called
4785 seems quite tricky to get to work. Changed -session to be called
4782 -logplay, which more accurately reflects what it does. And if we
4786 -logplay, which more accurately reflects what it does. And if we
4783 ever get real session saving working, -session is now available.
4787 ever get real session saving working, -session is now available.
4784
4788
4785 * Implemented color schemes for prompts also. As for tracebacks,
4789 * Implemented color schemes for prompts also. As for tracebacks,
4786 currently only NoColor and Linux are supported. But now the
4790 currently only NoColor and Linux are supported. But now the
4787 infrastructure is in place, based on a generic ColorScheme
4791 infrastructure is in place, based on a generic ColorScheme
4788 class. So writing and activating new schemes both for the prompts
4792 class. So writing and activating new schemes both for the prompts
4789 and the tracebacks should be straightforward.
4793 and the tracebacks should be straightforward.
4790
4794
4791 * Version 0.1.13 released, 0.1.14 opened.
4795 * Version 0.1.13 released, 0.1.14 opened.
4792
4796
4793 * Changed handling of options for output cache. Now counter is
4797 * Changed handling of options for output cache. Now counter is
4794 hardwired starting at 1 and one specifies the maximum number of
4798 hardwired starting at 1 and one specifies the maximum number of
4795 entries *in the outcache* (not the max prompt counter). This is
4799 entries *in the outcache* (not the max prompt counter). This is
4796 much better, since many statements won't increase the cache
4800 much better, since many statements won't increase the cache
4797 count. It also eliminated some confusing options, now there's only
4801 count. It also eliminated some confusing options, now there's only
4798 one: cache_size.
4802 one: cache_size.
4799
4803
4800 * Added 'alias' magic function and magic_alias option in the
4804 * Added 'alias' magic function and magic_alias option in the
4801 ipythonrc file. Now the user can easily define whatever names he
4805 ipythonrc file. Now the user can easily define whatever names he
4802 wants for the magic functions without having to play weird
4806 wants for the magic functions without having to play weird
4803 namespace games. This gives IPython a real shell-like feel.
4807 namespace games. This gives IPython a real shell-like feel.
4804
4808
4805 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4809 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4806 @ or not).
4810 @ or not).
4807
4811
4808 This was one of the last remaining 'visible' bugs (that I know
4812 This was one of the last remaining 'visible' bugs (that I know
4809 of). I think if I can clean up the session loading so it works
4813 of). I think if I can clean up the session loading so it works
4810 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4814 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4811 about licensing).
4815 about licensing).
4812
4816
4813 2001-11-25 Fernando Perez <fperez@colorado.edu>
4817 2001-11-25 Fernando Perez <fperez@colorado.edu>
4814
4818
4815 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4819 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4816 there's a cleaner distinction between what ? and ?? show.
4820 there's a cleaner distinction between what ? and ?? show.
4817
4821
4818 * Added screen_length option. Now the user can define his own
4822 * Added screen_length option. Now the user can define his own
4819 screen size for page() operations.
4823 screen size for page() operations.
4820
4824
4821 * Implemented magic shell-like functions with automatic code
4825 * Implemented magic shell-like functions with automatic code
4822 generation. Now adding another function is just a matter of adding
4826 generation. Now adding another function is just a matter of adding
4823 an entry to a dict, and the function is dynamically generated at
4827 an entry to a dict, and the function is dynamically generated at
4824 run-time. Python has some really cool features!
4828 run-time. Python has some really cool features!
4825
4829
4826 * Renamed many options to cleanup conventions a little. Now all
4830 * Renamed many options to cleanup conventions a little. Now all
4827 are lowercase, and only underscores where needed. Also in the code
4831 are lowercase, and only underscores where needed. Also in the code
4828 option name tables are clearer.
4832 option name tables are clearer.
4829
4833
4830 * Changed prompts a little. Now input is 'In [n]:' instead of
4834 * Changed prompts a little. Now input is 'In [n]:' instead of
4831 'In[n]:='. This allows it the numbers to be aligned with the
4835 'In[n]:='. This allows it the numbers to be aligned with the
4832 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4836 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4833 Python (it was a Mathematica thing). The '...' continuation prompt
4837 Python (it was a Mathematica thing). The '...' continuation prompt
4834 was also changed a little to align better.
4838 was also changed a little to align better.
4835
4839
4836 * Fixed bug when flushing output cache. Not all _p<n> variables
4840 * Fixed bug when flushing output cache. Not all _p<n> variables
4837 exist, so their deletion needs to be wrapped in a try:
4841 exist, so their deletion needs to be wrapped in a try:
4838
4842
4839 * Figured out how to properly use inspect.formatargspec() (it
4843 * Figured out how to properly use inspect.formatargspec() (it
4840 requires the args preceded by *). So I removed all the code from
4844 requires the args preceded by *). So I removed all the code from
4841 _get_pdef in Magic, which was just replicating that.
4845 _get_pdef in Magic, which was just replicating that.
4842
4846
4843 * Added test to prefilter to allow redefining magic function names
4847 * Added test to prefilter to allow redefining magic function names
4844 as variables. This is ok, since the @ form is always available,
4848 as variables. This is ok, since the @ form is always available,
4845 but whe should allow the user to define a variable called 'ls' if
4849 but whe should allow the user to define a variable called 'ls' if
4846 he needs it.
4850 he needs it.
4847
4851
4848 * Moved the ToDo information from README into a separate ToDo.
4852 * Moved the ToDo information from README into a separate ToDo.
4849
4853
4850 * General code cleanup and small bugfixes. I think it's close to a
4854 * General code cleanup and small bugfixes. I think it's close to a
4851 state where it can be released, obviously with a big 'beta'
4855 state where it can be released, obviously with a big 'beta'
4852 warning on it.
4856 warning on it.
4853
4857
4854 * Got the magic function split to work. Now all magics are defined
4858 * Got the magic function split to work. Now all magics are defined
4855 in a separate class. It just organizes things a bit, and now
4859 in a separate class. It just organizes things a bit, and now
4856 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4860 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4857 was too long).
4861 was too long).
4858
4862
4859 * Changed @clear to @reset to avoid potential confusions with
4863 * Changed @clear to @reset to avoid potential confusions with
4860 the shell command clear. Also renamed @cl to @clear, which does
4864 the shell command clear. Also renamed @cl to @clear, which does
4861 exactly what people expect it to from their shell experience.
4865 exactly what people expect it to from their shell experience.
4862
4866
4863 Added a check to the @reset command (since it's so
4867 Added a check to the @reset command (since it's so
4864 destructive, it's probably a good idea to ask for confirmation).
4868 destructive, it's probably a good idea to ask for confirmation).
4865 But now reset only works for full namespace resetting. Since the
4869 But now reset only works for full namespace resetting. Since the
4866 del keyword is already there for deleting a few specific
4870 del keyword is already there for deleting a few specific
4867 variables, I don't see the point of having a redundant magic
4871 variables, I don't see the point of having a redundant magic
4868 function for the same task.
4872 function for the same task.
4869
4873
4870 2001-11-24 Fernando Perez <fperez@colorado.edu>
4874 2001-11-24 Fernando Perez <fperez@colorado.edu>
4871
4875
4872 * Updated the builtin docs (esp. the ? ones).
4876 * Updated the builtin docs (esp. the ? ones).
4873
4877
4874 * Ran all the code through pychecker. Not terribly impressed with
4878 * Ran all the code through pychecker. Not terribly impressed with
4875 it: lots of spurious warnings and didn't really find anything of
4879 it: lots of spurious warnings and didn't really find anything of
4876 substance (just a few modules being imported and not used).
4880 substance (just a few modules being imported and not used).
4877
4881
4878 * Implemented the new ultraTB functionality into IPython. New
4882 * Implemented the new ultraTB functionality into IPython. New
4879 option: xcolors. This chooses color scheme. xmode now only selects
4883 option: xcolors. This chooses color scheme. xmode now only selects
4880 between Plain and Verbose. Better orthogonality.
4884 between Plain and Verbose. Better orthogonality.
4881
4885
4882 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4886 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4883 mode and color scheme for the exception handlers. Now it's
4887 mode and color scheme for the exception handlers. Now it's
4884 possible to have the verbose traceback with no coloring.
4888 possible to have the verbose traceback with no coloring.
4885
4889
4886 2001-11-23 Fernando Perez <fperez@colorado.edu>
4890 2001-11-23 Fernando Perez <fperez@colorado.edu>
4887
4891
4888 * Version 0.1.12 released, 0.1.13 opened.
4892 * Version 0.1.12 released, 0.1.13 opened.
4889
4893
4890 * Removed option to set auto-quote and auto-paren escapes by
4894 * Removed option to set auto-quote and auto-paren escapes by
4891 user. The chances of breaking valid syntax are just too high. If
4895 user. The chances of breaking valid syntax are just too high. If
4892 someone *really* wants, they can always dig into the code.
4896 someone *really* wants, they can always dig into the code.
4893
4897
4894 * Made prompt separators configurable.
4898 * Made prompt separators configurable.
4895
4899
4896 2001-11-22 Fernando Perez <fperez@colorado.edu>
4900 2001-11-22 Fernando Perez <fperez@colorado.edu>
4897
4901
4898 * Small bugfixes in many places.
4902 * Small bugfixes in many places.
4899
4903
4900 * Removed the MyCompleter class from ipplib. It seemed redundant
4904 * Removed the MyCompleter class from ipplib. It seemed redundant
4901 with the C-p,C-n history search functionality. Less code to
4905 with the C-p,C-n history search functionality. Less code to
4902 maintain.
4906 maintain.
4903
4907
4904 * Moved all the original ipython.py code into ipythonlib.py. Right
4908 * Moved all the original ipython.py code into ipythonlib.py. Right
4905 now it's just one big dump into a function called make_IPython, so
4909 now it's just one big dump into a function called make_IPython, so
4906 no real modularity has been gained. But at least it makes the
4910 no real modularity has been gained. But at least it makes the
4907 wrapper script tiny, and since ipythonlib is a module, it gets
4911 wrapper script tiny, and since ipythonlib is a module, it gets
4908 compiled and startup is much faster.
4912 compiled and startup is much faster.
4909
4913
4910 This is a reasobably 'deep' change, so we should test it for a
4914 This is a reasobably 'deep' change, so we should test it for a
4911 while without messing too much more with the code.
4915 while without messing too much more with the code.
4912
4916
4913 2001-11-21 Fernando Perez <fperez@colorado.edu>
4917 2001-11-21 Fernando Perez <fperez@colorado.edu>
4914
4918
4915 * Version 0.1.11 released, 0.1.12 opened for further work.
4919 * Version 0.1.11 released, 0.1.12 opened for further work.
4916
4920
4917 * Removed dependency on Itpl. It was only needed in one place. It
4921 * Removed dependency on Itpl. It was only needed in one place. It
4918 would be nice if this became part of python, though. It makes life
4922 would be nice if this became part of python, though. It makes life
4919 *a lot* easier in some cases.
4923 *a lot* easier in some cases.
4920
4924
4921 * Simplified the prefilter code a bit. Now all handlers are
4925 * Simplified the prefilter code a bit. Now all handlers are
4922 expected to explicitly return a value (at least a blank string).
4926 expected to explicitly return a value (at least a blank string).
4923
4927
4924 * Heavy edits in ipplib. Removed the help system altogether. Now
4928 * Heavy edits in ipplib. Removed the help system altogether. Now
4925 obj?/?? is used for inspecting objects, a magic @doc prints
4929 obj?/?? is used for inspecting objects, a magic @doc prints
4926 docstrings, and full-blown Python help is accessed via the 'help'
4930 docstrings, and full-blown Python help is accessed via the 'help'
4927 keyword. This cleans up a lot of code (less to maintain) and does
4931 keyword. This cleans up a lot of code (less to maintain) and does
4928 the job. Since 'help' is now a standard Python component, might as
4932 the job. Since 'help' is now a standard Python component, might as
4929 well use it and remove duplicate functionality.
4933 well use it and remove duplicate functionality.
4930
4934
4931 Also removed the option to use ipplib as a standalone program. By
4935 Also removed the option to use ipplib as a standalone program. By
4932 now it's too dependent on other parts of IPython to function alone.
4936 now it's too dependent on other parts of IPython to function alone.
4933
4937
4934 * Fixed bug in genutils.pager. It would crash if the pager was
4938 * Fixed bug in genutils.pager. It would crash if the pager was
4935 exited immediately after opening (broken pipe).
4939 exited immediately after opening (broken pipe).
4936
4940
4937 * Trimmed down the VerboseTB reporting a little. The header is
4941 * Trimmed down the VerboseTB reporting a little. The header is
4938 much shorter now and the repeated exception arguments at the end
4942 much shorter now and the repeated exception arguments at the end
4939 have been removed. For interactive use the old header seemed a bit
4943 have been removed. For interactive use the old header seemed a bit
4940 excessive.
4944 excessive.
4941
4945
4942 * Fixed small bug in output of @whos for variables with multi-word
4946 * Fixed small bug in output of @whos for variables with multi-word
4943 types (only first word was displayed).
4947 types (only first word was displayed).
4944
4948
4945 2001-11-17 Fernando Perez <fperez@colorado.edu>
4949 2001-11-17 Fernando Perez <fperez@colorado.edu>
4946
4950
4947 * Version 0.1.10 released, 0.1.11 opened for further work.
4951 * Version 0.1.10 released, 0.1.11 opened for further work.
4948
4952
4949 * Modified dirs and friends. dirs now *returns* the stack (not
4953 * Modified dirs and friends. dirs now *returns* the stack (not
4950 prints), so one can manipulate it as a variable. Convenient to
4954 prints), so one can manipulate it as a variable. Convenient to
4951 travel along many directories.
4955 travel along many directories.
4952
4956
4953 * Fixed bug in magic_pdef: would only work with functions with
4957 * Fixed bug in magic_pdef: would only work with functions with
4954 arguments with default values.
4958 arguments with default values.
4955
4959
4956 2001-11-14 Fernando Perez <fperez@colorado.edu>
4960 2001-11-14 Fernando Perez <fperez@colorado.edu>
4957
4961
4958 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4962 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4959 example with IPython. Various other minor fixes and cleanups.
4963 example with IPython. Various other minor fixes and cleanups.
4960
4964
4961 * Version 0.1.9 released, 0.1.10 opened for further work.
4965 * Version 0.1.9 released, 0.1.10 opened for further work.
4962
4966
4963 * Added sys.path to the list of directories searched in the
4967 * Added sys.path to the list of directories searched in the
4964 execfile= option. It used to be the current directory and the
4968 execfile= option. It used to be the current directory and the
4965 user's IPYTHONDIR only.
4969 user's IPYTHONDIR only.
4966
4970
4967 2001-11-13 Fernando Perez <fperez@colorado.edu>
4971 2001-11-13 Fernando Perez <fperez@colorado.edu>
4968
4972
4969 * Reinstated the raw_input/prefilter separation that Janko had
4973 * Reinstated the raw_input/prefilter separation that Janko had
4970 initially. This gives a more convenient setup for extending the
4974 initially. This gives a more convenient setup for extending the
4971 pre-processor from the outside: raw_input always gets a string,
4975 pre-processor from the outside: raw_input always gets a string,
4972 and prefilter has to process it. We can then redefine prefilter
4976 and prefilter has to process it. We can then redefine prefilter
4973 from the outside and implement extensions for special
4977 from the outside and implement extensions for special
4974 purposes.
4978 purposes.
4975
4979
4976 Today I got one for inputting PhysicalQuantity objects
4980 Today I got one for inputting PhysicalQuantity objects
4977 (from Scientific) without needing any function calls at
4981 (from Scientific) without needing any function calls at
4978 all. Extremely convenient, and it's all done as a user-level
4982 all. Extremely convenient, and it's all done as a user-level
4979 extension (no IPython code was touched). Now instead of:
4983 extension (no IPython code was touched). Now instead of:
4980 a = PhysicalQuantity(4.2,'m/s**2')
4984 a = PhysicalQuantity(4.2,'m/s**2')
4981 one can simply say
4985 one can simply say
4982 a = 4.2 m/s**2
4986 a = 4.2 m/s**2
4983 or even
4987 or even
4984 a = 4.2 m/s^2
4988 a = 4.2 m/s^2
4985
4989
4986 I use this, but it's also a proof of concept: IPython really is
4990 I use this, but it's also a proof of concept: IPython really is
4987 fully user-extensible, even at the level of the parsing of the
4991 fully user-extensible, even at the level of the parsing of the
4988 command line. It's not trivial, but it's perfectly doable.
4992 command line. It's not trivial, but it's perfectly doable.
4989
4993
4990 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4994 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4991 the problem of modules being loaded in the inverse order in which
4995 the problem of modules being loaded in the inverse order in which
4992 they were defined in
4996 they were defined in
4993
4997
4994 * Version 0.1.8 released, 0.1.9 opened for further work.
4998 * Version 0.1.8 released, 0.1.9 opened for further work.
4995
4999
4996 * Added magics pdef, source and file. They respectively show the
5000 * Added magics pdef, source and file. They respectively show the
4997 definition line ('prototype' in C), source code and full python
5001 definition line ('prototype' in C), source code and full python
4998 file for any callable object. The object inspector oinfo uses
5002 file for any callable object. The object inspector oinfo uses
4999 these to show the same information.
5003 these to show the same information.
5000
5004
5001 * Version 0.1.7 released, 0.1.8 opened for further work.
5005 * Version 0.1.7 released, 0.1.8 opened for further work.
5002
5006
5003 * Separated all the magic functions into a class called Magic. The
5007 * Separated all the magic functions into a class called Magic. The
5004 InteractiveShell class was becoming too big for Xemacs to handle
5008 InteractiveShell class was becoming too big for Xemacs to handle
5005 (de-indenting a line would lock it up for 10 seconds while it
5009 (de-indenting a line would lock it up for 10 seconds while it
5006 backtracked on the whole class!)
5010 backtracked on the whole class!)
5007
5011
5008 FIXME: didn't work. It can be done, but right now namespaces are
5012 FIXME: didn't work. It can be done, but right now namespaces are
5009 all messed up. Do it later (reverted it for now, so at least
5013 all messed up. Do it later (reverted it for now, so at least
5010 everything works as before).
5014 everything works as before).
5011
5015
5012 * Got the object introspection system (magic_oinfo) working! I
5016 * Got the object introspection system (magic_oinfo) working! I
5013 think this is pretty much ready for release to Janko, so he can
5017 think this is pretty much ready for release to Janko, so he can
5014 test it for a while and then announce it. Pretty much 100% of what
5018 test it for a while and then announce it. Pretty much 100% of what
5015 I wanted for the 'phase 1' release is ready. Happy, tired.
5019 I wanted for the 'phase 1' release is ready. Happy, tired.
5016
5020
5017 2001-11-12 Fernando Perez <fperez@colorado.edu>
5021 2001-11-12 Fernando Perez <fperez@colorado.edu>
5018
5022
5019 * Version 0.1.6 released, 0.1.7 opened for further work.
5023 * Version 0.1.6 released, 0.1.7 opened for further work.
5020
5024
5021 * Fixed bug in printing: it used to test for truth before
5025 * Fixed bug in printing: it used to test for truth before
5022 printing, so 0 wouldn't print. Now checks for None.
5026 printing, so 0 wouldn't print. Now checks for None.
5023
5027
5024 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5028 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5025 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5029 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5026 reaches by hand into the outputcache. Think of a better way to do
5030 reaches by hand into the outputcache. Think of a better way to do
5027 this later.
5031 this later.
5028
5032
5029 * Various small fixes thanks to Nathan's comments.
5033 * Various small fixes thanks to Nathan's comments.
5030
5034
5031 * Changed magic_pprint to magic_Pprint. This way it doesn't
5035 * Changed magic_pprint to magic_Pprint. This way it doesn't
5032 collide with pprint() and the name is consistent with the command
5036 collide with pprint() and the name is consistent with the command
5033 line option.
5037 line option.
5034
5038
5035 * Changed prompt counter behavior to be fully like
5039 * Changed prompt counter behavior to be fully like
5036 Mathematica's. That is, even input that doesn't return a result
5040 Mathematica's. That is, even input that doesn't return a result
5037 raises the prompt counter. The old behavior was kind of confusing
5041 raises the prompt counter. The old behavior was kind of confusing
5038 (getting the same prompt number several times if the operation
5042 (getting the same prompt number several times if the operation
5039 didn't return a result).
5043 didn't return a result).
5040
5044
5041 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5045 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5042
5046
5043 * Fixed -Classic mode (wasn't working anymore).
5047 * Fixed -Classic mode (wasn't working anymore).
5044
5048
5045 * Added colored prompts using Nathan's new code. Colors are
5049 * Added colored prompts using Nathan's new code. Colors are
5046 currently hardwired, they can be user-configurable. For
5050 currently hardwired, they can be user-configurable. For
5047 developers, they can be chosen in file ipythonlib.py, at the
5051 developers, they can be chosen in file ipythonlib.py, at the
5048 beginning of the CachedOutput class def.
5052 beginning of the CachedOutput class def.
5049
5053
5050 2001-11-11 Fernando Perez <fperez@colorado.edu>
5054 2001-11-11 Fernando Perez <fperez@colorado.edu>
5051
5055
5052 * Version 0.1.5 released, 0.1.6 opened for further work.
5056 * Version 0.1.5 released, 0.1.6 opened for further work.
5053
5057
5054 * Changed magic_env to *return* the environment as a dict (not to
5058 * Changed magic_env to *return* the environment as a dict (not to
5055 print it). This way it prints, but it can also be processed.
5059 print it). This way it prints, but it can also be processed.
5056
5060
5057 * Added Verbose exception reporting to interactive
5061 * Added Verbose exception reporting to interactive
5058 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5062 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5059 traceback. Had to make some changes to the ultraTB file. This is
5063 traceback. Had to make some changes to the ultraTB file. This is
5060 probably the last 'big' thing in my mental todo list. This ties
5064 probably the last 'big' thing in my mental todo list. This ties
5061 in with the next entry:
5065 in with the next entry:
5062
5066
5063 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5067 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5064 has to specify is Plain, Color or Verbose for all exception
5068 has to specify is Plain, Color or Verbose for all exception
5065 handling.
5069 handling.
5066
5070
5067 * Removed ShellServices option. All this can really be done via
5071 * Removed ShellServices option. All this can really be done via
5068 the magic system. It's easier to extend, cleaner and has automatic
5072 the magic system. It's easier to extend, cleaner and has automatic
5069 namespace protection and documentation.
5073 namespace protection and documentation.
5070
5074
5071 2001-11-09 Fernando Perez <fperez@colorado.edu>
5075 2001-11-09 Fernando Perez <fperez@colorado.edu>
5072
5076
5073 * Fixed bug in output cache flushing (missing parameter to
5077 * Fixed bug in output cache flushing (missing parameter to
5074 __init__). Other small bugs fixed (found using pychecker).
5078 __init__). Other small bugs fixed (found using pychecker).
5075
5079
5076 * Version 0.1.4 opened for bugfixing.
5080 * Version 0.1.4 opened for bugfixing.
5077
5081
5078 2001-11-07 Fernando Perez <fperez@colorado.edu>
5082 2001-11-07 Fernando Perez <fperez@colorado.edu>
5079
5083
5080 * Version 0.1.3 released, mainly because of the raw_input bug.
5084 * Version 0.1.3 released, mainly because of the raw_input bug.
5081
5085
5082 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5086 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5083 and when testing for whether things were callable, a call could
5087 and when testing for whether things were callable, a call could
5084 actually be made to certain functions. They would get called again
5088 actually be made to certain functions. They would get called again
5085 once 'really' executed, with a resulting double call. A disaster
5089 once 'really' executed, with a resulting double call. A disaster
5086 in many cases (list.reverse() would never work!).
5090 in many cases (list.reverse() would never work!).
5087
5091
5088 * Removed prefilter() function, moved its code to raw_input (which
5092 * Removed prefilter() function, moved its code to raw_input (which
5089 after all was just a near-empty caller for prefilter). This saves
5093 after all was just a near-empty caller for prefilter). This saves
5090 a function call on every prompt, and simplifies the class a tiny bit.
5094 a function call on every prompt, and simplifies the class a tiny bit.
5091
5095
5092 * Fix _ip to __ip name in magic example file.
5096 * Fix _ip to __ip name in magic example file.
5093
5097
5094 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5098 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5095 work with non-gnu versions of tar.
5099 work with non-gnu versions of tar.
5096
5100
5097 2001-11-06 Fernando Perez <fperez@colorado.edu>
5101 2001-11-06 Fernando Perez <fperez@colorado.edu>
5098
5102
5099 * Version 0.1.2. Just to keep track of the recent changes.
5103 * Version 0.1.2. Just to keep track of the recent changes.
5100
5104
5101 * Fixed nasty bug in output prompt routine. It used to check 'if
5105 * Fixed nasty bug in output prompt routine. It used to check 'if
5102 arg != None...'. Problem is, this fails if arg implements a
5106 arg != None...'. Problem is, this fails if arg implements a
5103 special comparison (__cmp__) which disallows comparing to
5107 special comparison (__cmp__) which disallows comparing to
5104 None. Found it when trying to use the PhysicalQuantity module from
5108 None. Found it when trying to use the PhysicalQuantity module from
5105 ScientificPython.
5109 ScientificPython.
5106
5110
5107 2001-11-05 Fernando Perez <fperez@colorado.edu>
5111 2001-11-05 Fernando Perez <fperez@colorado.edu>
5108
5112
5109 * Also added dirs. Now the pushd/popd/dirs family functions
5113 * Also added dirs. Now the pushd/popd/dirs family functions
5110 basically like the shell, with the added convenience of going home
5114 basically like the shell, with the added convenience of going home
5111 when called with no args.
5115 when called with no args.
5112
5116
5113 * pushd/popd slightly modified to mimic shell behavior more
5117 * pushd/popd slightly modified to mimic shell behavior more
5114 closely.
5118 closely.
5115
5119
5116 * Added env,pushd,popd from ShellServices as magic functions. I
5120 * Added env,pushd,popd from ShellServices as magic functions. I
5117 think the cleanest will be to port all desired functions from
5121 think the cleanest will be to port all desired functions from
5118 ShellServices as magics and remove ShellServices altogether. This
5122 ShellServices as magics and remove ShellServices altogether. This
5119 will provide a single, clean way of adding functionality
5123 will provide a single, clean way of adding functionality
5120 (shell-type or otherwise) to IP.
5124 (shell-type or otherwise) to IP.
5121
5125
5122 2001-11-04 Fernando Perez <fperez@colorado.edu>
5126 2001-11-04 Fernando Perez <fperez@colorado.edu>
5123
5127
5124 * Added .ipython/ directory to sys.path. This way users can keep
5128 * Added .ipython/ directory to sys.path. This way users can keep
5125 customizations there and access them via import.
5129 customizations there and access them via import.
5126
5130
5127 2001-11-03 Fernando Perez <fperez@colorado.edu>
5131 2001-11-03 Fernando Perez <fperez@colorado.edu>
5128
5132
5129 * Opened version 0.1.1 for new changes.
5133 * Opened version 0.1.1 for new changes.
5130
5134
5131 * Changed version number to 0.1.0: first 'public' release, sent to
5135 * Changed version number to 0.1.0: first 'public' release, sent to
5132 Nathan and Janko.
5136 Nathan and Janko.
5133
5137
5134 * Lots of small fixes and tweaks.
5138 * Lots of small fixes and tweaks.
5135
5139
5136 * Minor changes to whos format. Now strings are shown, snipped if
5140 * Minor changes to whos format. Now strings are shown, snipped if
5137 too long.
5141 too long.
5138
5142
5139 * Changed ShellServices to work on __main__ so they show up in @who
5143 * Changed ShellServices to work on __main__ so they show up in @who
5140
5144
5141 * Help also works with ? at the end of a line:
5145 * Help also works with ? at the end of a line:
5142 ?sin and sin?
5146 ?sin and sin?
5143 both produce the same effect. This is nice, as often I use the
5147 both produce the same effect. This is nice, as often I use the
5144 tab-complete to find the name of a method, but I used to then have
5148 tab-complete to find the name of a method, but I used to then have
5145 to go to the beginning of the line to put a ? if I wanted more
5149 to go to the beginning of the line to put a ? if I wanted more
5146 info. Now I can just add the ? and hit return. Convenient.
5150 info. Now I can just add the ? and hit return. Convenient.
5147
5151
5148 2001-11-02 Fernando Perez <fperez@colorado.edu>
5152 2001-11-02 Fernando Perez <fperez@colorado.edu>
5149
5153
5150 * Python version check (>=2.1) added.
5154 * Python version check (>=2.1) added.
5151
5155
5152 * Added LazyPython documentation. At this point the docs are quite
5156 * Added LazyPython documentation. At this point the docs are quite
5153 a mess. A cleanup is in order.
5157 a mess. A cleanup is in order.
5154
5158
5155 * Auto-installer created. For some bizarre reason, the zipfiles
5159 * Auto-installer created. For some bizarre reason, the zipfiles
5156 module isn't working on my system. So I made a tar version
5160 module isn't working on my system. So I made a tar version
5157 (hopefully the command line options in various systems won't kill
5161 (hopefully the command line options in various systems won't kill
5158 me).
5162 me).
5159
5163
5160 * Fixes to Struct in genutils. Now all dictionary-like methods are
5164 * Fixes to Struct in genutils. Now all dictionary-like methods are
5161 protected (reasonably).
5165 protected (reasonably).
5162
5166
5163 * Added pager function to genutils and changed ? to print usage
5167 * Added pager function to genutils and changed ? to print usage
5164 note through it (it was too long).
5168 note through it (it was too long).
5165
5169
5166 * Added the LazyPython functionality. Works great! I changed the
5170 * Added the LazyPython functionality. Works great! I changed the
5167 auto-quote escape to ';', it's on home row and next to '. But
5171 auto-quote escape to ';', it's on home row and next to '. But
5168 both auto-quote and auto-paren (still /) escapes are command-line
5172 both auto-quote and auto-paren (still /) escapes are command-line
5169 parameters.
5173 parameters.
5170
5174
5171
5175
5172 2001-11-01 Fernando Perez <fperez@colorado.edu>
5176 2001-11-01 Fernando Perez <fperez@colorado.edu>
5173
5177
5174 * Version changed to 0.0.7. Fairly large change: configuration now
5178 * Version changed to 0.0.7. Fairly large change: configuration now
5175 is all stored in a directory, by default .ipython. There, all
5179 is all stored in a directory, by default .ipython. There, all
5176 config files have normal looking names (not .names)
5180 config files have normal looking names (not .names)
5177
5181
5178 * Version 0.0.6 Released first to Lucas and Archie as a test
5182 * Version 0.0.6 Released first to Lucas and Archie as a test
5179 run. Since it's the first 'semi-public' release, change version to
5183 run. Since it's the first 'semi-public' release, change version to
5180 > 0.0.6 for any changes now.
5184 > 0.0.6 for any changes now.
5181
5185
5182 * Stuff I had put in the ipplib.py changelog:
5186 * Stuff I had put in the ipplib.py changelog:
5183
5187
5184 Changes to InteractiveShell:
5188 Changes to InteractiveShell:
5185
5189
5186 - Made the usage message a parameter.
5190 - Made the usage message a parameter.
5187
5191
5188 - Require the name of the shell variable to be given. It's a bit
5192 - Require the name of the shell variable to be given. It's a bit
5189 of a hack, but allows the name 'shell' not to be hardwire in the
5193 of a hack, but allows the name 'shell' not to be hardwire in the
5190 magic (@) handler, which is problematic b/c it requires
5194 magic (@) handler, which is problematic b/c it requires
5191 polluting the global namespace with 'shell'. This in turn is
5195 polluting the global namespace with 'shell'. This in turn is
5192 fragile: if a user redefines a variable called shell, things
5196 fragile: if a user redefines a variable called shell, things
5193 break.
5197 break.
5194
5198
5195 - magic @: all functions available through @ need to be defined
5199 - magic @: all functions available through @ need to be defined
5196 as magic_<name>, even though they can be called simply as
5200 as magic_<name>, even though they can be called simply as
5197 @<name>. This allows the special command @magic to gather
5201 @<name>. This allows the special command @magic to gather
5198 information automatically about all existing magic functions,
5202 information automatically about all existing magic functions,
5199 even if they are run-time user extensions, by parsing the shell
5203 even if they are run-time user extensions, by parsing the shell
5200 instance __dict__ looking for special magic_ names.
5204 instance __dict__ looking for special magic_ names.
5201
5205
5202 - mainloop: added *two* local namespace parameters. This allows
5206 - mainloop: added *two* local namespace parameters. This allows
5203 the class to differentiate between parameters which were there
5207 the class to differentiate between parameters which were there
5204 before and after command line initialization was processed. This
5208 before and after command line initialization was processed. This
5205 way, later @who can show things loaded at startup by the
5209 way, later @who can show things loaded at startup by the
5206 user. This trick was necessary to make session saving/reloading
5210 user. This trick was necessary to make session saving/reloading
5207 really work: ideally after saving/exiting/reloading a session,
5211 really work: ideally after saving/exiting/reloading a session,
5208 *everythin* should look the same, including the output of @who. I
5212 *everythin* should look the same, including the output of @who. I
5209 was only able to make this work with this double namespace
5213 was only able to make this work with this double namespace
5210 trick.
5214 trick.
5211
5215
5212 - added a header to the logfile which allows (almost) full
5216 - added a header to the logfile which allows (almost) full
5213 session restoring.
5217 session restoring.
5214
5218
5215 - prepend lines beginning with @ or !, with a and log
5219 - prepend lines beginning with @ or !, with a and log
5216 them. Why? !lines: may be useful to know what you did @lines:
5220 them. Why? !lines: may be useful to know what you did @lines:
5217 they may affect session state. So when restoring a session, at
5221 they may affect session state. So when restoring a session, at
5218 least inform the user of their presence. I couldn't quite get
5222 least inform the user of their presence. I couldn't quite get
5219 them to properly re-execute, but at least the user is warned.
5223 them to properly re-execute, but at least the user is warned.
5220
5224
5221 * Started ChangeLog.
5225 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now