##// END OF EJS Templates
fix macro n1-n2 syntax, which had broken.
fperez -
Show More
@@ -1,2851 +1,2851 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 1188 2006-03-02 18:24:00Z vivainio $"""
4 $Id: Magic.py 1203 2006-03-12 09:30:31Z fperez $"""
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 import IPython
46 import IPython
47 from IPython import Debugger, OInspect, wildcard
47 from IPython import Debugger, OInspect, wildcard
48 from IPython.FakeModule import FakeModule
48 from IPython.FakeModule import FakeModule
49 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.Itpl import Itpl, itpl, printpl,itplns
50 from IPython.PyColorize import Parser
50 from IPython.PyColorize import Parser
51 from IPython.ipstruct import Struct
51 from IPython.ipstruct import Struct
52 from IPython.macro import Macro
52 from IPython.macro import Macro
53 from IPython.genutils import *
53 from IPython.genutils import *
54 from IPython import platutils
54 from IPython import platutils
55
55
56 #***************************************************************************
56 #***************************************************************************
57 # Utility functions
57 # Utility functions
58 def on_off(tag):
58 def on_off(tag):
59 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 return ['OFF','ON'][tag]
60 return ['OFF','ON'][tag]
61
61
62 class Bunch: pass
62 class Bunch: pass
63
63
64 #***************************************************************************
64 #***************************************************************************
65 # Main class implementing Magic functionality
65 # Main class implementing Magic functionality
66 class Magic:
66 class Magic:
67 """Magic functions for InteractiveShell.
67 """Magic functions for InteractiveShell.
68
68
69 Shell functions which can be reached as %function_name. All magic
69 Shell functions which can be reached as %function_name. All magic
70 functions should accept a string, which they can parse for their own
70 functions should accept a string, which they can parse for their own
71 needs. This can make some functions easier to type, eg `%cd ../`
71 needs. This can make some functions easier to type, eg `%cd ../`
72 vs. `%cd("../")`
72 vs. `%cd("../")`
73
73
74 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 ALL definitions MUST begin with the prefix magic_. The user won't need it
75 at the command line, but it is is needed in the definition. """
75 at the command line, but it is is needed in the definition. """
76
76
77 # class globals
77 # class globals
78 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
79 'Automagic is ON, % prefix NOT needed for magic functions.']
79 'Automagic is ON, % prefix NOT needed for magic functions.']
80
80
81 #......................................................................
81 #......................................................................
82 # some utility functions
82 # some utility functions
83
83
84 def __init__(self,shell):
84 def __init__(self,shell):
85
85
86 self.options_table = {}
86 self.options_table = {}
87 if profile is None:
87 if profile is None:
88 self.magic_prun = self.profile_missing_notice
88 self.magic_prun = self.profile_missing_notice
89 self.shell = shell
89 self.shell = shell
90
90
91 # namespace for holding state we may need
91 # namespace for holding state we may need
92 self._magic_state = Bunch()
92 self._magic_state = Bunch()
93
93
94 def profile_missing_notice(self, *args, **kwargs):
94 def profile_missing_notice(self, *args, **kwargs):
95 error("""\
95 error("""\
96 The profile module could not be found. If you are a Debian user,
96 The profile module could not be found. If you are a Debian user,
97 it has been removed from the standard Debian package because of its non-free
97 it has been removed from the standard Debian package because of its non-free
98 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98 license. To use profiling, please install"python2.3-profiler" from non-free.""")
99
99
100 def default_option(self,fn,optstr):
100 def default_option(self,fn,optstr):
101 """Make an entry in the options_table for fn, with value optstr"""
101 """Make an entry in the options_table for fn, with value optstr"""
102
102
103 if fn not in self.lsmagic():
103 if fn not in self.lsmagic():
104 error("%s is not a magic function" % fn)
104 error("%s is not a magic function" % fn)
105 self.options_table[fn] = optstr
105 self.options_table[fn] = optstr
106
106
107 def lsmagic(self):
107 def lsmagic(self):
108 """Return a list of currently available magic functions.
108 """Return a list of currently available magic functions.
109
109
110 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 Gives a list of the bare names after mangling (['ls','cd', ...], not
111 ['magic_ls','magic_cd',...]"""
111 ['magic_ls','magic_cd',...]"""
112
112
113 # FIXME. This needs a cleanup, in the way the magics list is built.
113 # FIXME. This needs a cleanup, in the way the magics list is built.
114
114
115 # magics in class definition
115 # magics in class definition
116 class_magic = lambda fn: fn.startswith('magic_') and \
116 class_magic = lambda fn: fn.startswith('magic_') and \
117 callable(Magic.__dict__[fn])
117 callable(Magic.__dict__[fn])
118 # in instance namespace (run-time user additions)
118 # in instance namespace (run-time user additions)
119 inst_magic = lambda fn: fn.startswith('magic_') and \
119 inst_magic = lambda fn: fn.startswith('magic_') and \
120 callable(self.__dict__[fn])
120 callable(self.__dict__[fn])
121 # and bound magics by user (so they can access self):
121 # and bound magics by user (so they can access self):
122 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
123 callable(self.__class__.__dict__[fn])
123 callable(self.__class__.__dict__[fn])
124 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 magics = filter(class_magic,Magic.__dict__.keys()) + \
125 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_magic,self.__dict__.keys()) + \
126 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 filter(inst_bound_magic,self.__class__.__dict__.keys())
127 out = []
127 out = []
128 for fn in magics:
128 for fn in magics:
129 out.append(fn.replace('magic_','',1))
129 out.append(fn.replace('magic_','',1))
130 out.sort()
130 out.sort()
131 return out
131 return out
132
132
133 def extract_input_slices(self,slices,raw=False):
133 def extract_input_slices(self,slices,raw=False):
134 """Return as a string a set of input history slices.
134 """Return as a string a set of input history slices.
135
135
136 Inputs:
136 Inputs:
137
137
138 - slices: the set of slices is given as a list of strings (like
138 - slices: the set of slices is given as a list of strings (like
139 ['1','4:8','9'], since this function is for use by magic functions
139 ['1','4:8','9'], since this function is for use by magic functions
140 which get their arguments as strings.
140 which get their arguments as strings.
141
141
142 Optional inputs:
142 Optional inputs:
143
143
144 - raw(False): by default, the processed input is used. If this is
144 - raw(False): by default, the processed input is used. If this is
145 true, the raw input history is used instead.
145 true, the raw input history is used instead.
146
146
147 Note that slices can be called with two notations:
147 Note that slices can be called with two notations:
148
148
149 N:M -> standard python form, means including items N...(M-1).
149 N:M -> standard python form, means including items N...(M-1).
150
150
151 N-M -> include items N..M (closed endpoint)."""
151 N-M -> include items N..M (closed endpoint)."""
152
152
153 if raw:
153 if raw:
154 hist = self.shell.input_hist_raw
154 hist = self.shell.input_hist_raw
155 else:
155 else:
156 hist = self.shell.input_hist
156 hist = self.shell.input_hist
157
157
158 cmds = []
158 cmds = []
159 for chunk in slices:
159 for chunk in slices:
160 if ':' in chunk:
160 if ':' in chunk:
161 ini,fin = map(int,chunk.split(':'))
161 ini,fin = map(int,chunk.split(':'))
162 elif '-' in chunk:
162 elif '-' in chunk:
163 ini,fin = map(int,chunk.split('-'))
163 ini,fin = map(int,chunk.split('-'))
164 fin += 1
164 fin += 1
165 else:
165 else:
166 ini = int(chunk)
166 ini = int(chunk)
167 fin = ini+1
167 fin = ini+1
168 cmds.append(hist[ini:fin])
168 cmds.append(hist[ini:fin])
169 return cmds
169 return cmds
170
170
171 def _ofind(self,oname):
171 def _ofind(self,oname):
172 """Find an object in the available namespaces.
172 """Find an object in the available namespaces.
173
173
174 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
174 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
175
175
176 Has special code to detect magic functions.
176 Has special code to detect magic functions.
177 """
177 """
178
178
179 oname = oname.strip()
179 oname = oname.strip()
180
180
181 # Namespaces to search in:
181 # Namespaces to search in:
182 user_ns = self.shell.user_ns
182 user_ns = self.shell.user_ns
183 internal_ns = self.shell.internal_ns
183 internal_ns = self.shell.internal_ns
184 builtin_ns = __builtin__.__dict__
184 builtin_ns = __builtin__.__dict__
185 alias_ns = self.shell.alias_table
185 alias_ns = self.shell.alias_table
186
186
187 # Put them in a list. The order is important so that we find things in
187 # Put them in a list. The order is important so that we find things in
188 # the same order that Python finds them.
188 # the same order that Python finds them.
189 namespaces = [ ('Interactive',user_ns),
189 namespaces = [ ('Interactive',user_ns),
190 ('IPython internal',internal_ns),
190 ('IPython internal',internal_ns),
191 ('Python builtin',builtin_ns),
191 ('Python builtin',builtin_ns),
192 ('Alias',alias_ns),
192 ('Alias',alias_ns),
193 ]
193 ]
194
194
195 # initialize results to 'null'
195 # initialize results to 'null'
196 found = 0; obj = None; ospace = None; ds = None;
196 found = 0; obj = None; ospace = None; ds = None;
197 ismagic = 0; isalias = 0
197 ismagic = 0; isalias = 0
198
198
199 # Look for the given name by splitting it in parts. If the head is
199 # Look for the given name by splitting it in parts. If the head is
200 # found, then we look for all the remaining parts as members, and only
200 # found, then we look for all the remaining parts as members, and only
201 # declare success if we can find them all.
201 # declare success if we can find them all.
202 oname_parts = oname.split('.')
202 oname_parts = oname.split('.')
203 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
203 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
204 for nsname,ns in namespaces:
204 for nsname,ns in namespaces:
205 try:
205 try:
206 obj = ns[oname_head]
206 obj = ns[oname_head]
207 except KeyError:
207 except KeyError:
208 continue
208 continue
209 else:
209 else:
210 for part in oname_rest:
210 for part in oname_rest:
211 try:
211 try:
212 obj = getattr(obj,part)
212 obj = getattr(obj,part)
213 except:
213 except:
214 # Blanket except b/c some badly implemented objects
214 # Blanket except b/c some badly implemented objects
215 # allow __getattr__ to raise exceptions other than
215 # allow __getattr__ to raise exceptions other than
216 # AttributeError, which then crashes IPython.
216 # AttributeError, which then crashes IPython.
217 break
217 break
218 else:
218 else:
219 # If we finish the for loop (no break), we got all members
219 # If we finish the for loop (no break), we got all members
220 found = 1
220 found = 1
221 ospace = nsname
221 ospace = nsname
222 if ns == alias_ns:
222 if ns == alias_ns:
223 isalias = 1
223 isalias = 1
224 break # namespace loop
224 break # namespace loop
225
225
226 # Try to see if it's magic
226 # Try to see if it's magic
227 if not found:
227 if not found:
228 if oname.startswith(self.shell.ESC_MAGIC):
228 if oname.startswith(self.shell.ESC_MAGIC):
229 oname = oname[1:]
229 oname = oname[1:]
230 obj = getattr(self,'magic_'+oname,None)
230 obj = getattr(self,'magic_'+oname,None)
231 if obj is not None:
231 if obj is not None:
232 found = 1
232 found = 1
233 ospace = 'IPython internal'
233 ospace = 'IPython internal'
234 ismagic = 1
234 ismagic = 1
235
235
236 # Last try: special-case some literals like '', [], {}, etc:
236 # Last try: special-case some literals like '', [], {}, etc:
237 if not found and oname_head in ["''",'""','[]','{}','()']:
237 if not found and oname_head in ["''",'""','[]','{}','()']:
238 obj = eval(oname_head)
238 obj = eval(oname_head)
239 found = 1
239 found = 1
240 ospace = 'Interactive'
240 ospace = 'Interactive'
241
241
242 return {'found':found, 'obj':obj, 'namespace':ospace,
242 return {'found':found, 'obj':obj, 'namespace':ospace,
243 'ismagic':ismagic, 'isalias':isalias}
243 'ismagic':ismagic, 'isalias':isalias}
244
244
245 def arg_err(self,func):
245 def arg_err(self,func):
246 """Print docstring if incorrect arguments were passed"""
246 """Print docstring if incorrect arguments were passed"""
247 print 'Error in arguments:'
247 print 'Error in arguments:'
248 print OInspect.getdoc(func)
248 print OInspect.getdoc(func)
249
249
250 def format_latex(self,strng):
250 def format_latex(self,strng):
251 """Format a string for latex inclusion."""
251 """Format a string for latex inclusion."""
252
252
253 # Characters that need to be escaped for latex:
253 # Characters that need to be escaped for latex:
254 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
254 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
255 # Magic command names as headers:
255 # Magic command names as headers:
256 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
256 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
257 re.MULTILINE)
257 re.MULTILINE)
258 # Magic commands
258 # Magic commands
259 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
259 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
260 re.MULTILINE)
260 re.MULTILINE)
261 # Paragraph continue
261 # Paragraph continue
262 par_re = re.compile(r'\\$',re.MULTILINE)
262 par_re = re.compile(r'\\$',re.MULTILINE)
263
263
264 # The "\n" symbol
264 # The "\n" symbol
265 newline_re = re.compile(r'\\n')
265 newline_re = re.compile(r'\\n')
266
266
267 # Now build the string for output:
267 # Now build the string for output:
268 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
268 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
269 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
269 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
270 strng)
270 strng)
271 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
271 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
272 strng = par_re.sub(r'\\\\',strng)
272 strng = par_re.sub(r'\\\\',strng)
273 strng = escape_re.sub(r'\\\1',strng)
273 strng = escape_re.sub(r'\\\1',strng)
274 strng = newline_re.sub(r'\\textbackslash{}n',strng)
274 strng = newline_re.sub(r'\\textbackslash{}n',strng)
275 return strng
275 return strng
276
276
277 def format_screen(self,strng):
277 def format_screen(self,strng):
278 """Format a string for screen printing.
278 """Format a string for screen printing.
279
279
280 This removes some latex-type format codes."""
280 This removes some latex-type format codes."""
281 # Paragraph continue
281 # Paragraph continue
282 par_re = re.compile(r'\\$',re.MULTILINE)
282 par_re = re.compile(r'\\$',re.MULTILINE)
283 strng = par_re.sub('',strng)
283 strng = par_re.sub('',strng)
284 return strng
284 return strng
285
285
286 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
286 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
287 """Parse options passed to an argument string.
287 """Parse options passed to an argument string.
288
288
289 The interface is similar to that of getopt(), but it returns back a
289 The interface is similar to that of getopt(), but it returns back a
290 Struct with the options as keys and the stripped argument string still
290 Struct with the options as keys and the stripped argument string still
291 as a string.
291 as a string.
292
292
293 arg_str is quoted as a true sys.argv vector by using shlex.split.
293 arg_str is quoted as a true sys.argv vector by using shlex.split.
294 This allows us to easily expand variables, glob files, quote
294 This allows us to easily expand variables, glob files, quote
295 arguments, etc.
295 arguments, etc.
296
296
297 Options:
297 Options:
298 -mode: default 'string'. If given as 'list', the argument string is
298 -mode: default 'string'. If given as 'list', the argument string is
299 returned as a list (split on whitespace) instead of a string.
299 returned as a list (split on whitespace) instead of a string.
300
300
301 -list_all: put all option values in lists. Normally only options
301 -list_all: put all option values in lists. Normally only options
302 appearing more than once are put in a list."""
302 appearing more than once are put in a list."""
303
303
304 # inject default options at the beginning of the input line
304 # inject default options at the beginning of the input line
305 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
305 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
306 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
306 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
307
307
308 mode = kw.get('mode','string')
308 mode = kw.get('mode','string')
309 if mode not in ['string','list']:
309 if mode not in ['string','list']:
310 raise ValueError,'incorrect mode given: %s' % mode
310 raise ValueError,'incorrect mode given: %s' % mode
311 # Get options
311 # Get options
312 list_all = kw.get('list_all',0)
312 list_all = kw.get('list_all',0)
313
313
314 # Check if we have more than one argument to warrant extra processing:
314 # Check if we have more than one argument to warrant extra processing:
315 odict = {} # Dictionary with options
315 odict = {} # Dictionary with options
316 args = arg_str.split()
316 args = arg_str.split()
317 if len(args) >= 1:
317 if len(args) >= 1:
318 # If the list of inputs only has 0 or 1 thing in it, there's no
318 # If the list of inputs only has 0 or 1 thing in it, there's no
319 # need to look for options
319 # need to look for options
320 argv = shlex_split(arg_str)
320 argv = shlex_split(arg_str)
321 # Do regular option processing
321 # Do regular option processing
322 try:
322 try:
323 opts,args = getopt(argv,opt_str,*long_opts)
323 opts,args = getopt(argv,opt_str,*long_opts)
324 except GetoptError,e:
324 except GetoptError,e:
325 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
325 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
326 " ".join(long_opts)))
326 " ".join(long_opts)))
327 for o,a in opts:
327 for o,a in opts:
328 if o.startswith('--'):
328 if o.startswith('--'):
329 o = o[2:]
329 o = o[2:]
330 else:
330 else:
331 o = o[1:]
331 o = o[1:]
332 try:
332 try:
333 odict[o].append(a)
333 odict[o].append(a)
334 except AttributeError:
334 except AttributeError:
335 odict[o] = [odict[o],a]
335 odict[o] = [odict[o],a]
336 except KeyError:
336 except KeyError:
337 if list_all:
337 if list_all:
338 odict[o] = [a]
338 odict[o] = [a]
339 else:
339 else:
340 odict[o] = a
340 odict[o] = a
341
341
342 # Prepare opts,args for return
342 # Prepare opts,args for return
343 opts = Struct(odict)
343 opts = Struct(odict)
344 if mode == 'string':
344 if mode == 'string':
345 args = ' '.join(args)
345 args = ' '.join(args)
346
346
347 return opts,args
347 return opts,args
348
348
349 #......................................................................
349 #......................................................................
350 # And now the actual magic functions
350 # And now the actual magic functions
351
351
352 # Functions for IPython shell work (vars,funcs, config, etc)
352 # Functions for IPython shell work (vars,funcs, config, etc)
353 def magic_lsmagic(self, parameter_s = ''):
353 def magic_lsmagic(self, parameter_s = ''):
354 """List currently available magic functions."""
354 """List currently available magic functions."""
355 mesc = self.shell.ESC_MAGIC
355 mesc = self.shell.ESC_MAGIC
356 print 'Available magic functions:\n'+mesc+\
356 print 'Available magic functions:\n'+mesc+\
357 (' '+mesc).join(self.lsmagic())
357 (' '+mesc).join(self.lsmagic())
358 print '\n' + Magic.auto_status[self.shell.rc.automagic]
358 print '\n' + Magic.auto_status[self.shell.rc.automagic]
359 return None
359 return None
360
360
361 def magic_magic(self, parameter_s = ''):
361 def magic_magic(self, parameter_s = ''):
362 """Print information about the magic function system."""
362 """Print information about the magic function system."""
363
363
364 mode = ''
364 mode = ''
365 try:
365 try:
366 if parameter_s.split()[0] == '-latex':
366 if parameter_s.split()[0] == '-latex':
367 mode = 'latex'
367 mode = 'latex'
368 if parameter_s.split()[0] == '-brief':
368 if parameter_s.split()[0] == '-brief':
369 mode = 'brief'
369 mode = 'brief'
370 except:
370 except:
371 pass
371 pass
372
372
373 magic_docs = []
373 magic_docs = []
374 for fname in self.lsmagic():
374 for fname in self.lsmagic():
375 mname = 'magic_' + fname
375 mname = 'magic_' + fname
376 for space in (Magic,self,self.__class__):
376 for space in (Magic,self,self.__class__):
377 try:
377 try:
378 fn = space.__dict__[mname]
378 fn = space.__dict__[mname]
379 except KeyError:
379 except KeyError:
380 pass
380 pass
381 else:
381 else:
382 break
382 break
383 if mode == 'brief':
383 if mode == 'brief':
384 # only first line
384 # only first line
385 fndoc = fn.__doc__.split('\n',1)[0]
385 fndoc = fn.__doc__.split('\n',1)[0]
386 else:
386 else:
387 fndoc = fn.__doc__
387 fndoc = fn.__doc__
388
388
389 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
389 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
390 fname,fndoc))
390 fname,fndoc))
391 magic_docs = ''.join(magic_docs)
391 magic_docs = ''.join(magic_docs)
392
392
393 if mode == 'latex':
393 if mode == 'latex':
394 print self.format_latex(magic_docs)
394 print self.format_latex(magic_docs)
395 return
395 return
396 else:
396 else:
397 magic_docs = self.format_screen(magic_docs)
397 magic_docs = self.format_screen(magic_docs)
398 if mode == 'brief':
398 if mode == 'brief':
399 return magic_docs
399 return magic_docs
400
400
401 outmsg = """
401 outmsg = """
402 IPython's 'magic' functions
402 IPython's 'magic' functions
403 ===========================
403 ===========================
404
404
405 The magic function system provides a series of functions which allow you to
405 The magic function system provides a series of functions which allow you to
406 control the behavior of IPython itself, plus a lot of system-type
406 control the behavior of IPython itself, plus a lot of system-type
407 features. All these functions are prefixed with a % character, but parameters
407 features. All these functions are prefixed with a % character, but parameters
408 are given without parentheses or quotes.
408 are given without parentheses or quotes.
409
409
410 NOTE: If you have 'automagic' enabled (via the command line option or with the
410 NOTE: If you have 'automagic' enabled (via the command line option or with the
411 %automagic function), you don't need to type in the % explicitly. By default,
411 %automagic function), you don't need to type in the % explicitly. By default,
412 IPython ships with automagic on, so you should only rarely need the % escape.
412 IPython ships with automagic on, so you should only rarely need the % escape.
413
413
414 Example: typing '%cd mydir' (without the quotes) changes you working directory
414 Example: typing '%cd mydir' (without the quotes) changes you working directory
415 to 'mydir', if it exists.
415 to 'mydir', if it exists.
416
416
417 You can define your own magic functions to extend the system. See the supplied
417 You can define your own magic functions to extend the system. See the supplied
418 ipythonrc and example-magic.py files for details (in your ipython
418 ipythonrc and example-magic.py files for details (in your ipython
419 configuration directory, typically $HOME/.ipython/).
419 configuration directory, typically $HOME/.ipython/).
420
420
421 You can also define your own aliased names for magic functions. In your
421 You can also define your own aliased names for magic functions. In your
422 ipythonrc file, placing a line like:
422 ipythonrc file, placing a line like:
423
423
424 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
424 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
425
425
426 will define %pf as a new name for %profile.
426 will define %pf as a new name for %profile.
427
427
428 You can also call magics in code using the ipmagic() function, which IPython
428 You can also call magics in code using the ipmagic() function, which IPython
429 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
429 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
430
430
431 For a list of the available magic functions, use %lsmagic. For a description
431 For a list of the available magic functions, use %lsmagic. For a description
432 of any of them, type %magic_name?, e.g. '%cd?'.
432 of any of them, type %magic_name?, e.g. '%cd?'.
433
433
434 Currently the magic system has the following functions:\n"""
434 Currently the magic system has the following functions:\n"""
435
435
436 mesc = self.shell.ESC_MAGIC
436 mesc = self.shell.ESC_MAGIC
437 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
437 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
438 "\n\n%s%s\n\n%s" % (outmsg,
438 "\n\n%s%s\n\n%s" % (outmsg,
439 magic_docs,mesc,mesc,
439 magic_docs,mesc,mesc,
440 (' '+mesc).join(self.lsmagic()),
440 (' '+mesc).join(self.lsmagic()),
441 Magic.auto_status[self.shell.rc.automagic] ) )
441 Magic.auto_status[self.shell.rc.automagic] ) )
442
442
443 page(outmsg,screen_lines=self.shell.rc.screen_length)
443 page(outmsg,screen_lines=self.shell.rc.screen_length)
444
444
445 def magic_automagic(self, parameter_s = ''):
445 def magic_automagic(self, parameter_s = ''):
446 """Make magic functions callable without having to type the initial %.
446 """Make magic functions callable without having to type the initial %.
447
447
448 Toggles on/off (when off, you must call it as %automagic, of
448 Toggles on/off (when off, you must call it as %automagic, of
449 course). Note that magic functions have lowest priority, so if there's
449 course). Note that magic functions have lowest priority, so if there's
450 a variable whose name collides with that of a magic fn, automagic
450 a variable whose name collides with that of a magic fn, automagic
451 won't work for that function (you get the variable instead). However,
451 won't work for that function (you get the variable instead). However,
452 if you delete the variable (del var), the previously shadowed magic
452 if you delete the variable (del var), the previously shadowed magic
453 function becomes visible to automagic again."""
453 function becomes visible to automagic again."""
454
454
455 rc = self.shell.rc
455 rc = self.shell.rc
456 rc.automagic = not rc.automagic
456 rc.automagic = not rc.automagic
457 print '\n' + Magic.auto_status[rc.automagic]
457 print '\n' + Magic.auto_status[rc.automagic]
458
458
459 def magic_autocall(self, parameter_s = ''):
459 def magic_autocall(self, parameter_s = ''):
460 """Make functions callable without having to type parentheses.
460 """Make functions callable without having to type parentheses.
461
461
462 Usage:
462 Usage:
463
463
464 %autocall [mode]
464 %autocall [mode]
465
465
466 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
466 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
467 value is toggled on and off (remembering the previous state)."""
467 value is toggled on and off (remembering the previous state)."""
468
468
469 rc = self.shell.rc
469 rc = self.shell.rc
470
470
471 if parameter_s:
471 if parameter_s:
472 arg = int(parameter_s)
472 arg = int(parameter_s)
473 else:
473 else:
474 arg = 'toggle'
474 arg = 'toggle'
475
475
476 if not arg in (0,1,2,'toggle'):
476 if not arg in (0,1,2,'toggle'):
477 error('Valid modes: (0->Off, 1->Smart, 2->Full')
477 error('Valid modes: (0->Off, 1->Smart, 2->Full')
478 return
478 return
479
479
480 if arg in (0,1,2):
480 if arg in (0,1,2):
481 rc.autocall = arg
481 rc.autocall = arg
482 else: # toggle
482 else: # toggle
483 if rc.autocall:
483 if rc.autocall:
484 self._magic_state.autocall_save = rc.autocall
484 self._magic_state.autocall_save = rc.autocall
485 rc.autocall = 0
485 rc.autocall = 0
486 else:
486 else:
487 try:
487 try:
488 rc.autocall = self._magic_state.autocall_save
488 rc.autocall = self._magic_state.autocall_save
489 except AttributeError:
489 except AttributeError:
490 rc.autocall = self._magic_state.autocall_save = 1
490 rc.autocall = self._magic_state.autocall_save = 1
491
491
492 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
492 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
493
493
494 def magic_autoindent(self, parameter_s = ''):
494 def magic_autoindent(self, parameter_s = ''):
495 """Toggle autoindent on/off (if available)."""
495 """Toggle autoindent on/off (if available)."""
496
496
497 self.shell.set_autoindent()
497 self.shell.set_autoindent()
498 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
498 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
499
499
500 def magic_system_verbose(self, parameter_s = ''):
500 def magic_system_verbose(self, parameter_s = ''):
501 """Toggle verbose printing of system calls on/off."""
501 """Toggle verbose printing of system calls on/off."""
502
502
503 self.shell.rc_set_toggle('system_verbose')
503 self.shell.rc_set_toggle('system_verbose')
504 print "System verbose printing is:",\
504 print "System verbose printing is:",\
505 ['OFF','ON'][self.shell.rc.system_verbose]
505 ['OFF','ON'][self.shell.rc.system_verbose]
506
506
507 def magic_history(self, parameter_s = ''):
507 def magic_history(self, parameter_s = ''):
508 """Print input history (_i<n> variables), with most recent last.
508 """Print input history (_i<n> variables), with most recent last.
509
509
510 %history -> print at most 40 inputs (some may be multi-line)\\
510 %history -> print at most 40 inputs (some may be multi-line)\\
511 %history n -> print at most n inputs\\
511 %history n -> print at most n inputs\\
512 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
512 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
513
513
514 Each input's number <n> is shown, and is accessible as the
514 Each input's number <n> is shown, and is accessible as the
515 automatically generated variable _i<n>. Multi-line statements are
515 automatically generated variable _i<n>. Multi-line statements are
516 printed starting at a new line for easy copy/paste.
516 printed starting at a new line for easy copy/paste.
517
517
518
518
519 Options:
519 Options:
520
520
521 -n: do NOT print line numbers. This is useful if you want to get a
521 -n: do NOT print line numbers. This is useful if you want to get a
522 printout of many lines which can be directly pasted into a text
522 printout of many lines which can be directly pasted into a text
523 editor.
523 editor.
524
524
525 This feature is only available if numbered prompts are in use.
525 This feature is only available if numbered prompts are in use.
526
526
527 -r: print the 'raw' history. IPython filters your input and
527 -r: print the 'raw' history. IPython filters your input and
528 converts it all into valid Python source before executing it (things
528 converts it all into valid Python source before executing it (things
529 like magics or aliases are turned into function calls, for
529 like magics or aliases are turned into function calls, for
530 example). With this option, you'll see the unfiltered history
530 example). With this option, you'll see the unfiltered history
531 instead of the filtered version: '%cd /' will be seen as '%cd /'
531 instead of the filtered version: '%cd /' will be seen as '%cd /'
532 instead of '_ip.magic("%cd /")'.
532 instead of '_ip.magic("%cd /")'.
533 """
533 """
534
534
535 shell = self.shell
535 shell = self.shell
536 if not shell.outputcache.do_full_cache:
536 if not shell.outputcache.do_full_cache:
537 print 'This feature is only available if numbered prompts are in use.'
537 print 'This feature is only available if numbered prompts are in use.'
538 return
538 return
539 opts,args = self.parse_options(parameter_s,'nr',mode='list')
539 opts,args = self.parse_options(parameter_s,'nr',mode='list')
540
540
541 if opts.has_key('r'):
541 if opts.has_key('r'):
542 input_hist = shell.input_hist_raw
542 input_hist = shell.input_hist_raw
543 else:
543 else:
544 input_hist = shell.input_hist
544 input_hist = shell.input_hist
545
545
546 default_length = 40
546 default_length = 40
547 if len(args) == 0:
547 if len(args) == 0:
548 final = len(input_hist)
548 final = len(input_hist)
549 init = max(1,final-default_length)
549 init = max(1,final-default_length)
550 elif len(args) == 1:
550 elif len(args) == 1:
551 final = len(input_hist)
551 final = len(input_hist)
552 init = max(1,final-int(args[0]))
552 init = max(1,final-int(args[0]))
553 elif len(args) == 2:
553 elif len(args) == 2:
554 init,final = map(int,args)
554 init,final = map(int,args)
555 else:
555 else:
556 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
556 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
557 print self.magic_hist.__doc__
557 print self.magic_hist.__doc__
558 return
558 return
559 width = len(str(final))
559 width = len(str(final))
560 line_sep = ['','\n']
560 line_sep = ['','\n']
561 print_nums = not opts.has_key('n')
561 print_nums = not opts.has_key('n')
562 for in_num in range(init,final):
562 for in_num in range(init,final):
563 inline = input_hist[in_num]
563 inline = input_hist[in_num]
564 multiline = int(inline.count('\n') > 1)
564 multiline = int(inline.count('\n') > 1)
565 if print_nums:
565 if print_nums:
566 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
566 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
567 print inline,
567 print inline,
568
568
569 def magic_hist(self, parameter_s=''):
569 def magic_hist(self, parameter_s=''):
570 """Alternate name for %history."""
570 """Alternate name for %history."""
571 return self.magic_history(parameter_s)
571 return self.magic_history(parameter_s)
572
572
573 def magic_p(self, parameter_s=''):
573 def magic_p(self, parameter_s=''):
574 """Just a short alias for Python's 'print'."""
574 """Just a short alias for Python's 'print'."""
575 exec 'print ' + parameter_s in self.shell.user_ns
575 exec 'print ' + parameter_s in self.shell.user_ns
576
576
577 def magic_r(self, parameter_s=''):
577 def magic_r(self, parameter_s=''):
578 """Repeat previous input.
578 """Repeat previous input.
579
579
580 If given an argument, repeats the previous command which starts with
580 If given an argument, repeats the previous command which starts with
581 the same string, otherwise it just repeats the previous input.
581 the same string, otherwise it just repeats the previous input.
582
582
583 Shell escaped commands (with ! as first character) are not recognized
583 Shell escaped commands (with ! as first character) are not recognized
584 by this system, only pure python code and magic commands.
584 by this system, only pure python code and magic commands.
585 """
585 """
586
586
587 start = parameter_s.strip()
587 start = parameter_s.strip()
588 esc_magic = self.shell.ESC_MAGIC
588 esc_magic = self.shell.ESC_MAGIC
589 # Identify magic commands even if automagic is on (which means
589 # Identify magic commands even if automagic is on (which means
590 # the in-memory version is different from that typed by the user).
590 # the in-memory version is different from that typed by the user).
591 if self.shell.rc.automagic:
591 if self.shell.rc.automagic:
592 start_magic = esc_magic+start
592 start_magic = esc_magic+start
593 else:
593 else:
594 start_magic = start
594 start_magic = start
595 # Look through the input history in reverse
595 # Look through the input history in reverse
596 for n in range(len(self.shell.input_hist)-2,0,-1):
596 for n in range(len(self.shell.input_hist)-2,0,-1):
597 input = self.shell.input_hist[n]
597 input = self.shell.input_hist[n]
598 # skip plain 'r' lines so we don't recurse to infinity
598 # skip plain 'r' lines so we don't recurse to infinity
599 if input != '_ip.magic("r")\n' and \
599 if input != '_ip.magic("r")\n' and \
600 (input.startswith(start) or input.startswith(start_magic)):
600 (input.startswith(start) or input.startswith(start_magic)):
601 #print 'match',`input` # dbg
601 #print 'match',`input` # dbg
602 print 'Executing:',input,
602 print 'Executing:',input,
603 self.shell.runlines(input)
603 self.shell.runlines(input)
604 return
604 return
605 print 'No previous input matching `%s` found.' % start
605 print 'No previous input matching `%s` found.' % start
606
606
607 def magic_page(self, parameter_s=''):
607 def magic_page(self, parameter_s=''):
608 """Pretty print the object and display it through a pager.
608 """Pretty print the object and display it through a pager.
609
609
610 If no parameter is given, use _ (last output)."""
610 If no parameter is given, use _ (last output)."""
611 # After a function contributed by Olivier Aubert, slightly modified.
611 # After a function contributed by Olivier Aubert, slightly modified.
612
612
613 oname = parameter_s and parameter_s or '_'
613 oname = parameter_s and parameter_s or '_'
614 info = self._ofind(oname)
614 info = self._ofind(oname)
615 if info['found']:
615 if info['found']:
616 page(pformat(info['obj']))
616 page(pformat(info['obj']))
617 else:
617 else:
618 print 'Object `%s` not found' % oname
618 print 'Object `%s` not found' % oname
619
619
620 def magic_profile(self, parameter_s=''):
620 def magic_profile(self, parameter_s=''):
621 """Print your currently active IPyhton profile."""
621 """Print your currently active IPyhton profile."""
622 if self.shell.rc.profile:
622 if self.shell.rc.profile:
623 printpl('Current IPython profile: $self.shell.rc.profile.')
623 printpl('Current IPython profile: $self.shell.rc.profile.')
624 else:
624 else:
625 print 'No profile active.'
625 print 'No profile active.'
626
626
627 def _inspect(self,meth,oname,**kw):
627 def _inspect(self,meth,oname,**kw):
628 """Generic interface to the inspector system.
628 """Generic interface to the inspector system.
629
629
630 This function is meant to be called by pdef, pdoc & friends."""
630 This function is meant to be called by pdef, pdoc & friends."""
631
631
632 oname = oname.strip()
632 oname = oname.strip()
633 info = Struct(self._ofind(oname))
633 info = Struct(self._ofind(oname))
634 if info.found:
634 if info.found:
635 pmethod = getattr(self.shell.inspector,meth)
635 pmethod = getattr(self.shell.inspector,meth)
636 formatter = info.ismagic and self.format_screen or None
636 formatter = info.ismagic and self.format_screen or None
637 if meth == 'pdoc':
637 if meth == 'pdoc':
638 pmethod(info.obj,oname,formatter)
638 pmethod(info.obj,oname,formatter)
639 elif meth == 'pinfo':
639 elif meth == 'pinfo':
640 pmethod(info.obj,oname,formatter,info,**kw)
640 pmethod(info.obj,oname,formatter,info,**kw)
641 else:
641 else:
642 pmethod(info.obj,oname)
642 pmethod(info.obj,oname)
643 else:
643 else:
644 print 'Object `%s` not found.' % oname
644 print 'Object `%s` not found.' % oname
645 return 'not found' # so callers can take other action
645 return 'not found' # so callers can take other action
646
646
647 def magic_pdef(self, parameter_s=''):
647 def magic_pdef(self, parameter_s=''):
648 """Print the definition header for any callable object.
648 """Print the definition header for any callable object.
649
649
650 If the object is a class, print the constructor information."""
650 If the object is a class, print the constructor information."""
651 self._inspect('pdef',parameter_s)
651 self._inspect('pdef',parameter_s)
652
652
653 def magic_pdoc(self, parameter_s=''):
653 def magic_pdoc(self, parameter_s=''):
654 """Print the docstring for an object.
654 """Print the docstring for an object.
655
655
656 If the given object is a class, it will print both the class and the
656 If the given object is a class, it will print both the class and the
657 constructor docstrings."""
657 constructor docstrings."""
658 self._inspect('pdoc',parameter_s)
658 self._inspect('pdoc',parameter_s)
659
659
660 def magic_psource(self, parameter_s=''):
660 def magic_psource(self, parameter_s=''):
661 """Print (or run through pager) the source code for an object."""
661 """Print (or run through pager) the source code for an object."""
662 self._inspect('psource',parameter_s)
662 self._inspect('psource',parameter_s)
663
663
664 def magic_pfile(self, parameter_s=''):
664 def magic_pfile(self, parameter_s=''):
665 """Print (or run through pager) the file where an object is defined.
665 """Print (or run through pager) the file where an object is defined.
666
666
667 The file opens at the line where the object definition begins. IPython
667 The file opens at the line where the object definition begins. IPython
668 will honor the environment variable PAGER if set, and otherwise will
668 will honor the environment variable PAGER if set, and otherwise will
669 do its best to print the file in a convenient form.
669 do its best to print the file in a convenient form.
670
670
671 If the given argument is not an object currently defined, IPython will
671 If the given argument is not an object currently defined, IPython will
672 try to interpret it as a filename (automatically adding a .py extension
672 try to interpret it as a filename (automatically adding a .py extension
673 if needed). You can thus use %pfile as a syntax highlighting code
673 if needed). You can thus use %pfile as a syntax highlighting code
674 viewer."""
674 viewer."""
675
675
676 # first interpret argument as an object name
676 # first interpret argument as an object name
677 out = self._inspect('pfile',parameter_s)
677 out = self._inspect('pfile',parameter_s)
678 # if not, try the input as a filename
678 # if not, try the input as a filename
679 if out == 'not found':
679 if out == 'not found':
680 try:
680 try:
681 filename = get_py_filename(parameter_s)
681 filename = get_py_filename(parameter_s)
682 except IOError,msg:
682 except IOError,msg:
683 print msg
683 print msg
684 return
684 return
685 page(self.shell.inspector.format(file(filename).read()))
685 page(self.shell.inspector.format(file(filename).read()))
686
686
687 def magic_pinfo(self, parameter_s=''):
687 def magic_pinfo(self, parameter_s=''):
688 """Provide detailed information about an object.
688 """Provide detailed information about an object.
689
689
690 '%pinfo object' is just a synonym for object? or ?object."""
690 '%pinfo object' is just a synonym for object? or ?object."""
691
691
692 #print 'pinfo par: <%s>' % parameter_s # dbg
692 #print 'pinfo par: <%s>' % parameter_s # dbg
693
693
694 # detail_level: 0 -> obj? , 1 -> obj??
694 # detail_level: 0 -> obj? , 1 -> obj??
695 detail_level = 0
695 detail_level = 0
696 # We need to detect if we got called as 'pinfo pinfo foo', which can
696 # We need to detect if we got called as 'pinfo pinfo foo', which can
697 # happen if the user types 'pinfo foo?' at the cmd line.
697 # happen if the user types 'pinfo foo?' at the cmd line.
698 pinfo,qmark1,oname,qmark2 = \
698 pinfo,qmark1,oname,qmark2 = \
699 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
699 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
700 if pinfo or qmark1 or qmark2:
700 if pinfo or qmark1 or qmark2:
701 detail_level = 1
701 detail_level = 1
702 if "*" in oname:
702 if "*" in oname:
703 self.magic_psearch(oname)
703 self.magic_psearch(oname)
704 else:
704 else:
705 self._inspect('pinfo',oname,detail_level=detail_level)
705 self._inspect('pinfo',oname,detail_level=detail_level)
706
706
707 def magic_psearch(self, parameter_s=''):
707 def magic_psearch(self, parameter_s=''):
708 """Search for object in namespaces by wildcard.
708 """Search for object in namespaces by wildcard.
709
709
710 %psearch [options] PATTERN [OBJECT TYPE]
710 %psearch [options] PATTERN [OBJECT TYPE]
711
711
712 Note: ? can be used as a synonym for %psearch, at the beginning or at
712 Note: ? can be used as a synonym for %psearch, at the beginning or at
713 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
713 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
714 rest of the command line must be unchanged (options come first), so
714 rest of the command line must be unchanged (options come first), so
715 for example the following forms are equivalent
715 for example the following forms are equivalent
716
716
717 %psearch -i a* function
717 %psearch -i a* function
718 -i a* function?
718 -i a* function?
719 ?-i a* function
719 ?-i a* function
720
720
721 Arguments:
721 Arguments:
722
722
723 PATTERN
723 PATTERN
724
724
725 where PATTERN is a string containing * as a wildcard similar to its
725 where PATTERN is a string containing * as a wildcard similar to its
726 use in a shell. The pattern is matched in all namespaces on the
726 use in a shell. The pattern is matched in all namespaces on the
727 search path. By default objects starting with a single _ are not
727 search path. By default objects starting with a single _ are not
728 matched, many IPython generated objects have a single
728 matched, many IPython generated objects have a single
729 underscore. The default is case insensitive matching. Matching is
729 underscore. The default is case insensitive matching. Matching is
730 also done on the attributes of objects and not only on the objects
730 also done on the attributes of objects and not only on the objects
731 in a module.
731 in a module.
732
732
733 [OBJECT TYPE]
733 [OBJECT TYPE]
734
734
735 Is the name of a python type from the types module. The name is
735 Is the name of a python type from the types module. The name is
736 given in lowercase without the ending type, ex. StringType is
736 given in lowercase without the ending type, ex. StringType is
737 written string. By adding a type here only objects matching the
737 written string. By adding a type here only objects matching the
738 given type are matched. Using all here makes the pattern match all
738 given type are matched. Using all here makes the pattern match all
739 types (this is the default).
739 types (this is the default).
740
740
741 Options:
741 Options:
742
742
743 -a: makes the pattern match even objects whose names start with a
743 -a: makes the pattern match even objects whose names start with a
744 single underscore. These names are normally ommitted from the
744 single underscore. These names are normally ommitted from the
745 search.
745 search.
746
746
747 -i/-c: make the pattern case insensitive/sensitive. If neither of
747 -i/-c: make the pattern case insensitive/sensitive. If neither of
748 these options is given, the default is read from your ipythonrc
748 these options is given, the default is read from your ipythonrc
749 file. The option name which sets this value is
749 file. The option name which sets this value is
750 'wildcards_case_sensitive'. If this option is not specified in your
750 'wildcards_case_sensitive'. If this option is not specified in your
751 ipythonrc file, IPython's internal default is to do a case sensitive
751 ipythonrc file, IPython's internal default is to do a case sensitive
752 search.
752 search.
753
753
754 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
754 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
755 specifiy can be searched in any of the following namespaces:
755 specifiy can be searched in any of the following namespaces:
756 'builtin', 'user', 'user_global','internal', 'alias', where
756 'builtin', 'user', 'user_global','internal', 'alias', where
757 'builtin' and 'user' are the search defaults. Note that you should
757 'builtin' and 'user' are the search defaults. Note that you should
758 not use quotes when specifying namespaces.
758 not use quotes when specifying namespaces.
759
759
760 'Builtin' contains the python module builtin, 'user' contains all
760 'Builtin' contains the python module builtin, 'user' contains all
761 user data, 'alias' only contain the shell aliases and no python
761 user data, 'alias' only contain the shell aliases and no python
762 objects, 'internal' contains objects used by IPython. The
762 objects, 'internal' contains objects used by IPython. The
763 'user_global' namespace is only used by embedded IPython instances,
763 'user_global' namespace is only used by embedded IPython instances,
764 and it contains module-level globals. You can add namespaces to the
764 and it contains module-level globals. You can add namespaces to the
765 search with -s or exclude them with -e (these options can be given
765 search with -s or exclude them with -e (these options can be given
766 more than once).
766 more than once).
767
767
768 Examples:
768 Examples:
769
769
770 %psearch a* -> objects beginning with an a
770 %psearch a* -> objects beginning with an a
771 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
771 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
772 %psearch a* function -> all functions beginning with an a
772 %psearch a* function -> all functions beginning with an a
773 %psearch re.e* -> objects beginning with an e in module re
773 %psearch re.e* -> objects beginning with an e in module re
774 %psearch r*.e* -> objects that start with e in modules starting in r
774 %psearch r*.e* -> objects that start with e in modules starting in r
775 %psearch r*.* string -> all strings in modules beginning with r
775 %psearch r*.* string -> all strings in modules beginning with r
776
776
777 Case sensitve search:
777 Case sensitve search:
778
778
779 %psearch -c a* list all object beginning with lower case a
779 %psearch -c a* list all object beginning with lower case a
780
780
781 Show objects beginning with a single _:
781 Show objects beginning with a single _:
782
782
783 %psearch -a _* list objects beginning with a single underscore"""
783 %psearch -a _* list objects beginning with a single underscore"""
784
784
785 # default namespaces to be searched
785 # default namespaces to be searched
786 def_search = ['user','builtin']
786 def_search = ['user','builtin']
787
787
788 # Process options/args
788 # Process options/args
789 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
789 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
790 opt = opts.get
790 opt = opts.get
791 shell = self.shell
791 shell = self.shell
792 psearch = shell.inspector.psearch
792 psearch = shell.inspector.psearch
793
793
794 # select case options
794 # select case options
795 if opts.has_key('i'):
795 if opts.has_key('i'):
796 ignore_case = True
796 ignore_case = True
797 elif opts.has_key('c'):
797 elif opts.has_key('c'):
798 ignore_case = False
798 ignore_case = False
799 else:
799 else:
800 ignore_case = not shell.rc.wildcards_case_sensitive
800 ignore_case = not shell.rc.wildcards_case_sensitive
801
801
802 # Build list of namespaces to search from user options
802 # Build list of namespaces to search from user options
803 def_search.extend(opt('s',[]))
803 def_search.extend(opt('s',[]))
804 ns_exclude = ns_exclude=opt('e',[])
804 ns_exclude = ns_exclude=opt('e',[])
805 ns_search = [nm for nm in def_search if nm not in ns_exclude]
805 ns_search = [nm for nm in def_search if nm not in ns_exclude]
806
806
807 # Call the actual search
807 # Call the actual search
808 try:
808 try:
809 psearch(args,shell.ns_table,ns_search,
809 psearch(args,shell.ns_table,ns_search,
810 show_all=opt('a'),ignore_case=ignore_case)
810 show_all=opt('a'),ignore_case=ignore_case)
811 except:
811 except:
812 shell.showtraceback()
812 shell.showtraceback()
813
813
814 def magic_who_ls(self, parameter_s=''):
814 def magic_who_ls(self, parameter_s=''):
815 """Return a sorted list of all interactive variables.
815 """Return a sorted list of all interactive variables.
816
816
817 If arguments are given, only variables of types matching these
817 If arguments are given, only variables of types matching these
818 arguments are returned."""
818 arguments are returned."""
819
819
820 user_ns = self.shell.user_ns
820 user_ns = self.shell.user_ns
821 internal_ns = self.shell.internal_ns
821 internal_ns = self.shell.internal_ns
822 user_config_ns = self.shell.user_config_ns
822 user_config_ns = self.shell.user_config_ns
823 out = []
823 out = []
824 typelist = parameter_s.split()
824 typelist = parameter_s.split()
825
825
826 for i in user_ns:
826 for i in user_ns:
827 if not (i.startswith('_') or i.startswith('_i')) \
827 if not (i.startswith('_') or i.startswith('_i')) \
828 and not (i in internal_ns or i in user_config_ns):
828 and not (i in internal_ns or i in user_config_ns):
829 if typelist:
829 if typelist:
830 if type(user_ns[i]).__name__ in typelist:
830 if type(user_ns[i]).__name__ in typelist:
831 out.append(i)
831 out.append(i)
832 else:
832 else:
833 out.append(i)
833 out.append(i)
834 out.sort()
834 out.sort()
835 return out
835 return out
836
836
837 def magic_who(self, parameter_s=''):
837 def magic_who(self, parameter_s=''):
838 """Print all interactive variables, with some minimal formatting.
838 """Print all interactive variables, with some minimal formatting.
839
839
840 If any arguments are given, only variables whose type matches one of
840 If any arguments are given, only variables whose type matches one of
841 these are printed. For example:
841 these are printed. For example:
842
842
843 %who function str
843 %who function str
844
844
845 will only list functions and strings, excluding all other types of
845 will only list functions and strings, excluding all other types of
846 variables. To find the proper type names, simply use type(var) at a
846 variables. To find the proper type names, simply use type(var) at a
847 command line to see how python prints type names. For example:
847 command line to see how python prints type names. For example:
848
848
849 In [1]: type('hello')\\
849 In [1]: type('hello')\\
850 Out[1]: <type 'str'>
850 Out[1]: <type 'str'>
851
851
852 indicates that the type name for strings is 'str'.
852 indicates that the type name for strings is 'str'.
853
853
854 %who always excludes executed names loaded through your configuration
854 %who always excludes executed names loaded through your configuration
855 file and things which are internal to IPython.
855 file and things which are internal to IPython.
856
856
857 This is deliberate, as typically you may load many modules and the
857 This is deliberate, as typically you may load many modules and the
858 purpose of %who is to show you only what you've manually defined."""
858 purpose of %who is to show you only what you've manually defined."""
859
859
860 varlist = self.magic_who_ls(parameter_s)
860 varlist = self.magic_who_ls(parameter_s)
861 if not varlist:
861 if not varlist:
862 print 'Interactive namespace is empty.'
862 print 'Interactive namespace is empty.'
863 return
863 return
864
864
865 # if we have variables, move on...
865 # if we have variables, move on...
866
866
867 # stupid flushing problem: when prompts have no separators, stdout is
867 # stupid flushing problem: when prompts have no separators, stdout is
868 # getting lost. I'm starting to think this is a python bug. I'm having
868 # getting lost. I'm starting to think this is a python bug. I'm having
869 # to force a flush with a print because even a sys.stdout.flush
869 # to force a flush with a print because even a sys.stdout.flush
870 # doesn't seem to do anything!
870 # doesn't seem to do anything!
871
871
872 count = 0
872 count = 0
873 for i in varlist:
873 for i in varlist:
874 print i+'\t',
874 print i+'\t',
875 count += 1
875 count += 1
876 if count > 8:
876 if count > 8:
877 count = 0
877 count = 0
878 print
878 print
879 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
879 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
880
880
881 print # well, this does force a flush at the expense of an extra \n
881 print # well, this does force a flush at the expense of an extra \n
882
882
883 def magic_whos(self, parameter_s=''):
883 def magic_whos(self, parameter_s=''):
884 """Like %who, but gives some extra information about each variable.
884 """Like %who, but gives some extra information about each variable.
885
885
886 The same type filtering of %who can be applied here.
886 The same type filtering of %who can be applied here.
887
887
888 For all variables, the type is printed. Additionally it prints:
888 For all variables, the type is printed. Additionally it prints:
889
889
890 - For {},[],(): their length.
890 - For {},[],(): their length.
891
891
892 - For Numeric arrays, a summary with shape, number of elements,
892 - For Numeric arrays, a summary with shape, number of elements,
893 typecode and size in memory.
893 typecode and size in memory.
894
894
895 - Everything else: a string representation, snipping their middle if
895 - Everything else: a string representation, snipping their middle if
896 too long."""
896 too long."""
897
897
898 varnames = self.magic_who_ls(parameter_s)
898 varnames = self.magic_who_ls(parameter_s)
899 if not varnames:
899 if not varnames:
900 print 'Interactive namespace is empty.'
900 print 'Interactive namespace is empty.'
901 return
901 return
902
902
903 # if we have variables, move on...
903 # if we have variables, move on...
904
904
905 # for these types, show len() instead of data:
905 # for these types, show len() instead of data:
906 seq_types = [types.DictType,types.ListType,types.TupleType]
906 seq_types = [types.DictType,types.ListType,types.TupleType]
907
907
908 # for Numeric arrays, display summary info
908 # for Numeric arrays, display summary info
909 try:
909 try:
910 import Numeric
910 import Numeric
911 except ImportError:
911 except ImportError:
912 array_type = None
912 array_type = None
913 else:
913 else:
914 array_type = Numeric.ArrayType.__name__
914 array_type = Numeric.ArrayType.__name__
915
915
916 # Find all variable names and types so we can figure out column sizes
916 # Find all variable names and types so we can figure out column sizes
917 get_vars = lambda i: self.shell.user_ns[i]
917 get_vars = lambda i: self.shell.user_ns[i]
918 type_name = lambda v: type(v).__name__
918 type_name = lambda v: type(v).__name__
919 varlist = map(get_vars,varnames)
919 varlist = map(get_vars,varnames)
920
920
921 typelist = []
921 typelist = []
922 for vv in varlist:
922 for vv in varlist:
923 tt = type_name(vv)
923 tt = type_name(vv)
924 if tt=='instance':
924 if tt=='instance':
925 typelist.append(str(vv.__class__))
925 typelist.append(str(vv.__class__))
926 else:
926 else:
927 typelist.append(tt)
927 typelist.append(tt)
928
928
929 # column labels and # of spaces as separator
929 # column labels and # of spaces as separator
930 varlabel = 'Variable'
930 varlabel = 'Variable'
931 typelabel = 'Type'
931 typelabel = 'Type'
932 datalabel = 'Data/Info'
932 datalabel = 'Data/Info'
933 colsep = 3
933 colsep = 3
934 # variable format strings
934 # variable format strings
935 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
935 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
936 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
936 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
937 aformat = "%s: %s elems, type `%s`, %s bytes"
937 aformat = "%s: %s elems, type `%s`, %s bytes"
938 # find the size of the columns to format the output nicely
938 # find the size of the columns to format the output nicely
939 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
939 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
940 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
940 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
941 # table header
941 # table header
942 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
942 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
943 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
943 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
944 # and the table itself
944 # and the table itself
945 kb = 1024
945 kb = 1024
946 Mb = 1048576 # kb**2
946 Mb = 1048576 # kb**2
947 for vname,var,vtype in zip(varnames,varlist,typelist):
947 for vname,var,vtype in zip(varnames,varlist,typelist):
948 print itpl(vformat),
948 print itpl(vformat),
949 if vtype in seq_types:
949 if vtype in seq_types:
950 print len(var)
950 print len(var)
951 elif vtype==array_type:
951 elif vtype==array_type:
952 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
952 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
953 vsize = Numeric.size(var)
953 vsize = Numeric.size(var)
954 vbytes = vsize*var.itemsize()
954 vbytes = vsize*var.itemsize()
955 if vbytes < 100000:
955 if vbytes < 100000:
956 print aformat % (vshape,vsize,var.typecode(),vbytes)
956 print aformat % (vshape,vsize,var.typecode(),vbytes)
957 else:
957 else:
958 print aformat % (vshape,vsize,var.typecode(),vbytes),
958 print aformat % (vshape,vsize,var.typecode(),vbytes),
959 if vbytes < Mb:
959 if vbytes < Mb:
960 print '(%s kb)' % (vbytes/kb,)
960 print '(%s kb)' % (vbytes/kb,)
961 else:
961 else:
962 print '(%s Mb)' % (vbytes/Mb,)
962 print '(%s Mb)' % (vbytes/Mb,)
963 else:
963 else:
964 vstr = str(var).replace('\n','\\n')
964 vstr = str(var).replace('\n','\\n')
965 if len(vstr) < 50:
965 if len(vstr) < 50:
966 print vstr
966 print vstr
967 else:
967 else:
968 printpl(vfmt_short)
968 printpl(vfmt_short)
969
969
970 def magic_reset(self, parameter_s=''):
970 def magic_reset(self, parameter_s=''):
971 """Resets the namespace by removing all names defined by the user.
971 """Resets the namespace by removing all names defined by the user.
972
972
973 Input/Output history are left around in case you need them."""
973 Input/Output history are left around in case you need them."""
974
974
975 ans = raw_input(
975 ans = raw_input(
976 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
976 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
977 if not ans.lower() == 'y':
977 if not ans.lower() == 'y':
978 print 'Nothing done.'
978 print 'Nothing done.'
979 return
979 return
980 user_ns = self.shell.user_ns
980 user_ns = self.shell.user_ns
981 for i in self.magic_who_ls():
981 for i in self.magic_who_ls():
982 del(user_ns[i])
982 del(user_ns[i])
983
983
984 def magic_config(self,parameter_s=''):
984 def magic_config(self,parameter_s=''):
985 """Show IPython's internal configuration."""
985 """Show IPython's internal configuration."""
986
986
987 page('Current configuration structure:\n'+
987 page('Current configuration structure:\n'+
988 pformat(self.shell.rc.dict()))
988 pformat(self.shell.rc.dict()))
989
989
990 def magic_logstart(self,parameter_s=''):
990 def magic_logstart(self,parameter_s=''):
991 """Start logging anywhere in a session.
991 """Start logging anywhere in a session.
992
992
993 %logstart [-o|-t] [log_name [log_mode]]
993 %logstart [-o|-t] [log_name [log_mode]]
994
994
995 If no name is given, it defaults to a file named 'ipython_log.py' in your
995 If no name is given, it defaults to a file named 'ipython_log.py' in your
996 current directory, in 'rotate' mode (see below).
996 current directory, in 'rotate' mode (see below).
997
997
998 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
998 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
999 history up to that point and then continues logging.
999 history up to that point and then continues logging.
1000
1000
1001 %logstart takes a second optional parameter: logging mode. This can be one
1001 %logstart takes a second optional parameter: logging mode. This can be one
1002 of (note that the modes are given unquoted):\\
1002 of (note that the modes are given unquoted):\\
1003 append: well, that says it.\\
1003 append: well, that says it.\\
1004 backup: rename (if exists) to name~ and start name.\\
1004 backup: rename (if exists) to name~ and start name.\\
1005 global: single logfile in your home dir, appended to.\\
1005 global: single logfile in your home dir, appended to.\\
1006 over : overwrite existing log.\\
1006 over : overwrite existing log.\\
1007 rotate: create rotating logs name.1~, name.2~, etc.
1007 rotate: create rotating logs name.1~, name.2~, etc.
1008
1008
1009 Options:
1009 Options:
1010
1010
1011 -o: log also IPython's output. In this mode, all commands which
1011 -o: log also IPython's output. In this mode, all commands which
1012 generate an Out[NN] prompt are recorded to the logfile, right after
1012 generate an Out[NN] prompt are recorded to the logfile, right after
1013 their corresponding input line. The output lines are always
1013 their corresponding input line. The output lines are always
1014 prepended with a '#[Out]# ' marker, so that the log remains valid
1014 prepended with a '#[Out]# ' marker, so that the log remains valid
1015 Python code.
1015 Python code.
1016
1016
1017 Since this marker is always the same, filtering only the output from
1017 Since this marker is always the same, filtering only the output from
1018 a log is very easy, using for example a simple awk call:
1018 a log is very easy, using for example a simple awk call:
1019
1019
1020 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1020 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1021
1021
1022 -t: put timestamps before each input line logged (these are put in
1022 -t: put timestamps before each input line logged (these are put in
1023 comments)."""
1023 comments)."""
1024
1024
1025 opts,par = self.parse_options(parameter_s,'ot')
1025 opts,par = self.parse_options(parameter_s,'ot')
1026 log_output = 'o' in opts
1026 log_output = 'o' in opts
1027 timestamp = 't' in opts
1027 timestamp = 't' in opts
1028
1028
1029 rc = self.shell.rc
1029 rc = self.shell.rc
1030 logger = self.shell.logger
1030 logger = self.shell.logger
1031
1031
1032 # if no args are given, the defaults set in the logger constructor by
1032 # if no args are given, the defaults set in the logger constructor by
1033 # ipytohn remain valid
1033 # ipytohn remain valid
1034 if par:
1034 if par:
1035 try:
1035 try:
1036 logfname,logmode = par.split()
1036 logfname,logmode = par.split()
1037 except:
1037 except:
1038 logfname = par
1038 logfname = par
1039 logmode = 'backup'
1039 logmode = 'backup'
1040 else:
1040 else:
1041 logfname = logger.logfname
1041 logfname = logger.logfname
1042 logmode = logger.logmode
1042 logmode = logger.logmode
1043 # put logfname into rc struct as if it had been called on the command
1043 # put logfname into rc struct as if it had been called on the command
1044 # line, so it ends up saved in the log header Save it in case we need
1044 # line, so it ends up saved in the log header Save it in case we need
1045 # to restore it...
1045 # to restore it...
1046 old_logfile = rc.opts.get('logfile','')
1046 old_logfile = rc.opts.get('logfile','')
1047 if logfname:
1047 if logfname:
1048 logfname = os.path.expanduser(logfname)
1048 logfname = os.path.expanduser(logfname)
1049 rc.opts.logfile = logfname
1049 rc.opts.logfile = logfname
1050 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1050 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1051 try:
1051 try:
1052 started = logger.logstart(logfname,loghead,logmode,
1052 started = logger.logstart(logfname,loghead,logmode,
1053 log_output,timestamp)
1053 log_output,timestamp)
1054 except:
1054 except:
1055 rc.opts.logfile = old_logfile
1055 rc.opts.logfile = old_logfile
1056 warn("Couldn't start log: %s" % sys.exc_info()[1])
1056 warn("Couldn't start log: %s" % sys.exc_info()[1])
1057 else:
1057 else:
1058 # log input history up to this point, optionally interleaving
1058 # log input history up to this point, optionally interleaving
1059 # output if requested
1059 # output if requested
1060
1060
1061 if timestamp:
1061 if timestamp:
1062 # disable timestamping for the previous history, since we've
1062 # disable timestamping for the previous history, since we've
1063 # lost those already (no time machine here).
1063 # lost those already (no time machine here).
1064 logger.timestamp = False
1064 logger.timestamp = False
1065 if log_output:
1065 if log_output:
1066 log_write = logger.log_write
1066 log_write = logger.log_write
1067 input_hist = self.shell.input_hist
1067 input_hist = self.shell.input_hist
1068 output_hist = self.shell.output_hist
1068 output_hist = self.shell.output_hist
1069 for n in range(1,len(input_hist)-1):
1069 for n in range(1,len(input_hist)-1):
1070 log_write(input_hist[n].rstrip())
1070 log_write(input_hist[n].rstrip())
1071 if n in output_hist:
1071 if n in output_hist:
1072 log_write(repr(output_hist[n]),'output')
1072 log_write(repr(output_hist[n]),'output')
1073 else:
1073 else:
1074 logger.log_write(self.shell.input_hist[1:])
1074 logger.log_write(self.shell.input_hist[1:])
1075 if timestamp:
1075 if timestamp:
1076 # re-enable timestamping
1076 # re-enable timestamping
1077 logger.timestamp = True
1077 logger.timestamp = True
1078
1078
1079 print ('Activating auto-logging. '
1079 print ('Activating auto-logging. '
1080 'Current session state plus future input saved.')
1080 'Current session state plus future input saved.')
1081 logger.logstate()
1081 logger.logstate()
1082
1082
1083 def magic_logoff(self,parameter_s=''):
1083 def magic_logoff(self,parameter_s=''):
1084 """Temporarily stop logging.
1084 """Temporarily stop logging.
1085
1085
1086 You must have previously started logging."""
1086 You must have previously started logging."""
1087 self.shell.logger.switch_log(0)
1087 self.shell.logger.switch_log(0)
1088
1088
1089 def magic_logon(self,parameter_s=''):
1089 def magic_logon(self,parameter_s=''):
1090 """Restart logging.
1090 """Restart logging.
1091
1091
1092 This function is for restarting logging which you've temporarily
1092 This function is for restarting logging which you've temporarily
1093 stopped with %logoff. For starting logging for the first time, you
1093 stopped with %logoff. For starting logging for the first time, you
1094 must use the %logstart function, which allows you to specify an
1094 must use the %logstart function, which allows you to specify an
1095 optional log filename."""
1095 optional log filename."""
1096
1096
1097 self.shell.logger.switch_log(1)
1097 self.shell.logger.switch_log(1)
1098
1098
1099 def magic_logstate(self,parameter_s=''):
1099 def magic_logstate(self,parameter_s=''):
1100 """Print the status of the logging system."""
1100 """Print the status of the logging system."""
1101
1101
1102 self.shell.logger.logstate()
1102 self.shell.logger.logstate()
1103
1103
1104 def magic_pdb(self, parameter_s=''):
1104 def magic_pdb(self, parameter_s=''):
1105 """Control the calling of the pdb interactive debugger.
1105 """Control the calling of the pdb interactive debugger.
1106
1106
1107 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1107 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1108 argument it works as a toggle.
1108 argument it works as a toggle.
1109
1109
1110 When an exception is triggered, IPython can optionally call the
1110 When an exception is triggered, IPython can optionally call the
1111 interactive pdb debugger after the traceback printout. %pdb toggles
1111 interactive pdb debugger after the traceback printout. %pdb toggles
1112 this feature on and off."""
1112 this feature on and off."""
1113
1113
1114 par = parameter_s.strip().lower()
1114 par = parameter_s.strip().lower()
1115
1115
1116 if par:
1116 if par:
1117 try:
1117 try:
1118 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1118 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1119 except KeyError:
1119 except KeyError:
1120 print ('Incorrect argument. Use on/1, off/0, '
1120 print ('Incorrect argument. Use on/1, off/0, '
1121 'or nothing for a toggle.')
1121 'or nothing for a toggle.')
1122 return
1122 return
1123 else:
1123 else:
1124 # toggle
1124 # toggle
1125 new_pdb = not self.shell.InteractiveTB.call_pdb
1125 new_pdb = not self.shell.InteractiveTB.call_pdb
1126
1126
1127 # set on the shell
1127 # set on the shell
1128 self.shell.call_pdb = new_pdb
1128 self.shell.call_pdb = new_pdb
1129 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1129 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1130
1130
1131 def magic_prun(self, parameter_s ='',user_mode=1,
1131 def magic_prun(self, parameter_s ='',user_mode=1,
1132 opts=None,arg_lst=None,prog_ns=None):
1132 opts=None,arg_lst=None,prog_ns=None):
1133
1133
1134 """Run a statement through the python code profiler.
1134 """Run a statement through the python code profiler.
1135
1135
1136 Usage:\\
1136 Usage:\\
1137 %prun [options] statement
1137 %prun [options] statement
1138
1138
1139 The given statement (which doesn't require quote marks) is run via the
1139 The given statement (which doesn't require quote marks) is run via the
1140 python profiler in a manner similar to the profile.run() function.
1140 python profiler in a manner similar to the profile.run() function.
1141 Namespaces are internally managed to work correctly; profile.run
1141 Namespaces are internally managed to work correctly; profile.run
1142 cannot be used in IPython because it makes certain assumptions about
1142 cannot be used in IPython because it makes certain assumptions about
1143 namespaces which do not hold under IPython.
1143 namespaces which do not hold under IPython.
1144
1144
1145 Options:
1145 Options:
1146
1146
1147 -l <limit>: you can place restrictions on what or how much of the
1147 -l <limit>: you can place restrictions on what or how much of the
1148 profile gets printed. The limit value can be:
1148 profile gets printed. The limit value can be:
1149
1149
1150 * A string: only information for function names containing this string
1150 * A string: only information for function names containing this string
1151 is printed.
1151 is printed.
1152
1152
1153 * An integer: only these many lines are printed.
1153 * An integer: only these many lines are printed.
1154
1154
1155 * A float (between 0 and 1): this fraction of the report is printed
1155 * A float (between 0 and 1): this fraction of the report is printed
1156 (for example, use a limit of 0.4 to see the topmost 40% only).
1156 (for example, use a limit of 0.4 to see the topmost 40% only).
1157
1157
1158 You can combine several limits with repeated use of the option. For
1158 You can combine several limits with repeated use of the option. For
1159 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1159 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1160 information about class constructors.
1160 information about class constructors.
1161
1161
1162 -r: return the pstats.Stats object generated by the profiling. This
1162 -r: return the pstats.Stats object generated by the profiling. This
1163 object has all the information about the profile in it, and you can
1163 object has all the information about the profile in it, and you can
1164 later use it for further analysis or in other functions.
1164 later use it for further analysis or in other functions.
1165
1165
1166 Since magic functions have a particular form of calling which prevents
1166 Since magic functions have a particular form of calling which prevents
1167 you from writing something like:\\
1167 you from writing something like:\\
1168 In [1]: p = %prun -r print 4 # invalid!\\
1168 In [1]: p = %prun -r print 4 # invalid!\\
1169 you must instead use IPython's automatic variables to assign this:\\
1169 you must instead use IPython's automatic variables to assign this:\\
1170 In [1]: %prun -r print 4 \\
1170 In [1]: %prun -r print 4 \\
1171 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1171 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1172 In [2]: stats = _
1172 In [2]: stats = _
1173
1173
1174 If you really need to assign this value via an explicit function call,
1174 If you really need to assign this value via an explicit function call,
1175 you can always tap directly into the true name of the magic function
1175 you can always tap directly into the true name of the magic function
1176 by using the _ip.magic function:\\
1176 by using the _ip.magic function:\\
1177 In [3]: stats = _ip.magic('prun','-r print 4')
1177 In [3]: stats = _ip.magic('prun','-r print 4')
1178
1178
1179 You can type _ip.magic? for more details.
1179 You can type _ip.magic? for more details.
1180
1180
1181 -s <key>: sort profile by given key. You can provide more than one key
1181 -s <key>: sort profile by given key. You can provide more than one key
1182 by using the option several times: '-s key1 -s key2 -s key3...'. The
1182 by using the option several times: '-s key1 -s key2 -s key3...'. The
1183 default sorting key is 'time'.
1183 default sorting key is 'time'.
1184
1184
1185 The following is copied verbatim from the profile documentation
1185 The following is copied verbatim from the profile documentation
1186 referenced below:
1186 referenced below:
1187
1187
1188 When more than one key is provided, additional keys are used as
1188 When more than one key is provided, additional keys are used as
1189 secondary criteria when the there is equality in all keys selected
1189 secondary criteria when the there is equality in all keys selected
1190 before them.
1190 before them.
1191
1191
1192 Abbreviations can be used for any key names, as long as the
1192 Abbreviations can be used for any key names, as long as the
1193 abbreviation is unambiguous. The following are the keys currently
1193 abbreviation is unambiguous. The following are the keys currently
1194 defined:
1194 defined:
1195
1195
1196 Valid Arg Meaning\\
1196 Valid Arg Meaning\\
1197 "calls" call count\\
1197 "calls" call count\\
1198 "cumulative" cumulative time\\
1198 "cumulative" cumulative time\\
1199 "file" file name\\
1199 "file" file name\\
1200 "module" file name\\
1200 "module" file name\\
1201 "pcalls" primitive call count\\
1201 "pcalls" primitive call count\\
1202 "line" line number\\
1202 "line" line number\\
1203 "name" function name\\
1203 "name" function name\\
1204 "nfl" name/file/line\\
1204 "nfl" name/file/line\\
1205 "stdname" standard name\\
1205 "stdname" standard name\\
1206 "time" internal time
1206 "time" internal time
1207
1207
1208 Note that all sorts on statistics are in descending order (placing
1208 Note that all sorts on statistics are in descending order (placing
1209 most time consuming items first), where as name, file, and line number
1209 most time consuming items first), where as name, file, and line number
1210 searches are in ascending order (i.e., alphabetical). The subtle
1210 searches are in ascending order (i.e., alphabetical). The subtle
1211 distinction between "nfl" and "stdname" is that the standard name is a
1211 distinction between "nfl" and "stdname" is that the standard name is a
1212 sort of the name as printed, which means that the embedded line
1212 sort of the name as printed, which means that the embedded line
1213 numbers get compared in an odd way. For example, lines 3, 20, and 40
1213 numbers get compared in an odd way. For example, lines 3, 20, and 40
1214 would (if the file names were the same) appear in the string order
1214 would (if the file names were the same) appear in the string order
1215 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1215 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1216 line numbers. In fact, sort_stats("nfl") is the same as
1216 line numbers. In fact, sort_stats("nfl") is the same as
1217 sort_stats("name", "file", "line").
1217 sort_stats("name", "file", "line").
1218
1218
1219 -T <filename>: save profile results as shown on screen to a text
1219 -T <filename>: save profile results as shown on screen to a text
1220 file. The profile is still shown on screen.
1220 file. The profile is still shown on screen.
1221
1221
1222 -D <filename>: save (via dump_stats) profile statistics to given
1222 -D <filename>: save (via dump_stats) profile statistics to given
1223 filename. This data is in a format understod by the pstats module, and
1223 filename. This data is in a format understod by the pstats module, and
1224 is generated by a call to the dump_stats() method of profile
1224 is generated by a call to the dump_stats() method of profile
1225 objects. The profile is still shown on screen.
1225 objects. The profile is still shown on screen.
1226
1226
1227 If you want to run complete programs under the profiler's control, use
1227 If you want to run complete programs under the profiler's control, use
1228 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1228 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1229 contains profiler specific options as described here.
1229 contains profiler specific options as described here.
1230
1230
1231 You can read the complete documentation for the profile module with:\\
1231 You can read the complete documentation for the profile module with:\\
1232 In [1]: import profile; profile.help() """
1232 In [1]: import profile; profile.help() """
1233
1233
1234 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1234 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1235 # protect user quote marks
1235 # protect user quote marks
1236 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1236 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1237
1237
1238 if user_mode: # regular user call
1238 if user_mode: # regular user call
1239 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1239 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1240 list_all=1)
1240 list_all=1)
1241 namespace = self.shell.user_ns
1241 namespace = self.shell.user_ns
1242 else: # called to run a program by %run -p
1242 else: # called to run a program by %run -p
1243 try:
1243 try:
1244 filename = get_py_filename(arg_lst[0])
1244 filename = get_py_filename(arg_lst[0])
1245 except IOError,msg:
1245 except IOError,msg:
1246 error(msg)
1246 error(msg)
1247 return
1247 return
1248
1248
1249 arg_str = 'execfile(filename,prog_ns)'
1249 arg_str = 'execfile(filename,prog_ns)'
1250 namespace = locals()
1250 namespace = locals()
1251
1251
1252 opts.merge(opts_def)
1252 opts.merge(opts_def)
1253
1253
1254 prof = profile.Profile()
1254 prof = profile.Profile()
1255 try:
1255 try:
1256 prof = prof.runctx(arg_str,namespace,namespace)
1256 prof = prof.runctx(arg_str,namespace,namespace)
1257 sys_exit = ''
1257 sys_exit = ''
1258 except SystemExit:
1258 except SystemExit:
1259 sys_exit = """*** SystemExit exception caught in code being profiled."""
1259 sys_exit = """*** SystemExit exception caught in code being profiled."""
1260
1260
1261 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1261 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1262
1262
1263 lims = opts.l
1263 lims = opts.l
1264 if lims:
1264 if lims:
1265 lims = [] # rebuild lims with ints/floats/strings
1265 lims = [] # rebuild lims with ints/floats/strings
1266 for lim in opts.l:
1266 for lim in opts.l:
1267 try:
1267 try:
1268 lims.append(int(lim))
1268 lims.append(int(lim))
1269 except ValueError:
1269 except ValueError:
1270 try:
1270 try:
1271 lims.append(float(lim))
1271 lims.append(float(lim))
1272 except ValueError:
1272 except ValueError:
1273 lims.append(lim)
1273 lims.append(lim)
1274
1274
1275 # trap output
1275 # trap output
1276 sys_stdout = sys.stdout
1276 sys_stdout = sys.stdout
1277 stdout_trap = StringIO()
1277 stdout_trap = StringIO()
1278 try:
1278 try:
1279 sys.stdout = stdout_trap
1279 sys.stdout = stdout_trap
1280 stats.print_stats(*lims)
1280 stats.print_stats(*lims)
1281 finally:
1281 finally:
1282 sys.stdout = sys_stdout
1282 sys.stdout = sys_stdout
1283 output = stdout_trap.getvalue()
1283 output = stdout_trap.getvalue()
1284 output = output.rstrip()
1284 output = output.rstrip()
1285
1285
1286 page(output,screen_lines=self.shell.rc.screen_length)
1286 page(output,screen_lines=self.shell.rc.screen_length)
1287 print sys_exit,
1287 print sys_exit,
1288
1288
1289 dump_file = opts.D[0]
1289 dump_file = opts.D[0]
1290 text_file = opts.T[0]
1290 text_file = opts.T[0]
1291 if dump_file:
1291 if dump_file:
1292 prof.dump_stats(dump_file)
1292 prof.dump_stats(dump_file)
1293 print '\n*** Profile stats marshalled to file',\
1293 print '\n*** Profile stats marshalled to file',\
1294 `dump_file`+'.',sys_exit
1294 `dump_file`+'.',sys_exit
1295 if text_file:
1295 if text_file:
1296 file(text_file,'w').write(output)
1296 file(text_file,'w').write(output)
1297 print '\n*** Profile printout saved to text file',\
1297 print '\n*** Profile printout saved to text file',\
1298 `text_file`+'.',sys_exit
1298 `text_file`+'.',sys_exit
1299
1299
1300 if opts.has_key('r'):
1300 if opts.has_key('r'):
1301 return stats
1301 return stats
1302 else:
1302 else:
1303 return None
1303 return None
1304
1304
1305 def magic_run(self, parameter_s ='',runner=None):
1305 def magic_run(self, parameter_s ='',runner=None):
1306 """Run the named file inside IPython as a program.
1306 """Run the named file inside IPython as a program.
1307
1307
1308 Usage:\\
1308 Usage:\\
1309 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1309 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1310
1310
1311 Parameters after the filename are passed as command-line arguments to
1311 Parameters after the filename are passed as command-line arguments to
1312 the program (put in sys.argv). Then, control returns to IPython's
1312 the program (put in sys.argv). Then, control returns to IPython's
1313 prompt.
1313 prompt.
1314
1314
1315 This is similar to running at a system prompt:\\
1315 This is similar to running at a system prompt:\\
1316 $ python file args\\
1316 $ python file args\\
1317 but with the advantage of giving you IPython's tracebacks, and of
1317 but with the advantage of giving you IPython's tracebacks, and of
1318 loading all variables into your interactive namespace for further use
1318 loading all variables into your interactive namespace for further use
1319 (unless -p is used, see below).
1319 (unless -p is used, see below).
1320
1320
1321 The file is executed in a namespace initially consisting only of
1321 The file is executed in a namespace initially consisting only of
1322 __name__=='__main__' and sys.argv constructed as indicated. It thus
1322 __name__=='__main__' and sys.argv constructed as indicated. It thus
1323 sees its environment as if it were being run as a stand-alone
1323 sees its environment as if it were being run as a stand-alone
1324 program. But after execution, the IPython interactive namespace gets
1324 program. But after execution, the IPython interactive namespace gets
1325 updated with all variables defined in the program (except for __name__
1325 updated with all variables defined in the program (except for __name__
1326 and sys.argv). This allows for very convenient loading of code for
1326 and sys.argv). This allows for very convenient loading of code for
1327 interactive work, while giving each program a 'clean sheet' to run in.
1327 interactive work, while giving each program a 'clean sheet' to run in.
1328
1328
1329 Options:
1329 Options:
1330
1330
1331 -n: __name__ is NOT set to '__main__', but to the running file's name
1331 -n: __name__ is NOT set to '__main__', but to the running file's name
1332 without extension (as python does under import). This allows running
1332 without extension (as python does under import). This allows running
1333 scripts and reloading the definitions in them without calling code
1333 scripts and reloading the definitions in them without calling code
1334 protected by an ' if __name__ == "__main__" ' clause.
1334 protected by an ' if __name__ == "__main__" ' clause.
1335
1335
1336 -i: run the file in IPython's namespace instead of an empty one. This
1336 -i: run the file in IPython's namespace instead of an empty one. This
1337 is useful if you are experimenting with code written in a text editor
1337 is useful if you are experimenting with code written in a text editor
1338 which depends on variables defined interactively.
1338 which depends on variables defined interactively.
1339
1339
1340 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1340 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1341 being run. This is particularly useful if IPython is being used to
1341 being run. This is particularly useful if IPython is being used to
1342 run unittests, which always exit with a sys.exit() call. In such
1342 run unittests, which always exit with a sys.exit() call. In such
1343 cases you are interested in the output of the test results, not in
1343 cases you are interested in the output of the test results, not in
1344 seeing a traceback of the unittest module.
1344 seeing a traceback of the unittest module.
1345
1345
1346 -t: print timing information at the end of the run. IPython will give
1346 -t: print timing information at the end of the run. IPython will give
1347 you an estimated CPU time consumption for your script, which under
1347 you an estimated CPU time consumption for your script, which under
1348 Unix uses the resource module to avoid the wraparound problems of
1348 Unix uses the resource module to avoid the wraparound problems of
1349 time.clock(). Under Unix, an estimate of time spent on system tasks
1349 time.clock(). Under Unix, an estimate of time spent on system tasks
1350 is also given (for Windows platforms this is reported as 0.0).
1350 is also given (for Windows platforms this is reported as 0.0).
1351
1351
1352 If -t is given, an additional -N<N> option can be given, where <N>
1352 If -t is given, an additional -N<N> option can be given, where <N>
1353 must be an integer indicating how many times you want the script to
1353 must be an integer indicating how many times you want the script to
1354 run. The final timing report will include total and per run results.
1354 run. The final timing report will include total and per run results.
1355
1355
1356 For example (testing the script uniq_stable.py):
1356 For example (testing the script uniq_stable.py):
1357
1357
1358 In [1]: run -t uniq_stable
1358 In [1]: run -t uniq_stable
1359
1359
1360 IPython CPU timings (estimated):\\
1360 IPython CPU timings (estimated):\\
1361 User : 0.19597 s.\\
1361 User : 0.19597 s.\\
1362 System: 0.0 s.\\
1362 System: 0.0 s.\\
1363
1363
1364 In [2]: run -t -N5 uniq_stable
1364 In [2]: run -t -N5 uniq_stable
1365
1365
1366 IPython CPU timings (estimated):\\
1366 IPython CPU timings (estimated):\\
1367 Total runs performed: 5\\
1367 Total runs performed: 5\\
1368 Times : Total Per run\\
1368 Times : Total Per run\\
1369 User : 0.910862 s, 0.1821724 s.\\
1369 User : 0.910862 s, 0.1821724 s.\\
1370 System: 0.0 s, 0.0 s.
1370 System: 0.0 s, 0.0 s.
1371
1371
1372 -d: run your program under the control of pdb, the Python debugger.
1372 -d: run your program under the control of pdb, the Python debugger.
1373 This allows you to execute your program step by step, watch variables,
1373 This allows you to execute your program step by step, watch variables,
1374 etc. Internally, what IPython does is similar to calling:
1374 etc. Internally, what IPython does is similar to calling:
1375
1375
1376 pdb.run('execfile("YOURFILENAME")')
1376 pdb.run('execfile("YOURFILENAME")')
1377
1377
1378 with a breakpoint set on line 1 of your file. You can change the line
1378 with a breakpoint set on line 1 of your file. You can change the line
1379 number for this automatic breakpoint to be <N> by using the -bN option
1379 number for this automatic breakpoint to be <N> by using the -bN option
1380 (where N must be an integer). For example:
1380 (where N must be an integer). For example:
1381
1381
1382 %run -d -b40 myscript
1382 %run -d -b40 myscript
1383
1383
1384 will set the first breakpoint at line 40 in myscript.py. Note that
1384 will set the first breakpoint at line 40 in myscript.py. Note that
1385 the first breakpoint must be set on a line which actually does
1385 the first breakpoint must be set on a line which actually does
1386 something (not a comment or docstring) for it to stop execution.
1386 something (not a comment or docstring) for it to stop execution.
1387
1387
1388 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1388 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1389 first enter 'c' (without qoutes) to start execution up to the first
1389 first enter 'c' (without qoutes) to start execution up to the first
1390 breakpoint.
1390 breakpoint.
1391
1391
1392 Entering 'help' gives information about the use of the debugger. You
1392 Entering 'help' gives information about the use of the debugger. You
1393 can easily see pdb's full documentation with "import pdb;pdb.help()"
1393 can easily see pdb's full documentation with "import pdb;pdb.help()"
1394 at a prompt.
1394 at a prompt.
1395
1395
1396 -p: run program under the control of the Python profiler module (which
1396 -p: run program under the control of the Python profiler module (which
1397 prints a detailed report of execution times, function calls, etc).
1397 prints a detailed report of execution times, function calls, etc).
1398
1398
1399 You can pass other options after -p which affect the behavior of the
1399 You can pass other options after -p which affect the behavior of the
1400 profiler itself. See the docs for %prun for details.
1400 profiler itself. See the docs for %prun for details.
1401
1401
1402 In this mode, the program's variables do NOT propagate back to the
1402 In this mode, the program's variables do NOT propagate back to the
1403 IPython interactive namespace (because they remain in the namespace
1403 IPython interactive namespace (because they remain in the namespace
1404 where the profiler executes them).
1404 where the profiler executes them).
1405
1405
1406 Internally this triggers a call to %prun, see its documentation for
1406 Internally this triggers a call to %prun, see its documentation for
1407 details on the options available specifically for profiling."""
1407 details on the options available specifically for profiling."""
1408
1408
1409 # get arguments and set sys.argv for program to be run.
1409 # get arguments and set sys.argv for program to be run.
1410 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1410 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1411 mode='list',list_all=1)
1411 mode='list',list_all=1)
1412
1412
1413 try:
1413 try:
1414 filename = get_py_filename(arg_lst[0])
1414 filename = get_py_filename(arg_lst[0])
1415 except IndexError:
1415 except IndexError:
1416 warn('you must provide at least a filename.')
1416 warn('you must provide at least a filename.')
1417 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1417 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1418 return
1418 return
1419 except IOError,msg:
1419 except IOError,msg:
1420 error(msg)
1420 error(msg)
1421 return
1421 return
1422
1422
1423 # Control the response to exit() calls made by the script being run
1423 # Control the response to exit() calls made by the script being run
1424 exit_ignore = opts.has_key('e')
1424 exit_ignore = opts.has_key('e')
1425
1425
1426 # Make sure that the running script gets a proper sys.argv as if it
1426 # Make sure that the running script gets a proper sys.argv as if it
1427 # were run from a system shell.
1427 # were run from a system shell.
1428 save_argv = sys.argv # save it for later restoring
1428 save_argv = sys.argv # save it for later restoring
1429 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1429 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1430
1430
1431 if opts.has_key('i'):
1431 if opts.has_key('i'):
1432 prog_ns = self.shell.user_ns
1432 prog_ns = self.shell.user_ns
1433 __name__save = self.shell.user_ns['__name__']
1433 __name__save = self.shell.user_ns['__name__']
1434 prog_ns['__name__'] = '__main__'
1434 prog_ns['__name__'] = '__main__'
1435 else:
1435 else:
1436 if opts.has_key('n'):
1436 if opts.has_key('n'):
1437 name = os.path.splitext(os.path.basename(filename))[0]
1437 name = os.path.splitext(os.path.basename(filename))[0]
1438 else:
1438 else:
1439 name = '__main__'
1439 name = '__main__'
1440 prog_ns = {'__name__':name}
1440 prog_ns = {'__name__':name}
1441
1441
1442 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1442 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1443 # set the __file__ global in the script's namespace
1443 # set the __file__ global in the script's namespace
1444 prog_ns['__file__'] = filename
1444 prog_ns['__file__'] = filename
1445
1445
1446 # pickle fix. See iplib for an explanation. But we need to make sure
1446 # pickle fix. See iplib for an explanation. But we need to make sure
1447 # that, if we overwrite __main__, we replace it at the end
1447 # that, if we overwrite __main__, we replace it at the end
1448 if prog_ns['__name__'] == '__main__':
1448 if prog_ns['__name__'] == '__main__':
1449 restore_main = sys.modules['__main__']
1449 restore_main = sys.modules['__main__']
1450 else:
1450 else:
1451 restore_main = False
1451 restore_main = False
1452
1452
1453 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1453 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1454
1454
1455 stats = None
1455 stats = None
1456 try:
1456 try:
1457 if opts.has_key('p'):
1457 if opts.has_key('p'):
1458 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1458 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1459 else:
1459 else:
1460 if opts.has_key('d'):
1460 if opts.has_key('d'):
1461 deb = Debugger.Pdb(self.shell.rc.colors)
1461 deb = Debugger.Pdb(self.shell.rc.colors)
1462 # reset Breakpoint state, which is moronically kept
1462 # reset Breakpoint state, which is moronically kept
1463 # in a class
1463 # in a class
1464 bdb.Breakpoint.next = 1
1464 bdb.Breakpoint.next = 1
1465 bdb.Breakpoint.bplist = {}
1465 bdb.Breakpoint.bplist = {}
1466 bdb.Breakpoint.bpbynumber = [None]
1466 bdb.Breakpoint.bpbynumber = [None]
1467 # Set an initial breakpoint to stop execution
1467 # Set an initial breakpoint to stop execution
1468 maxtries = 10
1468 maxtries = 10
1469 bp = int(opts.get('b',[1])[0])
1469 bp = int(opts.get('b',[1])[0])
1470 checkline = deb.checkline(filename,bp)
1470 checkline = deb.checkline(filename,bp)
1471 if not checkline:
1471 if not checkline:
1472 for bp in range(bp+1,bp+maxtries+1):
1472 for bp in range(bp+1,bp+maxtries+1):
1473 if deb.checkline(filename,bp):
1473 if deb.checkline(filename,bp):
1474 break
1474 break
1475 else:
1475 else:
1476 msg = ("\nI failed to find a valid line to set "
1476 msg = ("\nI failed to find a valid line to set "
1477 "a breakpoint\n"
1477 "a breakpoint\n"
1478 "after trying up to line: %s.\n"
1478 "after trying up to line: %s.\n"
1479 "Please set a valid breakpoint manually "
1479 "Please set a valid breakpoint manually "
1480 "with the -b option." % bp)
1480 "with the -b option." % bp)
1481 error(msg)
1481 error(msg)
1482 return
1482 return
1483 # if we find a good linenumber, set the breakpoint
1483 # if we find a good linenumber, set the breakpoint
1484 deb.do_break('%s:%s' % (filename,bp))
1484 deb.do_break('%s:%s' % (filename,bp))
1485 # Start file run
1485 # Start file run
1486 print "NOTE: Enter 'c' at the",
1486 print "NOTE: Enter 'c' at the",
1487 print "ipdb> prompt to start your script."
1487 print "ipdb> prompt to start your script."
1488 try:
1488 try:
1489 deb.run('execfile("%s")' % filename,prog_ns)
1489 deb.run('execfile("%s")' % filename,prog_ns)
1490 except:
1490 except:
1491 etype, value, tb = sys.exc_info()
1491 etype, value, tb = sys.exc_info()
1492 # Skip three frames in the traceback: the %run one,
1492 # Skip three frames in the traceback: the %run one,
1493 # one inside bdb.py, and the command-line typed by the
1493 # one inside bdb.py, and the command-line typed by the
1494 # user (run by exec in pdb itself).
1494 # user (run by exec in pdb itself).
1495 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1495 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1496 else:
1496 else:
1497 if runner is None:
1497 if runner is None:
1498 runner = self.shell.safe_execfile
1498 runner = self.shell.safe_execfile
1499 if opts.has_key('t'):
1499 if opts.has_key('t'):
1500 try:
1500 try:
1501 nruns = int(opts['N'][0])
1501 nruns = int(opts['N'][0])
1502 if nruns < 1:
1502 if nruns < 1:
1503 error('Number of runs must be >=1')
1503 error('Number of runs must be >=1')
1504 return
1504 return
1505 except (KeyError):
1505 except (KeyError):
1506 nruns = 1
1506 nruns = 1
1507 if nruns == 1:
1507 if nruns == 1:
1508 t0 = clock2()
1508 t0 = clock2()
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 " User : %10s s." % t_usr
1514 print " User : %10s s." % t_usr
1515 print " System: %10s s." % t_sys
1515 print " System: %10s s." % t_sys
1516 else:
1516 else:
1517 runs = range(nruns)
1517 runs = range(nruns)
1518 t0 = clock2()
1518 t0 = clock2()
1519 for nr in runs:
1519 for nr in runs:
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1521 t1 = clock2()
1521 t1 = clock2()
1522 t_usr = t1[0]-t0[0]
1522 t_usr = t1[0]-t0[0]
1523 t_sys = t1[1]-t1[1]
1523 t_sys = t1[1]-t1[1]
1524 print "\nIPython CPU timings (estimated):"
1524 print "\nIPython CPU timings (estimated):"
1525 print "Total runs performed:",nruns
1525 print "Total runs performed:",nruns
1526 print " Times : %10s %10s" % ('Total','Per run')
1526 print " Times : %10s %10s" % ('Total','Per run')
1527 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1527 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1528 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1528 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1529
1529
1530 else:
1530 else:
1531 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1531 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1532 if opts.has_key('i'):
1532 if opts.has_key('i'):
1533 self.shell.user_ns['__name__'] = __name__save
1533 self.shell.user_ns['__name__'] = __name__save
1534 else:
1534 else:
1535 # update IPython interactive namespace
1535 # update IPython interactive namespace
1536 del prog_ns['__name__']
1536 del prog_ns['__name__']
1537 self.shell.user_ns.update(prog_ns)
1537 self.shell.user_ns.update(prog_ns)
1538 finally:
1538 finally:
1539 sys.argv = save_argv
1539 sys.argv = save_argv
1540 if restore_main:
1540 if restore_main:
1541 sys.modules['__main__'] = restore_main
1541 sys.modules['__main__'] = restore_main
1542 return stats
1542 return stats
1543
1543
1544 def magic_runlog(self, parameter_s =''):
1544 def magic_runlog(self, parameter_s =''):
1545 """Run files as logs.
1545 """Run files as logs.
1546
1546
1547 Usage:\\
1547 Usage:\\
1548 %runlog file1 file2 ...
1548 %runlog file1 file2 ...
1549
1549
1550 Run the named files (treating them as log files) in sequence inside
1550 Run the named files (treating them as log files) in sequence inside
1551 the interpreter, and return to the prompt. This is much slower than
1551 the interpreter, and return to the prompt. This is much slower than
1552 %run because each line is executed in a try/except block, but it
1552 %run because each line is executed in a try/except block, but it
1553 allows running files with syntax errors in them.
1553 allows running files with syntax errors in them.
1554
1554
1555 Normally IPython will guess when a file is one of its own logfiles, so
1555 Normally IPython will guess when a file is one of its own logfiles, so
1556 you can typically use %run even for logs. This shorthand allows you to
1556 you can typically use %run even for logs. This shorthand allows you to
1557 force any file to be treated as a log file."""
1557 force any file to be treated as a log file."""
1558
1558
1559 for f in parameter_s.split():
1559 for f in parameter_s.split():
1560 self.shell.safe_execfile(f,self.shell.user_ns,
1560 self.shell.safe_execfile(f,self.shell.user_ns,
1561 self.shell.user_ns,islog=1)
1561 self.shell.user_ns,islog=1)
1562
1562
1563 def magic_time(self,parameter_s = ''):
1563 def magic_time(self,parameter_s = ''):
1564 """Time execution of a Python statement or expression.
1564 """Time execution of a Python statement or expression.
1565
1565
1566 The CPU and wall clock times are printed, and the value of the
1566 The CPU and wall clock times are printed, and the value of the
1567 expression (if any) is returned. Note that under Win32, system time
1567 expression (if any) is returned. Note that under Win32, system time
1568 is always reported as 0, since it can not be measured.
1568 is always reported as 0, since it can not be measured.
1569
1569
1570 This function provides very basic timing functionality. In Python
1570 This function provides very basic timing functionality. In Python
1571 2.3, the timeit module offers more control and sophistication, but for
1571 2.3, the timeit module offers more control and sophistication, but for
1572 now IPython supports Python 2.2, so we can not rely on timeit being
1572 now IPython supports Python 2.2, so we can not rely on timeit being
1573 present.
1573 present.
1574
1574
1575 Some examples:
1575 Some examples:
1576
1576
1577 In [1]: time 2**128
1577 In [1]: time 2**128
1578 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1578 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1579 Wall time: 0.00
1579 Wall time: 0.00
1580 Out[1]: 340282366920938463463374607431768211456L
1580 Out[1]: 340282366920938463463374607431768211456L
1581
1581
1582 In [2]: n = 1000000
1582 In [2]: n = 1000000
1583
1583
1584 In [3]: time sum(range(n))
1584 In [3]: time sum(range(n))
1585 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1585 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1586 Wall time: 1.37
1586 Wall time: 1.37
1587 Out[3]: 499999500000L
1587 Out[3]: 499999500000L
1588
1588
1589 In [4]: time print 'hello world'
1589 In [4]: time print 'hello world'
1590 hello world
1590 hello world
1591 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1591 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1592 Wall time: 0.00
1592 Wall time: 0.00
1593 """
1593 """
1594
1594
1595 # fail immediately if the given expression can't be compiled
1595 # fail immediately if the given expression can't be compiled
1596 try:
1596 try:
1597 mode = 'eval'
1597 mode = 'eval'
1598 code = compile(parameter_s,'<timed eval>',mode)
1598 code = compile(parameter_s,'<timed eval>',mode)
1599 except SyntaxError:
1599 except SyntaxError:
1600 mode = 'exec'
1600 mode = 'exec'
1601 code = compile(parameter_s,'<timed exec>',mode)
1601 code = compile(parameter_s,'<timed exec>',mode)
1602 # skew measurement as little as possible
1602 # skew measurement as little as possible
1603 glob = self.shell.user_ns
1603 glob = self.shell.user_ns
1604 clk = clock2
1604 clk = clock2
1605 wtime = time.time
1605 wtime = time.time
1606 # time execution
1606 # time execution
1607 wall_st = wtime()
1607 wall_st = wtime()
1608 if mode=='eval':
1608 if mode=='eval':
1609 st = clk()
1609 st = clk()
1610 out = eval(code,glob)
1610 out = eval(code,glob)
1611 end = clk()
1611 end = clk()
1612 else:
1612 else:
1613 st = clk()
1613 st = clk()
1614 exec code in glob
1614 exec code in glob
1615 end = clk()
1615 end = clk()
1616 out = None
1616 out = None
1617 wall_end = wtime()
1617 wall_end = wtime()
1618 # Compute actual times and report
1618 # Compute actual times and report
1619 wall_time = wall_end-wall_st
1619 wall_time = wall_end-wall_st
1620 cpu_user = end[0]-st[0]
1620 cpu_user = end[0]-st[0]
1621 cpu_sys = end[1]-st[1]
1621 cpu_sys = end[1]-st[1]
1622 cpu_tot = cpu_user+cpu_sys
1622 cpu_tot = cpu_user+cpu_sys
1623 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1623 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1624 (cpu_user,cpu_sys,cpu_tot)
1624 (cpu_user,cpu_sys,cpu_tot)
1625 print "Wall time: %.2f" % wall_time
1625 print "Wall time: %.2f" % wall_time
1626 return out
1626 return out
1627
1627
1628 def magic_macro(self,parameter_s = ''):
1628 def magic_macro(self,parameter_s = ''):
1629 """Define a set of input lines as a macro for future re-execution.
1629 """Define a set of input lines as a macro for future re-execution.
1630
1630
1631 Usage:\\
1631 Usage:\\
1632 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1632 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1633
1633
1634 Options:
1634 Options:
1635
1635
1636 -r: use 'raw' input. By default, the 'processed' history is used,
1636 -r: use 'raw' input. By default, the 'processed' history is used,
1637 so that magics are loaded in their transformed version to valid
1637 so that magics are loaded in their transformed version to valid
1638 Python. If this option is given, the raw input as typed as the
1638 Python. If this option is given, the raw input as typed as the
1639 command line is used instead.
1639 command line is used instead.
1640
1640
1641 This will define a global variable called `name` which is a string
1641 This will define a global variable called `name` which is a string
1642 made of joining the slices and lines you specify (n1,n2,... numbers
1642 made of joining the slices and lines you specify (n1,n2,... numbers
1643 above) from your input history into a single string. This variable
1643 above) from your input history into a single string. This variable
1644 acts like an automatic function which re-executes those lines as if
1644 acts like an automatic function which re-executes those lines as if
1645 you had typed them. You just type 'name' at the prompt and the code
1645 you had typed them. You just type 'name' at the prompt and the code
1646 executes.
1646 executes.
1647
1647
1648 The notation for indicating number ranges is: n1-n2 means 'use line
1648 The notation for indicating number ranges is: n1-n2 means 'use line
1649 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1649 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1650 using the lines numbered 5,6 and 7.
1650 using the lines numbered 5,6 and 7.
1651
1651
1652 Note: as a 'hidden' feature, you can also use traditional python slice
1652 Note: as a 'hidden' feature, you can also use traditional python slice
1653 notation, where N:M means numbers N through M-1.
1653 notation, where N:M means numbers N through M-1.
1654
1654
1655 For example, if your history contains (%hist prints it):
1655 For example, if your history contains (%hist prints it):
1656
1656
1657 44: x=1\\
1657 44: x=1\\
1658 45: y=3\\
1658 45: y=3\\
1659 46: z=x+y\\
1659 46: z=x+y\\
1660 47: print x\\
1660 47: print x\\
1661 48: a=5\\
1661 48: a=5\\
1662 49: print 'x',x,'y',y\\
1662 49: print 'x',x,'y',y\\
1663
1663
1664 you can create a macro with lines 44 through 47 (included) and line 49
1664 you can create a macro with lines 44 through 47 (included) and line 49
1665 called my_macro with:
1665 called my_macro with:
1666
1666
1667 In [51]: %macro my_macro 44-47 49
1667 In [51]: %macro my_macro 44-47 49
1668
1668
1669 Now, typing `my_macro` (without quotes) will re-execute all this code
1669 Now, typing `my_macro` (without quotes) will re-execute all this code
1670 in one pass.
1670 in one pass.
1671
1671
1672 You don't need to give the line-numbers in order, and any given line
1672 You don't need to give the line-numbers in order, and any given line
1673 number can appear multiple times. You can assemble macros with any
1673 number can appear multiple times. You can assemble macros with any
1674 lines from your input history in any order.
1674 lines from your input history in any order.
1675
1675
1676 The macro is a simple object which holds its value in an attribute,
1676 The macro is a simple object which holds its value in an attribute,
1677 but IPython's display system checks for macros and executes them as
1677 but IPython's display system checks for macros and executes them as
1678 code instead of printing them when you type their name.
1678 code instead of printing them when you type their name.
1679
1679
1680 You can view a macro's contents by explicitly printing it with:
1680 You can view a macro's contents by explicitly printing it with:
1681
1681
1682 'print macro_name'.
1682 'print macro_name'.
1683
1683
1684 For one-off cases which DON'T contain magic function calls in them you
1684 For one-off cases which DON'T contain magic function calls in them you
1685 can obtain similar results by explicitly executing slices from your
1685 can obtain similar results by explicitly executing slices from your
1686 input history with:
1686 input history with:
1687
1687
1688 In [60]: exec In[44:48]+In[49]"""
1688 In [60]: exec In[44:48]+In[49]"""
1689
1689
1690 opts,args = self.parse_options(parameter_s,'r')
1690 opts,args = self.parse_options(parameter_s,'r',mode='list')
1691 name,ranges = args[0], args[1:]
1691 name,ranges = args[0], args[1:]
1692 #print 'rng',ranges # dbg
1692 #print 'rng',ranges # dbg
1693 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1693 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1694 macro = Macro(lines)
1694 macro = Macro(lines)
1695 self.shell.user_ns.update({name:macro})
1695 self.shell.user_ns.update({name:macro})
1696 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1696 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1697 print 'Macro contents:'
1697 print 'Macro contents:'
1698 print macro,
1698 print macro,
1699
1699
1700 def magic_save(self,parameter_s = ''):
1700 def magic_save(self,parameter_s = ''):
1701 """Save a set of lines to a given filename.
1701 """Save a set of lines to a given filename.
1702
1702
1703 Usage:\\
1703 Usage:\\
1704 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1704 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1705
1705
1706 Options:
1706 Options:
1707
1707
1708 -r: use 'raw' input. By default, the 'processed' history is used,
1708 -r: use 'raw' input. By default, the 'processed' history is used,
1709 so that magics are loaded in their transformed version to valid
1709 so that magics are loaded in their transformed version to valid
1710 Python. If this option is given, the raw input as typed as the
1710 Python. If this option is given, the raw input as typed as the
1711 command line is used instead.
1711 command line is used instead.
1712
1712
1713 This function uses the same syntax as %macro for line extraction, but
1713 This function uses the same syntax as %macro for line extraction, but
1714 instead of creating a macro it saves the resulting string to the
1714 instead of creating a macro it saves the resulting string to the
1715 filename you specify.
1715 filename you specify.
1716
1716
1717 It adds a '.py' extension to the file if you don't do so yourself, and
1717 It adds a '.py' extension to the file if you don't do so yourself, and
1718 it asks for confirmation before overwriting existing files."""
1718 it asks for confirmation before overwriting existing files."""
1719
1719
1720 opts,args = self.parse_options(parameter_s,'r', mode = 'list')
1720 opts,args = self.parse_options(parameter_s,'r',mode='list')
1721 fname,ranges = args[0], args[1:]
1721 fname,ranges = args[0], args[1:]
1722 if not fname.endswith('.py'):
1722 if not fname.endswith('.py'):
1723 fname += '.py'
1723 fname += '.py'
1724 if os.path.isfile(fname):
1724 if os.path.isfile(fname):
1725 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1725 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1726 if ans.lower() not in ['y','yes']:
1726 if ans.lower() not in ['y','yes']:
1727 print 'Operation cancelled.'
1727 print 'Operation cancelled.'
1728 return
1728 return
1729 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1729 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1730 f = file(fname,'w')
1730 f = file(fname,'w')
1731 f.write(cmds)
1731 f.write(cmds)
1732 f.close()
1732 f.close()
1733 print 'The following commands were written to file `%s`:' % fname
1733 print 'The following commands were written to file `%s`:' % fname
1734 print cmds
1734 print cmds
1735
1735
1736 def _edit_macro(self,mname,macro):
1736 def _edit_macro(self,mname,macro):
1737 """open an editor with the macro data in a file"""
1737 """open an editor with the macro data in a file"""
1738 filename = self.shell.mktempfile(macro.value)
1738 filename = self.shell.mktempfile(macro.value)
1739 self.shell.hooks.editor(filename)
1739 self.shell.hooks.editor(filename)
1740
1740
1741 # and make a new macro object, to replace the old one
1741 # and make a new macro object, to replace the old one
1742 mfile = open(filename)
1742 mfile = open(filename)
1743 mvalue = mfile.read()
1743 mvalue = mfile.read()
1744 mfile.close()
1744 mfile.close()
1745 self.shell.user_ns[mname] = Macro(mvalue)
1745 self.shell.user_ns[mname] = Macro(mvalue)
1746
1746
1747 def magic_ed(self,parameter_s=''):
1747 def magic_ed(self,parameter_s=''):
1748 """Alias to %edit."""
1748 """Alias to %edit."""
1749 return self.magic_edit(parameter_s)
1749 return self.magic_edit(parameter_s)
1750
1750
1751 def magic_edit(self,parameter_s='',last_call=['','']):
1751 def magic_edit(self,parameter_s='',last_call=['','']):
1752 """Bring up an editor and execute the resulting code.
1752 """Bring up an editor and execute the resulting code.
1753
1753
1754 Usage:
1754 Usage:
1755 %edit [options] [args]
1755 %edit [options] [args]
1756
1756
1757 %edit runs IPython's editor hook. The default version of this hook is
1757 %edit runs IPython's editor hook. The default version of this hook is
1758 set to call the __IPYTHON__.rc.editor command. This is read from your
1758 set to call the __IPYTHON__.rc.editor command. This is read from your
1759 environment variable $EDITOR. If this isn't found, it will default to
1759 environment variable $EDITOR. If this isn't found, it will default to
1760 vi under Linux/Unix and to notepad under Windows. See the end of this
1760 vi under Linux/Unix and to notepad under Windows. See the end of this
1761 docstring for how to change the editor hook.
1761 docstring for how to change the editor hook.
1762
1762
1763 You can also set the value of this editor via the command line option
1763 You can also set the value of this editor via the command line option
1764 '-editor' or in your ipythonrc file. This is useful if you wish to use
1764 '-editor' or in your ipythonrc file. This is useful if you wish to use
1765 specifically for IPython an editor different from your typical default
1765 specifically for IPython an editor different from your typical default
1766 (and for Windows users who typically don't set environment variables).
1766 (and for Windows users who typically don't set environment variables).
1767
1767
1768 This command allows you to conveniently edit multi-line code right in
1768 This command allows you to conveniently edit multi-line code right in
1769 your IPython session.
1769 your IPython session.
1770
1770
1771 If called without arguments, %edit opens up an empty editor with a
1771 If called without arguments, %edit opens up an empty editor with a
1772 temporary file and will execute the contents of this file when you
1772 temporary file and will execute the contents of this file when you
1773 close it (don't forget to save it!).
1773 close it (don't forget to save it!).
1774
1774
1775
1775
1776 Options:
1776 Options:
1777
1777
1778 -p: this will call the editor with the same data as the previous time
1778 -p: this will call the editor with the same data as the previous time
1779 it was used, regardless of how long ago (in your current session) it
1779 it was used, regardless of how long ago (in your current session) it
1780 was.
1780 was.
1781
1781
1782 -r: use 'raw' input. This option only applies to input taken from the
1782 -r: use 'raw' input. This option only applies to input taken from the
1783 user's history. By default, the 'processed' history is used, so that
1783 user's history. By default, the 'processed' history is used, so that
1784 magics are loaded in their transformed version to valid Python. If
1784 magics are loaded in their transformed version to valid Python. If
1785 this option is given, the raw input as typed as the command line is
1785 this option is given, the raw input as typed as the command line is
1786 used instead. When you exit the editor, it will be executed by
1786 used instead. When you exit the editor, it will be executed by
1787 IPython's own processor.
1787 IPython's own processor.
1788
1788
1789 -x: do not execute the edited code immediately upon exit. This is
1789 -x: do not execute the edited code immediately upon exit. This is
1790 mainly useful if you are editing programs which need to be called with
1790 mainly useful if you are editing programs which need to be called with
1791 command line arguments, which you can then do using %run.
1791 command line arguments, which you can then do using %run.
1792
1792
1793
1793
1794 Arguments:
1794 Arguments:
1795
1795
1796 If arguments are given, the following possibilites exist:
1796 If arguments are given, the following possibilites exist:
1797
1797
1798 - The arguments are numbers or pairs of colon-separated numbers (like
1798 - The arguments are numbers or pairs of colon-separated numbers (like
1799 1 4:8 9). These are interpreted as lines of previous input to be
1799 1 4:8 9). These are interpreted as lines of previous input to be
1800 loaded into the editor. The syntax is the same of the %macro command.
1800 loaded into the editor. The syntax is the same of the %macro command.
1801
1801
1802 - If the argument doesn't start with a number, it is evaluated as a
1802 - If the argument doesn't start with a number, it is evaluated as a
1803 variable and its contents loaded into the editor. You can thus edit
1803 variable and its contents loaded into the editor. You can thus edit
1804 any string which contains python code (including the result of
1804 any string which contains python code (including the result of
1805 previous edits).
1805 previous edits).
1806
1806
1807 - If the argument is the name of an object (other than a string),
1807 - If the argument is the name of an object (other than a string),
1808 IPython will try to locate the file where it was defined and open the
1808 IPython will try to locate the file where it was defined and open the
1809 editor at the point where it is defined. You can use `%edit function`
1809 editor at the point where it is defined. You can use `%edit function`
1810 to load an editor exactly at the point where 'function' is defined,
1810 to load an editor exactly at the point where 'function' is defined,
1811 edit it and have the file be executed automatically.
1811 edit it and have the file be executed automatically.
1812
1812
1813 If the object is a macro (see %macro for details), this opens up your
1813 If the object is a macro (see %macro for details), this opens up your
1814 specified editor with a temporary file containing the macro's data.
1814 specified editor with a temporary file containing the macro's data.
1815 Upon exit, the macro is reloaded with the contents of the file.
1815 Upon exit, the macro is reloaded with the contents of the file.
1816
1816
1817 Note: opening at an exact line is only supported under Unix, and some
1817 Note: opening at an exact line is only supported under Unix, and some
1818 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1818 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1819 '+NUMBER' parameter necessary for this feature. Good editors like
1819 '+NUMBER' parameter necessary for this feature. Good editors like
1820 (X)Emacs, vi, jed, pico and joe all do.
1820 (X)Emacs, vi, jed, pico and joe all do.
1821
1821
1822 - If the argument is not found as a variable, IPython will look for a
1822 - If the argument is not found as a variable, IPython will look for a
1823 file with that name (adding .py if necessary) and load it into the
1823 file with that name (adding .py if necessary) and load it into the
1824 editor. It will execute its contents with execfile() when you exit,
1824 editor. It will execute its contents with execfile() when you exit,
1825 loading any code in the file into your interactive namespace.
1825 loading any code in the file into your interactive namespace.
1826
1826
1827 After executing your code, %edit will return as output the code you
1827 After executing your code, %edit will return as output the code you
1828 typed in the editor (except when it was an existing file). This way
1828 typed in the editor (except when it was an existing file). This way
1829 you can reload the code in further invocations of %edit as a variable,
1829 you can reload the code in further invocations of %edit as a variable,
1830 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1830 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1831 the output.
1831 the output.
1832
1832
1833 Note that %edit is also available through the alias %ed.
1833 Note that %edit is also available through the alias %ed.
1834
1834
1835 This is an example of creating a simple function inside the editor and
1835 This is an example of creating a simple function inside the editor and
1836 then modifying it. First, start up the editor:
1836 then modifying it. First, start up the editor:
1837
1837
1838 In [1]: ed\\
1838 In [1]: ed\\
1839 Editing... done. Executing edited code...\\
1839 Editing... done. Executing edited code...\\
1840 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1840 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1841
1841
1842 We can then call the function foo():
1842 We can then call the function foo():
1843
1843
1844 In [2]: foo()\\
1844 In [2]: foo()\\
1845 foo() was defined in an editing session
1845 foo() was defined in an editing session
1846
1846
1847 Now we edit foo. IPython automatically loads the editor with the
1847 Now we edit foo. IPython automatically loads the editor with the
1848 (temporary) file where foo() was previously defined:
1848 (temporary) file where foo() was previously defined:
1849
1849
1850 In [3]: ed foo\\
1850 In [3]: ed foo\\
1851 Editing... done. Executing edited code...
1851 Editing... done. Executing edited code...
1852
1852
1853 And if we call foo() again we get the modified version:
1853 And if we call foo() again we get the modified version:
1854
1854
1855 In [4]: foo()\\
1855 In [4]: foo()\\
1856 foo() has now been changed!
1856 foo() has now been changed!
1857
1857
1858 Here is an example of how to edit a code snippet successive
1858 Here is an example of how to edit a code snippet successive
1859 times. First we call the editor:
1859 times. First we call the editor:
1860
1860
1861 In [8]: ed\\
1861 In [8]: ed\\
1862 Editing... done. Executing edited code...\\
1862 Editing... done. Executing edited code...\\
1863 hello\\
1863 hello\\
1864 Out[8]: "print 'hello'\\n"
1864 Out[8]: "print 'hello'\\n"
1865
1865
1866 Now we call it again with the previous output (stored in _):
1866 Now we call it again with the previous output (stored in _):
1867
1867
1868 In [9]: ed _\\
1868 In [9]: ed _\\
1869 Editing... done. Executing edited code...\\
1869 Editing... done. Executing edited code...\\
1870 hello world\\
1870 hello world\\
1871 Out[9]: "print 'hello world'\\n"
1871 Out[9]: "print 'hello world'\\n"
1872
1872
1873 Now we call it with the output #8 (stored in _8, also as Out[8]):
1873 Now we call it with the output #8 (stored in _8, also as Out[8]):
1874
1874
1875 In [10]: ed _8\\
1875 In [10]: ed _8\\
1876 Editing... done. Executing edited code...\\
1876 Editing... done. Executing edited code...\\
1877 hello again\\
1877 hello again\\
1878 Out[10]: "print 'hello again'\\n"
1878 Out[10]: "print 'hello again'\\n"
1879
1879
1880
1880
1881 Changing the default editor hook:
1881 Changing the default editor hook:
1882
1882
1883 If you wish to write your own editor hook, you can put it in a
1883 If you wish to write your own editor hook, you can put it in a
1884 configuration file which you load at startup time. The default hook
1884 configuration file which you load at startup time. The default hook
1885 is defined in the IPython.hooks module, and you can use that as a
1885 is defined in the IPython.hooks module, and you can use that as a
1886 starting example for further modifications. That file also has
1886 starting example for further modifications. That file also has
1887 general instructions on how to set a new hook for use once you've
1887 general instructions on how to set a new hook for use once you've
1888 defined it."""
1888 defined it."""
1889
1889
1890 # FIXME: This function has become a convoluted mess. It needs a
1890 # FIXME: This function has become a convoluted mess. It needs a
1891 # ground-up rewrite with clean, simple logic.
1891 # ground-up rewrite with clean, simple logic.
1892
1892
1893 def make_filename(arg):
1893 def make_filename(arg):
1894 "Make a filename from the given args"
1894 "Make a filename from the given args"
1895 try:
1895 try:
1896 filename = get_py_filename(arg)
1896 filename = get_py_filename(arg)
1897 except IOError:
1897 except IOError:
1898 if args.endswith('.py'):
1898 if args.endswith('.py'):
1899 filename = arg
1899 filename = arg
1900 else:
1900 else:
1901 filename = None
1901 filename = None
1902 return filename
1902 return filename
1903
1903
1904 # custom exceptions
1904 # custom exceptions
1905 class DataIsObject(Exception): pass
1905 class DataIsObject(Exception): pass
1906
1906
1907 opts,args = self.parse_options(parameter_s,'prx')
1907 opts,args = self.parse_options(parameter_s,'prx')
1908 # Set a few locals from the options for convenience:
1908 # Set a few locals from the options for convenience:
1909 opts_p = opts.has_key('p')
1909 opts_p = opts.has_key('p')
1910 opts_r = opts.has_key('r')
1910 opts_r = opts.has_key('r')
1911
1911
1912 # Default line number value
1912 # Default line number value
1913 lineno = None
1913 lineno = None
1914 if opts_p:
1914 if opts_p:
1915 args = '_%s' % last_call[0]
1915 args = '_%s' % last_call[0]
1916 if not self.shell.user_ns.has_key(args):
1916 if not self.shell.user_ns.has_key(args):
1917 args = last_call[1]
1917 args = last_call[1]
1918
1918
1919 # use last_call to remember the state of the previous call, but don't
1919 # use last_call to remember the state of the previous call, but don't
1920 # let it be clobbered by successive '-p' calls.
1920 # let it be clobbered by successive '-p' calls.
1921 try:
1921 try:
1922 last_call[0] = self.shell.outputcache.prompt_count
1922 last_call[0] = self.shell.outputcache.prompt_count
1923 if not opts_p:
1923 if not opts_p:
1924 last_call[1] = parameter_s
1924 last_call[1] = parameter_s
1925 except:
1925 except:
1926 pass
1926 pass
1927
1927
1928 # by default this is done with temp files, except when the given
1928 # by default this is done with temp files, except when the given
1929 # arg is a filename
1929 # arg is a filename
1930 use_temp = 1
1930 use_temp = 1
1931
1931
1932 if re.match(r'\d',args):
1932 if re.match(r'\d',args):
1933 # Mode where user specifies ranges of lines, like in %macro.
1933 # Mode where user specifies ranges of lines, like in %macro.
1934 # This means that you can't edit files whose names begin with
1934 # This means that you can't edit files whose names begin with
1935 # numbers this way. Tough.
1935 # numbers this way. Tough.
1936 ranges = args.split()
1936 ranges = args.split()
1937 data = ''.join(self.extract_input_slices(ranges,opts_r))
1937 data = ''.join(self.extract_input_slices(ranges,opts_r))
1938 elif args.endswith('.py'):
1938 elif args.endswith('.py'):
1939 filename = make_filename(args)
1939 filename = make_filename(args)
1940 data = ''
1940 data = ''
1941 use_temp = 0
1941 use_temp = 0
1942 elif args:
1942 elif args:
1943 try:
1943 try:
1944 # Load the parameter given as a variable. If not a string,
1944 # Load the parameter given as a variable. If not a string,
1945 # process it as an object instead (below)
1945 # process it as an object instead (below)
1946
1946
1947 #print '*** args',args,'type',type(args) # dbg
1947 #print '*** args',args,'type',type(args) # dbg
1948 data = eval(args,self.shell.user_ns)
1948 data = eval(args,self.shell.user_ns)
1949 if not type(data) in StringTypes:
1949 if not type(data) in StringTypes:
1950 raise DataIsObject
1950 raise DataIsObject
1951
1951
1952 except (NameError,SyntaxError):
1952 except (NameError,SyntaxError):
1953 # given argument is not a variable, try as a filename
1953 # given argument is not a variable, try as a filename
1954 filename = make_filename(args)
1954 filename = make_filename(args)
1955 if filename is None:
1955 if filename is None:
1956 warn("Argument given (%s) can't be found as a variable "
1956 warn("Argument given (%s) can't be found as a variable "
1957 "or as a filename." % args)
1957 "or as a filename." % args)
1958 return
1958 return
1959
1959
1960 data = ''
1960 data = ''
1961 use_temp = 0
1961 use_temp = 0
1962 except DataIsObject:
1962 except DataIsObject:
1963
1963
1964 # macros have a special edit function
1964 # macros have a special edit function
1965 if isinstance(data,Macro):
1965 if isinstance(data,Macro):
1966 self._edit_macro(args,data)
1966 self._edit_macro(args,data)
1967 return
1967 return
1968
1968
1969 # For objects, try to edit the file where they are defined
1969 # For objects, try to edit the file where they are defined
1970 try:
1970 try:
1971 filename = inspect.getabsfile(data)
1971 filename = inspect.getabsfile(data)
1972 datafile = 1
1972 datafile = 1
1973 except TypeError:
1973 except TypeError:
1974 filename = make_filename(args)
1974 filename = make_filename(args)
1975 datafile = 1
1975 datafile = 1
1976 warn('Could not find file where `%s` is defined.\n'
1976 warn('Could not find file where `%s` is defined.\n'
1977 'Opening a file named `%s`' % (args,filename))
1977 'Opening a file named `%s`' % (args,filename))
1978 # Now, make sure we can actually read the source (if it was in
1978 # Now, make sure we can actually read the source (if it was in
1979 # a temp file it's gone by now).
1979 # a temp file it's gone by now).
1980 if datafile:
1980 if datafile:
1981 try:
1981 try:
1982 lineno = inspect.getsourcelines(data)[1]
1982 lineno = inspect.getsourcelines(data)[1]
1983 except IOError:
1983 except IOError:
1984 filename = make_filename(args)
1984 filename = make_filename(args)
1985 if filename is None:
1985 if filename is None:
1986 warn('The file `%s` where `%s` was defined cannot '
1986 warn('The file `%s` where `%s` was defined cannot '
1987 'be read.' % (filename,data))
1987 'be read.' % (filename,data))
1988 return
1988 return
1989 use_temp = 0
1989 use_temp = 0
1990 else:
1990 else:
1991 data = ''
1991 data = ''
1992
1992
1993 if use_temp:
1993 if use_temp:
1994 filename = self.shell.mktempfile(data)
1994 filename = self.shell.mktempfile(data)
1995 print 'IPython will make a temporary file named:',filename
1995 print 'IPython will make a temporary file named:',filename
1996
1996
1997 # do actual editing here
1997 # do actual editing here
1998 print 'Editing...',
1998 print 'Editing...',
1999 sys.stdout.flush()
1999 sys.stdout.flush()
2000 self.shell.hooks.editor(filename,lineno)
2000 self.shell.hooks.editor(filename,lineno)
2001 if opts.has_key('x'): # -x prevents actual execution
2001 if opts.has_key('x'): # -x prevents actual execution
2002 print
2002 print
2003 else:
2003 else:
2004 print 'done. Executing edited code...'
2004 print 'done. Executing edited code...'
2005 if opts_r:
2005 if opts_r:
2006 self.shell.runlines(file_read(filename))
2006 self.shell.runlines(file_read(filename))
2007 else:
2007 else:
2008 self.shell.safe_execfile(filename,self.shell.user_ns)
2008 self.shell.safe_execfile(filename,self.shell.user_ns)
2009 if use_temp:
2009 if use_temp:
2010 try:
2010 try:
2011 return open(filename).read()
2011 return open(filename).read()
2012 except IOError,msg:
2012 except IOError,msg:
2013 if msg.filename == filename:
2013 if msg.filename == filename:
2014 warn('File not found. Did you forget to save?')
2014 warn('File not found. Did you forget to save?')
2015 return
2015 return
2016 else:
2016 else:
2017 self.shell.showtraceback()
2017 self.shell.showtraceback()
2018
2018
2019 def magic_xmode(self,parameter_s = ''):
2019 def magic_xmode(self,parameter_s = ''):
2020 """Switch modes for the exception handlers.
2020 """Switch modes for the exception handlers.
2021
2021
2022 Valid modes: Plain, Context and Verbose.
2022 Valid modes: Plain, Context and Verbose.
2023
2023
2024 If called without arguments, acts as a toggle."""
2024 If called without arguments, acts as a toggle."""
2025
2025
2026 def xmode_switch_err(name):
2026 def xmode_switch_err(name):
2027 warn('Error changing %s exception modes.\n%s' %
2027 warn('Error changing %s exception modes.\n%s' %
2028 (name,sys.exc_info()[1]))
2028 (name,sys.exc_info()[1]))
2029
2029
2030 shell = self.shell
2030 shell = self.shell
2031 new_mode = parameter_s.strip().capitalize()
2031 new_mode = parameter_s.strip().capitalize()
2032 try:
2032 try:
2033 shell.InteractiveTB.set_mode(mode=new_mode)
2033 shell.InteractiveTB.set_mode(mode=new_mode)
2034 print 'Exception reporting mode:',shell.InteractiveTB.mode
2034 print 'Exception reporting mode:',shell.InteractiveTB.mode
2035 except:
2035 except:
2036 xmode_switch_err('user')
2036 xmode_switch_err('user')
2037
2037
2038 # threaded shells use a special handler in sys.excepthook
2038 # threaded shells use a special handler in sys.excepthook
2039 if shell.isthreaded:
2039 if shell.isthreaded:
2040 try:
2040 try:
2041 shell.sys_excepthook.set_mode(mode=new_mode)
2041 shell.sys_excepthook.set_mode(mode=new_mode)
2042 except:
2042 except:
2043 xmode_switch_err('threaded')
2043 xmode_switch_err('threaded')
2044
2044
2045 def magic_colors(self,parameter_s = ''):
2045 def magic_colors(self,parameter_s = ''):
2046 """Switch color scheme for prompts, info system and exception handlers.
2046 """Switch color scheme for prompts, info system and exception handlers.
2047
2047
2048 Currently implemented schemes: NoColor, Linux, LightBG.
2048 Currently implemented schemes: NoColor, Linux, LightBG.
2049
2049
2050 Color scheme names are not case-sensitive."""
2050 Color scheme names are not case-sensitive."""
2051
2051
2052 def color_switch_err(name):
2052 def color_switch_err(name):
2053 warn('Error changing %s color schemes.\n%s' %
2053 warn('Error changing %s color schemes.\n%s' %
2054 (name,sys.exc_info()[1]))
2054 (name,sys.exc_info()[1]))
2055
2055
2056
2056
2057 new_scheme = parameter_s.strip()
2057 new_scheme = parameter_s.strip()
2058 if not new_scheme:
2058 if not new_scheme:
2059 print 'You must specify a color scheme.'
2059 print 'You must specify a color scheme.'
2060 return
2060 return
2061 import IPython.rlineimpl as readline
2061 import IPython.rlineimpl as readline
2062 if not readline.have_readline:
2062 if not readline.have_readline:
2063 msg = """\
2063 msg = """\
2064 Proper color support under MS Windows requires Gary Bishop's readline library.
2064 Proper color support under MS Windows requires Gary Bishop's readline library.
2065 You can find it at:
2065 You can find it at:
2066 http://sourceforge.net/projects/uncpythontools
2066 http://sourceforge.net/projects/uncpythontools
2067 Gary's readline needs the ctypes module, from:
2067 Gary's readline needs the ctypes module, from:
2068 http://starship.python.net/crew/theller/ctypes
2068 http://starship.python.net/crew/theller/ctypes
2069
2069
2070 Defaulting color scheme to 'NoColor'"""
2070 Defaulting color scheme to 'NoColor'"""
2071 new_scheme = 'NoColor'
2071 new_scheme = 'NoColor'
2072 warn(msg)
2072 warn(msg)
2073 # local shortcut
2073 # local shortcut
2074 shell = self.shell
2074 shell = self.shell
2075
2075
2076 # Set prompt colors
2076 # Set prompt colors
2077 try:
2077 try:
2078 shell.outputcache.set_colors(new_scheme)
2078 shell.outputcache.set_colors(new_scheme)
2079 except:
2079 except:
2080 color_switch_err('prompt')
2080 color_switch_err('prompt')
2081 else:
2081 else:
2082 shell.rc.colors = \
2082 shell.rc.colors = \
2083 shell.outputcache.color_table.active_scheme_name
2083 shell.outputcache.color_table.active_scheme_name
2084 # Set exception colors
2084 # Set exception colors
2085 try:
2085 try:
2086 shell.InteractiveTB.set_colors(scheme = new_scheme)
2086 shell.InteractiveTB.set_colors(scheme = new_scheme)
2087 shell.SyntaxTB.set_colors(scheme = new_scheme)
2087 shell.SyntaxTB.set_colors(scheme = new_scheme)
2088 except:
2088 except:
2089 color_switch_err('exception')
2089 color_switch_err('exception')
2090
2090
2091 # threaded shells use a verbose traceback in sys.excepthook
2091 # threaded shells use a verbose traceback in sys.excepthook
2092 if shell.isthreaded:
2092 if shell.isthreaded:
2093 try:
2093 try:
2094 shell.sys_excepthook.set_colors(scheme=new_scheme)
2094 shell.sys_excepthook.set_colors(scheme=new_scheme)
2095 except:
2095 except:
2096 color_switch_err('system exception handler')
2096 color_switch_err('system exception handler')
2097
2097
2098 # Set info (for 'object?') colors
2098 # Set info (for 'object?') colors
2099 if shell.rc.color_info:
2099 if shell.rc.color_info:
2100 try:
2100 try:
2101 shell.inspector.set_active_scheme(new_scheme)
2101 shell.inspector.set_active_scheme(new_scheme)
2102 except:
2102 except:
2103 color_switch_err('object inspector')
2103 color_switch_err('object inspector')
2104 else:
2104 else:
2105 shell.inspector.set_active_scheme('NoColor')
2105 shell.inspector.set_active_scheme('NoColor')
2106
2106
2107 def magic_color_info(self,parameter_s = ''):
2107 def magic_color_info(self,parameter_s = ''):
2108 """Toggle color_info.
2108 """Toggle color_info.
2109
2109
2110 The color_info configuration parameter controls whether colors are
2110 The color_info configuration parameter controls whether colors are
2111 used for displaying object details (by things like %psource, %pfile or
2111 used for displaying object details (by things like %psource, %pfile or
2112 the '?' system). This function toggles this value with each call.
2112 the '?' system). This function toggles this value with each call.
2113
2113
2114 Note that unless you have a fairly recent pager (less works better
2114 Note that unless you have a fairly recent pager (less works better
2115 than more) in your system, using colored object information displays
2115 than more) in your system, using colored object information displays
2116 will not work properly. Test it and see."""
2116 will not work properly. Test it and see."""
2117
2117
2118 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2118 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2119 self.magic_colors(self.shell.rc.colors)
2119 self.magic_colors(self.shell.rc.colors)
2120 print 'Object introspection functions have now coloring:',
2120 print 'Object introspection functions have now coloring:',
2121 print ['OFF','ON'][self.shell.rc.color_info]
2121 print ['OFF','ON'][self.shell.rc.color_info]
2122
2122
2123 def magic_Pprint(self, parameter_s=''):
2123 def magic_Pprint(self, parameter_s=''):
2124 """Toggle pretty printing on/off."""
2124 """Toggle pretty printing on/off."""
2125
2125
2126 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2126 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2127 print 'Pretty printing has been turned', \
2127 print 'Pretty printing has been turned', \
2128 ['OFF','ON'][self.shell.rc.pprint]
2128 ['OFF','ON'][self.shell.rc.pprint]
2129
2129
2130 def magic_exit(self, parameter_s=''):
2130 def magic_exit(self, parameter_s=''):
2131 """Exit IPython, confirming if configured to do so.
2131 """Exit IPython, confirming if configured to do so.
2132
2132
2133 You can configure whether IPython asks for confirmation upon exit by
2133 You can configure whether IPython asks for confirmation upon exit by
2134 setting the confirm_exit flag in the ipythonrc file."""
2134 setting the confirm_exit flag in the ipythonrc file."""
2135
2135
2136 self.shell.exit()
2136 self.shell.exit()
2137
2137
2138 def magic_quit(self, parameter_s=''):
2138 def magic_quit(self, parameter_s=''):
2139 """Exit IPython, confirming if configured to do so (like %exit)"""
2139 """Exit IPython, confirming if configured to do so (like %exit)"""
2140
2140
2141 self.shell.exit()
2141 self.shell.exit()
2142
2142
2143 def magic_Exit(self, parameter_s=''):
2143 def magic_Exit(self, parameter_s=''):
2144 """Exit IPython without confirmation."""
2144 """Exit IPython without confirmation."""
2145
2145
2146 self.shell.exit_now = True
2146 self.shell.exit_now = True
2147
2147
2148 def magic_Quit(self, parameter_s=''):
2148 def magic_Quit(self, parameter_s=''):
2149 """Exit IPython without confirmation (like %Exit)."""
2149 """Exit IPython without confirmation (like %Exit)."""
2150
2150
2151 self.shell.exit_now = True
2151 self.shell.exit_now = True
2152
2152
2153 #......................................................................
2153 #......................................................................
2154 # Functions to implement unix shell-type things
2154 # Functions to implement unix shell-type things
2155
2155
2156 def magic_alias(self, parameter_s = ''):
2156 def magic_alias(self, parameter_s = ''):
2157 """Define an alias for a system command.
2157 """Define an alias for a system command.
2158
2158
2159 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2159 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2160
2160
2161 Then, typing 'alias_name params' will execute the system command 'cmd
2161 Then, typing 'alias_name params' will execute the system command 'cmd
2162 params' (from your underlying operating system).
2162 params' (from your underlying operating system).
2163
2163
2164 Aliases have lower precedence than magic functions and Python normal
2164 Aliases have lower precedence than magic functions and Python normal
2165 variables, so if 'foo' is both a Python variable and an alias, the
2165 variables, so if 'foo' is both a Python variable and an alias, the
2166 alias can not be executed until 'del foo' removes the Python variable.
2166 alias can not be executed until 'del foo' removes the Python variable.
2167
2167
2168 You can use the %l specifier in an alias definition to represent the
2168 You can use the %l specifier in an alias definition to represent the
2169 whole line when the alias is called. For example:
2169 whole line when the alias is called. For example:
2170
2170
2171 In [2]: alias all echo "Input in brackets: <%l>"\\
2171 In [2]: alias all echo "Input in brackets: <%l>"\\
2172 In [3]: all hello world\\
2172 In [3]: all hello world\\
2173 Input in brackets: <hello world>
2173 Input in brackets: <hello world>
2174
2174
2175 You can also define aliases with parameters using %s specifiers (one
2175 You can also define aliases with parameters using %s specifiers (one
2176 per parameter):
2176 per parameter):
2177
2177
2178 In [1]: alias parts echo first %s second %s\\
2178 In [1]: alias parts echo first %s second %s\\
2179 In [2]: %parts A B\\
2179 In [2]: %parts A B\\
2180 first A second B\\
2180 first A second B\\
2181 In [3]: %parts A\\
2181 In [3]: %parts A\\
2182 Incorrect number of arguments: 2 expected.\\
2182 Incorrect number of arguments: 2 expected.\\
2183 parts is an alias to: 'echo first %s second %s'
2183 parts is an alias to: 'echo first %s second %s'
2184
2184
2185 Note that %l and %s are mutually exclusive. You can only use one or
2185 Note that %l and %s are mutually exclusive. You can only use one or
2186 the other in your aliases.
2186 the other in your aliases.
2187
2187
2188 Aliases expand Python variables just like system calls using ! or !!
2188 Aliases expand Python variables just like system calls using ! or !!
2189 do: all expressions prefixed with '$' get expanded. For details of
2189 do: all expressions prefixed with '$' get expanded. For details of
2190 the semantic rules, see PEP-215:
2190 the semantic rules, see PEP-215:
2191 http://www.python.org/peps/pep-0215.html. This is the library used by
2191 http://www.python.org/peps/pep-0215.html. This is the library used by
2192 IPython for variable expansion. If you want to access a true shell
2192 IPython for variable expansion. If you want to access a true shell
2193 variable, an extra $ is necessary to prevent its expansion by IPython:
2193 variable, an extra $ is necessary to prevent its expansion by IPython:
2194
2194
2195 In [6]: alias show echo\\
2195 In [6]: alias show echo\\
2196 In [7]: PATH='A Python string'\\
2196 In [7]: PATH='A Python string'\\
2197 In [8]: show $PATH\\
2197 In [8]: show $PATH\\
2198 A Python string\\
2198 A Python string\\
2199 In [9]: show $$PATH\\
2199 In [9]: show $$PATH\\
2200 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2200 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2201
2201
2202 You can use the alias facility to acess all of $PATH. See the %rehash
2202 You can use the alias facility to acess all of $PATH. See the %rehash
2203 and %rehashx functions, which automatically create aliases for the
2203 and %rehashx functions, which automatically create aliases for the
2204 contents of your $PATH.
2204 contents of your $PATH.
2205
2205
2206 If called with no parameters, %alias prints the current alias table."""
2206 If called with no parameters, %alias prints the current alias table."""
2207
2207
2208 par = parameter_s.strip()
2208 par = parameter_s.strip()
2209 if not par:
2209 if not par:
2210 if self.shell.rc.automagic:
2210 if self.shell.rc.automagic:
2211 prechar = ''
2211 prechar = ''
2212 else:
2212 else:
2213 prechar = self.shell.ESC_MAGIC
2213 prechar = self.shell.ESC_MAGIC
2214 #print 'Alias\t\tSystem Command\n'+'-'*30
2214 #print 'Alias\t\tSystem Command\n'+'-'*30
2215 atab = self.shell.alias_table
2215 atab = self.shell.alias_table
2216 aliases = atab.keys()
2216 aliases = atab.keys()
2217 aliases.sort()
2217 aliases.sort()
2218 res = []
2218 res = []
2219 for alias in aliases:
2219 for alias in aliases:
2220 res.append((alias, atab[alias][1]))
2220 res.append((alias, atab[alias][1]))
2221 print "Total number of aliases:",len(aliases)
2221 print "Total number of aliases:",len(aliases)
2222 return res
2222 return res
2223 try:
2223 try:
2224 alias,cmd = par.split(None,1)
2224 alias,cmd = par.split(None,1)
2225 except:
2225 except:
2226 print OInspect.getdoc(self.magic_alias)
2226 print OInspect.getdoc(self.magic_alias)
2227 else:
2227 else:
2228 nargs = cmd.count('%s')
2228 nargs = cmd.count('%s')
2229 if nargs>0 and cmd.find('%l')>=0:
2229 if nargs>0 and cmd.find('%l')>=0:
2230 error('The %s and %l specifiers are mutually exclusive '
2230 error('The %s and %l specifiers are mutually exclusive '
2231 'in alias definitions.')
2231 'in alias definitions.')
2232 else: # all looks OK
2232 else: # all looks OK
2233 self.shell.alias_table[alias] = (nargs,cmd)
2233 self.shell.alias_table[alias] = (nargs,cmd)
2234 self.shell.alias_table_validate(verbose=0)
2234 self.shell.alias_table_validate(verbose=0)
2235 # end magic_alias
2235 # end magic_alias
2236
2236
2237 def magic_unalias(self, parameter_s = ''):
2237 def magic_unalias(self, parameter_s = ''):
2238 """Remove an alias"""
2238 """Remove an alias"""
2239
2239
2240 aname = parameter_s.strip()
2240 aname = parameter_s.strip()
2241 if aname in self.shell.alias_table:
2241 if aname in self.shell.alias_table:
2242 del self.shell.alias_table[aname]
2242 del self.shell.alias_table[aname]
2243
2243
2244 def magic_rehash(self, parameter_s = ''):
2244 def magic_rehash(self, parameter_s = ''):
2245 """Update the alias table with all entries in $PATH.
2245 """Update the alias table with all entries in $PATH.
2246
2246
2247 This version does no checks on execute permissions or whether the
2247 This version does no checks on execute permissions or whether the
2248 contents of $PATH are truly files (instead of directories or something
2248 contents of $PATH are truly files (instead of directories or something
2249 else). For such a safer (but slower) version, use %rehashx."""
2249 else). For such a safer (but slower) version, use %rehashx."""
2250
2250
2251 # This function (and rehashx) manipulate the alias_table directly
2251 # This function (and rehashx) manipulate the alias_table directly
2252 # rather than calling magic_alias, for speed reasons. A rehash on a
2252 # rather than calling magic_alias, for speed reasons. A rehash on a
2253 # typical Linux box involves several thousand entries, so efficiency
2253 # typical Linux box involves several thousand entries, so efficiency
2254 # here is a top concern.
2254 # here is a top concern.
2255
2255
2256 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2256 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2257 alias_table = self.shell.alias_table
2257 alias_table = self.shell.alias_table
2258 for pdir in path:
2258 for pdir in path:
2259 for ff in os.listdir(pdir):
2259 for ff in os.listdir(pdir):
2260 # each entry in the alias table must be (N,name), where
2260 # each entry in the alias table must be (N,name), where
2261 # N is the number of positional arguments of the alias.
2261 # N is the number of positional arguments of the alias.
2262 alias_table[ff] = (0,ff)
2262 alias_table[ff] = (0,ff)
2263 # Make sure the alias table doesn't contain keywords or builtins
2263 # Make sure the alias table doesn't contain keywords or builtins
2264 self.shell.alias_table_validate()
2264 self.shell.alias_table_validate()
2265 # Call again init_auto_alias() so we get 'rm -i' and other modified
2265 # Call again init_auto_alias() so we get 'rm -i' and other modified
2266 # aliases since %rehash will probably clobber them
2266 # aliases since %rehash will probably clobber them
2267 self.shell.init_auto_alias()
2267 self.shell.init_auto_alias()
2268
2268
2269 def magic_rehashx(self, parameter_s = ''):
2269 def magic_rehashx(self, parameter_s = ''):
2270 """Update the alias table with all executable files in $PATH.
2270 """Update the alias table with all executable files in $PATH.
2271
2271
2272 This version explicitly checks that every entry in $PATH is a file
2272 This version explicitly checks that every entry in $PATH is a file
2273 with execute access (os.X_OK), so it is much slower than %rehash.
2273 with execute access (os.X_OK), so it is much slower than %rehash.
2274
2274
2275 Under Windows, it checks executability as a match agains a
2275 Under Windows, it checks executability as a match agains a
2276 '|'-separated string of extensions, stored in the IPython config
2276 '|'-separated string of extensions, stored in the IPython config
2277 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2277 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2278
2278
2279 path = [os.path.abspath(os.path.expanduser(p)) for p in
2279 path = [os.path.abspath(os.path.expanduser(p)) for p in
2280 os.environ['PATH'].split(os.pathsep)]
2280 os.environ['PATH'].split(os.pathsep)]
2281 path = filter(os.path.isdir,path)
2281 path = filter(os.path.isdir,path)
2282
2282
2283 alias_table = self.shell.alias_table
2283 alias_table = self.shell.alias_table
2284 syscmdlist = []
2284 syscmdlist = []
2285 if os.name == 'posix':
2285 if os.name == 'posix':
2286 isexec = lambda fname:os.path.isfile(fname) and \
2286 isexec = lambda fname:os.path.isfile(fname) and \
2287 os.access(fname,os.X_OK)
2287 os.access(fname,os.X_OK)
2288 else:
2288 else:
2289
2289
2290 try:
2290 try:
2291 winext = os.environ['pathext'].replace(';','|').replace('.','')
2291 winext = os.environ['pathext'].replace(';','|').replace('.','')
2292 except KeyError:
2292 except KeyError:
2293 winext = 'exe|com|bat'
2293 winext = 'exe|com|bat'
2294
2294
2295 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2295 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2296 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2296 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2297 savedir = os.getcwd()
2297 savedir = os.getcwd()
2298 try:
2298 try:
2299 # write the whole loop for posix/Windows so we don't have an if in
2299 # write the whole loop for posix/Windows so we don't have an if in
2300 # the innermost part
2300 # the innermost part
2301 if os.name == 'posix':
2301 if os.name == 'posix':
2302 for pdir in path:
2302 for pdir in path:
2303 os.chdir(pdir)
2303 os.chdir(pdir)
2304 for ff in os.listdir(pdir):
2304 for ff in os.listdir(pdir):
2305 if isexec(ff):
2305 if isexec(ff):
2306 # each entry in the alias table must be (N,name),
2306 # each entry in the alias table must be (N,name),
2307 # where N is the number of positional arguments of the
2307 # where N is the number of positional arguments of the
2308 # alias.
2308 # alias.
2309 alias_table[ff] = (0,ff)
2309 alias_table[ff] = (0,ff)
2310 syscmdlist.append(ff)
2310 syscmdlist.append(ff)
2311 else:
2311 else:
2312 for pdir in path:
2312 for pdir in path:
2313 os.chdir(pdir)
2313 os.chdir(pdir)
2314 for ff in os.listdir(pdir):
2314 for ff in os.listdir(pdir):
2315 if isexec(ff):
2315 if isexec(ff):
2316 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2316 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2317 syscmdlist.append(ff)
2317 syscmdlist.append(ff)
2318 # Make sure the alias table doesn't contain keywords or builtins
2318 # Make sure the alias table doesn't contain keywords or builtins
2319 self.shell.alias_table_validate()
2319 self.shell.alias_table_validate()
2320 # Call again init_auto_alias() so we get 'rm -i' and other
2320 # Call again init_auto_alias() so we get 'rm -i' and other
2321 # modified aliases since %rehashx will probably clobber them
2321 # modified aliases since %rehashx will probably clobber them
2322 self.shell.init_auto_alias()
2322 self.shell.init_auto_alias()
2323 db = self.getapi().getdb()
2323 db = self.getapi().getdb()
2324 db['syscmdlist'] = syscmdlist
2324 db['syscmdlist'] = syscmdlist
2325 finally:
2325 finally:
2326 os.chdir(savedir)
2326 os.chdir(savedir)
2327
2327
2328 def magic_pwd(self, parameter_s = ''):
2328 def magic_pwd(self, parameter_s = ''):
2329 """Return the current working directory path."""
2329 """Return the current working directory path."""
2330 return os.getcwd()
2330 return os.getcwd()
2331
2331
2332 def magic_cd(self, parameter_s=''):
2332 def magic_cd(self, parameter_s=''):
2333 """Change the current working directory.
2333 """Change the current working directory.
2334
2334
2335 This command automatically maintains an internal list of directories
2335 This command automatically maintains an internal list of directories
2336 you visit during your IPython session, in the variable _dh. The
2336 you visit during your IPython session, in the variable _dh. The
2337 command %dhist shows this history nicely formatted.
2337 command %dhist shows this history nicely formatted.
2338
2338
2339 Usage:
2339 Usage:
2340
2340
2341 cd 'dir': changes to directory 'dir'.
2341 cd 'dir': changes to directory 'dir'.
2342
2342
2343 cd -: changes to the last visited directory.
2343 cd -: changes to the last visited directory.
2344
2344
2345 cd -<n>: changes to the n-th directory in the directory history.
2345 cd -<n>: changes to the n-th directory in the directory history.
2346
2346
2347 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2347 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2348 (note: cd <bookmark_name> is enough if there is no
2348 (note: cd <bookmark_name> is enough if there is no
2349 directory <bookmark_name>, but a bookmark with the name exists.)
2349 directory <bookmark_name>, but a bookmark with the name exists.)
2350
2350
2351 Options:
2351 Options:
2352
2352
2353 -q: quiet. Do not print the working directory after the cd command is
2353 -q: quiet. Do not print the working directory after the cd command is
2354 executed. By default IPython's cd command does print this directory,
2354 executed. By default IPython's cd command does print this directory,
2355 since the default prompts do not display path information.
2355 since the default prompts do not display path information.
2356
2356
2357 Note that !cd doesn't work for this purpose because the shell where
2357 Note that !cd doesn't work for this purpose because the shell where
2358 !command runs is immediately discarded after executing 'command'."""
2358 !command runs is immediately discarded after executing 'command'."""
2359
2359
2360 parameter_s = parameter_s.strip()
2360 parameter_s = parameter_s.strip()
2361 #bkms = self.shell.persist.get("bookmarks",{})
2361 #bkms = self.shell.persist.get("bookmarks",{})
2362
2362
2363 numcd = re.match(r'(-)(\d+)$',parameter_s)
2363 numcd = re.match(r'(-)(\d+)$',parameter_s)
2364 # jump in directory history by number
2364 # jump in directory history by number
2365 if numcd:
2365 if numcd:
2366 nn = int(numcd.group(2))
2366 nn = int(numcd.group(2))
2367 try:
2367 try:
2368 ps = self.shell.user_ns['_dh'][nn]
2368 ps = self.shell.user_ns['_dh'][nn]
2369 except IndexError:
2369 except IndexError:
2370 print 'The requested directory does not exist in history.'
2370 print 'The requested directory does not exist in history.'
2371 return
2371 return
2372 else:
2372 else:
2373 opts = {}
2373 opts = {}
2374 else:
2374 else:
2375 #turn all non-space-escaping backslashes to slashes,
2375 #turn all non-space-escaping backslashes to slashes,
2376 # for c:\windows\directory\names\
2376 # for c:\windows\directory\names\
2377 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2377 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2378 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2378 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2379 # jump to previous
2379 # jump to previous
2380 if ps == '-':
2380 if ps == '-':
2381 try:
2381 try:
2382 ps = self.shell.user_ns['_dh'][-2]
2382 ps = self.shell.user_ns['_dh'][-2]
2383 except IndexError:
2383 except IndexError:
2384 print 'No previous directory to change to.'
2384 print 'No previous directory to change to.'
2385 return
2385 return
2386 # jump to bookmark if needed
2386 # jump to bookmark if needed
2387 else:
2387 else:
2388 if not os.path.isdir(ps) or opts.has_key('b'):
2388 if not os.path.isdir(ps) or opts.has_key('b'):
2389 bkms = self.db.get('bookmarks', {})
2389 bkms = self.db.get('bookmarks', {})
2390
2390
2391 if bkms.has_key(ps):
2391 if bkms.has_key(ps):
2392 target = bkms[ps]
2392 target = bkms[ps]
2393 print '(bookmark:%s) -> %s' % (ps,target)
2393 print '(bookmark:%s) -> %s' % (ps,target)
2394 ps = target
2394 ps = target
2395 else:
2395 else:
2396 if opts.has_key('b'):
2396 if opts.has_key('b'):
2397 error("Bookmark '%s' not found. "
2397 error("Bookmark '%s' not found. "
2398 "Use '%%bookmark -l' to see your bookmarks." % ps)
2398 "Use '%%bookmark -l' to see your bookmarks." % ps)
2399 return
2399 return
2400
2400
2401 # at this point ps should point to the target dir
2401 # at this point ps should point to the target dir
2402 if ps:
2402 if ps:
2403 try:
2403 try:
2404 os.chdir(os.path.expanduser(ps))
2404 os.chdir(os.path.expanduser(ps))
2405 ttitle = ("IPy:" + (
2405 ttitle = ("IPy:" + (
2406 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2406 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2407 platutils.set_term_title(ttitle)
2407 platutils.set_term_title(ttitle)
2408 except OSError:
2408 except OSError:
2409 print sys.exc_info()[1]
2409 print sys.exc_info()[1]
2410 else:
2410 else:
2411 self.shell.user_ns['_dh'].append(os.getcwd())
2411 self.shell.user_ns['_dh'].append(os.getcwd())
2412 else:
2412 else:
2413 os.chdir(self.shell.home_dir)
2413 os.chdir(self.shell.home_dir)
2414 platutils.set_term_title("IPy:~")
2414 platutils.set_term_title("IPy:~")
2415 self.shell.user_ns['_dh'].append(os.getcwd())
2415 self.shell.user_ns['_dh'].append(os.getcwd())
2416 if not 'q' in opts:
2416 if not 'q' in opts:
2417 print self.shell.user_ns['_dh'][-1]
2417 print self.shell.user_ns['_dh'][-1]
2418
2418
2419 def magic_dhist(self, parameter_s=''):
2419 def magic_dhist(self, parameter_s=''):
2420 """Print your history of visited directories.
2420 """Print your history of visited directories.
2421
2421
2422 %dhist -> print full history\\
2422 %dhist -> print full history\\
2423 %dhist n -> print last n entries only\\
2423 %dhist n -> print last n entries only\\
2424 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2424 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2425
2425
2426 This history is automatically maintained by the %cd command, and
2426 This history is automatically maintained by the %cd command, and
2427 always available as the global list variable _dh. You can use %cd -<n>
2427 always available as the global list variable _dh. You can use %cd -<n>
2428 to go to directory number <n>."""
2428 to go to directory number <n>."""
2429
2429
2430 dh = self.shell.user_ns['_dh']
2430 dh = self.shell.user_ns['_dh']
2431 if parameter_s:
2431 if parameter_s:
2432 try:
2432 try:
2433 args = map(int,parameter_s.split())
2433 args = map(int,parameter_s.split())
2434 except:
2434 except:
2435 self.arg_err(Magic.magic_dhist)
2435 self.arg_err(Magic.magic_dhist)
2436 return
2436 return
2437 if len(args) == 1:
2437 if len(args) == 1:
2438 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2438 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2439 elif len(args) == 2:
2439 elif len(args) == 2:
2440 ini,fin = args
2440 ini,fin = args
2441 else:
2441 else:
2442 self.arg_err(Magic.magic_dhist)
2442 self.arg_err(Magic.magic_dhist)
2443 return
2443 return
2444 else:
2444 else:
2445 ini,fin = 0,len(dh)
2445 ini,fin = 0,len(dh)
2446 nlprint(dh,
2446 nlprint(dh,
2447 header = 'Directory history (kept in _dh)',
2447 header = 'Directory history (kept in _dh)',
2448 start=ini,stop=fin)
2448 start=ini,stop=fin)
2449
2449
2450 def magic_env(self, parameter_s=''):
2450 def magic_env(self, parameter_s=''):
2451 """List environment variables."""
2451 """List environment variables."""
2452
2452
2453 return os.environ.data
2453 return os.environ.data
2454
2454
2455 def magic_pushd(self, parameter_s=''):
2455 def magic_pushd(self, parameter_s=''):
2456 """Place the current dir on stack and change directory.
2456 """Place the current dir on stack and change directory.
2457
2457
2458 Usage:\\
2458 Usage:\\
2459 %pushd ['dirname']
2459 %pushd ['dirname']
2460
2460
2461 %pushd with no arguments does a %pushd to your home directory.
2461 %pushd with no arguments does a %pushd to your home directory.
2462 """
2462 """
2463 if parameter_s == '': parameter_s = '~'
2463 if parameter_s == '': parameter_s = '~'
2464 dir_s = self.shell.dir_stack
2464 dir_s = self.shell.dir_stack
2465 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2465 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2466 os.path.expanduser(self.shell.dir_stack[0]):
2466 os.path.expanduser(self.shell.dir_stack[0]):
2467 try:
2467 try:
2468 self.magic_cd(parameter_s)
2468 self.magic_cd(parameter_s)
2469 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2469 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2470 self.magic_dirs()
2470 self.magic_dirs()
2471 except:
2471 except:
2472 print 'Invalid directory'
2472 print 'Invalid directory'
2473 else:
2473 else:
2474 print 'You are already there!'
2474 print 'You are already there!'
2475
2475
2476 def magic_popd(self, parameter_s=''):
2476 def magic_popd(self, parameter_s=''):
2477 """Change to directory popped off the top of the stack.
2477 """Change to directory popped off the top of the stack.
2478 """
2478 """
2479 if len (self.shell.dir_stack) > 1:
2479 if len (self.shell.dir_stack) > 1:
2480 self.shell.dir_stack.pop(0)
2480 self.shell.dir_stack.pop(0)
2481 self.magic_cd(self.shell.dir_stack[0])
2481 self.magic_cd(self.shell.dir_stack[0])
2482 print self.shell.dir_stack[0]
2482 print self.shell.dir_stack[0]
2483 else:
2483 else:
2484 print "You can't remove the starting directory from the stack:",\
2484 print "You can't remove the starting directory from the stack:",\
2485 self.shell.dir_stack
2485 self.shell.dir_stack
2486
2486
2487 def magic_dirs(self, parameter_s=''):
2487 def magic_dirs(self, parameter_s=''):
2488 """Return the current directory stack."""
2488 """Return the current directory stack."""
2489
2489
2490 return self.shell.dir_stack[:]
2490 return self.shell.dir_stack[:]
2491
2491
2492 def magic_sc(self, parameter_s=''):
2492 def magic_sc(self, parameter_s=''):
2493 """Shell capture - execute a shell command and capture its output.
2493 """Shell capture - execute a shell command and capture its output.
2494
2494
2495 DEPRECATED. Suboptimal, retained for backwards compatibility.
2495 DEPRECATED. Suboptimal, retained for backwards compatibility.
2496
2496
2497 You should use the form 'var = !command' instead. Example:
2497 You should use the form 'var = !command' instead. Example:
2498
2498
2499 "%sc -l myfiles = ls ~" should now be written as
2499 "%sc -l myfiles = ls ~" should now be written as
2500
2500
2501 "myfiles = !ls ~"
2501 "myfiles = !ls ~"
2502
2502
2503 myfiles.s, myfiles.l and myfiles.n still apply as documented
2503 myfiles.s, myfiles.l and myfiles.n still apply as documented
2504 below.
2504 below.
2505
2505
2506 --
2506 --
2507 %sc [options] varname=command
2507 %sc [options] varname=command
2508
2508
2509 IPython will run the given command using commands.getoutput(), and
2509 IPython will run the given command using commands.getoutput(), and
2510 will then update the user's interactive namespace with a variable
2510 will then update the user's interactive namespace with a variable
2511 called varname, containing the value of the call. Your command can
2511 called varname, containing the value of the call. Your command can
2512 contain shell wildcards, pipes, etc.
2512 contain shell wildcards, pipes, etc.
2513
2513
2514 The '=' sign in the syntax is mandatory, and the variable name you
2514 The '=' sign in the syntax is mandatory, and the variable name you
2515 supply must follow Python's standard conventions for valid names.
2515 supply must follow Python's standard conventions for valid names.
2516
2516
2517 (A special format without variable name exists for internal use)
2517 (A special format without variable name exists for internal use)
2518
2518
2519 Options:
2519 Options:
2520
2520
2521 -l: list output. Split the output on newlines into a list before
2521 -l: list output. Split the output on newlines into a list before
2522 assigning it to the given variable. By default the output is stored
2522 assigning it to the given variable. By default the output is stored
2523 as a single string.
2523 as a single string.
2524
2524
2525 -v: verbose. Print the contents of the variable.
2525 -v: verbose. Print the contents of the variable.
2526
2526
2527 In most cases you should not need to split as a list, because the
2527 In most cases you should not need to split as a list, because the
2528 returned value is a special type of string which can automatically
2528 returned value is a special type of string which can automatically
2529 provide its contents either as a list (split on newlines) or as a
2529 provide its contents either as a list (split on newlines) or as a
2530 space-separated string. These are convenient, respectively, either
2530 space-separated string. These are convenient, respectively, either
2531 for sequential processing or to be passed to a shell command.
2531 for sequential processing or to be passed to a shell command.
2532
2532
2533 For example:
2533 For example:
2534
2534
2535 # Capture into variable a
2535 # Capture into variable a
2536 In [9]: sc a=ls *py
2536 In [9]: sc a=ls *py
2537
2537
2538 # a is a string with embedded newlines
2538 # a is a string with embedded newlines
2539 In [10]: a
2539 In [10]: a
2540 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2540 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2541
2541
2542 # which can be seen as a list:
2542 # which can be seen as a list:
2543 In [11]: a.l
2543 In [11]: a.l
2544 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2544 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2545
2545
2546 # or as a whitespace-separated string:
2546 # or as a whitespace-separated string:
2547 In [12]: a.s
2547 In [12]: a.s
2548 Out[12]: 'setup.py win32_manual_post_install.py'
2548 Out[12]: 'setup.py win32_manual_post_install.py'
2549
2549
2550 # a.s is useful to pass as a single command line:
2550 # a.s is useful to pass as a single command line:
2551 In [13]: !wc -l $a.s
2551 In [13]: !wc -l $a.s
2552 146 setup.py
2552 146 setup.py
2553 130 win32_manual_post_install.py
2553 130 win32_manual_post_install.py
2554 276 total
2554 276 total
2555
2555
2556 # while the list form is useful to loop over:
2556 # while the list form is useful to loop over:
2557 In [14]: for f in a.l:
2557 In [14]: for f in a.l:
2558 ....: !wc -l $f
2558 ....: !wc -l $f
2559 ....:
2559 ....:
2560 146 setup.py
2560 146 setup.py
2561 130 win32_manual_post_install.py
2561 130 win32_manual_post_install.py
2562
2562
2563 Similiarly, the lists returned by the -l option are also special, in
2563 Similiarly, the lists returned by the -l option are also special, in
2564 the sense that you can equally invoke the .s attribute on them to
2564 the sense that you can equally invoke the .s attribute on them to
2565 automatically get a whitespace-separated string from their contents:
2565 automatically get a whitespace-separated string from their contents:
2566
2566
2567 In [1]: sc -l b=ls *py
2567 In [1]: sc -l b=ls *py
2568
2568
2569 In [2]: b
2569 In [2]: b
2570 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2570 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2571
2571
2572 In [3]: b.s
2572 In [3]: b.s
2573 Out[3]: 'setup.py win32_manual_post_install.py'
2573 Out[3]: 'setup.py win32_manual_post_install.py'
2574
2574
2575 In summary, both the lists and strings used for ouptut capture have
2575 In summary, both the lists and strings used for ouptut capture have
2576 the following special attributes:
2576 the following special attributes:
2577
2577
2578 .l (or .list) : value as list.
2578 .l (or .list) : value as list.
2579 .n (or .nlstr): value as newline-separated string.
2579 .n (or .nlstr): value as newline-separated string.
2580 .s (or .spstr): value as space-separated string.
2580 .s (or .spstr): value as space-separated string.
2581 """
2581 """
2582
2582
2583 opts,args = self.parse_options(parameter_s,'lv')
2583 opts,args = self.parse_options(parameter_s,'lv')
2584 # Try to get a variable name and command to run
2584 # Try to get a variable name and command to run
2585 try:
2585 try:
2586 # the variable name must be obtained from the parse_options
2586 # the variable name must be obtained from the parse_options
2587 # output, which uses shlex.split to strip options out.
2587 # output, which uses shlex.split to strip options out.
2588 var,_ = args.split('=',1)
2588 var,_ = args.split('=',1)
2589 var = var.strip()
2589 var = var.strip()
2590 # But the the command has to be extracted from the original input
2590 # But the the command has to be extracted from the original input
2591 # parameter_s, not on what parse_options returns, to avoid the
2591 # parameter_s, not on what parse_options returns, to avoid the
2592 # quote stripping which shlex.split performs on it.
2592 # quote stripping which shlex.split performs on it.
2593 _,cmd = parameter_s.split('=',1)
2593 _,cmd = parameter_s.split('=',1)
2594 except ValueError:
2594 except ValueError:
2595 var,cmd = '',''
2595 var,cmd = '',''
2596 # If all looks ok, proceed
2596 # If all looks ok, proceed
2597 out,err = self.shell.getoutputerror(cmd)
2597 out,err = self.shell.getoutputerror(cmd)
2598 if err:
2598 if err:
2599 print >> Term.cerr,err
2599 print >> Term.cerr,err
2600 if opts.has_key('l'):
2600 if opts.has_key('l'):
2601 out = SList(out.split('\n'))
2601 out = SList(out.split('\n'))
2602 else:
2602 else:
2603 out = LSString(out)
2603 out = LSString(out)
2604 if opts.has_key('v'):
2604 if opts.has_key('v'):
2605 print '%s ==\n%s' % (var,pformat(out))
2605 print '%s ==\n%s' % (var,pformat(out))
2606 if var:
2606 if var:
2607 self.shell.user_ns.update({var:out})
2607 self.shell.user_ns.update({var:out})
2608 else:
2608 else:
2609 return out
2609 return out
2610
2610
2611 def magic_sx(self, parameter_s=''):
2611 def magic_sx(self, parameter_s=''):
2612 """Shell execute - run a shell command and capture its output.
2612 """Shell execute - run a shell command and capture its output.
2613
2613
2614 %sx command
2614 %sx command
2615
2615
2616 IPython will run the given command using commands.getoutput(), and
2616 IPython will run the given command using commands.getoutput(), and
2617 return the result formatted as a list (split on '\\n'). Since the
2617 return the result formatted as a list (split on '\\n'). Since the
2618 output is _returned_, it will be stored in ipython's regular output
2618 output is _returned_, it will be stored in ipython's regular output
2619 cache Out[N] and in the '_N' automatic variables.
2619 cache Out[N] and in the '_N' automatic variables.
2620
2620
2621 Notes:
2621 Notes:
2622
2622
2623 1) If an input line begins with '!!', then %sx is automatically
2623 1) If an input line begins with '!!', then %sx is automatically
2624 invoked. That is, while:
2624 invoked. That is, while:
2625 !ls
2625 !ls
2626 causes ipython to simply issue system('ls'), typing
2626 causes ipython to simply issue system('ls'), typing
2627 !!ls
2627 !!ls
2628 is a shorthand equivalent to:
2628 is a shorthand equivalent to:
2629 %sx ls
2629 %sx ls
2630
2630
2631 2) %sx differs from %sc in that %sx automatically splits into a list,
2631 2) %sx differs from %sc in that %sx automatically splits into a list,
2632 like '%sc -l'. The reason for this is to make it as easy as possible
2632 like '%sc -l'. The reason for this is to make it as easy as possible
2633 to process line-oriented shell output via further python commands.
2633 to process line-oriented shell output via further python commands.
2634 %sc is meant to provide much finer control, but requires more
2634 %sc is meant to provide much finer control, but requires more
2635 typing.
2635 typing.
2636
2636
2637 3) Just like %sc -l, this is a list with special attributes:
2637 3) Just like %sc -l, this is a list with special attributes:
2638
2638
2639 .l (or .list) : value as list.
2639 .l (or .list) : value as list.
2640 .n (or .nlstr): value as newline-separated string.
2640 .n (or .nlstr): value as newline-separated string.
2641 .s (or .spstr): value as whitespace-separated string.
2641 .s (or .spstr): value as whitespace-separated string.
2642
2642
2643 This is very useful when trying to use such lists as arguments to
2643 This is very useful when trying to use such lists as arguments to
2644 system commands."""
2644 system commands."""
2645
2645
2646 if parameter_s:
2646 if parameter_s:
2647 out,err = self.shell.getoutputerror(parameter_s)
2647 out,err = self.shell.getoutputerror(parameter_s)
2648 if err:
2648 if err:
2649 print >> Term.cerr,err
2649 print >> Term.cerr,err
2650 return SList(out.split('\n'))
2650 return SList(out.split('\n'))
2651
2651
2652 def magic_bg(self, parameter_s=''):
2652 def magic_bg(self, parameter_s=''):
2653 """Run a job in the background, in a separate thread.
2653 """Run a job in the background, in a separate thread.
2654
2654
2655 For example,
2655 For example,
2656
2656
2657 %bg myfunc(x,y,z=1)
2657 %bg myfunc(x,y,z=1)
2658
2658
2659 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2659 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2660 execution starts, a message will be printed indicating the job
2660 execution starts, a message will be printed indicating the job
2661 number. If your job number is 5, you can use
2661 number. If your job number is 5, you can use
2662
2662
2663 myvar = jobs.result(5) or myvar = jobs[5].result
2663 myvar = jobs.result(5) or myvar = jobs[5].result
2664
2664
2665 to assign this result to variable 'myvar'.
2665 to assign this result to variable 'myvar'.
2666
2666
2667 IPython has a job manager, accessible via the 'jobs' object. You can
2667 IPython has a job manager, accessible via the 'jobs' object. You can
2668 type jobs? to get more information about it, and use jobs.<TAB> to see
2668 type jobs? to get more information about it, and use jobs.<TAB> to see
2669 its attributes. All attributes not starting with an underscore are
2669 its attributes. All attributes not starting with an underscore are
2670 meant for public use.
2670 meant for public use.
2671
2671
2672 In particular, look at the jobs.new() method, which is used to create
2672 In particular, look at the jobs.new() method, which is used to create
2673 new jobs. This magic %bg function is just a convenience wrapper
2673 new jobs. This magic %bg function is just a convenience wrapper
2674 around jobs.new(), for expression-based jobs. If you want to create a
2674 around jobs.new(), for expression-based jobs. If you want to create a
2675 new job with an explicit function object and arguments, you must call
2675 new job with an explicit function object and arguments, you must call
2676 jobs.new() directly.
2676 jobs.new() directly.
2677
2677
2678 The jobs.new docstring also describes in detail several important
2678 The jobs.new docstring also describes in detail several important
2679 caveats associated with a thread-based model for background job
2679 caveats associated with a thread-based model for background job
2680 execution. Type jobs.new? for details.
2680 execution. Type jobs.new? for details.
2681
2681
2682 You can check the status of all jobs with jobs.status().
2682 You can check the status of all jobs with jobs.status().
2683
2683
2684 The jobs variable is set by IPython into the Python builtin namespace.
2684 The jobs variable is set by IPython into the Python builtin namespace.
2685 If you ever declare a variable named 'jobs', you will shadow this
2685 If you ever declare a variable named 'jobs', you will shadow this
2686 name. You can either delete your global jobs variable to regain
2686 name. You can either delete your global jobs variable to regain
2687 access to the job manager, or make a new name and assign it manually
2687 access to the job manager, or make a new name and assign it manually
2688 to the manager (stored in IPython's namespace). For example, to
2688 to the manager (stored in IPython's namespace). For example, to
2689 assign the job manager to the Jobs name, use:
2689 assign the job manager to the Jobs name, use:
2690
2690
2691 Jobs = __builtins__.jobs"""
2691 Jobs = __builtins__.jobs"""
2692
2692
2693 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2693 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2694
2694
2695
2695
2696 def magic_bookmark(self, parameter_s=''):
2696 def magic_bookmark(self, parameter_s=''):
2697 """Manage IPython's bookmark system.
2697 """Manage IPython's bookmark system.
2698
2698
2699 %bookmark <name> - set bookmark to current dir
2699 %bookmark <name> - set bookmark to current dir
2700 %bookmark <name> <dir> - set bookmark to <dir>
2700 %bookmark <name> <dir> - set bookmark to <dir>
2701 %bookmark -l - list all bookmarks
2701 %bookmark -l - list all bookmarks
2702 %bookmark -d <name> - remove bookmark
2702 %bookmark -d <name> - remove bookmark
2703 %bookmark -r - remove all bookmarks
2703 %bookmark -r - remove all bookmarks
2704
2704
2705 You can later on access a bookmarked folder with:
2705 You can later on access a bookmarked folder with:
2706 %cd -b <name>
2706 %cd -b <name>
2707 or simply '%cd <name>' if there is no directory called <name> AND
2707 or simply '%cd <name>' if there is no directory called <name> AND
2708 there is such a bookmark defined.
2708 there is such a bookmark defined.
2709
2709
2710 Your bookmarks persist through IPython sessions, but they are
2710 Your bookmarks persist through IPython sessions, but they are
2711 associated with each profile."""
2711 associated with each profile."""
2712
2712
2713 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2713 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2714 if len(args) > 2:
2714 if len(args) > 2:
2715 error('You can only give at most two arguments')
2715 error('You can only give at most two arguments')
2716 return
2716 return
2717
2717
2718 bkms = self.db.get('bookmarks',{})
2718 bkms = self.db.get('bookmarks',{})
2719
2719
2720 if opts.has_key('d'):
2720 if opts.has_key('d'):
2721 try:
2721 try:
2722 todel = args[0]
2722 todel = args[0]
2723 except IndexError:
2723 except IndexError:
2724 error('You must provide a bookmark to delete')
2724 error('You must provide a bookmark to delete')
2725 else:
2725 else:
2726 try:
2726 try:
2727 del bkms[todel]
2727 del bkms[todel]
2728 except:
2728 except:
2729 error("Can't delete bookmark '%s'" % todel)
2729 error("Can't delete bookmark '%s'" % todel)
2730 elif opts.has_key('r'):
2730 elif opts.has_key('r'):
2731 bkms = {}
2731 bkms = {}
2732 elif opts.has_key('l'):
2732 elif opts.has_key('l'):
2733 bks = bkms.keys()
2733 bks = bkms.keys()
2734 bks.sort()
2734 bks.sort()
2735 if bks:
2735 if bks:
2736 size = max(map(len,bks))
2736 size = max(map(len,bks))
2737 else:
2737 else:
2738 size = 0
2738 size = 0
2739 fmt = '%-'+str(size)+'s -> %s'
2739 fmt = '%-'+str(size)+'s -> %s'
2740 print 'Current bookmarks:'
2740 print 'Current bookmarks:'
2741 for bk in bks:
2741 for bk in bks:
2742 print fmt % (bk,bkms[bk])
2742 print fmt % (bk,bkms[bk])
2743 else:
2743 else:
2744 if not args:
2744 if not args:
2745 error("You must specify the bookmark name")
2745 error("You must specify the bookmark name")
2746 elif len(args)==1:
2746 elif len(args)==1:
2747 bkms[args[0]] = os.getcwd()
2747 bkms[args[0]] = os.getcwd()
2748 elif len(args)==2:
2748 elif len(args)==2:
2749 bkms[args[0]] = args[1]
2749 bkms[args[0]] = args[1]
2750 self.db['bookmarks'] = bkms
2750 self.db['bookmarks'] = bkms
2751
2751
2752 def magic_pycat(self, parameter_s=''):
2752 def magic_pycat(self, parameter_s=''):
2753 """Show a syntax-highlighted file through a pager.
2753 """Show a syntax-highlighted file through a pager.
2754
2754
2755 This magic is similar to the cat utility, but it will assume the file
2755 This magic is similar to the cat utility, but it will assume the file
2756 to be Python source and will show it with syntax highlighting. """
2756 to be Python source and will show it with syntax highlighting. """
2757
2757
2758 try:
2758 try:
2759 filename = get_py_filename(parameter_s)
2759 filename = get_py_filename(parameter_s)
2760 cont = file_read(filename)
2760 cont = file_read(filename)
2761 except IOError:
2761 except IOError:
2762 try:
2762 try:
2763 cont = eval(parameter_s,self.user_ns)
2763 cont = eval(parameter_s,self.user_ns)
2764 except NameError:
2764 except NameError:
2765 cont = None
2765 cont = None
2766 if cont is None:
2766 if cont is None:
2767 print "Error: no such file or variable"
2767 print "Error: no such file or variable"
2768 return
2768 return
2769
2769
2770 page(self.shell.pycolorize(cont),
2770 page(self.shell.pycolorize(cont),
2771 screen_lines=self.shell.rc.screen_length)
2771 screen_lines=self.shell.rc.screen_length)
2772
2772
2773 def magic_cpaste(self, parameter_s=''):
2773 def magic_cpaste(self, parameter_s=''):
2774 """Allows you to paste & execute a pre-formatted code block from clipboard
2774 """Allows you to paste & execute a pre-formatted code block from clipboard
2775
2775
2776 You must terminate the block with '--' (two minus-signs) alone on the
2776 You must terminate the block with '--' (two minus-signs) alone on the
2777 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2777 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2778 is the new sentinel for this operation)
2778 is the new sentinel for this operation)
2779
2779
2780 The block is dedented prior to execution to enable execution of
2780 The block is dedented prior to execution to enable execution of
2781 method definitions. The executed block is also assigned to variable
2781 method definitions. The executed block is also assigned to variable
2782 named 'pasted_block' for later editing with '%edit pasted_block'.
2782 named 'pasted_block' for later editing with '%edit pasted_block'.
2783
2783
2784 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2784 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2785 This assigns the pasted block to variable 'foo' as string, without
2785 This assigns the pasted block to variable 'foo' as string, without
2786 dedenting or executing it.
2786 dedenting or executing it.
2787
2787
2788 Do not be alarmed by garbled output on Windows (it's a readline bug).
2788 Do not be alarmed by garbled output on Windows (it's a readline bug).
2789 Just press enter and type -- (and press enter again) and the block
2789 Just press enter and type -- (and press enter again) and the block
2790 will be what was just pasted.
2790 will be what was just pasted.
2791
2791
2792 IPython statements (magics, shell escapes) are not supported (yet).
2792 IPython statements (magics, shell escapes) are not supported (yet).
2793 """
2793 """
2794 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2794 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2795 par = args.strip()
2795 par = args.strip()
2796 sentinel = opts.get('s','--')
2796 sentinel = opts.get('s','--')
2797
2797
2798 from IPython import iplib
2798 from IPython import iplib
2799 lines = []
2799 lines = []
2800 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2800 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2801 while 1:
2801 while 1:
2802 l = iplib.raw_input_original(':')
2802 l = iplib.raw_input_original(':')
2803 if l ==sentinel:
2803 if l ==sentinel:
2804 break
2804 break
2805 lines.append(l)
2805 lines.append(l)
2806 block = "\n".join(lines) + '\n'
2806 block = "\n".join(lines) + '\n'
2807 #print "block:\n",block
2807 #print "block:\n",block
2808 if not par:
2808 if not par:
2809 b = textwrap.dedent(block)
2809 b = textwrap.dedent(block)
2810 exec b in self.user_ns
2810 exec b in self.user_ns
2811 self.user_ns['pasted_block'] = b
2811 self.user_ns['pasted_block'] = b
2812 else:
2812 else:
2813 self.user_ns[par] = block
2813 self.user_ns[par] = block
2814 print "Block assigned to '%s'" % par
2814 print "Block assigned to '%s'" % par
2815
2815
2816 def magic_quickref(self,arg):
2816 def magic_quickref(self,arg):
2817 """ Show a quick reference sheet """
2817 """ Show a quick reference sheet """
2818 import IPython.usage
2818 import IPython.usage
2819 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2819 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2820
2820
2821 page(qr)
2821 page(qr)
2822
2822
2823 def magic_upgrade(self,arg):
2823 def magic_upgrade(self,arg):
2824 """ Upgrade your IPython installation
2824 """ Upgrade your IPython installation
2825
2825
2826 This will copy the config files that don't yet exist in your
2826 This will copy the config files that don't yet exist in your
2827 ipython dir from the system config dir. Use this after upgrading
2827 ipython dir from the system config dir. Use this after upgrading
2828 IPython if you don't wish to delete your .ipython dir.
2828 IPython if you don't wish to delete your .ipython dir.
2829
2829
2830 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2830 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2831 new users)
2831 new users)
2832
2832
2833 """
2833 """
2834 ip = self.getapi()
2834 ip = self.getapi()
2835 ipinstallation = path(IPython.__file__).dirname()
2835 ipinstallation = path(IPython.__file__).dirname()
2836 upgrade_script = ipinstallation / 'upgrade_dir.py'
2836 upgrade_script = ipinstallation / 'upgrade_dir.py'
2837 src_config = ipinstallation / 'UserConfig'
2837 src_config = ipinstallation / 'UserConfig'
2838 userdir = path(ip.options().ipythondir)
2838 userdir = path(ip.options().ipythondir)
2839 cmd = upgrade_script + " " + src_config + " " + userdir
2839 cmd = upgrade_script + " " + src_config + " " + userdir
2840 print ">",cmd
2840 print ">",cmd
2841 shell(cmd)
2841 shell(cmd)
2842 if arg == '-nolegacy':
2842 if arg == '-nolegacy':
2843 legacy = userdir.files('ipythonrc*')
2843 legacy = userdir.files('ipythonrc*')
2844 print "Nuking legacy files:",legacy
2844 print "Nuking legacy files:",legacy
2845
2845
2846 [p.remove() for p in legacy]
2846 [p.remove() for p in legacy]
2847 suffix = (sys.platform == 'win32' and '.ini' or '')
2847 suffix = (sys.platform == 'win32' and '.ini' or '')
2848 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2848 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2849
2849
2850
2850
2851 # end Magic
2851 # end Magic
@@ -1,5249 +1,5254 b''
1 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
4 line ranges works again.
5
1 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
6 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * IPython/iplib.py (showtraceback): add back sys.last_traceback
8 * IPython/iplib.py (showtraceback): add back sys.last_traceback
4 and friends, after a discussion with Zach Pincus on ipython-user.
9 and friends, after a discussion with Zach Pincus on ipython-user.
5 I'm not 100% sure, but after thinking aobut it quite a bit, it may
10 I'm not 100% sure, but after thinking aobut it quite a bit, it may
6 be OK. Testing with the multithreaded shells didn't reveal any
11 be OK. Testing with the multithreaded shells didn't reveal any
7 problems, but let's keep an eye out.
12 problems, but let's keep an eye out.
8
13
9 In the process, I fixed a few things which were calling
14 In the process, I fixed a few things which were calling
10 self.InteractiveTB() directly (like safe_execfile), which is a
15 self.InteractiveTB() directly (like safe_execfile), which is a
11 mistake: ALL exception reporting should be done by calling
16 mistake: ALL exception reporting should be done by calling
12 self.showtraceback(), which handles state and tab-completion and
17 self.showtraceback(), which handles state and tab-completion and
13 more.
18 more.
14
19
15 2006-03-01 Ville Vainio <vivainio@gmail.com>
20 2006-03-01 Ville Vainio <vivainio@gmail.com>
16
21
17 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
22 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
18 To use, do "from ipipe import *".
23 To use, do "from ipipe import *".
19
24
20 2006-02-24 Ville Vainio <vivainio@gmail.com>
25 2006-02-24 Ville Vainio <vivainio@gmail.com>
21
26
22 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
27 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
23 "cleanly" and safely than the older upgrade mechanism.
28 "cleanly" and safely than the older upgrade mechanism.
24
29
25 2006-02-21 Ville Vainio <vivainio@gmail.com>
30 2006-02-21 Ville Vainio <vivainio@gmail.com>
26
31
27 * Magic.py: %save works again.
32 * Magic.py: %save works again.
28
33
29 2006-02-15 Ville Vainio <vivainio@gmail.com>
34 2006-02-15 Ville Vainio <vivainio@gmail.com>
30
35
31 * Magic.py: %Pprint works again
36 * Magic.py: %Pprint works again
32
37
33 * Extensions/ipy_sane_defaults.py: Provide everything provided
38 * Extensions/ipy_sane_defaults.py: Provide everything provided
34 in default ipythonrc, to make it possible to have a completely empty
39 in default ipythonrc, to make it possible to have a completely empty
35 ipythonrc (and thus completely rc-file free configuration)
40 ipythonrc (and thus completely rc-file free configuration)
36
41
37
42
38 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
43 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
39
44
40 * IPython/hooks.py (editor): quote the call to the editor command,
45 * IPython/hooks.py (editor): quote the call to the editor command,
41 to allow commands with spaces in them. Problem noted by watching
46 to allow commands with spaces in them. Problem noted by watching
42 Ian Oswald's video about textpad under win32 at
47 Ian Oswald's video about textpad under win32 at
43 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
48 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
44
49
45 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
50 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
46 describing magics (we haven't used @ for a loong time).
51 describing magics (we haven't used @ for a loong time).
47
52
48 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
53 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
49 contributed by marienz to close
54 contributed by marienz to close
50 http://www.scipy.net/roundup/ipython/issue53.
55 http://www.scipy.net/roundup/ipython/issue53.
51
56
52 2006-02-10 Ville Vainio <vivainio@gmail.com>
57 2006-02-10 Ville Vainio <vivainio@gmail.com>
53
58
54 * genutils.py: getoutput now works in win32 too
59 * genutils.py: getoutput now works in win32 too
55
60
56 * completer.py: alias and magic completion only invoked
61 * completer.py: alias and magic completion only invoked
57 at the first "item" in the line, to avoid "cd %store"
62 at the first "item" in the line, to avoid "cd %store"
58 nonsense.
63 nonsense.
59
64
60 2006-02-09 Ville Vainio <vivainio@gmail.com>
65 2006-02-09 Ville Vainio <vivainio@gmail.com>
61
66
62 * test/*: Added a unit testing framework (finally).
67 * test/*: Added a unit testing framework (finally).
63 '%run runtests.py' to run test_*.
68 '%run runtests.py' to run test_*.
64
69
65 * ipapi.py: Exposed runlines and set_custom_exc
70 * ipapi.py: Exposed runlines and set_custom_exc
66
71
67 2006-02-07 Ville Vainio <vivainio@gmail.com>
72 2006-02-07 Ville Vainio <vivainio@gmail.com>
68
73
69 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
74 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
70 instead use "f(1 2)" as before.
75 instead use "f(1 2)" as before.
71
76
72 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
77 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
73
78
74 * IPython/demo.py (IPythonDemo): Add new classes to the demo
79 * IPython/demo.py (IPythonDemo): Add new classes to the demo
75 facilities, for demos processed by the IPython input filter
80 facilities, for demos processed by the IPython input filter
76 (IPythonDemo), and for running a script one-line-at-a-time as a
81 (IPythonDemo), and for running a script one-line-at-a-time as a
77 demo, both for pure Python (LineDemo) and for IPython-processed
82 demo, both for pure Python (LineDemo) and for IPython-processed
78 input (IPythonLineDemo). After a request by Dave Kohel, from the
83 input (IPythonLineDemo). After a request by Dave Kohel, from the
79 SAGE team.
84 SAGE team.
80 (Demo.edit): added and edit() method to the demo objects, to edit
85 (Demo.edit): added and edit() method to the demo objects, to edit
81 the in-memory copy of the last executed block.
86 the in-memory copy of the last executed block.
82
87
83 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
88 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
84 processing to %edit, %macro and %save. These commands can now be
89 processing to %edit, %macro and %save. These commands can now be
85 invoked on the unprocessed input as it was typed by the user
90 invoked on the unprocessed input as it was typed by the user
86 (without any prefilters applied). After requests by the SAGE team
91 (without any prefilters applied). After requests by the SAGE team
87 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
92 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
88
93
89 2006-02-01 Ville Vainio <vivainio@gmail.com>
94 2006-02-01 Ville Vainio <vivainio@gmail.com>
90
95
91 * setup.py, eggsetup.py: easy_install ipython==dev works
96 * setup.py, eggsetup.py: easy_install ipython==dev works
92 correctly now (on Linux)
97 correctly now (on Linux)
93
98
94 * ipy_user_conf,ipmaker: user config changes, removed spurious
99 * ipy_user_conf,ipmaker: user config changes, removed spurious
95 warnings
100 warnings
96
101
97 * iplib: if rc.banner is string, use it as is.
102 * iplib: if rc.banner is string, use it as is.
98
103
99 * Magic: %pycat accepts a string argument and pages it's contents.
104 * Magic: %pycat accepts a string argument and pages it's contents.
100
105
101
106
102 2006-01-30 Ville Vainio <vivainio@gmail.com>
107 2006-01-30 Ville Vainio <vivainio@gmail.com>
103
108
104 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
109 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
105 Now %store and bookmarks work through PickleShare, meaning that
110 Now %store and bookmarks work through PickleShare, meaning that
106 concurrent access is possible and all ipython sessions see the
111 concurrent access is possible and all ipython sessions see the
107 same database situation all the time, instead of snapshot of
112 same database situation all the time, instead of snapshot of
108 the situation when the session was started. Hence, %bookmark
113 the situation when the session was started. Hence, %bookmark
109 results are immediately accessible from othes sessions. The database
114 results are immediately accessible from othes sessions. The database
110 is also available for use by user extensions. See:
115 is also available for use by user extensions. See:
111 http://www.python.org/pypi/pickleshare
116 http://www.python.org/pypi/pickleshare
112
117
113 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
118 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
114
119
115 * aliases can now be %store'd
120 * aliases can now be %store'd
116
121
117 * path.py move to Extensions so that pickleshare does not need
122 * path.py move to Extensions so that pickleshare does not need
118 IPython-specific import. Extensions added to pythonpath right
123 IPython-specific import. Extensions added to pythonpath right
119 at __init__.
124 at __init__.
120
125
121 * iplib.py: ipalias deprecated/redundant; aliases are converted and
126 * iplib.py: ipalias deprecated/redundant; aliases are converted and
122 called with _ip.system and the pre-transformed command string.
127 called with _ip.system and the pre-transformed command string.
123
128
124 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
129 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
125
130
126 * IPython/iplib.py (interact): Fix that we were not catching
131 * IPython/iplib.py (interact): Fix that we were not catching
127 KeyboardInterrupt exceptions properly. I'm not quite sure why the
132 KeyboardInterrupt exceptions properly. I'm not quite sure why the
128 logic here had to change, but it's fixed now.
133 logic here had to change, but it's fixed now.
129
134
130 2006-01-29 Ville Vainio <vivainio@gmail.com>
135 2006-01-29 Ville Vainio <vivainio@gmail.com>
131
136
132 * iplib.py: Try to import pyreadline on Windows.
137 * iplib.py: Try to import pyreadline on Windows.
133
138
134 2006-01-27 Ville Vainio <vivainio@gmail.com>
139 2006-01-27 Ville Vainio <vivainio@gmail.com>
135
140
136 * iplib.py: Expose ipapi as _ip in builtin namespace.
141 * iplib.py: Expose ipapi as _ip in builtin namespace.
137 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
142 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
138 and ip_set_hook (-> _ip.set_hook) redundant. % and !
143 and ip_set_hook (-> _ip.set_hook) redundant. % and !
139 syntax now produce _ip.* variant of the commands.
144 syntax now produce _ip.* variant of the commands.
140
145
141 * "_ip.options().autoedit_syntax = 2" automatically throws
146 * "_ip.options().autoedit_syntax = 2" automatically throws
142 user to editor for syntax error correction without prompting.
147 user to editor for syntax error correction without prompting.
143
148
144 2006-01-27 Ville Vainio <vivainio@gmail.com>
149 2006-01-27 Ville Vainio <vivainio@gmail.com>
145
150
146 * ipmaker.py: Give "realistic" sys.argv for scripts (without
151 * ipmaker.py: Give "realistic" sys.argv for scripts (without
147 'ipython' at argv[0]) executed through command line.
152 'ipython' at argv[0]) executed through command line.
148 NOTE: this DEPRECATES calling ipython with multiple scripts
153 NOTE: this DEPRECATES calling ipython with multiple scripts
149 ("ipython a.py b.py c.py")
154 ("ipython a.py b.py c.py")
150
155
151 * iplib.py, hooks.py: Added configurable input prefilter,
156 * iplib.py, hooks.py: Added configurable input prefilter,
152 named 'input_prefilter'. See ext_rescapture.py for example
157 named 'input_prefilter'. See ext_rescapture.py for example
153 usage.
158 usage.
154
159
155 * ext_rescapture.py, Magic.py: Better system command output capture
160 * ext_rescapture.py, Magic.py: Better system command output capture
156 through 'var = !ls' (deprecates user-visible %sc). Same notation
161 through 'var = !ls' (deprecates user-visible %sc). Same notation
157 applies for magics, 'var = %alias' assigns alias list to var.
162 applies for magics, 'var = %alias' assigns alias list to var.
158
163
159 * ipapi.py: added meta() for accessing extension-usable data store.
164 * ipapi.py: added meta() for accessing extension-usable data store.
160
165
161 * iplib.py: added InteractiveShell.getapi(). New magics should be
166 * iplib.py: added InteractiveShell.getapi(). New magics should be
162 written doing self.getapi() instead of using the shell directly.
167 written doing self.getapi() instead of using the shell directly.
163
168
164 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
169 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
165 %store foo >> ~/myfoo.txt to store variables to files (in clean
170 %store foo >> ~/myfoo.txt to store variables to files (in clean
166 textual form, not a restorable pickle).
171 textual form, not a restorable pickle).
167
172
168 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
173 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
169
174
170 * usage.py, Magic.py: added %quickref
175 * usage.py, Magic.py: added %quickref
171
176
172 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
177 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
173
178
174 * GetoptErrors when invoking magics etc. with wrong args
179 * GetoptErrors when invoking magics etc. with wrong args
175 are now more helpful:
180 are now more helpful:
176 GetoptError: option -l not recognized (allowed: "qb" )
181 GetoptError: option -l not recognized (allowed: "qb" )
177
182
178 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
183 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
179
184
180 * IPython/demo.py (Demo.show): Flush stdout after each block, so
185 * IPython/demo.py (Demo.show): Flush stdout after each block, so
181 computationally intensive blocks don't appear to stall the demo.
186 computationally intensive blocks don't appear to stall the demo.
182
187
183 2006-01-24 Ville Vainio <vivainio@gmail.com>
188 2006-01-24 Ville Vainio <vivainio@gmail.com>
184
189
185 * iplib.py, hooks.py: 'result_display' hook can return a non-None
190 * iplib.py, hooks.py: 'result_display' hook can return a non-None
186 value to manipulate resulting history entry.
191 value to manipulate resulting history entry.
187
192
188 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
193 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
189 to instance methods of IPApi class, to make extending an embedded
194 to instance methods of IPApi class, to make extending an embedded
190 IPython feasible. See ext_rehashdir.py for example usage.
195 IPython feasible. See ext_rehashdir.py for example usage.
191
196
192 * Merged 1071-1076 from banches/0.7.1
197 * Merged 1071-1076 from banches/0.7.1
193
198
194
199
195 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
200 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
196
201
197 * tools/release (daystamp): Fix build tools to use the new
202 * tools/release (daystamp): Fix build tools to use the new
198 eggsetup.py script to build lightweight eggs.
203 eggsetup.py script to build lightweight eggs.
199
204
200 * Applied changesets 1062 and 1064 before 0.7.1 release.
205 * Applied changesets 1062 and 1064 before 0.7.1 release.
201
206
202 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
207 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
203 see the raw input history (without conversions like %ls ->
208 see the raw input history (without conversions like %ls ->
204 ipmagic("ls")). After a request from W. Stein, SAGE
209 ipmagic("ls")). After a request from W. Stein, SAGE
205 (http://modular.ucsd.edu/sage) developer. This information is
210 (http://modular.ucsd.edu/sage) developer. This information is
206 stored in the input_hist_raw attribute of the IPython instance, so
211 stored in the input_hist_raw attribute of the IPython instance, so
207 developers can access it if needed (it's an InputList instance).
212 developers can access it if needed (it's an InputList instance).
208
213
209 * Versionstring = 0.7.2.svn
214 * Versionstring = 0.7.2.svn
210
215
211 * eggsetup.py: A separate script for constructing eggs, creates
216 * eggsetup.py: A separate script for constructing eggs, creates
212 proper launch scripts even on Windows (an .exe file in
217 proper launch scripts even on Windows (an .exe file in
213 \python24\scripts).
218 \python24\scripts).
214
219
215 * ipapi.py: launch_new_instance, launch entry point needed for the
220 * ipapi.py: launch_new_instance, launch entry point needed for the
216 egg.
221 egg.
217
222
218 2006-01-23 Ville Vainio <vivainio@gmail.com>
223 2006-01-23 Ville Vainio <vivainio@gmail.com>
219
224
220 * Added %cpaste magic for pasting python code
225 * Added %cpaste magic for pasting python code
221
226
222 2006-01-22 Ville Vainio <vivainio@gmail.com>
227 2006-01-22 Ville Vainio <vivainio@gmail.com>
223
228
224 * Merge from branches/0.7.1 into trunk, revs 1052-1057
229 * Merge from branches/0.7.1 into trunk, revs 1052-1057
225
230
226 * Versionstring = 0.7.2.svn
231 * Versionstring = 0.7.2.svn
227
232
228 * eggsetup.py: A separate script for constructing eggs, creates
233 * eggsetup.py: A separate script for constructing eggs, creates
229 proper launch scripts even on Windows (an .exe file in
234 proper launch scripts even on Windows (an .exe file in
230 \python24\scripts).
235 \python24\scripts).
231
236
232 * ipapi.py: launch_new_instance, launch entry point needed for the
237 * ipapi.py: launch_new_instance, launch entry point needed for the
233 egg.
238 egg.
234
239
235 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
240 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
236
241
237 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
242 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
238 %pfile foo would print the file for foo even if it was a binary.
243 %pfile foo would print the file for foo even if it was a binary.
239 Now, extensions '.so' and '.dll' are skipped.
244 Now, extensions '.so' and '.dll' are skipped.
240
245
241 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
246 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
242 bug, where macros would fail in all threaded modes. I'm not 100%
247 bug, where macros would fail in all threaded modes. I'm not 100%
243 sure, so I'm going to put out an rc instead of making a release
248 sure, so I'm going to put out an rc instead of making a release
244 today, and wait for feedback for at least a few days.
249 today, and wait for feedback for at least a few days.
245
250
246 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
251 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
247 it...) the handling of pasting external code with autoindent on.
252 it...) the handling of pasting external code with autoindent on.
248 To get out of a multiline input, the rule will appear for most
253 To get out of a multiline input, the rule will appear for most
249 users unchanged: two blank lines or change the indent level
254 users unchanged: two blank lines or change the indent level
250 proposed by IPython. But there is a twist now: you can
255 proposed by IPython. But there is a twist now: you can
251 add/subtract only *one or two spaces*. If you add/subtract three
256 add/subtract only *one or two spaces*. If you add/subtract three
252 or more (unless you completely delete the line), IPython will
257 or more (unless you completely delete the line), IPython will
253 accept that line, and you'll need to enter a second one of pure
258 accept that line, and you'll need to enter a second one of pure
254 whitespace. I know it sounds complicated, but I can't find a
259 whitespace. I know it sounds complicated, but I can't find a
255 different solution that covers all the cases, with the right
260 different solution that covers all the cases, with the right
256 heuristics. Hopefully in actual use, nobody will really notice
261 heuristics. Hopefully in actual use, nobody will really notice
257 all these strange rules and things will 'just work'.
262 all these strange rules and things will 'just work'.
258
263
259 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
264 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
260
265
261 * IPython/iplib.py (interact): catch exceptions which can be
266 * IPython/iplib.py (interact): catch exceptions which can be
262 triggered asynchronously by signal handlers. Thanks to an
267 triggered asynchronously by signal handlers. Thanks to an
263 automatic crash report, submitted by Colin Kingsley
268 automatic crash report, submitted by Colin Kingsley
264 <tercel-AT-gentoo.org>.
269 <tercel-AT-gentoo.org>.
265
270
266 2006-01-20 Ville Vainio <vivainio@gmail.com>
271 2006-01-20 Ville Vainio <vivainio@gmail.com>
267
272
268 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
273 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
269 (%rehashdir, very useful, try it out) of how to extend ipython
274 (%rehashdir, very useful, try it out) of how to extend ipython
270 with new magics. Also added Extensions dir to pythonpath to make
275 with new magics. Also added Extensions dir to pythonpath to make
271 importing extensions easy.
276 importing extensions easy.
272
277
273 * %store now complains when trying to store interactively declared
278 * %store now complains when trying to store interactively declared
274 classes / instances of those classes.
279 classes / instances of those classes.
275
280
276 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
281 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
277 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
282 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
278 if they exist, and ipy_user_conf.py with some defaults is created for
283 if they exist, and ipy_user_conf.py with some defaults is created for
279 the user.
284 the user.
280
285
281 * Startup rehashing done by the config file, not InterpreterExec.
286 * Startup rehashing done by the config file, not InterpreterExec.
282 This means system commands are available even without selecting the
287 This means system commands are available even without selecting the
283 pysh profile. It's the sensible default after all.
288 pysh profile. It's the sensible default after all.
284
289
285 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
290 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
286
291
287 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
292 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
288 multiline code with autoindent on working. But I am really not
293 multiline code with autoindent on working. But I am really not
289 sure, so this needs more testing. Will commit a debug-enabled
294 sure, so this needs more testing. Will commit a debug-enabled
290 version for now, while I test it some more, so that Ville and
295 version for now, while I test it some more, so that Ville and
291 others may also catch any problems. Also made
296 others may also catch any problems. Also made
292 self.indent_current_str() a method, to ensure that there's no
297 self.indent_current_str() a method, to ensure that there's no
293 chance of the indent space count and the corresponding string
298 chance of the indent space count and the corresponding string
294 falling out of sync. All code needing the string should just call
299 falling out of sync. All code needing the string should just call
295 the method.
300 the method.
296
301
297 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
302 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
298
303
299 * IPython/Magic.py (magic_edit): fix check for when users don't
304 * IPython/Magic.py (magic_edit): fix check for when users don't
300 save their output files, the try/except was in the wrong section.
305 save their output files, the try/except was in the wrong section.
301
306
302 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
307 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
303
308
304 * IPython/Magic.py (magic_run): fix __file__ global missing from
309 * IPython/Magic.py (magic_run): fix __file__ global missing from
305 script's namespace when executed via %run. After a report by
310 script's namespace when executed via %run. After a report by
306 Vivian.
311 Vivian.
307
312
308 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
313 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
309 when using python 2.4. The parent constructor changed in 2.4, and
314 when using python 2.4. The parent constructor changed in 2.4, and
310 we need to track it directly (we can't call it, as it messes up
315 we need to track it directly (we can't call it, as it messes up
311 readline and tab-completion inside our pdb would stop working).
316 readline and tab-completion inside our pdb would stop working).
312 After a bug report by R. Bernstein <rocky-AT-panix.com>.
317 After a bug report by R. Bernstein <rocky-AT-panix.com>.
313
318
314 2006-01-16 Ville Vainio <vivainio@gmail.com>
319 2006-01-16 Ville Vainio <vivainio@gmail.com>
315
320
316 * Ipython/magic.py:Reverted back to old %edit functionality
321 * Ipython/magic.py:Reverted back to old %edit functionality
317 that returns file contents on exit.
322 that returns file contents on exit.
318
323
319 * IPython/path.py: Added Jason Orendorff's "path" module to
324 * IPython/path.py: Added Jason Orendorff's "path" module to
320 IPython tree, http://www.jorendorff.com/articles/python/path/.
325 IPython tree, http://www.jorendorff.com/articles/python/path/.
321 You can get path objects conveniently through %sc, and !!, e.g.:
326 You can get path objects conveniently through %sc, and !!, e.g.:
322 sc files=ls
327 sc files=ls
323 for p in files.paths: # or files.p
328 for p in files.paths: # or files.p
324 print p,p.mtime
329 print p,p.mtime
325
330
326 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
331 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
327 now work again without considering the exclusion regexp -
332 now work again without considering the exclusion regexp -
328 hence, things like ',foo my/path' turn to 'foo("my/path")'
333 hence, things like ',foo my/path' turn to 'foo("my/path")'
329 instead of syntax error.
334 instead of syntax error.
330
335
331
336
332 2006-01-14 Ville Vainio <vivainio@gmail.com>
337 2006-01-14 Ville Vainio <vivainio@gmail.com>
333
338
334 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
339 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
335 ipapi decorators for python 2.4 users, options() provides access to rc
340 ipapi decorators for python 2.4 users, options() provides access to rc
336 data.
341 data.
337
342
338 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
343 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
339 as path separators (even on Linux ;-). Space character after
344 as path separators (even on Linux ;-). Space character after
340 backslash (as yielded by tab completer) is still space;
345 backslash (as yielded by tab completer) is still space;
341 "%cd long\ name" works as expected.
346 "%cd long\ name" works as expected.
342
347
343 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
348 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
344 as "chain of command", with priority. API stays the same,
349 as "chain of command", with priority. API stays the same,
345 TryNext exception raised by a hook function signals that
350 TryNext exception raised by a hook function signals that
346 current hook failed and next hook should try handling it, as
351 current hook failed and next hook should try handling it, as
347 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
352 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
348 requested configurable display hook, which is now implemented.
353 requested configurable display hook, which is now implemented.
349
354
350 2006-01-13 Ville Vainio <vivainio@gmail.com>
355 2006-01-13 Ville Vainio <vivainio@gmail.com>
351
356
352 * IPython/platutils*.py: platform specific utility functions,
357 * IPython/platutils*.py: platform specific utility functions,
353 so far only set_term_title is implemented (change terminal
358 so far only set_term_title is implemented (change terminal
354 label in windowing systems). %cd now changes the title to
359 label in windowing systems). %cd now changes the title to
355 current dir.
360 current dir.
356
361
357 * IPython/Release.py: Added myself to "authors" list,
362 * IPython/Release.py: Added myself to "authors" list,
358 had to create new files.
363 had to create new files.
359
364
360 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
365 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
361 shell escape; not a known bug but had potential to be one in the
366 shell escape; not a known bug but had potential to be one in the
362 future.
367 future.
363
368
364 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
369 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
365 extension API for IPython! See the module for usage example. Fix
370 extension API for IPython! See the module for usage example. Fix
366 OInspect for docstring-less magic functions.
371 OInspect for docstring-less magic functions.
367
372
368
373
369 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
374 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
370
375
371 * IPython/iplib.py (raw_input): temporarily deactivate all
376 * IPython/iplib.py (raw_input): temporarily deactivate all
372 attempts at allowing pasting of code with autoindent on. It
377 attempts at allowing pasting of code with autoindent on. It
373 introduced bugs (reported by Prabhu) and I can't seem to find a
378 introduced bugs (reported by Prabhu) and I can't seem to find a
374 robust combination which works in all cases. Will have to revisit
379 robust combination which works in all cases. Will have to revisit
375 later.
380 later.
376
381
377 * IPython/genutils.py: remove isspace() function. We've dropped
382 * IPython/genutils.py: remove isspace() function. We've dropped
378 2.2 compatibility, so it's OK to use the string method.
383 2.2 compatibility, so it's OK to use the string method.
379
384
380 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
385 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
381
386
382 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
387 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
383 matching what NOT to autocall on, to include all python binary
388 matching what NOT to autocall on, to include all python binary
384 operators (including things like 'and', 'or', 'is' and 'in').
389 operators (including things like 'and', 'or', 'is' and 'in').
385 Prompted by a bug report on 'foo & bar', but I realized we had
390 Prompted by a bug report on 'foo & bar', but I realized we had
386 many more potential bug cases with other operators. The regexp is
391 many more potential bug cases with other operators. The regexp is
387 self.re_exclude_auto, it's fairly commented.
392 self.re_exclude_auto, it's fairly commented.
388
393
389 2006-01-12 Ville Vainio <vivainio@gmail.com>
394 2006-01-12 Ville Vainio <vivainio@gmail.com>
390
395
391 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
396 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
392 Prettified and hardened string/backslash quoting with ipsystem(),
397 Prettified and hardened string/backslash quoting with ipsystem(),
393 ipalias() and ipmagic(). Now even \ characters are passed to
398 ipalias() and ipmagic(). Now even \ characters are passed to
394 %magics, !shell escapes and aliases exactly as they are in the
399 %magics, !shell escapes and aliases exactly as they are in the
395 ipython command line. Should improve backslash experience,
400 ipython command line. Should improve backslash experience,
396 particularly in Windows (path delimiter for some commands that
401 particularly in Windows (path delimiter for some commands that
397 won't understand '/'), but Unix benefits as well (regexps). %cd
402 won't understand '/'), but Unix benefits as well (regexps). %cd
398 magic still doesn't support backslash path delimiters, though. Also
403 magic still doesn't support backslash path delimiters, though. Also
399 deleted all pretense of supporting multiline command strings in
404 deleted all pretense of supporting multiline command strings in
400 !system or %magic commands. Thanks to Jerry McRae for suggestions.
405 !system or %magic commands. Thanks to Jerry McRae for suggestions.
401
406
402 * doc/build_doc_instructions.txt added. Documentation on how to
407 * doc/build_doc_instructions.txt added. Documentation on how to
403 use doc/update_manual.py, added yesterday. Both files contributed
408 use doc/update_manual.py, added yesterday. Both files contributed
404 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
409 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
405 doc/*.sh for deprecation at a later date.
410 doc/*.sh for deprecation at a later date.
406
411
407 * /ipython.py Added ipython.py to root directory for
412 * /ipython.py Added ipython.py to root directory for
408 zero-installation (tar xzvf ipython.tgz; cd ipython; python
413 zero-installation (tar xzvf ipython.tgz; cd ipython; python
409 ipython.py) and development convenience (no need to kee doing
414 ipython.py) and development convenience (no need to kee doing
410 "setup.py install" between changes).
415 "setup.py install" between changes).
411
416
412 * Made ! and !! shell escapes work (again) in multiline expressions:
417 * Made ! and !! shell escapes work (again) in multiline expressions:
413 if 1:
418 if 1:
414 !ls
419 !ls
415 !!ls
420 !!ls
416
421
417 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
422 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
418
423
419 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
424 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
420 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
425 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
421 module in case-insensitive installation. Was causing crashes
426 module in case-insensitive installation. Was causing crashes
422 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
427 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
423
428
424 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
429 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
425 <marienz-AT-gentoo.org>, closes
430 <marienz-AT-gentoo.org>, closes
426 http://www.scipy.net/roundup/ipython/issue51.
431 http://www.scipy.net/roundup/ipython/issue51.
427
432
428 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
433 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
429
434
430 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
435 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
431 problem of excessive CPU usage under *nix and keyboard lag under
436 problem of excessive CPU usage under *nix and keyboard lag under
432 win32.
437 win32.
433
438
434 2006-01-10 *** Released version 0.7.0
439 2006-01-10 *** Released version 0.7.0
435
440
436 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
441 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
437
442
438 * IPython/Release.py (revision): tag version number to 0.7.0,
443 * IPython/Release.py (revision): tag version number to 0.7.0,
439 ready for release.
444 ready for release.
440
445
441 * IPython/Magic.py (magic_edit): Add print statement to %edit so
446 * IPython/Magic.py (magic_edit): Add print statement to %edit so
442 it informs the user of the name of the temp. file used. This can
447 it informs the user of the name of the temp. file used. This can
443 help if you decide later to reuse that same file, so you know
448 help if you decide later to reuse that same file, so you know
444 where to copy the info from.
449 where to copy the info from.
445
450
446 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
451 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
447
452
448 * setup_bdist_egg.py: little script to build an egg. Added
453 * setup_bdist_egg.py: little script to build an egg. Added
449 support in the release tools as well.
454 support in the release tools as well.
450
455
451 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
456 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
452
457
453 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
458 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
454 version selection (new -wxversion command line and ipythonrc
459 version selection (new -wxversion command line and ipythonrc
455 parameter). Patch contributed by Arnd Baecker
460 parameter). Patch contributed by Arnd Baecker
456 <arnd.baecker-AT-web.de>.
461 <arnd.baecker-AT-web.de>.
457
462
458 * IPython/iplib.py (embed_mainloop): fix tab-completion in
463 * IPython/iplib.py (embed_mainloop): fix tab-completion in
459 embedded instances, for variables defined at the interactive
464 embedded instances, for variables defined at the interactive
460 prompt of the embedded ipython. Reported by Arnd.
465 prompt of the embedded ipython. Reported by Arnd.
461
466
462 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
467 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
463 it can be used as a (stateful) toggle, or with a direct parameter.
468 it can be used as a (stateful) toggle, or with a direct parameter.
464
469
465 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
470 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
466 could be triggered in certain cases and cause the traceback
471 could be triggered in certain cases and cause the traceback
467 printer not to work.
472 printer not to work.
468
473
469 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
474 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
470
475
471 * IPython/iplib.py (_should_recompile): Small fix, closes
476 * IPython/iplib.py (_should_recompile): Small fix, closes
472 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
477 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
473
478
474 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
479 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
475
480
476 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
481 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
477 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
482 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
478 Moad for help with tracking it down.
483 Moad for help with tracking it down.
479
484
480 * IPython/iplib.py (handle_auto): fix autocall handling for
485 * IPython/iplib.py (handle_auto): fix autocall handling for
481 objects which support BOTH __getitem__ and __call__ (so that f [x]
486 objects which support BOTH __getitem__ and __call__ (so that f [x]
482 is left alone, instead of becoming f([x]) automatically).
487 is left alone, instead of becoming f([x]) automatically).
483
488
484 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
489 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
485 Ville's patch.
490 Ville's patch.
486
491
487 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
492 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
488
493
489 * IPython/iplib.py (handle_auto): changed autocall semantics to
494 * IPython/iplib.py (handle_auto): changed autocall semantics to
490 include 'smart' mode, where the autocall transformation is NOT
495 include 'smart' mode, where the autocall transformation is NOT
491 applied if there are no arguments on the line. This allows you to
496 applied if there are no arguments on the line. This allows you to
492 just type 'foo' if foo is a callable to see its internal form,
497 just type 'foo' if foo is a callable to see its internal form,
493 instead of having it called with no arguments (typically a
498 instead of having it called with no arguments (typically a
494 mistake). The old 'full' autocall still exists: for that, you
499 mistake). The old 'full' autocall still exists: for that, you
495 need to set the 'autocall' parameter to 2 in your ipythonrc file.
500 need to set the 'autocall' parameter to 2 in your ipythonrc file.
496
501
497 * IPython/completer.py (Completer.attr_matches): add
502 * IPython/completer.py (Completer.attr_matches): add
498 tab-completion support for Enthoughts' traits. After a report by
503 tab-completion support for Enthoughts' traits. After a report by
499 Arnd and a patch by Prabhu.
504 Arnd and a patch by Prabhu.
500
505
501 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
506 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
502
507
503 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
508 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
504 Schmolck's patch to fix inspect.getinnerframes().
509 Schmolck's patch to fix inspect.getinnerframes().
505
510
506 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
511 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
507 for embedded instances, regarding handling of namespaces and items
512 for embedded instances, regarding handling of namespaces and items
508 added to the __builtin__ one. Multiple embedded instances and
513 added to the __builtin__ one. Multiple embedded instances and
509 recursive embeddings should work better now (though I'm not sure
514 recursive embeddings should work better now (though I'm not sure
510 I've got all the corner cases fixed, that code is a bit of a brain
515 I've got all the corner cases fixed, that code is a bit of a brain
511 twister).
516 twister).
512
517
513 * IPython/Magic.py (magic_edit): added support to edit in-memory
518 * IPython/Magic.py (magic_edit): added support to edit in-memory
514 macros (automatically creates the necessary temp files). %edit
519 macros (automatically creates the necessary temp files). %edit
515 also doesn't return the file contents anymore, it's just noise.
520 also doesn't return the file contents anymore, it's just noise.
516
521
517 * IPython/completer.py (Completer.attr_matches): revert change to
522 * IPython/completer.py (Completer.attr_matches): revert change to
518 complete only on attributes listed in __all__. I realized it
523 complete only on attributes listed in __all__. I realized it
519 cripples the tab-completion system as a tool for exploring the
524 cripples the tab-completion system as a tool for exploring the
520 internals of unknown libraries (it renders any non-__all__
525 internals of unknown libraries (it renders any non-__all__
521 attribute off-limits). I got bit by this when trying to see
526 attribute off-limits). I got bit by this when trying to see
522 something inside the dis module.
527 something inside the dis module.
523
528
524 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
529 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
525
530
526 * IPython/iplib.py (InteractiveShell.__init__): add .meta
531 * IPython/iplib.py (InteractiveShell.__init__): add .meta
527 namespace for users and extension writers to hold data in. This
532 namespace for users and extension writers to hold data in. This
528 follows the discussion in
533 follows the discussion in
529 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
534 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
530
535
531 * IPython/completer.py (IPCompleter.complete): small patch to help
536 * IPython/completer.py (IPCompleter.complete): small patch to help
532 tab-completion under Emacs, after a suggestion by John Barnard
537 tab-completion under Emacs, after a suggestion by John Barnard
533 <barnarj-AT-ccf.org>.
538 <barnarj-AT-ccf.org>.
534
539
535 * IPython/Magic.py (Magic.extract_input_slices): added support for
540 * IPython/Magic.py (Magic.extract_input_slices): added support for
536 the slice notation in magics to use N-M to represent numbers N...M
541 the slice notation in magics to use N-M to represent numbers N...M
537 (closed endpoints). This is used by %macro and %save.
542 (closed endpoints). This is used by %macro and %save.
538
543
539 * IPython/completer.py (Completer.attr_matches): for modules which
544 * IPython/completer.py (Completer.attr_matches): for modules which
540 define __all__, complete only on those. After a patch by Jeffrey
545 define __all__, complete only on those. After a patch by Jeffrey
541 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
546 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
542 speed up this routine.
547 speed up this routine.
543
548
544 * IPython/Logger.py (Logger.log): fix a history handling bug. I
549 * IPython/Logger.py (Logger.log): fix a history handling bug. I
545 don't know if this is the end of it, but the behavior now is
550 don't know if this is the end of it, but the behavior now is
546 certainly much more correct. Note that coupled with macros,
551 certainly much more correct. Note that coupled with macros,
547 slightly surprising (at first) behavior may occur: a macro will in
552 slightly surprising (at first) behavior may occur: a macro will in
548 general expand to multiple lines of input, so upon exiting, the
553 general expand to multiple lines of input, so upon exiting, the
549 in/out counters will both be bumped by the corresponding amount
554 in/out counters will both be bumped by the corresponding amount
550 (as if the macro's contents had been typed interactively). Typing
555 (as if the macro's contents had been typed interactively). Typing
551 %hist will reveal the intermediate (silently processed) lines.
556 %hist will reveal the intermediate (silently processed) lines.
552
557
553 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
558 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
554 pickle to fail (%run was overwriting __main__ and not restoring
559 pickle to fail (%run was overwriting __main__ and not restoring
555 it, but pickle relies on __main__ to operate).
560 it, but pickle relies on __main__ to operate).
556
561
557 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
562 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
558 using properties, but forgot to make the main InteractiveShell
563 using properties, but forgot to make the main InteractiveShell
559 class a new-style class. Properties fail silently, and
564 class a new-style class. Properties fail silently, and
560 misteriously, with old-style class (getters work, but
565 misteriously, with old-style class (getters work, but
561 setters don't do anything).
566 setters don't do anything).
562
567
563 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
568 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
564
569
565 * IPython/Magic.py (magic_history): fix history reporting bug (I
570 * IPython/Magic.py (magic_history): fix history reporting bug (I
566 know some nasties are still there, I just can't seem to find a
571 know some nasties are still there, I just can't seem to find a
567 reproducible test case to track them down; the input history is
572 reproducible test case to track them down; the input history is
568 falling out of sync...)
573 falling out of sync...)
569
574
570 * IPython/iplib.py (handle_shell_escape): fix bug where both
575 * IPython/iplib.py (handle_shell_escape): fix bug where both
571 aliases and system accesses where broken for indented code (such
576 aliases and system accesses where broken for indented code (such
572 as loops).
577 as loops).
573
578
574 * IPython/genutils.py (shell): fix small but critical bug for
579 * IPython/genutils.py (shell): fix small but critical bug for
575 win32 system access.
580 win32 system access.
576
581
577 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
582 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
578
583
579 * IPython/iplib.py (showtraceback): remove use of the
584 * IPython/iplib.py (showtraceback): remove use of the
580 sys.last_{type/value/traceback} structures, which are non
585 sys.last_{type/value/traceback} structures, which are non
581 thread-safe.
586 thread-safe.
582 (_prefilter): change control flow to ensure that we NEVER
587 (_prefilter): change control flow to ensure that we NEVER
583 introspect objects when autocall is off. This will guarantee that
588 introspect objects when autocall is off. This will guarantee that
584 having an input line of the form 'x.y', where access to attribute
589 having an input line of the form 'x.y', where access to attribute
585 'y' has side effects, doesn't trigger the side effect TWICE. It
590 'y' has side effects, doesn't trigger the side effect TWICE. It
586 is important to note that, with autocall on, these side effects
591 is important to note that, with autocall on, these side effects
587 can still happen.
592 can still happen.
588 (ipsystem): new builtin, to complete the ip{magic/alias/system}
593 (ipsystem): new builtin, to complete the ip{magic/alias/system}
589 trio. IPython offers these three kinds of special calls which are
594 trio. IPython offers these three kinds of special calls which are
590 not python code, and it's a good thing to have their call method
595 not python code, and it's a good thing to have their call method
591 be accessible as pure python functions (not just special syntax at
596 be accessible as pure python functions (not just special syntax at
592 the command line). It gives us a better internal implementation
597 the command line). It gives us a better internal implementation
593 structure, as well as exposing these for user scripting more
598 structure, as well as exposing these for user scripting more
594 cleanly.
599 cleanly.
595
600
596 * IPython/macro.py (Macro.__init__): moved macros to a standalone
601 * IPython/macro.py (Macro.__init__): moved macros to a standalone
597 file. Now that they'll be more likely to be used with the
602 file. Now that they'll be more likely to be used with the
598 persistance system (%store), I want to make sure their module path
603 persistance system (%store), I want to make sure their module path
599 doesn't change in the future, so that we don't break things for
604 doesn't change in the future, so that we don't break things for
600 users' persisted data.
605 users' persisted data.
601
606
602 * IPython/iplib.py (autoindent_update): move indentation
607 * IPython/iplib.py (autoindent_update): move indentation
603 management into the _text_ processing loop, not the keyboard
608 management into the _text_ processing loop, not the keyboard
604 interactive one. This is necessary to correctly process non-typed
609 interactive one. This is necessary to correctly process non-typed
605 multiline input (such as macros).
610 multiline input (such as macros).
606
611
607 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
612 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
608 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
613 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
609 which was producing problems in the resulting manual.
614 which was producing problems in the resulting manual.
610 (magic_whos): improve reporting of instances (show their class,
615 (magic_whos): improve reporting of instances (show their class,
611 instead of simply printing 'instance' which isn't terribly
616 instead of simply printing 'instance' which isn't terribly
612 informative).
617 informative).
613
618
614 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
619 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
615 (minor mods) to support network shares under win32.
620 (minor mods) to support network shares under win32.
616
621
617 * IPython/winconsole.py (get_console_size): add new winconsole
622 * IPython/winconsole.py (get_console_size): add new winconsole
618 module and fixes to page_dumb() to improve its behavior under
623 module and fixes to page_dumb() to improve its behavior under
619 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
624 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
620
625
621 * IPython/Magic.py (Macro): simplified Macro class to just
626 * IPython/Magic.py (Macro): simplified Macro class to just
622 subclass list. We've had only 2.2 compatibility for a very long
627 subclass list. We've had only 2.2 compatibility for a very long
623 time, yet I was still avoiding subclassing the builtin types. No
628 time, yet I was still avoiding subclassing the builtin types. No
624 more (I'm also starting to use properties, though I won't shift to
629 more (I'm also starting to use properties, though I won't shift to
625 2.3-specific features quite yet).
630 2.3-specific features quite yet).
626 (magic_store): added Ville's patch for lightweight variable
631 (magic_store): added Ville's patch for lightweight variable
627 persistence, after a request on the user list by Matt Wilkie
632 persistence, after a request on the user list by Matt Wilkie
628 <maphew-AT-gmail.com>. The new %store magic's docstring has full
633 <maphew-AT-gmail.com>. The new %store magic's docstring has full
629 details.
634 details.
630
635
631 * IPython/iplib.py (InteractiveShell.post_config_initialization):
636 * IPython/iplib.py (InteractiveShell.post_config_initialization):
632 changed the default logfile name from 'ipython.log' to
637 changed the default logfile name from 'ipython.log' to
633 'ipython_log.py'. These logs are real python files, and now that
638 'ipython_log.py'. These logs are real python files, and now that
634 we have much better multiline support, people are more likely to
639 we have much better multiline support, people are more likely to
635 want to use them as such. Might as well name them correctly.
640 want to use them as such. Might as well name them correctly.
636
641
637 * IPython/Magic.py: substantial cleanup. While we can't stop
642 * IPython/Magic.py: substantial cleanup. While we can't stop
638 using magics as mixins, due to the existing customizations 'out
643 using magics as mixins, due to the existing customizations 'out
639 there' which rely on the mixin naming conventions, at least I
644 there' which rely on the mixin naming conventions, at least I
640 cleaned out all cross-class name usage. So once we are OK with
645 cleaned out all cross-class name usage. So once we are OK with
641 breaking compatibility, the two systems can be separated.
646 breaking compatibility, the two systems can be separated.
642
647
643 * IPython/Logger.py: major cleanup. This one is NOT a mixin
648 * IPython/Logger.py: major cleanup. This one is NOT a mixin
644 anymore, and the class is a fair bit less hideous as well. New
649 anymore, and the class is a fair bit less hideous as well. New
645 features were also introduced: timestamping of input, and logging
650 features were also introduced: timestamping of input, and logging
646 of output results. These are user-visible with the -t and -o
651 of output results. These are user-visible with the -t and -o
647 options to %logstart. Closes
652 options to %logstart. Closes
648 http://www.scipy.net/roundup/ipython/issue11 and a request by
653 http://www.scipy.net/roundup/ipython/issue11 and a request by
649 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
654 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
650
655
651 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
656 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
652
657
653 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
658 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
654 better hadnle backslashes in paths. See the thread 'More Windows
659 better hadnle backslashes in paths. See the thread 'More Windows
655 questions part 2 - \/ characters revisited' on the iypthon user
660 questions part 2 - \/ characters revisited' on the iypthon user
656 list:
661 list:
657 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
662 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
658
663
659 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
664 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
660
665
661 (InteractiveShell.__init__): change threaded shells to not use the
666 (InteractiveShell.__init__): change threaded shells to not use the
662 ipython crash handler. This was causing more problems than not,
667 ipython crash handler. This was causing more problems than not,
663 as exceptions in the main thread (GUI code, typically) would
668 as exceptions in the main thread (GUI code, typically) would
664 always show up as a 'crash', when they really weren't.
669 always show up as a 'crash', when they really weren't.
665
670
666 The colors and exception mode commands (%colors/%xmode) have been
671 The colors and exception mode commands (%colors/%xmode) have been
667 synchronized to also take this into account, so users can get
672 synchronized to also take this into account, so users can get
668 verbose exceptions for their threaded code as well. I also added
673 verbose exceptions for their threaded code as well. I also added
669 support for activating pdb inside this exception handler as well,
674 support for activating pdb inside this exception handler as well,
670 so now GUI authors can use IPython's enhanced pdb at runtime.
675 so now GUI authors can use IPython's enhanced pdb at runtime.
671
676
672 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
677 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
673 true by default, and add it to the shipped ipythonrc file. Since
678 true by default, and add it to the shipped ipythonrc file. Since
674 this asks the user before proceeding, I think it's OK to make it
679 this asks the user before proceeding, I think it's OK to make it
675 true by default.
680 true by default.
676
681
677 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
682 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
678 of the previous special-casing of input in the eval loop. I think
683 of the previous special-casing of input in the eval loop. I think
679 this is cleaner, as they really are commands and shouldn't have
684 this is cleaner, as they really are commands and shouldn't have
680 a special role in the middle of the core code.
685 a special role in the middle of the core code.
681
686
682 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
687 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
683
688
684 * IPython/iplib.py (edit_syntax_error): added support for
689 * IPython/iplib.py (edit_syntax_error): added support for
685 automatically reopening the editor if the file had a syntax error
690 automatically reopening the editor if the file had a syntax error
686 in it. Thanks to scottt who provided the patch at:
691 in it. Thanks to scottt who provided the patch at:
687 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
692 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
688 version committed).
693 version committed).
689
694
690 * IPython/iplib.py (handle_normal): add suport for multi-line
695 * IPython/iplib.py (handle_normal): add suport for multi-line
691 input with emtpy lines. This fixes
696 input with emtpy lines. This fixes
692 http://www.scipy.net/roundup/ipython/issue43 and a similar
697 http://www.scipy.net/roundup/ipython/issue43 and a similar
693 discussion on the user list.
698 discussion on the user list.
694
699
695 WARNING: a behavior change is necessarily introduced to support
700 WARNING: a behavior change is necessarily introduced to support
696 blank lines: now a single blank line with whitespace does NOT
701 blank lines: now a single blank line with whitespace does NOT
697 break the input loop, which means that when autoindent is on, by
702 break the input loop, which means that when autoindent is on, by
698 default hitting return on the next (indented) line does NOT exit.
703 default hitting return on the next (indented) line does NOT exit.
699
704
700 Instead, to exit a multiline input you can either have:
705 Instead, to exit a multiline input you can either have:
701
706
702 - TWO whitespace lines (just hit return again), or
707 - TWO whitespace lines (just hit return again), or
703 - a single whitespace line of a different length than provided
708 - a single whitespace line of a different length than provided
704 by the autoindent (add or remove a space).
709 by the autoindent (add or remove a space).
705
710
706 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
711 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
707 module to better organize all readline-related functionality.
712 module to better organize all readline-related functionality.
708 I've deleted FlexCompleter and put all completion clases here.
713 I've deleted FlexCompleter and put all completion clases here.
709
714
710 * IPython/iplib.py (raw_input): improve indentation management.
715 * IPython/iplib.py (raw_input): improve indentation management.
711 It is now possible to paste indented code with autoindent on, and
716 It is now possible to paste indented code with autoindent on, and
712 the code is interpreted correctly (though it still looks bad on
717 the code is interpreted correctly (though it still looks bad on
713 screen, due to the line-oriented nature of ipython).
718 screen, due to the line-oriented nature of ipython).
714 (MagicCompleter.complete): change behavior so that a TAB key on an
719 (MagicCompleter.complete): change behavior so that a TAB key on an
715 otherwise empty line actually inserts a tab, instead of completing
720 otherwise empty line actually inserts a tab, instead of completing
716 on the entire global namespace. This makes it easier to use the
721 on the entire global namespace. This makes it easier to use the
717 TAB key for indentation. After a request by Hans Meine
722 TAB key for indentation. After a request by Hans Meine
718 <hans_meine-AT-gmx.net>
723 <hans_meine-AT-gmx.net>
719 (_prefilter): add support so that typing plain 'exit' or 'quit'
724 (_prefilter): add support so that typing plain 'exit' or 'quit'
720 does a sensible thing. Originally I tried to deviate as little as
725 does a sensible thing. Originally I tried to deviate as little as
721 possible from the default python behavior, but even that one may
726 possible from the default python behavior, but even that one may
722 change in this direction (thread on python-dev to that effect).
727 change in this direction (thread on python-dev to that effect).
723 Regardless, ipython should do the right thing even if CPython's
728 Regardless, ipython should do the right thing even if CPython's
724 '>>>' prompt doesn't.
729 '>>>' prompt doesn't.
725 (InteractiveShell): removed subclassing code.InteractiveConsole
730 (InteractiveShell): removed subclassing code.InteractiveConsole
726 class. By now we'd overridden just about all of its methods: I've
731 class. By now we'd overridden just about all of its methods: I've
727 copied the remaining two over, and now ipython is a standalone
732 copied the remaining two over, and now ipython is a standalone
728 class. This will provide a clearer picture for the chainsaw
733 class. This will provide a clearer picture for the chainsaw
729 branch refactoring.
734 branch refactoring.
730
735
731 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
736 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
732
737
733 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
738 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
734 failures for objects which break when dir() is called on them.
739 failures for objects which break when dir() is called on them.
735
740
736 * IPython/FlexCompleter.py (Completer.__init__): Added support for
741 * IPython/FlexCompleter.py (Completer.__init__): Added support for
737 distinct local and global namespaces in the completer API. This
742 distinct local and global namespaces in the completer API. This
738 change allows us top properly handle completion with distinct
743 change allows us top properly handle completion with distinct
739 scopes, including in embedded instances (this had never really
744 scopes, including in embedded instances (this had never really
740 worked correctly).
745 worked correctly).
741
746
742 Note: this introduces a change in the constructor for
747 Note: this introduces a change in the constructor for
743 MagicCompleter, as a new global_namespace parameter is now the
748 MagicCompleter, as a new global_namespace parameter is now the
744 second argument (the others were bumped one position).
749 second argument (the others were bumped one position).
745
750
746 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
751 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
747
752
748 * IPython/iplib.py (embed_mainloop): fix tab-completion in
753 * IPython/iplib.py (embed_mainloop): fix tab-completion in
749 embedded instances (which can be done now thanks to Vivian's
754 embedded instances (which can be done now thanks to Vivian's
750 frame-handling fixes for pdb).
755 frame-handling fixes for pdb).
751 (InteractiveShell.__init__): Fix namespace handling problem in
756 (InteractiveShell.__init__): Fix namespace handling problem in
752 embedded instances. We were overwriting __main__ unconditionally,
757 embedded instances. We were overwriting __main__ unconditionally,
753 and this should only be done for 'full' (non-embedded) IPython;
758 and this should only be done for 'full' (non-embedded) IPython;
754 embedded instances must respect the caller's __main__. Thanks to
759 embedded instances must respect the caller's __main__. Thanks to
755 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
760 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
756
761
757 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
762 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
758
763
759 * setup.py: added download_url to setup(). This registers the
764 * setup.py: added download_url to setup(). This registers the
760 download address at PyPI, which is not only useful to humans
765 download address at PyPI, which is not only useful to humans
761 browsing the site, but is also picked up by setuptools (the Eggs
766 browsing the site, but is also picked up by setuptools (the Eggs
762 machinery). Thanks to Ville and R. Kern for the info/discussion
767 machinery). Thanks to Ville and R. Kern for the info/discussion
763 on this.
768 on this.
764
769
765 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
770 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
766
771
767 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
772 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
768 This brings a lot of nice functionality to the pdb mode, which now
773 This brings a lot of nice functionality to the pdb mode, which now
769 has tab-completion, syntax highlighting, and better stack handling
774 has tab-completion, syntax highlighting, and better stack handling
770 than before. Many thanks to Vivian De Smedt
775 than before. Many thanks to Vivian De Smedt
771 <vivian-AT-vdesmedt.com> for the original patches.
776 <vivian-AT-vdesmedt.com> for the original patches.
772
777
773 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
778 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
774
779
775 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
780 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
776 sequence to consistently accept the banner argument. The
781 sequence to consistently accept the banner argument. The
777 inconsistency was tripping SAGE, thanks to Gary Zablackis
782 inconsistency was tripping SAGE, thanks to Gary Zablackis
778 <gzabl-AT-yahoo.com> for the report.
783 <gzabl-AT-yahoo.com> for the report.
779
784
780 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
785 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
781
786
782 * IPython/iplib.py (InteractiveShell.post_config_initialization):
787 * IPython/iplib.py (InteractiveShell.post_config_initialization):
783 Fix bug where a naked 'alias' call in the ipythonrc file would
788 Fix bug where a naked 'alias' call in the ipythonrc file would
784 cause a crash. Bug reported by Jorgen Stenarson.
789 cause a crash. Bug reported by Jorgen Stenarson.
785
790
786 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
791 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
787
792
788 * IPython/ipmaker.py (make_IPython): cleanups which should improve
793 * IPython/ipmaker.py (make_IPython): cleanups which should improve
789 startup time.
794 startup time.
790
795
791 * IPython/iplib.py (runcode): my globals 'fix' for embedded
796 * IPython/iplib.py (runcode): my globals 'fix' for embedded
792 instances had introduced a bug with globals in normal code. Now
797 instances had introduced a bug with globals in normal code. Now
793 it's working in all cases.
798 it's working in all cases.
794
799
795 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
800 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
796 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
801 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
797 has been introduced to set the default case sensitivity of the
802 has been introduced to set the default case sensitivity of the
798 searches. Users can still select either mode at runtime on a
803 searches. Users can still select either mode at runtime on a
799 per-search basis.
804 per-search basis.
800
805
801 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
806 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
802
807
803 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
808 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
804 attributes in wildcard searches for subclasses. Modified version
809 attributes in wildcard searches for subclasses. Modified version
805 of a patch by Jorgen.
810 of a patch by Jorgen.
806
811
807 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
812 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
808
813
809 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
814 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
810 embedded instances. I added a user_global_ns attribute to the
815 embedded instances. I added a user_global_ns attribute to the
811 InteractiveShell class to handle this.
816 InteractiveShell class to handle this.
812
817
813 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
818 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
814
819
815 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
820 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
816 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
821 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
817 (reported under win32, but may happen also in other platforms).
822 (reported under win32, but may happen also in other platforms).
818 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
823 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
819
824
820 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
825 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
821
826
822 * IPython/Magic.py (magic_psearch): new support for wildcard
827 * IPython/Magic.py (magic_psearch): new support for wildcard
823 patterns. Now, typing ?a*b will list all names which begin with a
828 patterns. Now, typing ?a*b will list all names which begin with a
824 and end in b, for example. The %psearch magic has full
829 and end in b, for example. The %psearch magic has full
825 docstrings. Many thanks to JΓΆrgen Stenarson
830 docstrings. Many thanks to JΓΆrgen Stenarson
826 <jorgen.stenarson-AT-bostream.nu>, author of the patches
831 <jorgen.stenarson-AT-bostream.nu>, author of the patches
827 implementing this functionality.
832 implementing this functionality.
828
833
829 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
834 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
830
835
831 * Manual: fixed long-standing annoyance of double-dashes (as in
836 * Manual: fixed long-standing annoyance of double-dashes (as in
832 --prefix=~, for example) being stripped in the HTML version. This
837 --prefix=~, for example) being stripped in the HTML version. This
833 is a latex2html bug, but a workaround was provided. Many thanks
838 is a latex2html bug, but a workaround was provided. Many thanks
834 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
839 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
835 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
840 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
836 rolling. This seemingly small issue had tripped a number of users
841 rolling. This seemingly small issue had tripped a number of users
837 when first installing, so I'm glad to see it gone.
842 when first installing, so I'm glad to see it gone.
838
843
839 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
844 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
840
845
841 * IPython/Extensions/numeric_formats.py: fix missing import,
846 * IPython/Extensions/numeric_formats.py: fix missing import,
842 reported by Stephen Walton.
847 reported by Stephen Walton.
843
848
844 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
849 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
845
850
846 * IPython/demo.py: finish demo module, fully documented now.
851 * IPython/demo.py: finish demo module, fully documented now.
847
852
848 * IPython/genutils.py (file_read): simple little utility to read a
853 * IPython/genutils.py (file_read): simple little utility to read a
849 file and ensure it's closed afterwards.
854 file and ensure it's closed afterwards.
850
855
851 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
856 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
852
857
853 * IPython/demo.py (Demo.__init__): added support for individually
858 * IPython/demo.py (Demo.__init__): added support for individually
854 tagging blocks for automatic execution.
859 tagging blocks for automatic execution.
855
860
856 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
861 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
857 syntax-highlighted python sources, requested by John.
862 syntax-highlighted python sources, requested by John.
858
863
859 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
864 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
860
865
861 * IPython/demo.py (Demo.again): fix bug where again() blocks after
866 * IPython/demo.py (Demo.again): fix bug where again() blocks after
862 finishing.
867 finishing.
863
868
864 * IPython/genutils.py (shlex_split): moved from Magic to here,
869 * IPython/genutils.py (shlex_split): moved from Magic to here,
865 where all 2.2 compatibility stuff lives. I needed it for demo.py.
870 where all 2.2 compatibility stuff lives. I needed it for demo.py.
866
871
867 * IPython/demo.py (Demo.__init__): added support for silent
872 * IPython/demo.py (Demo.__init__): added support for silent
868 blocks, improved marks as regexps, docstrings written.
873 blocks, improved marks as regexps, docstrings written.
869 (Demo.__init__): better docstring, added support for sys.argv.
874 (Demo.__init__): better docstring, added support for sys.argv.
870
875
871 * IPython/genutils.py (marquee): little utility used by the demo
876 * IPython/genutils.py (marquee): little utility used by the demo
872 code, handy in general.
877 code, handy in general.
873
878
874 * IPython/demo.py (Demo.__init__): new class for interactive
879 * IPython/demo.py (Demo.__init__): new class for interactive
875 demos. Not documented yet, I just wrote it in a hurry for
880 demos. Not documented yet, I just wrote it in a hurry for
876 scipy'05. Will docstring later.
881 scipy'05. Will docstring later.
877
882
878 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
883 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
879
884
880 * IPython/Shell.py (sigint_handler): Drastic simplification which
885 * IPython/Shell.py (sigint_handler): Drastic simplification which
881 also seems to make Ctrl-C work correctly across threads! This is
886 also seems to make Ctrl-C work correctly across threads! This is
882 so simple, that I can't beleive I'd missed it before. Needs more
887 so simple, that I can't beleive I'd missed it before. Needs more
883 testing, though.
888 testing, though.
884 (KBINT): Never mind, revert changes. I'm sure I'd tried something
889 (KBINT): Never mind, revert changes. I'm sure I'd tried something
885 like this before...
890 like this before...
886
891
887 * IPython/genutils.py (get_home_dir): add protection against
892 * IPython/genutils.py (get_home_dir): add protection against
888 non-dirs in win32 registry.
893 non-dirs in win32 registry.
889
894
890 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
895 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
891 bug where dict was mutated while iterating (pysh crash).
896 bug where dict was mutated while iterating (pysh crash).
892
897
893 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
898 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
894
899
895 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
900 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
896 spurious newlines added by this routine. After a report by
901 spurious newlines added by this routine. After a report by
897 F. Mantegazza.
902 F. Mantegazza.
898
903
899 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
904 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
900
905
901 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
906 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
902 calls. These were a leftover from the GTK 1.x days, and can cause
907 calls. These were a leftover from the GTK 1.x days, and can cause
903 problems in certain cases (after a report by John Hunter).
908 problems in certain cases (after a report by John Hunter).
904
909
905 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
910 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
906 os.getcwd() fails at init time. Thanks to patch from David Remahl
911 os.getcwd() fails at init time. Thanks to patch from David Remahl
907 <chmod007-AT-mac.com>.
912 <chmod007-AT-mac.com>.
908 (InteractiveShell.__init__): prevent certain special magics from
913 (InteractiveShell.__init__): prevent certain special magics from
909 being shadowed by aliases. Closes
914 being shadowed by aliases. Closes
910 http://www.scipy.net/roundup/ipython/issue41.
915 http://www.scipy.net/roundup/ipython/issue41.
911
916
912 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
917 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
913
918
914 * IPython/iplib.py (InteractiveShell.complete): Added new
919 * IPython/iplib.py (InteractiveShell.complete): Added new
915 top-level completion method to expose the completion mechanism
920 top-level completion method to expose the completion mechanism
916 beyond readline-based environments.
921 beyond readline-based environments.
917
922
918 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
923 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
919
924
920 * tools/ipsvnc (svnversion): fix svnversion capture.
925 * tools/ipsvnc (svnversion): fix svnversion capture.
921
926
922 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
927 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
923 attribute to self, which was missing. Before, it was set by a
928 attribute to self, which was missing. Before, it was set by a
924 routine which in certain cases wasn't being called, so the
929 routine which in certain cases wasn't being called, so the
925 instance could end up missing the attribute. This caused a crash.
930 instance could end up missing the attribute. This caused a crash.
926 Closes http://www.scipy.net/roundup/ipython/issue40.
931 Closes http://www.scipy.net/roundup/ipython/issue40.
927
932
928 2005-08-16 Fernando Perez <fperez@colorado.edu>
933 2005-08-16 Fernando Perez <fperez@colorado.edu>
929
934
930 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
935 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
931 contains non-string attribute. Closes
936 contains non-string attribute. Closes
932 http://www.scipy.net/roundup/ipython/issue38.
937 http://www.scipy.net/roundup/ipython/issue38.
933
938
934 2005-08-14 Fernando Perez <fperez@colorado.edu>
939 2005-08-14 Fernando Perez <fperez@colorado.edu>
935
940
936 * tools/ipsvnc: Minor improvements, to add changeset info.
941 * tools/ipsvnc: Minor improvements, to add changeset info.
937
942
938 2005-08-12 Fernando Perez <fperez@colorado.edu>
943 2005-08-12 Fernando Perez <fperez@colorado.edu>
939
944
940 * IPython/iplib.py (runsource): remove self.code_to_run_src
945 * IPython/iplib.py (runsource): remove self.code_to_run_src
941 attribute. I realized this is nothing more than
946 attribute. I realized this is nothing more than
942 '\n'.join(self.buffer), and having the same data in two different
947 '\n'.join(self.buffer), and having the same data in two different
943 places is just asking for synchronization bugs. This may impact
948 places is just asking for synchronization bugs. This may impact
944 people who have custom exception handlers, so I need to warn
949 people who have custom exception handlers, so I need to warn
945 ipython-dev about it (F. Mantegazza may use them).
950 ipython-dev about it (F. Mantegazza may use them).
946
951
947 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
952 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
948
953
949 * IPython/genutils.py: fix 2.2 compatibility (generators)
954 * IPython/genutils.py: fix 2.2 compatibility (generators)
950
955
951 2005-07-18 Fernando Perez <fperez@colorado.edu>
956 2005-07-18 Fernando Perez <fperez@colorado.edu>
952
957
953 * IPython/genutils.py (get_home_dir): fix to help users with
958 * IPython/genutils.py (get_home_dir): fix to help users with
954 invalid $HOME under win32.
959 invalid $HOME under win32.
955
960
956 2005-07-17 Fernando Perez <fperez@colorado.edu>
961 2005-07-17 Fernando Perez <fperez@colorado.edu>
957
962
958 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
963 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
959 some old hacks and clean up a bit other routines; code should be
964 some old hacks and clean up a bit other routines; code should be
960 simpler and a bit faster.
965 simpler and a bit faster.
961
966
962 * IPython/iplib.py (interact): removed some last-resort attempts
967 * IPython/iplib.py (interact): removed some last-resort attempts
963 to survive broken stdout/stderr. That code was only making it
968 to survive broken stdout/stderr. That code was only making it
964 harder to abstract out the i/o (necessary for gui integration),
969 harder to abstract out the i/o (necessary for gui integration),
965 and the crashes it could prevent were extremely rare in practice
970 and the crashes it could prevent were extremely rare in practice
966 (besides being fully user-induced in a pretty violent manner).
971 (besides being fully user-induced in a pretty violent manner).
967
972
968 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
973 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
969 Nothing major yet, but the code is simpler to read; this should
974 Nothing major yet, but the code is simpler to read; this should
970 make it easier to do more serious modifications in the future.
975 make it easier to do more serious modifications in the future.
971
976
972 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
977 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
973 which broke in .15 (thanks to a report by Ville).
978 which broke in .15 (thanks to a report by Ville).
974
979
975 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
980 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
976 be quite correct, I know next to nothing about unicode). This
981 be quite correct, I know next to nothing about unicode). This
977 will allow unicode strings to be used in prompts, amongst other
982 will allow unicode strings to be used in prompts, amongst other
978 cases. It also will prevent ipython from crashing when unicode
983 cases. It also will prevent ipython from crashing when unicode
979 shows up unexpectedly in many places. If ascii encoding fails, we
984 shows up unexpectedly in many places. If ascii encoding fails, we
980 assume utf_8. Currently the encoding is not a user-visible
985 assume utf_8. Currently the encoding is not a user-visible
981 setting, though it could be made so if there is demand for it.
986 setting, though it could be made so if there is demand for it.
982
987
983 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
988 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
984
989
985 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
990 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
986
991
987 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
992 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
988
993
989 * IPython/genutils.py: Add 2.2 compatibility here, so all other
994 * IPython/genutils.py: Add 2.2 compatibility here, so all other
990 code can work transparently for 2.2/2.3.
995 code can work transparently for 2.2/2.3.
991
996
992 2005-07-16 Fernando Perez <fperez@colorado.edu>
997 2005-07-16 Fernando Perez <fperez@colorado.edu>
993
998
994 * IPython/ultraTB.py (ExceptionColors): Make a global variable
999 * IPython/ultraTB.py (ExceptionColors): Make a global variable
995 out of the color scheme table used for coloring exception
1000 out of the color scheme table used for coloring exception
996 tracebacks. This allows user code to add new schemes at runtime.
1001 tracebacks. This allows user code to add new schemes at runtime.
997 This is a minimally modified version of the patch at
1002 This is a minimally modified version of the patch at
998 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1003 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
999 for the contribution.
1004 for the contribution.
1000
1005
1001 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1006 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1002 slightly modified version of the patch in
1007 slightly modified version of the patch in
1003 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1008 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1004 to remove the previous try/except solution (which was costlier).
1009 to remove the previous try/except solution (which was costlier).
1005 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1010 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1006
1011
1007 2005-06-08 Fernando Perez <fperez@colorado.edu>
1012 2005-06-08 Fernando Perez <fperez@colorado.edu>
1008
1013
1009 * IPython/iplib.py (write/write_err): Add methods to abstract all
1014 * IPython/iplib.py (write/write_err): Add methods to abstract all
1010 I/O a bit more.
1015 I/O a bit more.
1011
1016
1012 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1017 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1013 warning, reported by Aric Hagberg, fix by JD Hunter.
1018 warning, reported by Aric Hagberg, fix by JD Hunter.
1014
1019
1015 2005-06-02 *** Released version 0.6.15
1020 2005-06-02 *** Released version 0.6.15
1016
1021
1017 2005-06-01 Fernando Perez <fperez@colorado.edu>
1022 2005-06-01 Fernando Perez <fperez@colorado.edu>
1018
1023
1019 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1024 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1020 tab-completion of filenames within open-quoted strings. Note that
1025 tab-completion of filenames within open-quoted strings. Note that
1021 this requires that in ~/.ipython/ipythonrc, users change the
1026 this requires that in ~/.ipython/ipythonrc, users change the
1022 readline delimiters configuration to read:
1027 readline delimiters configuration to read:
1023
1028
1024 readline_remove_delims -/~
1029 readline_remove_delims -/~
1025
1030
1026
1031
1027 2005-05-31 *** Released version 0.6.14
1032 2005-05-31 *** Released version 0.6.14
1028
1033
1029 2005-05-29 Fernando Perez <fperez@colorado.edu>
1034 2005-05-29 Fernando Perez <fperez@colorado.edu>
1030
1035
1031 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1036 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1032 with files not on the filesystem. Reported by Eliyahu Sandler
1037 with files not on the filesystem. Reported by Eliyahu Sandler
1033 <eli@gondolin.net>
1038 <eli@gondolin.net>
1034
1039
1035 2005-05-22 Fernando Perez <fperez@colorado.edu>
1040 2005-05-22 Fernando Perez <fperez@colorado.edu>
1036
1041
1037 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1042 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1038 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1043 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1039
1044
1040 2005-05-19 Fernando Perez <fperez@colorado.edu>
1045 2005-05-19 Fernando Perez <fperez@colorado.edu>
1041
1046
1042 * IPython/iplib.py (safe_execfile): close a file which could be
1047 * IPython/iplib.py (safe_execfile): close a file which could be
1043 left open (causing problems in win32, which locks open files).
1048 left open (causing problems in win32, which locks open files).
1044 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1049 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1045
1050
1046 2005-05-18 Fernando Perez <fperez@colorado.edu>
1051 2005-05-18 Fernando Perez <fperez@colorado.edu>
1047
1052
1048 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1053 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1049 keyword arguments correctly to safe_execfile().
1054 keyword arguments correctly to safe_execfile().
1050
1055
1051 2005-05-13 Fernando Perez <fperez@colorado.edu>
1056 2005-05-13 Fernando Perez <fperez@colorado.edu>
1052
1057
1053 * ipython.1: Added info about Qt to manpage, and threads warning
1058 * ipython.1: Added info about Qt to manpage, and threads warning
1054 to usage page (invoked with --help).
1059 to usage page (invoked with --help).
1055
1060
1056 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1061 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1057 new matcher (it goes at the end of the priority list) to do
1062 new matcher (it goes at the end of the priority list) to do
1058 tab-completion on named function arguments. Submitted by George
1063 tab-completion on named function arguments. Submitted by George
1059 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1064 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1060 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1065 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1061 for more details.
1066 for more details.
1062
1067
1063 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1068 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1064 SystemExit exceptions in the script being run. Thanks to a report
1069 SystemExit exceptions in the script being run. Thanks to a report
1065 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1070 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1066 producing very annoying behavior when running unit tests.
1071 producing very annoying behavior when running unit tests.
1067
1072
1068 2005-05-12 Fernando Perez <fperez@colorado.edu>
1073 2005-05-12 Fernando Perez <fperez@colorado.edu>
1069
1074
1070 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1075 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1071 which I'd broken (again) due to a changed regexp. In the process,
1076 which I'd broken (again) due to a changed regexp. In the process,
1072 added ';' as an escape to auto-quote the whole line without
1077 added ';' as an escape to auto-quote the whole line without
1073 splitting its arguments. Thanks to a report by Jerry McRae
1078 splitting its arguments. Thanks to a report by Jerry McRae
1074 <qrs0xyc02-AT-sneakemail.com>.
1079 <qrs0xyc02-AT-sneakemail.com>.
1075
1080
1076 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1081 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1077 possible crashes caused by a TokenError. Reported by Ed Schofield
1082 possible crashes caused by a TokenError. Reported by Ed Schofield
1078 <schofield-AT-ftw.at>.
1083 <schofield-AT-ftw.at>.
1079
1084
1080 2005-05-06 Fernando Perez <fperez@colorado.edu>
1085 2005-05-06 Fernando Perez <fperez@colorado.edu>
1081
1086
1082 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1087 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1083
1088
1084 2005-04-29 Fernando Perez <fperez@colorado.edu>
1089 2005-04-29 Fernando Perez <fperez@colorado.edu>
1085
1090
1086 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1091 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1087 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1092 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1088 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1093 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1089 which provides support for Qt interactive usage (similar to the
1094 which provides support for Qt interactive usage (similar to the
1090 existing one for WX and GTK). This had been often requested.
1095 existing one for WX and GTK). This had been often requested.
1091
1096
1092 2005-04-14 *** Released version 0.6.13
1097 2005-04-14 *** Released version 0.6.13
1093
1098
1094 2005-04-08 Fernando Perez <fperez@colorado.edu>
1099 2005-04-08 Fernando Perez <fperez@colorado.edu>
1095
1100
1096 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1101 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1097 from _ofind, which gets called on almost every input line. Now,
1102 from _ofind, which gets called on almost every input line. Now,
1098 we only try to get docstrings if they are actually going to be
1103 we only try to get docstrings if they are actually going to be
1099 used (the overhead of fetching unnecessary docstrings can be
1104 used (the overhead of fetching unnecessary docstrings can be
1100 noticeable for certain objects, such as Pyro proxies).
1105 noticeable for certain objects, such as Pyro proxies).
1101
1106
1102 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1107 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1103 for completers. For some reason I had been passing them the state
1108 for completers. For some reason I had been passing them the state
1104 variable, which completers never actually need, and was in
1109 variable, which completers never actually need, and was in
1105 conflict with the rlcompleter API. Custom completers ONLY need to
1110 conflict with the rlcompleter API. Custom completers ONLY need to
1106 take the text parameter.
1111 take the text parameter.
1107
1112
1108 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1113 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1109 work correctly in pysh. I've also moved all the logic which used
1114 work correctly in pysh. I've also moved all the logic which used
1110 to be in pysh.py here, which will prevent problems with future
1115 to be in pysh.py here, which will prevent problems with future
1111 upgrades. However, this time I must warn users to update their
1116 upgrades. However, this time I must warn users to update their
1112 pysh profile to include the line
1117 pysh profile to include the line
1113
1118
1114 import_all IPython.Extensions.InterpreterExec
1119 import_all IPython.Extensions.InterpreterExec
1115
1120
1116 because otherwise things won't work for them. They MUST also
1121 because otherwise things won't work for them. They MUST also
1117 delete pysh.py and the line
1122 delete pysh.py and the line
1118
1123
1119 execfile pysh.py
1124 execfile pysh.py
1120
1125
1121 from their ipythonrc-pysh.
1126 from their ipythonrc-pysh.
1122
1127
1123 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1128 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1124 robust in the face of objects whose dir() returns non-strings
1129 robust in the face of objects whose dir() returns non-strings
1125 (which it shouldn't, but some broken libs like ITK do). Thanks to
1130 (which it shouldn't, but some broken libs like ITK do). Thanks to
1126 a patch by John Hunter (implemented differently, though). Also
1131 a patch by John Hunter (implemented differently, though). Also
1127 minor improvements by using .extend instead of + on lists.
1132 minor improvements by using .extend instead of + on lists.
1128
1133
1129 * pysh.py:
1134 * pysh.py:
1130
1135
1131 2005-04-06 Fernando Perez <fperez@colorado.edu>
1136 2005-04-06 Fernando Perez <fperez@colorado.edu>
1132
1137
1133 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1138 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1134 by default, so that all users benefit from it. Those who don't
1139 by default, so that all users benefit from it. Those who don't
1135 want it can still turn it off.
1140 want it can still turn it off.
1136
1141
1137 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1142 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1138 config file, I'd forgotten about this, so users were getting it
1143 config file, I'd forgotten about this, so users were getting it
1139 off by default.
1144 off by default.
1140
1145
1141 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1146 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1142 consistency. Now magics can be called in multiline statements,
1147 consistency. Now magics can be called in multiline statements,
1143 and python variables can be expanded in magic calls via $var.
1148 and python variables can be expanded in magic calls via $var.
1144 This makes the magic system behave just like aliases or !system
1149 This makes the magic system behave just like aliases or !system
1145 calls.
1150 calls.
1146
1151
1147 2005-03-28 Fernando Perez <fperez@colorado.edu>
1152 2005-03-28 Fernando Perez <fperez@colorado.edu>
1148
1153
1149 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1154 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1150 expensive string additions for building command. Add support for
1155 expensive string additions for building command. Add support for
1151 trailing ';' when autocall is used.
1156 trailing ';' when autocall is used.
1152
1157
1153 2005-03-26 Fernando Perez <fperez@colorado.edu>
1158 2005-03-26 Fernando Perez <fperez@colorado.edu>
1154
1159
1155 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1160 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1156 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1161 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1157 ipython.el robust against prompts with any number of spaces
1162 ipython.el robust against prompts with any number of spaces
1158 (including 0) after the ':' character.
1163 (including 0) after the ':' character.
1159
1164
1160 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1165 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1161 continuation prompt, which misled users to think the line was
1166 continuation prompt, which misled users to think the line was
1162 already indented. Closes debian Bug#300847, reported to me by
1167 already indented. Closes debian Bug#300847, reported to me by
1163 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1168 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1164
1169
1165 2005-03-23 Fernando Perez <fperez@colorado.edu>
1170 2005-03-23 Fernando Perez <fperez@colorado.edu>
1166
1171
1167 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1172 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1168 properly aligned if they have embedded newlines.
1173 properly aligned if they have embedded newlines.
1169
1174
1170 * IPython/iplib.py (runlines): Add a public method to expose
1175 * IPython/iplib.py (runlines): Add a public method to expose
1171 IPython's code execution machinery, so that users can run strings
1176 IPython's code execution machinery, so that users can run strings
1172 as if they had been typed at the prompt interactively.
1177 as if they had been typed at the prompt interactively.
1173 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1178 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1174 methods which can call the system shell, but with python variable
1179 methods which can call the system shell, but with python variable
1175 expansion. The three such methods are: __IPYTHON__.system,
1180 expansion. The three such methods are: __IPYTHON__.system,
1176 .getoutput and .getoutputerror. These need to be documented in a
1181 .getoutput and .getoutputerror. These need to be documented in a
1177 'public API' section (to be written) of the manual.
1182 'public API' section (to be written) of the manual.
1178
1183
1179 2005-03-20 Fernando Perez <fperez@colorado.edu>
1184 2005-03-20 Fernando Perez <fperez@colorado.edu>
1180
1185
1181 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1186 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1182 for custom exception handling. This is quite powerful, and it
1187 for custom exception handling. This is quite powerful, and it
1183 allows for user-installable exception handlers which can trap
1188 allows for user-installable exception handlers which can trap
1184 custom exceptions at runtime and treat them separately from
1189 custom exceptions at runtime and treat them separately from
1185 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1190 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1186 Mantegazza <mantegazza-AT-ill.fr>.
1191 Mantegazza <mantegazza-AT-ill.fr>.
1187 (InteractiveShell.set_custom_completer): public API function to
1192 (InteractiveShell.set_custom_completer): public API function to
1188 add new completers at runtime.
1193 add new completers at runtime.
1189
1194
1190 2005-03-19 Fernando Perez <fperez@colorado.edu>
1195 2005-03-19 Fernando Perez <fperez@colorado.edu>
1191
1196
1192 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1197 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1193 allow objects which provide their docstrings via non-standard
1198 allow objects which provide their docstrings via non-standard
1194 mechanisms (like Pyro proxies) to still be inspected by ipython's
1199 mechanisms (like Pyro proxies) to still be inspected by ipython's
1195 ? system.
1200 ? system.
1196
1201
1197 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1202 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1198 automatic capture system. I tried quite hard to make it work
1203 automatic capture system. I tried quite hard to make it work
1199 reliably, and simply failed. I tried many combinations with the
1204 reliably, and simply failed. I tried many combinations with the
1200 subprocess module, but eventually nothing worked in all needed
1205 subprocess module, but eventually nothing worked in all needed
1201 cases (not blocking stdin for the child, duplicating stdout
1206 cases (not blocking stdin for the child, duplicating stdout
1202 without blocking, etc). The new %sc/%sx still do capture to these
1207 without blocking, etc). The new %sc/%sx still do capture to these
1203 magical list/string objects which make shell use much more
1208 magical list/string objects which make shell use much more
1204 conveninent, so not all is lost.
1209 conveninent, so not all is lost.
1205
1210
1206 XXX - FIX MANUAL for the change above!
1211 XXX - FIX MANUAL for the change above!
1207
1212
1208 (runsource): I copied code.py's runsource() into ipython to modify
1213 (runsource): I copied code.py's runsource() into ipython to modify
1209 it a bit. Now the code object and source to be executed are
1214 it a bit. Now the code object and source to be executed are
1210 stored in ipython. This makes this info accessible to third-party
1215 stored in ipython. This makes this info accessible to third-party
1211 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1216 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1212 Mantegazza <mantegazza-AT-ill.fr>.
1217 Mantegazza <mantegazza-AT-ill.fr>.
1213
1218
1214 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1219 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1215 history-search via readline (like C-p/C-n). I'd wanted this for a
1220 history-search via readline (like C-p/C-n). I'd wanted this for a
1216 long time, but only recently found out how to do it. For users
1221 long time, but only recently found out how to do it. For users
1217 who already have their ipythonrc files made and want this, just
1222 who already have their ipythonrc files made and want this, just
1218 add:
1223 add:
1219
1224
1220 readline_parse_and_bind "\e[A": history-search-backward
1225 readline_parse_and_bind "\e[A": history-search-backward
1221 readline_parse_and_bind "\e[B": history-search-forward
1226 readline_parse_and_bind "\e[B": history-search-forward
1222
1227
1223 2005-03-18 Fernando Perez <fperez@colorado.edu>
1228 2005-03-18 Fernando Perez <fperez@colorado.edu>
1224
1229
1225 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1230 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1226 LSString and SList classes which allow transparent conversions
1231 LSString and SList classes which allow transparent conversions
1227 between list mode and whitespace-separated string.
1232 between list mode and whitespace-separated string.
1228 (magic_r): Fix recursion problem in %r.
1233 (magic_r): Fix recursion problem in %r.
1229
1234
1230 * IPython/genutils.py (LSString): New class to be used for
1235 * IPython/genutils.py (LSString): New class to be used for
1231 automatic storage of the results of all alias/system calls in _o
1236 automatic storage of the results of all alias/system calls in _o
1232 and _e (stdout/err). These provide a .l/.list attribute which
1237 and _e (stdout/err). These provide a .l/.list attribute which
1233 does automatic splitting on newlines. This means that for most
1238 does automatic splitting on newlines. This means that for most
1234 uses, you'll never need to do capturing of output with %sc/%sx
1239 uses, you'll never need to do capturing of output with %sc/%sx
1235 anymore, since ipython keeps this always done for you. Note that
1240 anymore, since ipython keeps this always done for you. Note that
1236 only the LAST results are stored, the _o/e variables are
1241 only the LAST results are stored, the _o/e variables are
1237 overwritten on each call. If you need to save their contents
1242 overwritten on each call. If you need to save their contents
1238 further, simply bind them to any other name.
1243 further, simply bind them to any other name.
1239
1244
1240 2005-03-17 Fernando Perez <fperez@colorado.edu>
1245 2005-03-17 Fernando Perez <fperez@colorado.edu>
1241
1246
1242 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1247 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1243 prompt namespace handling.
1248 prompt namespace handling.
1244
1249
1245 2005-03-16 Fernando Perez <fperez@colorado.edu>
1250 2005-03-16 Fernando Perez <fperez@colorado.edu>
1246
1251
1247 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1252 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1248 classic prompts to be '>>> ' (final space was missing, and it
1253 classic prompts to be '>>> ' (final space was missing, and it
1249 trips the emacs python mode).
1254 trips the emacs python mode).
1250 (BasePrompt.__str__): Added safe support for dynamic prompt
1255 (BasePrompt.__str__): Added safe support for dynamic prompt
1251 strings. Now you can set your prompt string to be '$x', and the
1256 strings. Now you can set your prompt string to be '$x', and the
1252 value of x will be printed from your interactive namespace. The
1257 value of x will be printed from your interactive namespace. The
1253 interpolation syntax includes the full Itpl support, so
1258 interpolation syntax includes the full Itpl support, so
1254 ${foo()+x+bar()} is a valid prompt string now, and the function
1259 ${foo()+x+bar()} is a valid prompt string now, and the function
1255 calls will be made at runtime.
1260 calls will be made at runtime.
1256
1261
1257 2005-03-15 Fernando Perez <fperez@colorado.edu>
1262 2005-03-15 Fernando Perez <fperez@colorado.edu>
1258
1263
1259 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1264 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1260 avoid name clashes in pylab. %hist still works, it just forwards
1265 avoid name clashes in pylab. %hist still works, it just forwards
1261 the call to %history.
1266 the call to %history.
1262
1267
1263 2005-03-02 *** Released version 0.6.12
1268 2005-03-02 *** Released version 0.6.12
1264
1269
1265 2005-03-02 Fernando Perez <fperez@colorado.edu>
1270 2005-03-02 Fernando Perez <fperez@colorado.edu>
1266
1271
1267 * IPython/iplib.py (handle_magic): log magic calls properly as
1272 * IPython/iplib.py (handle_magic): log magic calls properly as
1268 ipmagic() function calls.
1273 ipmagic() function calls.
1269
1274
1270 * IPython/Magic.py (magic_time): Improved %time to support
1275 * IPython/Magic.py (magic_time): Improved %time to support
1271 statements and provide wall-clock as well as CPU time.
1276 statements and provide wall-clock as well as CPU time.
1272
1277
1273 2005-02-27 Fernando Perez <fperez@colorado.edu>
1278 2005-02-27 Fernando Perez <fperez@colorado.edu>
1274
1279
1275 * IPython/hooks.py: New hooks module, to expose user-modifiable
1280 * IPython/hooks.py: New hooks module, to expose user-modifiable
1276 IPython functionality in a clean manner. For now only the editor
1281 IPython functionality in a clean manner. For now only the editor
1277 hook is actually written, and other thigns which I intend to turn
1282 hook is actually written, and other thigns which I intend to turn
1278 into proper hooks aren't yet there. The display and prefilter
1283 into proper hooks aren't yet there. The display and prefilter
1279 stuff, for example, should be hooks. But at least now the
1284 stuff, for example, should be hooks. But at least now the
1280 framework is in place, and the rest can be moved here with more
1285 framework is in place, and the rest can be moved here with more
1281 time later. IPython had had a .hooks variable for a long time for
1286 time later. IPython had had a .hooks variable for a long time for
1282 this purpose, but I'd never actually used it for anything.
1287 this purpose, but I'd never actually used it for anything.
1283
1288
1284 2005-02-26 Fernando Perez <fperez@colorado.edu>
1289 2005-02-26 Fernando Perez <fperez@colorado.edu>
1285
1290
1286 * IPython/ipmaker.py (make_IPython): make the default ipython
1291 * IPython/ipmaker.py (make_IPython): make the default ipython
1287 directory be called _ipython under win32, to follow more the
1292 directory be called _ipython under win32, to follow more the
1288 naming peculiarities of that platform (where buggy software like
1293 naming peculiarities of that platform (where buggy software like
1289 Visual Sourcesafe breaks with .named directories). Reported by
1294 Visual Sourcesafe breaks with .named directories). Reported by
1290 Ville Vainio.
1295 Ville Vainio.
1291
1296
1292 2005-02-23 Fernando Perez <fperez@colorado.edu>
1297 2005-02-23 Fernando Perez <fperez@colorado.edu>
1293
1298
1294 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1299 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1295 auto_aliases for win32 which were causing problems. Users can
1300 auto_aliases for win32 which were causing problems. Users can
1296 define the ones they personally like.
1301 define the ones they personally like.
1297
1302
1298 2005-02-21 Fernando Perez <fperez@colorado.edu>
1303 2005-02-21 Fernando Perez <fperez@colorado.edu>
1299
1304
1300 * IPython/Magic.py (magic_time): new magic to time execution of
1305 * IPython/Magic.py (magic_time): new magic to time execution of
1301 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1306 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1302
1307
1303 2005-02-19 Fernando Perez <fperez@colorado.edu>
1308 2005-02-19 Fernando Perez <fperez@colorado.edu>
1304
1309
1305 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1310 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1306 into keys (for prompts, for example).
1311 into keys (for prompts, for example).
1307
1312
1308 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1313 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1309 prompts in case users want them. This introduces a small behavior
1314 prompts in case users want them. This introduces a small behavior
1310 change: ipython does not automatically add a space to all prompts
1315 change: ipython does not automatically add a space to all prompts
1311 anymore. To get the old prompts with a space, users should add it
1316 anymore. To get the old prompts with a space, users should add it
1312 manually to their ipythonrc file, so for example prompt_in1 should
1317 manually to their ipythonrc file, so for example prompt_in1 should
1313 now read 'In [\#]: ' instead of 'In [\#]:'.
1318 now read 'In [\#]: ' instead of 'In [\#]:'.
1314 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1319 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1315 file) to control left-padding of secondary prompts.
1320 file) to control left-padding of secondary prompts.
1316
1321
1317 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1322 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1318 the profiler can't be imported. Fix for Debian, which removed
1323 the profiler can't be imported. Fix for Debian, which removed
1319 profile.py because of License issues. I applied a slightly
1324 profile.py because of License issues. I applied a slightly
1320 modified version of the original Debian patch at
1325 modified version of the original Debian patch at
1321 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1326 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1322
1327
1323 2005-02-17 Fernando Perez <fperez@colorado.edu>
1328 2005-02-17 Fernando Perez <fperez@colorado.edu>
1324
1329
1325 * IPython/genutils.py (native_line_ends): Fix bug which would
1330 * IPython/genutils.py (native_line_ends): Fix bug which would
1326 cause improper line-ends under win32 b/c I was not opening files
1331 cause improper line-ends under win32 b/c I was not opening files
1327 in binary mode. Bug report and fix thanks to Ville.
1332 in binary mode. Bug report and fix thanks to Ville.
1328
1333
1329 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1334 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1330 trying to catch spurious foo[1] autocalls. My fix actually broke
1335 trying to catch spurious foo[1] autocalls. My fix actually broke
1331 ',/' autoquote/call with explicit escape (bad regexp).
1336 ',/' autoquote/call with explicit escape (bad regexp).
1332
1337
1333 2005-02-15 *** Released version 0.6.11
1338 2005-02-15 *** Released version 0.6.11
1334
1339
1335 2005-02-14 Fernando Perez <fperez@colorado.edu>
1340 2005-02-14 Fernando Perez <fperez@colorado.edu>
1336
1341
1337 * IPython/background_jobs.py: New background job management
1342 * IPython/background_jobs.py: New background job management
1338 subsystem. This is implemented via a new set of classes, and
1343 subsystem. This is implemented via a new set of classes, and
1339 IPython now provides a builtin 'jobs' object for background job
1344 IPython now provides a builtin 'jobs' object for background job
1340 execution. A convenience %bg magic serves as a lightweight
1345 execution. A convenience %bg magic serves as a lightweight
1341 frontend for starting the more common type of calls. This was
1346 frontend for starting the more common type of calls. This was
1342 inspired by discussions with B. Granger and the BackgroundCommand
1347 inspired by discussions with B. Granger and the BackgroundCommand
1343 class described in the book Python Scripting for Computational
1348 class described in the book Python Scripting for Computational
1344 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1349 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1345 (although ultimately no code from this text was used, as IPython's
1350 (although ultimately no code from this text was used, as IPython's
1346 system is a separate implementation).
1351 system is a separate implementation).
1347
1352
1348 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1353 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1349 to control the completion of single/double underscore names
1354 to control the completion of single/double underscore names
1350 separately. As documented in the example ipytonrc file, the
1355 separately. As documented in the example ipytonrc file, the
1351 readline_omit__names variable can now be set to 2, to omit even
1356 readline_omit__names variable can now be set to 2, to omit even
1352 single underscore names. Thanks to a patch by Brian Wong
1357 single underscore names. Thanks to a patch by Brian Wong
1353 <BrianWong-AT-AirgoNetworks.Com>.
1358 <BrianWong-AT-AirgoNetworks.Com>.
1354 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1359 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1355 be autocalled as foo([1]) if foo were callable. A problem for
1360 be autocalled as foo([1]) if foo were callable. A problem for
1356 things which are both callable and implement __getitem__.
1361 things which are both callable and implement __getitem__.
1357 (init_readline): Fix autoindentation for win32. Thanks to a patch
1362 (init_readline): Fix autoindentation for win32. Thanks to a patch
1358 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1363 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1359
1364
1360 2005-02-12 Fernando Perez <fperez@colorado.edu>
1365 2005-02-12 Fernando Perez <fperez@colorado.edu>
1361
1366
1362 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1367 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1363 which I had written long ago to sort out user error messages which
1368 which I had written long ago to sort out user error messages which
1364 may occur during startup. This seemed like a good idea initially,
1369 may occur during startup. This seemed like a good idea initially,
1365 but it has proven a disaster in retrospect. I don't want to
1370 but it has proven a disaster in retrospect. I don't want to
1366 change much code for now, so my fix is to set the internal 'debug'
1371 change much code for now, so my fix is to set the internal 'debug'
1367 flag to true everywhere, whose only job was precisely to control
1372 flag to true everywhere, whose only job was precisely to control
1368 this subsystem. This closes issue 28 (as well as avoiding all
1373 this subsystem. This closes issue 28 (as well as avoiding all
1369 sorts of strange hangups which occur from time to time).
1374 sorts of strange hangups which occur from time to time).
1370
1375
1371 2005-02-07 Fernando Perez <fperez@colorado.edu>
1376 2005-02-07 Fernando Perez <fperez@colorado.edu>
1372
1377
1373 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1378 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1374 previous call produced a syntax error.
1379 previous call produced a syntax error.
1375
1380
1376 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1381 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1377 classes without constructor.
1382 classes without constructor.
1378
1383
1379 2005-02-06 Fernando Perez <fperez@colorado.edu>
1384 2005-02-06 Fernando Perez <fperez@colorado.edu>
1380
1385
1381 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1386 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1382 completions with the results of each matcher, so we return results
1387 completions with the results of each matcher, so we return results
1383 to the user from all namespaces. This breaks with ipython
1388 to the user from all namespaces. This breaks with ipython
1384 tradition, but I think it's a nicer behavior. Now you get all
1389 tradition, but I think it's a nicer behavior. Now you get all
1385 possible completions listed, from all possible namespaces (python,
1390 possible completions listed, from all possible namespaces (python,
1386 filesystem, magics...) After a request by John Hunter
1391 filesystem, magics...) After a request by John Hunter
1387 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1392 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1388
1393
1389 2005-02-05 Fernando Perez <fperez@colorado.edu>
1394 2005-02-05 Fernando Perez <fperez@colorado.edu>
1390
1395
1391 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1396 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1392 the call had quote characters in it (the quotes were stripped).
1397 the call had quote characters in it (the quotes were stripped).
1393
1398
1394 2005-01-31 Fernando Perez <fperez@colorado.edu>
1399 2005-01-31 Fernando Perez <fperez@colorado.edu>
1395
1400
1396 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1401 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1397 Itpl.itpl() to make the code more robust against psyco
1402 Itpl.itpl() to make the code more robust against psyco
1398 optimizations.
1403 optimizations.
1399
1404
1400 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1405 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1401 of causing an exception. Quicker, cleaner.
1406 of causing an exception. Quicker, cleaner.
1402
1407
1403 2005-01-28 Fernando Perez <fperez@colorado.edu>
1408 2005-01-28 Fernando Perez <fperez@colorado.edu>
1404
1409
1405 * scripts/ipython_win_post_install.py (install): hardcode
1410 * scripts/ipython_win_post_install.py (install): hardcode
1406 sys.prefix+'python.exe' as the executable path. It turns out that
1411 sys.prefix+'python.exe' as the executable path. It turns out that
1407 during the post-installation run, sys.executable resolves to the
1412 during the post-installation run, sys.executable resolves to the
1408 name of the binary installer! I should report this as a distutils
1413 name of the binary installer! I should report this as a distutils
1409 bug, I think. I updated the .10 release with this tiny fix, to
1414 bug, I think. I updated the .10 release with this tiny fix, to
1410 avoid annoying the lists further.
1415 avoid annoying the lists further.
1411
1416
1412 2005-01-27 *** Released version 0.6.10
1417 2005-01-27 *** Released version 0.6.10
1413
1418
1414 2005-01-27 Fernando Perez <fperez@colorado.edu>
1419 2005-01-27 Fernando Perez <fperez@colorado.edu>
1415
1420
1416 * IPython/numutils.py (norm): Added 'inf' as optional name for
1421 * IPython/numutils.py (norm): Added 'inf' as optional name for
1417 L-infinity norm, included references to mathworld.com for vector
1422 L-infinity norm, included references to mathworld.com for vector
1418 norm definitions.
1423 norm definitions.
1419 (amin/amax): added amin/amax for array min/max. Similar to what
1424 (amin/amax): added amin/amax for array min/max. Similar to what
1420 pylab ships with after the recent reorganization of names.
1425 pylab ships with after the recent reorganization of names.
1421 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1426 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1422
1427
1423 * ipython.el: committed Alex's recent fixes and improvements.
1428 * ipython.el: committed Alex's recent fixes and improvements.
1424 Tested with python-mode from CVS, and it looks excellent. Since
1429 Tested with python-mode from CVS, and it looks excellent. Since
1425 python-mode hasn't released anything in a while, I'm temporarily
1430 python-mode hasn't released anything in a while, I'm temporarily
1426 putting a copy of today's CVS (v 4.70) of python-mode in:
1431 putting a copy of today's CVS (v 4.70) of python-mode in:
1427 http://ipython.scipy.org/tmp/python-mode.el
1432 http://ipython.scipy.org/tmp/python-mode.el
1428
1433
1429 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1434 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1430 sys.executable for the executable name, instead of assuming it's
1435 sys.executable for the executable name, instead of assuming it's
1431 called 'python.exe' (the post-installer would have produced broken
1436 called 'python.exe' (the post-installer would have produced broken
1432 setups on systems with a differently named python binary).
1437 setups on systems with a differently named python binary).
1433
1438
1434 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1439 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1435 references to os.linesep, to make the code more
1440 references to os.linesep, to make the code more
1436 platform-independent. This is also part of the win32 coloring
1441 platform-independent. This is also part of the win32 coloring
1437 fixes.
1442 fixes.
1438
1443
1439 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1444 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1440 lines, which actually cause coloring bugs because the length of
1445 lines, which actually cause coloring bugs because the length of
1441 the line is very difficult to correctly compute with embedded
1446 the line is very difficult to correctly compute with embedded
1442 escapes. This was the source of all the coloring problems under
1447 escapes. This was the source of all the coloring problems under
1443 Win32. I think that _finally_, Win32 users have a properly
1448 Win32. I think that _finally_, Win32 users have a properly
1444 working ipython in all respects. This would never have happened
1449 working ipython in all respects. This would never have happened
1445 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1450 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1446
1451
1447 2005-01-26 *** Released version 0.6.9
1452 2005-01-26 *** Released version 0.6.9
1448
1453
1449 2005-01-25 Fernando Perez <fperez@colorado.edu>
1454 2005-01-25 Fernando Perez <fperez@colorado.edu>
1450
1455
1451 * setup.py: finally, we have a true Windows installer, thanks to
1456 * setup.py: finally, we have a true Windows installer, thanks to
1452 the excellent work of Viktor Ransmayr
1457 the excellent work of Viktor Ransmayr
1453 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1458 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1454 Windows users. The setup routine is quite a bit cleaner thanks to
1459 Windows users. The setup routine is quite a bit cleaner thanks to
1455 this, and the post-install script uses the proper functions to
1460 this, and the post-install script uses the proper functions to
1456 allow a clean de-installation using the standard Windows Control
1461 allow a clean de-installation using the standard Windows Control
1457 Panel.
1462 Panel.
1458
1463
1459 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1464 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1460 environment variable under all OSes (including win32) if
1465 environment variable under all OSes (including win32) if
1461 available. This will give consistency to win32 users who have set
1466 available. This will give consistency to win32 users who have set
1462 this variable for any reason. If os.environ['HOME'] fails, the
1467 this variable for any reason. If os.environ['HOME'] fails, the
1463 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1468 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1464
1469
1465 2005-01-24 Fernando Perez <fperez@colorado.edu>
1470 2005-01-24 Fernando Perez <fperez@colorado.edu>
1466
1471
1467 * IPython/numutils.py (empty_like): add empty_like(), similar to
1472 * IPython/numutils.py (empty_like): add empty_like(), similar to
1468 zeros_like() but taking advantage of the new empty() Numeric routine.
1473 zeros_like() but taking advantage of the new empty() Numeric routine.
1469
1474
1470 2005-01-23 *** Released version 0.6.8
1475 2005-01-23 *** Released version 0.6.8
1471
1476
1472 2005-01-22 Fernando Perez <fperez@colorado.edu>
1477 2005-01-22 Fernando Perez <fperez@colorado.edu>
1473
1478
1474 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1479 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1475 automatic show() calls. After discussing things with JDH, it
1480 automatic show() calls. After discussing things with JDH, it
1476 turns out there are too many corner cases where this can go wrong.
1481 turns out there are too many corner cases where this can go wrong.
1477 It's best not to try to be 'too smart', and simply have ipython
1482 It's best not to try to be 'too smart', and simply have ipython
1478 reproduce as much as possible the default behavior of a normal
1483 reproduce as much as possible the default behavior of a normal
1479 python shell.
1484 python shell.
1480
1485
1481 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1486 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1482 line-splitting regexp and _prefilter() to avoid calling getattr()
1487 line-splitting regexp and _prefilter() to avoid calling getattr()
1483 on assignments. This closes
1488 on assignments. This closes
1484 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1489 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1485 readline uses getattr(), so a simple <TAB> keypress is still
1490 readline uses getattr(), so a simple <TAB> keypress is still
1486 enough to trigger getattr() calls on an object.
1491 enough to trigger getattr() calls on an object.
1487
1492
1488 2005-01-21 Fernando Perez <fperez@colorado.edu>
1493 2005-01-21 Fernando Perez <fperez@colorado.edu>
1489
1494
1490 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1495 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1491 docstring under pylab so it doesn't mask the original.
1496 docstring under pylab so it doesn't mask the original.
1492
1497
1493 2005-01-21 *** Released version 0.6.7
1498 2005-01-21 *** Released version 0.6.7
1494
1499
1495 2005-01-21 Fernando Perez <fperez@colorado.edu>
1500 2005-01-21 Fernando Perez <fperez@colorado.edu>
1496
1501
1497 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1502 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1498 signal handling for win32 users in multithreaded mode.
1503 signal handling for win32 users in multithreaded mode.
1499
1504
1500 2005-01-17 Fernando Perez <fperez@colorado.edu>
1505 2005-01-17 Fernando Perez <fperez@colorado.edu>
1501
1506
1502 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1507 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1503 instances with no __init__. After a crash report by Norbert Nemec
1508 instances with no __init__. After a crash report by Norbert Nemec
1504 <Norbert-AT-nemec-online.de>.
1509 <Norbert-AT-nemec-online.de>.
1505
1510
1506 2005-01-14 Fernando Perez <fperez@colorado.edu>
1511 2005-01-14 Fernando Perez <fperez@colorado.edu>
1507
1512
1508 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1513 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1509 names for verbose exceptions, when multiple dotted names and the
1514 names for verbose exceptions, when multiple dotted names and the
1510 'parent' object were present on the same line.
1515 'parent' object were present on the same line.
1511
1516
1512 2005-01-11 Fernando Perez <fperez@colorado.edu>
1517 2005-01-11 Fernando Perez <fperez@colorado.edu>
1513
1518
1514 * IPython/genutils.py (flag_calls): new utility to trap and flag
1519 * IPython/genutils.py (flag_calls): new utility to trap and flag
1515 calls in functions. I need it to clean up matplotlib support.
1520 calls in functions. I need it to clean up matplotlib support.
1516 Also removed some deprecated code in genutils.
1521 Also removed some deprecated code in genutils.
1517
1522
1518 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1523 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1519 that matplotlib scripts called with %run, which don't call show()
1524 that matplotlib scripts called with %run, which don't call show()
1520 themselves, still have their plotting windows open.
1525 themselves, still have their plotting windows open.
1521
1526
1522 2005-01-05 Fernando Perez <fperez@colorado.edu>
1527 2005-01-05 Fernando Perez <fperez@colorado.edu>
1523
1528
1524 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1529 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1525 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1530 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1526
1531
1527 2004-12-19 Fernando Perez <fperez@colorado.edu>
1532 2004-12-19 Fernando Perez <fperez@colorado.edu>
1528
1533
1529 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1534 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1530 parent_runcode, which was an eyesore. The same result can be
1535 parent_runcode, which was an eyesore. The same result can be
1531 obtained with Python's regular superclass mechanisms.
1536 obtained with Python's regular superclass mechanisms.
1532
1537
1533 2004-12-17 Fernando Perez <fperez@colorado.edu>
1538 2004-12-17 Fernando Perez <fperez@colorado.edu>
1534
1539
1535 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1540 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1536 reported by Prabhu.
1541 reported by Prabhu.
1537 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1542 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1538 sys.stderr) instead of explicitly calling sys.stderr. This helps
1543 sys.stderr) instead of explicitly calling sys.stderr. This helps
1539 maintain our I/O abstractions clean, for future GUI embeddings.
1544 maintain our I/O abstractions clean, for future GUI embeddings.
1540
1545
1541 * IPython/genutils.py (info): added new utility for sys.stderr
1546 * IPython/genutils.py (info): added new utility for sys.stderr
1542 unified info message handling (thin wrapper around warn()).
1547 unified info message handling (thin wrapper around warn()).
1543
1548
1544 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1549 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1545 composite (dotted) names on verbose exceptions.
1550 composite (dotted) names on verbose exceptions.
1546 (VerboseTB.nullrepr): harden against another kind of errors which
1551 (VerboseTB.nullrepr): harden against another kind of errors which
1547 Python's inspect module can trigger, and which were crashing
1552 Python's inspect module can trigger, and which were crashing
1548 IPython. Thanks to a report by Marco Lombardi
1553 IPython. Thanks to a report by Marco Lombardi
1549 <mlombard-AT-ma010192.hq.eso.org>.
1554 <mlombard-AT-ma010192.hq.eso.org>.
1550
1555
1551 2004-12-13 *** Released version 0.6.6
1556 2004-12-13 *** Released version 0.6.6
1552
1557
1553 2004-12-12 Fernando Perez <fperez@colorado.edu>
1558 2004-12-12 Fernando Perez <fperez@colorado.edu>
1554
1559
1555 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1560 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1556 generated by pygtk upon initialization if it was built without
1561 generated by pygtk upon initialization if it was built without
1557 threads (for matplotlib users). After a crash reported by
1562 threads (for matplotlib users). After a crash reported by
1558 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1563 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1559
1564
1560 * IPython/ipmaker.py (make_IPython): fix small bug in the
1565 * IPython/ipmaker.py (make_IPython): fix small bug in the
1561 import_some parameter for multiple imports.
1566 import_some parameter for multiple imports.
1562
1567
1563 * IPython/iplib.py (ipmagic): simplified the interface of
1568 * IPython/iplib.py (ipmagic): simplified the interface of
1564 ipmagic() to take a single string argument, just as it would be
1569 ipmagic() to take a single string argument, just as it would be
1565 typed at the IPython cmd line.
1570 typed at the IPython cmd line.
1566 (ipalias): Added new ipalias() with an interface identical to
1571 (ipalias): Added new ipalias() with an interface identical to
1567 ipmagic(). This completes exposing a pure python interface to the
1572 ipmagic(). This completes exposing a pure python interface to the
1568 alias and magic system, which can be used in loops or more complex
1573 alias and magic system, which can be used in loops or more complex
1569 code where IPython's automatic line mangling is not active.
1574 code where IPython's automatic line mangling is not active.
1570
1575
1571 * IPython/genutils.py (timing): changed interface of timing to
1576 * IPython/genutils.py (timing): changed interface of timing to
1572 simply run code once, which is the most common case. timings()
1577 simply run code once, which is the most common case. timings()
1573 remains unchanged, for the cases where you want multiple runs.
1578 remains unchanged, for the cases where you want multiple runs.
1574
1579
1575 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1580 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1576 bug where Python2.2 crashes with exec'ing code which does not end
1581 bug where Python2.2 crashes with exec'ing code which does not end
1577 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1582 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1578 before.
1583 before.
1579
1584
1580 2004-12-10 Fernando Perez <fperez@colorado.edu>
1585 2004-12-10 Fernando Perez <fperez@colorado.edu>
1581
1586
1582 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1587 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1583 -t to -T, to accomodate the new -t flag in %run (the %run and
1588 -t to -T, to accomodate the new -t flag in %run (the %run and
1584 %prun options are kind of intermixed, and it's not easy to change
1589 %prun options are kind of intermixed, and it's not easy to change
1585 this with the limitations of python's getopt).
1590 this with the limitations of python's getopt).
1586
1591
1587 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1592 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1588 the execution of scripts. It's not as fine-tuned as timeit.py,
1593 the execution of scripts. It's not as fine-tuned as timeit.py,
1589 but it works from inside ipython (and under 2.2, which lacks
1594 but it works from inside ipython (and under 2.2, which lacks
1590 timeit.py). Optionally a number of runs > 1 can be given for
1595 timeit.py). Optionally a number of runs > 1 can be given for
1591 timing very short-running code.
1596 timing very short-running code.
1592
1597
1593 * IPython/genutils.py (uniq_stable): new routine which returns a
1598 * IPython/genutils.py (uniq_stable): new routine which returns a
1594 list of unique elements in any iterable, but in stable order of
1599 list of unique elements in any iterable, but in stable order of
1595 appearance. I needed this for the ultraTB fixes, and it's a handy
1600 appearance. I needed this for the ultraTB fixes, and it's a handy
1596 utility.
1601 utility.
1597
1602
1598 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1603 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1599 dotted names in Verbose exceptions. This had been broken since
1604 dotted names in Verbose exceptions. This had been broken since
1600 the very start, now x.y will properly be printed in a Verbose
1605 the very start, now x.y will properly be printed in a Verbose
1601 traceback, instead of x being shown and y appearing always as an
1606 traceback, instead of x being shown and y appearing always as an
1602 'undefined global'. Getting this to work was a bit tricky,
1607 'undefined global'. Getting this to work was a bit tricky,
1603 because by default python tokenizers are stateless. Saved by
1608 because by default python tokenizers are stateless. Saved by
1604 python's ability to easily add a bit of state to an arbitrary
1609 python's ability to easily add a bit of state to an arbitrary
1605 function (without needing to build a full-blown callable object).
1610 function (without needing to build a full-blown callable object).
1606
1611
1607 Also big cleanup of this code, which had horrendous runtime
1612 Also big cleanup of this code, which had horrendous runtime
1608 lookups of zillions of attributes for colorization. Moved all
1613 lookups of zillions of attributes for colorization. Moved all
1609 this code into a few templates, which make it cleaner and quicker.
1614 this code into a few templates, which make it cleaner and quicker.
1610
1615
1611 Printout quality was also improved for Verbose exceptions: one
1616 Printout quality was also improved for Verbose exceptions: one
1612 variable per line, and memory addresses are printed (this can be
1617 variable per line, and memory addresses are printed (this can be
1613 quite handy in nasty debugging situations, which is what Verbose
1618 quite handy in nasty debugging situations, which is what Verbose
1614 is for).
1619 is for).
1615
1620
1616 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1621 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1617 the command line as scripts to be loaded by embedded instances.
1622 the command line as scripts to be loaded by embedded instances.
1618 Doing so has the potential for an infinite recursion if there are
1623 Doing so has the potential for an infinite recursion if there are
1619 exceptions thrown in the process. This fixes a strange crash
1624 exceptions thrown in the process. This fixes a strange crash
1620 reported by Philippe MULLER <muller-AT-irit.fr>.
1625 reported by Philippe MULLER <muller-AT-irit.fr>.
1621
1626
1622 2004-12-09 Fernando Perez <fperez@colorado.edu>
1627 2004-12-09 Fernando Perez <fperez@colorado.edu>
1623
1628
1624 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1629 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1625 to reflect new names in matplotlib, which now expose the
1630 to reflect new names in matplotlib, which now expose the
1626 matlab-compatible interface via a pylab module instead of the
1631 matlab-compatible interface via a pylab module instead of the
1627 'matlab' name. The new code is backwards compatible, so users of
1632 'matlab' name. The new code is backwards compatible, so users of
1628 all matplotlib versions are OK. Patch by J. Hunter.
1633 all matplotlib versions are OK. Patch by J. Hunter.
1629
1634
1630 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1635 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1631 of __init__ docstrings for instances (class docstrings are already
1636 of __init__ docstrings for instances (class docstrings are already
1632 automatically printed). Instances with customized docstrings
1637 automatically printed). Instances with customized docstrings
1633 (indep. of the class) are also recognized and all 3 separate
1638 (indep. of the class) are also recognized and all 3 separate
1634 docstrings are printed (instance, class, constructor). After some
1639 docstrings are printed (instance, class, constructor). After some
1635 comments/suggestions by J. Hunter.
1640 comments/suggestions by J. Hunter.
1636
1641
1637 2004-12-05 Fernando Perez <fperez@colorado.edu>
1642 2004-12-05 Fernando Perez <fperez@colorado.edu>
1638
1643
1639 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1644 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1640 warnings when tab-completion fails and triggers an exception.
1645 warnings when tab-completion fails and triggers an exception.
1641
1646
1642 2004-12-03 Fernando Perez <fperez@colorado.edu>
1647 2004-12-03 Fernando Perez <fperez@colorado.edu>
1643
1648
1644 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1649 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1645 be triggered when using 'run -p'. An incorrect option flag was
1650 be triggered when using 'run -p'. An incorrect option flag was
1646 being set ('d' instead of 'D').
1651 being set ('d' instead of 'D').
1647 (manpage): fix missing escaped \- sign.
1652 (manpage): fix missing escaped \- sign.
1648
1653
1649 2004-11-30 *** Released version 0.6.5
1654 2004-11-30 *** Released version 0.6.5
1650
1655
1651 2004-11-30 Fernando Perez <fperez@colorado.edu>
1656 2004-11-30 Fernando Perez <fperez@colorado.edu>
1652
1657
1653 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1658 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1654 setting with -d option.
1659 setting with -d option.
1655
1660
1656 * setup.py (docfiles): Fix problem where the doc glob I was using
1661 * setup.py (docfiles): Fix problem where the doc glob I was using
1657 was COMPLETELY BROKEN. It was giving the right files by pure
1662 was COMPLETELY BROKEN. It was giving the right files by pure
1658 accident, but failed once I tried to include ipython.el. Note:
1663 accident, but failed once I tried to include ipython.el. Note:
1659 glob() does NOT allow you to do exclusion on multiple endings!
1664 glob() does NOT allow you to do exclusion on multiple endings!
1660
1665
1661 2004-11-29 Fernando Perez <fperez@colorado.edu>
1666 2004-11-29 Fernando Perez <fperez@colorado.edu>
1662
1667
1663 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1668 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1664 the manpage as the source. Better formatting & consistency.
1669 the manpage as the source. Better formatting & consistency.
1665
1670
1666 * IPython/Magic.py (magic_run): Added new -d option, to run
1671 * IPython/Magic.py (magic_run): Added new -d option, to run
1667 scripts under the control of the python pdb debugger. Note that
1672 scripts under the control of the python pdb debugger. Note that
1668 this required changing the %prun option -d to -D, to avoid a clash
1673 this required changing the %prun option -d to -D, to avoid a clash
1669 (since %run must pass options to %prun, and getopt is too dumb to
1674 (since %run must pass options to %prun, and getopt is too dumb to
1670 handle options with string values with embedded spaces). Thanks
1675 handle options with string values with embedded spaces). Thanks
1671 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1676 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1672 (magic_who_ls): added type matching to %who and %whos, so that one
1677 (magic_who_ls): added type matching to %who and %whos, so that one
1673 can filter their output to only include variables of certain
1678 can filter their output to only include variables of certain
1674 types. Another suggestion by Matthew.
1679 types. Another suggestion by Matthew.
1675 (magic_whos): Added memory summaries in kb and Mb for arrays.
1680 (magic_whos): Added memory summaries in kb and Mb for arrays.
1676 (magic_who): Improve formatting (break lines every 9 vars).
1681 (magic_who): Improve formatting (break lines every 9 vars).
1677
1682
1678 2004-11-28 Fernando Perez <fperez@colorado.edu>
1683 2004-11-28 Fernando Perez <fperez@colorado.edu>
1679
1684
1680 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1685 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1681 cache when empty lines were present.
1686 cache when empty lines were present.
1682
1687
1683 2004-11-24 Fernando Perez <fperez@colorado.edu>
1688 2004-11-24 Fernando Perez <fperez@colorado.edu>
1684
1689
1685 * IPython/usage.py (__doc__): document the re-activated threading
1690 * IPython/usage.py (__doc__): document the re-activated threading
1686 options for WX and GTK.
1691 options for WX and GTK.
1687
1692
1688 2004-11-23 Fernando Perez <fperez@colorado.edu>
1693 2004-11-23 Fernando Perez <fperez@colorado.edu>
1689
1694
1690 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1695 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1691 the -wthread and -gthread options, along with a new -tk one to try
1696 the -wthread and -gthread options, along with a new -tk one to try
1692 and coordinate Tk threading with wx/gtk. The tk support is very
1697 and coordinate Tk threading with wx/gtk. The tk support is very
1693 platform dependent, since it seems to require Tcl and Tk to be
1698 platform dependent, since it seems to require Tcl and Tk to be
1694 built with threads (Fedora1/2 appears NOT to have it, but in
1699 built with threads (Fedora1/2 appears NOT to have it, but in
1695 Prabhu's Debian boxes it works OK). But even with some Tk
1700 Prabhu's Debian boxes it works OK). But even with some Tk
1696 limitations, this is a great improvement.
1701 limitations, this is a great improvement.
1697
1702
1698 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1703 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1699 info in user prompts. Patch by Prabhu.
1704 info in user prompts. Patch by Prabhu.
1700
1705
1701 2004-11-18 Fernando Perez <fperez@colorado.edu>
1706 2004-11-18 Fernando Perez <fperez@colorado.edu>
1702
1707
1703 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1708 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1704 EOFErrors and bail, to avoid infinite loops if a non-terminating
1709 EOFErrors and bail, to avoid infinite loops if a non-terminating
1705 file is fed into ipython. Patch submitted in issue 19 by user,
1710 file is fed into ipython. Patch submitted in issue 19 by user,
1706 many thanks.
1711 many thanks.
1707
1712
1708 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1713 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1709 autoquote/parens in continuation prompts, which can cause lots of
1714 autoquote/parens in continuation prompts, which can cause lots of
1710 problems. Closes roundup issue 20.
1715 problems. Closes roundup issue 20.
1711
1716
1712 2004-11-17 Fernando Perez <fperez@colorado.edu>
1717 2004-11-17 Fernando Perez <fperez@colorado.edu>
1713
1718
1714 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1719 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1715 reported as debian bug #280505. I'm not sure my local changelog
1720 reported as debian bug #280505. I'm not sure my local changelog
1716 entry has the proper debian format (Jack?).
1721 entry has the proper debian format (Jack?).
1717
1722
1718 2004-11-08 *** Released version 0.6.4
1723 2004-11-08 *** Released version 0.6.4
1719
1724
1720 2004-11-08 Fernando Perez <fperez@colorado.edu>
1725 2004-11-08 Fernando Perez <fperez@colorado.edu>
1721
1726
1722 * IPython/iplib.py (init_readline): Fix exit message for Windows
1727 * IPython/iplib.py (init_readline): Fix exit message for Windows
1723 when readline is active. Thanks to a report by Eric Jones
1728 when readline is active. Thanks to a report by Eric Jones
1724 <eric-AT-enthought.com>.
1729 <eric-AT-enthought.com>.
1725
1730
1726 2004-11-07 Fernando Perez <fperez@colorado.edu>
1731 2004-11-07 Fernando Perez <fperez@colorado.edu>
1727
1732
1728 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1733 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1729 sometimes seen by win2k/cygwin users.
1734 sometimes seen by win2k/cygwin users.
1730
1735
1731 2004-11-06 Fernando Perez <fperez@colorado.edu>
1736 2004-11-06 Fernando Perez <fperez@colorado.edu>
1732
1737
1733 * IPython/iplib.py (interact): Change the handling of %Exit from
1738 * IPython/iplib.py (interact): Change the handling of %Exit from
1734 trying to propagate a SystemExit to an internal ipython flag.
1739 trying to propagate a SystemExit to an internal ipython flag.
1735 This is less elegant than using Python's exception mechanism, but
1740 This is less elegant than using Python's exception mechanism, but
1736 I can't get that to work reliably with threads, so under -pylab
1741 I can't get that to work reliably with threads, so under -pylab
1737 %Exit was hanging IPython. Cross-thread exception handling is
1742 %Exit was hanging IPython. Cross-thread exception handling is
1738 really a bitch. Thaks to a bug report by Stephen Walton
1743 really a bitch. Thaks to a bug report by Stephen Walton
1739 <stephen.walton-AT-csun.edu>.
1744 <stephen.walton-AT-csun.edu>.
1740
1745
1741 2004-11-04 Fernando Perez <fperez@colorado.edu>
1746 2004-11-04 Fernando Perez <fperez@colorado.edu>
1742
1747
1743 * IPython/iplib.py (raw_input_original): store a pointer to the
1748 * IPython/iplib.py (raw_input_original): store a pointer to the
1744 true raw_input to harden against code which can modify it
1749 true raw_input to harden against code which can modify it
1745 (wx.py.PyShell does this and would otherwise crash ipython).
1750 (wx.py.PyShell does this and would otherwise crash ipython).
1746 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1751 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1747
1752
1748 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1753 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1749 Ctrl-C problem, which does not mess up the input line.
1754 Ctrl-C problem, which does not mess up the input line.
1750
1755
1751 2004-11-03 Fernando Perez <fperez@colorado.edu>
1756 2004-11-03 Fernando Perez <fperez@colorado.edu>
1752
1757
1753 * IPython/Release.py: Changed licensing to BSD, in all files.
1758 * IPython/Release.py: Changed licensing to BSD, in all files.
1754 (name): lowercase name for tarball/RPM release.
1759 (name): lowercase name for tarball/RPM release.
1755
1760
1756 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1761 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1757 use throughout ipython.
1762 use throughout ipython.
1758
1763
1759 * IPython/Magic.py (Magic._ofind): Switch to using the new
1764 * IPython/Magic.py (Magic._ofind): Switch to using the new
1760 OInspect.getdoc() function.
1765 OInspect.getdoc() function.
1761
1766
1762 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1767 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1763 of the line currently being canceled via Ctrl-C. It's extremely
1768 of the line currently being canceled via Ctrl-C. It's extremely
1764 ugly, but I don't know how to do it better (the problem is one of
1769 ugly, but I don't know how to do it better (the problem is one of
1765 handling cross-thread exceptions).
1770 handling cross-thread exceptions).
1766
1771
1767 2004-10-28 Fernando Perez <fperez@colorado.edu>
1772 2004-10-28 Fernando Perez <fperez@colorado.edu>
1768
1773
1769 * IPython/Shell.py (signal_handler): add signal handlers to trap
1774 * IPython/Shell.py (signal_handler): add signal handlers to trap
1770 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1775 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1771 report by Francesc Alted.
1776 report by Francesc Alted.
1772
1777
1773 2004-10-21 Fernando Perez <fperez@colorado.edu>
1778 2004-10-21 Fernando Perez <fperez@colorado.edu>
1774
1779
1775 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1780 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1776 to % for pysh syntax extensions.
1781 to % for pysh syntax extensions.
1777
1782
1778 2004-10-09 Fernando Perez <fperez@colorado.edu>
1783 2004-10-09 Fernando Perez <fperez@colorado.edu>
1779
1784
1780 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1785 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1781 arrays to print a more useful summary, without calling str(arr).
1786 arrays to print a more useful summary, without calling str(arr).
1782 This avoids the problem of extremely lengthy computations which
1787 This avoids the problem of extremely lengthy computations which
1783 occur if arr is large, and appear to the user as a system lockup
1788 occur if arr is large, and appear to the user as a system lockup
1784 with 100% cpu activity. After a suggestion by Kristian Sandberg
1789 with 100% cpu activity. After a suggestion by Kristian Sandberg
1785 <Kristian.Sandberg@colorado.edu>.
1790 <Kristian.Sandberg@colorado.edu>.
1786 (Magic.__init__): fix bug in global magic escapes not being
1791 (Magic.__init__): fix bug in global magic escapes not being
1787 correctly set.
1792 correctly set.
1788
1793
1789 2004-10-08 Fernando Perez <fperez@colorado.edu>
1794 2004-10-08 Fernando Perez <fperez@colorado.edu>
1790
1795
1791 * IPython/Magic.py (__license__): change to absolute imports of
1796 * IPython/Magic.py (__license__): change to absolute imports of
1792 ipython's own internal packages, to start adapting to the absolute
1797 ipython's own internal packages, to start adapting to the absolute
1793 import requirement of PEP-328.
1798 import requirement of PEP-328.
1794
1799
1795 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1800 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1796 files, and standardize author/license marks through the Release
1801 files, and standardize author/license marks through the Release
1797 module instead of having per/file stuff (except for files with
1802 module instead of having per/file stuff (except for files with
1798 particular licenses, like the MIT/PSF-licensed codes).
1803 particular licenses, like the MIT/PSF-licensed codes).
1799
1804
1800 * IPython/Debugger.py: remove dead code for python 2.1
1805 * IPython/Debugger.py: remove dead code for python 2.1
1801
1806
1802 2004-10-04 Fernando Perez <fperez@colorado.edu>
1807 2004-10-04 Fernando Perez <fperez@colorado.edu>
1803
1808
1804 * IPython/iplib.py (ipmagic): New function for accessing magics
1809 * IPython/iplib.py (ipmagic): New function for accessing magics
1805 via a normal python function call.
1810 via a normal python function call.
1806
1811
1807 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1812 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1808 from '@' to '%', to accomodate the new @decorator syntax of python
1813 from '@' to '%', to accomodate the new @decorator syntax of python
1809 2.4.
1814 2.4.
1810
1815
1811 2004-09-29 Fernando Perez <fperez@colorado.edu>
1816 2004-09-29 Fernando Perez <fperez@colorado.edu>
1812
1817
1813 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1818 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1814 matplotlib.use to prevent running scripts which try to switch
1819 matplotlib.use to prevent running scripts which try to switch
1815 interactive backends from within ipython. This will just crash
1820 interactive backends from within ipython. This will just crash
1816 the python interpreter, so we can't allow it (but a detailed error
1821 the python interpreter, so we can't allow it (but a detailed error
1817 is given to the user).
1822 is given to the user).
1818
1823
1819 2004-09-28 Fernando Perez <fperez@colorado.edu>
1824 2004-09-28 Fernando Perez <fperez@colorado.edu>
1820
1825
1821 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1826 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1822 matplotlib-related fixes so that using @run with non-matplotlib
1827 matplotlib-related fixes so that using @run with non-matplotlib
1823 scripts doesn't pop up spurious plot windows. This requires
1828 scripts doesn't pop up spurious plot windows. This requires
1824 matplotlib >= 0.63, where I had to make some changes as well.
1829 matplotlib >= 0.63, where I had to make some changes as well.
1825
1830
1826 * IPython/ipmaker.py (make_IPython): update version requirement to
1831 * IPython/ipmaker.py (make_IPython): update version requirement to
1827 python 2.2.
1832 python 2.2.
1828
1833
1829 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1834 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1830 banner arg for embedded customization.
1835 banner arg for embedded customization.
1831
1836
1832 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1837 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1833 explicit uses of __IP as the IPython's instance name. Now things
1838 explicit uses of __IP as the IPython's instance name. Now things
1834 are properly handled via the shell.name value. The actual code
1839 are properly handled via the shell.name value. The actual code
1835 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1840 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1836 is much better than before. I'll clean things completely when the
1841 is much better than before. I'll clean things completely when the
1837 magic stuff gets a real overhaul.
1842 magic stuff gets a real overhaul.
1838
1843
1839 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1844 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1840 minor changes to debian dir.
1845 minor changes to debian dir.
1841
1846
1842 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1847 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1843 pointer to the shell itself in the interactive namespace even when
1848 pointer to the shell itself in the interactive namespace even when
1844 a user-supplied dict is provided. This is needed for embedding
1849 a user-supplied dict is provided. This is needed for embedding
1845 purposes (found by tests with Michel Sanner).
1850 purposes (found by tests with Michel Sanner).
1846
1851
1847 2004-09-27 Fernando Perez <fperez@colorado.edu>
1852 2004-09-27 Fernando Perez <fperez@colorado.edu>
1848
1853
1849 * IPython/UserConfig/ipythonrc: remove []{} from
1854 * IPython/UserConfig/ipythonrc: remove []{} from
1850 readline_remove_delims, so that things like [modname.<TAB> do
1855 readline_remove_delims, so that things like [modname.<TAB> do
1851 proper completion. This disables [].TAB, but that's a less common
1856 proper completion. This disables [].TAB, but that's a less common
1852 case than module names in list comprehensions, for example.
1857 case than module names in list comprehensions, for example.
1853 Thanks to a report by Andrea Riciputi.
1858 Thanks to a report by Andrea Riciputi.
1854
1859
1855 2004-09-09 Fernando Perez <fperez@colorado.edu>
1860 2004-09-09 Fernando Perez <fperez@colorado.edu>
1856
1861
1857 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1862 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1858 blocking problems in win32 and osx. Fix by John.
1863 blocking problems in win32 and osx. Fix by John.
1859
1864
1860 2004-09-08 Fernando Perez <fperez@colorado.edu>
1865 2004-09-08 Fernando Perez <fperez@colorado.edu>
1861
1866
1862 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1867 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1863 for Win32 and OSX. Fix by John Hunter.
1868 for Win32 and OSX. Fix by John Hunter.
1864
1869
1865 2004-08-30 *** Released version 0.6.3
1870 2004-08-30 *** Released version 0.6.3
1866
1871
1867 2004-08-30 Fernando Perez <fperez@colorado.edu>
1872 2004-08-30 Fernando Perez <fperez@colorado.edu>
1868
1873
1869 * setup.py (isfile): Add manpages to list of dependent files to be
1874 * setup.py (isfile): Add manpages to list of dependent files to be
1870 updated.
1875 updated.
1871
1876
1872 2004-08-27 Fernando Perez <fperez@colorado.edu>
1877 2004-08-27 Fernando Perez <fperez@colorado.edu>
1873
1878
1874 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1879 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1875 for now. They don't really work with standalone WX/GTK code
1880 for now. They don't really work with standalone WX/GTK code
1876 (though matplotlib IS working fine with both of those backends).
1881 (though matplotlib IS working fine with both of those backends).
1877 This will neeed much more testing. I disabled most things with
1882 This will neeed much more testing. I disabled most things with
1878 comments, so turning it back on later should be pretty easy.
1883 comments, so turning it back on later should be pretty easy.
1879
1884
1880 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1885 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1881 autocalling of expressions like r'foo', by modifying the line
1886 autocalling of expressions like r'foo', by modifying the line
1882 split regexp. Closes
1887 split regexp. Closes
1883 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1888 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1884 Riley <ipythonbugs-AT-sabi.net>.
1889 Riley <ipythonbugs-AT-sabi.net>.
1885 (InteractiveShell.mainloop): honor --nobanner with banner
1890 (InteractiveShell.mainloop): honor --nobanner with banner
1886 extensions.
1891 extensions.
1887
1892
1888 * IPython/Shell.py: Significant refactoring of all classes, so
1893 * IPython/Shell.py: Significant refactoring of all classes, so
1889 that we can really support ALL matplotlib backends and threading
1894 that we can really support ALL matplotlib backends and threading
1890 models (John spotted a bug with Tk which required this). Now we
1895 models (John spotted a bug with Tk which required this). Now we
1891 should support single-threaded, WX-threads and GTK-threads, both
1896 should support single-threaded, WX-threads and GTK-threads, both
1892 for generic code and for matplotlib.
1897 for generic code and for matplotlib.
1893
1898
1894 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1899 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1895 -pylab, to simplify things for users. Will also remove the pylab
1900 -pylab, to simplify things for users. Will also remove the pylab
1896 profile, since now all of matplotlib configuration is directly
1901 profile, since now all of matplotlib configuration is directly
1897 handled here. This also reduces startup time.
1902 handled here. This also reduces startup time.
1898
1903
1899 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1904 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1900 shell wasn't being correctly called. Also in IPShellWX.
1905 shell wasn't being correctly called. Also in IPShellWX.
1901
1906
1902 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1907 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1903 fine-tune banner.
1908 fine-tune banner.
1904
1909
1905 * IPython/numutils.py (spike): Deprecate these spike functions,
1910 * IPython/numutils.py (spike): Deprecate these spike functions,
1906 delete (long deprecated) gnuplot_exec handler.
1911 delete (long deprecated) gnuplot_exec handler.
1907
1912
1908 2004-08-26 Fernando Perez <fperez@colorado.edu>
1913 2004-08-26 Fernando Perez <fperez@colorado.edu>
1909
1914
1910 * ipython.1: Update for threading options, plus some others which
1915 * ipython.1: Update for threading options, plus some others which
1911 were missing.
1916 were missing.
1912
1917
1913 * IPython/ipmaker.py (__call__): Added -wthread option for
1918 * IPython/ipmaker.py (__call__): Added -wthread option for
1914 wxpython thread handling. Make sure threading options are only
1919 wxpython thread handling. Make sure threading options are only
1915 valid at the command line.
1920 valid at the command line.
1916
1921
1917 * scripts/ipython: moved shell selection into a factory function
1922 * scripts/ipython: moved shell selection into a factory function
1918 in Shell.py, to keep the starter script to a minimum.
1923 in Shell.py, to keep the starter script to a minimum.
1919
1924
1920 2004-08-25 Fernando Perez <fperez@colorado.edu>
1925 2004-08-25 Fernando Perez <fperez@colorado.edu>
1921
1926
1922 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1927 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1923 John. Along with some recent changes he made to matplotlib, the
1928 John. Along with some recent changes he made to matplotlib, the
1924 next versions of both systems should work very well together.
1929 next versions of both systems should work very well together.
1925
1930
1926 2004-08-24 Fernando Perez <fperez@colorado.edu>
1931 2004-08-24 Fernando Perez <fperez@colorado.edu>
1927
1932
1928 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1933 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1929 tried to switch the profiling to using hotshot, but I'm getting
1934 tried to switch the profiling to using hotshot, but I'm getting
1930 strange errors from prof.runctx() there. I may be misreading the
1935 strange errors from prof.runctx() there. I may be misreading the
1931 docs, but it looks weird. For now the profiling code will
1936 docs, but it looks weird. For now the profiling code will
1932 continue to use the standard profiler.
1937 continue to use the standard profiler.
1933
1938
1934 2004-08-23 Fernando Perez <fperez@colorado.edu>
1939 2004-08-23 Fernando Perez <fperez@colorado.edu>
1935
1940
1936 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1941 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1937 threaded shell, by John Hunter. It's not quite ready yet, but
1942 threaded shell, by John Hunter. It's not quite ready yet, but
1938 close.
1943 close.
1939
1944
1940 2004-08-22 Fernando Perez <fperez@colorado.edu>
1945 2004-08-22 Fernando Perez <fperez@colorado.edu>
1941
1946
1942 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1947 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1943 in Magic and ultraTB.
1948 in Magic and ultraTB.
1944
1949
1945 * ipython.1: document threading options in manpage.
1950 * ipython.1: document threading options in manpage.
1946
1951
1947 * scripts/ipython: Changed name of -thread option to -gthread,
1952 * scripts/ipython: Changed name of -thread option to -gthread,
1948 since this is GTK specific. I want to leave the door open for a
1953 since this is GTK specific. I want to leave the door open for a
1949 -wthread option for WX, which will most likely be necessary. This
1954 -wthread option for WX, which will most likely be necessary. This
1950 change affects usage and ipmaker as well.
1955 change affects usage and ipmaker as well.
1951
1956
1952 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1957 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1953 handle the matplotlib shell issues. Code by John Hunter
1958 handle the matplotlib shell issues. Code by John Hunter
1954 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1959 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1955 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1960 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1956 broken (and disabled for end users) for now, but it puts the
1961 broken (and disabled for end users) for now, but it puts the
1957 infrastructure in place.
1962 infrastructure in place.
1958
1963
1959 2004-08-21 Fernando Perez <fperez@colorado.edu>
1964 2004-08-21 Fernando Perez <fperez@colorado.edu>
1960
1965
1961 * ipythonrc-pylab: Add matplotlib support.
1966 * ipythonrc-pylab: Add matplotlib support.
1962
1967
1963 * matplotlib_config.py: new files for matplotlib support, part of
1968 * matplotlib_config.py: new files for matplotlib support, part of
1964 the pylab profile.
1969 the pylab profile.
1965
1970
1966 * IPython/usage.py (__doc__): documented the threading options.
1971 * IPython/usage.py (__doc__): documented the threading options.
1967
1972
1968 2004-08-20 Fernando Perez <fperez@colorado.edu>
1973 2004-08-20 Fernando Perez <fperez@colorado.edu>
1969
1974
1970 * ipython: Modified the main calling routine to handle the -thread
1975 * ipython: Modified the main calling routine to handle the -thread
1971 and -mpthread options. This needs to be done as a top-level hack,
1976 and -mpthread options. This needs to be done as a top-level hack,
1972 because it determines which class to instantiate for IPython
1977 because it determines which class to instantiate for IPython
1973 itself.
1978 itself.
1974
1979
1975 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1980 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1976 classes to support multithreaded GTK operation without blocking,
1981 classes to support multithreaded GTK operation without blocking,
1977 and matplotlib with all backends. This is a lot of still very
1982 and matplotlib with all backends. This is a lot of still very
1978 experimental code, and threads are tricky. So it may still have a
1983 experimental code, and threads are tricky. So it may still have a
1979 few rough edges... This code owes a lot to
1984 few rough edges... This code owes a lot to
1980 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1985 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1981 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1986 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1982 to John Hunter for all the matplotlib work.
1987 to John Hunter for all the matplotlib work.
1983
1988
1984 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1989 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1985 options for gtk thread and matplotlib support.
1990 options for gtk thread and matplotlib support.
1986
1991
1987 2004-08-16 Fernando Perez <fperez@colorado.edu>
1992 2004-08-16 Fernando Perez <fperez@colorado.edu>
1988
1993
1989 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1994 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1990 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1995 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1991 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1996 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1992
1997
1993 2004-08-11 Fernando Perez <fperez@colorado.edu>
1998 2004-08-11 Fernando Perez <fperez@colorado.edu>
1994
1999
1995 * setup.py (isfile): Fix build so documentation gets updated for
2000 * setup.py (isfile): Fix build so documentation gets updated for
1996 rpms (it was only done for .tgz builds).
2001 rpms (it was only done for .tgz builds).
1997
2002
1998 2004-08-10 Fernando Perez <fperez@colorado.edu>
2003 2004-08-10 Fernando Perez <fperez@colorado.edu>
1999
2004
2000 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2005 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2001
2006
2002 * iplib.py : Silence syntax error exceptions in tab-completion.
2007 * iplib.py : Silence syntax error exceptions in tab-completion.
2003
2008
2004 2004-08-05 Fernando Perez <fperez@colorado.edu>
2009 2004-08-05 Fernando Perez <fperez@colorado.edu>
2005
2010
2006 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2011 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2007 'color off' mark for continuation prompts. This was causing long
2012 'color off' mark for continuation prompts. This was causing long
2008 continuation lines to mis-wrap.
2013 continuation lines to mis-wrap.
2009
2014
2010 2004-08-01 Fernando Perez <fperez@colorado.edu>
2015 2004-08-01 Fernando Perez <fperez@colorado.edu>
2011
2016
2012 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2017 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2013 for building ipython to be a parameter. All this is necessary
2018 for building ipython to be a parameter. All this is necessary
2014 right now to have a multithreaded version, but this insane
2019 right now to have a multithreaded version, but this insane
2015 non-design will be cleaned up soon. For now, it's a hack that
2020 non-design will be cleaned up soon. For now, it's a hack that
2016 works.
2021 works.
2017
2022
2018 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2023 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2019 args in various places. No bugs so far, but it's a dangerous
2024 args in various places. No bugs so far, but it's a dangerous
2020 practice.
2025 practice.
2021
2026
2022 2004-07-31 Fernando Perez <fperez@colorado.edu>
2027 2004-07-31 Fernando Perez <fperez@colorado.edu>
2023
2028
2024 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2029 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2025 fix completion of files with dots in their names under most
2030 fix completion of files with dots in their names under most
2026 profiles (pysh was OK because the completion order is different).
2031 profiles (pysh was OK because the completion order is different).
2027
2032
2028 2004-07-27 Fernando Perez <fperez@colorado.edu>
2033 2004-07-27 Fernando Perez <fperez@colorado.edu>
2029
2034
2030 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2035 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2031 keywords manually, b/c the one in keyword.py was removed in python
2036 keywords manually, b/c the one in keyword.py was removed in python
2032 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2037 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2033 This is NOT a bug under python 2.3 and earlier.
2038 This is NOT a bug under python 2.3 and earlier.
2034
2039
2035 2004-07-26 Fernando Perez <fperez@colorado.edu>
2040 2004-07-26 Fernando Perez <fperez@colorado.edu>
2036
2041
2037 * IPython/ultraTB.py (VerboseTB.text): Add another
2042 * IPython/ultraTB.py (VerboseTB.text): Add another
2038 linecache.checkcache() call to try to prevent inspect.py from
2043 linecache.checkcache() call to try to prevent inspect.py from
2039 crashing under python 2.3. I think this fixes
2044 crashing under python 2.3. I think this fixes
2040 http://www.scipy.net/roundup/ipython/issue17.
2045 http://www.scipy.net/roundup/ipython/issue17.
2041
2046
2042 2004-07-26 *** Released version 0.6.2
2047 2004-07-26 *** Released version 0.6.2
2043
2048
2044 2004-07-26 Fernando Perez <fperez@colorado.edu>
2049 2004-07-26 Fernando Perez <fperez@colorado.edu>
2045
2050
2046 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2051 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2047 fail for any number.
2052 fail for any number.
2048 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2053 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2049 empty bookmarks.
2054 empty bookmarks.
2050
2055
2051 2004-07-26 *** Released version 0.6.1
2056 2004-07-26 *** Released version 0.6.1
2052
2057
2053 2004-07-26 Fernando Perez <fperez@colorado.edu>
2058 2004-07-26 Fernando Perez <fperez@colorado.edu>
2054
2059
2055 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2060 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2056
2061
2057 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2062 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2058 escaping '()[]{}' in filenames.
2063 escaping '()[]{}' in filenames.
2059
2064
2060 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2065 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2061 Python 2.2 users who lack a proper shlex.split.
2066 Python 2.2 users who lack a proper shlex.split.
2062
2067
2063 2004-07-19 Fernando Perez <fperez@colorado.edu>
2068 2004-07-19 Fernando Perez <fperez@colorado.edu>
2064
2069
2065 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2070 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2066 for reading readline's init file. I follow the normal chain:
2071 for reading readline's init file. I follow the normal chain:
2067 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2072 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2068 report by Mike Heeter. This closes
2073 report by Mike Heeter. This closes
2069 http://www.scipy.net/roundup/ipython/issue16.
2074 http://www.scipy.net/roundup/ipython/issue16.
2070
2075
2071 2004-07-18 Fernando Perez <fperez@colorado.edu>
2076 2004-07-18 Fernando Perez <fperez@colorado.edu>
2072
2077
2073 * IPython/iplib.py (__init__): Add better handling of '\' under
2078 * IPython/iplib.py (__init__): Add better handling of '\' under
2074 Win32 for filenames. After a patch by Ville.
2079 Win32 for filenames. After a patch by Ville.
2075
2080
2076 2004-07-17 Fernando Perez <fperez@colorado.edu>
2081 2004-07-17 Fernando Perez <fperez@colorado.edu>
2077
2082
2078 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2083 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2079 autocalling would be triggered for 'foo is bar' if foo is
2084 autocalling would be triggered for 'foo is bar' if foo is
2080 callable. I also cleaned up the autocall detection code to use a
2085 callable. I also cleaned up the autocall detection code to use a
2081 regexp, which is faster. Bug reported by Alexander Schmolck.
2086 regexp, which is faster. Bug reported by Alexander Schmolck.
2082
2087
2083 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2088 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2084 '?' in them would confuse the help system. Reported by Alex
2089 '?' in them would confuse the help system. Reported by Alex
2085 Schmolck.
2090 Schmolck.
2086
2091
2087 2004-07-16 Fernando Perez <fperez@colorado.edu>
2092 2004-07-16 Fernando Perez <fperez@colorado.edu>
2088
2093
2089 * IPython/GnuplotInteractive.py (__all__): added plot2.
2094 * IPython/GnuplotInteractive.py (__all__): added plot2.
2090
2095
2091 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2096 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2092 plotting dictionaries, lists or tuples of 1d arrays.
2097 plotting dictionaries, lists or tuples of 1d arrays.
2093
2098
2094 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2099 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2095 optimizations.
2100 optimizations.
2096
2101
2097 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2102 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2098 the information which was there from Janko's original IPP code:
2103 the information which was there from Janko's original IPP code:
2099
2104
2100 03.05.99 20:53 porto.ifm.uni-kiel.de
2105 03.05.99 20:53 porto.ifm.uni-kiel.de
2101 --Started changelog.
2106 --Started changelog.
2102 --make clear do what it say it does
2107 --make clear do what it say it does
2103 --added pretty output of lines from inputcache
2108 --added pretty output of lines from inputcache
2104 --Made Logger a mixin class, simplifies handling of switches
2109 --Made Logger a mixin class, simplifies handling of switches
2105 --Added own completer class. .string<TAB> expands to last history
2110 --Added own completer class. .string<TAB> expands to last history
2106 line which starts with string. The new expansion is also present
2111 line which starts with string. The new expansion is also present
2107 with Ctrl-r from the readline library. But this shows, who this
2112 with Ctrl-r from the readline library. But this shows, who this
2108 can be done for other cases.
2113 can be done for other cases.
2109 --Added convention that all shell functions should accept a
2114 --Added convention that all shell functions should accept a
2110 parameter_string This opens the door for different behaviour for
2115 parameter_string This opens the door for different behaviour for
2111 each function. @cd is a good example of this.
2116 each function. @cd is a good example of this.
2112
2117
2113 04.05.99 12:12 porto.ifm.uni-kiel.de
2118 04.05.99 12:12 porto.ifm.uni-kiel.de
2114 --added logfile rotation
2119 --added logfile rotation
2115 --added new mainloop method which freezes first the namespace
2120 --added new mainloop method which freezes first the namespace
2116
2121
2117 07.05.99 21:24 porto.ifm.uni-kiel.de
2122 07.05.99 21:24 porto.ifm.uni-kiel.de
2118 --added the docreader classes. Now there is a help system.
2123 --added the docreader classes. Now there is a help system.
2119 -This is only a first try. Currently it's not easy to put new
2124 -This is only a first try. Currently it's not easy to put new
2120 stuff in the indices. But this is the way to go. Info would be
2125 stuff in the indices. But this is the way to go. Info would be
2121 better, but HTML is every where and not everybody has an info
2126 better, but HTML is every where and not everybody has an info
2122 system installed and it's not so easy to change html-docs to info.
2127 system installed and it's not so easy to change html-docs to info.
2123 --added global logfile option
2128 --added global logfile option
2124 --there is now a hook for object inspection method pinfo needs to
2129 --there is now a hook for object inspection method pinfo needs to
2125 be provided for this. Can be reached by two '??'.
2130 be provided for this. Can be reached by two '??'.
2126
2131
2127 08.05.99 20:51 porto.ifm.uni-kiel.de
2132 08.05.99 20:51 porto.ifm.uni-kiel.de
2128 --added a README
2133 --added a README
2129 --bug in rc file. Something has changed so functions in the rc
2134 --bug in rc file. Something has changed so functions in the rc
2130 file need to reference the shell and not self. Not clear if it's a
2135 file need to reference the shell and not self. Not clear if it's a
2131 bug or feature.
2136 bug or feature.
2132 --changed rc file for new behavior
2137 --changed rc file for new behavior
2133
2138
2134 2004-07-15 Fernando Perez <fperez@colorado.edu>
2139 2004-07-15 Fernando Perez <fperez@colorado.edu>
2135
2140
2136 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2141 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2137 cache was falling out of sync in bizarre manners when multi-line
2142 cache was falling out of sync in bizarre manners when multi-line
2138 input was present. Minor optimizations and cleanup.
2143 input was present. Minor optimizations and cleanup.
2139
2144
2140 (Logger): Remove old Changelog info for cleanup. This is the
2145 (Logger): Remove old Changelog info for cleanup. This is the
2141 information which was there from Janko's original code:
2146 information which was there from Janko's original code:
2142
2147
2143 Changes to Logger: - made the default log filename a parameter
2148 Changes to Logger: - made the default log filename a parameter
2144
2149
2145 - put a check for lines beginning with !@? in log(). Needed
2150 - put a check for lines beginning with !@? in log(). Needed
2146 (even if the handlers properly log their lines) for mid-session
2151 (even if the handlers properly log their lines) for mid-session
2147 logging activation to work properly. Without this, lines logged
2152 logging activation to work properly. Without this, lines logged
2148 in mid session, which get read from the cache, would end up
2153 in mid session, which get read from the cache, would end up
2149 'bare' (with !@? in the open) in the log. Now they are caught
2154 'bare' (with !@? in the open) in the log. Now they are caught
2150 and prepended with a #.
2155 and prepended with a #.
2151
2156
2152 * IPython/iplib.py (InteractiveShell.init_readline): added check
2157 * IPython/iplib.py (InteractiveShell.init_readline): added check
2153 in case MagicCompleter fails to be defined, so we don't crash.
2158 in case MagicCompleter fails to be defined, so we don't crash.
2154
2159
2155 2004-07-13 Fernando Perez <fperez@colorado.edu>
2160 2004-07-13 Fernando Perez <fperez@colorado.edu>
2156
2161
2157 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2162 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2158 of EPS if the requested filename ends in '.eps'.
2163 of EPS if the requested filename ends in '.eps'.
2159
2164
2160 2004-07-04 Fernando Perez <fperez@colorado.edu>
2165 2004-07-04 Fernando Perez <fperez@colorado.edu>
2161
2166
2162 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2167 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2163 escaping of quotes when calling the shell.
2168 escaping of quotes when calling the shell.
2164
2169
2165 2004-07-02 Fernando Perez <fperez@colorado.edu>
2170 2004-07-02 Fernando Perez <fperez@colorado.edu>
2166
2171
2167 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2172 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2168 gettext not working because we were clobbering '_'. Fixes
2173 gettext not working because we were clobbering '_'. Fixes
2169 http://www.scipy.net/roundup/ipython/issue6.
2174 http://www.scipy.net/roundup/ipython/issue6.
2170
2175
2171 2004-07-01 Fernando Perez <fperez@colorado.edu>
2176 2004-07-01 Fernando Perez <fperez@colorado.edu>
2172
2177
2173 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2178 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2174 into @cd. Patch by Ville.
2179 into @cd. Patch by Ville.
2175
2180
2176 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2181 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2177 new function to store things after ipmaker runs. Patch by Ville.
2182 new function to store things after ipmaker runs. Patch by Ville.
2178 Eventually this will go away once ipmaker is removed and the class
2183 Eventually this will go away once ipmaker is removed and the class
2179 gets cleaned up, but for now it's ok. Key functionality here is
2184 gets cleaned up, but for now it's ok. Key functionality here is
2180 the addition of the persistent storage mechanism, a dict for
2185 the addition of the persistent storage mechanism, a dict for
2181 keeping data across sessions (for now just bookmarks, but more can
2186 keeping data across sessions (for now just bookmarks, but more can
2182 be implemented later).
2187 be implemented later).
2183
2188
2184 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2189 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2185 persistent across sections. Patch by Ville, I modified it
2190 persistent across sections. Patch by Ville, I modified it
2186 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2191 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2187 added a '-l' option to list all bookmarks.
2192 added a '-l' option to list all bookmarks.
2188
2193
2189 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2194 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2190 center for cleanup. Registered with atexit.register(). I moved
2195 center for cleanup. Registered with atexit.register(). I moved
2191 here the old exit_cleanup(). After a patch by Ville.
2196 here the old exit_cleanup(). After a patch by Ville.
2192
2197
2193 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2198 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2194 characters in the hacked shlex_split for python 2.2.
2199 characters in the hacked shlex_split for python 2.2.
2195
2200
2196 * IPython/iplib.py (file_matches): more fixes to filenames with
2201 * IPython/iplib.py (file_matches): more fixes to filenames with
2197 whitespace in them. It's not perfect, but limitations in python's
2202 whitespace in them. It's not perfect, but limitations in python's
2198 readline make it impossible to go further.
2203 readline make it impossible to go further.
2199
2204
2200 2004-06-29 Fernando Perez <fperez@colorado.edu>
2205 2004-06-29 Fernando Perez <fperez@colorado.edu>
2201
2206
2202 * IPython/iplib.py (file_matches): escape whitespace correctly in
2207 * IPython/iplib.py (file_matches): escape whitespace correctly in
2203 filename completions. Bug reported by Ville.
2208 filename completions. Bug reported by Ville.
2204
2209
2205 2004-06-28 Fernando Perez <fperez@colorado.edu>
2210 2004-06-28 Fernando Perez <fperez@colorado.edu>
2206
2211
2207 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2212 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2208 the history file will be called 'history-PROFNAME' (or just
2213 the history file will be called 'history-PROFNAME' (or just
2209 'history' if no profile is loaded). I was getting annoyed at
2214 'history' if no profile is loaded). I was getting annoyed at
2210 getting my Numerical work history clobbered by pysh sessions.
2215 getting my Numerical work history clobbered by pysh sessions.
2211
2216
2212 * IPython/iplib.py (InteractiveShell.__init__): Internal
2217 * IPython/iplib.py (InteractiveShell.__init__): Internal
2213 getoutputerror() function so that we can honor the system_verbose
2218 getoutputerror() function so that we can honor the system_verbose
2214 flag for _all_ system calls. I also added escaping of #
2219 flag for _all_ system calls. I also added escaping of #
2215 characters here to avoid confusing Itpl.
2220 characters here to avoid confusing Itpl.
2216
2221
2217 * IPython/Magic.py (shlex_split): removed call to shell in
2222 * IPython/Magic.py (shlex_split): removed call to shell in
2218 parse_options and replaced it with shlex.split(). The annoying
2223 parse_options and replaced it with shlex.split(). The annoying
2219 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2224 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2220 to backport it from 2.3, with several frail hacks (the shlex
2225 to backport it from 2.3, with several frail hacks (the shlex
2221 module is rather limited in 2.2). Thanks to a suggestion by Ville
2226 module is rather limited in 2.2). Thanks to a suggestion by Ville
2222 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2227 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2223 problem.
2228 problem.
2224
2229
2225 (Magic.magic_system_verbose): new toggle to print the actual
2230 (Magic.magic_system_verbose): new toggle to print the actual
2226 system calls made by ipython. Mainly for debugging purposes.
2231 system calls made by ipython. Mainly for debugging purposes.
2227
2232
2228 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2233 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2229 doesn't support persistence. Reported (and fix suggested) by
2234 doesn't support persistence. Reported (and fix suggested) by
2230 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2235 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2231
2236
2232 2004-06-26 Fernando Perez <fperez@colorado.edu>
2237 2004-06-26 Fernando Perez <fperez@colorado.edu>
2233
2238
2234 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2239 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2235 continue prompts.
2240 continue prompts.
2236
2241
2237 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2242 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2238 function (basically a big docstring) and a few more things here to
2243 function (basically a big docstring) and a few more things here to
2239 speedup startup. pysh.py is now very lightweight. We want because
2244 speedup startup. pysh.py is now very lightweight. We want because
2240 it gets execfile'd, while InterpreterExec gets imported, so
2245 it gets execfile'd, while InterpreterExec gets imported, so
2241 byte-compilation saves time.
2246 byte-compilation saves time.
2242
2247
2243 2004-06-25 Fernando Perez <fperez@colorado.edu>
2248 2004-06-25 Fernando Perez <fperez@colorado.edu>
2244
2249
2245 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2250 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2246 -NUM', which was recently broken.
2251 -NUM', which was recently broken.
2247
2252
2248 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2253 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2249 in multi-line input (but not !!, which doesn't make sense there).
2254 in multi-line input (but not !!, which doesn't make sense there).
2250
2255
2251 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2256 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2252 It's just too useful, and people can turn it off in the less
2257 It's just too useful, and people can turn it off in the less
2253 common cases where it's a problem.
2258 common cases where it's a problem.
2254
2259
2255 2004-06-24 Fernando Perez <fperez@colorado.edu>
2260 2004-06-24 Fernando Perez <fperez@colorado.edu>
2256
2261
2257 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2262 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2258 special syntaxes (like alias calling) is now allied in multi-line
2263 special syntaxes (like alias calling) is now allied in multi-line
2259 input. This is still _very_ experimental, but it's necessary for
2264 input. This is still _very_ experimental, but it's necessary for
2260 efficient shell usage combining python looping syntax with system
2265 efficient shell usage combining python looping syntax with system
2261 calls. For now it's restricted to aliases, I don't think it
2266 calls. For now it's restricted to aliases, I don't think it
2262 really even makes sense to have this for magics.
2267 really even makes sense to have this for magics.
2263
2268
2264 2004-06-23 Fernando Perez <fperez@colorado.edu>
2269 2004-06-23 Fernando Perez <fperez@colorado.edu>
2265
2270
2266 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2271 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2267 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2272 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2268
2273
2269 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2274 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2270 extensions under Windows (after code sent by Gary Bishop). The
2275 extensions under Windows (after code sent by Gary Bishop). The
2271 extensions considered 'executable' are stored in IPython's rc
2276 extensions considered 'executable' are stored in IPython's rc
2272 structure as win_exec_ext.
2277 structure as win_exec_ext.
2273
2278
2274 * IPython/genutils.py (shell): new function, like system() but
2279 * IPython/genutils.py (shell): new function, like system() but
2275 without return value. Very useful for interactive shell work.
2280 without return value. Very useful for interactive shell work.
2276
2281
2277 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2282 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2278 delete aliases.
2283 delete aliases.
2279
2284
2280 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2285 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2281 sure that the alias table doesn't contain python keywords.
2286 sure that the alias table doesn't contain python keywords.
2282
2287
2283 2004-06-21 Fernando Perez <fperez@colorado.edu>
2288 2004-06-21 Fernando Perez <fperez@colorado.edu>
2284
2289
2285 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2290 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2286 non-existent items are found in $PATH. Reported by Thorsten.
2291 non-existent items are found in $PATH. Reported by Thorsten.
2287
2292
2288 2004-06-20 Fernando Perez <fperez@colorado.edu>
2293 2004-06-20 Fernando Perez <fperez@colorado.edu>
2289
2294
2290 * IPython/iplib.py (complete): modified the completer so that the
2295 * IPython/iplib.py (complete): modified the completer so that the
2291 order of priorities can be easily changed at runtime.
2296 order of priorities can be easily changed at runtime.
2292
2297
2293 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2298 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2294 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2299 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2295
2300
2296 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2301 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2297 expand Python variables prepended with $ in all system calls. The
2302 expand Python variables prepended with $ in all system calls. The
2298 same was done to InteractiveShell.handle_shell_escape. Now all
2303 same was done to InteractiveShell.handle_shell_escape. Now all
2299 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2304 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2300 expansion of python variables and expressions according to the
2305 expansion of python variables and expressions according to the
2301 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2306 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2302
2307
2303 Though PEP-215 has been rejected, a similar (but simpler) one
2308 Though PEP-215 has been rejected, a similar (but simpler) one
2304 seems like it will go into Python 2.4, PEP-292 -
2309 seems like it will go into Python 2.4, PEP-292 -
2305 http://www.python.org/peps/pep-0292.html.
2310 http://www.python.org/peps/pep-0292.html.
2306
2311
2307 I'll keep the full syntax of PEP-215, since IPython has since the
2312 I'll keep the full syntax of PEP-215, since IPython has since the
2308 start used Ka-Ping Yee's reference implementation discussed there
2313 start used Ka-Ping Yee's reference implementation discussed there
2309 (Itpl), and I actually like the powerful semantics it offers.
2314 (Itpl), and I actually like the powerful semantics it offers.
2310
2315
2311 In order to access normal shell variables, the $ has to be escaped
2316 In order to access normal shell variables, the $ has to be escaped
2312 via an extra $. For example:
2317 via an extra $. For example:
2313
2318
2314 In [7]: PATH='a python variable'
2319 In [7]: PATH='a python variable'
2315
2320
2316 In [8]: !echo $PATH
2321 In [8]: !echo $PATH
2317 a python variable
2322 a python variable
2318
2323
2319 In [9]: !echo $$PATH
2324 In [9]: !echo $$PATH
2320 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2325 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2321
2326
2322 (Magic.parse_options): escape $ so the shell doesn't evaluate
2327 (Magic.parse_options): escape $ so the shell doesn't evaluate
2323 things prematurely.
2328 things prematurely.
2324
2329
2325 * IPython/iplib.py (InteractiveShell.call_alias): added the
2330 * IPython/iplib.py (InteractiveShell.call_alias): added the
2326 ability for aliases to expand python variables via $.
2331 ability for aliases to expand python variables via $.
2327
2332
2328 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2333 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2329 system, now there's a @rehash/@rehashx pair of magics. These work
2334 system, now there's a @rehash/@rehashx pair of magics. These work
2330 like the csh rehash command, and can be invoked at any time. They
2335 like the csh rehash command, and can be invoked at any time. They
2331 build a table of aliases to everything in the user's $PATH
2336 build a table of aliases to everything in the user's $PATH
2332 (@rehash uses everything, @rehashx is slower but only adds
2337 (@rehash uses everything, @rehashx is slower but only adds
2333 executable files). With this, the pysh.py-based shell profile can
2338 executable files). With this, the pysh.py-based shell profile can
2334 now simply call rehash upon startup, and full access to all
2339 now simply call rehash upon startup, and full access to all
2335 programs in the user's path is obtained.
2340 programs in the user's path is obtained.
2336
2341
2337 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2342 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2338 functionality is now fully in place. I removed the old dynamic
2343 functionality is now fully in place. I removed the old dynamic
2339 code generation based approach, in favor of a much lighter one
2344 code generation based approach, in favor of a much lighter one
2340 based on a simple dict. The advantage is that this allows me to
2345 based on a simple dict. The advantage is that this allows me to
2341 now have thousands of aliases with negligible cost (unthinkable
2346 now have thousands of aliases with negligible cost (unthinkable
2342 with the old system).
2347 with the old system).
2343
2348
2344 2004-06-19 Fernando Perez <fperez@colorado.edu>
2349 2004-06-19 Fernando Perez <fperez@colorado.edu>
2345
2350
2346 * IPython/iplib.py (__init__): extended MagicCompleter class to
2351 * IPython/iplib.py (__init__): extended MagicCompleter class to
2347 also complete (last in priority) on user aliases.
2352 also complete (last in priority) on user aliases.
2348
2353
2349 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2354 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2350 call to eval.
2355 call to eval.
2351 (ItplNS.__init__): Added a new class which functions like Itpl,
2356 (ItplNS.__init__): Added a new class which functions like Itpl,
2352 but allows configuring the namespace for the evaluation to occur
2357 but allows configuring the namespace for the evaluation to occur
2353 in.
2358 in.
2354
2359
2355 2004-06-18 Fernando Perez <fperez@colorado.edu>
2360 2004-06-18 Fernando Perez <fperez@colorado.edu>
2356
2361
2357 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2362 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2358 better message when 'exit' or 'quit' are typed (a common newbie
2363 better message when 'exit' or 'quit' are typed (a common newbie
2359 confusion).
2364 confusion).
2360
2365
2361 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2366 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2362 check for Windows users.
2367 check for Windows users.
2363
2368
2364 * IPython/iplib.py (InteractiveShell.user_setup): removed
2369 * IPython/iplib.py (InteractiveShell.user_setup): removed
2365 disabling of colors for Windows. I'll test at runtime and issue a
2370 disabling of colors for Windows. I'll test at runtime and issue a
2366 warning if Gary's readline isn't found, as to nudge users to
2371 warning if Gary's readline isn't found, as to nudge users to
2367 download it.
2372 download it.
2368
2373
2369 2004-06-16 Fernando Perez <fperez@colorado.edu>
2374 2004-06-16 Fernando Perez <fperez@colorado.edu>
2370
2375
2371 * IPython/genutils.py (Stream.__init__): changed to print errors
2376 * IPython/genutils.py (Stream.__init__): changed to print errors
2372 to sys.stderr. I had a circular dependency here. Now it's
2377 to sys.stderr. I had a circular dependency here. Now it's
2373 possible to run ipython as IDLE's shell (consider this pre-alpha,
2378 possible to run ipython as IDLE's shell (consider this pre-alpha,
2374 since true stdout things end up in the starting terminal instead
2379 since true stdout things end up in the starting terminal instead
2375 of IDLE's out).
2380 of IDLE's out).
2376
2381
2377 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2382 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2378 users who haven't # updated their prompt_in2 definitions. Remove
2383 users who haven't # updated their prompt_in2 definitions. Remove
2379 eventually.
2384 eventually.
2380 (multiple_replace): added credit to original ASPN recipe.
2385 (multiple_replace): added credit to original ASPN recipe.
2381
2386
2382 2004-06-15 Fernando Perez <fperez@colorado.edu>
2387 2004-06-15 Fernando Perez <fperez@colorado.edu>
2383
2388
2384 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2389 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2385 list of auto-defined aliases.
2390 list of auto-defined aliases.
2386
2391
2387 2004-06-13 Fernando Perez <fperez@colorado.edu>
2392 2004-06-13 Fernando Perez <fperez@colorado.edu>
2388
2393
2389 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2394 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2390 install was really requested (so setup.py can be used for other
2395 install was really requested (so setup.py can be used for other
2391 things under Windows).
2396 things under Windows).
2392
2397
2393 2004-06-10 Fernando Perez <fperez@colorado.edu>
2398 2004-06-10 Fernando Perez <fperez@colorado.edu>
2394
2399
2395 * IPython/Logger.py (Logger.create_log): Manually remove any old
2400 * IPython/Logger.py (Logger.create_log): Manually remove any old
2396 backup, since os.remove may fail under Windows. Fixes bug
2401 backup, since os.remove may fail under Windows. Fixes bug
2397 reported by Thorsten.
2402 reported by Thorsten.
2398
2403
2399 2004-06-09 Fernando Perez <fperez@colorado.edu>
2404 2004-06-09 Fernando Perez <fperez@colorado.edu>
2400
2405
2401 * examples/example-embed.py: fixed all references to %n (replaced
2406 * examples/example-embed.py: fixed all references to %n (replaced
2402 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2407 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2403 for all examples and the manual as well.
2408 for all examples and the manual as well.
2404
2409
2405 2004-06-08 Fernando Perez <fperez@colorado.edu>
2410 2004-06-08 Fernando Perez <fperez@colorado.edu>
2406
2411
2407 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2412 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2408 alignment and color management. All 3 prompt subsystems now
2413 alignment and color management. All 3 prompt subsystems now
2409 inherit from BasePrompt.
2414 inherit from BasePrompt.
2410
2415
2411 * tools/release: updates for windows installer build and tag rpms
2416 * tools/release: updates for windows installer build and tag rpms
2412 with python version (since paths are fixed).
2417 with python version (since paths are fixed).
2413
2418
2414 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2419 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2415 which will become eventually obsolete. Also fixed the default
2420 which will become eventually obsolete. Also fixed the default
2416 prompt_in2 to use \D, so at least new users start with the correct
2421 prompt_in2 to use \D, so at least new users start with the correct
2417 defaults.
2422 defaults.
2418 WARNING: Users with existing ipythonrc files will need to apply
2423 WARNING: Users with existing ipythonrc files will need to apply
2419 this fix manually!
2424 this fix manually!
2420
2425
2421 * setup.py: make windows installer (.exe). This is finally the
2426 * setup.py: make windows installer (.exe). This is finally the
2422 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2427 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2423 which I hadn't included because it required Python 2.3 (or recent
2428 which I hadn't included because it required Python 2.3 (or recent
2424 distutils).
2429 distutils).
2425
2430
2426 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2431 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2427 usage of new '\D' escape.
2432 usage of new '\D' escape.
2428
2433
2429 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2434 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2430 lacks os.getuid())
2435 lacks os.getuid())
2431 (CachedOutput.set_colors): Added the ability to turn coloring
2436 (CachedOutput.set_colors): Added the ability to turn coloring
2432 on/off with @colors even for manually defined prompt colors. It
2437 on/off with @colors even for manually defined prompt colors. It
2433 uses a nasty global, but it works safely and via the generic color
2438 uses a nasty global, but it works safely and via the generic color
2434 handling mechanism.
2439 handling mechanism.
2435 (Prompt2.__init__): Introduced new escape '\D' for continuation
2440 (Prompt2.__init__): Introduced new escape '\D' for continuation
2436 prompts. It represents the counter ('\#') as dots.
2441 prompts. It represents the counter ('\#') as dots.
2437 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2442 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2438 need to update their ipythonrc files and replace '%n' with '\D' in
2443 need to update their ipythonrc files and replace '%n' with '\D' in
2439 their prompt_in2 settings everywhere. Sorry, but there's
2444 their prompt_in2 settings everywhere. Sorry, but there's
2440 otherwise no clean way to get all prompts to properly align. The
2445 otherwise no clean way to get all prompts to properly align. The
2441 ipythonrc shipped with IPython has been updated.
2446 ipythonrc shipped with IPython has been updated.
2442
2447
2443 2004-06-07 Fernando Perez <fperez@colorado.edu>
2448 2004-06-07 Fernando Perez <fperez@colorado.edu>
2444
2449
2445 * setup.py (isfile): Pass local_icons option to latex2html, so the
2450 * setup.py (isfile): Pass local_icons option to latex2html, so the
2446 resulting HTML file is self-contained. Thanks to
2451 resulting HTML file is self-contained. Thanks to
2447 dryice-AT-liu.com.cn for the tip.
2452 dryice-AT-liu.com.cn for the tip.
2448
2453
2449 * pysh.py: I created a new profile 'shell', which implements a
2454 * pysh.py: I created a new profile 'shell', which implements a
2450 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2455 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2451 system shell, nor will it become one anytime soon. It's mainly
2456 system shell, nor will it become one anytime soon. It's mainly
2452 meant to illustrate the use of the new flexible bash-like prompts.
2457 meant to illustrate the use of the new flexible bash-like prompts.
2453 I guess it could be used by hardy souls for true shell management,
2458 I guess it could be used by hardy souls for true shell management,
2454 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2459 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2455 profile. This uses the InterpreterExec extension provided by
2460 profile. This uses the InterpreterExec extension provided by
2456 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2461 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2457
2462
2458 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2463 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2459 auto-align itself with the length of the previous input prompt
2464 auto-align itself with the length of the previous input prompt
2460 (taking into account the invisible color escapes).
2465 (taking into account the invisible color escapes).
2461 (CachedOutput.__init__): Large restructuring of this class. Now
2466 (CachedOutput.__init__): Large restructuring of this class. Now
2462 all three prompts (primary1, primary2, output) are proper objects,
2467 all three prompts (primary1, primary2, output) are proper objects,
2463 managed by the 'parent' CachedOutput class. The code is still a
2468 managed by the 'parent' CachedOutput class. The code is still a
2464 bit hackish (all prompts share state via a pointer to the cache),
2469 bit hackish (all prompts share state via a pointer to the cache),
2465 but it's overall far cleaner than before.
2470 but it's overall far cleaner than before.
2466
2471
2467 * IPython/genutils.py (getoutputerror): modified to add verbose,
2472 * IPython/genutils.py (getoutputerror): modified to add verbose,
2468 debug and header options. This makes the interface of all getout*
2473 debug and header options. This makes the interface of all getout*
2469 functions uniform.
2474 functions uniform.
2470 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2475 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2471
2476
2472 * IPython/Magic.py (Magic.default_option): added a function to
2477 * IPython/Magic.py (Magic.default_option): added a function to
2473 allow registering default options for any magic command. This
2478 allow registering default options for any magic command. This
2474 makes it easy to have profiles which customize the magics globally
2479 makes it easy to have profiles which customize the magics globally
2475 for a certain use. The values set through this function are
2480 for a certain use. The values set through this function are
2476 picked up by the parse_options() method, which all magics should
2481 picked up by the parse_options() method, which all magics should
2477 use to parse their options.
2482 use to parse their options.
2478
2483
2479 * IPython/genutils.py (warn): modified the warnings framework to
2484 * IPython/genutils.py (warn): modified the warnings framework to
2480 use the Term I/O class. I'm trying to slowly unify all of
2485 use the Term I/O class. I'm trying to slowly unify all of
2481 IPython's I/O operations to pass through Term.
2486 IPython's I/O operations to pass through Term.
2482
2487
2483 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2488 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2484 the secondary prompt to correctly match the length of the primary
2489 the secondary prompt to correctly match the length of the primary
2485 one for any prompt. Now multi-line code will properly line up
2490 one for any prompt. Now multi-line code will properly line up
2486 even for path dependent prompts, such as the new ones available
2491 even for path dependent prompts, such as the new ones available
2487 via the prompt_specials.
2492 via the prompt_specials.
2488
2493
2489 2004-06-06 Fernando Perez <fperez@colorado.edu>
2494 2004-06-06 Fernando Perez <fperez@colorado.edu>
2490
2495
2491 * IPython/Prompts.py (prompt_specials): Added the ability to have
2496 * IPython/Prompts.py (prompt_specials): Added the ability to have
2492 bash-like special sequences in the prompts, which get
2497 bash-like special sequences in the prompts, which get
2493 automatically expanded. Things like hostname, current working
2498 automatically expanded. Things like hostname, current working
2494 directory and username are implemented already, but it's easy to
2499 directory and username are implemented already, but it's easy to
2495 add more in the future. Thanks to a patch by W.J. van der Laan
2500 add more in the future. Thanks to a patch by W.J. van der Laan
2496 <gnufnork-AT-hetdigitalegat.nl>
2501 <gnufnork-AT-hetdigitalegat.nl>
2497 (prompt_specials): Added color support for prompt strings, so
2502 (prompt_specials): Added color support for prompt strings, so
2498 users can define arbitrary color setups for their prompts.
2503 users can define arbitrary color setups for their prompts.
2499
2504
2500 2004-06-05 Fernando Perez <fperez@colorado.edu>
2505 2004-06-05 Fernando Perez <fperez@colorado.edu>
2501
2506
2502 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2507 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2503 code to load Gary Bishop's readline and configure it
2508 code to load Gary Bishop's readline and configure it
2504 automatically. Thanks to Gary for help on this.
2509 automatically. Thanks to Gary for help on this.
2505
2510
2506 2004-06-01 Fernando Perez <fperez@colorado.edu>
2511 2004-06-01 Fernando Perez <fperez@colorado.edu>
2507
2512
2508 * IPython/Logger.py (Logger.create_log): fix bug for logging
2513 * IPython/Logger.py (Logger.create_log): fix bug for logging
2509 with no filename (previous fix was incomplete).
2514 with no filename (previous fix was incomplete).
2510
2515
2511 2004-05-25 Fernando Perez <fperez@colorado.edu>
2516 2004-05-25 Fernando Perez <fperez@colorado.edu>
2512
2517
2513 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2518 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2514 parens would get passed to the shell.
2519 parens would get passed to the shell.
2515
2520
2516 2004-05-20 Fernando Perez <fperez@colorado.edu>
2521 2004-05-20 Fernando Perez <fperez@colorado.edu>
2517
2522
2518 * IPython/Magic.py (Magic.magic_prun): changed default profile
2523 * IPython/Magic.py (Magic.magic_prun): changed default profile
2519 sort order to 'time' (the more common profiling need).
2524 sort order to 'time' (the more common profiling need).
2520
2525
2521 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2526 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2522 so that source code shown is guaranteed in sync with the file on
2527 so that source code shown is guaranteed in sync with the file on
2523 disk (also changed in psource). Similar fix to the one for
2528 disk (also changed in psource). Similar fix to the one for
2524 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2529 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2525 <yann.ledu-AT-noos.fr>.
2530 <yann.ledu-AT-noos.fr>.
2526
2531
2527 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2532 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2528 with a single option would not be correctly parsed. Closes
2533 with a single option would not be correctly parsed. Closes
2529 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2534 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2530 introduced in 0.6.0 (on 2004-05-06).
2535 introduced in 0.6.0 (on 2004-05-06).
2531
2536
2532 2004-05-13 *** Released version 0.6.0
2537 2004-05-13 *** Released version 0.6.0
2533
2538
2534 2004-05-13 Fernando Perez <fperez@colorado.edu>
2539 2004-05-13 Fernando Perez <fperez@colorado.edu>
2535
2540
2536 * debian/: Added debian/ directory to CVS, so that debian support
2541 * debian/: Added debian/ directory to CVS, so that debian support
2537 is publicly accessible. The debian package is maintained by Jack
2542 is publicly accessible. The debian package is maintained by Jack
2538 Moffit <jack-AT-xiph.org>.
2543 Moffit <jack-AT-xiph.org>.
2539
2544
2540 * Documentation: included the notes about an ipython-based system
2545 * Documentation: included the notes about an ipython-based system
2541 shell (the hypothetical 'pysh') into the new_design.pdf document,
2546 shell (the hypothetical 'pysh') into the new_design.pdf document,
2542 so that these ideas get distributed to users along with the
2547 so that these ideas get distributed to users along with the
2543 official documentation.
2548 official documentation.
2544
2549
2545 2004-05-10 Fernando Perez <fperez@colorado.edu>
2550 2004-05-10 Fernando Perez <fperez@colorado.edu>
2546
2551
2547 * IPython/Logger.py (Logger.create_log): fix recently introduced
2552 * IPython/Logger.py (Logger.create_log): fix recently introduced
2548 bug (misindented line) where logstart would fail when not given an
2553 bug (misindented line) where logstart would fail when not given an
2549 explicit filename.
2554 explicit filename.
2550
2555
2551 2004-05-09 Fernando Perez <fperez@colorado.edu>
2556 2004-05-09 Fernando Perez <fperez@colorado.edu>
2552
2557
2553 * IPython/Magic.py (Magic.parse_options): skip system call when
2558 * IPython/Magic.py (Magic.parse_options): skip system call when
2554 there are no options to look for. Faster, cleaner for the common
2559 there are no options to look for. Faster, cleaner for the common
2555 case.
2560 case.
2556
2561
2557 * Documentation: many updates to the manual: describing Windows
2562 * Documentation: many updates to the manual: describing Windows
2558 support better, Gnuplot updates, credits, misc small stuff. Also
2563 support better, Gnuplot updates, credits, misc small stuff. Also
2559 updated the new_design doc a bit.
2564 updated the new_design doc a bit.
2560
2565
2561 2004-05-06 *** Released version 0.6.0.rc1
2566 2004-05-06 *** Released version 0.6.0.rc1
2562
2567
2563 2004-05-06 Fernando Perez <fperez@colorado.edu>
2568 2004-05-06 Fernando Perez <fperez@colorado.edu>
2564
2569
2565 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2570 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2566 operations to use the vastly more efficient list/''.join() method.
2571 operations to use the vastly more efficient list/''.join() method.
2567 (FormattedTB.text): Fix
2572 (FormattedTB.text): Fix
2568 http://www.scipy.net/roundup/ipython/issue12 - exception source
2573 http://www.scipy.net/roundup/ipython/issue12 - exception source
2569 extract not updated after reload. Thanks to Mike Salib
2574 extract not updated after reload. Thanks to Mike Salib
2570 <msalib-AT-mit.edu> for pinning the source of the problem.
2575 <msalib-AT-mit.edu> for pinning the source of the problem.
2571 Fortunately, the solution works inside ipython and doesn't require
2576 Fortunately, the solution works inside ipython and doesn't require
2572 any changes to python proper.
2577 any changes to python proper.
2573
2578
2574 * IPython/Magic.py (Magic.parse_options): Improved to process the
2579 * IPython/Magic.py (Magic.parse_options): Improved to process the
2575 argument list as a true shell would (by actually using the
2580 argument list as a true shell would (by actually using the
2576 underlying system shell). This way, all @magics automatically get
2581 underlying system shell). This way, all @magics automatically get
2577 shell expansion for variables. Thanks to a comment by Alex
2582 shell expansion for variables. Thanks to a comment by Alex
2578 Schmolck.
2583 Schmolck.
2579
2584
2580 2004-04-04 Fernando Perez <fperez@colorado.edu>
2585 2004-04-04 Fernando Perez <fperez@colorado.edu>
2581
2586
2582 * IPython/iplib.py (InteractiveShell.interact): Added a special
2587 * IPython/iplib.py (InteractiveShell.interact): Added a special
2583 trap for a debugger quit exception, which is basically impossible
2588 trap for a debugger quit exception, which is basically impossible
2584 to handle by normal mechanisms, given what pdb does to the stack.
2589 to handle by normal mechanisms, given what pdb does to the stack.
2585 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2590 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2586
2591
2587 2004-04-03 Fernando Perez <fperez@colorado.edu>
2592 2004-04-03 Fernando Perez <fperez@colorado.edu>
2588
2593
2589 * IPython/genutils.py (Term): Standardized the names of the Term
2594 * IPython/genutils.py (Term): Standardized the names of the Term
2590 class streams to cin/cout/cerr, following C++ naming conventions
2595 class streams to cin/cout/cerr, following C++ naming conventions
2591 (I can't use in/out/err because 'in' is not a valid attribute
2596 (I can't use in/out/err because 'in' is not a valid attribute
2592 name).
2597 name).
2593
2598
2594 * IPython/iplib.py (InteractiveShell.interact): don't increment
2599 * IPython/iplib.py (InteractiveShell.interact): don't increment
2595 the prompt if there's no user input. By Daniel 'Dang' Griffith
2600 the prompt if there's no user input. By Daniel 'Dang' Griffith
2596 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2601 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2597 Francois Pinard.
2602 Francois Pinard.
2598
2603
2599 2004-04-02 Fernando Perez <fperez@colorado.edu>
2604 2004-04-02 Fernando Perez <fperez@colorado.edu>
2600
2605
2601 * IPython/genutils.py (Stream.__init__): Modified to survive at
2606 * IPython/genutils.py (Stream.__init__): Modified to survive at
2602 least importing in contexts where stdin/out/err aren't true file
2607 least importing in contexts where stdin/out/err aren't true file
2603 objects, such as PyCrust (they lack fileno() and mode). However,
2608 objects, such as PyCrust (they lack fileno() and mode). However,
2604 the recovery facilities which rely on these things existing will
2609 the recovery facilities which rely on these things existing will
2605 not work.
2610 not work.
2606
2611
2607 2004-04-01 Fernando Perez <fperez@colorado.edu>
2612 2004-04-01 Fernando Perez <fperez@colorado.edu>
2608
2613
2609 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2614 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2610 use the new getoutputerror() function, so it properly
2615 use the new getoutputerror() function, so it properly
2611 distinguishes stdout/err.
2616 distinguishes stdout/err.
2612
2617
2613 * IPython/genutils.py (getoutputerror): added a function to
2618 * IPython/genutils.py (getoutputerror): added a function to
2614 capture separately the standard output and error of a command.
2619 capture separately the standard output and error of a command.
2615 After a comment from dang on the mailing lists. This code is
2620 After a comment from dang on the mailing lists. This code is
2616 basically a modified version of commands.getstatusoutput(), from
2621 basically a modified version of commands.getstatusoutput(), from
2617 the standard library.
2622 the standard library.
2618
2623
2619 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2624 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2620 '!!' as a special syntax (shorthand) to access @sx.
2625 '!!' as a special syntax (shorthand) to access @sx.
2621
2626
2622 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2627 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2623 command and return its output as a list split on '\n'.
2628 command and return its output as a list split on '\n'.
2624
2629
2625 2004-03-31 Fernando Perez <fperez@colorado.edu>
2630 2004-03-31 Fernando Perez <fperez@colorado.edu>
2626
2631
2627 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2632 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2628 method to dictionaries used as FakeModule instances if they lack
2633 method to dictionaries used as FakeModule instances if they lack
2629 it. At least pydoc in python2.3 breaks for runtime-defined
2634 it. At least pydoc in python2.3 breaks for runtime-defined
2630 functions without this hack. At some point I need to _really_
2635 functions without this hack. At some point I need to _really_
2631 understand what FakeModule is doing, because it's a gross hack.
2636 understand what FakeModule is doing, because it's a gross hack.
2632 But it solves Arnd's problem for now...
2637 But it solves Arnd's problem for now...
2633
2638
2634 2004-02-27 Fernando Perez <fperez@colorado.edu>
2639 2004-02-27 Fernando Perez <fperez@colorado.edu>
2635
2640
2636 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2641 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2637 mode would behave erratically. Also increased the number of
2642 mode would behave erratically. Also increased the number of
2638 possible logs in rotate mod to 999. Thanks to Rod Holland
2643 possible logs in rotate mod to 999. Thanks to Rod Holland
2639 <rhh@StructureLABS.com> for the report and fixes.
2644 <rhh@StructureLABS.com> for the report and fixes.
2640
2645
2641 2004-02-26 Fernando Perez <fperez@colorado.edu>
2646 2004-02-26 Fernando Perez <fperez@colorado.edu>
2642
2647
2643 * IPython/genutils.py (page): Check that the curses module really
2648 * IPython/genutils.py (page): Check that the curses module really
2644 has the initscr attribute before trying to use it. For some
2649 has the initscr attribute before trying to use it. For some
2645 reason, the Solaris curses module is missing this. I think this
2650 reason, the Solaris curses module is missing this. I think this
2646 should be considered a Solaris python bug, but I'm not sure.
2651 should be considered a Solaris python bug, but I'm not sure.
2647
2652
2648 2004-01-17 Fernando Perez <fperez@colorado.edu>
2653 2004-01-17 Fernando Perez <fperez@colorado.edu>
2649
2654
2650 * IPython/genutils.py (Stream.__init__): Changes to try to make
2655 * IPython/genutils.py (Stream.__init__): Changes to try to make
2651 ipython robust against stdin/out/err being closed by the user.
2656 ipython robust against stdin/out/err being closed by the user.
2652 This is 'user error' (and blocks a normal python session, at least
2657 This is 'user error' (and blocks a normal python session, at least
2653 the stdout case). However, Ipython should be able to survive such
2658 the stdout case). However, Ipython should be able to survive such
2654 instances of abuse as gracefully as possible. To simplify the
2659 instances of abuse as gracefully as possible. To simplify the
2655 coding and maintain compatibility with Gary Bishop's Term
2660 coding and maintain compatibility with Gary Bishop's Term
2656 contributions, I've made use of classmethods for this. I think
2661 contributions, I've made use of classmethods for this. I think
2657 this introduces a dependency on python 2.2.
2662 this introduces a dependency on python 2.2.
2658
2663
2659 2004-01-13 Fernando Perez <fperez@colorado.edu>
2664 2004-01-13 Fernando Perez <fperez@colorado.edu>
2660
2665
2661 * IPython/numutils.py (exp_safe): simplified the code a bit and
2666 * IPython/numutils.py (exp_safe): simplified the code a bit and
2662 removed the need for importing the kinds module altogether.
2667 removed the need for importing the kinds module altogether.
2663
2668
2664 2004-01-06 Fernando Perez <fperez@colorado.edu>
2669 2004-01-06 Fernando Perez <fperez@colorado.edu>
2665
2670
2666 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2671 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2667 a magic function instead, after some community feedback. No
2672 a magic function instead, after some community feedback. No
2668 special syntax will exist for it, but its name is deliberately
2673 special syntax will exist for it, but its name is deliberately
2669 very short.
2674 very short.
2670
2675
2671 2003-12-20 Fernando Perez <fperez@colorado.edu>
2676 2003-12-20 Fernando Perez <fperez@colorado.edu>
2672
2677
2673 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2678 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2674 new functionality, to automagically assign the result of a shell
2679 new functionality, to automagically assign the result of a shell
2675 command to a variable. I'll solicit some community feedback on
2680 command to a variable. I'll solicit some community feedback on
2676 this before making it permanent.
2681 this before making it permanent.
2677
2682
2678 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2683 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2679 requested about callables for which inspect couldn't obtain a
2684 requested about callables for which inspect couldn't obtain a
2680 proper argspec. Thanks to a crash report sent by Etienne
2685 proper argspec. Thanks to a crash report sent by Etienne
2681 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2686 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2682
2687
2683 2003-12-09 Fernando Perez <fperez@colorado.edu>
2688 2003-12-09 Fernando Perez <fperez@colorado.edu>
2684
2689
2685 * IPython/genutils.py (page): patch for the pager to work across
2690 * IPython/genutils.py (page): patch for the pager to work across
2686 various versions of Windows. By Gary Bishop.
2691 various versions of Windows. By Gary Bishop.
2687
2692
2688 2003-12-04 Fernando Perez <fperez@colorado.edu>
2693 2003-12-04 Fernando Perez <fperez@colorado.edu>
2689
2694
2690 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2695 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2691 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2696 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2692 While I tested this and it looks ok, there may still be corner
2697 While I tested this and it looks ok, there may still be corner
2693 cases I've missed.
2698 cases I've missed.
2694
2699
2695 2003-12-01 Fernando Perez <fperez@colorado.edu>
2700 2003-12-01 Fernando Perez <fperez@colorado.edu>
2696
2701
2697 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2702 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2698 where a line like 'p,q=1,2' would fail because the automagic
2703 where a line like 'p,q=1,2' would fail because the automagic
2699 system would be triggered for @p.
2704 system would be triggered for @p.
2700
2705
2701 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2706 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2702 cleanups, code unmodified.
2707 cleanups, code unmodified.
2703
2708
2704 * IPython/genutils.py (Term): added a class for IPython to handle
2709 * IPython/genutils.py (Term): added a class for IPython to handle
2705 output. In most cases it will just be a proxy for stdout/err, but
2710 output. In most cases it will just be a proxy for stdout/err, but
2706 having this allows modifications to be made for some platforms,
2711 having this allows modifications to be made for some platforms,
2707 such as handling color escapes under Windows. All of this code
2712 such as handling color escapes under Windows. All of this code
2708 was contributed by Gary Bishop, with minor modifications by me.
2713 was contributed by Gary Bishop, with minor modifications by me.
2709 The actual changes affect many files.
2714 The actual changes affect many files.
2710
2715
2711 2003-11-30 Fernando Perez <fperez@colorado.edu>
2716 2003-11-30 Fernando Perez <fperez@colorado.edu>
2712
2717
2713 * IPython/iplib.py (file_matches): new completion code, courtesy
2718 * IPython/iplib.py (file_matches): new completion code, courtesy
2714 of Jeff Collins. This enables filename completion again under
2719 of Jeff Collins. This enables filename completion again under
2715 python 2.3, which disabled it at the C level.
2720 python 2.3, which disabled it at the C level.
2716
2721
2717 2003-11-11 Fernando Perez <fperez@colorado.edu>
2722 2003-11-11 Fernando Perez <fperez@colorado.edu>
2718
2723
2719 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2724 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2720 for Numeric.array(map(...)), but often convenient.
2725 for Numeric.array(map(...)), but often convenient.
2721
2726
2722 2003-11-05 Fernando Perez <fperez@colorado.edu>
2727 2003-11-05 Fernando Perez <fperez@colorado.edu>
2723
2728
2724 * IPython/numutils.py (frange): Changed a call from int() to
2729 * IPython/numutils.py (frange): Changed a call from int() to
2725 int(round()) to prevent a problem reported with arange() in the
2730 int(round()) to prevent a problem reported with arange() in the
2726 numpy list.
2731 numpy list.
2727
2732
2728 2003-10-06 Fernando Perez <fperez@colorado.edu>
2733 2003-10-06 Fernando Perez <fperez@colorado.edu>
2729
2734
2730 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2735 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2731 prevent crashes if sys lacks an argv attribute (it happens with
2736 prevent crashes if sys lacks an argv attribute (it happens with
2732 embedded interpreters which build a bare-bones sys module).
2737 embedded interpreters which build a bare-bones sys module).
2733 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2738 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2734
2739
2735 2003-09-24 Fernando Perez <fperez@colorado.edu>
2740 2003-09-24 Fernando Perez <fperez@colorado.edu>
2736
2741
2737 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2742 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2738 to protect against poorly written user objects where __getattr__
2743 to protect against poorly written user objects where __getattr__
2739 raises exceptions other than AttributeError. Thanks to a bug
2744 raises exceptions other than AttributeError. Thanks to a bug
2740 report by Oliver Sander <osander-AT-gmx.de>.
2745 report by Oliver Sander <osander-AT-gmx.de>.
2741
2746
2742 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2747 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2743 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2748 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2744
2749
2745 2003-09-09 Fernando Perez <fperez@colorado.edu>
2750 2003-09-09 Fernando Perez <fperez@colorado.edu>
2746
2751
2747 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2752 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2748 unpacking a list whith a callable as first element would
2753 unpacking a list whith a callable as first element would
2749 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2754 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2750 Collins.
2755 Collins.
2751
2756
2752 2003-08-25 *** Released version 0.5.0
2757 2003-08-25 *** Released version 0.5.0
2753
2758
2754 2003-08-22 Fernando Perez <fperez@colorado.edu>
2759 2003-08-22 Fernando Perez <fperez@colorado.edu>
2755
2760
2756 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2761 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2757 improperly defined user exceptions. Thanks to feedback from Mark
2762 improperly defined user exceptions. Thanks to feedback from Mark
2758 Russell <mrussell-AT-verio.net>.
2763 Russell <mrussell-AT-verio.net>.
2759
2764
2760 2003-08-20 Fernando Perez <fperez@colorado.edu>
2765 2003-08-20 Fernando Perez <fperez@colorado.edu>
2761
2766
2762 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2767 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2763 printing so that it would print multi-line string forms starting
2768 printing so that it would print multi-line string forms starting
2764 with a new line. This way the formatting is better respected for
2769 with a new line. This way the formatting is better respected for
2765 objects which work hard to make nice string forms.
2770 objects which work hard to make nice string forms.
2766
2771
2767 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2772 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2768 autocall would overtake data access for objects with both
2773 autocall would overtake data access for objects with both
2769 __getitem__ and __call__.
2774 __getitem__ and __call__.
2770
2775
2771 2003-08-19 *** Released version 0.5.0-rc1
2776 2003-08-19 *** Released version 0.5.0-rc1
2772
2777
2773 2003-08-19 Fernando Perez <fperez@colorado.edu>
2778 2003-08-19 Fernando Perez <fperez@colorado.edu>
2774
2779
2775 * IPython/deep_reload.py (load_tail): single tiny change here
2780 * IPython/deep_reload.py (load_tail): single tiny change here
2776 seems to fix the long-standing bug of dreload() failing to work
2781 seems to fix the long-standing bug of dreload() failing to work
2777 for dotted names. But this module is pretty tricky, so I may have
2782 for dotted names. But this module is pretty tricky, so I may have
2778 missed some subtlety. Needs more testing!.
2783 missed some subtlety. Needs more testing!.
2779
2784
2780 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2785 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2781 exceptions which have badly implemented __str__ methods.
2786 exceptions which have badly implemented __str__ methods.
2782 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2787 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2783 which I've been getting reports about from Python 2.3 users. I
2788 which I've been getting reports about from Python 2.3 users. I
2784 wish I had a simple test case to reproduce the problem, so I could
2789 wish I had a simple test case to reproduce the problem, so I could
2785 either write a cleaner workaround or file a bug report if
2790 either write a cleaner workaround or file a bug report if
2786 necessary.
2791 necessary.
2787
2792
2788 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2793 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2789 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2794 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2790 a bug report by Tjabo Kloppenburg.
2795 a bug report by Tjabo Kloppenburg.
2791
2796
2792 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2797 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2793 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2798 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2794 seems rather unstable. Thanks to a bug report by Tjabo
2799 seems rather unstable. Thanks to a bug report by Tjabo
2795 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2800 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2796
2801
2797 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2802 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2798 this out soon because of the critical fixes in the inner loop for
2803 this out soon because of the critical fixes in the inner loop for
2799 generators.
2804 generators.
2800
2805
2801 * IPython/Magic.py (Magic.getargspec): removed. This (and
2806 * IPython/Magic.py (Magic.getargspec): removed. This (and
2802 _get_def) have been obsoleted by OInspect for a long time, I
2807 _get_def) have been obsoleted by OInspect for a long time, I
2803 hadn't noticed that they were dead code.
2808 hadn't noticed that they were dead code.
2804 (Magic._ofind): restored _ofind functionality for a few literals
2809 (Magic._ofind): restored _ofind functionality for a few literals
2805 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2810 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2806 for things like "hello".capitalize?, since that would require a
2811 for things like "hello".capitalize?, since that would require a
2807 potentially dangerous eval() again.
2812 potentially dangerous eval() again.
2808
2813
2809 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2814 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2810 logic a bit more to clean up the escapes handling and minimize the
2815 logic a bit more to clean up the escapes handling and minimize the
2811 use of _ofind to only necessary cases. The interactive 'feel' of
2816 use of _ofind to only necessary cases. The interactive 'feel' of
2812 IPython should have improved quite a bit with the changes in
2817 IPython should have improved quite a bit with the changes in
2813 _prefilter and _ofind (besides being far safer than before).
2818 _prefilter and _ofind (besides being far safer than before).
2814
2819
2815 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2820 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2816 obscure, never reported). Edit would fail to find the object to
2821 obscure, never reported). Edit would fail to find the object to
2817 edit under some circumstances.
2822 edit under some circumstances.
2818 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2823 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2819 which were causing double-calling of generators. Those eval calls
2824 which were causing double-calling of generators. Those eval calls
2820 were _very_ dangerous, since code with side effects could be
2825 were _very_ dangerous, since code with side effects could be
2821 triggered. As they say, 'eval is evil'... These were the
2826 triggered. As they say, 'eval is evil'... These were the
2822 nastiest evals in IPython. Besides, _ofind is now far simpler,
2827 nastiest evals in IPython. Besides, _ofind is now far simpler,
2823 and it should also be quite a bit faster. Its use of inspect is
2828 and it should also be quite a bit faster. Its use of inspect is
2824 also safer, so perhaps some of the inspect-related crashes I've
2829 also safer, so perhaps some of the inspect-related crashes I've
2825 seen lately with Python 2.3 might be taken care of. That will
2830 seen lately with Python 2.3 might be taken care of. That will
2826 need more testing.
2831 need more testing.
2827
2832
2828 2003-08-17 Fernando Perez <fperez@colorado.edu>
2833 2003-08-17 Fernando Perez <fperez@colorado.edu>
2829
2834
2830 * IPython/iplib.py (InteractiveShell._prefilter): significant
2835 * IPython/iplib.py (InteractiveShell._prefilter): significant
2831 simplifications to the logic for handling user escapes. Faster
2836 simplifications to the logic for handling user escapes. Faster
2832 and simpler code.
2837 and simpler code.
2833
2838
2834 2003-08-14 Fernando Perez <fperez@colorado.edu>
2839 2003-08-14 Fernando Perez <fperez@colorado.edu>
2835
2840
2836 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2841 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2837 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2842 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2838 but it should be quite a bit faster. And the recursive version
2843 but it should be quite a bit faster. And the recursive version
2839 generated O(log N) intermediate storage for all rank>1 arrays,
2844 generated O(log N) intermediate storage for all rank>1 arrays,
2840 even if they were contiguous.
2845 even if they were contiguous.
2841 (l1norm): Added this function.
2846 (l1norm): Added this function.
2842 (norm): Added this function for arbitrary norms (including
2847 (norm): Added this function for arbitrary norms (including
2843 l-infinity). l1 and l2 are still special cases for convenience
2848 l-infinity). l1 and l2 are still special cases for convenience
2844 and speed.
2849 and speed.
2845
2850
2846 2003-08-03 Fernando Perez <fperez@colorado.edu>
2851 2003-08-03 Fernando Perez <fperez@colorado.edu>
2847
2852
2848 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2853 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2849 exceptions, which now raise PendingDeprecationWarnings in Python
2854 exceptions, which now raise PendingDeprecationWarnings in Python
2850 2.3. There were some in Magic and some in Gnuplot2.
2855 2.3. There were some in Magic and some in Gnuplot2.
2851
2856
2852 2003-06-30 Fernando Perez <fperez@colorado.edu>
2857 2003-06-30 Fernando Perez <fperez@colorado.edu>
2853
2858
2854 * IPython/genutils.py (page): modified to call curses only for
2859 * IPython/genutils.py (page): modified to call curses only for
2855 terminals where TERM=='xterm'. After problems under many other
2860 terminals where TERM=='xterm'. After problems under many other
2856 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2861 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2857
2862
2858 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2863 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2859 would be triggered when readline was absent. This was just an old
2864 would be triggered when readline was absent. This was just an old
2860 debugging statement I'd forgotten to take out.
2865 debugging statement I'd forgotten to take out.
2861
2866
2862 2003-06-20 Fernando Perez <fperez@colorado.edu>
2867 2003-06-20 Fernando Perez <fperez@colorado.edu>
2863
2868
2864 * IPython/genutils.py (clock): modified to return only user time
2869 * IPython/genutils.py (clock): modified to return only user time
2865 (not counting system time), after a discussion on scipy. While
2870 (not counting system time), after a discussion on scipy. While
2866 system time may be a useful quantity occasionally, it may much
2871 system time may be a useful quantity occasionally, it may much
2867 more easily be skewed by occasional swapping or other similar
2872 more easily be skewed by occasional swapping or other similar
2868 activity.
2873 activity.
2869
2874
2870 2003-06-05 Fernando Perez <fperez@colorado.edu>
2875 2003-06-05 Fernando Perez <fperez@colorado.edu>
2871
2876
2872 * IPython/numutils.py (identity): new function, for building
2877 * IPython/numutils.py (identity): new function, for building
2873 arbitrary rank Kronecker deltas (mostly backwards compatible with
2878 arbitrary rank Kronecker deltas (mostly backwards compatible with
2874 Numeric.identity)
2879 Numeric.identity)
2875
2880
2876 2003-06-03 Fernando Perez <fperez@colorado.edu>
2881 2003-06-03 Fernando Perez <fperez@colorado.edu>
2877
2882
2878 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2883 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2879 arguments passed to magics with spaces, to allow trailing '\' to
2884 arguments passed to magics with spaces, to allow trailing '\' to
2880 work normally (mainly for Windows users).
2885 work normally (mainly for Windows users).
2881
2886
2882 2003-05-29 Fernando Perez <fperez@colorado.edu>
2887 2003-05-29 Fernando Perez <fperez@colorado.edu>
2883
2888
2884 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2889 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2885 instead of pydoc.help. This fixes a bizarre behavior where
2890 instead of pydoc.help. This fixes a bizarre behavior where
2886 printing '%s' % locals() would trigger the help system. Now
2891 printing '%s' % locals() would trigger the help system. Now
2887 ipython behaves like normal python does.
2892 ipython behaves like normal python does.
2888
2893
2889 Note that if one does 'from pydoc import help', the bizarre
2894 Note that if one does 'from pydoc import help', the bizarre
2890 behavior returns, but this will also happen in normal python, so
2895 behavior returns, but this will also happen in normal python, so
2891 it's not an ipython bug anymore (it has to do with how pydoc.help
2896 it's not an ipython bug anymore (it has to do with how pydoc.help
2892 is implemented).
2897 is implemented).
2893
2898
2894 2003-05-22 Fernando Perez <fperez@colorado.edu>
2899 2003-05-22 Fernando Perez <fperez@colorado.edu>
2895
2900
2896 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2901 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2897 return [] instead of None when nothing matches, also match to end
2902 return [] instead of None when nothing matches, also match to end
2898 of line. Patch by Gary Bishop.
2903 of line. Patch by Gary Bishop.
2899
2904
2900 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2905 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2901 protection as before, for files passed on the command line. This
2906 protection as before, for files passed on the command line. This
2902 prevents the CrashHandler from kicking in if user files call into
2907 prevents the CrashHandler from kicking in if user files call into
2903 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2908 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2904 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2909 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2905
2910
2906 2003-05-20 *** Released version 0.4.0
2911 2003-05-20 *** Released version 0.4.0
2907
2912
2908 2003-05-20 Fernando Perez <fperez@colorado.edu>
2913 2003-05-20 Fernando Perez <fperez@colorado.edu>
2909
2914
2910 * setup.py: added support for manpages. It's a bit hackish b/c of
2915 * setup.py: added support for manpages. It's a bit hackish b/c of
2911 a bug in the way the bdist_rpm distutils target handles gzipped
2916 a bug in the way the bdist_rpm distutils target handles gzipped
2912 manpages, but it works. After a patch by Jack.
2917 manpages, but it works. After a patch by Jack.
2913
2918
2914 2003-05-19 Fernando Perez <fperez@colorado.edu>
2919 2003-05-19 Fernando Perez <fperez@colorado.edu>
2915
2920
2916 * IPython/numutils.py: added a mockup of the kinds module, since
2921 * IPython/numutils.py: added a mockup of the kinds module, since
2917 it was recently removed from Numeric. This way, numutils will
2922 it was recently removed from Numeric. This way, numutils will
2918 work for all users even if they are missing kinds.
2923 work for all users even if they are missing kinds.
2919
2924
2920 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2925 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2921 failure, which can occur with SWIG-wrapped extensions. After a
2926 failure, which can occur with SWIG-wrapped extensions. After a
2922 crash report from Prabhu.
2927 crash report from Prabhu.
2923
2928
2924 2003-05-16 Fernando Perez <fperez@colorado.edu>
2929 2003-05-16 Fernando Perez <fperez@colorado.edu>
2925
2930
2926 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2931 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2927 protect ipython from user code which may call directly
2932 protect ipython from user code which may call directly
2928 sys.excepthook (this looks like an ipython crash to the user, even
2933 sys.excepthook (this looks like an ipython crash to the user, even
2929 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2934 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2930 This is especially important to help users of WxWindows, but may
2935 This is especially important to help users of WxWindows, but may
2931 also be useful in other cases.
2936 also be useful in other cases.
2932
2937
2933 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2938 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2934 an optional tb_offset to be specified, and to preserve exception
2939 an optional tb_offset to be specified, and to preserve exception
2935 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2940 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2936
2941
2937 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2942 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2938
2943
2939 2003-05-15 Fernando Perez <fperez@colorado.edu>
2944 2003-05-15 Fernando Perez <fperez@colorado.edu>
2940
2945
2941 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2946 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2942 installing for a new user under Windows.
2947 installing for a new user under Windows.
2943
2948
2944 2003-05-12 Fernando Perez <fperez@colorado.edu>
2949 2003-05-12 Fernando Perez <fperez@colorado.edu>
2945
2950
2946 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2951 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2947 handler for Emacs comint-based lines. Currently it doesn't do
2952 handler for Emacs comint-based lines. Currently it doesn't do
2948 much (but importantly, it doesn't update the history cache). In
2953 much (but importantly, it doesn't update the history cache). In
2949 the future it may be expanded if Alex needs more functionality
2954 the future it may be expanded if Alex needs more functionality
2950 there.
2955 there.
2951
2956
2952 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2957 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2953 info to crash reports.
2958 info to crash reports.
2954
2959
2955 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2960 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2956 just like Python's -c. Also fixed crash with invalid -color
2961 just like Python's -c. Also fixed crash with invalid -color
2957 option value at startup. Thanks to Will French
2962 option value at startup. Thanks to Will French
2958 <wfrench-AT-bestweb.net> for the bug report.
2963 <wfrench-AT-bestweb.net> for the bug report.
2959
2964
2960 2003-05-09 Fernando Perez <fperez@colorado.edu>
2965 2003-05-09 Fernando Perez <fperez@colorado.edu>
2961
2966
2962 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2967 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2963 to EvalDict (it's a mapping, after all) and simplified its code
2968 to EvalDict (it's a mapping, after all) and simplified its code
2964 quite a bit, after a nice discussion on c.l.py where Gustavo
2969 quite a bit, after a nice discussion on c.l.py where Gustavo
2965 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2970 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2966
2971
2967 2003-04-30 Fernando Perez <fperez@colorado.edu>
2972 2003-04-30 Fernando Perez <fperez@colorado.edu>
2968
2973
2969 * IPython/genutils.py (timings_out): modified it to reduce its
2974 * IPython/genutils.py (timings_out): modified it to reduce its
2970 overhead in the common reps==1 case.
2975 overhead in the common reps==1 case.
2971
2976
2972 2003-04-29 Fernando Perez <fperez@colorado.edu>
2977 2003-04-29 Fernando Perez <fperez@colorado.edu>
2973
2978
2974 * IPython/genutils.py (timings_out): Modified to use the resource
2979 * IPython/genutils.py (timings_out): Modified to use the resource
2975 module, which avoids the wraparound problems of time.clock().
2980 module, which avoids the wraparound problems of time.clock().
2976
2981
2977 2003-04-17 *** Released version 0.2.15pre4
2982 2003-04-17 *** Released version 0.2.15pre4
2978
2983
2979 2003-04-17 Fernando Perez <fperez@colorado.edu>
2984 2003-04-17 Fernando Perez <fperez@colorado.edu>
2980
2985
2981 * setup.py (scriptfiles): Split windows-specific stuff over to a
2986 * setup.py (scriptfiles): Split windows-specific stuff over to a
2982 separate file, in an attempt to have a Windows GUI installer.
2987 separate file, in an attempt to have a Windows GUI installer.
2983 That didn't work, but part of the groundwork is done.
2988 That didn't work, but part of the groundwork is done.
2984
2989
2985 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2990 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2986 indent/unindent with 4 spaces. Particularly useful in combination
2991 indent/unindent with 4 spaces. Particularly useful in combination
2987 with the new auto-indent option.
2992 with the new auto-indent option.
2988
2993
2989 2003-04-16 Fernando Perez <fperez@colorado.edu>
2994 2003-04-16 Fernando Perez <fperez@colorado.edu>
2990
2995
2991 * IPython/Magic.py: various replacements of self.rc for
2996 * IPython/Magic.py: various replacements of self.rc for
2992 self.shell.rc. A lot more remains to be done to fully disentangle
2997 self.shell.rc. A lot more remains to be done to fully disentangle
2993 this class from the main Shell class.
2998 this class from the main Shell class.
2994
2999
2995 * IPython/GnuplotRuntime.py: added checks for mouse support so
3000 * IPython/GnuplotRuntime.py: added checks for mouse support so
2996 that we don't try to enable it if the current gnuplot doesn't
3001 that we don't try to enable it if the current gnuplot doesn't
2997 really support it. Also added checks so that we don't try to
3002 really support it. Also added checks so that we don't try to
2998 enable persist under Windows (where Gnuplot doesn't recognize the
3003 enable persist under Windows (where Gnuplot doesn't recognize the
2999 option).
3004 option).
3000
3005
3001 * IPython/iplib.py (InteractiveShell.interact): Added optional
3006 * IPython/iplib.py (InteractiveShell.interact): Added optional
3002 auto-indenting code, after a patch by King C. Shu
3007 auto-indenting code, after a patch by King C. Shu
3003 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3008 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3004 get along well with pasting indented code. If I ever figure out
3009 get along well with pasting indented code. If I ever figure out
3005 how to make that part go well, it will become on by default.
3010 how to make that part go well, it will become on by default.
3006
3011
3007 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3012 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3008 crash ipython if there was an unmatched '%' in the user's prompt
3013 crash ipython if there was an unmatched '%' in the user's prompt
3009 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3014 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3010
3015
3011 * IPython/iplib.py (InteractiveShell.interact): removed the
3016 * IPython/iplib.py (InteractiveShell.interact): removed the
3012 ability to ask the user whether he wants to crash or not at the
3017 ability to ask the user whether he wants to crash or not at the
3013 'last line' exception handler. Calling functions at that point
3018 'last line' exception handler. Calling functions at that point
3014 changes the stack, and the error reports would have incorrect
3019 changes the stack, and the error reports would have incorrect
3015 tracebacks.
3020 tracebacks.
3016
3021
3017 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3022 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3018 pass through a peger a pretty-printed form of any object. After a
3023 pass through a peger a pretty-printed form of any object. After a
3019 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3024 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3020
3025
3021 2003-04-14 Fernando Perez <fperez@colorado.edu>
3026 2003-04-14 Fernando Perez <fperez@colorado.edu>
3022
3027
3023 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3028 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3024 all files in ~ would be modified at first install (instead of
3029 all files in ~ would be modified at first install (instead of
3025 ~/.ipython). This could be potentially disastrous, as the
3030 ~/.ipython). This could be potentially disastrous, as the
3026 modification (make line-endings native) could damage binary files.
3031 modification (make line-endings native) could damage binary files.
3027
3032
3028 2003-04-10 Fernando Perez <fperez@colorado.edu>
3033 2003-04-10 Fernando Perez <fperez@colorado.edu>
3029
3034
3030 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3035 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3031 handle only lines which are invalid python. This now means that
3036 handle only lines which are invalid python. This now means that
3032 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3037 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3033 for the bug report.
3038 for the bug report.
3034
3039
3035 2003-04-01 Fernando Perez <fperez@colorado.edu>
3040 2003-04-01 Fernando Perez <fperez@colorado.edu>
3036
3041
3037 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3042 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3038 where failing to set sys.last_traceback would crash pdb.pm().
3043 where failing to set sys.last_traceback would crash pdb.pm().
3039 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3044 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3040 report.
3045 report.
3041
3046
3042 2003-03-25 Fernando Perez <fperez@colorado.edu>
3047 2003-03-25 Fernando Perez <fperez@colorado.edu>
3043
3048
3044 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3049 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3045 before printing it (it had a lot of spurious blank lines at the
3050 before printing it (it had a lot of spurious blank lines at the
3046 end).
3051 end).
3047
3052
3048 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3053 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3049 output would be sent 21 times! Obviously people don't use this
3054 output would be sent 21 times! Obviously people don't use this
3050 too often, or I would have heard about it.
3055 too often, or I would have heard about it.
3051
3056
3052 2003-03-24 Fernando Perez <fperez@colorado.edu>
3057 2003-03-24 Fernando Perez <fperez@colorado.edu>
3053
3058
3054 * setup.py (scriptfiles): renamed the data_files parameter from
3059 * setup.py (scriptfiles): renamed the data_files parameter from
3055 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3060 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3056 for the patch.
3061 for the patch.
3057
3062
3058 2003-03-20 Fernando Perez <fperez@colorado.edu>
3063 2003-03-20 Fernando Perez <fperez@colorado.edu>
3059
3064
3060 * IPython/genutils.py (error): added error() and fatal()
3065 * IPython/genutils.py (error): added error() and fatal()
3061 functions.
3066 functions.
3062
3067
3063 2003-03-18 *** Released version 0.2.15pre3
3068 2003-03-18 *** Released version 0.2.15pre3
3064
3069
3065 2003-03-18 Fernando Perez <fperez@colorado.edu>
3070 2003-03-18 Fernando Perez <fperez@colorado.edu>
3066
3071
3067 * setupext/install_data_ext.py
3072 * setupext/install_data_ext.py
3068 (install_data_ext.initialize_options): Class contributed by Jack
3073 (install_data_ext.initialize_options): Class contributed by Jack
3069 Moffit for fixing the old distutils hack. He is sending this to
3074 Moffit for fixing the old distutils hack. He is sending this to
3070 the distutils folks so in the future we may not need it as a
3075 the distutils folks so in the future we may not need it as a
3071 private fix.
3076 private fix.
3072
3077
3073 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3078 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3074 changes for Debian packaging. See his patch for full details.
3079 changes for Debian packaging. See his patch for full details.
3075 The old distutils hack of making the ipythonrc* files carry a
3080 The old distutils hack of making the ipythonrc* files carry a
3076 bogus .py extension is gone, at last. Examples were moved to a
3081 bogus .py extension is gone, at last. Examples were moved to a
3077 separate subdir under doc/, and the separate executable scripts
3082 separate subdir under doc/, and the separate executable scripts
3078 now live in their own directory. Overall a great cleanup. The
3083 now live in their own directory. Overall a great cleanup. The
3079 manual was updated to use the new files, and setup.py has been
3084 manual was updated to use the new files, and setup.py has been
3080 fixed for this setup.
3085 fixed for this setup.
3081
3086
3082 * IPython/PyColorize.py (Parser.usage): made non-executable and
3087 * IPython/PyColorize.py (Parser.usage): made non-executable and
3083 created a pycolor wrapper around it to be included as a script.
3088 created a pycolor wrapper around it to be included as a script.
3084
3089
3085 2003-03-12 *** Released version 0.2.15pre2
3090 2003-03-12 *** Released version 0.2.15pre2
3086
3091
3087 2003-03-12 Fernando Perez <fperez@colorado.edu>
3092 2003-03-12 Fernando Perez <fperez@colorado.edu>
3088
3093
3089 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3094 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3090 long-standing problem with garbage characters in some terminals.
3095 long-standing problem with garbage characters in some terminals.
3091 The issue was really that the \001 and \002 escapes must _only_ be
3096 The issue was really that the \001 and \002 escapes must _only_ be
3092 passed to input prompts (which call readline), but _never_ to
3097 passed to input prompts (which call readline), but _never_ to
3093 normal text to be printed on screen. I changed ColorANSI to have
3098 normal text to be printed on screen. I changed ColorANSI to have
3094 two classes: TermColors and InputTermColors, each with the
3099 two classes: TermColors and InputTermColors, each with the
3095 appropriate escapes for input prompts or normal text. The code in
3100 appropriate escapes for input prompts or normal text. The code in
3096 Prompts.py got slightly more complicated, but this very old and
3101 Prompts.py got slightly more complicated, but this very old and
3097 annoying bug is finally fixed.
3102 annoying bug is finally fixed.
3098
3103
3099 All the credit for nailing down the real origin of this problem
3104 All the credit for nailing down the real origin of this problem
3100 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3105 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3101 *Many* thanks to him for spending quite a bit of effort on this.
3106 *Many* thanks to him for spending quite a bit of effort on this.
3102
3107
3103 2003-03-05 *** Released version 0.2.15pre1
3108 2003-03-05 *** Released version 0.2.15pre1
3104
3109
3105 2003-03-03 Fernando Perez <fperez@colorado.edu>
3110 2003-03-03 Fernando Perez <fperez@colorado.edu>
3106
3111
3107 * IPython/FakeModule.py: Moved the former _FakeModule to a
3112 * IPython/FakeModule.py: Moved the former _FakeModule to a
3108 separate file, because it's also needed by Magic (to fix a similar
3113 separate file, because it's also needed by Magic (to fix a similar
3109 pickle-related issue in @run).
3114 pickle-related issue in @run).
3110
3115
3111 2003-03-02 Fernando Perez <fperez@colorado.edu>
3116 2003-03-02 Fernando Perez <fperez@colorado.edu>
3112
3117
3113 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3118 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3114 the autocall option at runtime.
3119 the autocall option at runtime.
3115 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3120 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3116 across Magic.py to start separating Magic from InteractiveShell.
3121 across Magic.py to start separating Magic from InteractiveShell.
3117 (Magic._ofind): Fixed to return proper namespace for dotted
3122 (Magic._ofind): Fixed to return proper namespace for dotted
3118 names. Before, a dotted name would always return 'not currently
3123 names. Before, a dotted name would always return 'not currently
3119 defined', because it would find the 'parent'. s.x would be found,
3124 defined', because it would find the 'parent'. s.x would be found,
3120 but since 'x' isn't defined by itself, it would get confused.
3125 but since 'x' isn't defined by itself, it would get confused.
3121 (Magic.magic_run): Fixed pickling problems reported by Ralf
3126 (Magic.magic_run): Fixed pickling problems reported by Ralf
3122 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3127 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3123 that I'd used when Mike Heeter reported similar issues at the
3128 that I'd used when Mike Heeter reported similar issues at the
3124 top-level, but now for @run. It boils down to injecting the
3129 top-level, but now for @run. It boils down to injecting the
3125 namespace where code is being executed with something that looks
3130 namespace where code is being executed with something that looks
3126 enough like a module to fool pickle.dump(). Since a pickle stores
3131 enough like a module to fool pickle.dump(). Since a pickle stores
3127 a named reference to the importing module, we need this for
3132 a named reference to the importing module, we need this for
3128 pickles to save something sensible.
3133 pickles to save something sensible.
3129
3134
3130 * IPython/ipmaker.py (make_IPython): added an autocall option.
3135 * IPython/ipmaker.py (make_IPython): added an autocall option.
3131
3136
3132 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3137 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3133 the auto-eval code. Now autocalling is an option, and the code is
3138 the auto-eval code. Now autocalling is an option, and the code is
3134 also vastly safer. There is no more eval() involved at all.
3139 also vastly safer. There is no more eval() involved at all.
3135
3140
3136 2003-03-01 Fernando Perez <fperez@colorado.edu>
3141 2003-03-01 Fernando Perez <fperez@colorado.edu>
3137
3142
3138 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3143 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3139 dict with named keys instead of a tuple.
3144 dict with named keys instead of a tuple.
3140
3145
3141 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3146 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3142
3147
3143 * setup.py (make_shortcut): Fixed message about directories
3148 * setup.py (make_shortcut): Fixed message about directories
3144 created during Windows installation (the directories were ok, just
3149 created during Windows installation (the directories were ok, just
3145 the printed message was misleading). Thanks to Chris Liechti
3150 the printed message was misleading). Thanks to Chris Liechti
3146 <cliechti-AT-gmx.net> for the heads up.
3151 <cliechti-AT-gmx.net> for the heads up.
3147
3152
3148 2003-02-21 Fernando Perez <fperez@colorado.edu>
3153 2003-02-21 Fernando Perez <fperez@colorado.edu>
3149
3154
3150 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3155 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3151 of ValueError exception when checking for auto-execution. This
3156 of ValueError exception when checking for auto-execution. This
3152 one is raised by things like Numeric arrays arr.flat when the
3157 one is raised by things like Numeric arrays arr.flat when the
3153 array is non-contiguous.
3158 array is non-contiguous.
3154
3159
3155 2003-01-31 Fernando Perez <fperez@colorado.edu>
3160 2003-01-31 Fernando Perez <fperez@colorado.edu>
3156
3161
3157 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3162 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3158 not return any value at all (even though the command would get
3163 not return any value at all (even though the command would get
3159 executed).
3164 executed).
3160 (xsys): Flush stdout right after printing the command to ensure
3165 (xsys): Flush stdout right after printing the command to ensure
3161 proper ordering of commands and command output in the total
3166 proper ordering of commands and command output in the total
3162 output.
3167 output.
3163 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3168 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3164 system/getoutput as defaults. The old ones are kept for
3169 system/getoutput as defaults. The old ones are kept for
3165 compatibility reasons, so no code which uses this library needs
3170 compatibility reasons, so no code which uses this library needs
3166 changing.
3171 changing.
3167
3172
3168 2003-01-27 *** Released version 0.2.14
3173 2003-01-27 *** Released version 0.2.14
3169
3174
3170 2003-01-25 Fernando Perez <fperez@colorado.edu>
3175 2003-01-25 Fernando Perez <fperez@colorado.edu>
3171
3176
3172 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3177 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3173 functions defined in previous edit sessions could not be re-edited
3178 functions defined in previous edit sessions could not be re-edited
3174 (because the temp files were immediately removed). Now temp files
3179 (because the temp files were immediately removed). Now temp files
3175 are removed only at IPython's exit.
3180 are removed only at IPython's exit.
3176 (Magic.magic_run): Improved @run to perform shell-like expansions
3181 (Magic.magic_run): Improved @run to perform shell-like expansions
3177 on its arguments (~users and $VARS). With this, @run becomes more
3182 on its arguments (~users and $VARS). With this, @run becomes more
3178 like a normal command-line.
3183 like a normal command-line.
3179
3184
3180 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3185 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3181 bugs related to embedding and cleaned up that code. A fairly
3186 bugs related to embedding and cleaned up that code. A fairly
3182 important one was the impossibility to access the global namespace
3187 important one was the impossibility to access the global namespace
3183 through the embedded IPython (only local variables were visible).
3188 through the embedded IPython (only local variables were visible).
3184
3189
3185 2003-01-14 Fernando Perez <fperez@colorado.edu>
3190 2003-01-14 Fernando Perez <fperez@colorado.edu>
3186
3191
3187 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3192 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3188 auto-calling to be a bit more conservative. Now it doesn't get
3193 auto-calling to be a bit more conservative. Now it doesn't get
3189 triggered if any of '!=()<>' are in the rest of the input line, to
3194 triggered if any of '!=()<>' are in the rest of the input line, to
3190 allow comparing callables. Thanks to Alex for the heads up.
3195 allow comparing callables. Thanks to Alex for the heads up.
3191
3196
3192 2003-01-07 Fernando Perez <fperez@colorado.edu>
3197 2003-01-07 Fernando Perez <fperez@colorado.edu>
3193
3198
3194 * IPython/genutils.py (page): fixed estimation of the number of
3199 * IPython/genutils.py (page): fixed estimation of the number of
3195 lines in a string to be paged to simply count newlines. This
3200 lines in a string to be paged to simply count newlines. This
3196 prevents over-guessing due to embedded escape sequences. A better
3201 prevents over-guessing due to embedded escape sequences. A better
3197 long-term solution would involve stripping out the control chars
3202 long-term solution would involve stripping out the control chars
3198 for the count, but it's potentially so expensive I just don't
3203 for the count, but it's potentially so expensive I just don't
3199 think it's worth doing.
3204 think it's worth doing.
3200
3205
3201 2002-12-19 *** Released version 0.2.14pre50
3206 2002-12-19 *** Released version 0.2.14pre50
3202
3207
3203 2002-12-19 Fernando Perez <fperez@colorado.edu>
3208 2002-12-19 Fernando Perez <fperez@colorado.edu>
3204
3209
3205 * tools/release (version): Changed release scripts to inform
3210 * tools/release (version): Changed release scripts to inform
3206 Andrea and build a NEWS file with a list of recent changes.
3211 Andrea and build a NEWS file with a list of recent changes.
3207
3212
3208 * IPython/ColorANSI.py (__all__): changed terminal detection
3213 * IPython/ColorANSI.py (__all__): changed terminal detection
3209 code. Seems to work better for xterms without breaking
3214 code. Seems to work better for xterms without breaking
3210 konsole. Will need more testing to determine if WinXP and Mac OSX
3215 konsole. Will need more testing to determine if WinXP and Mac OSX
3211 also work ok.
3216 also work ok.
3212
3217
3213 2002-12-18 *** Released version 0.2.14pre49
3218 2002-12-18 *** Released version 0.2.14pre49
3214
3219
3215 2002-12-18 Fernando Perez <fperez@colorado.edu>
3220 2002-12-18 Fernando Perez <fperez@colorado.edu>
3216
3221
3217 * Docs: added new info about Mac OSX, from Andrea.
3222 * Docs: added new info about Mac OSX, from Andrea.
3218
3223
3219 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3224 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3220 allow direct plotting of python strings whose format is the same
3225 allow direct plotting of python strings whose format is the same
3221 of gnuplot data files.
3226 of gnuplot data files.
3222
3227
3223 2002-12-16 Fernando Perez <fperez@colorado.edu>
3228 2002-12-16 Fernando Perez <fperez@colorado.edu>
3224
3229
3225 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3230 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3226 value of exit question to be acknowledged.
3231 value of exit question to be acknowledged.
3227
3232
3228 2002-12-03 Fernando Perez <fperez@colorado.edu>
3233 2002-12-03 Fernando Perez <fperez@colorado.edu>
3229
3234
3230 * IPython/ipmaker.py: removed generators, which had been added
3235 * IPython/ipmaker.py: removed generators, which had been added
3231 by mistake in an earlier debugging run. This was causing trouble
3236 by mistake in an earlier debugging run. This was causing trouble
3232 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3237 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3233 for pointing this out.
3238 for pointing this out.
3234
3239
3235 2002-11-17 Fernando Perez <fperez@colorado.edu>
3240 2002-11-17 Fernando Perez <fperez@colorado.edu>
3236
3241
3237 * Manual: updated the Gnuplot section.
3242 * Manual: updated the Gnuplot section.
3238
3243
3239 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3244 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3240 a much better split of what goes in Runtime and what goes in
3245 a much better split of what goes in Runtime and what goes in
3241 Interactive.
3246 Interactive.
3242
3247
3243 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3248 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3244 being imported from iplib.
3249 being imported from iplib.
3245
3250
3246 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3251 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3247 for command-passing. Now the global Gnuplot instance is called
3252 for command-passing. Now the global Gnuplot instance is called
3248 'gp' instead of 'g', which was really a far too fragile and
3253 'gp' instead of 'g', which was really a far too fragile and
3249 common name.
3254 common name.
3250
3255
3251 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3256 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3252 bounding boxes generated by Gnuplot for square plots.
3257 bounding boxes generated by Gnuplot for square plots.
3253
3258
3254 * IPython/genutils.py (popkey): new function added. I should
3259 * IPython/genutils.py (popkey): new function added. I should
3255 suggest this on c.l.py as a dict method, it seems useful.
3260 suggest this on c.l.py as a dict method, it seems useful.
3256
3261
3257 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3262 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3258 to transparently handle PostScript generation. MUCH better than
3263 to transparently handle PostScript generation. MUCH better than
3259 the previous plot_eps/replot_eps (which I removed now). The code
3264 the previous plot_eps/replot_eps (which I removed now). The code
3260 is also fairly clean and well documented now (including
3265 is also fairly clean and well documented now (including
3261 docstrings).
3266 docstrings).
3262
3267
3263 2002-11-13 Fernando Perez <fperez@colorado.edu>
3268 2002-11-13 Fernando Perez <fperez@colorado.edu>
3264
3269
3265 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3270 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3266 (inconsistent with options).
3271 (inconsistent with options).
3267
3272
3268 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3273 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3269 manually disabled, I don't know why. Fixed it.
3274 manually disabled, I don't know why. Fixed it.
3270 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3275 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3271 eps output.
3276 eps output.
3272
3277
3273 2002-11-12 Fernando Perez <fperez@colorado.edu>
3278 2002-11-12 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3280 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3276 don't propagate up to caller. Fixes crash reported by François
3281 don't propagate up to caller. Fixes crash reported by François
3277 Pinard.
3282 Pinard.
3278
3283
3279 2002-11-09 Fernando Perez <fperez@colorado.edu>
3284 2002-11-09 Fernando Perez <fperez@colorado.edu>
3280
3285
3281 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3286 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3282 history file for new users.
3287 history file for new users.
3283 (make_IPython): fixed bug where initial install would leave the
3288 (make_IPython): fixed bug where initial install would leave the
3284 user running in the .ipython dir.
3289 user running in the .ipython dir.
3285 (make_IPython): fixed bug where config dir .ipython would be
3290 (make_IPython): fixed bug where config dir .ipython would be
3286 created regardless of the given -ipythondir option. Thanks to Cory
3291 created regardless of the given -ipythondir option. Thanks to Cory
3287 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3292 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3288
3293
3289 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3294 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3290 type confirmations. Will need to use it in all of IPython's code
3295 type confirmations. Will need to use it in all of IPython's code
3291 consistently.
3296 consistently.
3292
3297
3293 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3298 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3294 context to print 31 lines instead of the default 5. This will make
3299 context to print 31 lines instead of the default 5. This will make
3295 the crash reports extremely detailed in case the problem is in
3300 the crash reports extremely detailed in case the problem is in
3296 libraries I don't have access to.
3301 libraries I don't have access to.
3297
3302
3298 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3303 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3299 line of defense' code to still crash, but giving users fair
3304 line of defense' code to still crash, but giving users fair
3300 warning. I don't want internal errors to go unreported: if there's
3305 warning. I don't want internal errors to go unreported: if there's
3301 an internal problem, IPython should crash and generate a full
3306 an internal problem, IPython should crash and generate a full
3302 report.
3307 report.
3303
3308
3304 2002-11-08 Fernando Perez <fperez@colorado.edu>
3309 2002-11-08 Fernando Perez <fperez@colorado.edu>
3305
3310
3306 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3311 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3307 otherwise uncaught exceptions which can appear if people set
3312 otherwise uncaught exceptions which can appear if people set
3308 sys.stdout to something badly broken. Thanks to a crash report
3313 sys.stdout to something badly broken. Thanks to a crash report
3309 from henni-AT-mail.brainbot.com.
3314 from henni-AT-mail.brainbot.com.
3310
3315
3311 2002-11-04 Fernando Perez <fperez@colorado.edu>
3316 2002-11-04 Fernando Perez <fperez@colorado.edu>
3312
3317
3313 * IPython/iplib.py (InteractiveShell.interact): added
3318 * IPython/iplib.py (InteractiveShell.interact): added
3314 __IPYTHON__active to the builtins. It's a flag which goes on when
3319 __IPYTHON__active to the builtins. It's a flag which goes on when
3315 the interaction starts and goes off again when it stops. This
3320 the interaction starts and goes off again when it stops. This
3316 allows embedding code to detect being inside IPython. Before this
3321 allows embedding code to detect being inside IPython. Before this
3317 was done via __IPYTHON__, but that only shows that an IPython
3322 was done via __IPYTHON__, but that only shows that an IPython
3318 instance has been created.
3323 instance has been created.
3319
3324
3320 * IPython/Magic.py (Magic.magic_env): I realized that in a
3325 * IPython/Magic.py (Magic.magic_env): I realized that in a
3321 UserDict, instance.data holds the data as a normal dict. So I
3326 UserDict, instance.data holds the data as a normal dict. So I
3322 modified @env to return os.environ.data instead of rebuilding a
3327 modified @env to return os.environ.data instead of rebuilding a
3323 dict by hand.
3328 dict by hand.
3324
3329
3325 2002-11-02 Fernando Perez <fperez@colorado.edu>
3330 2002-11-02 Fernando Perez <fperez@colorado.edu>
3326
3331
3327 * IPython/genutils.py (warn): changed so that level 1 prints no
3332 * IPython/genutils.py (warn): changed so that level 1 prints no
3328 header. Level 2 is now the default (with 'WARNING' header, as
3333 header. Level 2 is now the default (with 'WARNING' header, as
3329 before). I think I tracked all places where changes were needed in
3334 before). I think I tracked all places where changes were needed in
3330 IPython, but outside code using the old level numbering may have
3335 IPython, but outside code using the old level numbering may have
3331 broken.
3336 broken.
3332
3337
3333 * IPython/iplib.py (InteractiveShell.runcode): added this to
3338 * IPython/iplib.py (InteractiveShell.runcode): added this to
3334 handle the tracebacks in SystemExit traps correctly. The previous
3339 handle the tracebacks in SystemExit traps correctly. The previous
3335 code (through interact) was printing more of the stack than
3340 code (through interact) was printing more of the stack than
3336 necessary, showing IPython internal code to the user.
3341 necessary, showing IPython internal code to the user.
3337
3342
3338 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3343 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3339 default. Now that the default at the confirmation prompt is yes,
3344 default. Now that the default at the confirmation prompt is yes,
3340 it's not so intrusive. François' argument that ipython sessions
3345 it's not so intrusive. François' argument that ipython sessions
3341 tend to be complex enough not to lose them from an accidental C-d,
3346 tend to be complex enough not to lose them from an accidental C-d,
3342 is a valid one.
3347 is a valid one.
3343
3348
3344 * IPython/iplib.py (InteractiveShell.interact): added a
3349 * IPython/iplib.py (InteractiveShell.interact): added a
3345 showtraceback() call to the SystemExit trap, and modified the exit
3350 showtraceback() call to the SystemExit trap, and modified the exit
3346 confirmation to have yes as the default.
3351 confirmation to have yes as the default.
3347
3352
3348 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3353 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3349 this file. It's been gone from the code for a long time, this was
3354 this file. It's been gone from the code for a long time, this was
3350 simply leftover junk.
3355 simply leftover junk.
3351
3356
3352 2002-11-01 Fernando Perez <fperez@colorado.edu>
3357 2002-11-01 Fernando Perez <fperez@colorado.edu>
3353
3358
3354 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3359 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3355 added. If set, IPython now traps EOF and asks for
3360 added. If set, IPython now traps EOF and asks for
3356 confirmation. After a request by François Pinard.
3361 confirmation. After a request by François Pinard.
3357
3362
3358 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3363 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3359 of @abort, and with a new (better) mechanism for handling the
3364 of @abort, and with a new (better) mechanism for handling the
3360 exceptions.
3365 exceptions.
3361
3366
3362 2002-10-27 Fernando Perez <fperez@colorado.edu>
3367 2002-10-27 Fernando Perez <fperez@colorado.edu>
3363
3368
3364 * IPython/usage.py (__doc__): updated the --help information and
3369 * IPython/usage.py (__doc__): updated the --help information and
3365 the ipythonrc file to indicate that -log generates
3370 the ipythonrc file to indicate that -log generates
3366 ./ipython.log. Also fixed the corresponding info in @logstart.
3371 ./ipython.log. Also fixed the corresponding info in @logstart.
3367 This and several other fixes in the manuals thanks to reports by
3372 This and several other fixes in the manuals thanks to reports by
3368 François Pinard <pinard-AT-iro.umontreal.ca>.
3373 François Pinard <pinard-AT-iro.umontreal.ca>.
3369
3374
3370 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3375 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3371 refer to @logstart (instead of @log, which doesn't exist).
3376 refer to @logstart (instead of @log, which doesn't exist).
3372
3377
3373 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3378 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3374 AttributeError crash. Thanks to Christopher Armstrong
3379 AttributeError crash. Thanks to Christopher Armstrong
3375 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3380 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3376 introduced recently (in 0.2.14pre37) with the fix to the eval
3381 introduced recently (in 0.2.14pre37) with the fix to the eval
3377 problem mentioned below.
3382 problem mentioned below.
3378
3383
3379 2002-10-17 Fernando Perez <fperez@colorado.edu>
3384 2002-10-17 Fernando Perez <fperez@colorado.edu>
3380
3385
3381 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3386 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3382 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3387 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3383
3388
3384 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3389 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3385 this function to fix a problem reported by Alex Schmolck. He saw
3390 this function to fix a problem reported by Alex Schmolck. He saw
3386 it with list comprehensions and generators, which were getting
3391 it with list comprehensions and generators, which were getting
3387 called twice. The real problem was an 'eval' call in testing for
3392 called twice. The real problem was an 'eval' call in testing for
3388 automagic which was evaluating the input line silently.
3393 automagic which was evaluating the input line silently.
3389
3394
3390 This is a potentially very nasty bug, if the input has side
3395 This is a potentially very nasty bug, if the input has side
3391 effects which must not be repeated. The code is much cleaner now,
3396 effects which must not be repeated. The code is much cleaner now,
3392 without any blanket 'except' left and with a regexp test for
3397 without any blanket 'except' left and with a regexp test for
3393 actual function names.
3398 actual function names.
3394
3399
3395 But an eval remains, which I'm not fully comfortable with. I just
3400 But an eval remains, which I'm not fully comfortable with. I just
3396 don't know how to find out if an expression could be a callable in
3401 don't know how to find out if an expression could be a callable in
3397 the user's namespace without doing an eval on the string. However
3402 the user's namespace without doing an eval on the string. However
3398 that string is now much more strictly checked so that no code
3403 that string is now much more strictly checked so that no code
3399 slips by, so the eval should only happen for things that can
3404 slips by, so the eval should only happen for things that can
3400 really be only function/method names.
3405 really be only function/method names.
3401
3406
3402 2002-10-15 Fernando Perez <fperez@colorado.edu>
3407 2002-10-15 Fernando Perez <fperez@colorado.edu>
3403
3408
3404 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3409 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3405 OSX information to main manual, removed README_Mac_OSX file from
3410 OSX information to main manual, removed README_Mac_OSX file from
3406 distribution. Also updated credits for recent additions.
3411 distribution. Also updated credits for recent additions.
3407
3412
3408 2002-10-10 Fernando Perez <fperez@colorado.edu>
3413 2002-10-10 Fernando Perez <fperez@colorado.edu>
3409
3414
3410 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3415 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3411 terminal-related issues. Many thanks to Andrea Riciputi
3416 terminal-related issues. Many thanks to Andrea Riciputi
3412 <andrea.riciputi-AT-libero.it> for writing it.
3417 <andrea.riciputi-AT-libero.it> for writing it.
3413
3418
3414 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3419 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3415 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3420 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3416
3421
3417 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3422 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3418 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3423 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3419 <syver-en-AT-online.no> who both submitted patches for this problem.
3424 <syver-en-AT-online.no> who both submitted patches for this problem.
3420
3425
3421 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3426 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3422 global embedding to make sure that things don't overwrite user
3427 global embedding to make sure that things don't overwrite user
3423 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3428 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3424
3429
3425 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3430 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3426 compatibility. Thanks to Hayden Callow
3431 compatibility. Thanks to Hayden Callow
3427 <h.callow-AT-elec.canterbury.ac.nz>
3432 <h.callow-AT-elec.canterbury.ac.nz>
3428
3433
3429 2002-10-04 Fernando Perez <fperez@colorado.edu>
3434 2002-10-04 Fernando Perez <fperez@colorado.edu>
3430
3435
3431 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3436 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3432 Gnuplot.File objects.
3437 Gnuplot.File objects.
3433
3438
3434 2002-07-23 Fernando Perez <fperez@colorado.edu>
3439 2002-07-23 Fernando Perez <fperez@colorado.edu>
3435
3440
3436 * IPython/genutils.py (timing): Added timings() and timing() for
3441 * IPython/genutils.py (timing): Added timings() and timing() for
3437 quick access to the most commonly needed data, the execution
3442 quick access to the most commonly needed data, the execution
3438 times. Old timing() renamed to timings_out().
3443 times. Old timing() renamed to timings_out().
3439
3444
3440 2002-07-18 Fernando Perez <fperez@colorado.edu>
3445 2002-07-18 Fernando Perez <fperez@colorado.edu>
3441
3446
3442 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3447 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3443 bug with nested instances disrupting the parent's tab completion.
3448 bug with nested instances disrupting the parent's tab completion.
3444
3449
3445 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3450 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3446 all_completions code to begin the emacs integration.
3451 all_completions code to begin the emacs integration.
3447
3452
3448 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3453 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3449 argument to allow titling individual arrays when plotting.
3454 argument to allow titling individual arrays when plotting.
3450
3455
3451 2002-07-15 Fernando Perez <fperez@colorado.edu>
3456 2002-07-15 Fernando Perez <fperez@colorado.edu>
3452
3457
3453 * setup.py (make_shortcut): changed to retrieve the value of
3458 * setup.py (make_shortcut): changed to retrieve the value of
3454 'Program Files' directory from the registry (this value changes in
3459 'Program Files' directory from the registry (this value changes in
3455 non-english versions of Windows). Thanks to Thomas Fanslau
3460 non-english versions of Windows). Thanks to Thomas Fanslau
3456 <tfanslau-AT-gmx.de> for the report.
3461 <tfanslau-AT-gmx.de> for the report.
3457
3462
3458 2002-07-10 Fernando Perez <fperez@colorado.edu>
3463 2002-07-10 Fernando Perez <fperez@colorado.edu>
3459
3464
3460 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3465 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3461 a bug in pdb, which crashes if a line with only whitespace is
3466 a bug in pdb, which crashes if a line with only whitespace is
3462 entered. Bug report submitted to sourceforge.
3467 entered. Bug report submitted to sourceforge.
3463
3468
3464 2002-07-09 Fernando Perez <fperez@colorado.edu>
3469 2002-07-09 Fernando Perez <fperez@colorado.edu>
3465
3470
3466 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3471 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3467 reporting exceptions (it's a bug in inspect.py, I just set a
3472 reporting exceptions (it's a bug in inspect.py, I just set a
3468 workaround).
3473 workaround).
3469
3474
3470 2002-07-08 Fernando Perez <fperez@colorado.edu>
3475 2002-07-08 Fernando Perez <fperez@colorado.edu>
3471
3476
3472 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3477 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3473 __IPYTHON__ in __builtins__ to show up in user_ns.
3478 __IPYTHON__ in __builtins__ to show up in user_ns.
3474
3479
3475 2002-07-03 Fernando Perez <fperez@colorado.edu>
3480 2002-07-03 Fernando Perez <fperez@colorado.edu>
3476
3481
3477 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3482 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3478 name from @gp_set_instance to @gp_set_default.
3483 name from @gp_set_instance to @gp_set_default.
3479
3484
3480 * IPython/ipmaker.py (make_IPython): default editor value set to
3485 * IPython/ipmaker.py (make_IPython): default editor value set to
3481 '0' (a string), to match the rc file. Otherwise will crash when
3486 '0' (a string), to match the rc file. Otherwise will crash when
3482 .strip() is called on it.
3487 .strip() is called on it.
3483
3488
3484
3489
3485 2002-06-28 Fernando Perez <fperez@colorado.edu>
3490 2002-06-28 Fernando Perez <fperez@colorado.edu>
3486
3491
3487 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3492 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3488 of files in current directory when a file is executed via
3493 of files in current directory when a file is executed via
3489 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3494 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3490
3495
3491 * setup.py (manfiles): fix for rpm builds, submitted by RA
3496 * setup.py (manfiles): fix for rpm builds, submitted by RA
3492 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3497 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3493
3498
3494 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3499 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3495 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3500 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3496 string!). A. Schmolck caught this one.
3501 string!). A. Schmolck caught this one.
3497
3502
3498 2002-06-27 Fernando Perez <fperez@colorado.edu>
3503 2002-06-27 Fernando Perez <fperez@colorado.edu>
3499
3504
3500 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3505 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3501 defined files at the cmd line. __name__ wasn't being set to
3506 defined files at the cmd line. __name__ wasn't being set to
3502 __main__.
3507 __main__.
3503
3508
3504 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3509 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3505 regular lists and tuples besides Numeric arrays.
3510 regular lists and tuples besides Numeric arrays.
3506
3511
3507 * IPython/Prompts.py (CachedOutput.__call__): Added output
3512 * IPython/Prompts.py (CachedOutput.__call__): Added output
3508 supression for input ending with ';'. Similar to Mathematica and
3513 supression for input ending with ';'. Similar to Mathematica and
3509 Matlab. The _* vars and Out[] list are still updated, just like
3514 Matlab. The _* vars and Out[] list are still updated, just like
3510 Mathematica behaves.
3515 Mathematica behaves.
3511
3516
3512 2002-06-25 Fernando Perez <fperez@colorado.edu>
3517 2002-06-25 Fernando Perez <fperez@colorado.edu>
3513
3518
3514 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3519 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3515 .ini extensions for profiels under Windows.
3520 .ini extensions for profiels under Windows.
3516
3521
3517 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3522 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3518 string form. Fix contributed by Alexander Schmolck
3523 string form. Fix contributed by Alexander Schmolck
3519 <a.schmolck-AT-gmx.net>
3524 <a.schmolck-AT-gmx.net>
3520
3525
3521 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3526 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3522 pre-configured Gnuplot instance.
3527 pre-configured Gnuplot instance.
3523
3528
3524 2002-06-21 Fernando Perez <fperez@colorado.edu>
3529 2002-06-21 Fernando Perez <fperez@colorado.edu>
3525
3530
3526 * IPython/numutils.py (exp_safe): new function, works around the
3531 * IPython/numutils.py (exp_safe): new function, works around the
3527 underflow problems in Numeric.
3532 underflow problems in Numeric.
3528 (log2): New fn. Safe log in base 2: returns exact integer answer
3533 (log2): New fn. Safe log in base 2: returns exact integer answer
3529 for exact integer powers of 2.
3534 for exact integer powers of 2.
3530
3535
3531 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3536 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3532 properly.
3537 properly.
3533
3538
3534 2002-06-20 Fernando Perez <fperez@colorado.edu>
3539 2002-06-20 Fernando Perez <fperez@colorado.edu>
3535
3540
3536 * IPython/genutils.py (timing): new function like
3541 * IPython/genutils.py (timing): new function like
3537 Mathematica's. Similar to time_test, but returns more info.
3542 Mathematica's. Similar to time_test, but returns more info.
3538
3543
3539 2002-06-18 Fernando Perez <fperez@colorado.edu>
3544 2002-06-18 Fernando Perez <fperez@colorado.edu>
3540
3545
3541 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3546 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3542 according to Mike Heeter's suggestions.
3547 according to Mike Heeter's suggestions.
3543
3548
3544 2002-06-16 Fernando Perez <fperez@colorado.edu>
3549 2002-06-16 Fernando Perez <fperez@colorado.edu>
3545
3550
3546 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3551 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3547 system. GnuplotMagic is gone as a user-directory option. New files
3552 system. GnuplotMagic is gone as a user-directory option. New files
3548 make it easier to use all the gnuplot stuff both from external
3553 make it easier to use all the gnuplot stuff both from external
3549 programs as well as from IPython. Had to rewrite part of
3554 programs as well as from IPython. Had to rewrite part of
3550 hardcopy() b/c of a strange bug: often the ps files simply don't
3555 hardcopy() b/c of a strange bug: often the ps files simply don't
3551 get created, and require a repeat of the command (often several
3556 get created, and require a repeat of the command (often several
3552 times).
3557 times).
3553
3558
3554 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3559 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3555 resolve output channel at call time, so that if sys.stderr has
3560 resolve output channel at call time, so that if sys.stderr has
3556 been redirected by user this gets honored.
3561 been redirected by user this gets honored.
3557
3562
3558 2002-06-13 Fernando Perez <fperez@colorado.edu>
3563 2002-06-13 Fernando Perez <fperez@colorado.edu>
3559
3564
3560 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3565 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3561 IPShell. Kept a copy with the old names to avoid breaking people's
3566 IPShell. Kept a copy with the old names to avoid breaking people's
3562 embedded code.
3567 embedded code.
3563
3568
3564 * IPython/ipython: simplified it to the bare minimum after
3569 * IPython/ipython: simplified it to the bare minimum after
3565 Holger's suggestions. Added info about how to use it in
3570 Holger's suggestions. Added info about how to use it in
3566 PYTHONSTARTUP.
3571 PYTHONSTARTUP.
3567
3572
3568 * IPython/Shell.py (IPythonShell): changed the options passing
3573 * IPython/Shell.py (IPythonShell): changed the options passing
3569 from a string with funky %s replacements to a straight list. Maybe
3574 from a string with funky %s replacements to a straight list. Maybe
3570 a bit more typing, but it follows sys.argv conventions, so there's
3575 a bit more typing, but it follows sys.argv conventions, so there's
3571 less special-casing to remember.
3576 less special-casing to remember.
3572
3577
3573 2002-06-12 Fernando Perez <fperez@colorado.edu>
3578 2002-06-12 Fernando Perez <fperez@colorado.edu>
3574
3579
3575 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3580 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3576 command. Thanks to a suggestion by Mike Heeter.
3581 command. Thanks to a suggestion by Mike Heeter.
3577 (Magic.magic_pfile): added behavior to look at filenames if given
3582 (Magic.magic_pfile): added behavior to look at filenames if given
3578 arg is not a defined object.
3583 arg is not a defined object.
3579 (Magic.magic_save): New @save function to save code snippets. Also
3584 (Magic.magic_save): New @save function to save code snippets. Also
3580 a Mike Heeter idea.
3585 a Mike Heeter idea.
3581
3586
3582 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3587 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3583 plot() and replot(). Much more convenient now, especially for
3588 plot() and replot(). Much more convenient now, especially for
3584 interactive use.
3589 interactive use.
3585
3590
3586 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3591 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3587 filenames.
3592 filenames.
3588
3593
3589 2002-06-02 Fernando Perez <fperez@colorado.edu>
3594 2002-06-02 Fernando Perez <fperez@colorado.edu>
3590
3595
3591 * IPython/Struct.py (Struct.__init__): modified to admit
3596 * IPython/Struct.py (Struct.__init__): modified to admit
3592 initialization via another struct.
3597 initialization via another struct.
3593
3598
3594 * IPython/genutils.py (SystemExec.__init__): New stateful
3599 * IPython/genutils.py (SystemExec.__init__): New stateful
3595 interface to xsys and bq. Useful for writing system scripts.
3600 interface to xsys and bq. Useful for writing system scripts.
3596
3601
3597 2002-05-30 Fernando Perez <fperez@colorado.edu>
3602 2002-05-30 Fernando Perez <fperez@colorado.edu>
3598
3603
3599 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3604 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3600 documents. This will make the user download smaller (it's getting
3605 documents. This will make the user download smaller (it's getting
3601 too big).
3606 too big).
3602
3607
3603 2002-05-29 Fernando Perez <fperez@colorado.edu>
3608 2002-05-29 Fernando Perez <fperez@colorado.edu>
3604
3609
3605 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3610 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3606 fix problems with shelve and pickle. Seems to work, but I don't
3611 fix problems with shelve and pickle. Seems to work, but I don't
3607 know if corner cases break it. Thanks to Mike Heeter
3612 know if corner cases break it. Thanks to Mike Heeter
3608 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3613 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3609
3614
3610 2002-05-24 Fernando Perez <fperez@colorado.edu>
3615 2002-05-24 Fernando Perez <fperez@colorado.edu>
3611
3616
3612 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3617 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3613 macros having broken.
3618 macros having broken.
3614
3619
3615 2002-05-21 Fernando Perez <fperez@colorado.edu>
3620 2002-05-21 Fernando Perez <fperez@colorado.edu>
3616
3621
3617 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3622 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3618 introduced logging bug: all history before logging started was
3623 introduced logging bug: all history before logging started was
3619 being written one character per line! This came from the redesign
3624 being written one character per line! This came from the redesign
3620 of the input history as a special list which slices to strings,
3625 of the input history as a special list which slices to strings,
3621 not to lists.
3626 not to lists.
3622
3627
3623 2002-05-20 Fernando Perez <fperez@colorado.edu>
3628 2002-05-20 Fernando Perez <fperez@colorado.edu>
3624
3629
3625 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3630 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3626 be an attribute of all classes in this module. The design of these
3631 be an attribute of all classes in this module. The design of these
3627 classes needs some serious overhauling.
3632 classes needs some serious overhauling.
3628
3633
3629 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3634 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3630 which was ignoring '_' in option names.
3635 which was ignoring '_' in option names.
3631
3636
3632 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3637 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3633 'Verbose_novars' to 'Context' and made it the new default. It's a
3638 'Verbose_novars' to 'Context' and made it the new default. It's a
3634 bit more readable and also safer than verbose.
3639 bit more readable and also safer than verbose.
3635
3640
3636 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3641 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3637 triple-quoted strings.
3642 triple-quoted strings.
3638
3643
3639 * IPython/OInspect.py (__all__): new module exposing the object
3644 * IPython/OInspect.py (__all__): new module exposing the object
3640 introspection facilities. Now the corresponding magics are dummy
3645 introspection facilities. Now the corresponding magics are dummy
3641 wrappers around this. Having this module will make it much easier
3646 wrappers around this. Having this module will make it much easier
3642 to put these functions into our modified pdb.
3647 to put these functions into our modified pdb.
3643 This new object inspector system uses the new colorizing module,
3648 This new object inspector system uses the new colorizing module,
3644 so source code and other things are nicely syntax highlighted.
3649 so source code and other things are nicely syntax highlighted.
3645
3650
3646 2002-05-18 Fernando Perez <fperez@colorado.edu>
3651 2002-05-18 Fernando Perez <fperez@colorado.edu>
3647
3652
3648 * IPython/ColorANSI.py: Split the coloring tools into a separate
3653 * IPython/ColorANSI.py: Split the coloring tools into a separate
3649 module so I can use them in other code easier (they were part of
3654 module so I can use them in other code easier (they were part of
3650 ultraTB).
3655 ultraTB).
3651
3656
3652 2002-05-17 Fernando Perez <fperez@colorado.edu>
3657 2002-05-17 Fernando Perez <fperez@colorado.edu>
3653
3658
3654 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3659 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3655 fixed it to set the global 'g' also to the called instance, as
3660 fixed it to set the global 'g' also to the called instance, as
3656 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3661 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3657 user's 'g' variables).
3662 user's 'g' variables).
3658
3663
3659 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3664 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3660 global variables (aliases to _ih,_oh) so that users which expect
3665 global variables (aliases to _ih,_oh) so that users which expect
3661 In[5] or Out[7] to work aren't unpleasantly surprised.
3666 In[5] or Out[7] to work aren't unpleasantly surprised.
3662 (InputList.__getslice__): new class to allow executing slices of
3667 (InputList.__getslice__): new class to allow executing slices of
3663 input history directly. Very simple class, complements the use of
3668 input history directly. Very simple class, complements the use of
3664 macros.
3669 macros.
3665
3670
3666 2002-05-16 Fernando Perez <fperez@colorado.edu>
3671 2002-05-16 Fernando Perez <fperez@colorado.edu>
3667
3672
3668 * setup.py (docdirbase): make doc directory be just doc/IPython
3673 * setup.py (docdirbase): make doc directory be just doc/IPython
3669 without version numbers, it will reduce clutter for users.
3674 without version numbers, it will reduce clutter for users.
3670
3675
3671 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3676 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3672 execfile call to prevent possible memory leak. See for details:
3677 execfile call to prevent possible memory leak. See for details:
3673 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3678 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3674
3679
3675 2002-05-15 Fernando Perez <fperez@colorado.edu>
3680 2002-05-15 Fernando Perez <fperez@colorado.edu>
3676
3681
3677 * IPython/Magic.py (Magic.magic_psource): made the object
3682 * IPython/Magic.py (Magic.magic_psource): made the object
3678 introspection names be more standard: pdoc, pdef, pfile and
3683 introspection names be more standard: pdoc, pdef, pfile and
3679 psource. They all print/page their output, and it makes
3684 psource. They all print/page their output, and it makes
3680 remembering them easier. Kept old names for compatibility as
3685 remembering them easier. Kept old names for compatibility as
3681 aliases.
3686 aliases.
3682
3687
3683 2002-05-14 Fernando Perez <fperez@colorado.edu>
3688 2002-05-14 Fernando Perez <fperez@colorado.edu>
3684
3689
3685 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3690 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3686 what the mouse problem was. The trick is to use gnuplot with temp
3691 what the mouse problem was. The trick is to use gnuplot with temp
3687 files and NOT with pipes (for data communication), because having
3692 files and NOT with pipes (for data communication), because having
3688 both pipes and the mouse on is bad news.
3693 both pipes and the mouse on is bad news.
3689
3694
3690 2002-05-13 Fernando Perez <fperez@colorado.edu>
3695 2002-05-13 Fernando Perez <fperez@colorado.edu>
3691
3696
3692 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3697 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3693 bug. Information would be reported about builtins even when
3698 bug. Information would be reported about builtins even when
3694 user-defined functions overrode them.
3699 user-defined functions overrode them.
3695
3700
3696 2002-05-11 Fernando Perez <fperez@colorado.edu>
3701 2002-05-11 Fernando Perez <fperez@colorado.edu>
3697
3702
3698 * IPython/__init__.py (__all__): removed FlexCompleter from
3703 * IPython/__init__.py (__all__): removed FlexCompleter from
3699 __all__ so that things don't fail in platforms without readline.
3704 __all__ so that things don't fail in platforms without readline.
3700
3705
3701 2002-05-10 Fernando Perez <fperez@colorado.edu>
3706 2002-05-10 Fernando Perez <fperez@colorado.edu>
3702
3707
3703 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3708 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3704 it requires Numeric, effectively making Numeric a dependency for
3709 it requires Numeric, effectively making Numeric a dependency for
3705 IPython.
3710 IPython.
3706
3711
3707 * Released 0.2.13
3712 * Released 0.2.13
3708
3713
3709 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3714 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3710 profiler interface. Now all the major options from the profiler
3715 profiler interface. Now all the major options from the profiler
3711 module are directly supported in IPython, both for single
3716 module are directly supported in IPython, both for single
3712 expressions (@prun) and for full programs (@run -p).
3717 expressions (@prun) and for full programs (@run -p).
3713
3718
3714 2002-05-09 Fernando Perez <fperez@colorado.edu>
3719 2002-05-09 Fernando Perez <fperez@colorado.edu>
3715
3720
3716 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3721 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3717 magic properly formatted for screen.
3722 magic properly formatted for screen.
3718
3723
3719 * setup.py (make_shortcut): Changed things to put pdf version in
3724 * setup.py (make_shortcut): Changed things to put pdf version in
3720 doc/ instead of doc/manual (had to change lyxport a bit).
3725 doc/ instead of doc/manual (had to change lyxport a bit).
3721
3726
3722 * IPython/Magic.py (Profile.string_stats): made profile runs go
3727 * IPython/Magic.py (Profile.string_stats): made profile runs go
3723 through pager (they are long and a pager allows searching, saving,
3728 through pager (they are long and a pager allows searching, saving,
3724 etc.)
3729 etc.)
3725
3730
3726 2002-05-08 Fernando Perez <fperez@colorado.edu>
3731 2002-05-08 Fernando Perez <fperez@colorado.edu>
3727
3732
3728 * Released 0.2.12
3733 * Released 0.2.12
3729
3734
3730 2002-05-06 Fernando Perez <fperez@colorado.edu>
3735 2002-05-06 Fernando Perez <fperez@colorado.edu>
3731
3736
3732 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3737 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3733 introduced); 'hist n1 n2' was broken.
3738 introduced); 'hist n1 n2' was broken.
3734 (Magic.magic_pdb): added optional on/off arguments to @pdb
3739 (Magic.magic_pdb): added optional on/off arguments to @pdb
3735 (Magic.magic_run): added option -i to @run, which executes code in
3740 (Magic.magic_run): added option -i to @run, which executes code in
3736 the IPython namespace instead of a clean one. Also added @irun as
3741 the IPython namespace instead of a clean one. Also added @irun as
3737 an alias to @run -i.
3742 an alias to @run -i.
3738
3743
3739 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3744 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3740 fixed (it didn't really do anything, the namespaces were wrong).
3745 fixed (it didn't really do anything, the namespaces were wrong).
3741
3746
3742 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3747 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3743
3748
3744 * IPython/__init__.py (__all__): Fixed package namespace, now
3749 * IPython/__init__.py (__all__): Fixed package namespace, now
3745 'import IPython' does give access to IPython.<all> as
3750 'import IPython' does give access to IPython.<all> as
3746 expected. Also renamed __release__ to Release.
3751 expected. Also renamed __release__ to Release.
3747
3752
3748 * IPython/Debugger.py (__license__): created new Pdb class which
3753 * IPython/Debugger.py (__license__): created new Pdb class which
3749 functions like a drop-in for the normal pdb.Pdb but does NOT
3754 functions like a drop-in for the normal pdb.Pdb but does NOT
3750 import readline by default. This way it doesn't muck up IPython's
3755 import readline by default. This way it doesn't muck up IPython's
3751 readline handling, and now tab-completion finally works in the
3756 readline handling, and now tab-completion finally works in the
3752 debugger -- sort of. It completes things globally visible, but the
3757 debugger -- sort of. It completes things globally visible, but the
3753 completer doesn't track the stack as pdb walks it. That's a bit
3758 completer doesn't track the stack as pdb walks it. That's a bit
3754 tricky, and I'll have to implement it later.
3759 tricky, and I'll have to implement it later.
3755
3760
3756 2002-05-05 Fernando Perez <fperez@colorado.edu>
3761 2002-05-05 Fernando Perez <fperez@colorado.edu>
3757
3762
3758 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3763 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3759 magic docstrings when printed via ? (explicit \'s were being
3764 magic docstrings when printed via ? (explicit \'s were being
3760 printed).
3765 printed).
3761
3766
3762 * IPython/ipmaker.py (make_IPython): fixed namespace
3767 * IPython/ipmaker.py (make_IPython): fixed namespace
3763 identification bug. Now variables loaded via logs or command-line
3768 identification bug. Now variables loaded via logs or command-line
3764 files are recognized in the interactive namespace by @who.
3769 files are recognized in the interactive namespace by @who.
3765
3770
3766 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3771 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3767 log replay system stemming from the string form of Structs.
3772 log replay system stemming from the string form of Structs.
3768
3773
3769 * IPython/Magic.py (Macro.__init__): improved macros to properly
3774 * IPython/Magic.py (Macro.__init__): improved macros to properly
3770 handle magic commands in them.
3775 handle magic commands in them.
3771 (Magic.magic_logstart): usernames are now expanded so 'logstart
3776 (Magic.magic_logstart): usernames are now expanded so 'logstart
3772 ~/mylog' now works.
3777 ~/mylog' now works.
3773
3778
3774 * IPython/iplib.py (complete): fixed bug where paths starting with
3779 * IPython/iplib.py (complete): fixed bug where paths starting with
3775 '/' would be completed as magic names.
3780 '/' would be completed as magic names.
3776
3781
3777 2002-05-04 Fernando Perez <fperez@colorado.edu>
3782 2002-05-04 Fernando Perez <fperez@colorado.edu>
3778
3783
3779 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3784 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3780 allow running full programs under the profiler's control.
3785 allow running full programs under the profiler's control.
3781
3786
3782 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3787 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3783 mode to report exceptions verbosely but without formatting
3788 mode to report exceptions verbosely but without formatting
3784 variables. This addresses the issue of ipython 'freezing' (it's
3789 variables. This addresses the issue of ipython 'freezing' (it's
3785 not frozen, but caught in an expensive formatting loop) when huge
3790 not frozen, but caught in an expensive formatting loop) when huge
3786 variables are in the context of an exception.
3791 variables are in the context of an exception.
3787 (VerboseTB.text): Added '--->' markers at line where exception was
3792 (VerboseTB.text): Added '--->' markers at line where exception was
3788 triggered. Much clearer to read, especially in NoColor modes.
3793 triggered. Much clearer to read, especially in NoColor modes.
3789
3794
3790 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3795 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3791 implemented in reverse when changing to the new parse_options().
3796 implemented in reverse when changing to the new parse_options().
3792
3797
3793 2002-05-03 Fernando Perez <fperez@colorado.edu>
3798 2002-05-03 Fernando Perez <fperez@colorado.edu>
3794
3799
3795 * IPython/Magic.py (Magic.parse_options): new function so that
3800 * IPython/Magic.py (Magic.parse_options): new function so that
3796 magics can parse options easier.
3801 magics can parse options easier.
3797 (Magic.magic_prun): new function similar to profile.run(),
3802 (Magic.magic_prun): new function similar to profile.run(),
3798 suggested by Chris Hart.
3803 suggested by Chris Hart.
3799 (Magic.magic_cd): fixed behavior so that it only changes if
3804 (Magic.magic_cd): fixed behavior so that it only changes if
3800 directory actually is in history.
3805 directory actually is in history.
3801
3806
3802 * IPython/usage.py (__doc__): added information about potential
3807 * IPython/usage.py (__doc__): added information about potential
3803 slowness of Verbose exception mode when there are huge data
3808 slowness of Verbose exception mode when there are huge data
3804 structures to be formatted (thanks to Archie Paulson).
3809 structures to be formatted (thanks to Archie Paulson).
3805
3810
3806 * IPython/ipmaker.py (make_IPython): Changed default logging
3811 * IPython/ipmaker.py (make_IPython): Changed default logging
3807 (when simply called with -log) to use curr_dir/ipython.log in
3812 (when simply called with -log) to use curr_dir/ipython.log in
3808 rotate mode. Fixed crash which was occuring with -log before
3813 rotate mode. Fixed crash which was occuring with -log before
3809 (thanks to Jim Boyle).
3814 (thanks to Jim Boyle).
3810
3815
3811 2002-05-01 Fernando Perez <fperez@colorado.edu>
3816 2002-05-01 Fernando Perez <fperez@colorado.edu>
3812
3817
3813 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3818 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3814 was nasty -- though somewhat of a corner case).
3819 was nasty -- though somewhat of a corner case).
3815
3820
3816 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3821 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3817 text (was a bug).
3822 text (was a bug).
3818
3823
3819 2002-04-30 Fernando Perez <fperez@colorado.edu>
3824 2002-04-30 Fernando Perez <fperez@colorado.edu>
3820
3825
3821 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3826 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3822 a print after ^D or ^C from the user so that the In[] prompt
3827 a print after ^D or ^C from the user so that the In[] prompt
3823 doesn't over-run the gnuplot one.
3828 doesn't over-run the gnuplot one.
3824
3829
3825 2002-04-29 Fernando Perez <fperez@colorado.edu>
3830 2002-04-29 Fernando Perez <fperez@colorado.edu>
3826
3831
3827 * Released 0.2.10
3832 * Released 0.2.10
3828
3833
3829 * IPython/__release__.py (version): get date dynamically.
3834 * IPython/__release__.py (version): get date dynamically.
3830
3835
3831 * Misc. documentation updates thanks to Arnd's comments. Also ran
3836 * Misc. documentation updates thanks to Arnd's comments. Also ran
3832 a full spellcheck on the manual (hadn't been done in a while).
3837 a full spellcheck on the manual (hadn't been done in a while).
3833
3838
3834 2002-04-27 Fernando Perez <fperez@colorado.edu>
3839 2002-04-27 Fernando Perez <fperez@colorado.edu>
3835
3840
3836 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3841 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3837 starting a log in mid-session would reset the input history list.
3842 starting a log in mid-session would reset the input history list.
3838
3843
3839 2002-04-26 Fernando Perez <fperez@colorado.edu>
3844 2002-04-26 Fernando Perez <fperez@colorado.edu>
3840
3845
3841 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3846 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3842 all files were being included in an update. Now anything in
3847 all files were being included in an update. Now anything in
3843 UserConfig that matches [A-Za-z]*.py will go (this excludes
3848 UserConfig that matches [A-Za-z]*.py will go (this excludes
3844 __init__.py)
3849 __init__.py)
3845
3850
3846 2002-04-25 Fernando Perez <fperez@colorado.edu>
3851 2002-04-25 Fernando Perez <fperez@colorado.edu>
3847
3852
3848 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3853 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3849 to __builtins__ so that any form of embedded or imported code can
3854 to __builtins__ so that any form of embedded or imported code can
3850 test for being inside IPython.
3855 test for being inside IPython.
3851
3856
3852 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3857 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3853 changed to GnuplotMagic because it's now an importable module,
3858 changed to GnuplotMagic because it's now an importable module,
3854 this makes the name follow that of the standard Gnuplot module.
3859 this makes the name follow that of the standard Gnuplot module.
3855 GnuplotMagic can now be loaded at any time in mid-session.
3860 GnuplotMagic can now be loaded at any time in mid-session.
3856
3861
3857 2002-04-24 Fernando Perez <fperez@colorado.edu>
3862 2002-04-24 Fernando Perez <fperez@colorado.edu>
3858
3863
3859 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3864 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3860 the globals (IPython has its own namespace) and the
3865 the globals (IPython has its own namespace) and the
3861 PhysicalQuantity stuff is much better anyway.
3866 PhysicalQuantity stuff is much better anyway.
3862
3867
3863 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3868 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3864 embedding example to standard user directory for
3869 embedding example to standard user directory for
3865 distribution. Also put it in the manual.
3870 distribution. Also put it in the manual.
3866
3871
3867 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3872 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3868 instance as first argument (so it doesn't rely on some obscure
3873 instance as first argument (so it doesn't rely on some obscure
3869 hidden global).
3874 hidden global).
3870
3875
3871 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3876 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3872 delimiters. While it prevents ().TAB from working, it allows
3877 delimiters. While it prevents ().TAB from working, it allows
3873 completions in open (... expressions. This is by far a more common
3878 completions in open (... expressions. This is by far a more common
3874 case.
3879 case.
3875
3880
3876 2002-04-23 Fernando Perez <fperez@colorado.edu>
3881 2002-04-23 Fernando Perez <fperez@colorado.edu>
3877
3882
3878 * IPython/Extensions/InterpreterPasteInput.py: new
3883 * IPython/Extensions/InterpreterPasteInput.py: new
3879 syntax-processing module for pasting lines with >>> or ... at the
3884 syntax-processing module for pasting lines with >>> or ... at the
3880 start.
3885 start.
3881
3886
3882 * IPython/Extensions/PhysicalQ_Interactive.py
3887 * IPython/Extensions/PhysicalQ_Interactive.py
3883 (PhysicalQuantityInteractive.__int__): fixed to work with either
3888 (PhysicalQuantityInteractive.__int__): fixed to work with either
3884 Numeric or math.
3889 Numeric or math.
3885
3890
3886 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3891 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3887 provided profiles. Now we have:
3892 provided profiles. Now we have:
3888 -math -> math module as * and cmath with its own namespace.
3893 -math -> math module as * and cmath with its own namespace.
3889 -numeric -> Numeric as *, plus gnuplot & grace
3894 -numeric -> Numeric as *, plus gnuplot & grace
3890 -physics -> same as before
3895 -physics -> same as before
3891
3896
3892 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3897 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3893 user-defined magics wouldn't be found by @magic if they were
3898 user-defined magics wouldn't be found by @magic if they were
3894 defined as class methods. Also cleaned up the namespace search
3899 defined as class methods. Also cleaned up the namespace search
3895 logic and the string building (to use %s instead of many repeated
3900 logic and the string building (to use %s instead of many repeated
3896 string adds).
3901 string adds).
3897
3902
3898 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3903 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3899 of user-defined magics to operate with class methods (cleaner, in
3904 of user-defined magics to operate with class methods (cleaner, in
3900 line with the gnuplot code).
3905 line with the gnuplot code).
3901
3906
3902 2002-04-22 Fernando Perez <fperez@colorado.edu>
3907 2002-04-22 Fernando Perez <fperez@colorado.edu>
3903
3908
3904 * setup.py: updated dependency list so that manual is updated when
3909 * setup.py: updated dependency list so that manual is updated when
3905 all included files change.
3910 all included files change.
3906
3911
3907 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3912 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3908 the delimiter removal option (the fix is ugly right now).
3913 the delimiter removal option (the fix is ugly right now).
3909
3914
3910 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3915 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3911 all of the math profile (quicker loading, no conflict between
3916 all of the math profile (quicker loading, no conflict between
3912 g-9.8 and g-gnuplot).
3917 g-9.8 and g-gnuplot).
3913
3918
3914 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3919 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3915 name of post-mortem files to IPython_crash_report.txt.
3920 name of post-mortem files to IPython_crash_report.txt.
3916
3921
3917 * Cleanup/update of the docs. Added all the new readline info and
3922 * Cleanup/update of the docs. Added all the new readline info and
3918 formatted all lists as 'real lists'.
3923 formatted all lists as 'real lists'.
3919
3924
3920 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3925 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3921 tab-completion options, since the full readline parse_and_bind is
3926 tab-completion options, since the full readline parse_and_bind is
3922 now accessible.
3927 now accessible.
3923
3928
3924 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3929 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3925 handling of readline options. Now users can specify any string to
3930 handling of readline options. Now users can specify any string to
3926 be passed to parse_and_bind(), as well as the delimiters to be
3931 be passed to parse_and_bind(), as well as the delimiters to be
3927 removed.
3932 removed.
3928 (InteractiveShell.__init__): Added __name__ to the global
3933 (InteractiveShell.__init__): Added __name__ to the global
3929 namespace so that things like Itpl which rely on its existence
3934 namespace so that things like Itpl which rely on its existence
3930 don't crash.
3935 don't crash.
3931 (InteractiveShell._prefilter): Defined the default with a _ so
3936 (InteractiveShell._prefilter): Defined the default with a _ so
3932 that prefilter() is easier to override, while the default one
3937 that prefilter() is easier to override, while the default one
3933 remains available.
3938 remains available.
3934
3939
3935 2002-04-18 Fernando Perez <fperez@colorado.edu>
3940 2002-04-18 Fernando Perez <fperez@colorado.edu>
3936
3941
3937 * Added information about pdb in the docs.
3942 * Added information about pdb in the docs.
3938
3943
3939 2002-04-17 Fernando Perez <fperez@colorado.edu>
3944 2002-04-17 Fernando Perez <fperez@colorado.edu>
3940
3945
3941 * IPython/ipmaker.py (make_IPython): added rc_override option to
3946 * IPython/ipmaker.py (make_IPython): added rc_override option to
3942 allow passing config options at creation time which may override
3947 allow passing config options at creation time which may override
3943 anything set in the config files or command line. This is
3948 anything set in the config files or command line. This is
3944 particularly useful for configuring embedded instances.
3949 particularly useful for configuring embedded instances.
3945
3950
3946 2002-04-15 Fernando Perez <fperez@colorado.edu>
3951 2002-04-15 Fernando Perez <fperez@colorado.edu>
3947
3952
3948 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3953 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3949 crash embedded instances because of the input cache falling out of
3954 crash embedded instances because of the input cache falling out of
3950 sync with the output counter.
3955 sync with the output counter.
3951
3956
3952 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3957 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3953 mode which calls pdb after an uncaught exception in IPython itself.
3958 mode which calls pdb after an uncaught exception in IPython itself.
3954
3959
3955 2002-04-14 Fernando Perez <fperez@colorado.edu>
3960 2002-04-14 Fernando Perez <fperez@colorado.edu>
3956
3961
3957 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3962 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3958 readline, fix it back after each call.
3963 readline, fix it back after each call.
3959
3964
3960 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3965 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3961 method to force all access via __call__(), which guarantees that
3966 method to force all access via __call__(), which guarantees that
3962 traceback references are properly deleted.
3967 traceback references are properly deleted.
3963
3968
3964 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3969 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3965 improve printing when pprint is in use.
3970 improve printing when pprint is in use.
3966
3971
3967 2002-04-13 Fernando Perez <fperez@colorado.edu>
3972 2002-04-13 Fernando Perez <fperez@colorado.edu>
3968
3973
3969 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3974 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3970 exceptions aren't caught anymore. If the user triggers one, he
3975 exceptions aren't caught anymore. If the user triggers one, he
3971 should know why he's doing it and it should go all the way up,
3976 should know why he's doing it and it should go all the way up,
3972 just like any other exception. So now @abort will fully kill the
3977 just like any other exception. So now @abort will fully kill the
3973 embedded interpreter and the embedding code (unless that happens
3978 embedded interpreter and the embedding code (unless that happens
3974 to catch SystemExit).
3979 to catch SystemExit).
3975
3980
3976 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3981 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3977 and a debugger() method to invoke the interactive pdb debugger
3982 and a debugger() method to invoke the interactive pdb debugger
3978 after printing exception information. Also added the corresponding
3983 after printing exception information. Also added the corresponding
3979 -pdb option and @pdb magic to control this feature, and updated
3984 -pdb option and @pdb magic to control this feature, and updated
3980 the docs. After a suggestion from Christopher Hart
3985 the docs. After a suggestion from Christopher Hart
3981 (hart-AT-caltech.edu).
3986 (hart-AT-caltech.edu).
3982
3987
3983 2002-04-12 Fernando Perez <fperez@colorado.edu>
3988 2002-04-12 Fernando Perez <fperez@colorado.edu>
3984
3989
3985 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3990 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3986 the exception handlers defined by the user (not the CrashHandler)
3991 the exception handlers defined by the user (not the CrashHandler)
3987 so that user exceptions don't trigger an ipython bug report.
3992 so that user exceptions don't trigger an ipython bug report.
3988
3993
3989 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3994 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3990 configurable (it should have always been so).
3995 configurable (it should have always been so).
3991
3996
3992 2002-03-26 Fernando Perez <fperez@colorado.edu>
3997 2002-03-26 Fernando Perez <fperez@colorado.edu>
3993
3998
3994 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3999 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3995 and there to fix embedding namespace issues. This should all be
4000 and there to fix embedding namespace issues. This should all be
3996 done in a more elegant way.
4001 done in a more elegant way.
3997
4002
3998 2002-03-25 Fernando Perez <fperez@colorado.edu>
4003 2002-03-25 Fernando Perez <fperez@colorado.edu>
3999
4004
4000 * IPython/genutils.py (get_home_dir): Try to make it work under
4005 * IPython/genutils.py (get_home_dir): Try to make it work under
4001 win9x also.
4006 win9x also.
4002
4007
4003 2002-03-20 Fernando Perez <fperez@colorado.edu>
4008 2002-03-20 Fernando Perez <fperez@colorado.edu>
4004
4009
4005 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4010 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4006 sys.displayhook untouched upon __init__.
4011 sys.displayhook untouched upon __init__.
4007
4012
4008 2002-03-19 Fernando Perez <fperez@colorado.edu>
4013 2002-03-19 Fernando Perez <fperez@colorado.edu>
4009
4014
4010 * Released 0.2.9 (for embedding bug, basically).
4015 * Released 0.2.9 (for embedding bug, basically).
4011
4016
4012 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4017 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4013 exceptions so that enclosing shell's state can be restored.
4018 exceptions so that enclosing shell's state can be restored.
4014
4019
4015 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4020 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4016 naming conventions in the .ipython/ dir.
4021 naming conventions in the .ipython/ dir.
4017
4022
4018 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4023 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4019 from delimiters list so filenames with - in them get expanded.
4024 from delimiters list so filenames with - in them get expanded.
4020
4025
4021 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4026 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4022 sys.displayhook not being properly restored after an embedded call.
4027 sys.displayhook not being properly restored after an embedded call.
4023
4028
4024 2002-03-18 Fernando Perez <fperez@colorado.edu>
4029 2002-03-18 Fernando Perez <fperez@colorado.edu>
4025
4030
4026 * Released 0.2.8
4031 * Released 0.2.8
4027
4032
4028 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4033 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4029 some files weren't being included in a -upgrade.
4034 some files weren't being included in a -upgrade.
4030 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4035 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4031 on' so that the first tab completes.
4036 on' so that the first tab completes.
4032 (InteractiveShell.handle_magic): fixed bug with spaces around
4037 (InteractiveShell.handle_magic): fixed bug with spaces around
4033 quotes breaking many magic commands.
4038 quotes breaking many magic commands.
4034
4039
4035 * setup.py: added note about ignoring the syntax error messages at
4040 * setup.py: added note about ignoring the syntax error messages at
4036 installation.
4041 installation.
4037
4042
4038 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4043 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4039 streamlining the gnuplot interface, now there's only one magic @gp.
4044 streamlining the gnuplot interface, now there's only one magic @gp.
4040
4045
4041 2002-03-17 Fernando Perez <fperez@colorado.edu>
4046 2002-03-17 Fernando Perez <fperez@colorado.edu>
4042
4047
4043 * IPython/UserConfig/magic_gnuplot.py: new name for the
4048 * IPython/UserConfig/magic_gnuplot.py: new name for the
4044 example-magic_pm.py file. Much enhanced system, now with a shell
4049 example-magic_pm.py file. Much enhanced system, now with a shell
4045 for communicating directly with gnuplot, one command at a time.
4050 for communicating directly with gnuplot, one command at a time.
4046
4051
4047 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4052 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4048 setting __name__=='__main__'.
4053 setting __name__=='__main__'.
4049
4054
4050 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4055 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4051 mini-shell for accessing gnuplot from inside ipython. Should
4056 mini-shell for accessing gnuplot from inside ipython. Should
4052 extend it later for grace access too. Inspired by Arnd's
4057 extend it later for grace access too. Inspired by Arnd's
4053 suggestion.
4058 suggestion.
4054
4059
4055 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4060 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4056 calling magic functions with () in their arguments. Thanks to Arnd
4061 calling magic functions with () in their arguments. Thanks to Arnd
4057 Baecker for pointing this to me.
4062 Baecker for pointing this to me.
4058
4063
4059 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4064 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4060 infinitely for integer or complex arrays (only worked with floats).
4065 infinitely for integer or complex arrays (only worked with floats).
4061
4066
4062 2002-03-16 Fernando Perez <fperez@colorado.edu>
4067 2002-03-16 Fernando Perez <fperez@colorado.edu>
4063
4068
4064 * setup.py: Merged setup and setup_windows into a single script
4069 * setup.py: Merged setup and setup_windows into a single script
4065 which properly handles things for windows users.
4070 which properly handles things for windows users.
4066
4071
4067 2002-03-15 Fernando Perez <fperez@colorado.edu>
4072 2002-03-15 Fernando Perez <fperez@colorado.edu>
4068
4073
4069 * Big change to the manual: now the magics are all automatically
4074 * Big change to the manual: now the magics are all automatically
4070 documented. This information is generated from their docstrings
4075 documented. This information is generated from their docstrings
4071 and put in a latex file included by the manual lyx file. This way
4076 and put in a latex file included by the manual lyx file. This way
4072 we get always up to date information for the magics. The manual
4077 we get always up to date information for the magics. The manual
4073 now also has proper version information, also auto-synced.
4078 now also has proper version information, also auto-synced.
4074
4079
4075 For this to work, an undocumented --magic_docstrings option was added.
4080 For this to work, an undocumented --magic_docstrings option was added.
4076
4081
4077 2002-03-13 Fernando Perez <fperez@colorado.edu>
4082 2002-03-13 Fernando Perez <fperez@colorado.edu>
4078
4083
4079 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4084 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4080 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4085 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4081
4086
4082 2002-03-12 Fernando Perez <fperez@colorado.edu>
4087 2002-03-12 Fernando Perez <fperez@colorado.edu>
4083
4088
4084 * IPython/ultraTB.py (TermColors): changed color escapes again to
4089 * IPython/ultraTB.py (TermColors): changed color escapes again to
4085 fix the (old, reintroduced) line-wrapping bug. Basically, if
4090 fix the (old, reintroduced) line-wrapping bug. Basically, if
4086 \001..\002 aren't given in the color escapes, lines get wrapped
4091 \001..\002 aren't given in the color escapes, lines get wrapped
4087 weirdly. But giving those screws up old xterms and emacs terms. So
4092 weirdly. But giving those screws up old xterms and emacs terms. So
4088 I added some logic for emacs terms to be ok, but I can't identify old
4093 I added some logic for emacs terms to be ok, but I can't identify old
4089 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4094 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4090
4095
4091 2002-03-10 Fernando Perez <fperez@colorado.edu>
4096 2002-03-10 Fernando Perez <fperez@colorado.edu>
4092
4097
4093 * IPython/usage.py (__doc__): Various documentation cleanups and
4098 * IPython/usage.py (__doc__): Various documentation cleanups and
4094 updates, both in usage docstrings and in the manual.
4099 updates, both in usage docstrings and in the manual.
4095
4100
4096 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4101 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4097 handling of caching. Set minimum acceptabe value for having a
4102 handling of caching. Set minimum acceptabe value for having a
4098 cache at 20 values.
4103 cache at 20 values.
4099
4104
4100 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4105 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4101 install_first_time function to a method, renamed it and added an
4106 install_first_time function to a method, renamed it and added an
4102 'upgrade' mode. Now people can update their config directory with
4107 'upgrade' mode. Now people can update their config directory with
4103 a simple command line switch (-upgrade, also new).
4108 a simple command line switch (-upgrade, also new).
4104
4109
4105 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4110 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4106 @file (convenient for automagic users under Python >= 2.2).
4111 @file (convenient for automagic users under Python >= 2.2).
4107 Removed @files (it seemed more like a plural than an abbrev. of
4112 Removed @files (it seemed more like a plural than an abbrev. of
4108 'file show').
4113 'file show').
4109
4114
4110 * IPython/iplib.py (install_first_time): Fixed crash if there were
4115 * IPython/iplib.py (install_first_time): Fixed crash if there were
4111 backup files ('~') in .ipython/ install directory.
4116 backup files ('~') in .ipython/ install directory.
4112
4117
4113 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4118 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4114 system. Things look fine, but these changes are fairly
4119 system. Things look fine, but these changes are fairly
4115 intrusive. Test them for a few days.
4120 intrusive. Test them for a few days.
4116
4121
4117 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4122 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4118 the prompts system. Now all in/out prompt strings are user
4123 the prompts system. Now all in/out prompt strings are user
4119 controllable. This is particularly useful for embedding, as one
4124 controllable. This is particularly useful for embedding, as one
4120 can tag embedded instances with particular prompts.
4125 can tag embedded instances with particular prompts.
4121
4126
4122 Also removed global use of sys.ps1/2, which now allows nested
4127 Also removed global use of sys.ps1/2, which now allows nested
4123 embeddings without any problems. Added command-line options for
4128 embeddings without any problems. Added command-line options for
4124 the prompt strings.
4129 the prompt strings.
4125
4130
4126 2002-03-08 Fernando Perez <fperez@colorado.edu>
4131 2002-03-08 Fernando Perez <fperez@colorado.edu>
4127
4132
4128 * IPython/UserConfig/example-embed-short.py (ipshell): added
4133 * IPython/UserConfig/example-embed-short.py (ipshell): added
4129 example file with the bare minimum code for embedding.
4134 example file with the bare minimum code for embedding.
4130
4135
4131 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4136 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4132 functionality for the embeddable shell to be activated/deactivated
4137 functionality for the embeddable shell to be activated/deactivated
4133 either globally or at each call.
4138 either globally or at each call.
4134
4139
4135 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4140 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4136 rewriting the prompt with '--->' for auto-inputs with proper
4141 rewriting the prompt with '--->' for auto-inputs with proper
4137 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4142 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4138 this is handled by the prompts class itself, as it should.
4143 this is handled by the prompts class itself, as it should.
4139
4144
4140 2002-03-05 Fernando Perez <fperez@colorado.edu>
4145 2002-03-05 Fernando Perez <fperez@colorado.edu>
4141
4146
4142 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4147 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4143 @logstart to avoid name clashes with the math log function.
4148 @logstart to avoid name clashes with the math log function.
4144
4149
4145 * Big updates to X/Emacs section of the manual.
4150 * Big updates to X/Emacs section of the manual.
4146
4151
4147 * Removed ipython_emacs. Milan explained to me how to pass
4152 * Removed ipython_emacs. Milan explained to me how to pass
4148 arguments to ipython through Emacs. Some day I'm going to end up
4153 arguments to ipython through Emacs. Some day I'm going to end up
4149 learning some lisp...
4154 learning some lisp...
4150
4155
4151 2002-03-04 Fernando Perez <fperez@colorado.edu>
4156 2002-03-04 Fernando Perez <fperez@colorado.edu>
4152
4157
4153 * IPython/ipython_emacs: Created script to be used as the
4158 * IPython/ipython_emacs: Created script to be used as the
4154 py-python-command Emacs variable so we can pass IPython
4159 py-python-command Emacs variable so we can pass IPython
4155 parameters. I can't figure out how to tell Emacs directly to pass
4160 parameters. I can't figure out how to tell Emacs directly to pass
4156 parameters to IPython, so a dummy shell script will do it.
4161 parameters to IPython, so a dummy shell script will do it.
4157
4162
4158 Other enhancements made for things to work better under Emacs'
4163 Other enhancements made for things to work better under Emacs'
4159 various types of terminals. Many thanks to Milan Zamazal
4164 various types of terminals. Many thanks to Milan Zamazal
4160 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4165 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4161
4166
4162 2002-03-01 Fernando Perez <fperez@colorado.edu>
4167 2002-03-01 Fernando Perez <fperez@colorado.edu>
4163
4168
4164 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4169 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4165 that loading of readline is now optional. This gives better
4170 that loading of readline is now optional. This gives better
4166 control to emacs users.
4171 control to emacs users.
4167
4172
4168 * IPython/ultraTB.py (__date__): Modified color escape sequences
4173 * IPython/ultraTB.py (__date__): Modified color escape sequences
4169 and now things work fine under xterm and in Emacs' term buffers
4174 and now things work fine under xterm and in Emacs' term buffers
4170 (though not shell ones). Well, in emacs you get colors, but all
4175 (though not shell ones). Well, in emacs you get colors, but all
4171 seem to be 'light' colors (no difference between dark and light
4176 seem to be 'light' colors (no difference between dark and light
4172 ones). But the garbage chars are gone, and also in xterms. It
4177 ones). But the garbage chars are gone, and also in xterms. It
4173 seems that now I'm using 'cleaner' ansi sequences.
4178 seems that now I'm using 'cleaner' ansi sequences.
4174
4179
4175 2002-02-21 Fernando Perez <fperez@colorado.edu>
4180 2002-02-21 Fernando Perez <fperez@colorado.edu>
4176
4181
4177 * Released 0.2.7 (mainly to publish the scoping fix).
4182 * Released 0.2.7 (mainly to publish the scoping fix).
4178
4183
4179 * IPython/Logger.py (Logger.logstate): added. A corresponding
4184 * IPython/Logger.py (Logger.logstate): added. A corresponding
4180 @logstate magic was created.
4185 @logstate magic was created.
4181
4186
4182 * IPython/Magic.py: fixed nested scoping problem under Python
4187 * IPython/Magic.py: fixed nested scoping problem under Python
4183 2.1.x (automagic wasn't working).
4188 2.1.x (automagic wasn't working).
4184
4189
4185 2002-02-20 Fernando Perez <fperez@colorado.edu>
4190 2002-02-20 Fernando Perez <fperez@colorado.edu>
4186
4191
4187 * Released 0.2.6.
4192 * Released 0.2.6.
4188
4193
4189 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4194 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4190 option so that logs can come out without any headers at all.
4195 option so that logs can come out without any headers at all.
4191
4196
4192 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4197 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4193 SciPy.
4198 SciPy.
4194
4199
4195 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4200 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4196 that embedded IPython calls don't require vars() to be explicitly
4201 that embedded IPython calls don't require vars() to be explicitly
4197 passed. Now they are extracted from the caller's frame (code
4202 passed. Now they are extracted from the caller's frame (code
4198 snatched from Eric Jones' weave). Added better documentation to
4203 snatched from Eric Jones' weave). Added better documentation to
4199 the section on embedding and the example file.
4204 the section on embedding and the example file.
4200
4205
4201 * IPython/genutils.py (page): Changed so that under emacs, it just
4206 * IPython/genutils.py (page): Changed so that under emacs, it just
4202 prints the string. You can then page up and down in the emacs
4207 prints the string. You can then page up and down in the emacs
4203 buffer itself. This is how the builtin help() works.
4208 buffer itself. This is how the builtin help() works.
4204
4209
4205 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4210 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4206 macro scoping: macros need to be executed in the user's namespace
4211 macro scoping: macros need to be executed in the user's namespace
4207 to work as if they had been typed by the user.
4212 to work as if they had been typed by the user.
4208
4213
4209 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4214 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4210 execute automatically (no need to type 'exec...'). They then
4215 execute automatically (no need to type 'exec...'). They then
4211 behave like 'true macros'. The printing system was also modified
4216 behave like 'true macros'. The printing system was also modified
4212 for this to work.
4217 for this to work.
4213
4218
4214 2002-02-19 Fernando Perez <fperez@colorado.edu>
4219 2002-02-19 Fernando Perez <fperez@colorado.edu>
4215
4220
4216 * IPython/genutils.py (page_file): new function for paging files
4221 * IPython/genutils.py (page_file): new function for paging files
4217 in an OS-independent way. Also necessary for file viewing to work
4222 in an OS-independent way. Also necessary for file viewing to work
4218 well inside Emacs buffers.
4223 well inside Emacs buffers.
4219 (page): Added checks for being in an emacs buffer.
4224 (page): Added checks for being in an emacs buffer.
4220 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4225 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4221 same bug in iplib.
4226 same bug in iplib.
4222
4227
4223 2002-02-18 Fernando Perez <fperez@colorado.edu>
4228 2002-02-18 Fernando Perez <fperez@colorado.edu>
4224
4229
4225 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4230 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4226 of readline so that IPython can work inside an Emacs buffer.
4231 of readline so that IPython can work inside an Emacs buffer.
4227
4232
4228 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4233 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4229 method signatures (they weren't really bugs, but it looks cleaner
4234 method signatures (they weren't really bugs, but it looks cleaner
4230 and keeps PyChecker happy).
4235 and keeps PyChecker happy).
4231
4236
4232 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4237 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4233 for implementing various user-defined hooks. Currently only
4238 for implementing various user-defined hooks. Currently only
4234 display is done.
4239 display is done.
4235
4240
4236 * IPython/Prompts.py (CachedOutput._display): changed display
4241 * IPython/Prompts.py (CachedOutput._display): changed display
4237 functions so that they can be dynamically changed by users easily.
4242 functions so that they can be dynamically changed by users easily.
4238
4243
4239 * IPython/Extensions/numeric_formats.py (num_display): added an
4244 * IPython/Extensions/numeric_formats.py (num_display): added an
4240 extension for printing NumPy arrays in flexible manners. It
4245 extension for printing NumPy arrays in flexible manners. It
4241 doesn't do anything yet, but all the structure is in
4246 doesn't do anything yet, but all the structure is in
4242 place. Ultimately the plan is to implement output format control
4247 place. Ultimately the plan is to implement output format control
4243 like in Octave.
4248 like in Octave.
4244
4249
4245 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4250 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4246 methods are found at run-time by all the automatic machinery.
4251 methods are found at run-time by all the automatic machinery.
4247
4252
4248 2002-02-17 Fernando Perez <fperez@colorado.edu>
4253 2002-02-17 Fernando Perez <fperez@colorado.edu>
4249
4254
4250 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4255 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4251 whole file a little.
4256 whole file a little.
4252
4257
4253 * ToDo: closed this document. Now there's a new_design.lyx
4258 * ToDo: closed this document. Now there's a new_design.lyx
4254 document for all new ideas. Added making a pdf of it for the
4259 document for all new ideas. Added making a pdf of it for the
4255 end-user distro.
4260 end-user distro.
4256
4261
4257 * IPython/Logger.py (Logger.switch_log): Created this to replace
4262 * IPython/Logger.py (Logger.switch_log): Created this to replace
4258 logon() and logoff(). It also fixes a nasty crash reported by
4263 logon() and logoff(). It also fixes a nasty crash reported by
4259 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4264 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4260
4265
4261 * IPython/iplib.py (complete): got auto-completion to work with
4266 * IPython/iplib.py (complete): got auto-completion to work with
4262 automagic (I had wanted this for a long time).
4267 automagic (I had wanted this for a long time).
4263
4268
4264 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4269 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4265 to @file, since file() is now a builtin and clashes with automagic
4270 to @file, since file() is now a builtin and clashes with automagic
4266 for @file.
4271 for @file.
4267
4272
4268 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4273 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4269 of this was previously in iplib, which had grown to more than 2000
4274 of this was previously in iplib, which had grown to more than 2000
4270 lines, way too long. No new functionality, but it makes managing
4275 lines, way too long. No new functionality, but it makes managing
4271 the code a bit easier.
4276 the code a bit easier.
4272
4277
4273 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4278 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4274 information to crash reports.
4279 information to crash reports.
4275
4280
4276 2002-02-12 Fernando Perez <fperez@colorado.edu>
4281 2002-02-12 Fernando Perez <fperez@colorado.edu>
4277
4282
4278 * Released 0.2.5.
4283 * Released 0.2.5.
4279
4284
4280 2002-02-11 Fernando Perez <fperez@colorado.edu>
4285 2002-02-11 Fernando Perez <fperez@colorado.edu>
4281
4286
4282 * Wrote a relatively complete Windows installer. It puts
4287 * Wrote a relatively complete Windows installer. It puts
4283 everything in place, creates Start Menu entries and fixes the
4288 everything in place, creates Start Menu entries and fixes the
4284 color issues. Nothing fancy, but it works.
4289 color issues. Nothing fancy, but it works.
4285
4290
4286 2002-02-10 Fernando Perez <fperez@colorado.edu>
4291 2002-02-10 Fernando Perez <fperez@colorado.edu>
4287
4292
4288 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4293 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4289 os.path.expanduser() call so that we can type @run ~/myfile.py and
4294 os.path.expanduser() call so that we can type @run ~/myfile.py and
4290 have thigs work as expected.
4295 have thigs work as expected.
4291
4296
4292 * IPython/genutils.py (page): fixed exception handling so things
4297 * IPython/genutils.py (page): fixed exception handling so things
4293 work both in Unix and Windows correctly. Quitting a pager triggers
4298 work both in Unix and Windows correctly. Quitting a pager triggers
4294 an IOError/broken pipe in Unix, and in windows not finding a pager
4299 an IOError/broken pipe in Unix, and in windows not finding a pager
4295 is also an IOError, so I had to actually look at the return value
4300 is also an IOError, so I had to actually look at the return value
4296 of the exception, not just the exception itself. Should be ok now.
4301 of the exception, not just the exception itself. Should be ok now.
4297
4302
4298 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4303 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4299 modified to allow case-insensitive color scheme changes.
4304 modified to allow case-insensitive color scheme changes.
4300
4305
4301 2002-02-09 Fernando Perez <fperez@colorado.edu>
4306 2002-02-09 Fernando Perez <fperez@colorado.edu>
4302
4307
4303 * IPython/genutils.py (native_line_ends): new function to leave
4308 * IPython/genutils.py (native_line_ends): new function to leave
4304 user config files with os-native line-endings.
4309 user config files with os-native line-endings.
4305
4310
4306 * README and manual updates.
4311 * README and manual updates.
4307
4312
4308 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4313 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4309 instead of StringType to catch Unicode strings.
4314 instead of StringType to catch Unicode strings.
4310
4315
4311 * IPython/genutils.py (filefind): fixed bug for paths with
4316 * IPython/genutils.py (filefind): fixed bug for paths with
4312 embedded spaces (very common in Windows).
4317 embedded spaces (very common in Windows).
4313
4318
4314 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4319 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4315 files under Windows, so that they get automatically associated
4320 files under Windows, so that they get automatically associated
4316 with a text editor. Windows makes it a pain to handle
4321 with a text editor. Windows makes it a pain to handle
4317 extension-less files.
4322 extension-less files.
4318
4323
4319 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4324 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4320 warning about readline only occur for Posix. In Windows there's no
4325 warning about readline only occur for Posix. In Windows there's no
4321 way to get readline, so why bother with the warning.
4326 way to get readline, so why bother with the warning.
4322
4327
4323 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4328 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4324 for __str__ instead of dir(self), since dir() changed in 2.2.
4329 for __str__ instead of dir(self), since dir() changed in 2.2.
4325
4330
4326 * Ported to Windows! Tested on XP, I suspect it should work fine
4331 * Ported to Windows! Tested on XP, I suspect it should work fine
4327 on NT/2000, but I don't think it will work on 98 et al. That
4332 on NT/2000, but I don't think it will work on 98 et al. That
4328 series of Windows is such a piece of junk anyway that I won't try
4333 series of Windows is such a piece of junk anyway that I won't try
4329 porting it there. The XP port was straightforward, showed a few
4334 porting it there. The XP port was straightforward, showed a few
4330 bugs here and there (fixed all), in particular some string
4335 bugs here and there (fixed all), in particular some string
4331 handling stuff which required considering Unicode strings (which
4336 handling stuff which required considering Unicode strings (which
4332 Windows uses). This is good, but hasn't been too tested :) No
4337 Windows uses). This is good, but hasn't been too tested :) No
4333 fancy installer yet, I'll put a note in the manual so people at
4338 fancy installer yet, I'll put a note in the manual so people at
4334 least make manually a shortcut.
4339 least make manually a shortcut.
4335
4340
4336 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4341 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4337 into a single one, "colors". This now controls both prompt and
4342 into a single one, "colors". This now controls both prompt and
4338 exception color schemes, and can be changed both at startup
4343 exception color schemes, and can be changed both at startup
4339 (either via command-line switches or via ipythonrc files) and at
4344 (either via command-line switches or via ipythonrc files) and at
4340 runtime, with @colors.
4345 runtime, with @colors.
4341 (Magic.magic_run): renamed @prun to @run and removed the old
4346 (Magic.magic_run): renamed @prun to @run and removed the old
4342 @run. The two were too similar to warrant keeping both.
4347 @run. The two were too similar to warrant keeping both.
4343
4348
4344 2002-02-03 Fernando Perez <fperez@colorado.edu>
4349 2002-02-03 Fernando Perez <fperez@colorado.edu>
4345
4350
4346 * IPython/iplib.py (install_first_time): Added comment on how to
4351 * IPython/iplib.py (install_first_time): Added comment on how to
4347 configure the color options for first-time users. Put a <return>
4352 configure the color options for first-time users. Put a <return>
4348 request at the end so that small-terminal users get a chance to
4353 request at the end so that small-terminal users get a chance to
4349 read the startup info.
4354 read the startup info.
4350
4355
4351 2002-01-23 Fernando Perez <fperez@colorado.edu>
4356 2002-01-23 Fernando Perez <fperez@colorado.edu>
4352
4357
4353 * IPython/iplib.py (CachedOutput.update): Changed output memory
4358 * IPython/iplib.py (CachedOutput.update): Changed output memory
4354 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4359 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4355 input history we still use _i. Did this b/c these variable are
4360 input history we still use _i. Did this b/c these variable are
4356 very commonly used in interactive work, so the less we need to
4361 very commonly used in interactive work, so the less we need to
4357 type the better off we are.
4362 type the better off we are.
4358 (Magic.magic_prun): updated @prun to better handle the namespaces
4363 (Magic.magic_prun): updated @prun to better handle the namespaces
4359 the file will run in, including a fix for __name__ not being set
4364 the file will run in, including a fix for __name__ not being set
4360 before.
4365 before.
4361
4366
4362 2002-01-20 Fernando Perez <fperez@colorado.edu>
4367 2002-01-20 Fernando Perez <fperez@colorado.edu>
4363
4368
4364 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4369 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4365 extra garbage for Python 2.2. Need to look more carefully into
4370 extra garbage for Python 2.2. Need to look more carefully into
4366 this later.
4371 this later.
4367
4372
4368 2002-01-19 Fernando Perez <fperez@colorado.edu>
4373 2002-01-19 Fernando Perez <fperez@colorado.edu>
4369
4374
4370 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4375 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4371 display SyntaxError exceptions properly formatted when they occur
4376 display SyntaxError exceptions properly formatted when they occur
4372 (they can be triggered by imported code).
4377 (they can be triggered by imported code).
4373
4378
4374 2002-01-18 Fernando Perez <fperez@colorado.edu>
4379 2002-01-18 Fernando Perez <fperez@colorado.edu>
4375
4380
4376 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4381 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4377 SyntaxError exceptions are reported nicely formatted, instead of
4382 SyntaxError exceptions are reported nicely formatted, instead of
4378 spitting out only offset information as before.
4383 spitting out only offset information as before.
4379 (Magic.magic_prun): Added the @prun function for executing
4384 (Magic.magic_prun): Added the @prun function for executing
4380 programs with command line args inside IPython.
4385 programs with command line args inside IPython.
4381
4386
4382 2002-01-16 Fernando Perez <fperez@colorado.edu>
4387 2002-01-16 Fernando Perez <fperez@colorado.edu>
4383
4388
4384 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4389 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4385 to *not* include the last item given in a range. This brings their
4390 to *not* include the last item given in a range. This brings their
4386 behavior in line with Python's slicing:
4391 behavior in line with Python's slicing:
4387 a[n1:n2] -> a[n1]...a[n2-1]
4392 a[n1:n2] -> a[n1]...a[n2-1]
4388 It may be a bit less convenient, but I prefer to stick to Python's
4393 It may be a bit less convenient, but I prefer to stick to Python's
4389 conventions *everywhere*, so users never have to wonder.
4394 conventions *everywhere*, so users never have to wonder.
4390 (Magic.magic_macro): Added @macro function to ease the creation of
4395 (Magic.magic_macro): Added @macro function to ease the creation of
4391 macros.
4396 macros.
4392
4397
4393 2002-01-05 Fernando Perez <fperez@colorado.edu>
4398 2002-01-05 Fernando Perez <fperez@colorado.edu>
4394
4399
4395 * Released 0.2.4.
4400 * Released 0.2.4.
4396
4401
4397 * IPython/iplib.py (Magic.magic_pdef):
4402 * IPython/iplib.py (Magic.magic_pdef):
4398 (InteractiveShell.safe_execfile): report magic lines and error
4403 (InteractiveShell.safe_execfile): report magic lines and error
4399 lines without line numbers so one can easily copy/paste them for
4404 lines without line numbers so one can easily copy/paste them for
4400 re-execution.
4405 re-execution.
4401
4406
4402 * Updated manual with recent changes.
4407 * Updated manual with recent changes.
4403
4408
4404 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4409 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4405 docstring printing when class? is called. Very handy for knowing
4410 docstring printing when class? is called. Very handy for knowing
4406 how to create class instances (as long as __init__ is well
4411 how to create class instances (as long as __init__ is well
4407 documented, of course :)
4412 documented, of course :)
4408 (Magic.magic_doc): print both class and constructor docstrings.
4413 (Magic.magic_doc): print both class and constructor docstrings.
4409 (Magic.magic_pdef): give constructor info if passed a class and
4414 (Magic.magic_pdef): give constructor info if passed a class and
4410 __call__ info for callable object instances.
4415 __call__ info for callable object instances.
4411
4416
4412 2002-01-04 Fernando Perez <fperez@colorado.edu>
4417 2002-01-04 Fernando Perez <fperez@colorado.edu>
4413
4418
4414 * Made deep_reload() off by default. It doesn't always work
4419 * Made deep_reload() off by default. It doesn't always work
4415 exactly as intended, so it's probably safer to have it off. It's
4420 exactly as intended, so it's probably safer to have it off. It's
4416 still available as dreload() anyway, so nothing is lost.
4421 still available as dreload() anyway, so nothing is lost.
4417
4422
4418 2002-01-02 Fernando Perez <fperez@colorado.edu>
4423 2002-01-02 Fernando Perez <fperez@colorado.edu>
4419
4424
4420 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4425 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4421 so I wanted an updated release).
4426 so I wanted an updated release).
4422
4427
4423 2001-12-27 Fernando Perez <fperez@colorado.edu>
4428 2001-12-27 Fernando Perez <fperez@colorado.edu>
4424
4429
4425 * IPython/iplib.py (InteractiveShell.interact): Added the original
4430 * IPython/iplib.py (InteractiveShell.interact): Added the original
4426 code from 'code.py' for this module in order to change the
4431 code from 'code.py' for this module in order to change the
4427 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4432 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4428 the history cache would break when the user hit Ctrl-C, and
4433 the history cache would break when the user hit Ctrl-C, and
4429 interact() offers no way to add any hooks to it.
4434 interact() offers no way to add any hooks to it.
4430
4435
4431 2001-12-23 Fernando Perez <fperez@colorado.edu>
4436 2001-12-23 Fernando Perez <fperez@colorado.edu>
4432
4437
4433 * setup.py: added check for 'MANIFEST' before trying to remove
4438 * setup.py: added check for 'MANIFEST' before trying to remove
4434 it. Thanks to Sean Reifschneider.
4439 it. Thanks to Sean Reifschneider.
4435
4440
4436 2001-12-22 Fernando Perez <fperez@colorado.edu>
4441 2001-12-22 Fernando Perez <fperez@colorado.edu>
4437
4442
4438 * Released 0.2.2.
4443 * Released 0.2.2.
4439
4444
4440 * Finished (reasonably) writing the manual. Later will add the
4445 * Finished (reasonably) writing the manual. Later will add the
4441 python-standard navigation stylesheets, but for the time being
4446 python-standard navigation stylesheets, but for the time being
4442 it's fairly complete. Distribution will include html and pdf
4447 it's fairly complete. Distribution will include html and pdf
4443 versions.
4448 versions.
4444
4449
4445 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4450 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4446 (MayaVi author).
4451 (MayaVi author).
4447
4452
4448 2001-12-21 Fernando Perez <fperez@colorado.edu>
4453 2001-12-21 Fernando Perez <fperez@colorado.edu>
4449
4454
4450 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4455 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4451 good public release, I think (with the manual and the distutils
4456 good public release, I think (with the manual and the distutils
4452 installer). The manual can use some work, but that can go
4457 installer). The manual can use some work, but that can go
4453 slowly. Otherwise I think it's quite nice for end users. Next
4458 slowly. Otherwise I think it's quite nice for end users. Next
4454 summer, rewrite the guts of it...
4459 summer, rewrite the guts of it...
4455
4460
4456 * Changed format of ipythonrc files to use whitespace as the
4461 * Changed format of ipythonrc files to use whitespace as the
4457 separator instead of an explicit '='. Cleaner.
4462 separator instead of an explicit '='. Cleaner.
4458
4463
4459 2001-12-20 Fernando Perez <fperez@colorado.edu>
4464 2001-12-20 Fernando Perez <fperez@colorado.edu>
4460
4465
4461 * Started a manual in LyX. For now it's just a quick merge of the
4466 * Started a manual in LyX. For now it's just a quick merge of the
4462 various internal docstrings and READMEs. Later it may grow into a
4467 various internal docstrings and READMEs. Later it may grow into a
4463 nice, full-blown manual.
4468 nice, full-blown manual.
4464
4469
4465 * Set up a distutils based installer. Installation should now be
4470 * Set up a distutils based installer. Installation should now be
4466 trivially simple for end-users.
4471 trivially simple for end-users.
4467
4472
4468 2001-12-11 Fernando Perez <fperez@colorado.edu>
4473 2001-12-11 Fernando Perez <fperez@colorado.edu>
4469
4474
4470 * Released 0.2.0. First public release, announced it at
4475 * Released 0.2.0. First public release, announced it at
4471 comp.lang.python. From now on, just bugfixes...
4476 comp.lang.python. From now on, just bugfixes...
4472
4477
4473 * Went through all the files, set copyright/license notices and
4478 * Went through all the files, set copyright/license notices and
4474 cleaned up things. Ready for release.
4479 cleaned up things. Ready for release.
4475
4480
4476 2001-12-10 Fernando Perez <fperez@colorado.edu>
4481 2001-12-10 Fernando Perez <fperez@colorado.edu>
4477
4482
4478 * Changed the first-time installer not to use tarfiles. It's more
4483 * Changed the first-time installer not to use tarfiles. It's more
4479 robust now and less unix-dependent. Also makes it easier for
4484 robust now and less unix-dependent. Also makes it easier for
4480 people to later upgrade versions.
4485 people to later upgrade versions.
4481
4486
4482 * Changed @exit to @abort to reflect the fact that it's pretty
4487 * Changed @exit to @abort to reflect the fact that it's pretty
4483 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4488 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4484 becomes significant only when IPyhton is embedded: in that case,
4489 becomes significant only when IPyhton is embedded: in that case,
4485 C-D closes IPython only, but @abort kills the enclosing program
4490 C-D closes IPython only, but @abort kills the enclosing program
4486 too (unless it had called IPython inside a try catching
4491 too (unless it had called IPython inside a try catching
4487 SystemExit).
4492 SystemExit).
4488
4493
4489 * Created Shell module which exposes the actuall IPython Shell
4494 * Created Shell module which exposes the actuall IPython Shell
4490 classes, currently the normal and the embeddable one. This at
4495 classes, currently the normal and the embeddable one. This at
4491 least offers a stable interface we won't need to change when
4496 least offers a stable interface we won't need to change when
4492 (later) the internals are rewritten. That rewrite will be confined
4497 (later) the internals are rewritten. That rewrite will be confined
4493 to iplib and ipmaker, but the Shell interface should remain as is.
4498 to iplib and ipmaker, but the Shell interface should remain as is.
4494
4499
4495 * Added embed module which offers an embeddable IPShell object,
4500 * Added embed module which offers an embeddable IPShell object,
4496 useful to fire up IPython *inside* a running program. Great for
4501 useful to fire up IPython *inside* a running program. Great for
4497 debugging or dynamical data analysis.
4502 debugging or dynamical data analysis.
4498
4503
4499 2001-12-08 Fernando Perez <fperez@colorado.edu>
4504 2001-12-08 Fernando Perez <fperez@colorado.edu>
4500
4505
4501 * Fixed small bug preventing seeing info from methods of defined
4506 * Fixed small bug preventing seeing info from methods of defined
4502 objects (incorrect namespace in _ofind()).
4507 objects (incorrect namespace in _ofind()).
4503
4508
4504 * Documentation cleanup. Moved the main usage docstrings to a
4509 * Documentation cleanup. Moved the main usage docstrings to a
4505 separate file, usage.py (cleaner to maintain, and hopefully in the
4510 separate file, usage.py (cleaner to maintain, and hopefully in the
4506 future some perlpod-like way of producing interactive, man and
4511 future some perlpod-like way of producing interactive, man and
4507 html docs out of it will be found).
4512 html docs out of it will be found).
4508
4513
4509 * Added @profile to see your profile at any time.
4514 * Added @profile to see your profile at any time.
4510
4515
4511 * Added @p as an alias for 'print'. It's especially convenient if
4516 * Added @p as an alias for 'print'. It's especially convenient if
4512 using automagic ('p x' prints x).
4517 using automagic ('p x' prints x).
4513
4518
4514 * Small cleanups and fixes after a pychecker run.
4519 * Small cleanups and fixes after a pychecker run.
4515
4520
4516 * Changed the @cd command to handle @cd - and @cd -<n> for
4521 * Changed the @cd command to handle @cd - and @cd -<n> for
4517 visiting any directory in _dh.
4522 visiting any directory in _dh.
4518
4523
4519 * Introduced _dh, a history of visited directories. @dhist prints
4524 * Introduced _dh, a history of visited directories. @dhist prints
4520 it out with numbers.
4525 it out with numbers.
4521
4526
4522 2001-12-07 Fernando Perez <fperez@colorado.edu>
4527 2001-12-07 Fernando Perez <fperez@colorado.edu>
4523
4528
4524 * Released 0.1.22
4529 * Released 0.1.22
4525
4530
4526 * Made initialization a bit more robust against invalid color
4531 * Made initialization a bit more robust against invalid color
4527 options in user input (exit, not traceback-crash).
4532 options in user input (exit, not traceback-crash).
4528
4533
4529 * Changed the bug crash reporter to write the report only in the
4534 * Changed the bug crash reporter to write the report only in the
4530 user's .ipython directory. That way IPython won't litter people's
4535 user's .ipython directory. That way IPython won't litter people's
4531 hard disks with crash files all over the place. Also print on
4536 hard disks with crash files all over the place. Also print on
4532 screen the necessary mail command.
4537 screen the necessary mail command.
4533
4538
4534 * With the new ultraTB, implemented LightBG color scheme for light
4539 * With the new ultraTB, implemented LightBG color scheme for light
4535 background terminals. A lot of people like white backgrounds, so I
4540 background terminals. A lot of people like white backgrounds, so I
4536 guess we should at least give them something readable.
4541 guess we should at least give them something readable.
4537
4542
4538 2001-12-06 Fernando Perez <fperez@colorado.edu>
4543 2001-12-06 Fernando Perez <fperez@colorado.edu>
4539
4544
4540 * Modified the structure of ultraTB. Now there's a proper class
4545 * Modified the structure of ultraTB. Now there's a proper class
4541 for tables of color schemes which allow adding schemes easily and
4546 for tables of color schemes which allow adding schemes easily and
4542 switching the active scheme without creating a new instance every
4547 switching the active scheme without creating a new instance every
4543 time (which was ridiculous). The syntax for creating new schemes
4548 time (which was ridiculous). The syntax for creating new schemes
4544 is also cleaner. I think ultraTB is finally done, with a clean
4549 is also cleaner. I think ultraTB is finally done, with a clean
4545 class structure. Names are also much cleaner (now there's proper
4550 class structure. Names are also much cleaner (now there's proper
4546 color tables, no need for every variable to also have 'color' in
4551 color tables, no need for every variable to also have 'color' in
4547 its name).
4552 its name).
4548
4553
4549 * Broke down genutils into separate files. Now genutils only
4554 * Broke down genutils into separate files. Now genutils only
4550 contains utility functions, and classes have been moved to their
4555 contains utility functions, and classes have been moved to their
4551 own files (they had enough independent functionality to warrant
4556 own files (they had enough independent functionality to warrant
4552 it): ConfigLoader, OutputTrap, Struct.
4557 it): ConfigLoader, OutputTrap, Struct.
4553
4558
4554 2001-12-05 Fernando Perez <fperez@colorado.edu>
4559 2001-12-05 Fernando Perez <fperez@colorado.edu>
4555
4560
4556 * IPython turns 21! Released version 0.1.21, as a candidate for
4561 * IPython turns 21! Released version 0.1.21, as a candidate for
4557 public consumption. If all goes well, release in a few days.
4562 public consumption. If all goes well, release in a few days.
4558
4563
4559 * Fixed path bug (files in Extensions/ directory wouldn't be found
4564 * Fixed path bug (files in Extensions/ directory wouldn't be found
4560 unless IPython/ was explicitly in sys.path).
4565 unless IPython/ was explicitly in sys.path).
4561
4566
4562 * Extended the FlexCompleter class as MagicCompleter to allow
4567 * Extended the FlexCompleter class as MagicCompleter to allow
4563 completion of @-starting lines.
4568 completion of @-starting lines.
4564
4569
4565 * Created __release__.py file as a central repository for release
4570 * Created __release__.py file as a central repository for release
4566 info that other files can read from.
4571 info that other files can read from.
4567
4572
4568 * Fixed small bug in logging: when logging was turned on in
4573 * Fixed small bug in logging: when logging was turned on in
4569 mid-session, old lines with special meanings (!@?) were being
4574 mid-session, old lines with special meanings (!@?) were being
4570 logged without the prepended comment, which is necessary since
4575 logged without the prepended comment, which is necessary since
4571 they are not truly valid python syntax. This should make session
4576 they are not truly valid python syntax. This should make session
4572 restores produce less errors.
4577 restores produce less errors.
4573
4578
4574 * The namespace cleanup forced me to make a FlexCompleter class
4579 * The namespace cleanup forced me to make a FlexCompleter class
4575 which is nothing but a ripoff of rlcompleter, but with selectable
4580 which is nothing but a ripoff of rlcompleter, but with selectable
4576 namespace (rlcompleter only works in __main__.__dict__). I'll try
4581 namespace (rlcompleter only works in __main__.__dict__). I'll try
4577 to submit a note to the authors to see if this change can be
4582 to submit a note to the authors to see if this change can be
4578 incorporated in future rlcompleter releases (Dec.6: done)
4583 incorporated in future rlcompleter releases (Dec.6: done)
4579
4584
4580 * More fixes to namespace handling. It was a mess! Now all
4585 * More fixes to namespace handling. It was a mess! Now all
4581 explicit references to __main__.__dict__ are gone (except when
4586 explicit references to __main__.__dict__ are gone (except when
4582 really needed) and everything is handled through the namespace
4587 really needed) and everything is handled through the namespace
4583 dicts in the IPython instance. We seem to be getting somewhere
4588 dicts in the IPython instance. We seem to be getting somewhere
4584 with this, finally...
4589 with this, finally...
4585
4590
4586 * Small documentation updates.
4591 * Small documentation updates.
4587
4592
4588 * Created the Extensions directory under IPython (with an
4593 * Created the Extensions directory under IPython (with an
4589 __init__.py). Put the PhysicalQ stuff there. This directory should
4594 __init__.py). Put the PhysicalQ stuff there. This directory should
4590 be used for all special-purpose extensions.
4595 be used for all special-purpose extensions.
4591
4596
4592 * File renaming:
4597 * File renaming:
4593 ipythonlib --> ipmaker
4598 ipythonlib --> ipmaker
4594 ipplib --> iplib
4599 ipplib --> iplib
4595 This makes a bit more sense in terms of what these files actually do.
4600 This makes a bit more sense in terms of what these files actually do.
4596
4601
4597 * Moved all the classes and functions in ipythonlib to ipplib, so
4602 * Moved all the classes and functions in ipythonlib to ipplib, so
4598 now ipythonlib only has make_IPython(). This will ease up its
4603 now ipythonlib only has make_IPython(). This will ease up its
4599 splitting in smaller functional chunks later.
4604 splitting in smaller functional chunks later.
4600
4605
4601 * Cleaned up (done, I think) output of @whos. Better column
4606 * Cleaned up (done, I think) output of @whos. Better column
4602 formatting, and now shows str(var) for as much as it can, which is
4607 formatting, and now shows str(var) for as much as it can, which is
4603 typically what one gets with a 'print var'.
4608 typically what one gets with a 'print var'.
4604
4609
4605 2001-12-04 Fernando Perez <fperez@colorado.edu>
4610 2001-12-04 Fernando Perez <fperez@colorado.edu>
4606
4611
4607 * Fixed namespace problems. Now builtin/IPyhton/user names get
4612 * Fixed namespace problems. Now builtin/IPyhton/user names get
4608 properly reported in their namespace. Internal namespace handling
4613 properly reported in their namespace. Internal namespace handling
4609 is finally getting decent (not perfect yet, but much better than
4614 is finally getting decent (not perfect yet, but much better than
4610 the ad-hoc mess we had).
4615 the ad-hoc mess we had).
4611
4616
4612 * Removed -exit option. If people just want to run a python
4617 * Removed -exit option. If people just want to run a python
4613 script, that's what the normal interpreter is for. Less
4618 script, that's what the normal interpreter is for. Less
4614 unnecessary options, less chances for bugs.
4619 unnecessary options, less chances for bugs.
4615
4620
4616 * Added a crash handler which generates a complete post-mortem if
4621 * Added a crash handler which generates a complete post-mortem if
4617 IPython crashes. This will help a lot in tracking bugs down the
4622 IPython crashes. This will help a lot in tracking bugs down the
4618 road.
4623 road.
4619
4624
4620 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4625 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4621 which were boud to functions being reassigned would bypass the
4626 which were boud to functions being reassigned would bypass the
4622 logger, breaking the sync of _il with the prompt counter. This
4627 logger, breaking the sync of _il with the prompt counter. This
4623 would then crash IPython later when a new line was logged.
4628 would then crash IPython later when a new line was logged.
4624
4629
4625 2001-12-02 Fernando Perez <fperez@colorado.edu>
4630 2001-12-02 Fernando Perez <fperez@colorado.edu>
4626
4631
4627 * Made IPython a package. This means people don't have to clutter
4632 * Made IPython a package. This means people don't have to clutter
4628 their sys.path with yet another directory. Changed the INSTALL
4633 their sys.path with yet another directory. Changed the INSTALL
4629 file accordingly.
4634 file accordingly.
4630
4635
4631 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4636 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4632 sorts its output (so @who shows it sorted) and @whos formats the
4637 sorts its output (so @who shows it sorted) and @whos formats the
4633 table according to the width of the first column. Nicer, easier to
4638 table according to the width of the first column. Nicer, easier to
4634 read. Todo: write a generic table_format() which takes a list of
4639 read. Todo: write a generic table_format() which takes a list of
4635 lists and prints it nicely formatted, with optional row/column
4640 lists and prints it nicely formatted, with optional row/column
4636 separators and proper padding and justification.
4641 separators and proper padding and justification.
4637
4642
4638 * Released 0.1.20
4643 * Released 0.1.20
4639
4644
4640 * Fixed bug in @log which would reverse the inputcache list (a
4645 * Fixed bug in @log which would reverse the inputcache list (a
4641 copy operation was missing).
4646 copy operation was missing).
4642
4647
4643 * Code cleanup. @config was changed to use page(). Better, since
4648 * Code cleanup. @config was changed to use page(). Better, since
4644 its output is always quite long.
4649 its output is always quite long.
4645
4650
4646 * Itpl is back as a dependency. I was having too many problems
4651 * Itpl is back as a dependency. I was having too many problems
4647 getting the parametric aliases to work reliably, and it's just
4652 getting the parametric aliases to work reliably, and it's just
4648 easier to code weird string operations with it than playing %()s
4653 easier to code weird string operations with it than playing %()s
4649 games. It's only ~6k, so I don't think it's too big a deal.
4654 games. It's only ~6k, so I don't think it's too big a deal.
4650
4655
4651 * Found (and fixed) a very nasty bug with history. !lines weren't
4656 * Found (and fixed) a very nasty bug with history. !lines weren't
4652 getting cached, and the out of sync caches would crash
4657 getting cached, and the out of sync caches would crash
4653 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4658 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4654 division of labor a bit better. Bug fixed, cleaner structure.
4659 division of labor a bit better. Bug fixed, cleaner structure.
4655
4660
4656 2001-12-01 Fernando Perez <fperez@colorado.edu>
4661 2001-12-01 Fernando Perez <fperez@colorado.edu>
4657
4662
4658 * Released 0.1.19
4663 * Released 0.1.19
4659
4664
4660 * Added option -n to @hist to prevent line number printing. Much
4665 * Added option -n to @hist to prevent line number printing. Much
4661 easier to copy/paste code this way.
4666 easier to copy/paste code this way.
4662
4667
4663 * Created global _il to hold the input list. Allows easy
4668 * Created global _il to hold the input list. Allows easy
4664 re-execution of blocks of code by slicing it (inspired by Janko's
4669 re-execution of blocks of code by slicing it (inspired by Janko's
4665 comment on 'macros').
4670 comment on 'macros').
4666
4671
4667 * Small fixes and doc updates.
4672 * Small fixes and doc updates.
4668
4673
4669 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4674 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4670 much too fragile with automagic. Handles properly multi-line
4675 much too fragile with automagic. Handles properly multi-line
4671 statements and takes parameters.
4676 statements and takes parameters.
4672
4677
4673 2001-11-30 Fernando Perez <fperez@colorado.edu>
4678 2001-11-30 Fernando Perez <fperez@colorado.edu>
4674
4679
4675 * Version 0.1.18 released.
4680 * Version 0.1.18 released.
4676
4681
4677 * Fixed nasty namespace bug in initial module imports.
4682 * Fixed nasty namespace bug in initial module imports.
4678
4683
4679 * Added copyright/license notes to all code files (except
4684 * Added copyright/license notes to all code files (except
4680 DPyGetOpt). For the time being, LGPL. That could change.
4685 DPyGetOpt). For the time being, LGPL. That could change.
4681
4686
4682 * Rewrote a much nicer README, updated INSTALL, cleaned up
4687 * Rewrote a much nicer README, updated INSTALL, cleaned up
4683 ipythonrc-* samples.
4688 ipythonrc-* samples.
4684
4689
4685 * Overall code/documentation cleanup. Basically ready for
4690 * Overall code/documentation cleanup. Basically ready for
4686 release. Only remaining thing: licence decision (LGPL?).
4691 release. Only remaining thing: licence decision (LGPL?).
4687
4692
4688 * Converted load_config to a class, ConfigLoader. Now recursion
4693 * Converted load_config to a class, ConfigLoader. Now recursion
4689 control is better organized. Doesn't include the same file twice.
4694 control is better organized. Doesn't include the same file twice.
4690
4695
4691 2001-11-29 Fernando Perez <fperez@colorado.edu>
4696 2001-11-29 Fernando Perez <fperez@colorado.edu>
4692
4697
4693 * Got input history working. Changed output history variables from
4698 * Got input history working. Changed output history variables from
4694 _p to _o so that _i is for input and _o for output. Just cleaner
4699 _p to _o so that _i is for input and _o for output. Just cleaner
4695 convention.
4700 convention.
4696
4701
4697 * Implemented parametric aliases. This pretty much allows the
4702 * Implemented parametric aliases. This pretty much allows the
4698 alias system to offer full-blown shell convenience, I think.
4703 alias system to offer full-blown shell convenience, I think.
4699
4704
4700 * Version 0.1.17 released, 0.1.18 opened.
4705 * Version 0.1.17 released, 0.1.18 opened.
4701
4706
4702 * dot_ipython/ipythonrc (alias): added documentation.
4707 * dot_ipython/ipythonrc (alias): added documentation.
4703 (xcolor): Fixed small bug (xcolors -> xcolor)
4708 (xcolor): Fixed small bug (xcolors -> xcolor)
4704
4709
4705 * Changed the alias system. Now alias is a magic command to define
4710 * Changed the alias system. Now alias is a magic command to define
4706 aliases just like the shell. Rationale: the builtin magics should
4711 aliases just like the shell. Rationale: the builtin magics should
4707 be there for things deeply connected to IPython's
4712 be there for things deeply connected to IPython's
4708 architecture. And this is a much lighter system for what I think
4713 architecture. And this is a much lighter system for what I think
4709 is the really important feature: allowing users to define quickly
4714 is the really important feature: allowing users to define quickly
4710 magics that will do shell things for them, so they can customize
4715 magics that will do shell things for them, so they can customize
4711 IPython easily to match their work habits. If someone is really
4716 IPython easily to match their work habits. If someone is really
4712 desperate to have another name for a builtin alias, they can
4717 desperate to have another name for a builtin alias, they can
4713 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4718 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4714 works.
4719 works.
4715
4720
4716 2001-11-28 Fernando Perez <fperez@colorado.edu>
4721 2001-11-28 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * Changed @file so that it opens the source file at the proper
4723 * Changed @file so that it opens the source file at the proper
4719 line. Since it uses less, if your EDITOR environment is
4724 line. Since it uses less, if your EDITOR environment is
4720 configured, typing v will immediately open your editor of choice
4725 configured, typing v will immediately open your editor of choice
4721 right at the line where the object is defined. Not as quick as
4726 right at the line where the object is defined. Not as quick as
4722 having a direct @edit command, but for all intents and purposes it
4727 having a direct @edit command, but for all intents and purposes it
4723 works. And I don't have to worry about writing @edit to deal with
4728 works. And I don't have to worry about writing @edit to deal with
4724 all the editors, less does that.
4729 all the editors, less does that.
4725
4730
4726 * Version 0.1.16 released, 0.1.17 opened.
4731 * Version 0.1.16 released, 0.1.17 opened.
4727
4732
4728 * Fixed some nasty bugs in the page/page_dumb combo that could
4733 * Fixed some nasty bugs in the page/page_dumb combo that could
4729 crash IPython.
4734 crash IPython.
4730
4735
4731 2001-11-27 Fernando Perez <fperez@colorado.edu>
4736 2001-11-27 Fernando Perez <fperez@colorado.edu>
4732
4737
4733 * Version 0.1.15 released, 0.1.16 opened.
4738 * Version 0.1.15 released, 0.1.16 opened.
4734
4739
4735 * Finally got ? and ?? to work for undefined things: now it's
4740 * Finally got ? and ?? to work for undefined things: now it's
4736 possible to type {}.get? and get information about the get method
4741 possible to type {}.get? and get information about the get method
4737 of dicts, or os.path? even if only os is defined (so technically
4742 of dicts, or os.path? even if only os is defined (so technically
4738 os.path isn't). Works at any level. For example, after import os,
4743 os.path isn't). Works at any level. For example, after import os,
4739 os?, os.path?, os.path.abspath? all work. This is great, took some
4744 os?, os.path?, os.path.abspath? all work. This is great, took some
4740 work in _ofind.
4745 work in _ofind.
4741
4746
4742 * Fixed more bugs with logging. The sanest way to do it was to add
4747 * Fixed more bugs with logging. The sanest way to do it was to add
4743 to @log a 'mode' parameter. Killed two in one shot (this mode
4748 to @log a 'mode' parameter. Killed two in one shot (this mode
4744 option was a request of Janko's). I think it's finally clean
4749 option was a request of Janko's). I think it's finally clean
4745 (famous last words).
4750 (famous last words).
4746
4751
4747 * Added a page_dumb() pager which does a decent job of paging on
4752 * Added a page_dumb() pager which does a decent job of paging on
4748 screen, if better things (like less) aren't available. One less
4753 screen, if better things (like less) aren't available. One less
4749 unix dependency (someday maybe somebody will port this to
4754 unix dependency (someday maybe somebody will port this to
4750 windows).
4755 windows).
4751
4756
4752 * Fixed problem in magic_log: would lock of logging out if log
4757 * Fixed problem in magic_log: would lock of logging out if log
4753 creation failed (because it would still think it had succeeded).
4758 creation failed (because it would still think it had succeeded).
4754
4759
4755 * Improved the page() function using curses to auto-detect screen
4760 * Improved the page() function using curses to auto-detect screen
4756 size. Now it can make a much better decision on whether to print
4761 size. Now it can make a much better decision on whether to print
4757 or page a string. Option screen_length was modified: a value 0
4762 or page a string. Option screen_length was modified: a value 0
4758 means auto-detect, and that's the default now.
4763 means auto-detect, and that's the default now.
4759
4764
4760 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4765 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4761 go out. I'll test it for a few days, then talk to Janko about
4766 go out. I'll test it for a few days, then talk to Janko about
4762 licences and announce it.
4767 licences and announce it.
4763
4768
4764 * Fixed the length of the auto-generated ---> prompt which appears
4769 * Fixed the length of the auto-generated ---> prompt which appears
4765 for auto-parens and auto-quotes. Getting this right isn't trivial,
4770 for auto-parens and auto-quotes. Getting this right isn't trivial,
4766 with all the color escapes, different prompt types and optional
4771 with all the color escapes, different prompt types and optional
4767 separators. But it seems to be working in all the combinations.
4772 separators. But it seems to be working in all the combinations.
4768
4773
4769 2001-11-26 Fernando Perez <fperez@colorado.edu>
4774 2001-11-26 Fernando Perez <fperez@colorado.edu>
4770
4775
4771 * Wrote a regexp filter to get option types from the option names
4776 * Wrote a regexp filter to get option types from the option names
4772 string. This eliminates the need to manually keep two duplicate
4777 string. This eliminates the need to manually keep two duplicate
4773 lists.
4778 lists.
4774
4779
4775 * Removed the unneeded check_option_names. Now options are handled
4780 * Removed the unneeded check_option_names. Now options are handled
4776 in a much saner manner and it's easy to visually check that things
4781 in a much saner manner and it's easy to visually check that things
4777 are ok.
4782 are ok.
4778
4783
4779 * Updated version numbers on all files I modified to carry a
4784 * Updated version numbers on all files I modified to carry a
4780 notice so Janko and Nathan have clear version markers.
4785 notice so Janko and Nathan have clear version markers.
4781
4786
4782 * Updated docstring for ultraTB with my changes. I should send
4787 * Updated docstring for ultraTB with my changes. I should send
4783 this to Nathan.
4788 this to Nathan.
4784
4789
4785 * Lots of small fixes. Ran everything through pychecker again.
4790 * Lots of small fixes. Ran everything through pychecker again.
4786
4791
4787 * Made loading of deep_reload an cmd line option. If it's not too
4792 * Made loading of deep_reload an cmd line option. If it's not too
4788 kosher, now people can just disable it. With -nodeep_reload it's
4793 kosher, now people can just disable it. With -nodeep_reload it's
4789 still available as dreload(), it just won't overwrite reload().
4794 still available as dreload(), it just won't overwrite reload().
4790
4795
4791 * Moved many options to the no| form (-opt and -noopt
4796 * Moved many options to the no| form (-opt and -noopt
4792 accepted). Cleaner.
4797 accepted). Cleaner.
4793
4798
4794 * Changed magic_log so that if called with no parameters, it uses
4799 * Changed magic_log so that if called with no parameters, it uses
4795 'rotate' mode. That way auto-generated logs aren't automatically
4800 'rotate' mode. That way auto-generated logs aren't automatically
4796 over-written. For normal logs, now a backup is made if it exists
4801 over-written. For normal logs, now a backup is made if it exists
4797 (only 1 level of backups). A new 'backup' mode was added to the
4802 (only 1 level of backups). A new 'backup' mode was added to the
4798 Logger class to support this. This was a request by Janko.
4803 Logger class to support this. This was a request by Janko.
4799
4804
4800 * Added @logoff/@logon to stop/restart an active log.
4805 * Added @logoff/@logon to stop/restart an active log.
4801
4806
4802 * Fixed a lot of bugs in log saving/replay. It was pretty
4807 * Fixed a lot of bugs in log saving/replay. It was pretty
4803 broken. Now special lines (!@,/) appear properly in the command
4808 broken. Now special lines (!@,/) appear properly in the command
4804 history after a log replay.
4809 history after a log replay.
4805
4810
4806 * Tried and failed to implement full session saving via pickle. My
4811 * Tried and failed to implement full session saving via pickle. My
4807 idea was to pickle __main__.__dict__, but modules can't be
4812 idea was to pickle __main__.__dict__, but modules can't be
4808 pickled. This would be a better alternative to replaying logs, but
4813 pickled. This would be a better alternative to replaying logs, but
4809 seems quite tricky to get to work. Changed -session to be called
4814 seems quite tricky to get to work. Changed -session to be called
4810 -logplay, which more accurately reflects what it does. And if we
4815 -logplay, which more accurately reflects what it does. And if we
4811 ever get real session saving working, -session is now available.
4816 ever get real session saving working, -session is now available.
4812
4817
4813 * Implemented color schemes for prompts also. As for tracebacks,
4818 * Implemented color schemes for prompts also. As for tracebacks,
4814 currently only NoColor and Linux are supported. But now the
4819 currently only NoColor and Linux are supported. But now the
4815 infrastructure is in place, based on a generic ColorScheme
4820 infrastructure is in place, based on a generic ColorScheme
4816 class. So writing and activating new schemes both for the prompts
4821 class. So writing and activating new schemes both for the prompts
4817 and the tracebacks should be straightforward.
4822 and the tracebacks should be straightforward.
4818
4823
4819 * Version 0.1.13 released, 0.1.14 opened.
4824 * Version 0.1.13 released, 0.1.14 opened.
4820
4825
4821 * Changed handling of options for output cache. Now counter is
4826 * Changed handling of options for output cache. Now counter is
4822 hardwired starting at 1 and one specifies the maximum number of
4827 hardwired starting at 1 and one specifies the maximum number of
4823 entries *in the outcache* (not the max prompt counter). This is
4828 entries *in the outcache* (not the max prompt counter). This is
4824 much better, since many statements won't increase the cache
4829 much better, since many statements won't increase the cache
4825 count. It also eliminated some confusing options, now there's only
4830 count. It also eliminated some confusing options, now there's only
4826 one: cache_size.
4831 one: cache_size.
4827
4832
4828 * Added 'alias' magic function and magic_alias option in the
4833 * Added 'alias' magic function and magic_alias option in the
4829 ipythonrc file. Now the user can easily define whatever names he
4834 ipythonrc file. Now the user can easily define whatever names he
4830 wants for the magic functions without having to play weird
4835 wants for the magic functions without having to play weird
4831 namespace games. This gives IPython a real shell-like feel.
4836 namespace games. This gives IPython a real shell-like feel.
4832
4837
4833 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4838 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4834 @ or not).
4839 @ or not).
4835
4840
4836 This was one of the last remaining 'visible' bugs (that I know
4841 This was one of the last remaining 'visible' bugs (that I know
4837 of). I think if I can clean up the session loading so it works
4842 of). I think if I can clean up the session loading so it works
4838 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4843 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4839 about licensing).
4844 about licensing).
4840
4845
4841 2001-11-25 Fernando Perez <fperez@colorado.edu>
4846 2001-11-25 Fernando Perez <fperez@colorado.edu>
4842
4847
4843 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4848 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4844 there's a cleaner distinction between what ? and ?? show.
4849 there's a cleaner distinction between what ? and ?? show.
4845
4850
4846 * Added screen_length option. Now the user can define his own
4851 * Added screen_length option. Now the user can define his own
4847 screen size for page() operations.
4852 screen size for page() operations.
4848
4853
4849 * Implemented magic shell-like functions with automatic code
4854 * Implemented magic shell-like functions with automatic code
4850 generation. Now adding another function is just a matter of adding
4855 generation. Now adding another function is just a matter of adding
4851 an entry to a dict, and the function is dynamically generated at
4856 an entry to a dict, and the function is dynamically generated at
4852 run-time. Python has some really cool features!
4857 run-time. Python has some really cool features!
4853
4858
4854 * Renamed many options to cleanup conventions a little. Now all
4859 * Renamed many options to cleanup conventions a little. Now all
4855 are lowercase, and only underscores where needed. Also in the code
4860 are lowercase, and only underscores where needed. Also in the code
4856 option name tables are clearer.
4861 option name tables are clearer.
4857
4862
4858 * Changed prompts a little. Now input is 'In [n]:' instead of
4863 * Changed prompts a little. Now input is 'In [n]:' instead of
4859 'In[n]:='. This allows it the numbers to be aligned with the
4864 'In[n]:='. This allows it the numbers to be aligned with the
4860 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4865 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4861 Python (it was a Mathematica thing). The '...' continuation prompt
4866 Python (it was a Mathematica thing). The '...' continuation prompt
4862 was also changed a little to align better.
4867 was also changed a little to align better.
4863
4868
4864 * Fixed bug when flushing output cache. Not all _p<n> variables
4869 * Fixed bug when flushing output cache. Not all _p<n> variables
4865 exist, so their deletion needs to be wrapped in a try:
4870 exist, so their deletion needs to be wrapped in a try:
4866
4871
4867 * Figured out how to properly use inspect.formatargspec() (it
4872 * Figured out how to properly use inspect.formatargspec() (it
4868 requires the args preceded by *). So I removed all the code from
4873 requires the args preceded by *). So I removed all the code from
4869 _get_pdef in Magic, which was just replicating that.
4874 _get_pdef in Magic, which was just replicating that.
4870
4875
4871 * Added test to prefilter to allow redefining magic function names
4876 * Added test to prefilter to allow redefining magic function names
4872 as variables. This is ok, since the @ form is always available,
4877 as variables. This is ok, since the @ form is always available,
4873 but whe should allow the user to define a variable called 'ls' if
4878 but whe should allow the user to define a variable called 'ls' if
4874 he needs it.
4879 he needs it.
4875
4880
4876 * Moved the ToDo information from README into a separate ToDo.
4881 * Moved the ToDo information from README into a separate ToDo.
4877
4882
4878 * General code cleanup and small bugfixes. I think it's close to a
4883 * General code cleanup and small bugfixes. I think it's close to a
4879 state where it can be released, obviously with a big 'beta'
4884 state where it can be released, obviously with a big 'beta'
4880 warning on it.
4885 warning on it.
4881
4886
4882 * Got the magic function split to work. Now all magics are defined
4887 * Got the magic function split to work. Now all magics are defined
4883 in a separate class. It just organizes things a bit, and now
4888 in a separate class. It just organizes things a bit, and now
4884 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4889 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4885 was too long).
4890 was too long).
4886
4891
4887 * Changed @clear to @reset to avoid potential confusions with
4892 * Changed @clear to @reset to avoid potential confusions with
4888 the shell command clear. Also renamed @cl to @clear, which does
4893 the shell command clear. Also renamed @cl to @clear, which does
4889 exactly what people expect it to from their shell experience.
4894 exactly what people expect it to from their shell experience.
4890
4895
4891 Added a check to the @reset command (since it's so
4896 Added a check to the @reset command (since it's so
4892 destructive, it's probably a good idea to ask for confirmation).
4897 destructive, it's probably a good idea to ask for confirmation).
4893 But now reset only works for full namespace resetting. Since the
4898 But now reset only works for full namespace resetting. Since the
4894 del keyword is already there for deleting a few specific
4899 del keyword is already there for deleting a few specific
4895 variables, I don't see the point of having a redundant magic
4900 variables, I don't see the point of having a redundant magic
4896 function for the same task.
4901 function for the same task.
4897
4902
4898 2001-11-24 Fernando Perez <fperez@colorado.edu>
4903 2001-11-24 Fernando Perez <fperez@colorado.edu>
4899
4904
4900 * Updated the builtin docs (esp. the ? ones).
4905 * Updated the builtin docs (esp. the ? ones).
4901
4906
4902 * Ran all the code through pychecker. Not terribly impressed with
4907 * Ran all the code through pychecker. Not terribly impressed with
4903 it: lots of spurious warnings and didn't really find anything of
4908 it: lots of spurious warnings and didn't really find anything of
4904 substance (just a few modules being imported and not used).
4909 substance (just a few modules being imported and not used).
4905
4910
4906 * Implemented the new ultraTB functionality into IPython. New
4911 * Implemented the new ultraTB functionality into IPython. New
4907 option: xcolors. This chooses color scheme. xmode now only selects
4912 option: xcolors. This chooses color scheme. xmode now only selects
4908 between Plain and Verbose. Better orthogonality.
4913 between Plain and Verbose. Better orthogonality.
4909
4914
4910 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4915 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4911 mode and color scheme for the exception handlers. Now it's
4916 mode and color scheme for the exception handlers. Now it's
4912 possible to have the verbose traceback with no coloring.
4917 possible to have the verbose traceback with no coloring.
4913
4918
4914 2001-11-23 Fernando Perez <fperez@colorado.edu>
4919 2001-11-23 Fernando Perez <fperez@colorado.edu>
4915
4920
4916 * Version 0.1.12 released, 0.1.13 opened.
4921 * Version 0.1.12 released, 0.1.13 opened.
4917
4922
4918 * Removed option to set auto-quote and auto-paren escapes by
4923 * Removed option to set auto-quote and auto-paren escapes by
4919 user. The chances of breaking valid syntax are just too high. If
4924 user. The chances of breaking valid syntax are just too high. If
4920 someone *really* wants, they can always dig into the code.
4925 someone *really* wants, they can always dig into the code.
4921
4926
4922 * Made prompt separators configurable.
4927 * Made prompt separators configurable.
4923
4928
4924 2001-11-22 Fernando Perez <fperez@colorado.edu>
4929 2001-11-22 Fernando Perez <fperez@colorado.edu>
4925
4930
4926 * Small bugfixes in many places.
4931 * Small bugfixes in many places.
4927
4932
4928 * Removed the MyCompleter class from ipplib. It seemed redundant
4933 * Removed the MyCompleter class from ipplib. It seemed redundant
4929 with the C-p,C-n history search functionality. Less code to
4934 with the C-p,C-n history search functionality. Less code to
4930 maintain.
4935 maintain.
4931
4936
4932 * Moved all the original ipython.py code into ipythonlib.py. Right
4937 * Moved all the original ipython.py code into ipythonlib.py. Right
4933 now it's just one big dump into a function called make_IPython, so
4938 now it's just one big dump into a function called make_IPython, so
4934 no real modularity has been gained. But at least it makes the
4939 no real modularity has been gained. But at least it makes the
4935 wrapper script tiny, and since ipythonlib is a module, it gets
4940 wrapper script tiny, and since ipythonlib is a module, it gets
4936 compiled and startup is much faster.
4941 compiled and startup is much faster.
4937
4942
4938 This is a reasobably 'deep' change, so we should test it for a
4943 This is a reasobably 'deep' change, so we should test it for a
4939 while without messing too much more with the code.
4944 while without messing too much more with the code.
4940
4945
4941 2001-11-21 Fernando Perez <fperez@colorado.edu>
4946 2001-11-21 Fernando Perez <fperez@colorado.edu>
4942
4947
4943 * Version 0.1.11 released, 0.1.12 opened for further work.
4948 * Version 0.1.11 released, 0.1.12 opened for further work.
4944
4949
4945 * Removed dependency on Itpl. It was only needed in one place. It
4950 * Removed dependency on Itpl. It was only needed in one place. It
4946 would be nice if this became part of python, though. It makes life
4951 would be nice if this became part of python, though. It makes life
4947 *a lot* easier in some cases.
4952 *a lot* easier in some cases.
4948
4953
4949 * Simplified the prefilter code a bit. Now all handlers are
4954 * Simplified the prefilter code a bit. Now all handlers are
4950 expected to explicitly return a value (at least a blank string).
4955 expected to explicitly return a value (at least a blank string).
4951
4956
4952 * Heavy edits in ipplib. Removed the help system altogether. Now
4957 * Heavy edits in ipplib. Removed the help system altogether. Now
4953 obj?/?? is used for inspecting objects, a magic @doc prints
4958 obj?/?? is used for inspecting objects, a magic @doc prints
4954 docstrings, and full-blown Python help is accessed via the 'help'
4959 docstrings, and full-blown Python help is accessed via the 'help'
4955 keyword. This cleans up a lot of code (less to maintain) and does
4960 keyword. This cleans up a lot of code (less to maintain) and does
4956 the job. Since 'help' is now a standard Python component, might as
4961 the job. Since 'help' is now a standard Python component, might as
4957 well use it and remove duplicate functionality.
4962 well use it and remove duplicate functionality.
4958
4963
4959 Also removed the option to use ipplib as a standalone program. By
4964 Also removed the option to use ipplib as a standalone program. By
4960 now it's too dependent on other parts of IPython to function alone.
4965 now it's too dependent on other parts of IPython to function alone.
4961
4966
4962 * Fixed bug in genutils.pager. It would crash if the pager was
4967 * Fixed bug in genutils.pager. It would crash if the pager was
4963 exited immediately after opening (broken pipe).
4968 exited immediately after opening (broken pipe).
4964
4969
4965 * Trimmed down the VerboseTB reporting a little. The header is
4970 * Trimmed down the VerboseTB reporting a little. The header is
4966 much shorter now and the repeated exception arguments at the end
4971 much shorter now and the repeated exception arguments at the end
4967 have been removed. For interactive use the old header seemed a bit
4972 have been removed. For interactive use the old header seemed a bit
4968 excessive.
4973 excessive.
4969
4974
4970 * Fixed small bug in output of @whos for variables with multi-word
4975 * Fixed small bug in output of @whos for variables with multi-word
4971 types (only first word was displayed).
4976 types (only first word was displayed).
4972
4977
4973 2001-11-17 Fernando Perez <fperez@colorado.edu>
4978 2001-11-17 Fernando Perez <fperez@colorado.edu>
4974
4979
4975 * Version 0.1.10 released, 0.1.11 opened for further work.
4980 * Version 0.1.10 released, 0.1.11 opened for further work.
4976
4981
4977 * Modified dirs and friends. dirs now *returns* the stack (not
4982 * Modified dirs and friends. dirs now *returns* the stack (not
4978 prints), so one can manipulate it as a variable. Convenient to
4983 prints), so one can manipulate it as a variable. Convenient to
4979 travel along many directories.
4984 travel along many directories.
4980
4985
4981 * Fixed bug in magic_pdef: would only work with functions with
4986 * Fixed bug in magic_pdef: would only work with functions with
4982 arguments with default values.
4987 arguments with default values.
4983
4988
4984 2001-11-14 Fernando Perez <fperez@colorado.edu>
4989 2001-11-14 Fernando Perez <fperez@colorado.edu>
4985
4990
4986 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4991 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4987 example with IPython. Various other minor fixes and cleanups.
4992 example with IPython. Various other minor fixes and cleanups.
4988
4993
4989 * Version 0.1.9 released, 0.1.10 opened for further work.
4994 * Version 0.1.9 released, 0.1.10 opened for further work.
4990
4995
4991 * Added sys.path to the list of directories searched in the
4996 * Added sys.path to the list of directories searched in the
4992 execfile= option. It used to be the current directory and the
4997 execfile= option. It used to be the current directory and the
4993 user's IPYTHONDIR only.
4998 user's IPYTHONDIR only.
4994
4999
4995 2001-11-13 Fernando Perez <fperez@colorado.edu>
5000 2001-11-13 Fernando Perez <fperez@colorado.edu>
4996
5001
4997 * Reinstated the raw_input/prefilter separation that Janko had
5002 * Reinstated the raw_input/prefilter separation that Janko had
4998 initially. This gives a more convenient setup for extending the
5003 initially. This gives a more convenient setup for extending the
4999 pre-processor from the outside: raw_input always gets a string,
5004 pre-processor from the outside: raw_input always gets a string,
5000 and prefilter has to process it. We can then redefine prefilter
5005 and prefilter has to process it. We can then redefine prefilter
5001 from the outside and implement extensions for special
5006 from the outside and implement extensions for special
5002 purposes.
5007 purposes.
5003
5008
5004 Today I got one for inputting PhysicalQuantity objects
5009 Today I got one for inputting PhysicalQuantity objects
5005 (from Scientific) without needing any function calls at
5010 (from Scientific) without needing any function calls at
5006 all. Extremely convenient, and it's all done as a user-level
5011 all. Extremely convenient, and it's all done as a user-level
5007 extension (no IPython code was touched). Now instead of:
5012 extension (no IPython code was touched). Now instead of:
5008 a = PhysicalQuantity(4.2,'m/s**2')
5013 a = PhysicalQuantity(4.2,'m/s**2')
5009 one can simply say
5014 one can simply say
5010 a = 4.2 m/s**2
5015 a = 4.2 m/s**2
5011 or even
5016 or even
5012 a = 4.2 m/s^2
5017 a = 4.2 m/s^2
5013
5018
5014 I use this, but it's also a proof of concept: IPython really is
5019 I use this, but it's also a proof of concept: IPython really is
5015 fully user-extensible, even at the level of the parsing of the
5020 fully user-extensible, even at the level of the parsing of the
5016 command line. It's not trivial, but it's perfectly doable.
5021 command line. It's not trivial, but it's perfectly doable.
5017
5022
5018 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5023 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5019 the problem of modules being loaded in the inverse order in which
5024 the problem of modules being loaded in the inverse order in which
5020 they were defined in
5025 they were defined in
5021
5026
5022 * Version 0.1.8 released, 0.1.9 opened for further work.
5027 * Version 0.1.8 released, 0.1.9 opened for further work.
5023
5028
5024 * Added magics pdef, source and file. They respectively show the
5029 * Added magics pdef, source and file. They respectively show the
5025 definition line ('prototype' in C), source code and full python
5030 definition line ('prototype' in C), source code and full python
5026 file for any callable object. The object inspector oinfo uses
5031 file for any callable object. The object inspector oinfo uses
5027 these to show the same information.
5032 these to show the same information.
5028
5033
5029 * Version 0.1.7 released, 0.1.8 opened for further work.
5034 * Version 0.1.7 released, 0.1.8 opened for further work.
5030
5035
5031 * Separated all the magic functions into a class called Magic. The
5036 * Separated all the magic functions into a class called Magic. The
5032 InteractiveShell class was becoming too big for Xemacs to handle
5037 InteractiveShell class was becoming too big for Xemacs to handle
5033 (de-indenting a line would lock it up for 10 seconds while it
5038 (de-indenting a line would lock it up for 10 seconds while it
5034 backtracked on the whole class!)
5039 backtracked on the whole class!)
5035
5040
5036 FIXME: didn't work. It can be done, but right now namespaces are
5041 FIXME: didn't work. It can be done, but right now namespaces are
5037 all messed up. Do it later (reverted it for now, so at least
5042 all messed up. Do it later (reverted it for now, so at least
5038 everything works as before).
5043 everything works as before).
5039
5044
5040 * Got the object introspection system (magic_oinfo) working! I
5045 * Got the object introspection system (magic_oinfo) working! I
5041 think this is pretty much ready for release to Janko, so he can
5046 think this is pretty much ready for release to Janko, so he can
5042 test it for a while and then announce it. Pretty much 100% of what
5047 test it for a while and then announce it. Pretty much 100% of what
5043 I wanted for the 'phase 1' release is ready. Happy, tired.
5048 I wanted for the 'phase 1' release is ready. Happy, tired.
5044
5049
5045 2001-11-12 Fernando Perez <fperez@colorado.edu>
5050 2001-11-12 Fernando Perez <fperez@colorado.edu>
5046
5051
5047 * Version 0.1.6 released, 0.1.7 opened for further work.
5052 * Version 0.1.6 released, 0.1.7 opened for further work.
5048
5053
5049 * Fixed bug in printing: it used to test for truth before
5054 * Fixed bug in printing: it used to test for truth before
5050 printing, so 0 wouldn't print. Now checks for None.
5055 printing, so 0 wouldn't print. Now checks for None.
5051
5056
5052 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5057 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5053 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5058 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5054 reaches by hand into the outputcache. Think of a better way to do
5059 reaches by hand into the outputcache. Think of a better way to do
5055 this later.
5060 this later.
5056
5061
5057 * Various small fixes thanks to Nathan's comments.
5062 * Various small fixes thanks to Nathan's comments.
5058
5063
5059 * Changed magic_pprint to magic_Pprint. This way it doesn't
5064 * Changed magic_pprint to magic_Pprint. This way it doesn't
5060 collide with pprint() and the name is consistent with the command
5065 collide with pprint() and the name is consistent with the command
5061 line option.
5066 line option.
5062
5067
5063 * Changed prompt counter behavior to be fully like
5068 * Changed prompt counter behavior to be fully like
5064 Mathematica's. That is, even input that doesn't return a result
5069 Mathematica's. That is, even input that doesn't return a result
5065 raises the prompt counter. The old behavior was kind of confusing
5070 raises the prompt counter. The old behavior was kind of confusing
5066 (getting the same prompt number several times if the operation
5071 (getting the same prompt number several times if the operation
5067 didn't return a result).
5072 didn't return a result).
5068
5073
5069 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5074 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5070
5075
5071 * Fixed -Classic mode (wasn't working anymore).
5076 * Fixed -Classic mode (wasn't working anymore).
5072
5077
5073 * Added colored prompts using Nathan's new code. Colors are
5078 * Added colored prompts using Nathan's new code. Colors are
5074 currently hardwired, they can be user-configurable. For
5079 currently hardwired, they can be user-configurable. For
5075 developers, they can be chosen in file ipythonlib.py, at the
5080 developers, they can be chosen in file ipythonlib.py, at the
5076 beginning of the CachedOutput class def.
5081 beginning of the CachedOutput class def.
5077
5082
5078 2001-11-11 Fernando Perez <fperez@colorado.edu>
5083 2001-11-11 Fernando Perez <fperez@colorado.edu>
5079
5084
5080 * Version 0.1.5 released, 0.1.6 opened for further work.
5085 * Version 0.1.5 released, 0.1.6 opened for further work.
5081
5086
5082 * Changed magic_env to *return* the environment as a dict (not to
5087 * Changed magic_env to *return* the environment as a dict (not to
5083 print it). This way it prints, but it can also be processed.
5088 print it). This way it prints, but it can also be processed.
5084
5089
5085 * Added Verbose exception reporting to interactive
5090 * Added Verbose exception reporting to interactive
5086 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5091 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5087 traceback. Had to make some changes to the ultraTB file. This is
5092 traceback. Had to make some changes to the ultraTB file. This is
5088 probably the last 'big' thing in my mental todo list. This ties
5093 probably the last 'big' thing in my mental todo list. This ties
5089 in with the next entry:
5094 in with the next entry:
5090
5095
5091 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5096 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5092 has to specify is Plain, Color or Verbose for all exception
5097 has to specify is Plain, Color or Verbose for all exception
5093 handling.
5098 handling.
5094
5099
5095 * Removed ShellServices option. All this can really be done via
5100 * Removed ShellServices option. All this can really be done via
5096 the magic system. It's easier to extend, cleaner and has automatic
5101 the magic system. It's easier to extend, cleaner and has automatic
5097 namespace protection and documentation.
5102 namespace protection and documentation.
5098
5103
5099 2001-11-09 Fernando Perez <fperez@colorado.edu>
5104 2001-11-09 Fernando Perez <fperez@colorado.edu>
5100
5105
5101 * Fixed bug in output cache flushing (missing parameter to
5106 * Fixed bug in output cache flushing (missing parameter to
5102 __init__). Other small bugs fixed (found using pychecker).
5107 __init__). Other small bugs fixed (found using pychecker).
5103
5108
5104 * Version 0.1.4 opened for bugfixing.
5109 * Version 0.1.4 opened for bugfixing.
5105
5110
5106 2001-11-07 Fernando Perez <fperez@colorado.edu>
5111 2001-11-07 Fernando Perez <fperez@colorado.edu>
5107
5112
5108 * Version 0.1.3 released, mainly because of the raw_input bug.
5113 * Version 0.1.3 released, mainly because of the raw_input bug.
5109
5114
5110 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5115 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5111 and when testing for whether things were callable, a call could
5116 and when testing for whether things were callable, a call could
5112 actually be made to certain functions. They would get called again
5117 actually be made to certain functions. They would get called again
5113 once 'really' executed, with a resulting double call. A disaster
5118 once 'really' executed, with a resulting double call. A disaster
5114 in many cases (list.reverse() would never work!).
5119 in many cases (list.reverse() would never work!).
5115
5120
5116 * Removed prefilter() function, moved its code to raw_input (which
5121 * Removed prefilter() function, moved its code to raw_input (which
5117 after all was just a near-empty caller for prefilter). This saves
5122 after all was just a near-empty caller for prefilter). This saves
5118 a function call on every prompt, and simplifies the class a tiny bit.
5123 a function call on every prompt, and simplifies the class a tiny bit.
5119
5124
5120 * Fix _ip to __ip name in magic example file.
5125 * Fix _ip to __ip name in magic example file.
5121
5126
5122 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5127 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5123 work with non-gnu versions of tar.
5128 work with non-gnu versions of tar.
5124
5129
5125 2001-11-06 Fernando Perez <fperez@colorado.edu>
5130 2001-11-06 Fernando Perez <fperez@colorado.edu>
5126
5131
5127 * Version 0.1.2. Just to keep track of the recent changes.
5132 * Version 0.1.2. Just to keep track of the recent changes.
5128
5133
5129 * Fixed nasty bug in output prompt routine. It used to check 'if
5134 * Fixed nasty bug in output prompt routine. It used to check 'if
5130 arg != None...'. Problem is, this fails if arg implements a
5135 arg != None...'. Problem is, this fails if arg implements a
5131 special comparison (__cmp__) which disallows comparing to
5136 special comparison (__cmp__) which disallows comparing to
5132 None. Found it when trying to use the PhysicalQuantity module from
5137 None. Found it when trying to use the PhysicalQuantity module from
5133 ScientificPython.
5138 ScientificPython.
5134
5139
5135 2001-11-05 Fernando Perez <fperez@colorado.edu>
5140 2001-11-05 Fernando Perez <fperez@colorado.edu>
5136
5141
5137 * Also added dirs. Now the pushd/popd/dirs family functions
5142 * Also added dirs. Now the pushd/popd/dirs family functions
5138 basically like the shell, with the added convenience of going home
5143 basically like the shell, with the added convenience of going home
5139 when called with no args.
5144 when called with no args.
5140
5145
5141 * pushd/popd slightly modified to mimic shell behavior more
5146 * pushd/popd slightly modified to mimic shell behavior more
5142 closely.
5147 closely.
5143
5148
5144 * Added env,pushd,popd from ShellServices as magic functions. I
5149 * Added env,pushd,popd from ShellServices as magic functions. I
5145 think the cleanest will be to port all desired functions from
5150 think the cleanest will be to port all desired functions from
5146 ShellServices as magics and remove ShellServices altogether. This
5151 ShellServices as magics and remove ShellServices altogether. This
5147 will provide a single, clean way of adding functionality
5152 will provide a single, clean way of adding functionality
5148 (shell-type or otherwise) to IP.
5153 (shell-type or otherwise) to IP.
5149
5154
5150 2001-11-04 Fernando Perez <fperez@colorado.edu>
5155 2001-11-04 Fernando Perez <fperez@colorado.edu>
5151
5156
5152 * Added .ipython/ directory to sys.path. This way users can keep
5157 * Added .ipython/ directory to sys.path. This way users can keep
5153 customizations there and access them via import.
5158 customizations there and access them via import.
5154
5159
5155 2001-11-03 Fernando Perez <fperez@colorado.edu>
5160 2001-11-03 Fernando Perez <fperez@colorado.edu>
5156
5161
5157 * Opened version 0.1.1 for new changes.
5162 * Opened version 0.1.1 for new changes.
5158
5163
5159 * Changed version number to 0.1.0: first 'public' release, sent to
5164 * Changed version number to 0.1.0: first 'public' release, sent to
5160 Nathan and Janko.
5165 Nathan and Janko.
5161
5166
5162 * Lots of small fixes and tweaks.
5167 * Lots of small fixes and tweaks.
5163
5168
5164 * Minor changes to whos format. Now strings are shown, snipped if
5169 * Minor changes to whos format. Now strings are shown, snipped if
5165 too long.
5170 too long.
5166
5171
5167 * Changed ShellServices to work on __main__ so they show up in @who
5172 * Changed ShellServices to work on __main__ so they show up in @who
5168
5173
5169 * Help also works with ? at the end of a line:
5174 * Help also works with ? at the end of a line:
5170 ?sin and sin?
5175 ?sin and sin?
5171 both produce the same effect. This is nice, as often I use the
5176 both produce the same effect. This is nice, as often I use the
5172 tab-complete to find the name of a method, but I used to then have
5177 tab-complete to find the name of a method, but I used to then have
5173 to go to the beginning of the line to put a ? if I wanted more
5178 to go to the beginning of the line to put a ? if I wanted more
5174 info. Now I can just add the ? and hit return. Convenient.
5179 info. Now I can just add the ? and hit return. Convenient.
5175
5180
5176 2001-11-02 Fernando Perez <fperez@colorado.edu>
5181 2001-11-02 Fernando Perez <fperez@colorado.edu>
5177
5182
5178 * Python version check (>=2.1) added.
5183 * Python version check (>=2.1) added.
5179
5184
5180 * Added LazyPython documentation. At this point the docs are quite
5185 * Added LazyPython documentation. At this point the docs are quite
5181 a mess. A cleanup is in order.
5186 a mess. A cleanup is in order.
5182
5187
5183 * Auto-installer created. For some bizarre reason, the zipfiles
5188 * Auto-installer created. For some bizarre reason, the zipfiles
5184 module isn't working on my system. So I made a tar version
5189 module isn't working on my system. So I made a tar version
5185 (hopefully the command line options in various systems won't kill
5190 (hopefully the command line options in various systems won't kill
5186 me).
5191 me).
5187
5192
5188 * Fixes to Struct in genutils. Now all dictionary-like methods are
5193 * Fixes to Struct in genutils. Now all dictionary-like methods are
5189 protected (reasonably).
5194 protected (reasonably).
5190
5195
5191 * Added pager function to genutils and changed ? to print usage
5196 * Added pager function to genutils and changed ? to print usage
5192 note through it (it was too long).
5197 note through it (it was too long).
5193
5198
5194 * Added the LazyPython functionality. Works great! I changed the
5199 * Added the LazyPython functionality. Works great! I changed the
5195 auto-quote escape to ';', it's on home row and next to '. But
5200 auto-quote escape to ';', it's on home row and next to '. But
5196 both auto-quote and auto-paren (still /) escapes are command-line
5201 both auto-quote and auto-paren (still /) escapes are command-line
5197 parameters.
5202 parameters.
5198
5203
5199
5204
5200 2001-11-01 Fernando Perez <fperez@colorado.edu>
5205 2001-11-01 Fernando Perez <fperez@colorado.edu>
5201
5206
5202 * Version changed to 0.0.7. Fairly large change: configuration now
5207 * Version changed to 0.0.7. Fairly large change: configuration now
5203 is all stored in a directory, by default .ipython. There, all
5208 is all stored in a directory, by default .ipython. There, all
5204 config files have normal looking names (not .names)
5209 config files have normal looking names (not .names)
5205
5210
5206 * Version 0.0.6 Released first to Lucas and Archie as a test
5211 * Version 0.0.6 Released first to Lucas and Archie as a test
5207 run. Since it's the first 'semi-public' release, change version to
5212 run. Since it's the first 'semi-public' release, change version to
5208 > 0.0.6 for any changes now.
5213 > 0.0.6 for any changes now.
5209
5214
5210 * Stuff I had put in the ipplib.py changelog:
5215 * Stuff I had put in the ipplib.py changelog:
5211
5216
5212 Changes to InteractiveShell:
5217 Changes to InteractiveShell:
5213
5218
5214 - Made the usage message a parameter.
5219 - Made the usage message a parameter.
5215
5220
5216 - Require the name of the shell variable to be given. It's a bit
5221 - Require the name of the shell variable to be given. It's a bit
5217 of a hack, but allows the name 'shell' not to be hardwire in the
5222 of a hack, but allows the name 'shell' not to be hardwire in the
5218 magic (@) handler, which is problematic b/c it requires
5223 magic (@) handler, which is problematic b/c it requires
5219 polluting the global namespace with 'shell'. This in turn is
5224 polluting the global namespace with 'shell'. This in turn is
5220 fragile: if a user redefines a variable called shell, things
5225 fragile: if a user redefines a variable called shell, things
5221 break.
5226 break.
5222
5227
5223 - magic @: all functions available through @ need to be defined
5228 - magic @: all functions available through @ need to be defined
5224 as magic_<name>, even though they can be called simply as
5229 as magic_<name>, even though they can be called simply as
5225 @<name>. This allows the special command @magic to gather
5230 @<name>. This allows the special command @magic to gather
5226 information automatically about all existing magic functions,
5231 information automatically about all existing magic functions,
5227 even if they are run-time user extensions, by parsing the shell
5232 even if they are run-time user extensions, by parsing the shell
5228 instance __dict__ looking for special magic_ names.
5233 instance __dict__ looking for special magic_ names.
5229
5234
5230 - mainloop: added *two* local namespace parameters. This allows
5235 - mainloop: added *two* local namespace parameters. This allows
5231 the class to differentiate between parameters which were there
5236 the class to differentiate between parameters which were there
5232 before and after command line initialization was processed. This
5237 before and after command line initialization was processed. This
5233 way, later @who can show things loaded at startup by the
5238 way, later @who can show things loaded at startup by the
5234 user. This trick was necessary to make session saving/reloading
5239 user. This trick was necessary to make session saving/reloading
5235 really work: ideally after saving/exiting/reloading a session,
5240 really work: ideally after saving/exiting/reloading a session,
5236 *everythin* should look the same, including the output of @who. I
5241 *everythin* should look the same, including the output of @who. I
5237 was only able to make this work with this double namespace
5242 was only able to make this work with this double namespace
5238 trick.
5243 trick.
5239
5244
5240 - added a header to the logfile which allows (almost) full
5245 - added a header to the logfile which allows (almost) full
5241 session restoring.
5246 session restoring.
5242
5247
5243 - prepend lines beginning with @ or !, with a and log
5248 - prepend lines beginning with @ or !, with a and log
5244 them. Why? !lines: may be useful to know what you did @lines:
5249 them. Why? !lines: may be useful to know what you did @lines:
5245 they may affect session state. So when restoring a session, at
5250 they may affect session state. So when restoring a session, at
5246 least inform the user of their presence. I couldn't quite get
5251 least inform the user of their presence. I couldn't quite get
5247 them to properly re-execute, but at least the user is warned.
5252 them to properly re-execute, but at least the user is warned.
5248
5253
5249 * Started ChangeLog.
5254 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now