##// END OF EJS Templates
GetoptErrors when invoking magics etc. with wrong args ...
vivainio -
Show More
@@ -1,2869 +1,2873 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 1092 2006-01-27 23:56:32Z vivainio $"""
4 $Id: Magic.py 1094 2006-01-28 00:47:41Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54
55 #***************************************************************************
55 #***************************************************************************
56 # Utility functions
56 # Utility functions
57 def on_off(tag):
57 def on_off(tag):
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
60
60
61 class Bunch: pass
61 class Bunch: pass
62
62
63 #***************************************************************************
63 #***************************************************************************
64 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
65 class Magic:
65 class Magic:
66 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
67
67
68 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
69 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
70 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
71 vs. `%cd("../")`
71 vs. `%cd("../")`
72
72
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
75
75
76 # class globals
76 # class globals
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
79
79
80 #......................................................................
80 #......................................................................
81 # some utility functions
81 # some utility functions
82
82
83 def __init__(self,shell):
83 def __init__(self,shell):
84
84
85 self.options_table = {}
85 self.options_table = {}
86 if profile is None:
86 if profile is None:
87 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
88 self.shell = shell
88 self.shell = shell
89
89
90 # namespace for holding state we may need
90 # namespace for holding state we may need
91 self._magic_state = Bunch()
91 self._magic_state = Bunch()
92
92
93 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
94 error("""\
94 error("""\
95 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
96 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98
98
99 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
100 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
101
101
102 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
103 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
104 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
105
105
106 def lsmagic(self):
106 def lsmagic(self):
107 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
108
108
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
111
111
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
113
113
114 # magics in class definition
114 # magics in class definition
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
116 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
117 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
120 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 out = []
126 out = []
127 for fn in magics:
127 for fn in magics:
128 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
129 out.sort()
129 out.sort()
130 return out
130 return out
131
131
132 def extract_input_slices(self,slices):
132 def extract_input_slices(self,slices):
133 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
134
134
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
136 since this function is for use by magic functions which get their
136 since this function is for use by magic functions which get their
137 arguments as strings.
137 arguments as strings.
138
138
139 Note that slices can be called with two notations:
139 Note that slices can be called with two notations:
140
140
141 N:M -> standard python form, means including items N...(M-1).
141 N:M -> standard python form, means including items N...(M-1).
142
142
143 N-M -> include items N..M (closed endpoint)."""
143 N-M -> include items N..M (closed endpoint)."""
144
144
145 cmds = []
145 cmds = []
146 for chunk in slices:
146 for chunk in slices:
147 if ':' in chunk:
147 if ':' in chunk:
148 ini,fin = map(int,chunk.split(':'))
148 ini,fin = map(int,chunk.split(':'))
149 elif '-' in chunk:
149 elif '-' in chunk:
150 ini,fin = map(int,chunk.split('-'))
150 ini,fin = map(int,chunk.split('-'))
151 fin += 1
151 fin += 1
152 else:
152 else:
153 ini = int(chunk)
153 ini = int(chunk)
154 fin = ini+1
154 fin = ini+1
155 cmds.append(self.shell.input_hist[ini:fin])
155 cmds.append(self.shell.input_hist[ini:fin])
156 return cmds
156 return cmds
157
157
158 def _ofind(self,oname):
158 def _ofind(self,oname):
159 """Find an object in the available namespaces.
159 """Find an object in the available namespaces.
160
160
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
162
162
163 Has special code to detect magic functions.
163 Has special code to detect magic functions.
164 """
164 """
165
165
166 oname = oname.strip()
166 oname = oname.strip()
167
167
168 # Namespaces to search in:
168 # Namespaces to search in:
169 user_ns = self.shell.user_ns
169 user_ns = self.shell.user_ns
170 internal_ns = self.shell.internal_ns
170 internal_ns = self.shell.internal_ns
171 builtin_ns = __builtin__.__dict__
171 builtin_ns = __builtin__.__dict__
172 alias_ns = self.shell.alias_table
172 alias_ns = self.shell.alias_table
173
173
174 # Put them in a list. The order is important so that we find things in
174 # Put them in a list. The order is important so that we find things in
175 # the same order that Python finds them.
175 # the same order that Python finds them.
176 namespaces = [ ('Interactive',user_ns),
176 namespaces = [ ('Interactive',user_ns),
177 ('IPython internal',internal_ns),
177 ('IPython internal',internal_ns),
178 ('Python builtin',builtin_ns),
178 ('Python builtin',builtin_ns),
179 ('Alias',alias_ns),
179 ('Alias',alias_ns),
180 ]
180 ]
181
181
182 # initialize results to 'null'
182 # initialize results to 'null'
183 found = 0; obj = None; ospace = None; ds = None;
183 found = 0; obj = None; ospace = None; ds = None;
184 ismagic = 0; isalias = 0
184 ismagic = 0; isalias = 0
185
185
186 # Look for the given name by splitting it in parts. If the head is
186 # Look for the given name by splitting it in parts. If the head is
187 # found, then we look for all the remaining parts as members, and only
187 # found, then we look for all the remaining parts as members, and only
188 # declare success if we can find them all.
188 # declare success if we can find them all.
189 oname_parts = oname.split('.')
189 oname_parts = oname.split('.')
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
191 for nsname,ns in namespaces:
191 for nsname,ns in namespaces:
192 try:
192 try:
193 obj = ns[oname_head]
193 obj = ns[oname_head]
194 except KeyError:
194 except KeyError:
195 continue
195 continue
196 else:
196 else:
197 for part in oname_rest:
197 for part in oname_rest:
198 try:
198 try:
199 obj = getattr(obj,part)
199 obj = getattr(obj,part)
200 except:
200 except:
201 # Blanket except b/c some badly implemented objects
201 # Blanket except b/c some badly implemented objects
202 # allow __getattr__ to raise exceptions other than
202 # allow __getattr__ to raise exceptions other than
203 # AttributeError, which then crashes IPython.
203 # AttributeError, which then crashes IPython.
204 break
204 break
205 else:
205 else:
206 # If we finish the for loop (no break), we got all members
206 # If we finish the for loop (no break), we got all members
207 found = 1
207 found = 1
208 ospace = nsname
208 ospace = nsname
209 if ns == alias_ns:
209 if ns == alias_ns:
210 isalias = 1
210 isalias = 1
211 break # namespace loop
211 break # namespace loop
212
212
213 # Try to see if it's magic
213 # Try to see if it's magic
214 if not found:
214 if not found:
215 if oname.startswith(self.shell.ESC_MAGIC):
215 if oname.startswith(self.shell.ESC_MAGIC):
216 oname = oname[1:]
216 oname = oname[1:]
217 obj = getattr(self,'magic_'+oname,None)
217 obj = getattr(self,'magic_'+oname,None)
218 if obj is not None:
218 if obj is not None:
219 found = 1
219 found = 1
220 ospace = 'IPython internal'
220 ospace = 'IPython internal'
221 ismagic = 1
221 ismagic = 1
222
222
223 # Last try: special-case some literals like '', [], {}, etc:
223 # Last try: special-case some literals like '', [], {}, etc:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
225 obj = eval(oname_head)
225 obj = eval(oname_head)
226 found = 1
226 found = 1
227 ospace = 'Interactive'
227 ospace = 'Interactive'
228
228
229 return {'found':found, 'obj':obj, 'namespace':ospace,
229 return {'found':found, 'obj':obj, 'namespace':ospace,
230 'ismagic':ismagic, 'isalias':isalias}
230 'ismagic':ismagic, 'isalias':isalias}
231
231
232 def arg_err(self,func):
232 def arg_err(self,func):
233 """Print docstring if incorrect arguments were passed"""
233 """Print docstring if incorrect arguments were passed"""
234 print 'Error in arguments:'
234 print 'Error in arguments:'
235 print OInspect.getdoc(func)
235 print OInspect.getdoc(func)
236
236
237 def format_latex(self,strng):
237 def format_latex(self,strng):
238 """Format a string for latex inclusion."""
238 """Format a string for latex inclusion."""
239
239
240 # Characters that need to be escaped for latex:
240 # Characters that need to be escaped for latex:
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
242 # Magic command names as headers:
242 # Magic command names as headers:
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
244 re.MULTILINE)
244 re.MULTILINE)
245 # Magic commands
245 # Magic commands
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
247 re.MULTILINE)
247 re.MULTILINE)
248 # Paragraph continue
248 # Paragraph continue
249 par_re = re.compile(r'\\$',re.MULTILINE)
249 par_re = re.compile(r'\\$',re.MULTILINE)
250
250
251 # The "\n" symbol
251 # The "\n" symbol
252 newline_re = re.compile(r'\\n')
252 newline_re = re.compile(r'\\n')
253
253
254 # Now build the string for output:
254 # Now build the string for output:
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
257 strng)
257 strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
259 strng = par_re.sub(r'\\\\',strng)
259 strng = par_re.sub(r'\\\\',strng)
260 strng = escape_re.sub(r'\\\1',strng)
260 strng = escape_re.sub(r'\\\1',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
262 return strng
262 return strng
263
263
264 def format_screen(self,strng):
264 def format_screen(self,strng):
265 """Format a string for screen printing.
265 """Format a string for screen printing.
266
266
267 This removes some latex-type format codes."""
267 This removes some latex-type format codes."""
268 # Paragraph continue
268 # Paragraph continue
269 par_re = re.compile(r'\\$',re.MULTILINE)
269 par_re = re.compile(r'\\$',re.MULTILINE)
270 strng = par_re.sub('',strng)
270 strng = par_re.sub('',strng)
271 return strng
271 return strng
272
272
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
274 """Parse options passed to an argument string.
274 """Parse options passed to an argument string.
275
275
276 The interface is similar to that of getopt(), but it returns back a
276 The interface is similar to that of getopt(), but it returns back a
277 Struct with the options as keys and the stripped argument string still
277 Struct with the options as keys and the stripped argument string still
278 as a string.
278 as a string.
279
279
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
281 This allows us to easily expand variables, glob files, quote
281 This allows us to easily expand variables, glob files, quote
282 arguments, etc.
282 arguments, etc.
283
283
284 Options:
284 Options:
285 -mode: default 'string'. If given as 'list', the argument string is
285 -mode: default 'string'. If given as 'list', the argument string is
286 returned as a list (split on whitespace) instead of a string.
286 returned as a list (split on whitespace) instead of a string.
287
287
288 -list_all: put all option values in lists. Normally only options
288 -list_all: put all option values in lists. Normally only options
289 appearing more than once are put in a list."""
289 appearing more than once are put in a list."""
290
290
291 # inject default options at the beginning of the input line
291 # inject default options at the beginning of the input line
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
294
294
295 mode = kw.get('mode','string')
295 mode = kw.get('mode','string')
296 if mode not in ['string','list']:
296 if mode not in ['string','list']:
297 raise ValueError,'incorrect mode given: %s' % mode
297 raise ValueError,'incorrect mode given: %s' % mode
298 # Get options
298 # Get options
299 list_all = kw.get('list_all',0)
299 list_all = kw.get('list_all',0)
300
300
301 # Check if we have more than one argument to warrant extra processing:
301 # Check if we have more than one argument to warrant extra processing:
302 odict = {} # Dictionary with options
302 odict = {} # Dictionary with options
303 args = arg_str.split()
303 args = arg_str.split()
304 if len(args) >= 1:
304 if len(args) >= 1:
305 # If the list of inputs only has 0 or 1 thing in it, there's no
305 # If the list of inputs only has 0 or 1 thing in it, there's no
306 # need to look for options
306 # need to look for options
307 argv = shlex_split(arg_str)
307 argv = shlex_split(arg_str)
308 # Do regular option processing
308 # Do regular option processing
309 try:
309 opts,args = getopt(argv,opt_str,*long_opts)
310 opts,args = getopt(argv,opt_str,*long_opts)
311 except GetoptError,e:
312 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
313 " ".join(long_opts)))
310 for o,a in opts:
314 for o,a in opts:
311 if o.startswith('--'):
315 if o.startswith('--'):
312 o = o[2:]
316 o = o[2:]
313 else:
317 else:
314 o = o[1:]
318 o = o[1:]
315 try:
319 try:
316 odict[o].append(a)
320 odict[o].append(a)
317 except AttributeError:
321 except AttributeError:
318 odict[o] = [odict[o],a]
322 odict[o] = [odict[o],a]
319 except KeyError:
323 except KeyError:
320 if list_all:
324 if list_all:
321 odict[o] = [a]
325 odict[o] = [a]
322 else:
326 else:
323 odict[o] = a
327 odict[o] = a
324
328
325 # Prepare opts,args for return
329 # Prepare opts,args for return
326 opts = Struct(odict)
330 opts = Struct(odict)
327 if mode == 'string':
331 if mode == 'string':
328 args = ' '.join(args)
332 args = ' '.join(args)
329
333
330 return opts,args
334 return opts,args
331
335
332 #......................................................................
336 #......................................................................
333 # And now the actual magic functions
337 # And now the actual magic functions
334
338
335 # Functions for IPython shell work (vars,funcs, config, etc)
339 # Functions for IPython shell work (vars,funcs, config, etc)
336 def magic_lsmagic(self, parameter_s = ''):
340 def magic_lsmagic(self, parameter_s = ''):
337 """List currently available magic functions."""
341 """List currently available magic functions."""
338 mesc = self.shell.ESC_MAGIC
342 mesc = self.shell.ESC_MAGIC
339 print 'Available magic functions:\n'+mesc+\
343 print 'Available magic functions:\n'+mesc+\
340 (' '+mesc).join(self.lsmagic())
344 (' '+mesc).join(self.lsmagic())
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
345 print '\n' + Magic.auto_status[self.shell.rc.automagic]
342 return None
346 return None
343
347
344 def magic_magic(self, parameter_s = ''):
348 def magic_magic(self, parameter_s = ''):
345 """Print information about the magic function system."""
349 """Print information about the magic function system."""
346
350
347 mode = ''
351 mode = ''
348 try:
352 try:
349 if parameter_s.split()[0] == '-latex':
353 if parameter_s.split()[0] == '-latex':
350 mode = 'latex'
354 mode = 'latex'
351 except:
355 except:
352 pass
356 pass
353
357
354 magic_docs = []
358 magic_docs = []
355 for fname in self.lsmagic():
359 for fname in self.lsmagic():
356 mname = 'magic_' + fname
360 mname = 'magic_' + fname
357 for space in (Magic,self,self.__class__):
361 for space in (Magic,self,self.__class__):
358 try:
362 try:
359 fn = space.__dict__[mname]
363 fn = space.__dict__[mname]
360 except KeyError:
364 except KeyError:
361 pass
365 pass
362 else:
366 else:
363 break
367 break
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
368 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
365 fname,fn.__doc__))
369 fname,fn.__doc__))
366 magic_docs = ''.join(magic_docs)
370 magic_docs = ''.join(magic_docs)
367
371
368 if mode == 'latex':
372 if mode == 'latex':
369 print self.format_latex(magic_docs)
373 print self.format_latex(magic_docs)
370 return
374 return
371 else:
375 else:
372 magic_docs = self.format_screen(magic_docs)
376 magic_docs = self.format_screen(magic_docs)
373
377
374 outmsg = """
378 outmsg = """
375 IPython's 'magic' functions
379 IPython's 'magic' functions
376 ===========================
380 ===========================
377
381
378 The magic function system provides a series of functions which allow you to
382 The magic function system provides a series of functions which allow you to
379 control the behavior of IPython itself, plus a lot of system-type
383 control the behavior of IPython itself, plus a lot of system-type
380 features. All these functions are prefixed with a % character, but parameters
384 features. All these functions are prefixed with a % character, but parameters
381 are given without parentheses or quotes.
385 are given without parentheses or quotes.
382
386
383 NOTE: If you have 'automagic' enabled (via the command line option or with the
387 NOTE: If you have 'automagic' enabled (via the command line option or with the
384 %automagic function), you don't need to type in the % explicitly. By default,
388 %automagic function), you don't need to type in the % explicitly. By default,
385 IPython ships with automagic on, so you should only rarely need the % escape.
389 IPython ships with automagic on, so you should only rarely need the % escape.
386
390
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
391 Example: typing '%cd mydir' (without the quotes) changes you working directory
388 to 'mydir', if it exists.
392 to 'mydir', if it exists.
389
393
390 You can define your own magic functions to extend the system. See the supplied
394 You can define your own magic functions to extend the system. See the supplied
391 ipythonrc and example-magic.py files for details (in your ipython
395 ipythonrc and example-magic.py files for details (in your ipython
392 configuration directory, typically $HOME/.ipython/).
396 configuration directory, typically $HOME/.ipython/).
393
397
394 You can also define your own aliased names for magic functions. In your
398 You can also define your own aliased names for magic functions. In your
395 ipythonrc file, placing a line like:
399 ipythonrc file, placing a line like:
396
400
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
401 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
398
402
399 will define %pf as a new name for %profile.
403 will define %pf as a new name for %profile.
400
404
401 You can also call magics in code using the ipmagic() function, which IPython
405 You can also call magics in code using the ipmagic() function, which IPython
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
406 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
403
407
404 For a list of the available magic functions, use %lsmagic. For a description
408 For a list of the available magic functions, use %lsmagic. For a description
405 of any of them, type %magic_name?, e.g. '%cd?'.
409 of any of them, type %magic_name?, e.g. '%cd?'.
406
410
407 Currently the magic system has the following functions:\n"""
411 Currently the magic system has the following functions:\n"""
408
412
409 mesc = self.shell.ESC_MAGIC
413 mesc = self.shell.ESC_MAGIC
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
414 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
411 "\n\n%s%s\n\n%s" % (outmsg,
415 "\n\n%s%s\n\n%s" % (outmsg,
412 magic_docs,mesc,mesc,
416 magic_docs,mesc,mesc,
413 (' '+mesc).join(self.lsmagic()),
417 (' '+mesc).join(self.lsmagic()),
414 Magic.auto_status[self.shell.rc.automagic] ) )
418 Magic.auto_status[self.shell.rc.automagic] ) )
415
419
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
420 page(outmsg,screen_lines=self.shell.rc.screen_length)
417
421
418 def magic_automagic(self, parameter_s = ''):
422 def magic_automagic(self, parameter_s = ''):
419 """Make magic functions callable without having to type the initial %.
423 """Make magic functions callable without having to type the initial %.
420
424
421 Toggles on/off (when off, you must call it as %automagic, of
425 Toggles on/off (when off, you must call it as %automagic, of
422 course). Note that magic functions have lowest priority, so if there's
426 course). Note that magic functions have lowest priority, so if there's
423 a variable whose name collides with that of a magic fn, automagic
427 a variable whose name collides with that of a magic fn, automagic
424 won't work for that function (you get the variable instead). However,
428 won't work for that function (you get the variable instead). However,
425 if you delete the variable (del var), the previously shadowed magic
429 if you delete the variable (del var), the previously shadowed magic
426 function becomes visible to automagic again."""
430 function becomes visible to automagic again."""
427
431
428 rc = self.shell.rc
432 rc = self.shell.rc
429 rc.automagic = not rc.automagic
433 rc.automagic = not rc.automagic
430 print '\n' + Magic.auto_status[rc.automagic]
434 print '\n' + Magic.auto_status[rc.automagic]
431
435
432 def magic_autocall(self, parameter_s = ''):
436 def magic_autocall(self, parameter_s = ''):
433 """Make functions callable without having to type parentheses.
437 """Make functions callable without having to type parentheses.
434
438
435 Usage:
439 Usage:
436
440
437 %autocall [mode]
441 %autocall [mode]
438
442
439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
440 value is toggled on and off (remembering the previous state)."""
444 value is toggled on and off (remembering the previous state)."""
441
445
442 rc = self.shell.rc
446 rc = self.shell.rc
443
447
444 if parameter_s:
448 if parameter_s:
445 arg = int(parameter_s)
449 arg = int(parameter_s)
446 else:
450 else:
447 arg = 'toggle'
451 arg = 'toggle'
448
452
449 if not arg in (0,1,2,'toggle'):
453 if not arg in (0,1,2,'toggle'):
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
454 error('Valid modes: (0->Off, 1->Smart, 2->Full')
451 return
455 return
452
456
453 if arg in (0,1,2):
457 if arg in (0,1,2):
454 rc.autocall = arg
458 rc.autocall = arg
455 else: # toggle
459 else: # toggle
456 if rc.autocall:
460 if rc.autocall:
457 self._magic_state.autocall_save = rc.autocall
461 self._magic_state.autocall_save = rc.autocall
458 rc.autocall = 0
462 rc.autocall = 0
459 else:
463 else:
460 try:
464 try:
461 rc.autocall = self._magic_state.autocall_save
465 rc.autocall = self._magic_state.autocall_save
462 except AttributeError:
466 except AttributeError:
463 rc.autocall = self._magic_state.autocall_save = 1
467 rc.autocall = self._magic_state.autocall_save = 1
464
468
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
469 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
466
470
467 def magic_autoindent(self, parameter_s = ''):
471 def magic_autoindent(self, parameter_s = ''):
468 """Toggle autoindent on/off (if available)."""
472 """Toggle autoindent on/off (if available)."""
469
473
470 self.shell.set_autoindent()
474 self.shell.set_autoindent()
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
475 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
472
476
473 def magic_system_verbose(self, parameter_s = ''):
477 def magic_system_verbose(self, parameter_s = ''):
474 """Toggle verbose printing of system calls on/off."""
478 """Toggle verbose printing of system calls on/off."""
475
479
476 self.shell.rc_set_toggle('system_verbose')
480 self.shell.rc_set_toggle('system_verbose')
477 print "System verbose printing is:",\
481 print "System verbose printing is:",\
478 ['OFF','ON'][self.shell.rc.system_verbose]
482 ['OFF','ON'][self.shell.rc.system_verbose]
479
483
480 def magic_history(self, parameter_s = ''):
484 def magic_history(self, parameter_s = ''):
481 """Print input history (_i<n> variables), with most recent last.
485 """Print input history (_i<n> variables), with most recent last.
482
486
483 %history -> print at most 40 inputs (some may be multi-line)\\
487 %history -> print at most 40 inputs (some may be multi-line)\\
484 %history n -> print at most n inputs\\
488 %history n -> print at most n inputs\\
485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
489 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
486
490
487 Each input's number <n> is shown, and is accessible as the
491 Each input's number <n> is shown, and is accessible as the
488 automatically generated variable _i<n>. Multi-line statements are
492 automatically generated variable _i<n>. Multi-line statements are
489 printed starting at a new line for easy copy/paste.
493 printed starting at a new line for easy copy/paste.
490
494
491
495
492 Options:
496 Options:
493
497
494 -n: do NOT print line numbers. This is useful if you want to get a
498 -n: do NOT print line numbers. This is useful if you want to get a
495 printout of many lines which can be directly pasted into a text
499 printout of many lines which can be directly pasted into a text
496 editor.
500 editor.
497
501
498 This feature is only available if numbered prompts are in use.
502 This feature is only available if numbered prompts are in use.
499
503
500 -r: print the 'raw' history. IPython filters your input and
504 -r: print the 'raw' history. IPython filters your input and
501 converts it all into valid Python source before executing it (things
505 converts it all into valid Python source before executing it (things
502 like magics or aliases are turned into function calls, for
506 like magics or aliases are turned into function calls, for
503 example). With this option, you'll see the unfiltered history
507 example). With this option, you'll see the unfiltered history
504 instead of the filtered version: '%cd /' will be seen as '%cd /'
508 instead of the filtered version: '%cd /' will be seen as '%cd /'
505 instead of 'ipmagic("%cd /")'.
509 instead of 'ipmagic("%cd /")'.
506 """
510 """
507
511
508 shell = self.shell
512 shell = self.shell
509 if not shell.outputcache.do_full_cache:
513 if not shell.outputcache.do_full_cache:
510 print 'This feature is only available if numbered prompts are in use.'
514 print 'This feature is only available if numbered prompts are in use.'
511 return
515 return
512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
516 opts,args = self.parse_options(parameter_s,'nr',mode='list')
513
517
514 if opts.has_key('r'):
518 if opts.has_key('r'):
515 input_hist = shell.input_hist_raw
519 input_hist = shell.input_hist_raw
516 else:
520 else:
517 input_hist = shell.input_hist
521 input_hist = shell.input_hist
518
522
519 default_length = 40
523 default_length = 40
520 if len(args) == 0:
524 if len(args) == 0:
521 final = len(input_hist)
525 final = len(input_hist)
522 init = max(1,final-default_length)
526 init = max(1,final-default_length)
523 elif len(args) == 1:
527 elif len(args) == 1:
524 final = len(input_hist)
528 final = len(input_hist)
525 init = max(1,final-int(args[0]))
529 init = max(1,final-int(args[0]))
526 elif len(args) == 2:
530 elif len(args) == 2:
527 init,final = map(int,args)
531 init,final = map(int,args)
528 else:
532 else:
529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
533 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
530 print self.magic_hist.__doc__
534 print self.magic_hist.__doc__
531 return
535 return
532 width = len(str(final))
536 width = len(str(final))
533 line_sep = ['','\n']
537 line_sep = ['','\n']
534 print_nums = not opts.has_key('n')
538 print_nums = not opts.has_key('n')
535 for in_num in range(init,final):
539 for in_num in range(init,final):
536 inline = input_hist[in_num]
540 inline = input_hist[in_num]
537 multiline = int(inline.count('\n') > 1)
541 multiline = int(inline.count('\n') > 1)
538 if print_nums:
542 if print_nums:
539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
543 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
540 print inline,
544 print inline,
541
545
542 def magic_hist(self, parameter_s=''):
546 def magic_hist(self, parameter_s=''):
543 """Alternate name for %history."""
547 """Alternate name for %history."""
544 return self.magic_history(parameter_s)
548 return self.magic_history(parameter_s)
545
549
546 def magic_p(self, parameter_s=''):
550 def magic_p(self, parameter_s=''):
547 """Just a short alias for Python's 'print'."""
551 """Just a short alias for Python's 'print'."""
548 exec 'print ' + parameter_s in self.shell.user_ns
552 exec 'print ' + parameter_s in self.shell.user_ns
549
553
550 def magic_r(self, parameter_s=''):
554 def magic_r(self, parameter_s=''):
551 """Repeat previous input.
555 """Repeat previous input.
552
556
553 If given an argument, repeats the previous command which starts with
557 If given an argument, repeats the previous command which starts with
554 the same string, otherwise it just repeats the previous input.
558 the same string, otherwise it just repeats the previous input.
555
559
556 Shell escaped commands (with ! as first character) are not recognized
560 Shell escaped commands (with ! as first character) are not recognized
557 by this system, only pure python code and magic commands.
561 by this system, only pure python code and magic commands.
558 """
562 """
559
563
560 start = parameter_s.strip()
564 start = parameter_s.strip()
561 esc_magic = self.shell.ESC_MAGIC
565 esc_magic = self.shell.ESC_MAGIC
562 # Identify magic commands even if automagic is on (which means
566 # Identify magic commands even if automagic is on (which means
563 # the in-memory version is different from that typed by the user).
567 # the in-memory version is different from that typed by the user).
564 if self.shell.rc.automagic:
568 if self.shell.rc.automagic:
565 start_magic = esc_magic+start
569 start_magic = esc_magic+start
566 else:
570 else:
567 start_magic = start
571 start_magic = start
568 # Look through the input history in reverse
572 # Look through the input history in reverse
569 for n in range(len(self.shell.input_hist)-2,0,-1):
573 for n in range(len(self.shell.input_hist)-2,0,-1):
570 input = self.shell.input_hist[n]
574 input = self.shell.input_hist[n]
571 # skip plain 'r' lines so we don't recurse to infinity
575 # skip plain 'r' lines so we don't recurse to infinity
572 if input != 'ipmagic("r")\n' and \
576 if input != 'ipmagic("r")\n' and \
573 (input.startswith(start) or input.startswith(start_magic)):
577 (input.startswith(start) or input.startswith(start_magic)):
574 #print 'match',`input` # dbg
578 #print 'match',`input` # dbg
575 print 'Executing:',input,
579 print 'Executing:',input,
576 self.shell.runlines(input)
580 self.shell.runlines(input)
577 return
581 return
578 print 'No previous input matching `%s` found.' % start
582 print 'No previous input matching `%s` found.' % start
579
583
580 def magic_page(self, parameter_s=''):
584 def magic_page(self, parameter_s=''):
581 """Pretty print the object and display it through a pager.
585 """Pretty print the object and display it through a pager.
582
586
583 If no parameter is given, use _ (last output)."""
587 If no parameter is given, use _ (last output)."""
584 # After a function contributed by Olivier Aubert, slightly modified.
588 # After a function contributed by Olivier Aubert, slightly modified.
585
589
586 oname = parameter_s and parameter_s or '_'
590 oname = parameter_s and parameter_s or '_'
587 info = self._ofind(oname)
591 info = self._ofind(oname)
588 if info['found']:
592 if info['found']:
589 page(pformat(info['obj']))
593 page(pformat(info['obj']))
590 else:
594 else:
591 print 'Object `%s` not found' % oname
595 print 'Object `%s` not found' % oname
592
596
593 def magic_profile(self, parameter_s=''):
597 def magic_profile(self, parameter_s=''):
594 """Print your currently active IPyhton profile."""
598 """Print your currently active IPyhton profile."""
595 if self.shell.rc.profile:
599 if self.shell.rc.profile:
596 printpl('Current IPython profile: $self.shell.rc.profile.')
600 printpl('Current IPython profile: $self.shell.rc.profile.')
597 else:
601 else:
598 print 'No profile active.'
602 print 'No profile active.'
599
603
600 def _inspect(self,meth,oname,**kw):
604 def _inspect(self,meth,oname,**kw):
601 """Generic interface to the inspector system.
605 """Generic interface to the inspector system.
602
606
603 This function is meant to be called by pdef, pdoc & friends."""
607 This function is meant to be called by pdef, pdoc & friends."""
604
608
605 oname = oname.strip()
609 oname = oname.strip()
606 info = Struct(self._ofind(oname))
610 info = Struct(self._ofind(oname))
607 if info.found:
611 if info.found:
608 pmethod = getattr(self.shell.inspector,meth)
612 pmethod = getattr(self.shell.inspector,meth)
609 formatter = info.ismagic and self.format_screen or None
613 formatter = info.ismagic and self.format_screen or None
610 if meth == 'pdoc':
614 if meth == 'pdoc':
611 pmethod(info.obj,oname,formatter)
615 pmethod(info.obj,oname,formatter)
612 elif meth == 'pinfo':
616 elif meth == 'pinfo':
613 pmethod(info.obj,oname,formatter,info,**kw)
617 pmethod(info.obj,oname,formatter,info,**kw)
614 else:
618 else:
615 pmethod(info.obj,oname)
619 pmethod(info.obj,oname)
616 else:
620 else:
617 print 'Object `%s` not found.' % oname
621 print 'Object `%s` not found.' % oname
618 return 'not found' # so callers can take other action
622 return 'not found' # so callers can take other action
619
623
620 def magic_pdef(self, parameter_s=''):
624 def magic_pdef(self, parameter_s=''):
621 """Print the definition header for any callable object.
625 """Print the definition header for any callable object.
622
626
623 If the object is a class, print the constructor information."""
627 If the object is a class, print the constructor information."""
624 self._inspect('pdef',parameter_s)
628 self._inspect('pdef',parameter_s)
625
629
626 def magic_pdoc(self, parameter_s=''):
630 def magic_pdoc(self, parameter_s=''):
627 """Print the docstring for an object.
631 """Print the docstring for an object.
628
632
629 If the given object is a class, it will print both the class and the
633 If the given object is a class, it will print both the class and the
630 constructor docstrings."""
634 constructor docstrings."""
631 self._inspect('pdoc',parameter_s)
635 self._inspect('pdoc',parameter_s)
632
636
633 def magic_psource(self, parameter_s=''):
637 def magic_psource(self, parameter_s=''):
634 """Print (or run through pager) the source code for an object."""
638 """Print (or run through pager) the source code for an object."""
635 self._inspect('psource',parameter_s)
639 self._inspect('psource',parameter_s)
636
640
637 def magic_pfile(self, parameter_s=''):
641 def magic_pfile(self, parameter_s=''):
638 """Print (or run through pager) the file where an object is defined.
642 """Print (or run through pager) the file where an object is defined.
639
643
640 The file opens at the line where the object definition begins. IPython
644 The file opens at the line where the object definition begins. IPython
641 will honor the environment variable PAGER if set, and otherwise will
645 will honor the environment variable PAGER if set, and otherwise will
642 do its best to print the file in a convenient form.
646 do its best to print the file in a convenient form.
643
647
644 If the given argument is not an object currently defined, IPython will
648 If the given argument is not an object currently defined, IPython will
645 try to interpret it as a filename (automatically adding a .py extension
649 try to interpret it as a filename (automatically adding a .py extension
646 if needed). You can thus use %pfile as a syntax highlighting code
650 if needed). You can thus use %pfile as a syntax highlighting code
647 viewer."""
651 viewer."""
648
652
649 # first interpret argument as an object name
653 # first interpret argument as an object name
650 out = self._inspect('pfile',parameter_s)
654 out = self._inspect('pfile',parameter_s)
651 # if not, try the input as a filename
655 # if not, try the input as a filename
652 if out == 'not found':
656 if out == 'not found':
653 try:
657 try:
654 filename = get_py_filename(parameter_s)
658 filename = get_py_filename(parameter_s)
655 except IOError,msg:
659 except IOError,msg:
656 print msg
660 print msg
657 return
661 return
658 page(self.shell.inspector.format(file(filename).read()))
662 page(self.shell.inspector.format(file(filename).read()))
659
663
660 def magic_pinfo(self, parameter_s=''):
664 def magic_pinfo(self, parameter_s=''):
661 """Provide detailed information about an object.
665 """Provide detailed information about an object.
662
666
663 '%pinfo object' is just a synonym for object? or ?object."""
667 '%pinfo object' is just a synonym for object? or ?object."""
664
668
665 #print 'pinfo par: <%s>' % parameter_s # dbg
669 #print 'pinfo par: <%s>' % parameter_s # dbg
666
670
667 # detail_level: 0 -> obj? , 1 -> obj??
671 # detail_level: 0 -> obj? , 1 -> obj??
668 detail_level = 0
672 detail_level = 0
669 # We need to detect if we got called as 'pinfo pinfo foo', which can
673 # We need to detect if we got called as 'pinfo pinfo foo', which can
670 # happen if the user types 'pinfo foo?' at the cmd line.
674 # happen if the user types 'pinfo foo?' at the cmd line.
671 pinfo,qmark1,oname,qmark2 = \
675 pinfo,qmark1,oname,qmark2 = \
672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
676 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
673 if pinfo or qmark1 or qmark2:
677 if pinfo or qmark1 or qmark2:
674 detail_level = 1
678 detail_level = 1
675 if "*" in oname:
679 if "*" in oname:
676 self.magic_psearch(oname)
680 self.magic_psearch(oname)
677 else:
681 else:
678 self._inspect('pinfo',oname,detail_level=detail_level)
682 self._inspect('pinfo',oname,detail_level=detail_level)
679
683
680 def magic_psearch(self, parameter_s=''):
684 def magic_psearch(self, parameter_s=''):
681 """Search for object in namespaces by wildcard.
685 """Search for object in namespaces by wildcard.
682
686
683 %psearch [options] PATTERN [OBJECT TYPE]
687 %psearch [options] PATTERN [OBJECT TYPE]
684
688
685 Note: ? can be used as a synonym for %psearch, at the beginning or at
689 Note: ? can be used as a synonym for %psearch, at the beginning or at
686 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
690 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
687 rest of the command line must be unchanged (options come first), so
691 rest of the command line must be unchanged (options come first), so
688 for example the following forms are equivalent
692 for example the following forms are equivalent
689
693
690 %psearch -i a* function
694 %psearch -i a* function
691 -i a* function?
695 -i a* function?
692 ?-i a* function
696 ?-i a* function
693
697
694 Arguments:
698 Arguments:
695
699
696 PATTERN
700 PATTERN
697
701
698 where PATTERN is a string containing * as a wildcard similar to its
702 where PATTERN is a string containing * as a wildcard similar to its
699 use in a shell. The pattern is matched in all namespaces on the
703 use in a shell. The pattern is matched in all namespaces on the
700 search path. By default objects starting with a single _ are not
704 search path. By default objects starting with a single _ are not
701 matched, many IPython generated objects have a single
705 matched, many IPython generated objects have a single
702 underscore. The default is case insensitive matching. Matching is
706 underscore. The default is case insensitive matching. Matching is
703 also done on the attributes of objects and not only on the objects
707 also done on the attributes of objects and not only on the objects
704 in a module.
708 in a module.
705
709
706 [OBJECT TYPE]
710 [OBJECT TYPE]
707
711
708 Is the name of a python type from the types module. The name is
712 Is the name of a python type from the types module. The name is
709 given in lowercase without the ending type, ex. StringType is
713 given in lowercase without the ending type, ex. StringType is
710 written string. By adding a type here only objects matching the
714 written string. By adding a type here only objects matching the
711 given type are matched. Using all here makes the pattern match all
715 given type are matched. Using all here makes the pattern match all
712 types (this is the default).
716 types (this is the default).
713
717
714 Options:
718 Options:
715
719
716 -a: makes the pattern match even objects whose names start with a
720 -a: makes the pattern match even objects whose names start with a
717 single underscore. These names are normally ommitted from the
721 single underscore. These names are normally ommitted from the
718 search.
722 search.
719
723
720 -i/-c: make the pattern case insensitive/sensitive. If neither of
724 -i/-c: make the pattern case insensitive/sensitive. If neither of
721 these options is given, the default is read from your ipythonrc
725 these options is given, the default is read from your ipythonrc
722 file. The option name which sets this value is
726 file. The option name which sets this value is
723 'wildcards_case_sensitive'. If this option is not specified in your
727 'wildcards_case_sensitive'. If this option is not specified in your
724 ipythonrc file, IPython's internal default is to do a case sensitive
728 ipythonrc file, IPython's internal default is to do a case sensitive
725 search.
729 search.
726
730
727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
731 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
728 specifiy can be searched in any of the following namespaces:
732 specifiy can be searched in any of the following namespaces:
729 'builtin', 'user', 'user_global','internal', 'alias', where
733 'builtin', 'user', 'user_global','internal', 'alias', where
730 'builtin' and 'user' are the search defaults. Note that you should
734 'builtin' and 'user' are the search defaults. Note that you should
731 not use quotes when specifying namespaces.
735 not use quotes when specifying namespaces.
732
736
733 'Builtin' contains the python module builtin, 'user' contains all
737 'Builtin' contains the python module builtin, 'user' contains all
734 user data, 'alias' only contain the shell aliases and no python
738 user data, 'alias' only contain the shell aliases and no python
735 objects, 'internal' contains objects used by IPython. The
739 objects, 'internal' contains objects used by IPython. The
736 'user_global' namespace is only used by embedded IPython instances,
740 'user_global' namespace is only used by embedded IPython instances,
737 and it contains module-level globals. You can add namespaces to the
741 and it contains module-level globals. You can add namespaces to the
738 search with -s or exclude them with -e (these options can be given
742 search with -s or exclude them with -e (these options can be given
739 more than once).
743 more than once).
740
744
741 Examples:
745 Examples:
742
746
743 %psearch a* -> objects beginning with an a
747 %psearch a* -> objects beginning with an a
744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
748 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
745 %psearch a* function -> all functions beginning with an a
749 %psearch a* function -> all functions beginning with an a
746 %psearch re.e* -> objects beginning with an e in module re
750 %psearch re.e* -> objects beginning with an e in module re
747 %psearch r*.e* -> objects that start with e in modules starting in r
751 %psearch r*.e* -> objects that start with e in modules starting in r
748 %psearch r*.* string -> all strings in modules beginning with r
752 %psearch r*.* string -> all strings in modules beginning with r
749
753
750 Case sensitve search:
754 Case sensitve search:
751
755
752 %psearch -c a* list all object beginning with lower case a
756 %psearch -c a* list all object beginning with lower case a
753
757
754 Show objects beginning with a single _:
758 Show objects beginning with a single _:
755
759
756 %psearch -a _* list objects beginning with a single underscore"""
760 %psearch -a _* list objects beginning with a single underscore"""
757
761
758 # default namespaces to be searched
762 # default namespaces to be searched
759 def_search = ['user','builtin']
763 def_search = ['user','builtin']
760
764
761 # Process options/args
765 # Process options/args
762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
766 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
763 opt = opts.get
767 opt = opts.get
764 shell = self.shell
768 shell = self.shell
765 psearch = shell.inspector.psearch
769 psearch = shell.inspector.psearch
766
770
767 # select case options
771 # select case options
768 if opts.has_key('i'):
772 if opts.has_key('i'):
769 ignore_case = True
773 ignore_case = True
770 elif opts.has_key('c'):
774 elif opts.has_key('c'):
771 ignore_case = False
775 ignore_case = False
772 else:
776 else:
773 ignore_case = not shell.rc.wildcards_case_sensitive
777 ignore_case = not shell.rc.wildcards_case_sensitive
774
778
775 # Build list of namespaces to search from user options
779 # Build list of namespaces to search from user options
776 def_search.extend(opt('s',[]))
780 def_search.extend(opt('s',[]))
777 ns_exclude = ns_exclude=opt('e',[])
781 ns_exclude = ns_exclude=opt('e',[])
778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
782 ns_search = [nm for nm in def_search if nm not in ns_exclude]
779
783
780 # Call the actual search
784 # Call the actual search
781 try:
785 try:
782 psearch(args,shell.ns_table,ns_search,
786 psearch(args,shell.ns_table,ns_search,
783 show_all=opt('a'),ignore_case=ignore_case)
787 show_all=opt('a'),ignore_case=ignore_case)
784 except:
788 except:
785 shell.showtraceback()
789 shell.showtraceback()
786
790
787 def magic_who_ls(self, parameter_s=''):
791 def magic_who_ls(self, parameter_s=''):
788 """Return a sorted list of all interactive variables.
792 """Return a sorted list of all interactive variables.
789
793
790 If arguments are given, only variables of types matching these
794 If arguments are given, only variables of types matching these
791 arguments are returned."""
795 arguments are returned."""
792
796
793 user_ns = self.shell.user_ns
797 user_ns = self.shell.user_ns
794 internal_ns = self.shell.internal_ns
798 internal_ns = self.shell.internal_ns
795 user_config_ns = self.shell.user_config_ns
799 user_config_ns = self.shell.user_config_ns
796 out = []
800 out = []
797 typelist = parameter_s.split()
801 typelist = parameter_s.split()
798
802
799 for i in user_ns:
803 for i in user_ns:
800 if not (i.startswith('_') or i.startswith('_i')) \
804 if not (i.startswith('_') or i.startswith('_i')) \
801 and not (i in internal_ns or i in user_config_ns):
805 and not (i in internal_ns or i in user_config_ns):
802 if typelist:
806 if typelist:
803 if type(user_ns[i]).__name__ in typelist:
807 if type(user_ns[i]).__name__ in typelist:
804 out.append(i)
808 out.append(i)
805 else:
809 else:
806 out.append(i)
810 out.append(i)
807 out.sort()
811 out.sort()
808 return out
812 return out
809
813
810 def magic_who(self, parameter_s=''):
814 def magic_who(self, parameter_s=''):
811 """Print all interactive variables, with some minimal formatting.
815 """Print all interactive variables, with some minimal formatting.
812
816
813 If any arguments are given, only variables whose type matches one of
817 If any arguments are given, only variables whose type matches one of
814 these are printed. For example:
818 these are printed. For example:
815
819
816 %who function str
820 %who function str
817
821
818 will only list functions and strings, excluding all other types of
822 will only list functions and strings, excluding all other types of
819 variables. To find the proper type names, simply use type(var) at a
823 variables. To find the proper type names, simply use type(var) at a
820 command line to see how python prints type names. For example:
824 command line to see how python prints type names. For example:
821
825
822 In [1]: type('hello')\\
826 In [1]: type('hello')\\
823 Out[1]: <type 'str'>
827 Out[1]: <type 'str'>
824
828
825 indicates that the type name for strings is 'str'.
829 indicates that the type name for strings is 'str'.
826
830
827 %who always excludes executed names loaded through your configuration
831 %who always excludes executed names loaded through your configuration
828 file and things which are internal to IPython.
832 file and things which are internal to IPython.
829
833
830 This is deliberate, as typically you may load many modules and the
834 This is deliberate, as typically you may load many modules and the
831 purpose of %who is to show you only what you've manually defined."""
835 purpose of %who is to show you only what you've manually defined."""
832
836
833 varlist = self.magic_who_ls(parameter_s)
837 varlist = self.magic_who_ls(parameter_s)
834 if not varlist:
838 if not varlist:
835 print 'Interactive namespace is empty.'
839 print 'Interactive namespace is empty.'
836 return
840 return
837
841
838 # if we have variables, move on...
842 # if we have variables, move on...
839
843
840 # stupid flushing problem: when prompts have no separators, stdout is
844 # stupid flushing problem: when prompts have no separators, stdout is
841 # getting lost. I'm starting to think this is a python bug. I'm having
845 # getting lost. I'm starting to think this is a python bug. I'm having
842 # to force a flush with a print because even a sys.stdout.flush
846 # to force a flush with a print because even a sys.stdout.flush
843 # doesn't seem to do anything!
847 # doesn't seem to do anything!
844
848
845 count = 0
849 count = 0
846 for i in varlist:
850 for i in varlist:
847 print i+'\t',
851 print i+'\t',
848 count += 1
852 count += 1
849 if count > 8:
853 if count > 8:
850 count = 0
854 count = 0
851 print
855 print
852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
856 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
853
857
854 print # well, this does force a flush at the expense of an extra \n
858 print # well, this does force a flush at the expense of an extra \n
855
859
856 def magic_whos(self, parameter_s=''):
860 def magic_whos(self, parameter_s=''):
857 """Like %who, but gives some extra information about each variable.
861 """Like %who, but gives some extra information about each variable.
858
862
859 The same type filtering of %who can be applied here.
863 The same type filtering of %who can be applied here.
860
864
861 For all variables, the type is printed. Additionally it prints:
865 For all variables, the type is printed. Additionally it prints:
862
866
863 - For {},[],(): their length.
867 - For {},[],(): their length.
864
868
865 - For Numeric arrays, a summary with shape, number of elements,
869 - For Numeric arrays, a summary with shape, number of elements,
866 typecode and size in memory.
870 typecode and size in memory.
867
871
868 - Everything else: a string representation, snipping their middle if
872 - Everything else: a string representation, snipping their middle if
869 too long."""
873 too long."""
870
874
871 varnames = self.magic_who_ls(parameter_s)
875 varnames = self.magic_who_ls(parameter_s)
872 if not varnames:
876 if not varnames:
873 print 'Interactive namespace is empty.'
877 print 'Interactive namespace is empty.'
874 return
878 return
875
879
876 # if we have variables, move on...
880 # if we have variables, move on...
877
881
878 # for these types, show len() instead of data:
882 # for these types, show len() instead of data:
879 seq_types = [types.DictType,types.ListType,types.TupleType]
883 seq_types = [types.DictType,types.ListType,types.TupleType]
880
884
881 # for Numeric arrays, display summary info
885 # for Numeric arrays, display summary info
882 try:
886 try:
883 import Numeric
887 import Numeric
884 except ImportError:
888 except ImportError:
885 array_type = None
889 array_type = None
886 else:
890 else:
887 array_type = Numeric.ArrayType.__name__
891 array_type = Numeric.ArrayType.__name__
888
892
889 # Find all variable names and types so we can figure out column sizes
893 # Find all variable names and types so we can figure out column sizes
890 get_vars = lambda i: self.shell.user_ns[i]
894 get_vars = lambda i: self.shell.user_ns[i]
891 type_name = lambda v: type(v).__name__
895 type_name = lambda v: type(v).__name__
892 varlist = map(get_vars,varnames)
896 varlist = map(get_vars,varnames)
893
897
894 typelist = []
898 typelist = []
895 for vv in varlist:
899 for vv in varlist:
896 tt = type_name(vv)
900 tt = type_name(vv)
897 if tt=='instance':
901 if tt=='instance':
898 typelist.append(str(vv.__class__))
902 typelist.append(str(vv.__class__))
899 else:
903 else:
900 typelist.append(tt)
904 typelist.append(tt)
901
905
902 # column labels and # of spaces as separator
906 # column labels and # of spaces as separator
903 varlabel = 'Variable'
907 varlabel = 'Variable'
904 typelabel = 'Type'
908 typelabel = 'Type'
905 datalabel = 'Data/Info'
909 datalabel = 'Data/Info'
906 colsep = 3
910 colsep = 3
907 # variable format strings
911 # variable format strings
908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
912 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
913 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
910 aformat = "%s: %s elems, type `%s`, %s bytes"
914 aformat = "%s: %s elems, type `%s`, %s bytes"
911 # find the size of the columns to format the output nicely
915 # find the size of the columns to format the output nicely
912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
916 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
917 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
914 # table header
918 # table header
915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
919 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
920 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
917 # and the table itself
921 # and the table itself
918 kb = 1024
922 kb = 1024
919 Mb = 1048576 # kb**2
923 Mb = 1048576 # kb**2
920 for vname,var,vtype in zip(varnames,varlist,typelist):
924 for vname,var,vtype in zip(varnames,varlist,typelist):
921 print itpl(vformat),
925 print itpl(vformat),
922 if vtype in seq_types:
926 if vtype in seq_types:
923 print len(var)
927 print len(var)
924 elif vtype==array_type:
928 elif vtype==array_type:
925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
929 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
926 vsize = Numeric.size(var)
930 vsize = Numeric.size(var)
927 vbytes = vsize*var.itemsize()
931 vbytes = vsize*var.itemsize()
928 if vbytes < 100000:
932 if vbytes < 100000:
929 print aformat % (vshape,vsize,var.typecode(),vbytes)
933 print aformat % (vshape,vsize,var.typecode(),vbytes)
930 else:
934 else:
931 print aformat % (vshape,vsize,var.typecode(),vbytes),
935 print aformat % (vshape,vsize,var.typecode(),vbytes),
932 if vbytes < Mb:
936 if vbytes < Mb:
933 print '(%s kb)' % (vbytes/kb,)
937 print '(%s kb)' % (vbytes/kb,)
934 else:
938 else:
935 print '(%s Mb)' % (vbytes/Mb,)
939 print '(%s Mb)' % (vbytes/Mb,)
936 else:
940 else:
937 vstr = str(var).replace('\n','\\n')
941 vstr = str(var).replace('\n','\\n')
938 if len(vstr) < 50:
942 if len(vstr) < 50:
939 print vstr
943 print vstr
940 else:
944 else:
941 printpl(vfmt_short)
945 printpl(vfmt_short)
942
946
943 def magic_reset(self, parameter_s=''):
947 def magic_reset(self, parameter_s=''):
944 """Resets the namespace by removing all names defined by the user.
948 """Resets the namespace by removing all names defined by the user.
945
949
946 Input/Output history are left around in case you need them."""
950 Input/Output history are left around in case you need them."""
947
951
948 ans = raw_input(
952 ans = raw_input(
949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
953 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
950 if not ans.lower() == 'y':
954 if not ans.lower() == 'y':
951 print 'Nothing done.'
955 print 'Nothing done.'
952 return
956 return
953 user_ns = self.shell.user_ns
957 user_ns = self.shell.user_ns
954 for i in self.magic_who_ls():
958 for i in self.magic_who_ls():
955 del(user_ns[i])
959 del(user_ns[i])
956
960
957 def magic_config(self,parameter_s=''):
961 def magic_config(self,parameter_s=''):
958 """Show IPython's internal configuration."""
962 """Show IPython's internal configuration."""
959
963
960 page('Current configuration structure:\n'+
964 page('Current configuration structure:\n'+
961 pformat(self.shell.rc.dict()))
965 pformat(self.shell.rc.dict()))
962
966
963 def magic_logstart(self,parameter_s=''):
967 def magic_logstart(self,parameter_s=''):
964 """Start logging anywhere in a session.
968 """Start logging anywhere in a session.
965
969
966 %logstart [-o|-t] [log_name [log_mode]]
970 %logstart [-o|-t] [log_name [log_mode]]
967
971
968 If no name is given, it defaults to a file named 'ipython_log.py' in your
972 If no name is given, it defaults to a file named 'ipython_log.py' in your
969 current directory, in 'rotate' mode (see below).
973 current directory, in 'rotate' mode (see below).
970
974
971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
975 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
972 history up to that point and then continues logging.
976 history up to that point and then continues logging.
973
977
974 %logstart takes a second optional parameter: logging mode. This can be one
978 %logstart takes a second optional parameter: logging mode. This can be one
975 of (note that the modes are given unquoted):\\
979 of (note that the modes are given unquoted):\\
976 append: well, that says it.\\
980 append: well, that says it.\\
977 backup: rename (if exists) to name~ and start name.\\
981 backup: rename (if exists) to name~ and start name.\\
978 global: single logfile in your home dir, appended to.\\
982 global: single logfile in your home dir, appended to.\\
979 over : overwrite existing log.\\
983 over : overwrite existing log.\\
980 rotate: create rotating logs name.1~, name.2~, etc.
984 rotate: create rotating logs name.1~, name.2~, etc.
981
985
982 Options:
986 Options:
983
987
984 -o: log also IPython's output. In this mode, all commands which
988 -o: log also IPython's output. In this mode, all commands which
985 generate an Out[NN] prompt are recorded to the logfile, right after
989 generate an Out[NN] prompt are recorded to the logfile, right after
986 their corresponding input line. The output lines are always
990 their corresponding input line. The output lines are always
987 prepended with a '#[Out]# ' marker, so that the log remains valid
991 prepended with a '#[Out]# ' marker, so that the log remains valid
988 Python code.
992 Python code.
989
993
990 Since this marker is always the same, filtering only the output from
994 Since this marker is always the same, filtering only the output from
991 a log is very easy, using for example a simple awk call:
995 a log is very easy, using for example a simple awk call:
992
996
993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
997 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
994
998
995 -t: put timestamps before each input line logged (these are put in
999 -t: put timestamps before each input line logged (these are put in
996 comments)."""
1000 comments)."""
997
1001
998 opts,par = self.parse_options(parameter_s,'ot')
1002 opts,par = self.parse_options(parameter_s,'ot')
999 log_output = 'o' in opts
1003 log_output = 'o' in opts
1000 timestamp = 't' in opts
1004 timestamp = 't' in opts
1001
1005
1002 rc = self.shell.rc
1006 rc = self.shell.rc
1003 logger = self.shell.logger
1007 logger = self.shell.logger
1004
1008
1005 # if no args are given, the defaults set in the logger constructor by
1009 # if no args are given, the defaults set in the logger constructor by
1006 # ipytohn remain valid
1010 # ipytohn remain valid
1007 if par:
1011 if par:
1008 try:
1012 try:
1009 logfname,logmode = par.split()
1013 logfname,logmode = par.split()
1010 except:
1014 except:
1011 logfname = par
1015 logfname = par
1012 logmode = 'backup'
1016 logmode = 'backup'
1013 else:
1017 else:
1014 logfname = logger.logfname
1018 logfname = logger.logfname
1015 logmode = logger.logmode
1019 logmode = logger.logmode
1016 # put logfname into rc struct as if it had been called on the command
1020 # put logfname into rc struct as if it had been called on the command
1017 # line, so it ends up saved in the log header Save it in case we need
1021 # line, so it ends up saved in the log header Save it in case we need
1018 # to restore it...
1022 # to restore it...
1019 old_logfile = rc.opts.get('logfile','')
1023 old_logfile = rc.opts.get('logfile','')
1020 if logfname:
1024 if logfname:
1021 logfname = os.path.expanduser(logfname)
1025 logfname = os.path.expanduser(logfname)
1022 rc.opts.logfile = logfname
1026 rc.opts.logfile = logfname
1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1027 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1024 try:
1028 try:
1025 started = logger.logstart(logfname,loghead,logmode,
1029 started = logger.logstart(logfname,loghead,logmode,
1026 log_output,timestamp)
1030 log_output,timestamp)
1027 except:
1031 except:
1028 rc.opts.logfile = old_logfile
1032 rc.opts.logfile = old_logfile
1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1033 warn("Couldn't start log: %s" % sys.exc_info()[1])
1030 else:
1034 else:
1031 # log input history up to this point, optionally interleaving
1035 # log input history up to this point, optionally interleaving
1032 # output if requested
1036 # output if requested
1033
1037
1034 if timestamp:
1038 if timestamp:
1035 # disable timestamping for the previous history, since we've
1039 # disable timestamping for the previous history, since we've
1036 # lost those already (no time machine here).
1040 # lost those already (no time machine here).
1037 logger.timestamp = False
1041 logger.timestamp = False
1038 if log_output:
1042 if log_output:
1039 log_write = logger.log_write
1043 log_write = logger.log_write
1040 input_hist = self.shell.input_hist
1044 input_hist = self.shell.input_hist
1041 output_hist = self.shell.output_hist
1045 output_hist = self.shell.output_hist
1042 for n in range(1,len(input_hist)-1):
1046 for n in range(1,len(input_hist)-1):
1043 log_write(input_hist[n].rstrip())
1047 log_write(input_hist[n].rstrip())
1044 if n in output_hist:
1048 if n in output_hist:
1045 log_write(repr(output_hist[n]),'output')
1049 log_write(repr(output_hist[n]),'output')
1046 else:
1050 else:
1047 logger.log_write(self.shell.input_hist[1:])
1051 logger.log_write(self.shell.input_hist[1:])
1048 if timestamp:
1052 if timestamp:
1049 # re-enable timestamping
1053 # re-enable timestamping
1050 logger.timestamp = True
1054 logger.timestamp = True
1051
1055
1052 print ('Activating auto-logging. '
1056 print ('Activating auto-logging. '
1053 'Current session state plus future input saved.')
1057 'Current session state plus future input saved.')
1054 logger.logstate()
1058 logger.logstate()
1055
1059
1056 def magic_logoff(self,parameter_s=''):
1060 def magic_logoff(self,parameter_s=''):
1057 """Temporarily stop logging.
1061 """Temporarily stop logging.
1058
1062
1059 You must have previously started logging."""
1063 You must have previously started logging."""
1060 self.shell.logger.switch_log(0)
1064 self.shell.logger.switch_log(0)
1061
1065
1062 def magic_logon(self,parameter_s=''):
1066 def magic_logon(self,parameter_s=''):
1063 """Restart logging.
1067 """Restart logging.
1064
1068
1065 This function is for restarting logging which you've temporarily
1069 This function is for restarting logging which you've temporarily
1066 stopped with %logoff. For starting logging for the first time, you
1070 stopped with %logoff. For starting logging for the first time, you
1067 must use the %logstart function, which allows you to specify an
1071 must use the %logstart function, which allows you to specify an
1068 optional log filename."""
1072 optional log filename."""
1069
1073
1070 self.shell.logger.switch_log(1)
1074 self.shell.logger.switch_log(1)
1071
1075
1072 def magic_logstate(self,parameter_s=''):
1076 def magic_logstate(self,parameter_s=''):
1073 """Print the status of the logging system."""
1077 """Print the status of the logging system."""
1074
1078
1075 self.shell.logger.logstate()
1079 self.shell.logger.logstate()
1076
1080
1077 def magic_pdb(self, parameter_s=''):
1081 def magic_pdb(self, parameter_s=''):
1078 """Control the calling of the pdb interactive debugger.
1082 """Control the calling of the pdb interactive debugger.
1079
1083
1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1084 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1081 argument it works as a toggle.
1085 argument it works as a toggle.
1082
1086
1083 When an exception is triggered, IPython can optionally call the
1087 When an exception is triggered, IPython can optionally call the
1084 interactive pdb debugger after the traceback printout. %pdb toggles
1088 interactive pdb debugger after the traceback printout. %pdb toggles
1085 this feature on and off."""
1089 this feature on and off."""
1086
1090
1087 par = parameter_s.strip().lower()
1091 par = parameter_s.strip().lower()
1088
1092
1089 if par:
1093 if par:
1090 try:
1094 try:
1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1095 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1092 except KeyError:
1096 except KeyError:
1093 print ('Incorrect argument. Use on/1, off/0, '
1097 print ('Incorrect argument. Use on/1, off/0, '
1094 'or nothing for a toggle.')
1098 'or nothing for a toggle.')
1095 return
1099 return
1096 else:
1100 else:
1097 # toggle
1101 # toggle
1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1102 new_pdb = not self.shell.InteractiveTB.call_pdb
1099
1103
1100 # set on the shell
1104 # set on the shell
1101 self.shell.call_pdb = new_pdb
1105 self.shell.call_pdb = new_pdb
1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1106 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1103
1107
1104 def magic_prun(self, parameter_s ='',user_mode=1,
1108 def magic_prun(self, parameter_s ='',user_mode=1,
1105 opts=None,arg_lst=None,prog_ns=None):
1109 opts=None,arg_lst=None,prog_ns=None):
1106
1110
1107 """Run a statement through the python code profiler.
1111 """Run a statement through the python code profiler.
1108
1112
1109 Usage:\\
1113 Usage:\\
1110 %prun [options] statement
1114 %prun [options] statement
1111
1115
1112 The given statement (which doesn't require quote marks) is run via the
1116 The given statement (which doesn't require quote marks) is run via the
1113 python profiler in a manner similar to the profile.run() function.
1117 python profiler in a manner similar to the profile.run() function.
1114 Namespaces are internally managed to work correctly; profile.run
1118 Namespaces are internally managed to work correctly; profile.run
1115 cannot be used in IPython because it makes certain assumptions about
1119 cannot be used in IPython because it makes certain assumptions about
1116 namespaces which do not hold under IPython.
1120 namespaces which do not hold under IPython.
1117
1121
1118 Options:
1122 Options:
1119
1123
1120 -l <limit>: you can place restrictions on what or how much of the
1124 -l <limit>: you can place restrictions on what or how much of the
1121 profile gets printed. The limit value can be:
1125 profile gets printed. The limit value can be:
1122
1126
1123 * A string: only information for function names containing this string
1127 * A string: only information for function names containing this string
1124 is printed.
1128 is printed.
1125
1129
1126 * An integer: only these many lines are printed.
1130 * An integer: only these many lines are printed.
1127
1131
1128 * A float (between 0 and 1): this fraction of the report is printed
1132 * A float (between 0 and 1): this fraction of the report is printed
1129 (for example, use a limit of 0.4 to see the topmost 40% only).
1133 (for example, use a limit of 0.4 to see the topmost 40% only).
1130
1134
1131 You can combine several limits with repeated use of the option. For
1135 You can combine several limits with repeated use of the option. For
1132 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1136 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1133 information about class constructors.
1137 information about class constructors.
1134
1138
1135 -r: return the pstats.Stats object generated by the profiling. This
1139 -r: return the pstats.Stats object generated by the profiling. This
1136 object has all the information about the profile in it, and you can
1140 object has all the information about the profile in it, and you can
1137 later use it for further analysis or in other functions.
1141 later use it for further analysis or in other functions.
1138
1142
1139 Since magic functions have a particular form of calling which prevents
1143 Since magic functions have a particular form of calling which prevents
1140 you from writing something like:\\
1144 you from writing something like:\\
1141 In [1]: p = %prun -r print 4 # invalid!\\
1145 In [1]: p = %prun -r print 4 # invalid!\\
1142 you must instead use IPython's automatic variables to assign this:\\
1146 you must instead use IPython's automatic variables to assign this:\\
1143 In [1]: %prun -r print 4 \\
1147 In [1]: %prun -r print 4 \\
1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1148 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1145 In [2]: stats = _
1149 In [2]: stats = _
1146
1150
1147 If you really need to assign this value via an explicit function call,
1151 If you really need to assign this value via an explicit function call,
1148 you can always tap directly into the true name of the magic function
1152 you can always tap directly into the true name of the magic function
1149 by using the ipmagic function (which IPython automatically adds to the
1153 by using the ipmagic function (which IPython automatically adds to the
1150 builtins):\\
1154 builtins):\\
1151 In [3]: stats = ipmagic('prun','-r print 4')
1155 In [3]: stats = ipmagic('prun','-r print 4')
1152
1156
1153 You can type ipmagic? for more details on ipmagic.
1157 You can type ipmagic? for more details on ipmagic.
1154
1158
1155 -s <key>: sort profile by given key. You can provide more than one key
1159 -s <key>: sort profile by given key. You can provide more than one key
1156 by using the option several times: '-s key1 -s key2 -s key3...'. The
1160 by using the option several times: '-s key1 -s key2 -s key3...'. The
1157 default sorting key is 'time'.
1161 default sorting key is 'time'.
1158
1162
1159 The following is copied verbatim from the profile documentation
1163 The following is copied verbatim from the profile documentation
1160 referenced below:
1164 referenced below:
1161
1165
1162 When more than one key is provided, additional keys are used as
1166 When more than one key is provided, additional keys are used as
1163 secondary criteria when the there is equality in all keys selected
1167 secondary criteria when the there is equality in all keys selected
1164 before them.
1168 before them.
1165
1169
1166 Abbreviations can be used for any key names, as long as the
1170 Abbreviations can be used for any key names, as long as the
1167 abbreviation is unambiguous. The following are the keys currently
1171 abbreviation is unambiguous. The following are the keys currently
1168 defined:
1172 defined:
1169
1173
1170 Valid Arg Meaning\\
1174 Valid Arg Meaning\\
1171 "calls" call count\\
1175 "calls" call count\\
1172 "cumulative" cumulative time\\
1176 "cumulative" cumulative time\\
1173 "file" file name\\
1177 "file" file name\\
1174 "module" file name\\
1178 "module" file name\\
1175 "pcalls" primitive call count\\
1179 "pcalls" primitive call count\\
1176 "line" line number\\
1180 "line" line number\\
1177 "name" function name\\
1181 "name" function name\\
1178 "nfl" name/file/line\\
1182 "nfl" name/file/line\\
1179 "stdname" standard name\\
1183 "stdname" standard name\\
1180 "time" internal time
1184 "time" internal time
1181
1185
1182 Note that all sorts on statistics are in descending order (placing
1186 Note that all sorts on statistics are in descending order (placing
1183 most time consuming items first), where as name, file, and line number
1187 most time consuming items first), where as name, file, and line number
1184 searches are in ascending order (i.e., alphabetical). The subtle
1188 searches are in ascending order (i.e., alphabetical). The subtle
1185 distinction between "nfl" and "stdname" is that the standard name is a
1189 distinction between "nfl" and "stdname" is that the standard name is a
1186 sort of the name as printed, which means that the embedded line
1190 sort of the name as printed, which means that the embedded line
1187 numbers get compared in an odd way. For example, lines 3, 20, and 40
1191 numbers get compared in an odd way. For example, lines 3, 20, and 40
1188 would (if the file names were the same) appear in the string order
1192 would (if the file names were the same) appear in the string order
1189 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1193 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1190 line numbers. In fact, sort_stats("nfl") is the same as
1194 line numbers. In fact, sort_stats("nfl") is the same as
1191 sort_stats("name", "file", "line").
1195 sort_stats("name", "file", "line").
1192
1196
1193 -T <filename>: save profile results as shown on screen to a text
1197 -T <filename>: save profile results as shown on screen to a text
1194 file. The profile is still shown on screen.
1198 file. The profile is still shown on screen.
1195
1199
1196 -D <filename>: save (via dump_stats) profile statistics to given
1200 -D <filename>: save (via dump_stats) profile statistics to given
1197 filename. This data is in a format understod by the pstats module, and
1201 filename. This data is in a format understod by the pstats module, and
1198 is generated by a call to the dump_stats() method of profile
1202 is generated by a call to the dump_stats() method of profile
1199 objects. The profile is still shown on screen.
1203 objects. The profile is still shown on screen.
1200
1204
1201 If you want to run complete programs under the profiler's control, use
1205 If you want to run complete programs under the profiler's control, use
1202 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1206 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1203 contains profiler specific options as described here.
1207 contains profiler specific options as described here.
1204
1208
1205 You can read the complete documentation for the profile module with:\\
1209 You can read the complete documentation for the profile module with:\\
1206 In [1]: import profile; profile.help() """
1210 In [1]: import profile; profile.help() """
1207
1211
1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1212 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1209 # protect user quote marks
1213 # protect user quote marks
1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1214 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1211
1215
1212 if user_mode: # regular user call
1216 if user_mode: # regular user call
1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1217 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1214 list_all=1)
1218 list_all=1)
1215 namespace = self.shell.user_ns
1219 namespace = self.shell.user_ns
1216 else: # called to run a program by %run -p
1220 else: # called to run a program by %run -p
1217 try:
1221 try:
1218 filename = get_py_filename(arg_lst[0])
1222 filename = get_py_filename(arg_lst[0])
1219 except IOError,msg:
1223 except IOError,msg:
1220 error(msg)
1224 error(msg)
1221 return
1225 return
1222
1226
1223 arg_str = 'execfile(filename,prog_ns)'
1227 arg_str = 'execfile(filename,prog_ns)'
1224 namespace = locals()
1228 namespace = locals()
1225
1229
1226 opts.merge(opts_def)
1230 opts.merge(opts_def)
1227
1231
1228 prof = profile.Profile()
1232 prof = profile.Profile()
1229 try:
1233 try:
1230 prof = prof.runctx(arg_str,namespace,namespace)
1234 prof = prof.runctx(arg_str,namespace,namespace)
1231 sys_exit = ''
1235 sys_exit = ''
1232 except SystemExit:
1236 except SystemExit:
1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1237 sys_exit = """*** SystemExit exception caught in code being profiled."""
1234
1238
1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1239 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1236
1240
1237 lims = opts.l
1241 lims = opts.l
1238 if lims:
1242 if lims:
1239 lims = [] # rebuild lims with ints/floats/strings
1243 lims = [] # rebuild lims with ints/floats/strings
1240 for lim in opts.l:
1244 for lim in opts.l:
1241 try:
1245 try:
1242 lims.append(int(lim))
1246 lims.append(int(lim))
1243 except ValueError:
1247 except ValueError:
1244 try:
1248 try:
1245 lims.append(float(lim))
1249 lims.append(float(lim))
1246 except ValueError:
1250 except ValueError:
1247 lims.append(lim)
1251 lims.append(lim)
1248
1252
1249 # trap output
1253 # trap output
1250 sys_stdout = sys.stdout
1254 sys_stdout = sys.stdout
1251 stdout_trap = StringIO()
1255 stdout_trap = StringIO()
1252 try:
1256 try:
1253 sys.stdout = stdout_trap
1257 sys.stdout = stdout_trap
1254 stats.print_stats(*lims)
1258 stats.print_stats(*lims)
1255 finally:
1259 finally:
1256 sys.stdout = sys_stdout
1260 sys.stdout = sys_stdout
1257 output = stdout_trap.getvalue()
1261 output = stdout_trap.getvalue()
1258 output = output.rstrip()
1262 output = output.rstrip()
1259
1263
1260 page(output,screen_lines=self.shell.rc.screen_length)
1264 page(output,screen_lines=self.shell.rc.screen_length)
1261 print sys_exit,
1265 print sys_exit,
1262
1266
1263 dump_file = opts.D[0]
1267 dump_file = opts.D[0]
1264 text_file = opts.T[0]
1268 text_file = opts.T[0]
1265 if dump_file:
1269 if dump_file:
1266 prof.dump_stats(dump_file)
1270 prof.dump_stats(dump_file)
1267 print '\n*** Profile stats marshalled to file',\
1271 print '\n*** Profile stats marshalled to file',\
1268 `dump_file`+'.',sys_exit
1272 `dump_file`+'.',sys_exit
1269 if text_file:
1273 if text_file:
1270 file(text_file,'w').write(output)
1274 file(text_file,'w').write(output)
1271 print '\n*** Profile printout saved to text file',\
1275 print '\n*** Profile printout saved to text file',\
1272 `text_file`+'.',sys_exit
1276 `text_file`+'.',sys_exit
1273
1277
1274 if opts.has_key('r'):
1278 if opts.has_key('r'):
1275 return stats
1279 return stats
1276 else:
1280 else:
1277 return None
1281 return None
1278
1282
1279 def magic_run(self, parameter_s ='',runner=None):
1283 def magic_run(self, parameter_s ='',runner=None):
1280 """Run the named file inside IPython as a program.
1284 """Run the named file inside IPython as a program.
1281
1285
1282 Usage:\\
1286 Usage:\\
1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1287 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1284
1288
1285 Parameters after the filename are passed as command-line arguments to
1289 Parameters after the filename are passed as command-line arguments to
1286 the program (put in sys.argv). Then, control returns to IPython's
1290 the program (put in sys.argv). Then, control returns to IPython's
1287 prompt.
1291 prompt.
1288
1292
1289 This is similar to running at a system prompt:\\
1293 This is similar to running at a system prompt:\\
1290 $ python file args\\
1294 $ python file args\\
1291 but with the advantage of giving you IPython's tracebacks, and of
1295 but with the advantage of giving you IPython's tracebacks, and of
1292 loading all variables into your interactive namespace for further use
1296 loading all variables into your interactive namespace for further use
1293 (unless -p is used, see below).
1297 (unless -p is used, see below).
1294
1298
1295 The file is executed in a namespace initially consisting only of
1299 The file is executed in a namespace initially consisting only of
1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1300 __name__=='__main__' and sys.argv constructed as indicated. It thus
1297 sees its environment as if it were being run as a stand-alone
1301 sees its environment as if it were being run as a stand-alone
1298 program. But after execution, the IPython interactive namespace gets
1302 program. But after execution, the IPython interactive namespace gets
1299 updated with all variables defined in the program (except for __name__
1303 updated with all variables defined in the program (except for __name__
1300 and sys.argv). This allows for very convenient loading of code for
1304 and sys.argv). This allows for very convenient loading of code for
1301 interactive work, while giving each program a 'clean sheet' to run in.
1305 interactive work, while giving each program a 'clean sheet' to run in.
1302
1306
1303 Options:
1307 Options:
1304
1308
1305 -n: __name__ is NOT set to '__main__', but to the running file's name
1309 -n: __name__ is NOT set to '__main__', but to the running file's name
1306 without extension (as python does under import). This allows running
1310 without extension (as python does under import). This allows running
1307 scripts and reloading the definitions in them without calling code
1311 scripts and reloading the definitions in them without calling code
1308 protected by an ' if __name__ == "__main__" ' clause.
1312 protected by an ' if __name__ == "__main__" ' clause.
1309
1313
1310 -i: run the file in IPython's namespace instead of an empty one. This
1314 -i: run the file in IPython's namespace instead of an empty one. This
1311 is useful if you are experimenting with code written in a text editor
1315 is useful if you are experimenting with code written in a text editor
1312 which depends on variables defined interactively.
1316 which depends on variables defined interactively.
1313
1317
1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1318 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1315 being run. This is particularly useful if IPython is being used to
1319 being run. This is particularly useful if IPython is being used to
1316 run unittests, which always exit with a sys.exit() call. In such
1320 run unittests, which always exit with a sys.exit() call. In such
1317 cases you are interested in the output of the test results, not in
1321 cases you are interested in the output of the test results, not in
1318 seeing a traceback of the unittest module.
1322 seeing a traceback of the unittest module.
1319
1323
1320 -t: print timing information at the end of the run. IPython will give
1324 -t: print timing information at the end of the run. IPython will give
1321 you an estimated CPU time consumption for your script, which under
1325 you an estimated CPU time consumption for your script, which under
1322 Unix uses the resource module to avoid the wraparound problems of
1326 Unix uses the resource module to avoid the wraparound problems of
1323 time.clock(). Under Unix, an estimate of time spent on system tasks
1327 time.clock(). Under Unix, an estimate of time spent on system tasks
1324 is also given (for Windows platforms this is reported as 0.0).
1328 is also given (for Windows platforms this is reported as 0.0).
1325
1329
1326 If -t is given, an additional -N<N> option can be given, where <N>
1330 If -t is given, an additional -N<N> option can be given, where <N>
1327 must be an integer indicating how many times you want the script to
1331 must be an integer indicating how many times you want the script to
1328 run. The final timing report will include total and per run results.
1332 run. The final timing report will include total and per run results.
1329
1333
1330 For example (testing the script uniq_stable.py):
1334 For example (testing the script uniq_stable.py):
1331
1335
1332 In [1]: run -t uniq_stable
1336 In [1]: run -t uniq_stable
1333
1337
1334 IPython CPU timings (estimated):\\
1338 IPython CPU timings (estimated):\\
1335 User : 0.19597 s.\\
1339 User : 0.19597 s.\\
1336 System: 0.0 s.\\
1340 System: 0.0 s.\\
1337
1341
1338 In [2]: run -t -N5 uniq_stable
1342 In [2]: run -t -N5 uniq_stable
1339
1343
1340 IPython CPU timings (estimated):\\
1344 IPython CPU timings (estimated):\\
1341 Total runs performed: 5\\
1345 Total runs performed: 5\\
1342 Times : Total Per run\\
1346 Times : Total Per run\\
1343 User : 0.910862 s, 0.1821724 s.\\
1347 User : 0.910862 s, 0.1821724 s.\\
1344 System: 0.0 s, 0.0 s.
1348 System: 0.0 s, 0.0 s.
1345
1349
1346 -d: run your program under the control of pdb, the Python debugger.
1350 -d: run your program under the control of pdb, the Python debugger.
1347 This allows you to execute your program step by step, watch variables,
1351 This allows you to execute your program step by step, watch variables,
1348 etc. Internally, what IPython does is similar to calling:
1352 etc. Internally, what IPython does is similar to calling:
1349
1353
1350 pdb.run('execfile("YOURFILENAME")')
1354 pdb.run('execfile("YOURFILENAME")')
1351
1355
1352 with a breakpoint set on line 1 of your file. You can change the line
1356 with a breakpoint set on line 1 of your file. You can change the line
1353 number for this automatic breakpoint to be <N> by using the -bN option
1357 number for this automatic breakpoint to be <N> by using the -bN option
1354 (where N must be an integer). For example:
1358 (where N must be an integer). For example:
1355
1359
1356 %run -d -b40 myscript
1360 %run -d -b40 myscript
1357
1361
1358 will set the first breakpoint at line 40 in myscript.py. Note that
1362 will set the first breakpoint at line 40 in myscript.py. Note that
1359 the first breakpoint must be set on a line which actually does
1363 the first breakpoint must be set on a line which actually does
1360 something (not a comment or docstring) for it to stop execution.
1364 something (not a comment or docstring) for it to stop execution.
1361
1365
1362 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1366 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1363 first enter 'c' (without qoutes) to start execution up to the first
1367 first enter 'c' (without qoutes) to start execution up to the first
1364 breakpoint.
1368 breakpoint.
1365
1369
1366 Entering 'help' gives information about the use of the debugger. You
1370 Entering 'help' gives information about the use of the debugger. You
1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1371 can easily see pdb's full documentation with "import pdb;pdb.help()"
1368 at a prompt.
1372 at a prompt.
1369
1373
1370 -p: run program under the control of the Python profiler module (which
1374 -p: run program under the control of the Python profiler module (which
1371 prints a detailed report of execution times, function calls, etc).
1375 prints a detailed report of execution times, function calls, etc).
1372
1376
1373 You can pass other options after -p which affect the behavior of the
1377 You can pass other options after -p which affect the behavior of the
1374 profiler itself. See the docs for %prun for details.
1378 profiler itself. See the docs for %prun for details.
1375
1379
1376 In this mode, the program's variables do NOT propagate back to the
1380 In this mode, the program's variables do NOT propagate back to the
1377 IPython interactive namespace (because they remain in the namespace
1381 IPython interactive namespace (because they remain in the namespace
1378 where the profiler executes them).
1382 where the profiler executes them).
1379
1383
1380 Internally this triggers a call to %prun, see its documentation for
1384 Internally this triggers a call to %prun, see its documentation for
1381 details on the options available specifically for profiling."""
1385 details on the options available specifically for profiling."""
1382
1386
1383 # get arguments and set sys.argv for program to be run.
1387 # get arguments and set sys.argv for program to be run.
1384 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1388 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1385 mode='list',list_all=1)
1389 mode='list',list_all=1)
1386
1390
1387 try:
1391 try:
1388 filename = get_py_filename(arg_lst[0])
1392 filename = get_py_filename(arg_lst[0])
1389 except IndexError:
1393 except IndexError:
1390 warn('you must provide at least a filename.')
1394 warn('you must provide at least a filename.')
1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1395 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1392 return
1396 return
1393 except IOError,msg:
1397 except IOError,msg:
1394 error(msg)
1398 error(msg)
1395 return
1399 return
1396
1400
1397 # Control the response to exit() calls made by the script being run
1401 # Control the response to exit() calls made by the script being run
1398 exit_ignore = opts.has_key('e')
1402 exit_ignore = opts.has_key('e')
1399
1403
1400 # Make sure that the running script gets a proper sys.argv as if it
1404 # Make sure that the running script gets a proper sys.argv as if it
1401 # were run from a system shell.
1405 # were run from a system shell.
1402 save_argv = sys.argv # save it for later restoring
1406 save_argv = sys.argv # save it for later restoring
1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1407 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1404
1408
1405 if opts.has_key('i'):
1409 if opts.has_key('i'):
1406 prog_ns = self.shell.user_ns
1410 prog_ns = self.shell.user_ns
1407 __name__save = self.shell.user_ns['__name__']
1411 __name__save = self.shell.user_ns['__name__']
1408 prog_ns['__name__'] = '__main__'
1412 prog_ns['__name__'] = '__main__'
1409 else:
1413 else:
1410 if opts.has_key('n'):
1414 if opts.has_key('n'):
1411 name = os.path.splitext(os.path.basename(filename))[0]
1415 name = os.path.splitext(os.path.basename(filename))[0]
1412 else:
1416 else:
1413 name = '__main__'
1417 name = '__main__'
1414 prog_ns = {'__name__':name}
1418 prog_ns = {'__name__':name}
1415
1419
1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1420 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1417 # set the __file__ global in the script's namespace
1421 # set the __file__ global in the script's namespace
1418 prog_ns['__file__'] = filename
1422 prog_ns['__file__'] = filename
1419
1423
1420 # pickle fix. See iplib for an explanation. But we need to make sure
1424 # pickle fix. See iplib for an explanation. But we need to make sure
1421 # that, if we overwrite __main__, we replace it at the end
1425 # that, if we overwrite __main__, we replace it at the end
1422 if prog_ns['__name__'] == '__main__':
1426 if prog_ns['__name__'] == '__main__':
1423 restore_main = sys.modules['__main__']
1427 restore_main = sys.modules['__main__']
1424 else:
1428 else:
1425 restore_main = False
1429 restore_main = False
1426
1430
1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1431 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1428
1432
1429 stats = None
1433 stats = None
1430 try:
1434 try:
1431 if opts.has_key('p'):
1435 if opts.has_key('p'):
1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1436 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1433 else:
1437 else:
1434 if opts.has_key('d'):
1438 if opts.has_key('d'):
1435 deb = Debugger.Pdb(self.shell.rc.colors)
1439 deb = Debugger.Pdb(self.shell.rc.colors)
1436 # reset Breakpoint state, which is moronically kept
1440 # reset Breakpoint state, which is moronically kept
1437 # in a class
1441 # in a class
1438 bdb.Breakpoint.next = 1
1442 bdb.Breakpoint.next = 1
1439 bdb.Breakpoint.bplist = {}
1443 bdb.Breakpoint.bplist = {}
1440 bdb.Breakpoint.bpbynumber = [None]
1444 bdb.Breakpoint.bpbynumber = [None]
1441 # Set an initial breakpoint to stop execution
1445 # Set an initial breakpoint to stop execution
1442 maxtries = 10
1446 maxtries = 10
1443 bp = int(opts.get('b',[1])[0])
1447 bp = int(opts.get('b',[1])[0])
1444 checkline = deb.checkline(filename,bp)
1448 checkline = deb.checkline(filename,bp)
1445 if not checkline:
1449 if not checkline:
1446 for bp in range(bp+1,bp+maxtries+1):
1450 for bp in range(bp+1,bp+maxtries+1):
1447 if deb.checkline(filename,bp):
1451 if deb.checkline(filename,bp):
1448 break
1452 break
1449 else:
1453 else:
1450 msg = ("\nI failed to find a valid line to set "
1454 msg = ("\nI failed to find a valid line to set "
1451 "a breakpoint\n"
1455 "a breakpoint\n"
1452 "after trying up to line: %s.\n"
1456 "after trying up to line: %s.\n"
1453 "Please set a valid breakpoint manually "
1457 "Please set a valid breakpoint manually "
1454 "with the -b option." % bp)
1458 "with the -b option." % bp)
1455 error(msg)
1459 error(msg)
1456 return
1460 return
1457 # if we find a good linenumber, set the breakpoint
1461 # if we find a good linenumber, set the breakpoint
1458 deb.do_break('%s:%s' % (filename,bp))
1462 deb.do_break('%s:%s' % (filename,bp))
1459 # Start file run
1463 # Start file run
1460 print "NOTE: Enter 'c' at the",
1464 print "NOTE: Enter 'c' at the",
1461 print "ipdb> prompt to start your script."
1465 print "ipdb> prompt to start your script."
1462 try:
1466 try:
1463 deb.run('execfile("%s")' % filename,prog_ns)
1467 deb.run('execfile("%s")' % filename,prog_ns)
1464 except:
1468 except:
1465 etype, value, tb = sys.exc_info()
1469 etype, value, tb = sys.exc_info()
1466 # Skip three frames in the traceback: the %run one,
1470 # Skip three frames in the traceback: the %run one,
1467 # one inside bdb.py, and the command-line typed by the
1471 # one inside bdb.py, and the command-line typed by the
1468 # user (run by exec in pdb itself).
1472 # user (run by exec in pdb itself).
1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1473 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1470 else:
1474 else:
1471 if runner is None:
1475 if runner is None:
1472 runner = self.shell.safe_execfile
1476 runner = self.shell.safe_execfile
1473 if opts.has_key('t'):
1477 if opts.has_key('t'):
1474 try:
1478 try:
1475 nruns = int(opts['N'][0])
1479 nruns = int(opts['N'][0])
1476 if nruns < 1:
1480 if nruns < 1:
1477 error('Number of runs must be >=1')
1481 error('Number of runs must be >=1')
1478 return
1482 return
1479 except (KeyError):
1483 except (KeyError):
1480 nruns = 1
1484 nruns = 1
1481 if nruns == 1:
1485 if nruns == 1:
1482 t0 = clock2()
1486 t0 = clock2()
1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1487 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1484 t1 = clock2()
1488 t1 = clock2()
1485 t_usr = t1[0]-t0[0]
1489 t_usr = t1[0]-t0[0]
1486 t_sys = t1[1]-t1[1]
1490 t_sys = t1[1]-t1[1]
1487 print "\nIPython CPU timings (estimated):"
1491 print "\nIPython CPU timings (estimated):"
1488 print " User : %10s s." % t_usr
1492 print " User : %10s s." % t_usr
1489 print " System: %10s s." % t_sys
1493 print " System: %10s s." % t_sys
1490 else:
1494 else:
1491 runs = range(nruns)
1495 runs = range(nruns)
1492 t0 = clock2()
1496 t0 = clock2()
1493 for nr in runs:
1497 for nr in runs:
1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1495 t1 = clock2()
1499 t1 = clock2()
1496 t_usr = t1[0]-t0[0]
1500 t_usr = t1[0]-t0[0]
1497 t_sys = t1[1]-t1[1]
1501 t_sys = t1[1]-t1[1]
1498 print "\nIPython CPU timings (estimated):"
1502 print "\nIPython CPU timings (estimated):"
1499 print "Total runs performed:",nruns
1503 print "Total runs performed:",nruns
1500 print " Times : %10s %10s" % ('Total','Per run')
1504 print " Times : %10s %10s" % ('Total','Per run')
1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1505 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1506 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1503
1507
1504 else:
1508 else:
1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1506 if opts.has_key('i'):
1510 if opts.has_key('i'):
1507 self.shell.user_ns['__name__'] = __name__save
1511 self.shell.user_ns['__name__'] = __name__save
1508 else:
1512 else:
1509 # update IPython interactive namespace
1513 # update IPython interactive namespace
1510 del prog_ns['__name__']
1514 del prog_ns['__name__']
1511 self.shell.user_ns.update(prog_ns)
1515 self.shell.user_ns.update(prog_ns)
1512 finally:
1516 finally:
1513 sys.argv = save_argv
1517 sys.argv = save_argv
1514 if restore_main:
1518 if restore_main:
1515 sys.modules['__main__'] = restore_main
1519 sys.modules['__main__'] = restore_main
1516 return stats
1520 return stats
1517
1521
1518 def magic_runlog(self, parameter_s =''):
1522 def magic_runlog(self, parameter_s =''):
1519 """Run files as logs.
1523 """Run files as logs.
1520
1524
1521 Usage:\\
1525 Usage:\\
1522 %runlog file1 file2 ...
1526 %runlog file1 file2 ...
1523
1527
1524 Run the named files (treating them as log files) in sequence inside
1528 Run the named files (treating them as log files) in sequence inside
1525 the interpreter, and return to the prompt. This is much slower than
1529 the interpreter, and return to the prompt. This is much slower than
1526 %run because each line is executed in a try/except block, but it
1530 %run because each line is executed in a try/except block, but it
1527 allows running files with syntax errors in them.
1531 allows running files with syntax errors in them.
1528
1532
1529 Normally IPython will guess when a file is one of its own logfiles, so
1533 Normally IPython will guess when a file is one of its own logfiles, so
1530 you can typically use %run even for logs. This shorthand allows you to
1534 you can typically use %run even for logs. This shorthand allows you to
1531 force any file to be treated as a log file."""
1535 force any file to be treated as a log file."""
1532
1536
1533 for f in parameter_s.split():
1537 for f in parameter_s.split():
1534 self.shell.safe_execfile(f,self.shell.user_ns,
1538 self.shell.safe_execfile(f,self.shell.user_ns,
1535 self.shell.user_ns,islog=1)
1539 self.shell.user_ns,islog=1)
1536
1540
1537 def magic_time(self,parameter_s = ''):
1541 def magic_time(self,parameter_s = ''):
1538 """Time execution of a Python statement or expression.
1542 """Time execution of a Python statement or expression.
1539
1543
1540 The CPU and wall clock times are printed, and the value of the
1544 The CPU and wall clock times are printed, and the value of the
1541 expression (if any) is returned. Note that under Win32, system time
1545 expression (if any) is returned. Note that under Win32, system time
1542 is always reported as 0, since it can not be measured.
1546 is always reported as 0, since it can not be measured.
1543
1547
1544 This function provides very basic timing functionality. In Python
1548 This function provides very basic timing functionality. In Python
1545 2.3, the timeit module offers more control and sophistication, but for
1549 2.3, the timeit module offers more control and sophistication, but for
1546 now IPython supports Python 2.2, so we can not rely on timeit being
1550 now IPython supports Python 2.2, so we can not rely on timeit being
1547 present.
1551 present.
1548
1552
1549 Some examples:
1553 Some examples:
1550
1554
1551 In [1]: time 2**128
1555 In [1]: time 2**128
1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1556 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1553 Wall time: 0.00
1557 Wall time: 0.00
1554 Out[1]: 340282366920938463463374607431768211456L
1558 Out[1]: 340282366920938463463374607431768211456L
1555
1559
1556 In [2]: n = 1000000
1560 In [2]: n = 1000000
1557
1561
1558 In [3]: time sum(range(n))
1562 In [3]: time sum(range(n))
1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1563 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1560 Wall time: 1.37
1564 Wall time: 1.37
1561 Out[3]: 499999500000L
1565 Out[3]: 499999500000L
1562
1566
1563 In [4]: time print 'hello world'
1567 In [4]: time print 'hello world'
1564 hello world
1568 hello world
1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1569 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1566 Wall time: 0.00
1570 Wall time: 0.00
1567 """
1571 """
1568
1572
1569 # fail immediately if the given expression can't be compiled
1573 # fail immediately if the given expression can't be compiled
1570 try:
1574 try:
1571 mode = 'eval'
1575 mode = 'eval'
1572 code = compile(parameter_s,'<timed eval>',mode)
1576 code = compile(parameter_s,'<timed eval>',mode)
1573 except SyntaxError:
1577 except SyntaxError:
1574 mode = 'exec'
1578 mode = 'exec'
1575 code = compile(parameter_s,'<timed exec>',mode)
1579 code = compile(parameter_s,'<timed exec>',mode)
1576 # skew measurement as little as possible
1580 # skew measurement as little as possible
1577 glob = self.shell.user_ns
1581 glob = self.shell.user_ns
1578 clk = clock2
1582 clk = clock2
1579 wtime = time.time
1583 wtime = time.time
1580 # time execution
1584 # time execution
1581 wall_st = wtime()
1585 wall_st = wtime()
1582 if mode=='eval':
1586 if mode=='eval':
1583 st = clk()
1587 st = clk()
1584 out = eval(code,glob)
1588 out = eval(code,glob)
1585 end = clk()
1589 end = clk()
1586 else:
1590 else:
1587 st = clk()
1591 st = clk()
1588 exec code in glob
1592 exec code in glob
1589 end = clk()
1593 end = clk()
1590 out = None
1594 out = None
1591 wall_end = wtime()
1595 wall_end = wtime()
1592 # Compute actual times and report
1596 # Compute actual times and report
1593 wall_time = wall_end-wall_st
1597 wall_time = wall_end-wall_st
1594 cpu_user = end[0]-st[0]
1598 cpu_user = end[0]-st[0]
1595 cpu_sys = end[1]-st[1]
1599 cpu_sys = end[1]-st[1]
1596 cpu_tot = cpu_user+cpu_sys
1600 cpu_tot = cpu_user+cpu_sys
1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1601 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1598 (cpu_user,cpu_sys,cpu_tot)
1602 (cpu_user,cpu_sys,cpu_tot)
1599 print "Wall time: %.2f" % wall_time
1603 print "Wall time: %.2f" % wall_time
1600 return out
1604 return out
1601
1605
1602 def magic_macro(self,parameter_s = ''):
1606 def magic_macro(self,parameter_s = ''):
1603 """Define a set of input lines as a macro for future re-execution.
1607 """Define a set of input lines as a macro for future re-execution.
1604
1608
1605 Usage:\\
1609 Usage:\\
1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1610 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1607
1611
1608 This will define a global variable called `name` which is a string
1612 This will define a global variable called `name` which is a string
1609 made of joining the slices and lines you specify (n1,n2,... numbers
1613 made of joining the slices and lines you specify (n1,n2,... numbers
1610 above) from your input history into a single string. This variable
1614 above) from your input history into a single string. This variable
1611 acts like an automatic function which re-executes those lines as if
1615 acts like an automatic function which re-executes those lines as if
1612 you had typed them. You just type 'name' at the prompt and the code
1616 you had typed them. You just type 'name' at the prompt and the code
1613 executes.
1617 executes.
1614
1618
1615 The notation for indicating number ranges is: n1-n2 means 'use line
1619 The notation for indicating number ranges is: n1-n2 means 'use line
1616 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1620 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1617 using the lines numbered 5,6 and 7.
1621 using the lines numbered 5,6 and 7.
1618
1622
1619 Note: as a 'hidden' feature, you can also use traditional python slice
1623 Note: as a 'hidden' feature, you can also use traditional python slice
1620 notation, where N:M means numbers N through M-1.
1624 notation, where N:M means numbers N through M-1.
1621
1625
1622 For example, if your history contains (%hist prints it):
1626 For example, if your history contains (%hist prints it):
1623
1627
1624 44: x=1\\
1628 44: x=1\\
1625 45: y=3\\
1629 45: y=3\\
1626 46: z=x+y\\
1630 46: z=x+y\\
1627 47: print x\\
1631 47: print x\\
1628 48: a=5\\
1632 48: a=5\\
1629 49: print 'x',x,'y',y\\
1633 49: print 'x',x,'y',y\\
1630
1634
1631 you can create a macro with lines 44 through 47 (included) and line 49
1635 you can create a macro with lines 44 through 47 (included) and line 49
1632 called my_macro with:
1636 called my_macro with:
1633
1637
1634 In [51]: %macro my_macro 44-47 49
1638 In [51]: %macro my_macro 44-47 49
1635
1639
1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1640 Now, typing `my_macro` (without quotes) will re-execute all this code
1637 in one pass.
1641 in one pass.
1638
1642
1639 You don't need to give the line-numbers in order, and any given line
1643 You don't need to give the line-numbers in order, and any given line
1640 number can appear multiple times. You can assemble macros with any
1644 number can appear multiple times. You can assemble macros with any
1641 lines from your input history in any order.
1645 lines from your input history in any order.
1642
1646
1643 The macro is a simple object which holds its value in an attribute,
1647 The macro is a simple object which holds its value in an attribute,
1644 but IPython's display system checks for macros and executes them as
1648 but IPython's display system checks for macros and executes them as
1645 code instead of printing them when you type their name.
1649 code instead of printing them when you type their name.
1646
1650
1647 You can view a macro's contents by explicitly printing it with:
1651 You can view a macro's contents by explicitly printing it with:
1648
1652
1649 'print macro_name'.
1653 'print macro_name'.
1650
1654
1651 For one-off cases which DON'T contain magic function calls in them you
1655 For one-off cases which DON'T contain magic function calls in them you
1652 can obtain similar results by explicitly executing slices from your
1656 can obtain similar results by explicitly executing slices from your
1653 input history with:
1657 input history with:
1654
1658
1655 In [60]: exec In[44:48]+In[49]"""
1659 In [60]: exec In[44:48]+In[49]"""
1656
1660
1657 args = parameter_s.split()
1661 args = parameter_s.split()
1658 name,ranges = args[0], args[1:]
1662 name,ranges = args[0], args[1:]
1659 #print 'rng',ranges # dbg
1663 #print 'rng',ranges # dbg
1660 lines = self.extract_input_slices(ranges)
1664 lines = self.extract_input_slices(ranges)
1661 macro = Macro(lines)
1665 macro = Macro(lines)
1662 self.shell.user_ns.update({name:macro})
1666 self.shell.user_ns.update({name:macro})
1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1667 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1664 print 'Macro contents:'
1668 print 'Macro contents:'
1665 print macro,
1669 print macro,
1666
1670
1667 def magic_save(self,parameter_s = ''):
1671 def magic_save(self,parameter_s = ''):
1668 """Save a set of lines to a given filename.
1672 """Save a set of lines to a given filename.
1669
1673
1670 Usage:\\
1674 Usage:\\
1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1675 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1672
1676
1673 This function uses the same syntax as %macro for line extraction, but
1677 This function uses the same syntax as %macro for line extraction, but
1674 instead of creating a macro it saves the resulting string to the
1678 instead of creating a macro it saves the resulting string to the
1675 filename you specify.
1679 filename you specify.
1676
1680
1677 It adds a '.py' extension to the file if you don't do so yourself, and
1681 It adds a '.py' extension to the file if you don't do so yourself, and
1678 it asks for confirmation before overwriting existing files."""
1682 it asks for confirmation before overwriting existing files."""
1679
1683
1680 args = parameter_s.split()
1684 args = parameter_s.split()
1681 fname,ranges = args[0], args[1:]
1685 fname,ranges = args[0], args[1:]
1682 if not fname.endswith('.py'):
1686 if not fname.endswith('.py'):
1683 fname += '.py'
1687 fname += '.py'
1684 if os.path.isfile(fname):
1688 if os.path.isfile(fname):
1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1689 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1686 if ans.lower() not in ['y','yes']:
1690 if ans.lower() not in ['y','yes']:
1687 print 'Operation cancelled.'
1691 print 'Operation cancelled.'
1688 return
1692 return
1689 cmds = ''.join(self.extract_input_slices(ranges))
1693 cmds = ''.join(self.extract_input_slices(ranges))
1690 f = file(fname,'w')
1694 f = file(fname,'w')
1691 f.write(cmds)
1695 f.write(cmds)
1692 f.close()
1696 f.close()
1693 print 'The following commands were written to file `%s`:' % fname
1697 print 'The following commands were written to file `%s`:' % fname
1694 print cmds
1698 print cmds
1695
1699
1696 def _edit_macro(self,mname,macro):
1700 def _edit_macro(self,mname,macro):
1697 """open an editor with the macro data in a file"""
1701 """open an editor with the macro data in a file"""
1698 filename = self.shell.mktempfile(macro.value)
1702 filename = self.shell.mktempfile(macro.value)
1699 self.shell.hooks.editor(filename)
1703 self.shell.hooks.editor(filename)
1700
1704
1701 # and make a new macro object, to replace the old one
1705 # and make a new macro object, to replace the old one
1702 mfile = open(filename)
1706 mfile = open(filename)
1703 mvalue = mfile.read()
1707 mvalue = mfile.read()
1704 mfile.close()
1708 mfile.close()
1705 self.shell.user_ns[mname] = Macro(mvalue)
1709 self.shell.user_ns[mname] = Macro(mvalue)
1706
1710
1707 def magic_ed(self,parameter_s=''):
1711 def magic_ed(self,parameter_s=''):
1708 """Alias to %edit."""
1712 """Alias to %edit."""
1709 return self.magic_edit(parameter_s)
1713 return self.magic_edit(parameter_s)
1710
1714
1711 def magic_edit(self,parameter_s='',last_call=['','']):
1715 def magic_edit(self,parameter_s='',last_call=['','']):
1712 """Bring up an editor and execute the resulting code.
1716 """Bring up an editor and execute the resulting code.
1713
1717
1714 Usage:
1718 Usage:
1715 %edit [options] [args]
1719 %edit [options] [args]
1716
1720
1717 %edit runs IPython's editor hook. The default version of this hook is
1721 %edit runs IPython's editor hook. The default version of this hook is
1718 set to call the __IPYTHON__.rc.editor command. This is read from your
1722 set to call the __IPYTHON__.rc.editor command. This is read from your
1719 environment variable $EDITOR. If this isn't found, it will default to
1723 environment variable $EDITOR. If this isn't found, it will default to
1720 vi under Linux/Unix and to notepad under Windows. See the end of this
1724 vi under Linux/Unix and to notepad under Windows. See the end of this
1721 docstring for how to change the editor hook.
1725 docstring for how to change the editor hook.
1722
1726
1723 You can also set the value of this editor via the command line option
1727 You can also set the value of this editor via the command line option
1724 '-editor' or in your ipythonrc file. This is useful if you wish to use
1728 '-editor' or in your ipythonrc file. This is useful if you wish to use
1725 specifically for IPython an editor different from your typical default
1729 specifically for IPython an editor different from your typical default
1726 (and for Windows users who typically don't set environment variables).
1730 (and for Windows users who typically don't set environment variables).
1727
1731
1728 This command allows you to conveniently edit multi-line code right in
1732 This command allows you to conveniently edit multi-line code right in
1729 your IPython session.
1733 your IPython session.
1730
1734
1731 If called without arguments, %edit opens up an empty editor with a
1735 If called without arguments, %edit opens up an empty editor with a
1732 temporary file and will execute the contents of this file when you
1736 temporary file and will execute the contents of this file when you
1733 close it (don't forget to save it!).
1737 close it (don't forget to save it!).
1734
1738
1735
1739
1736 Options:
1740 Options:
1737
1741
1738 -p: this will call the editor with the same data as the previous time
1742 -p: this will call the editor with the same data as the previous time
1739 it was used, regardless of how long ago (in your current session) it
1743 it was used, regardless of how long ago (in your current session) it
1740 was.
1744 was.
1741
1745
1742 -x: do not execute the edited code immediately upon exit. This is
1746 -x: do not execute the edited code immediately upon exit. This is
1743 mainly useful if you are editing programs which need to be called with
1747 mainly useful if you are editing programs which need to be called with
1744 command line arguments, which you can then do using %run.
1748 command line arguments, which you can then do using %run.
1745
1749
1746
1750
1747 Arguments:
1751 Arguments:
1748
1752
1749 If arguments are given, the following possibilites exist:
1753 If arguments are given, the following possibilites exist:
1750
1754
1751 - The arguments are numbers or pairs of colon-separated numbers (like
1755 - The arguments are numbers or pairs of colon-separated numbers (like
1752 1 4:8 9). These are interpreted as lines of previous input to be
1756 1 4:8 9). These are interpreted as lines of previous input to be
1753 loaded into the editor. The syntax is the same of the %macro command.
1757 loaded into the editor. The syntax is the same of the %macro command.
1754
1758
1755 - If the argument doesn't start with a number, it is evaluated as a
1759 - If the argument doesn't start with a number, it is evaluated as a
1756 variable and its contents loaded into the editor. You can thus edit
1760 variable and its contents loaded into the editor. You can thus edit
1757 any string which contains python code (including the result of
1761 any string which contains python code (including the result of
1758 previous edits).
1762 previous edits).
1759
1763
1760 - If the argument is the name of an object (other than a string),
1764 - If the argument is the name of an object (other than a string),
1761 IPython will try to locate the file where it was defined and open the
1765 IPython will try to locate the file where it was defined and open the
1762 editor at the point where it is defined. You can use `%edit function`
1766 editor at the point where it is defined. You can use `%edit function`
1763 to load an editor exactly at the point where 'function' is defined,
1767 to load an editor exactly at the point where 'function' is defined,
1764 edit it and have the file be executed automatically.
1768 edit it and have the file be executed automatically.
1765
1769
1766 If the object is a macro (see %macro for details), this opens up your
1770 If the object is a macro (see %macro for details), this opens up your
1767 specified editor with a temporary file containing the macro's data.
1771 specified editor with a temporary file containing the macro's data.
1768 Upon exit, the macro is reloaded with the contents of the file.
1772 Upon exit, the macro is reloaded with the contents of the file.
1769
1773
1770 Note: opening at an exact line is only supported under Unix, and some
1774 Note: opening at an exact line is only supported under Unix, and some
1771 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1775 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1772 '+NUMBER' parameter necessary for this feature. Good editors like
1776 '+NUMBER' parameter necessary for this feature. Good editors like
1773 (X)Emacs, vi, jed, pico and joe all do.
1777 (X)Emacs, vi, jed, pico and joe all do.
1774
1778
1775 - If the argument is not found as a variable, IPython will look for a
1779 - If the argument is not found as a variable, IPython will look for a
1776 file with that name (adding .py if necessary) and load it into the
1780 file with that name (adding .py if necessary) and load it into the
1777 editor. It will execute its contents with execfile() when you exit,
1781 editor. It will execute its contents with execfile() when you exit,
1778 loading any code in the file into your interactive namespace.
1782 loading any code in the file into your interactive namespace.
1779
1783
1780 After executing your code, %edit will return as output the code you
1784 After executing your code, %edit will return as output the code you
1781 typed in the editor (except when it was an existing file). This way
1785 typed in the editor (except when it was an existing file). This way
1782 you can reload the code in further invocations of %edit as a variable,
1786 you can reload the code in further invocations of %edit as a variable,
1783 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1787 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1784 the output.
1788 the output.
1785
1789
1786 Note that %edit is also available through the alias %ed.
1790 Note that %edit is also available through the alias %ed.
1787
1791
1788 This is an example of creating a simple function inside the editor and
1792 This is an example of creating a simple function inside the editor and
1789 then modifying it. First, start up the editor:
1793 then modifying it. First, start up the editor:
1790
1794
1791 In [1]: ed\\
1795 In [1]: ed\\
1792 Editing... done. Executing edited code...\\
1796 Editing... done. Executing edited code...\\
1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1797 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1794
1798
1795 We can then call the function foo():
1799 We can then call the function foo():
1796
1800
1797 In [2]: foo()\\
1801 In [2]: foo()\\
1798 foo() was defined in an editing session
1802 foo() was defined in an editing session
1799
1803
1800 Now we edit foo. IPython automatically loads the editor with the
1804 Now we edit foo. IPython automatically loads the editor with the
1801 (temporary) file where foo() was previously defined:
1805 (temporary) file where foo() was previously defined:
1802
1806
1803 In [3]: ed foo\\
1807 In [3]: ed foo\\
1804 Editing... done. Executing edited code...
1808 Editing... done. Executing edited code...
1805
1809
1806 And if we call foo() again we get the modified version:
1810 And if we call foo() again we get the modified version:
1807
1811
1808 In [4]: foo()\\
1812 In [4]: foo()\\
1809 foo() has now been changed!
1813 foo() has now been changed!
1810
1814
1811 Here is an example of how to edit a code snippet successive
1815 Here is an example of how to edit a code snippet successive
1812 times. First we call the editor:
1816 times. First we call the editor:
1813
1817
1814 In [8]: ed\\
1818 In [8]: ed\\
1815 Editing... done. Executing edited code...\\
1819 Editing... done. Executing edited code...\\
1816 hello\\
1820 hello\\
1817 Out[8]: "print 'hello'\\n"
1821 Out[8]: "print 'hello'\\n"
1818
1822
1819 Now we call it again with the previous output (stored in _):
1823 Now we call it again with the previous output (stored in _):
1820
1824
1821 In [9]: ed _\\
1825 In [9]: ed _\\
1822 Editing... done. Executing edited code...\\
1826 Editing... done. Executing edited code...\\
1823 hello world\\
1827 hello world\\
1824 Out[9]: "print 'hello world'\\n"
1828 Out[9]: "print 'hello world'\\n"
1825
1829
1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1830 Now we call it with the output #8 (stored in _8, also as Out[8]):
1827
1831
1828 In [10]: ed _8\\
1832 In [10]: ed _8\\
1829 Editing... done. Executing edited code...\\
1833 Editing... done. Executing edited code...\\
1830 hello again\\
1834 hello again\\
1831 Out[10]: "print 'hello again'\\n"
1835 Out[10]: "print 'hello again'\\n"
1832
1836
1833
1837
1834 Changing the default editor hook:
1838 Changing the default editor hook:
1835
1839
1836 If you wish to write your own editor hook, you can put it in a
1840 If you wish to write your own editor hook, you can put it in a
1837 configuration file which you load at startup time. The default hook
1841 configuration file which you load at startup time. The default hook
1838 is defined in the IPython.hooks module, and you can use that as a
1842 is defined in the IPython.hooks module, and you can use that as a
1839 starting example for further modifications. That file also has
1843 starting example for further modifications. That file also has
1840 general instructions on how to set a new hook for use once you've
1844 general instructions on how to set a new hook for use once you've
1841 defined it."""
1845 defined it."""
1842
1846
1843 # FIXME: This function has become a convoluted mess. It needs a
1847 # FIXME: This function has become a convoluted mess. It needs a
1844 # ground-up rewrite with clean, simple logic.
1848 # ground-up rewrite with clean, simple logic.
1845
1849
1846 def make_filename(arg):
1850 def make_filename(arg):
1847 "Make a filename from the given args"
1851 "Make a filename from the given args"
1848 try:
1852 try:
1849 filename = get_py_filename(arg)
1853 filename = get_py_filename(arg)
1850 except IOError:
1854 except IOError:
1851 if args.endswith('.py'):
1855 if args.endswith('.py'):
1852 filename = arg
1856 filename = arg
1853 else:
1857 else:
1854 filename = None
1858 filename = None
1855 return filename
1859 return filename
1856
1860
1857 # custom exceptions
1861 # custom exceptions
1858 class DataIsObject(Exception): pass
1862 class DataIsObject(Exception): pass
1859
1863
1860 opts,args = self.parse_options(parameter_s,'px')
1864 opts,args = self.parse_options(parameter_s,'px')
1861
1865
1862 # Default line number value
1866 # Default line number value
1863 lineno = None
1867 lineno = None
1864 if opts.has_key('p'):
1868 if opts.has_key('p'):
1865 args = '_%s' % last_call[0]
1869 args = '_%s' % last_call[0]
1866 if not self.shell.user_ns.has_key(args):
1870 if not self.shell.user_ns.has_key(args):
1867 args = last_call[1]
1871 args = last_call[1]
1868
1872
1869 # use last_call to remember the state of the previous call, but don't
1873 # use last_call to remember the state of the previous call, but don't
1870 # let it be clobbered by successive '-p' calls.
1874 # let it be clobbered by successive '-p' calls.
1871 try:
1875 try:
1872 last_call[0] = self.shell.outputcache.prompt_count
1876 last_call[0] = self.shell.outputcache.prompt_count
1873 if not opts.has_key('p'):
1877 if not opts.has_key('p'):
1874 last_call[1] = parameter_s
1878 last_call[1] = parameter_s
1875 except:
1879 except:
1876 pass
1880 pass
1877
1881
1878 # by default this is done with temp files, except when the given
1882 # by default this is done with temp files, except when the given
1879 # arg is a filename
1883 # arg is a filename
1880 use_temp = 1
1884 use_temp = 1
1881
1885
1882 if re.match(r'\d',args):
1886 if re.match(r'\d',args):
1883 # Mode where user specifies ranges of lines, like in %macro.
1887 # Mode where user specifies ranges of lines, like in %macro.
1884 # This means that you can't edit files whose names begin with
1888 # This means that you can't edit files whose names begin with
1885 # numbers this way. Tough.
1889 # numbers this way. Tough.
1886 ranges = args.split()
1890 ranges = args.split()
1887 data = ''.join(self.extract_input_slices(ranges))
1891 data = ''.join(self.extract_input_slices(ranges))
1888 elif args.endswith('.py'):
1892 elif args.endswith('.py'):
1889 filename = make_filename(args)
1893 filename = make_filename(args)
1890 data = ''
1894 data = ''
1891 use_temp = 0
1895 use_temp = 0
1892 elif args:
1896 elif args:
1893 try:
1897 try:
1894 # Load the parameter given as a variable. If not a string,
1898 # Load the parameter given as a variable. If not a string,
1895 # process it as an object instead (below)
1899 # process it as an object instead (below)
1896
1900
1897 #print '*** args',args,'type',type(args) # dbg
1901 #print '*** args',args,'type',type(args) # dbg
1898 data = eval(args,self.shell.user_ns)
1902 data = eval(args,self.shell.user_ns)
1899 if not type(data) in StringTypes:
1903 if not type(data) in StringTypes:
1900 raise DataIsObject
1904 raise DataIsObject
1901
1905
1902 except (NameError,SyntaxError):
1906 except (NameError,SyntaxError):
1903 # given argument is not a variable, try as a filename
1907 # given argument is not a variable, try as a filename
1904 filename = make_filename(args)
1908 filename = make_filename(args)
1905 if filename is None:
1909 if filename is None:
1906 warn("Argument given (%s) can't be found as a variable "
1910 warn("Argument given (%s) can't be found as a variable "
1907 "or as a filename." % args)
1911 "or as a filename." % args)
1908 return
1912 return
1909
1913
1910 data = ''
1914 data = ''
1911 use_temp = 0
1915 use_temp = 0
1912 except DataIsObject:
1916 except DataIsObject:
1913
1917
1914 # macros have a special edit function
1918 # macros have a special edit function
1915 if isinstance(data,Macro):
1919 if isinstance(data,Macro):
1916 self._edit_macro(args,data)
1920 self._edit_macro(args,data)
1917 return
1921 return
1918
1922
1919 # For objects, try to edit the file where they are defined
1923 # For objects, try to edit the file where they are defined
1920 try:
1924 try:
1921 filename = inspect.getabsfile(data)
1925 filename = inspect.getabsfile(data)
1922 datafile = 1
1926 datafile = 1
1923 except TypeError:
1927 except TypeError:
1924 filename = make_filename(args)
1928 filename = make_filename(args)
1925 datafile = 1
1929 datafile = 1
1926 warn('Could not find file where `%s` is defined.\n'
1930 warn('Could not find file where `%s` is defined.\n'
1927 'Opening a file named `%s`' % (args,filename))
1931 'Opening a file named `%s`' % (args,filename))
1928 # Now, make sure we can actually read the source (if it was in
1932 # Now, make sure we can actually read the source (if it was in
1929 # a temp file it's gone by now).
1933 # a temp file it's gone by now).
1930 if datafile:
1934 if datafile:
1931 try:
1935 try:
1932 lineno = inspect.getsourcelines(data)[1]
1936 lineno = inspect.getsourcelines(data)[1]
1933 except IOError:
1937 except IOError:
1934 filename = make_filename(args)
1938 filename = make_filename(args)
1935 if filename is None:
1939 if filename is None:
1936 warn('The file `%s` where `%s` was defined cannot '
1940 warn('The file `%s` where `%s` was defined cannot '
1937 'be read.' % (filename,data))
1941 'be read.' % (filename,data))
1938 return
1942 return
1939 use_temp = 0
1943 use_temp = 0
1940 else:
1944 else:
1941 data = ''
1945 data = ''
1942
1946
1943 if use_temp:
1947 if use_temp:
1944 filename = self.shell.mktempfile(data)
1948 filename = self.shell.mktempfile(data)
1945 print 'IPython will make a temporary file named:',filename
1949 print 'IPython will make a temporary file named:',filename
1946
1950
1947 # do actual editing here
1951 # do actual editing here
1948 print 'Editing...',
1952 print 'Editing...',
1949 sys.stdout.flush()
1953 sys.stdout.flush()
1950 self.shell.hooks.editor(filename,lineno)
1954 self.shell.hooks.editor(filename,lineno)
1951 if opts.has_key('x'): # -x prevents actual execution
1955 if opts.has_key('x'): # -x prevents actual execution
1952 print
1956 print
1953 else:
1957 else:
1954 print 'done. Executing edited code...'
1958 print 'done. Executing edited code...'
1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1959 self.shell.safe_execfile(filename,self.shell.user_ns)
1956 if use_temp:
1960 if use_temp:
1957 try:
1961 try:
1958 return open(filename).read()
1962 return open(filename).read()
1959 except IOError,msg:
1963 except IOError,msg:
1960 if msg.filename == filename:
1964 if msg.filename == filename:
1961 warn('File not found. Did you forget to save?')
1965 warn('File not found. Did you forget to save?')
1962 return
1966 return
1963 else:
1967 else:
1964 self.shell.showtraceback()
1968 self.shell.showtraceback()
1965
1969
1966 def magic_xmode(self,parameter_s = ''):
1970 def magic_xmode(self,parameter_s = ''):
1967 """Switch modes for the exception handlers.
1971 """Switch modes for the exception handlers.
1968
1972
1969 Valid modes: Plain, Context and Verbose.
1973 Valid modes: Plain, Context and Verbose.
1970
1974
1971 If called without arguments, acts as a toggle."""
1975 If called without arguments, acts as a toggle."""
1972
1976
1973 def xmode_switch_err(name):
1977 def xmode_switch_err(name):
1974 warn('Error changing %s exception modes.\n%s' %
1978 warn('Error changing %s exception modes.\n%s' %
1975 (name,sys.exc_info()[1]))
1979 (name,sys.exc_info()[1]))
1976
1980
1977 shell = self.shell
1981 shell = self.shell
1978 new_mode = parameter_s.strip().capitalize()
1982 new_mode = parameter_s.strip().capitalize()
1979 try:
1983 try:
1980 shell.InteractiveTB.set_mode(mode=new_mode)
1984 shell.InteractiveTB.set_mode(mode=new_mode)
1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1985 print 'Exception reporting mode:',shell.InteractiveTB.mode
1982 except:
1986 except:
1983 xmode_switch_err('user')
1987 xmode_switch_err('user')
1984
1988
1985 # threaded shells use a special handler in sys.excepthook
1989 # threaded shells use a special handler in sys.excepthook
1986 if shell.isthreaded:
1990 if shell.isthreaded:
1987 try:
1991 try:
1988 shell.sys_excepthook.set_mode(mode=new_mode)
1992 shell.sys_excepthook.set_mode(mode=new_mode)
1989 except:
1993 except:
1990 xmode_switch_err('threaded')
1994 xmode_switch_err('threaded')
1991
1995
1992 def magic_colors(self,parameter_s = ''):
1996 def magic_colors(self,parameter_s = ''):
1993 """Switch color scheme for prompts, info system and exception handlers.
1997 """Switch color scheme for prompts, info system and exception handlers.
1994
1998
1995 Currently implemented schemes: NoColor, Linux, LightBG.
1999 Currently implemented schemes: NoColor, Linux, LightBG.
1996
2000
1997 Color scheme names are not case-sensitive."""
2001 Color scheme names are not case-sensitive."""
1998
2002
1999 def color_switch_err(name):
2003 def color_switch_err(name):
2000 warn('Error changing %s color schemes.\n%s' %
2004 warn('Error changing %s color schemes.\n%s' %
2001 (name,sys.exc_info()[1]))
2005 (name,sys.exc_info()[1]))
2002
2006
2003
2007
2004 new_scheme = parameter_s.strip()
2008 new_scheme = parameter_s.strip()
2005 if not new_scheme:
2009 if not new_scheme:
2006 print 'You must specify a color scheme.'
2010 print 'You must specify a color scheme.'
2007 return
2011 return
2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2012 # Under Windows, check for Gary Bishop's readline, which is necessary
2009 # for ANSI coloring
2013 # for ANSI coloring
2010 if os.name in ['nt','dos']:
2014 if os.name in ['nt','dos']:
2011 try:
2015 try:
2012 import readline
2016 import readline
2013 except ImportError:
2017 except ImportError:
2014 has_readline = 0
2018 has_readline = 0
2015 else:
2019 else:
2016 try:
2020 try:
2017 readline.GetOutputFile()
2021 readline.GetOutputFile()
2018 except AttributeError:
2022 except AttributeError:
2019 has_readline = 0
2023 has_readline = 0
2020 else:
2024 else:
2021 has_readline = 1
2025 has_readline = 1
2022 if not has_readline:
2026 if not has_readline:
2023 msg = """\
2027 msg = """\
2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2028 Proper color support under MS Windows requires Gary Bishop's readline library.
2025 You can find it at:
2029 You can find it at:
2026 http://sourceforge.net/projects/uncpythontools
2030 http://sourceforge.net/projects/uncpythontools
2027 Gary's readline needs the ctypes module, from:
2031 Gary's readline needs the ctypes module, from:
2028 http://starship.python.net/crew/theller/ctypes
2032 http://starship.python.net/crew/theller/ctypes
2029
2033
2030 Defaulting color scheme to 'NoColor'"""
2034 Defaulting color scheme to 'NoColor'"""
2031 new_scheme = 'NoColor'
2035 new_scheme = 'NoColor'
2032 warn(msg)
2036 warn(msg)
2033 # local shortcut
2037 # local shortcut
2034 shell = self.shell
2038 shell = self.shell
2035
2039
2036 # Set prompt colors
2040 # Set prompt colors
2037 try:
2041 try:
2038 shell.outputcache.set_colors(new_scheme)
2042 shell.outputcache.set_colors(new_scheme)
2039 except:
2043 except:
2040 color_switch_err('prompt')
2044 color_switch_err('prompt')
2041 else:
2045 else:
2042 shell.rc.colors = \
2046 shell.rc.colors = \
2043 shell.outputcache.color_table.active_scheme_name
2047 shell.outputcache.color_table.active_scheme_name
2044 # Set exception colors
2048 # Set exception colors
2045 try:
2049 try:
2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2050 shell.InteractiveTB.set_colors(scheme = new_scheme)
2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2051 shell.SyntaxTB.set_colors(scheme = new_scheme)
2048 except:
2052 except:
2049 color_switch_err('exception')
2053 color_switch_err('exception')
2050
2054
2051 # threaded shells use a verbose traceback in sys.excepthook
2055 # threaded shells use a verbose traceback in sys.excepthook
2052 if shell.isthreaded:
2056 if shell.isthreaded:
2053 try:
2057 try:
2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2058 shell.sys_excepthook.set_colors(scheme=new_scheme)
2055 except:
2059 except:
2056 color_switch_err('system exception handler')
2060 color_switch_err('system exception handler')
2057
2061
2058 # Set info (for 'object?') colors
2062 # Set info (for 'object?') colors
2059 if shell.rc.color_info:
2063 if shell.rc.color_info:
2060 try:
2064 try:
2061 shell.inspector.set_active_scheme(new_scheme)
2065 shell.inspector.set_active_scheme(new_scheme)
2062 except:
2066 except:
2063 color_switch_err('object inspector')
2067 color_switch_err('object inspector')
2064 else:
2068 else:
2065 shell.inspector.set_active_scheme('NoColor')
2069 shell.inspector.set_active_scheme('NoColor')
2066
2070
2067 def magic_color_info(self,parameter_s = ''):
2071 def magic_color_info(self,parameter_s = ''):
2068 """Toggle color_info.
2072 """Toggle color_info.
2069
2073
2070 The color_info configuration parameter controls whether colors are
2074 The color_info configuration parameter controls whether colors are
2071 used for displaying object details (by things like %psource, %pfile or
2075 used for displaying object details (by things like %psource, %pfile or
2072 the '?' system). This function toggles this value with each call.
2076 the '?' system). This function toggles this value with each call.
2073
2077
2074 Note that unless you have a fairly recent pager (less works better
2078 Note that unless you have a fairly recent pager (less works better
2075 than more) in your system, using colored object information displays
2079 than more) in your system, using colored object information displays
2076 will not work properly. Test it and see."""
2080 will not work properly. Test it and see."""
2077
2081
2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2082 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2079 self.magic_colors(self.shell.rc.colors)
2083 self.magic_colors(self.shell.rc.colors)
2080 print 'Object introspection functions have now coloring:',
2084 print 'Object introspection functions have now coloring:',
2081 print ['OFF','ON'][self.shell.rc.color_info]
2085 print ['OFF','ON'][self.shell.rc.color_info]
2082
2086
2083 def magic_Pprint(self, parameter_s=''):
2087 def magic_Pprint(self, parameter_s=''):
2084 """Toggle pretty printing on/off."""
2088 """Toggle pretty printing on/off."""
2085
2089
2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2090 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2087 print 'Pretty printing has been turned', \
2091 print 'Pretty printing has been turned', \
2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2092 ['OFF','ON'][self.shell.outputcache.Pprint]
2089
2093
2090 def magic_exit(self, parameter_s=''):
2094 def magic_exit(self, parameter_s=''):
2091 """Exit IPython, confirming if configured to do so.
2095 """Exit IPython, confirming if configured to do so.
2092
2096
2093 You can configure whether IPython asks for confirmation upon exit by
2097 You can configure whether IPython asks for confirmation upon exit by
2094 setting the confirm_exit flag in the ipythonrc file."""
2098 setting the confirm_exit flag in the ipythonrc file."""
2095
2099
2096 self.shell.exit()
2100 self.shell.exit()
2097
2101
2098 def magic_quit(self, parameter_s=''):
2102 def magic_quit(self, parameter_s=''):
2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2103 """Exit IPython, confirming if configured to do so (like %exit)"""
2100
2104
2101 self.shell.exit()
2105 self.shell.exit()
2102
2106
2103 def magic_Exit(self, parameter_s=''):
2107 def magic_Exit(self, parameter_s=''):
2104 """Exit IPython without confirmation."""
2108 """Exit IPython without confirmation."""
2105
2109
2106 self.shell.exit_now = True
2110 self.shell.exit_now = True
2107
2111
2108 def magic_Quit(self, parameter_s=''):
2112 def magic_Quit(self, parameter_s=''):
2109 """Exit IPython without confirmation (like %Exit)."""
2113 """Exit IPython without confirmation (like %Exit)."""
2110
2114
2111 self.shell.exit_now = True
2115 self.shell.exit_now = True
2112
2116
2113 #......................................................................
2117 #......................................................................
2114 # Functions to implement unix shell-type things
2118 # Functions to implement unix shell-type things
2115
2119
2116 def magic_alias(self, parameter_s = ''):
2120 def magic_alias(self, parameter_s = ''):
2117 """Define an alias for a system command.
2121 """Define an alias for a system command.
2118
2122
2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2123 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2120
2124
2121 Then, typing 'alias_name params' will execute the system command 'cmd
2125 Then, typing 'alias_name params' will execute the system command 'cmd
2122 params' (from your underlying operating system).
2126 params' (from your underlying operating system).
2123
2127
2124 Aliases have lower precedence than magic functions and Python normal
2128 Aliases have lower precedence than magic functions and Python normal
2125 variables, so if 'foo' is both a Python variable and an alias, the
2129 variables, so if 'foo' is both a Python variable and an alias, the
2126 alias can not be executed until 'del foo' removes the Python variable.
2130 alias can not be executed until 'del foo' removes the Python variable.
2127
2131
2128 You can use the %l specifier in an alias definition to represent the
2132 You can use the %l specifier in an alias definition to represent the
2129 whole line when the alias is called. For example:
2133 whole line when the alias is called. For example:
2130
2134
2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2135 In [2]: alias all echo "Input in brackets: <%l>"\\
2132 In [3]: all hello world\\
2136 In [3]: all hello world\\
2133 Input in brackets: <hello world>
2137 Input in brackets: <hello world>
2134
2138
2135 You can also define aliases with parameters using %s specifiers (one
2139 You can also define aliases with parameters using %s specifiers (one
2136 per parameter):
2140 per parameter):
2137
2141
2138 In [1]: alias parts echo first %s second %s\\
2142 In [1]: alias parts echo first %s second %s\\
2139 In [2]: %parts A B\\
2143 In [2]: %parts A B\\
2140 first A second B\\
2144 first A second B\\
2141 In [3]: %parts A\\
2145 In [3]: %parts A\\
2142 Incorrect number of arguments: 2 expected.\\
2146 Incorrect number of arguments: 2 expected.\\
2143 parts is an alias to: 'echo first %s second %s'
2147 parts is an alias to: 'echo first %s second %s'
2144
2148
2145 Note that %l and %s are mutually exclusive. You can only use one or
2149 Note that %l and %s are mutually exclusive. You can only use one or
2146 the other in your aliases.
2150 the other in your aliases.
2147
2151
2148 Aliases expand Python variables just like system calls using ! or !!
2152 Aliases expand Python variables just like system calls using ! or !!
2149 do: all expressions prefixed with '$' get expanded. For details of
2153 do: all expressions prefixed with '$' get expanded. For details of
2150 the semantic rules, see PEP-215:
2154 the semantic rules, see PEP-215:
2151 http://www.python.org/peps/pep-0215.html. This is the library used by
2155 http://www.python.org/peps/pep-0215.html. This is the library used by
2152 IPython for variable expansion. If you want to access a true shell
2156 IPython for variable expansion. If you want to access a true shell
2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2157 variable, an extra $ is necessary to prevent its expansion by IPython:
2154
2158
2155 In [6]: alias show echo\\
2159 In [6]: alias show echo\\
2156 In [7]: PATH='A Python string'\\
2160 In [7]: PATH='A Python string'\\
2157 In [8]: show $PATH\\
2161 In [8]: show $PATH\\
2158 A Python string\\
2162 A Python string\\
2159 In [9]: show $$PATH\\
2163 In [9]: show $$PATH\\
2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2164 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2161
2165
2162 You can use the alias facility to acess all of $PATH. See the %rehash
2166 You can use the alias facility to acess all of $PATH. See the %rehash
2163 and %rehashx functions, which automatically create aliases for the
2167 and %rehashx functions, which automatically create aliases for the
2164 contents of your $PATH.
2168 contents of your $PATH.
2165
2169
2166 If called with no parameters, %alias prints the current alias table."""
2170 If called with no parameters, %alias prints the current alias table."""
2167
2171
2168 par = parameter_s.strip()
2172 par = parameter_s.strip()
2169 if not par:
2173 if not par:
2170 if self.shell.rc.automagic:
2174 if self.shell.rc.automagic:
2171 prechar = ''
2175 prechar = ''
2172 else:
2176 else:
2173 prechar = self.shell.ESC_MAGIC
2177 prechar = self.shell.ESC_MAGIC
2174 #print 'Alias\t\tSystem Command\n'+'-'*30
2178 #print 'Alias\t\tSystem Command\n'+'-'*30
2175 atab = self.shell.alias_table
2179 atab = self.shell.alias_table
2176 aliases = atab.keys()
2180 aliases = atab.keys()
2177 aliases.sort()
2181 aliases.sort()
2178 res = []
2182 res = []
2179 for alias in aliases:
2183 for alias in aliases:
2180 res.append((alias, atab[alias][1]))
2184 res.append((alias, atab[alias][1]))
2181 print "Total number of aliases:",len(aliases)
2185 print "Total number of aliases:",len(aliases)
2182 return res
2186 return res
2183 try:
2187 try:
2184 alias,cmd = par.split(None,1)
2188 alias,cmd = par.split(None,1)
2185 except:
2189 except:
2186 print OInspect.getdoc(self.magic_alias)
2190 print OInspect.getdoc(self.magic_alias)
2187 else:
2191 else:
2188 nargs = cmd.count('%s')
2192 nargs = cmd.count('%s')
2189 if nargs>0 and cmd.find('%l')>=0:
2193 if nargs>0 and cmd.find('%l')>=0:
2190 error('The %s and %l specifiers are mutually exclusive '
2194 error('The %s and %l specifiers are mutually exclusive '
2191 'in alias definitions.')
2195 'in alias definitions.')
2192 else: # all looks OK
2196 else: # all looks OK
2193 self.shell.alias_table[alias] = (nargs,cmd)
2197 self.shell.alias_table[alias] = (nargs,cmd)
2194 self.shell.alias_table_validate(verbose=1)
2198 self.shell.alias_table_validate(verbose=1)
2195 # end magic_alias
2199 # end magic_alias
2196
2200
2197 def magic_unalias(self, parameter_s = ''):
2201 def magic_unalias(self, parameter_s = ''):
2198 """Remove an alias"""
2202 """Remove an alias"""
2199
2203
2200 aname = parameter_s.strip()
2204 aname = parameter_s.strip()
2201 if aname in self.shell.alias_table:
2205 if aname in self.shell.alias_table:
2202 del self.shell.alias_table[aname]
2206 del self.shell.alias_table[aname]
2203
2207
2204 def magic_rehash(self, parameter_s = ''):
2208 def magic_rehash(self, parameter_s = ''):
2205 """Update the alias table with all entries in $PATH.
2209 """Update the alias table with all entries in $PATH.
2206
2210
2207 This version does no checks on execute permissions or whether the
2211 This version does no checks on execute permissions or whether the
2208 contents of $PATH are truly files (instead of directories or something
2212 contents of $PATH are truly files (instead of directories or something
2209 else). For such a safer (but slower) version, use %rehashx."""
2213 else). For such a safer (but slower) version, use %rehashx."""
2210
2214
2211 # This function (and rehashx) manipulate the alias_table directly
2215 # This function (and rehashx) manipulate the alias_table directly
2212 # rather than calling magic_alias, for speed reasons. A rehash on a
2216 # rather than calling magic_alias, for speed reasons. A rehash on a
2213 # typical Linux box involves several thousand entries, so efficiency
2217 # typical Linux box involves several thousand entries, so efficiency
2214 # here is a top concern.
2218 # here is a top concern.
2215
2219
2216 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2220 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2217 alias_table = self.shell.alias_table
2221 alias_table = self.shell.alias_table
2218 for pdir in path:
2222 for pdir in path:
2219 for ff in os.listdir(pdir):
2223 for ff in os.listdir(pdir):
2220 # each entry in the alias table must be (N,name), where
2224 # each entry in the alias table must be (N,name), where
2221 # N is the number of positional arguments of the alias.
2225 # N is the number of positional arguments of the alias.
2222 alias_table[ff] = (0,ff)
2226 alias_table[ff] = (0,ff)
2223 # Make sure the alias table doesn't contain keywords or builtins
2227 # Make sure the alias table doesn't contain keywords or builtins
2224 self.shell.alias_table_validate()
2228 self.shell.alias_table_validate()
2225 # Call again init_auto_alias() so we get 'rm -i' and other modified
2229 # Call again init_auto_alias() so we get 'rm -i' and other modified
2226 # aliases since %rehash will probably clobber them
2230 # aliases since %rehash will probably clobber them
2227 self.shell.init_auto_alias()
2231 self.shell.init_auto_alias()
2228
2232
2229 def magic_rehashx(self, parameter_s = ''):
2233 def magic_rehashx(self, parameter_s = ''):
2230 """Update the alias table with all executable files in $PATH.
2234 """Update the alias table with all executable files in $PATH.
2231
2235
2232 This version explicitly checks that every entry in $PATH is a file
2236 This version explicitly checks that every entry in $PATH is a file
2233 with execute access (os.X_OK), so it is much slower than %rehash.
2237 with execute access (os.X_OK), so it is much slower than %rehash.
2234
2238
2235 Under Windows, it checks executability as a match agains a
2239 Under Windows, it checks executability as a match agains a
2236 '|'-separated string of extensions, stored in the IPython config
2240 '|'-separated string of extensions, stored in the IPython config
2237 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2241 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2238
2242
2239 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2243 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2240 alias_table = self.shell.alias_table
2244 alias_table = self.shell.alias_table
2241
2245
2242 if os.name == 'posix':
2246 if os.name == 'posix':
2243 isexec = lambda fname:os.path.isfile(fname) and \
2247 isexec = lambda fname:os.path.isfile(fname) and \
2244 os.access(fname,os.X_OK)
2248 os.access(fname,os.X_OK)
2245 else:
2249 else:
2246
2250
2247 try:
2251 try:
2248 winext = os.environ['pathext'].replace(';','|').replace('.','')
2252 winext = os.environ['pathext'].replace(';','|').replace('.','')
2249 except KeyError:
2253 except KeyError:
2250 winext = 'exe|com|bat'
2254 winext = 'exe|com|bat'
2251
2255
2252 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2256 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2253 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2257 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2254 savedir = os.getcwd()
2258 savedir = os.getcwd()
2255 try:
2259 try:
2256 # write the whole loop for posix/Windows so we don't have an if in
2260 # write the whole loop for posix/Windows so we don't have an if in
2257 # the innermost part
2261 # the innermost part
2258 if os.name == 'posix':
2262 if os.name == 'posix':
2259 for pdir in path:
2263 for pdir in path:
2260 os.chdir(pdir)
2264 os.chdir(pdir)
2261 for ff in os.listdir(pdir):
2265 for ff in os.listdir(pdir):
2262 if isexec(ff):
2266 if isexec(ff):
2263 # each entry in the alias table must be (N,name),
2267 # each entry in the alias table must be (N,name),
2264 # where N is the number of positional arguments of the
2268 # where N is the number of positional arguments of the
2265 # alias.
2269 # alias.
2266 alias_table[ff] = (0,ff)
2270 alias_table[ff] = (0,ff)
2267 else:
2271 else:
2268 for pdir in path:
2272 for pdir in path:
2269 os.chdir(pdir)
2273 os.chdir(pdir)
2270 for ff in os.listdir(pdir):
2274 for ff in os.listdir(pdir):
2271 if isexec(ff):
2275 if isexec(ff):
2272 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2276 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2273 # Make sure the alias table doesn't contain keywords or builtins
2277 # Make sure the alias table doesn't contain keywords or builtins
2274 self.shell.alias_table_validate()
2278 self.shell.alias_table_validate()
2275 # Call again init_auto_alias() so we get 'rm -i' and other
2279 # Call again init_auto_alias() so we get 'rm -i' and other
2276 # modified aliases since %rehashx will probably clobber them
2280 # modified aliases since %rehashx will probably clobber them
2277 self.shell.init_auto_alias()
2281 self.shell.init_auto_alias()
2278 finally:
2282 finally:
2279 os.chdir(savedir)
2283 os.chdir(savedir)
2280
2284
2281 def magic_pwd(self, parameter_s = ''):
2285 def magic_pwd(self, parameter_s = ''):
2282 """Return the current working directory path."""
2286 """Return the current working directory path."""
2283 return os.getcwd()
2287 return os.getcwd()
2284
2288
2285 def magic_cd(self, parameter_s=''):
2289 def magic_cd(self, parameter_s=''):
2286 """Change the current working directory.
2290 """Change the current working directory.
2287
2291
2288 This command automatically maintains an internal list of directories
2292 This command automatically maintains an internal list of directories
2289 you visit during your IPython session, in the variable _dh. The
2293 you visit during your IPython session, in the variable _dh. The
2290 command %dhist shows this history nicely formatted.
2294 command %dhist shows this history nicely formatted.
2291
2295
2292 Usage:
2296 Usage:
2293
2297
2294 cd 'dir': changes to directory 'dir'.
2298 cd 'dir': changes to directory 'dir'.
2295
2299
2296 cd -: changes to the last visited directory.
2300 cd -: changes to the last visited directory.
2297
2301
2298 cd -<n>: changes to the n-th directory in the directory history.
2302 cd -<n>: changes to the n-th directory in the directory history.
2299
2303
2300 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2304 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2301 (note: cd <bookmark_name> is enough if there is no
2305 (note: cd <bookmark_name> is enough if there is no
2302 directory <bookmark_name>, but a bookmark with the name exists.)
2306 directory <bookmark_name>, but a bookmark with the name exists.)
2303
2307
2304 Options:
2308 Options:
2305
2309
2306 -q: quiet. Do not print the working directory after the cd command is
2310 -q: quiet. Do not print the working directory after the cd command is
2307 executed. By default IPython's cd command does print this directory,
2311 executed. By default IPython's cd command does print this directory,
2308 since the default prompts do not display path information.
2312 since the default prompts do not display path information.
2309
2313
2310 Note that !cd doesn't work for this purpose because the shell where
2314 Note that !cd doesn't work for this purpose because the shell where
2311 !command runs is immediately discarded after executing 'command'."""
2315 !command runs is immediately discarded after executing 'command'."""
2312
2316
2313 parameter_s = parameter_s.strip()
2317 parameter_s = parameter_s.strip()
2314 bkms = self.shell.persist.get("bookmarks",{})
2318 bkms = self.shell.persist.get("bookmarks",{})
2315
2319
2316 numcd = re.match(r'(-)(\d+)$',parameter_s)
2320 numcd = re.match(r'(-)(\d+)$',parameter_s)
2317 # jump in directory history by number
2321 # jump in directory history by number
2318 if numcd:
2322 if numcd:
2319 nn = int(numcd.group(2))
2323 nn = int(numcd.group(2))
2320 try:
2324 try:
2321 ps = self.shell.user_ns['_dh'][nn]
2325 ps = self.shell.user_ns['_dh'][nn]
2322 except IndexError:
2326 except IndexError:
2323 print 'The requested directory does not exist in history.'
2327 print 'The requested directory does not exist in history.'
2324 return
2328 return
2325 else:
2329 else:
2326 opts = {}
2330 opts = {}
2327 else:
2331 else:
2328 #turn all non-space-escaping backslashes to slashes,
2332 #turn all non-space-escaping backslashes to slashes,
2329 # for c:\windows\directory\names\
2333 # for c:\windows\directory\names\
2330 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2334 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2331 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2335 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2332 # jump to previous
2336 # jump to previous
2333 if ps == '-':
2337 if ps == '-':
2334 try:
2338 try:
2335 ps = self.shell.user_ns['_dh'][-2]
2339 ps = self.shell.user_ns['_dh'][-2]
2336 except IndexError:
2340 except IndexError:
2337 print 'No previous directory to change to.'
2341 print 'No previous directory to change to.'
2338 return
2342 return
2339 # jump to bookmark
2343 # jump to bookmark
2340 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2344 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2341 if bkms.has_key(ps):
2345 if bkms.has_key(ps):
2342 target = bkms[ps]
2346 target = bkms[ps]
2343 print '(bookmark:%s) -> %s' % (ps,target)
2347 print '(bookmark:%s) -> %s' % (ps,target)
2344 ps = target
2348 ps = target
2345 else:
2349 else:
2346 if bkms:
2350 if bkms:
2347 error("Bookmark '%s' not found. "
2351 error("Bookmark '%s' not found. "
2348 "Use '%%bookmark -l' to see your bookmarks." % ps)
2352 "Use '%%bookmark -l' to see your bookmarks." % ps)
2349 else:
2353 else:
2350 print "Bookmarks not set - use %bookmark <bookmarkname>"
2354 print "Bookmarks not set - use %bookmark <bookmarkname>"
2351 return
2355 return
2352
2356
2353 # at this point ps should point to the target dir
2357 # at this point ps should point to the target dir
2354 if ps:
2358 if ps:
2355 try:
2359 try:
2356 os.chdir(os.path.expanduser(ps))
2360 os.chdir(os.path.expanduser(ps))
2357 ttitle = ("IPy:" + (
2361 ttitle = ("IPy:" + (
2358 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2362 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2359 platutils.set_term_title(ttitle)
2363 platutils.set_term_title(ttitle)
2360 except OSError:
2364 except OSError:
2361 print sys.exc_info()[1]
2365 print sys.exc_info()[1]
2362 else:
2366 else:
2363 self.shell.user_ns['_dh'].append(os.getcwd())
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2364 else:
2368 else:
2365 os.chdir(self.shell.home_dir)
2369 os.chdir(self.shell.home_dir)
2366 platutils.set_term_title("IPy:~")
2370 platutils.set_term_title("IPy:~")
2367 self.shell.user_ns['_dh'].append(os.getcwd())
2371 self.shell.user_ns['_dh'].append(os.getcwd())
2368 if not 'q' in opts:
2372 if not 'q' in opts:
2369 print self.shell.user_ns['_dh'][-1]
2373 print self.shell.user_ns['_dh'][-1]
2370
2374
2371 def magic_dhist(self, parameter_s=''):
2375 def magic_dhist(self, parameter_s=''):
2372 """Print your history of visited directories.
2376 """Print your history of visited directories.
2373
2377
2374 %dhist -> print full history\\
2378 %dhist -> print full history\\
2375 %dhist n -> print last n entries only\\
2379 %dhist n -> print last n entries only\\
2376 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2380 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2377
2381
2378 This history is automatically maintained by the %cd command, and
2382 This history is automatically maintained by the %cd command, and
2379 always available as the global list variable _dh. You can use %cd -<n>
2383 always available as the global list variable _dh. You can use %cd -<n>
2380 to go to directory number <n>."""
2384 to go to directory number <n>."""
2381
2385
2382 dh = self.shell.user_ns['_dh']
2386 dh = self.shell.user_ns['_dh']
2383 if parameter_s:
2387 if parameter_s:
2384 try:
2388 try:
2385 args = map(int,parameter_s.split())
2389 args = map(int,parameter_s.split())
2386 except:
2390 except:
2387 self.arg_err(Magic.magic_dhist)
2391 self.arg_err(Magic.magic_dhist)
2388 return
2392 return
2389 if len(args) == 1:
2393 if len(args) == 1:
2390 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2394 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2391 elif len(args) == 2:
2395 elif len(args) == 2:
2392 ini,fin = args
2396 ini,fin = args
2393 else:
2397 else:
2394 self.arg_err(Magic.magic_dhist)
2398 self.arg_err(Magic.magic_dhist)
2395 return
2399 return
2396 else:
2400 else:
2397 ini,fin = 0,len(dh)
2401 ini,fin = 0,len(dh)
2398 nlprint(dh,
2402 nlprint(dh,
2399 header = 'Directory history (kept in _dh)',
2403 header = 'Directory history (kept in _dh)',
2400 start=ini,stop=fin)
2404 start=ini,stop=fin)
2401
2405
2402 def magic_env(self, parameter_s=''):
2406 def magic_env(self, parameter_s=''):
2403 """List environment variables."""
2407 """List environment variables."""
2404
2408
2405 return os.environ.data
2409 return os.environ.data
2406
2410
2407 def magic_pushd(self, parameter_s=''):
2411 def magic_pushd(self, parameter_s=''):
2408 """Place the current dir on stack and change directory.
2412 """Place the current dir on stack and change directory.
2409
2413
2410 Usage:\\
2414 Usage:\\
2411 %pushd ['dirname']
2415 %pushd ['dirname']
2412
2416
2413 %pushd with no arguments does a %pushd to your home directory.
2417 %pushd with no arguments does a %pushd to your home directory.
2414 """
2418 """
2415 if parameter_s == '': parameter_s = '~'
2419 if parameter_s == '': parameter_s = '~'
2416 dir_s = self.shell.dir_stack
2420 dir_s = self.shell.dir_stack
2417 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2421 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2418 os.path.expanduser(self.shell.dir_stack[0]):
2422 os.path.expanduser(self.shell.dir_stack[0]):
2419 try:
2423 try:
2420 self.magic_cd(parameter_s)
2424 self.magic_cd(parameter_s)
2421 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2425 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2422 self.magic_dirs()
2426 self.magic_dirs()
2423 except:
2427 except:
2424 print 'Invalid directory'
2428 print 'Invalid directory'
2425 else:
2429 else:
2426 print 'You are already there!'
2430 print 'You are already there!'
2427
2431
2428 def magic_popd(self, parameter_s=''):
2432 def magic_popd(self, parameter_s=''):
2429 """Change to directory popped off the top of the stack.
2433 """Change to directory popped off the top of the stack.
2430 """
2434 """
2431 if len (self.shell.dir_stack) > 1:
2435 if len (self.shell.dir_stack) > 1:
2432 self.shell.dir_stack.pop(0)
2436 self.shell.dir_stack.pop(0)
2433 self.magic_cd(self.shell.dir_stack[0])
2437 self.magic_cd(self.shell.dir_stack[0])
2434 print self.shell.dir_stack[0]
2438 print self.shell.dir_stack[0]
2435 else:
2439 else:
2436 print "You can't remove the starting directory from the stack:",\
2440 print "You can't remove the starting directory from the stack:",\
2437 self.shell.dir_stack
2441 self.shell.dir_stack
2438
2442
2439 def magic_dirs(self, parameter_s=''):
2443 def magic_dirs(self, parameter_s=''):
2440 """Return the current directory stack."""
2444 """Return the current directory stack."""
2441
2445
2442 return self.shell.dir_stack[:]
2446 return self.shell.dir_stack[:]
2443
2447
2444 def magic_sc(self, parameter_s=''):
2448 def magic_sc(self, parameter_s=''):
2445 """Shell capture - execute a shell command and capture its output.
2449 """Shell capture - execute a shell command and capture its output.
2446
2450
2447 DEPRECATED. Suboptimal, retained for backwards compatibility.
2451 DEPRECATED. Suboptimal, retained for backwards compatibility.
2448
2452
2449 You should use the form 'var = !command' instead. Example:
2453 You should use the form 'var = !command' instead. Example:
2450
2454
2451 "%sc -l myfiles = ls ~" should now be written as
2455 "%sc -l myfiles = ls ~" should now be written as
2452
2456
2453 "myfiles = !ls ~"
2457 "myfiles = !ls ~"
2454
2458
2455 myfiles.s, myfiles.l and myfiles.n still apply as documented
2459 myfiles.s, myfiles.l and myfiles.n still apply as documented
2456 below.
2460 below.
2457
2461
2458 --
2462 --
2459 %sc [options] varname=command
2463 %sc [options] varname=command
2460
2464
2461 IPython will run the given command using commands.getoutput(), and
2465 IPython will run the given command using commands.getoutput(), and
2462 will then update the user's interactive namespace with a variable
2466 will then update the user's interactive namespace with a variable
2463 called varname, containing the value of the call. Your command can
2467 called varname, containing the value of the call. Your command can
2464 contain shell wildcards, pipes, etc.
2468 contain shell wildcards, pipes, etc.
2465
2469
2466 The '=' sign in the syntax is mandatory, and the variable name you
2470 The '=' sign in the syntax is mandatory, and the variable name you
2467 supply must follow Python's standard conventions for valid names.
2471 supply must follow Python's standard conventions for valid names.
2468
2472
2469 (A special format without variable name exists for internal use)
2473 (A special format without variable name exists for internal use)
2470
2474
2471 Options:
2475 Options:
2472
2476
2473 -l: list output. Split the output on newlines into a list before
2477 -l: list output. Split the output on newlines into a list before
2474 assigning it to the given variable. By default the output is stored
2478 assigning it to the given variable. By default the output is stored
2475 as a single string.
2479 as a single string.
2476
2480
2477 -v: verbose. Print the contents of the variable.
2481 -v: verbose. Print the contents of the variable.
2478
2482
2479 In most cases you should not need to split as a list, because the
2483 In most cases you should not need to split as a list, because the
2480 returned value is a special type of string which can automatically
2484 returned value is a special type of string which can automatically
2481 provide its contents either as a list (split on newlines) or as a
2485 provide its contents either as a list (split on newlines) or as a
2482 space-separated string. These are convenient, respectively, either
2486 space-separated string. These are convenient, respectively, either
2483 for sequential processing or to be passed to a shell command.
2487 for sequential processing or to be passed to a shell command.
2484
2488
2485 For example:
2489 For example:
2486
2490
2487 # Capture into variable a
2491 # Capture into variable a
2488 In [9]: sc a=ls *py
2492 In [9]: sc a=ls *py
2489
2493
2490 # a is a string with embedded newlines
2494 # a is a string with embedded newlines
2491 In [10]: a
2495 In [10]: a
2492 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2496 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2493
2497
2494 # which can be seen as a list:
2498 # which can be seen as a list:
2495 In [11]: a.l
2499 In [11]: a.l
2496 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2500 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2497
2501
2498 # or as a whitespace-separated string:
2502 # or as a whitespace-separated string:
2499 In [12]: a.s
2503 In [12]: a.s
2500 Out[12]: 'setup.py win32_manual_post_install.py'
2504 Out[12]: 'setup.py win32_manual_post_install.py'
2501
2505
2502 # a.s is useful to pass as a single command line:
2506 # a.s is useful to pass as a single command line:
2503 In [13]: !wc -l $a.s
2507 In [13]: !wc -l $a.s
2504 146 setup.py
2508 146 setup.py
2505 130 win32_manual_post_install.py
2509 130 win32_manual_post_install.py
2506 276 total
2510 276 total
2507
2511
2508 # while the list form is useful to loop over:
2512 # while the list form is useful to loop over:
2509 In [14]: for f in a.l:
2513 In [14]: for f in a.l:
2510 ....: !wc -l $f
2514 ....: !wc -l $f
2511 ....:
2515 ....:
2512 146 setup.py
2516 146 setup.py
2513 130 win32_manual_post_install.py
2517 130 win32_manual_post_install.py
2514
2518
2515 Similiarly, the lists returned by the -l option are also special, in
2519 Similiarly, the lists returned by the -l option are also special, in
2516 the sense that you can equally invoke the .s attribute on them to
2520 the sense that you can equally invoke the .s attribute on them to
2517 automatically get a whitespace-separated string from their contents:
2521 automatically get a whitespace-separated string from their contents:
2518
2522
2519 In [1]: sc -l b=ls *py
2523 In [1]: sc -l b=ls *py
2520
2524
2521 In [2]: b
2525 In [2]: b
2522 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2526 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2523
2527
2524 In [3]: b.s
2528 In [3]: b.s
2525 Out[3]: 'setup.py win32_manual_post_install.py'
2529 Out[3]: 'setup.py win32_manual_post_install.py'
2526
2530
2527 In summary, both the lists and strings used for ouptut capture have
2531 In summary, both the lists and strings used for ouptut capture have
2528 the following special attributes:
2532 the following special attributes:
2529
2533
2530 .l (or .list) : value as list.
2534 .l (or .list) : value as list.
2531 .n (or .nlstr): value as newline-separated string.
2535 .n (or .nlstr): value as newline-separated string.
2532 .s (or .spstr): value as space-separated string.
2536 .s (or .spstr): value as space-separated string.
2533 """
2537 """
2534
2538
2535 opts,args = self.parse_options(parameter_s,'lv')
2539 opts,args = self.parse_options(parameter_s,'lv')
2536 # Try to get a variable name and command to run
2540 # Try to get a variable name and command to run
2537 try:
2541 try:
2538 # the variable name must be obtained from the parse_options
2542 # the variable name must be obtained from the parse_options
2539 # output, which uses shlex.split to strip options out.
2543 # output, which uses shlex.split to strip options out.
2540 var,_ = args.split('=',1)
2544 var,_ = args.split('=',1)
2541 var = var.strip()
2545 var = var.strip()
2542 # But the the command has to be extracted from the original input
2546 # But the the command has to be extracted from the original input
2543 # parameter_s, not on what parse_options returns, to avoid the
2547 # parameter_s, not on what parse_options returns, to avoid the
2544 # quote stripping which shlex.split performs on it.
2548 # quote stripping which shlex.split performs on it.
2545 _,cmd = parameter_s.split('=',1)
2549 _,cmd = parameter_s.split('=',1)
2546 except ValueError:
2550 except ValueError:
2547 var,cmd = '',''
2551 var,cmd = '',''
2548 # If all looks ok, proceed
2552 # If all looks ok, proceed
2549 out,err = self.shell.getoutputerror(cmd)
2553 out,err = self.shell.getoutputerror(cmd)
2550 if err:
2554 if err:
2551 print >> Term.cerr,err
2555 print >> Term.cerr,err
2552 if opts.has_key('l'):
2556 if opts.has_key('l'):
2553 out = SList(out.split('\n'))
2557 out = SList(out.split('\n'))
2554 else:
2558 else:
2555 out = LSString(out)
2559 out = LSString(out)
2556 if opts.has_key('v'):
2560 if opts.has_key('v'):
2557 print '%s ==\n%s' % (var,pformat(out))
2561 print '%s ==\n%s' % (var,pformat(out))
2558 if var:
2562 if var:
2559 self.shell.user_ns.update({var:out})
2563 self.shell.user_ns.update({var:out})
2560 else:
2564 else:
2561 return out
2565 return out
2562
2566
2563 def magic_sx(self, parameter_s=''):
2567 def magic_sx(self, parameter_s=''):
2564 """Shell execute - run a shell command and capture its output.
2568 """Shell execute - run a shell command and capture its output.
2565
2569
2566 %sx command
2570 %sx command
2567
2571
2568 IPython will run the given command using commands.getoutput(), and
2572 IPython will run the given command using commands.getoutput(), and
2569 return the result formatted as a list (split on '\\n'). Since the
2573 return the result formatted as a list (split on '\\n'). Since the
2570 output is _returned_, it will be stored in ipython's regular output
2574 output is _returned_, it will be stored in ipython's regular output
2571 cache Out[N] and in the '_N' automatic variables.
2575 cache Out[N] and in the '_N' automatic variables.
2572
2576
2573 Notes:
2577 Notes:
2574
2578
2575 1) If an input line begins with '!!', then %sx is automatically
2579 1) If an input line begins with '!!', then %sx is automatically
2576 invoked. That is, while:
2580 invoked. That is, while:
2577 !ls
2581 !ls
2578 causes ipython to simply issue system('ls'), typing
2582 causes ipython to simply issue system('ls'), typing
2579 !!ls
2583 !!ls
2580 is a shorthand equivalent to:
2584 is a shorthand equivalent to:
2581 %sx ls
2585 %sx ls
2582
2586
2583 2) %sx differs from %sc in that %sx automatically splits into a list,
2587 2) %sx differs from %sc in that %sx automatically splits into a list,
2584 like '%sc -l'. The reason for this is to make it as easy as possible
2588 like '%sc -l'. The reason for this is to make it as easy as possible
2585 to process line-oriented shell output via further python commands.
2589 to process line-oriented shell output via further python commands.
2586 %sc is meant to provide much finer control, but requires more
2590 %sc is meant to provide much finer control, but requires more
2587 typing.
2591 typing.
2588
2592
2589 3) Just like %sc -l, this is a list with special attributes:
2593 3) Just like %sc -l, this is a list with special attributes:
2590
2594
2591 .l (or .list) : value as list.
2595 .l (or .list) : value as list.
2592 .n (or .nlstr): value as newline-separated string.
2596 .n (or .nlstr): value as newline-separated string.
2593 .s (or .spstr): value as whitespace-separated string.
2597 .s (or .spstr): value as whitespace-separated string.
2594
2598
2595 This is very useful when trying to use such lists as arguments to
2599 This is very useful when trying to use such lists as arguments to
2596 system commands."""
2600 system commands."""
2597
2601
2598 if parameter_s:
2602 if parameter_s:
2599 out,err = self.shell.getoutputerror(parameter_s)
2603 out,err = self.shell.getoutputerror(parameter_s)
2600 if err:
2604 if err:
2601 print >> Term.cerr,err
2605 print >> Term.cerr,err
2602 return SList(out.split('\n'))
2606 return SList(out.split('\n'))
2603
2607
2604 def magic_bg(self, parameter_s=''):
2608 def magic_bg(self, parameter_s=''):
2605 """Run a job in the background, in a separate thread.
2609 """Run a job in the background, in a separate thread.
2606
2610
2607 For example,
2611 For example,
2608
2612
2609 %bg myfunc(x,y,z=1)
2613 %bg myfunc(x,y,z=1)
2610
2614
2611 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2615 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2612 execution starts, a message will be printed indicating the job
2616 execution starts, a message will be printed indicating the job
2613 number. If your job number is 5, you can use
2617 number. If your job number is 5, you can use
2614
2618
2615 myvar = jobs.result(5) or myvar = jobs[5].result
2619 myvar = jobs.result(5) or myvar = jobs[5].result
2616
2620
2617 to assign this result to variable 'myvar'.
2621 to assign this result to variable 'myvar'.
2618
2622
2619 IPython has a job manager, accessible via the 'jobs' object. You can
2623 IPython has a job manager, accessible via the 'jobs' object. You can
2620 type jobs? to get more information about it, and use jobs.<TAB> to see
2624 type jobs? to get more information about it, and use jobs.<TAB> to see
2621 its attributes. All attributes not starting with an underscore are
2625 its attributes. All attributes not starting with an underscore are
2622 meant for public use.
2626 meant for public use.
2623
2627
2624 In particular, look at the jobs.new() method, which is used to create
2628 In particular, look at the jobs.new() method, which is used to create
2625 new jobs. This magic %bg function is just a convenience wrapper
2629 new jobs. This magic %bg function is just a convenience wrapper
2626 around jobs.new(), for expression-based jobs. If you want to create a
2630 around jobs.new(), for expression-based jobs. If you want to create a
2627 new job with an explicit function object and arguments, you must call
2631 new job with an explicit function object and arguments, you must call
2628 jobs.new() directly.
2632 jobs.new() directly.
2629
2633
2630 The jobs.new docstring also describes in detail several important
2634 The jobs.new docstring also describes in detail several important
2631 caveats associated with a thread-based model for background job
2635 caveats associated with a thread-based model for background job
2632 execution. Type jobs.new? for details.
2636 execution. Type jobs.new? for details.
2633
2637
2634 You can check the status of all jobs with jobs.status().
2638 You can check the status of all jobs with jobs.status().
2635
2639
2636 The jobs variable is set by IPython into the Python builtin namespace.
2640 The jobs variable is set by IPython into the Python builtin namespace.
2637 If you ever declare a variable named 'jobs', you will shadow this
2641 If you ever declare a variable named 'jobs', you will shadow this
2638 name. You can either delete your global jobs variable to regain
2642 name. You can either delete your global jobs variable to regain
2639 access to the job manager, or make a new name and assign it manually
2643 access to the job manager, or make a new name and assign it manually
2640 to the manager (stored in IPython's namespace). For example, to
2644 to the manager (stored in IPython's namespace). For example, to
2641 assign the job manager to the Jobs name, use:
2645 assign the job manager to the Jobs name, use:
2642
2646
2643 Jobs = __builtins__.jobs"""
2647 Jobs = __builtins__.jobs"""
2644
2648
2645 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2649 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2646
2650
2647 def magic_store(self, parameter_s=''):
2651 def magic_store(self, parameter_s=''):
2648 """Lightweight persistence for python variables.
2652 """Lightweight persistence for python variables.
2649
2653
2650 Example:
2654 Example:
2651
2655
2652 ville@badger[~]|1> A = ['hello',10,'world']\\
2656 ville@badger[~]|1> A = ['hello',10,'world']\\
2653 ville@badger[~]|2> %store A\\
2657 ville@badger[~]|2> %store A\\
2654 ville@badger[~]|3> Exit
2658 ville@badger[~]|3> Exit
2655
2659
2656 (IPython session is closed and started again...)
2660 (IPython session is closed and started again...)
2657
2661
2658 ville@badger:~$ ipython -p pysh\\
2662 ville@badger:~$ ipython -p pysh\\
2659 ville@badger[~]|1> print A
2663 ville@badger[~]|1> print A
2660
2664
2661 ['hello', 10, 'world']
2665 ['hello', 10, 'world']
2662
2666
2663 Usage:
2667 Usage:
2664
2668
2665 %store - Show list of all variables and their current values\\
2669 %store - Show list of all variables and their current values\\
2666 %store <var> - Store the *current* value of the variable to disk\\
2670 %store <var> - Store the *current* value of the variable to disk\\
2667 %store -d <var> - Remove the variable and its value from storage\\
2671 %store -d <var> - Remove the variable and its value from storage\\
2668 %store -r - Remove all variables from storage\\
2672 %store -r - Remove all variables from storage\\
2669 %store foo >a.txt - Store value of foo to new file a.txt\\
2673 %store foo >a.txt - Store value of foo to new file a.txt\\
2670 %store foo >>a.txt - Append value of foo to file a.txt\\
2674 %store foo >>a.txt - Append value of foo to file a.txt\\
2671
2675
2672 It should be noted that if you change the value of a variable, you
2676 It should be noted that if you change the value of a variable, you
2673 need to %store it again if you want to persist the new value.
2677 need to %store it again if you want to persist the new value.
2674
2678
2675 Note also that the variables will need to be pickleable; most basic
2679 Note also that the variables will need to be pickleable; most basic
2676 python types can be safely %stored.
2680 python types can be safely %stored.
2677 """
2681 """
2678
2682
2679 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2683 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2680 args = argsl.split(None,1)
2684 args = argsl.split(None,1)
2681 ip = self.getapi()
2685 ip = self.getapi()
2682 # delete
2686 # delete
2683 if opts.has_key('d'):
2687 if opts.has_key('d'):
2684 try:
2688 try:
2685 todel = args[0]
2689 todel = args[0]
2686 except IndexError:
2690 except IndexError:
2687 error('You must provide the variable to forget')
2691 error('You must provide the variable to forget')
2688 else:
2692 else:
2689 try:
2693 try:
2690 del self.shell.persist['S:' + todel]
2694 del self.shell.persist['S:' + todel]
2691 except:
2695 except:
2692 error("Can't delete variable '%s'" % todel)
2696 error("Can't delete variable '%s'" % todel)
2693 # reset
2697 # reset
2694 elif opts.has_key('r'):
2698 elif opts.has_key('r'):
2695 for k in self.shell.persist.keys():
2699 for k in self.shell.persist.keys():
2696 if k.startswith('S:'):
2700 if k.startswith('S:'):
2697 del self.shell.persist[k]
2701 del self.shell.persist[k]
2698
2702
2699 # run without arguments -> list variables & values
2703 # run without arguments -> list variables & values
2700 elif not args:
2704 elif not args:
2701 vars = [v[2:] for v in self.shell.persist.keys()
2705 vars = [v[2:] for v in self.shell.persist.keys()
2702 if v.startswith('S:')]
2706 if v.startswith('S:')]
2703 vars.sort()
2707 vars.sort()
2704 if vars:
2708 if vars:
2705 size = max(map(len,vars))
2709 size = max(map(len,vars))
2706 else:
2710 else:
2707 size = 0
2711 size = 0
2708
2712
2709 print 'Stored variables and their in-memory values:'
2713 print 'Stored variables and their in-memory values:'
2710 fmt = '%-'+str(size)+'s -> %s'
2714 fmt = '%-'+str(size)+'s -> %s'
2711 get = self.shell.user_ns.get
2715 get = self.shell.user_ns.get
2712 for var in vars:
2716 for var in vars:
2713 # print 30 first characters from every var
2717 # print 30 first characters from every var
2714 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2718 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2715
2719
2716 # default action - store the variable
2720 # default action - store the variable
2717 else:
2721 else:
2718 # %store foo >file.txt or >>file.txt
2722 # %store foo >file.txt or >>file.txt
2719 if len(args) > 1 and args[1].startswith('>'):
2723 if len(args) > 1 and args[1].startswith('>'):
2720 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2724 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2721 if args[1].startswith('>>'):
2725 if args[1].startswith('>>'):
2722 fil = open(fnam,'a')
2726 fil = open(fnam,'a')
2723 else:
2727 else:
2724 fil = open(fnam,'w')
2728 fil = open(fnam,'w')
2725 obj = ip.ev(args[0])
2729 obj = ip.ev(args[0])
2726 print "Writing '%s' (%s) to file '%s'." % (args[0],
2730 print "Writing '%s' (%s) to file '%s'." % (args[0],
2727 obj.__class__.__name__, fnam)
2731 obj.__class__.__name__, fnam)
2728
2732
2729
2733
2730 if not isinstance (obj,basestring):
2734 if not isinstance (obj,basestring):
2731 pprint(obj,fil)
2735 pprint(obj,fil)
2732 else:
2736 else:
2733 fil.write(obj)
2737 fil.write(obj)
2734 if not obj.endswith('\n'):
2738 if not obj.endswith('\n'):
2735 fil.write('\n')
2739 fil.write('\n')
2736
2740
2737 fil.close()
2741 fil.close()
2738 return
2742 return
2739
2743
2740 # %store foo
2744 # %store foo
2741 obj = self.shell.user_ns[args[0] ]
2745 obj = self.shell.user_ns[args[0] ]
2742 if isinstance(inspect.getmodule(obj), FakeModule):
2746 if isinstance(inspect.getmodule(obj), FakeModule):
2743 print textwrap.dedent("""\
2747 print textwrap.dedent("""\
2744 Warning:%s is %s
2748 Warning:%s is %s
2745 Proper storage of interactively declared classes (or instances
2749 Proper storage of interactively declared classes (or instances
2746 of those classes) is not possible! Only instances
2750 of those classes) is not possible! Only instances
2747 of classes in real modules on file system can be %%store'd.
2751 of classes in real modules on file system can be %%store'd.
2748 """ % (args[0], obj) )
2752 """ % (args[0], obj) )
2749 return
2753 return
2750 pickled = pickle.dumps(obj)
2754 pickled = pickle.dumps(obj)
2751 self.shell.persist[ 'S:' + args[0] ] = pickled
2755 self.shell.persist[ 'S:' + args[0] ] = pickled
2752 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2756 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2753
2757
2754 def magic_bookmark(self, parameter_s=''):
2758 def magic_bookmark(self, parameter_s=''):
2755 """Manage IPython's bookmark system.
2759 """Manage IPython's bookmark system.
2756
2760
2757 %bookmark <name> - set bookmark to current dir
2761 %bookmark <name> - set bookmark to current dir
2758 %bookmark <name> <dir> - set bookmark to <dir>
2762 %bookmark <name> <dir> - set bookmark to <dir>
2759 %bookmark -l - list all bookmarks
2763 %bookmark -l - list all bookmarks
2760 %bookmark -d <name> - remove bookmark
2764 %bookmark -d <name> - remove bookmark
2761 %bookmark -r - remove all bookmarks
2765 %bookmark -r - remove all bookmarks
2762
2766
2763 You can later on access a bookmarked folder with:
2767 You can later on access a bookmarked folder with:
2764 %cd -b <name>
2768 %cd -b <name>
2765 or simply '%cd <name>' if there is no directory called <name> AND
2769 or simply '%cd <name>' if there is no directory called <name> AND
2766 there is such a bookmark defined.
2770 there is such a bookmark defined.
2767
2771
2768 Your bookmarks persist through IPython sessions, but they are
2772 Your bookmarks persist through IPython sessions, but they are
2769 associated with each profile."""
2773 associated with each profile."""
2770
2774
2771 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2775 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2772 if len(args) > 2:
2776 if len(args) > 2:
2773 error('You can only give at most two arguments')
2777 error('You can only give at most two arguments')
2774 return
2778 return
2775
2779
2776 bkms = self.shell.persist.get('bookmarks',{})
2780 bkms = self.shell.persist.get('bookmarks',{})
2777
2781
2778 if opts.has_key('d'):
2782 if opts.has_key('d'):
2779 try:
2783 try:
2780 todel = args[0]
2784 todel = args[0]
2781 except IndexError:
2785 except IndexError:
2782 error('You must provide a bookmark to delete')
2786 error('You must provide a bookmark to delete')
2783 else:
2787 else:
2784 try:
2788 try:
2785 del bkms[todel]
2789 del bkms[todel]
2786 except:
2790 except:
2787 error("Can't delete bookmark '%s'" % todel)
2791 error("Can't delete bookmark '%s'" % todel)
2788 elif opts.has_key('r'):
2792 elif opts.has_key('r'):
2789 bkms = {}
2793 bkms = {}
2790 elif opts.has_key('l'):
2794 elif opts.has_key('l'):
2791 bks = bkms.keys()
2795 bks = bkms.keys()
2792 bks.sort()
2796 bks.sort()
2793 if bks:
2797 if bks:
2794 size = max(map(len,bks))
2798 size = max(map(len,bks))
2795 else:
2799 else:
2796 size = 0
2800 size = 0
2797 fmt = '%-'+str(size)+'s -> %s'
2801 fmt = '%-'+str(size)+'s -> %s'
2798 print 'Current bookmarks:'
2802 print 'Current bookmarks:'
2799 for bk in bks:
2803 for bk in bks:
2800 print fmt % (bk,bkms[bk])
2804 print fmt % (bk,bkms[bk])
2801 else:
2805 else:
2802 if not args:
2806 if not args:
2803 error("You must specify the bookmark name")
2807 error("You must specify the bookmark name")
2804 elif len(args)==1:
2808 elif len(args)==1:
2805 bkms[args[0]] = os.getcwd()
2809 bkms[args[0]] = os.getcwd()
2806 elif len(args)==2:
2810 elif len(args)==2:
2807 bkms[args[0]] = args[1]
2811 bkms[args[0]] = args[1]
2808 self.shell.persist['bookmarks'] = bkms
2812 self.shell.persist['bookmarks'] = bkms
2809
2813
2810 def magic_pycat(self, parameter_s=''):
2814 def magic_pycat(self, parameter_s=''):
2811 """Show a syntax-highlighted file through a pager.
2815 """Show a syntax-highlighted file through a pager.
2812
2816
2813 This magic is similar to the cat utility, but it will assume the file
2817 This magic is similar to the cat utility, but it will assume the file
2814 to be Python source and will show it with syntax highlighting. """
2818 to be Python source and will show it with syntax highlighting. """
2815
2819
2816 filename = get_py_filename(parameter_s)
2820 filename = get_py_filename(parameter_s)
2817 page(self.shell.pycolorize(file_read(filename)),
2821 page(self.shell.pycolorize(file_read(filename)),
2818 screen_lines=self.shell.rc.screen_length)
2822 screen_lines=self.shell.rc.screen_length)
2819
2823
2820 def magic_cpaste(self, parameter_s=''):
2824 def magic_cpaste(self, parameter_s=''):
2821 """Allows you to paste & execute a pre-formatted code block from
2825 """Allows you to paste & execute a pre-formatted code block from
2822 clipboard.
2826 clipboard.
2823
2827
2824 You must terminate the block with '--' (two minus-signs) alone on the
2828 You must terminate the block with '--' (two minus-signs) alone on the
2825 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2829 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2826 is the new sentinel for this operation)
2830 is the new sentinel for this operation)
2827
2831
2828 The block is dedented prior to execution to enable execution of
2832 The block is dedented prior to execution to enable execution of
2829 method definitions. The executed block is also assigned to variable
2833 method definitions. The executed block is also assigned to variable
2830 named 'pasted_block' for later editing with '%edit pasted_block'.
2834 named 'pasted_block' for later editing with '%edit pasted_block'.
2831
2835
2832 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2836 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2833 This assigns the pasted block to variable 'foo' as string, without
2837 This assigns the pasted block to variable 'foo' as string, without
2834 dedenting or executing it.
2838 dedenting or executing it.
2835
2839
2836 Do not be alarmed by garbled output on Windows (it's a readline bug).
2840 Do not be alarmed by garbled output on Windows (it's a readline bug).
2837 Just press enter and type -- (and press enter again) and the block
2841 Just press enter and type -- (and press enter again) and the block
2838 will be what was just pasted.
2842 will be what was just pasted.
2839
2843
2840 IPython statements (magics, shell escapes) are not supported (yet).
2844 IPython statements (magics, shell escapes) are not supported (yet).
2841 """
2845 """
2842 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2846 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2843 par = args.strip()
2847 par = args.strip()
2844 sentinel = opts.get('s','--')
2848 sentinel = opts.get('s','--')
2845
2849
2846 from IPython import iplib
2850 from IPython import iplib
2847 lines = []
2851 lines = []
2848 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2852 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2849 while 1:
2853 while 1:
2850 l = iplib.raw_input_original(':')
2854 l = iplib.raw_input_original(':')
2851 if l ==sentinel:
2855 if l ==sentinel:
2852 break
2856 break
2853 lines.append(l)
2857 lines.append(l)
2854 block = "\n".join(lines) + '\n'
2858 block = "\n".join(lines) + '\n'
2855 #print "block:\n",block
2859 #print "block:\n",block
2856 if not par:
2860 if not par:
2857 b = textwrap.dedent(block)
2861 b = textwrap.dedent(block)
2858 exec b in self.user_ns
2862 exec b in self.user_ns
2859 self.user_ns['pasted_block'] = b
2863 self.user_ns['pasted_block'] = b
2860 else:
2864 else:
2861 self.user_ns[par] = block
2865 self.user_ns[par] = block
2862 print "Block assigned to '%s'" % par
2866 print "Block assigned to '%s'" % par
2863 def magic_quickref(self,arg):
2867 def magic_quickref(self,arg):
2864 import IPython.usage
2868 import IPython.usage
2865 page(IPython.usage.quick_reference)
2869 page(IPython.usage.quick_reference)
2866 del IPython.usage
2870 del IPython.usage
2867
2871
2868
2872
2869 # end Magic
2873 # end Magic
@@ -1,5102 +1,5106 b''
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
2
2
3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
4 'ipython' at argv[0]) executed through command line.
4 'ipython' at argv[0]) executed through command line.
5 NOTE: this DEPRECATES calling ipython with multiple scripts
5 NOTE: this DEPRECATES calling ipython with multiple scripts
6 ("ipython a.py b.py c.py")
6 ("ipython a.py b.py c.py")
7
7
8 * iplib.py, hooks.py: Added configurable input prefilter,
8 * iplib.py, hooks.py: Added configurable input prefilter,
9 named 'input_prefilter'. See ext_rescapture.py for example
9 named 'input_prefilter'. See ext_rescapture.py for example
10 usage.
10 usage.
11
11
12 * ext_rescapture.py, Magic.py: Better system command output capture
12 * ext_rescapture.py, Magic.py: Better system command output capture
13 through 'var = !ls' (deprecates user-visible %sc). Same notation
13 through 'var = !ls' (deprecates user-visible %sc). Same notation
14 applies for magics, 'var = %alias' assigns alias list to var.
14 applies for magics, 'var = %alias' assigns alias list to var.
15
15
16 * ipapi.py: added meta() for accessing extension-usable data store.
16 * ipapi.py: added meta() for accessing extension-usable data store.
17
17
18 * iplib.py: added InteractiveShell.getapi(). New magics should be
18 * iplib.py: added InteractiveShell.getapi(). New magics should be
19 written doing self.getapi() instead of using the shell directly.
19 written doing self.getapi() instead of using the shell directly.
20
20
21 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
21 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
22 %store foo >> ~/myfoo.txt to store variables to files (in clean
22 %store foo >> ~/myfoo.txt to store variables to files (in clean
23 textual form, not a restorable pickle).
23 textual form, not a restorable pickle).
24
24
25 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
25 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
26
26
27 * usage.py, Magic.py: added %quickref
27 * usage.py, Magic.py: added %quickref
28
28
29 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
29 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
30
30
31 * GetoptErrors when invoking magics etc. with wrong args
32 are now more helpful:
33 GetoptError: option -l not recognized (allowed: "qb" )
34
31 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
35 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
32
36
33 * IPython/demo.py (Demo.show): Flush stdout after each block, so
37 * IPython/demo.py (Demo.show): Flush stdout after each block, so
34 computationally intensive blocks don't appear to stall the demo.
38 computationally intensive blocks don't appear to stall the demo.
35
39
36 2006-01-24 Ville Vainio <vivainio@gmail.com>
40 2006-01-24 Ville Vainio <vivainio@gmail.com>
37
41
38 * iplib.py, hooks.py: 'result_display' hook can return a non-None
42 * iplib.py, hooks.py: 'result_display' hook can return a non-None
39 value to manipulate resulting history entry.
43 value to manipulate resulting history entry.
40
44
41 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
45 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
42 to instance methods of IPApi class, to make extending an embedded
46 to instance methods of IPApi class, to make extending an embedded
43 IPython feasible. See ext_rehashdir.py for example usage.
47 IPython feasible. See ext_rehashdir.py for example usage.
44
48
45 * Merged 1071-1076 from banches/0.7.1
49 * Merged 1071-1076 from banches/0.7.1
46
50
47
51
48 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
52 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
49
53
50 * tools/release (daystamp): Fix build tools to use the new
54 * tools/release (daystamp): Fix build tools to use the new
51 eggsetup.py script to build lightweight eggs.
55 eggsetup.py script to build lightweight eggs.
52
56
53 * Applied changesets 1062 and 1064 before 0.7.1 release.
57 * Applied changesets 1062 and 1064 before 0.7.1 release.
54
58
55 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
59 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
56 see the raw input history (without conversions like %ls ->
60 see the raw input history (without conversions like %ls ->
57 ipmagic("ls")). After a request from W. Stein, SAGE
61 ipmagic("ls")). After a request from W. Stein, SAGE
58 (http://modular.ucsd.edu/sage) developer. This information is
62 (http://modular.ucsd.edu/sage) developer. This information is
59 stored in the input_hist_raw attribute of the IPython instance, so
63 stored in the input_hist_raw attribute of the IPython instance, so
60 developers can access it if needed (it's an InputList instance).
64 developers can access it if needed (it's an InputList instance).
61
65
62 * Versionstring = 0.7.2.svn
66 * Versionstring = 0.7.2.svn
63
67
64 * eggsetup.py: A separate script for constructing eggs, creates
68 * eggsetup.py: A separate script for constructing eggs, creates
65 proper launch scripts even on Windows (an .exe file in
69 proper launch scripts even on Windows (an .exe file in
66 \python24\scripts).
70 \python24\scripts).
67
71
68 * ipapi.py: launch_new_instance, launch entry point needed for the
72 * ipapi.py: launch_new_instance, launch entry point needed for the
69 egg.
73 egg.
70
74
71 2006-01-23 Ville Vainio <vivainio@gmail.com>
75 2006-01-23 Ville Vainio <vivainio@gmail.com>
72
76
73 * Added %cpaste magic for pasting python code
77 * Added %cpaste magic for pasting python code
74
78
75 2006-01-22 Ville Vainio <vivainio@gmail.com>
79 2006-01-22 Ville Vainio <vivainio@gmail.com>
76
80
77 * Merge from branches/0.7.1 into trunk, revs 1052-1057
81 * Merge from branches/0.7.1 into trunk, revs 1052-1057
78
82
79 * Versionstring = 0.7.2.svn
83 * Versionstring = 0.7.2.svn
80
84
81 * eggsetup.py: A separate script for constructing eggs, creates
85 * eggsetup.py: A separate script for constructing eggs, creates
82 proper launch scripts even on Windows (an .exe file in
86 proper launch scripts even on Windows (an .exe file in
83 \python24\scripts).
87 \python24\scripts).
84
88
85 * ipapi.py: launch_new_instance, launch entry point needed for the
89 * ipapi.py: launch_new_instance, launch entry point needed for the
86 egg.
90 egg.
87
91
88 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
92 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
89
93
90 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
94 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
91 %pfile foo would print the file for foo even if it was a binary.
95 %pfile foo would print the file for foo even if it was a binary.
92 Now, extensions '.so' and '.dll' are skipped.
96 Now, extensions '.so' and '.dll' are skipped.
93
97
94 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
98 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
95 bug, where macros would fail in all threaded modes. I'm not 100%
99 bug, where macros would fail in all threaded modes. I'm not 100%
96 sure, so I'm going to put out an rc instead of making a release
100 sure, so I'm going to put out an rc instead of making a release
97 today, and wait for feedback for at least a few days.
101 today, and wait for feedback for at least a few days.
98
102
99 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
103 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
100 it...) the handling of pasting external code with autoindent on.
104 it...) the handling of pasting external code with autoindent on.
101 To get out of a multiline input, the rule will appear for most
105 To get out of a multiline input, the rule will appear for most
102 users unchanged: two blank lines or change the indent level
106 users unchanged: two blank lines or change the indent level
103 proposed by IPython. But there is a twist now: you can
107 proposed by IPython. But there is a twist now: you can
104 add/subtract only *one or two spaces*. If you add/subtract three
108 add/subtract only *one or two spaces*. If you add/subtract three
105 or more (unless you completely delete the line), IPython will
109 or more (unless you completely delete the line), IPython will
106 accept that line, and you'll need to enter a second one of pure
110 accept that line, and you'll need to enter a second one of pure
107 whitespace. I know it sounds complicated, but I can't find a
111 whitespace. I know it sounds complicated, but I can't find a
108 different solution that covers all the cases, with the right
112 different solution that covers all the cases, with the right
109 heuristics. Hopefully in actual use, nobody will really notice
113 heuristics. Hopefully in actual use, nobody will really notice
110 all these strange rules and things will 'just work'.
114 all these strange rules and things will 'just work'.
111
115
112 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
116 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
113
117
114 * IPython/iplib.py (interact): catch exceptions which can be
118 * IPython/iplib.py (interact): catch exceptions which can be
115 triggered asynchronously by signal handlers. Thanks to an
119 triggered asynchronously by signal handlers. Thanks to an
116 automatic crash report, submitted by Colin Kingsley
120 automatic crash report, submitted by Colin Kingsley
117 <tercel-AT-gentoo.org>.
121 <tercel-AT-gentoo.org>.
118
122
119 2006-01-20 Ville Vainio <vivainio@gmail.com>
123 2006-01-20 Ville Vainio <vivainio@gmail.com>
120
124
121 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
125 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
122 (%rehashdir, very useful, try it out) of how to extend ipython
126 (%rehashdir, very useful, try it out) of how to extend ipython
123 with new magics. Also added Extensions dir to pythonpath to make
127 with new magics. Also added Extensions dir to pythonpath to make
124 importing extensions easy.
128 importing extensions easy.
125
129
126 * %store now complains when trying to store interactively declared
130 * %store now complains when trying to store interactively declared
127 classes / instances of those classes.
131 classes / instances of those classes.
128
132
129 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
133 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
130 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
134 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
131 if they exist, and ipy_user_conf.py with some defaults is created for
135 if they exist, and ipy_user_conf.py with some defaults is created for
132 the user.
136 the user.
133
137
134 * Startup rehashing done by the config file, not InterpreterExec.
138 * Startup rehashing done by the config file, not InterpreterExec.
135 This means system commands are available even without selecting the
139 This means system commands are available even without selecting the
136 pysh profile. It's the sensible default after all.
140 pysh profile. It's the sensible default after all.
137
141
138 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
142 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
139
143
140 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
144 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
141 multiline code with autoindent on working. But I am really not
145 multiline code with autoindent on working. But I am really not
142 sure, so this needs more testing. Will commit a debug-enabled
146 sure, so this needs more testing. Will commit a debug-enabled
143 version for now, while I test it some more, so that Ville and
147 version for now, while I test it some more, so that Ville and
144 others may also catch any problems. Also made
148 others may also catch any problems. Also made
145 self.indent_current_str() a method, to ensure that there's no
149 self.indent_current_str() a method, to ensure that there's no
146 chance of the indent space count and the corresponding string
150 chance of the indent space count and the corresponding string
147 falling out of sync. All code needing the string should just call
151 falling out of sync. All code needing the string should just call
148 the method.
152 the method.
149
153
150 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
154 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
151
155
152 * IPython/Magic.py (magic_edit): fix check for when users don't
156 * IPython/Magic.py (magic_edit): fix check for when users don't
153 save their output files, the try/except was in the wrong section.
157 save their output files, the try/except was in the wrong section.
154
158
155 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
159 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
156
160
157 * IPython/Magic.py (magic_run): fix __file__ global missing from
161 * IPython/Magic.py (magic_run): fix __file__ global missing from
158 script's namespace when executed via %run. After a report by
162 script's namespace when executed via %run. After a report by
159 Vivian.
163 Vivian.
160
164
161 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
165 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
162 when using python 2.4. The parent constructor changed in 2.4, and
166 when using python 2.4. The parent constructor changed in 2.4, and
163 we need to track it directly (we can't call it, as it messes up
167 we need to track it directly (we can't call it, as it messes up
164 readline and tab-completion inside our pdb would stop working).
168 readline and tab-completion inside our pdb would stop working).
165 After a bug report by R. Bernstein <rocky-AT-panix.com>.
169 After a bug report by R. Bernstein <rocky-AT-panix.com>.
166
170
167 2006-01-16 Ville Vainio <vivainio@gmail.com>
171 2006-01-16 Ville Vainio <vivainio@gmail.com>
168
172
169 * Ipython/magic.py:Reverted back to old %edit functionality
173 * Ipython/magic.py:Reverted back to old %edit functionality
170 that returns file contents on exit.
174 that returns file contents on exit.
171
175
172 * IPython/path.py: Added Jason Orendorff's "path" module to
176 * IPython/path.py: Added Jason Orendorff's "path" module to
173 IPython tree, http://www.jorendorff.com/articles/python/path/.
177 IPython tree, http://www.jorendorff.com/articles/python/path/.
174 You can get path objects conveniently through %sc, and !!, e.g.:
178 You can get path objects conveniently through %sc, and !!, e.g.:
175 sc files=ls
179 sc files=ls
176 for p in files.paths: # or files.p
180 for p in files.paths: # or files.p
177 print p,p.mtime
181 print p,p.mtime
178
182
179 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
183 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
180 now work again without considering the exclusion regexp -
184 now work again without considering the exclusion regexp -
181 hence, things like ',foo my/path' turn to 'foo("my/path")'
185 hence, things like ',foo my/path' turn to 'foo("my/path")'
182 instead of syntax error.
186 instead of syntax error.
183
187
184
188
185 2006-01-14 Ville Vainio <vivainio@gmail.com>
189 2006-01-14 Ville Vainio <vivainio@gmail.com>
186
190
187 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
191 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
188 ipapi decorators for python 2.4 users, options() provides access to rc
192 ipapi decorators for python 2.4 users, options() provides access to rc
189 data.
193 data.
190
194
191 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
195 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
192 as path separators (even on Linux ;-). Space character after
196 as path separators (even on Linux ;-). Space character after
193 backslash (as yielded by tab completer) is still space;
197 backslash (as yielded by tab completer) is still space;
194 "%cd long\ name" works as expected.
198 "%cd long\ name" works as expected.
195
199
196 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
200 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
197 as "chain of command", with priority. API stays the same,
201 as "chain of command", with priority. API stays the same,
198 TryNext exception raised by a hook function signals that
202 TryNext exception raised by a hook function signals that
199 current hook failed and next hook should try handling it, as
203 current hook failed and next hook should try handling it, as
200 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
204 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
201 requested configurable display hook, which is now implemented.
205 requested configurable display hook, which is now implemented.
202
206
203 2006-01-13 Ville Vainio <vivainio@gmail.com>
207 2006-01-13 Ville Vainio <vivainio@gmail.com>
204
208
205 * IPython/platutils*.py: platform specific utility functions,
209 * IPython/platutils*.py: platform specific utility functions,
206 so far only set_term_title is implemented (change terminal
210 so far only set_term_title is implemented (change terminal
207 label in windowing systems). %cd now changes the title to
211 label in windowing systems). %cd now changes the title to
208 current dir.
212 current dir.
209
213
210 * IPython/Release.py: Added myself to "authors" list,
214 * IPython/Release.py: Added myself to "authors" list,
211 had to create new files.
215 had to create new files.
212
216
213 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
217 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
214 shell escape; not a known bug but had potential to be one in the
218 shell escape; not a known bug but had potential to be one in the
215 future.
219 future.
216
220
217 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
221 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
218 extension API for IPython! See the module for usage example. Fix
222 extension API for IPython! See the module for usage example. Fix
219 OInspect for docstring-less magic functions.
223 OInspect for docstring-less magic functions.
220
224
221
225
222 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
226 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
223
227
224 * IPython/iplib.py (raw_input): temporarily deactivate all
228 * IPython/iplib.py (raw_input): temporarily deactivate all
225 attempts at allowing pasting of code with autoindent on. It
229 attempts at allowing pasting of code with autoindent on. It
226 introduced bugs (reported by Prabhu) and I can't seem to find a
230 introduced bugs (reported by Prabhu) and I can't seem to find a
227 robust combination which works in all cases. Will have to revisit
231 robust combination which works in all cases. Will have to revisit
228 later.
232 later.
229
233
230 * IPython/genutils.py: remove isspace() function. We've dropped
234 * IPython/genutils.py: remove isspace() function. We've dropped
231 2.2 compatibility, so it's OK to use the string method.
235 2.2 compatibility, so it's OK to use the string method.
232
236
233 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
237 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
234
238
235 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
239 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
236 matching what NOT to autocall on, to include all python binary
240 matching what NOT to autocall on, to include all python binary
237 operators (including things like 'and', 'or', 'is' and 'in').
241 operators (including things like 'and', 'or', 'is' and 'in').
238 Prompted by a bug report on 'foo & bar', but I realized we had
242 Prompted by a bug report on 'foo & bar', but I realized we had
239 many more potential bug cases with other operators. The regexp is
243 many more potential bug cases with other operators. The regexp is
240 self.re_exclude_auto, it's fairly commented.
244 self.re_exclude_auto, it's fairly commented.
241
245
242 2006-01-12 Ville Vainio <vivainio@gmail.com>
246 2006-01-12 Ville Vainio <vivainio@gmail.com>
243
247
244 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
248 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
245 Prettified and hardened string/backslash quoting with ipsystem(),
249 Prettified and hardened string/backslash quoting with ipsystem(),
246 ipalias() and ipmagic(). Now even \ characters are passed to
250 ipalias() and ipmagic(). Now even \ characters are passed to
247 %magics, !shell escapes and aliases exactly as they are in the
251 %magics, !shell escapes and aliases exactly as they are in the
248 ipython command line. Should improve backslash experience,
252 ipython command line. Should improve backslash experience,
249 particularly in Windows (path delimiter for some commands that
253 particularly in Windows (path delimiter for some commands that
250 won't understand '/'), but Unix benefits as well (regexps). %cd
254 won't understand '/'), but Unix benefits as well (regexps). %cd
251 magic still doesn't support backslash path delimiters, though. Also
255 magic still doesn't support backslash path delimiters, though. Also
252 deleted all pretense of supporting multiline command strings in
256 deleted all pretense of supporting multiline command strings in
253 !system or %magic commands. Thanks to Jerry McRae for suggestions.
257 !system or %magic commands. Thanks to Jerry McRae for suggestions.
254
258
255 * doc/build_doc_instructions.txt added. Documentation on how to
259 * doc/build_doc_instructions.txt added. Documentation on how to
256 use doc/update_manual.py, added yesterday. Both files contributed
260 use doc/update_manual.py, added yesterday. Both files contributed
257 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
261 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
258 doc/*.sh for deprecation at a later date.
262 doc/*.sh for deprecation at a later date.
259
263
260 * /ipython.py Added ipython.py to root directory for
264 * /ipython.py Added ipython.py to root directory for
261 zero-installation (tar xzvf ipython.tgz; cd ipython; python
265 zero-installation (tar xzvf ipython.tgz; cd ipython; python
262 ipython.py) and development convenience (no need to kee doing
266 ipython.py) and development convenience (no need to kee doing
263 "setup.py install" between changes).
267 "setup.py install" between changes).
264
268
265 * Made ! and !! shell escapes work (again) in multiline expressions:
269 * Made ! and !! shell escapes work (again) in multiline expressions:
266 if 1:
270 if 1:
267 !ls
271 !ls
268 !!ls
272 !!ls
269
273
270 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
274 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
271
275
272 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
276 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
273 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
277 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
274 module in case-insensitive installation. Was causing crashes
278 module in case-insensitive installation. Was causing crashes
275 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
279 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
276
280
277 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
281 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
278 <marienz-AT-gentoo.org>, closes
282 <marienz-AT-gentoo.org>, closes
279 http://www.scipy.net/roundup/ipython/issue51.
283 http://www.scipy.net/roundup/ipython/issue51.
280
284
281 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
285 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
282
286
283 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
287 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
284 problem of excessive CPU usage under *nix and keyboard lag under
288 problem of excessive CPU usage under *nix and keyboard lag under
285 win32.
289 win32.
286
290
287 2006-01-10 *** Released version 0.7.0
291 2006-01-10 *** Released version 0.7.0
288
292
289 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
290
294
291 * IPython/Release.py (revision): tag version number to 0.7.0,
295 * IPython/Release.py (revision): tag version number to 0.7.0,
292 ready for release.
296 ready for release.
293
297
294 * IPython/Magic.py (magic_edit): Add print statement to %edit so
298 * IPython/Magic.py (magic_edit): Add print statement to %edit so
295 it informs the user of the name of the temp. file used. This can
299 it informs the user of the name of the temp. file used. This can
296 help if you decide later to reuse that same file, so you know
300 help if you decide later to reuse that same file, so you know
297 where to copy the info from.
301 where to copy the info from.
298
302
299 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
303 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
300
304
301 * setup_bdist_egg.py: little script to build an egg. Added
305 * setup_bdist_egg.py: little script to build an egg. Added
302 support in the release tools as well.
306 support in the release tools as well.
303
307
304 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
308 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
305
309
306 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
310 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
307 version selection (new -wxversion command line and ipythonrc
311 version selection (new -wxversion command line and ipythonrc
308 parameter). Patch contributed by Arnd Baecker
312 parameter). Patch contributed by Arnd Baecker
309 <arnd.baecker-AT-web.de>.
313 <arnd.baecker-AT-web.de>.
310
314
311 * IPython/iplib.py (embed_mainloop): fix tab-completion in
315 * IPython/iplib.py (embed_mainloop): fix tab-completion in
312 embedded instances, for variables defined at the interactive
316 embedded instances, for variables defined at the interactive
313 prompt of the embedded ipython. Reported by Arnd.
317 prompt of the embedded ipython. Reported by Arnd.
314
318
315 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
319 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
316 it can be used as a (stateful) toggle, or with a direct parameter.
320 it can be used as a (stateful) toggle, or with a direct parameter.
317
321
318 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
322 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
319 could be triggered in certain cases and cause the traceback
323 could be triggered in certain cases and cause the traceback
320 printer not to work.
324 printer not to work.
321
325
322 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
326 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
323
327
324 * IPython/iplib.py (_should_recompile): Small fix, closes
328 * IPython/iplib.py (_should_recompile): Small fix, closes
325 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
329 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
326
330
327 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
331 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
328
332
329 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
333 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
330 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
334 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
331 Moad for help with tracking it down.
335 Moad for help with tracking it down.
332
336
333 * IPython/iplib.py (handle_auto): fix autocall handling for
337 * IPython/iplib.py (handle_auto): fix autocall handling for
334 objects which support BOTH __getitem__ and __call__ (so that f [x]
338 objects which support BOTH __getitem__ and __call__ (so that f [x]
335 is left alone, instead of becoming f([x]) automatically).
339 is left alone, instead of becoming f([x]) automatically).
336
340
337 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
341 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
338 Ville's patch.
342 Ville's patch.
339
343
340 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
344 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
341
345
342 * IPython/iplib.py (handle_auto): changed autocall semantics to
346 * IPython/iplib.py (handle_auto): changed autocall semantics to
343 include 'smart' mode, where the autocall transformation is NOT
347 include 'smart' mode, where the autocall transformation is NOT
344 applied if there are no arguments on the line. This allows you to
348 applied if there are no arguments on the line. This allows you to
345 just type 'foo' if foo is a callable to see its internal form,
349 just type 'foo' if foo is a callable to see its internal form,
346 instead of having it called with no arguments (typically a
350 instead of having it called with no arguments (typically a
347 mistake). The old 'full' autocall still exists: for that, you
351 mistake). The old 'full' autocall still exists: for that, you
348 need to set the 'autocall' parameter to 2 in your ipythonrc file.
352 need to set the 'autocall' parameter to 2 in your ipythonrc file.
349
353
350 * IPython/completer.py (Completer.attr_matches): add
354 * IPython/completer.py (Completer.attr_matches): add
351 tab-completion support for Enthoughts' traits. After a report by
355 tab-completion support for Enthoughts' traits. After a report by
352 Arnd and a patch by Prabhu.
356 Arnd and a patch by Prabhu.
353
357
354 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
358 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
355
359
356 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
360 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
357 Schmolck's patch to fix inspect.getinnerframes().
361 Schmolck's patch to fix inspect.getinnerframes().
358
362
359 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
363 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
360 for embedded instances, regarding handling of namespaces and items
364 for embedded instances, regarding handling of namespaces and items
361 added to the __builtin__ one. Multiple embedded instances and
365 added to the __builtin__ one. Multiple embedded instances and
362 recursive embeddings should work better now (though I'm not sure
366 recursive embeddings should work better now (though I'm not sure
363 I've got all the corner cases fixed, that code is a bit of a brain
367 I've got all the corner cases fixed, that code is a bit of a brain
364 twister).
368 twister).
365
369
366 * IPython/Magic.py (magic_edit): added support to edit in-memory
370 * IPython/Magic.py (magic_edit): added support to edit in-memory
367 macros (automatically creates the necessary temp files). %edit
371 macros (automatically creates the necessary temp files). %edit
368 also doesn't return the file contents anymore, it's just noise.
372 also doesn't return the file contents anymore, it's just noise.
369
373
370 * IPython/completer.py (Completer.attr_matches): revert change to
374 * IPython/completer.py (Completer.attr_matches): revert change to
371 complete only on attributes listed in __all__. I realized it
375 complete only on attributes listed in __all__. I realized it
372 cripples the tab-completion system as a tool for exploring the
376 cripples the tab-completion system as a tool for exploring the
373 internals of unknown libraries (it renders any non-__all__
377 internals of unknown libraries (it renders any non-__all__
374 attribute off-limits). I got bit by this when trying to see
378 attribute off-limits). I got bit by this when trying to see
375 something inside the dis module.
379 something inside the dis module.
376
380
377 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
381 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
378
382
379 * IPython/iplib.py (InteractiveShell.__init__): add .meta
383 * IPython/iplib.py (InteractiveShell.__init__): add .meta
380 namespace for users and extension writers to hold data in. This
384 namespace for users and extension writers to hold data in. This
381 follows the discussion in
385 follows the discussion in
382 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
386 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
383
387
384 * IPython/completer.py (IPCompleter.complete): small patch to help
388 * IPython/completer.py (IPCompleter.complete): small patch to help
385 tab-completion under Emacs, after a suggestion by John Barnard
389 tab-completion under Emacs, after a suggestion by John Barnard
386 <barnarj-AT-ccf.org>.
390 <barnarj-AT-ccf.org>.
387
391
388 * IPython/Magic.py (Magic.extract_input_slices): added support for
392 * IPython/Magic.py (Magic.extract_input_slices): added support for
389 the slice notation in magics to use N-M to represent numbers N...M
393 the slice notation in magics to use N-M to represent numbers N...M
390 (closed endpoints). This is used by %macro and %save.
394 (closed endpoints). This is used by %macro and %save.
391
395
392 * IPython/completer.py (Completer.attr_matches): for modules which
396 * IPython/completer.py (Completer.attr_matches): for modules which
393 define __all__, complete only on those. After a patch by Jeffrey
397 define __all__, complete only on those. After a patch by Jeffrey
394 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
398 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
395 speed up this routine.
399 speed up this routine.
396
400
397 * IPython/Logger.py (Logger.log): fix a history handling bug. I
401 * IPython/Logger.py (Logger.log): fix a history handling bug. I
398 don't know if this is the end of it, but the behavior now is
402 don't know if this is the end of it, but the behavior now is
399 certainly much more correct. Note that coupled with macros,
403 certainly much more correct. Note that coupled with macros,
400 slightly surprising (at first) behavior may occur: a macro will in
404 slightly surprising (at first) behavior may occur: a macro will in
401 general expand to multiple lines of input, so upon exiting, the
405 general expand to multiple lines of input, so upon exiting, the
402 in/out counters will both be bumped by the corresponding amount
406 in/out counters will both be bumped by the corresponding amount
403 (as if the macro's contents had been typed interactively). Typing
407 (as if the macro's contents had been typed interactively). Typing
404 %hist will reveal the intermediate (silently processed) lines.
408 %hist will reveal the intermediate (silently processed) lines.
405
409
406 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
410 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
407 pickle to fail (%run was overwriting __main__ and not restoring
411 pickle to fail (%run was overwriting __main__ and not restoring
408 it, but pickle relies on __main__ to operate).
412 it, but pickle relies on __main__ to operate).
409
413
410 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
414 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
411 using properties, but forgot to make the main InteractiveShell
415 using properties, but forgot to make the main InteractiveShell
412 class a new-style class. Properties fail silently, and
416 class a new-style class. Properties fail silently, and
413 misteriously, with old-style class (getters work, but
417 misteriously, with old-style class (getters work, but
414 setters don't do anything).
418 setters don't do anything).
415
419
416 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
420 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
417
421
418 * IPython/Magic.py (magic_history): fix history reporting bug (I
422 * IPython/Magic.py (magic_history): fix history reporting bug (I
419 know some nasties are still there, I just can't seem to find a
423 know some nasties are still there, I just can't seem to find a
420 reproducible test case to track them down; the input history is
424 reproducible test case to track them down; the input history is
421 falling out of sync...)
425 falling out of sync...)
422
426
423 * IPython/iplib.py (handle_shell_escape): fix bug where both
427 * IPython/iplib.py (handle_shell_escape): fix bug where both
424 aliases and system accesses where broken for indented code (such
428 aliases and system accesses where broken for indented code (such
425 as loops).
429 as loops).
426
430
427 * IPython/genutils.py (shell): fix small but critical bug for
431 * IPython/genutils.py (shell): fix small but critical bug for
428 win32 system access.
432 win32 system access.
429
433
430 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
434 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
431
435
432 * IPython/iplib.py (showtraceback): remove use of the
436 * IPython/iplib.py (showtraceback): remove use of the
433 sys.last_{type/value/traceback} structures, which are non
437 sys.last_{type/value/traceback} structures, which are non
434 thread-safe.
438 thread-safe.
435 (_prefilter): change control flow to ensure that we NEVER
439 (_prefilter): change control flow to ensure that we NEVER
436 introspect objects when autocall is off. This will guarantee that
440 introspect objects when autocall is off. This will guarantee that
437 having an input line of the form 'x.y', where access to attribute
441 having an input line of the form 'x.y', where access to attribute
438 'y' has side effects, doesn't trigger the side effect TWICE. It
442 'y' has side effects, doesn't trigger the side effect TWICE. It
439 is important to note that, with autocall on, these side effects
443 is important to note that, with autocall on, these side effects
440 can still happen.
444 can still happen.
441 (ipsystem): new builtin, to complete the ip{magic/alias/system}
445 (ipsystem): new builtin, to complete the ip{magic/alias/system}
442 trio. IPython offers these three kinds of special calls which are
446 trio. IPython offers these three kinds of special calls which are
443 not python code, and it's a good thing to have their call method
447 not python code, and it's a good thing to have their call method
444 be accessible as pure python functions (not just special syntax at
448 be accessible as pure python functions (not just special syntax at
445 the command line). It gives us a better internal implementation
449 the command line). It gives us a better internal implementation
446 structure, as well as exposing these for user scripting more
450 structure, as well as exposing these for user scripting more
447 cleanly.
451 cleanly.
448
452
449 * IPython/macro.py (Macro.__init__): moved macros to a standalone
453 * IPython/macro.py (Macro.__init__): moved macros to a standalone
450 file. Now that they'll be more likely to be used with the
454 file. Now that they'll be more likely to be used with the
451 persistance system (%store), I want to make sure their module path
455 persistance system (%store), I want to make sure their module path
452 doesn't change in the future, so that we don't break things for
456 doesn't change in the future, so that we don't break things for
453 users' persisted data.
457 users' persisted data.
454
458
455 * IPython/iplib.py (autoindent_update): move indentation
459 * IPython/iplib.py (autoindent_update): move indentation
456 management into the _text_ processing loop, not the keyboard
460 management into the _text_ processing loop, not the keyboard
457 interactive one. This is necessary to correctly process non-typed
461 interactive one. This is necessary to correctly process non-typed
458 multiline input (such as macros).
462 multiline input (such as macros).
459
463
460 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
464 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
461 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
465 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
462 which was producing problems in the resulting manual.
466 which was producing problems in the resulting manual.
463 (magic_whos): improve reporting of instances (show their class,
467 (magic_whos): improve reporting of instances (show their class,
464 instead of simply printing 'instance' which isn't terribly
468 instead of simply printing 'instance' which isn't terribly
465 informative).
469 informative).
466
470
467 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
471 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
468 (minor mods) to support network shares under win32.
472 (minor mods) to support network shares under win32.
469
473
470 * IPython/winconsole.py (get_console_size): add new winconsole
474 * IPython/winconsole.py (get_console_size): add new winconsole
471 module and fixes to page_dumb() to improve its behavior under
475 module and fixes to page_dumb() to improve its behavior under
472 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
476 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
473
477
474 * IPython/Magic.py (Macro): simplified Macro class to just
478 * IPython/Magic.py (Macro): simplified Macro class to just
475 subclass list. We've had only 2.2 compatibility for a very long
479 subclass list. We've had only 2.2 compatibility for a very long
476 time, yet I was still avoiding subclassing the builtin types. No
480 time, yet I was still avoiding subclassing the builtin types. No
477 more (I'm also starting to use properties, though I won't shift to
481 more (I'm also starting to use properties, though I won't shift to
478 2.3-specific features quite yet).
482 2.3-specific features quite yet).
479 (magic_store): added Ville's patch for lightweight variable
483 (magic_store): added Ville's patch for lightweight variable
480 persistence, after a request on the user list by Matt Wilkie
484 persistence, after a request on the user list by Matt Wilkie
481 <maphew-AT-gmail.com>. The new %store magic's docstring has full
485 <maphew-AT-gmail.com>. The new %store magic's docstring has full
482 details.
486 details.
483
487
484 * IPython/iplib.py (InteractiveShell.post_config_initialization):
488 * IPython/iplib.py (InteractiveShell.post_config_initialization):
485 changed the default logfile name from 'ipython.log' to
489 changed the default logfile name from 'ipython.log' to
486 'ipython_log.py'. These logs are real python files, and now that
490 'ipython_log.py'. These logs are real python files, and now that
487 we have much better multiline support, people are more likely to
491 we have much better multiline support, people are more likely to
488 want to use them as such. Might as well name them correctly.
492 want to use them as such. Might as well name them correctly.
489
493
490 * IPython/Magic.py: substantial cleanup. While we can't stop
494 * IPython/Magic.py: substantial cleanup. While we can't stop
491 using magics as mixins, due to the existing customizations 'out
495 using magics as mixins, due to the existing customizations 'out
492 there' which rely on the mixin naming conventions, at least I
496 there' which rely on the mixin naming conventions, at least I
493 cleaned out all cross-class name usage. So once we are OK with
497 cleaned out all cross-class name usage. So once we are OK with
494 breaking compatibility, the two systems can be separated.
498 breaking compatibility, the two systems can be separated.
495
499
496 * IPython/Logger.py: major cleanup. This one is NOT a mixin
500 * IPython/Logger.py: major cleanup. This one is NOT a mixin
497 anymore, and the class is a fair bit less hideous as well. New
501 anymore, and the class is a fair bit less hideous as well. New
498 features were also introduced: timestamping of input, and logging
502 features were also introduced: timestamping of input, and logging
499 of output results. These are user-visible with the -t and -o
503 of output results. These are user-visible with the -t and -o
500 options to %logstart. Closes
504 options to %logstart. Closes
501 http://www.scipy.net/roundup/ipython/issue11 and a request by
505 http://www.scipy.net/roundup/ipython/issue11 and a request by
502 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
506 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
503
507
504 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
508 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
505
509
506 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
510 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
507 better hadnle backslashes in paths. See the thread 'More Windows
511 better hadnle backslashes in paths. See the thread 'More Windows
508 questions part 2 - \/ characters revisited' on the iypthon user
512 questions part 2 - \/ characters revisited' on the iypthon user
509 list:
513 list:
510 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
514 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
511
515
512 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
516 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
513
517
514 (InteractiveShell.__init__): change threaded shells to not use the
518 (InteractiveShell.__init__): change threaded shells to not use the
515 ipython crash handler. This was causing more problems than not,
519 ipython crash handler. This was causing more problems than not,
516 as exceptions in the main thread (GUI code, typically) would
520 as exceptions in the main thread (GUI code, typically) would
517 always show up as a 'crash', when they really weren't.
521 always show up as a 'crash', when they really weren't.
518
522
519 The colors and exception mode commands (%colors/%xmode) have been
523 The colors and exception mode commands (%colors/%xmode) have been
520 synchronized to also take this into account, so users can get
524 synchronized to also take this into account, so users can get
521 verbose exceptions for their threaded code as well. I also added
525 verbose exceptions for their threaded code as well. I also added
522 support for activating pdb inside this exception handler as well,
526 support for activating pdb inside this exception handler as well,
523 so now GUI authors can use IPython's enhanced pdb at runtime.
527 so now GUI authors can use IPython's enhanced pdb at runtime.
524
528
525 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
529 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
526 true by default, and add it to the shipped ipythonrc file. Since
530 true by default, and add it to the shipped ipythonrc file. Since
527 this asks the user before proceeding, I think it's OK to make it
531 this asks the user before proceeding, I think it's OK to make it
528 true by default.
532 true by default.
529
533
530 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
534 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
531 of the previous special-casing of input in the eval loop. I think
535 of the previous special-casing of input in the eval loop. I think
532 this is cleaner, as they really are commands and shouldn't have
536 this is cleaner, as they really are commands and shouldn't have
533 a special role in the middle of the core code.
537 a special role in the middle of the core code.
534
538
535 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
539 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
536
540
537 * IPython/iplib.py (edit_syntax_error): added support for
541 * IPython/iplib.py (edit_syntax_error): added support for
538 automatically reopening the editor if the file had a syntax error
542 automatically reopening the editor if the file had a syntax error
539 in it. Thanks to scottt who provided the patch at:
543 in it. Thanks to scottt who provided the patch at:
540 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
544 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
541 version committed).
545 version committed).
542
546
543 * IPython/iplib.py (handle_normal): add suport for multi-line
547 * IPython/iplib.py (handle_normal): add suport for multi-line
544 input with emtpy lines. This fixes
548 input with emtpy lines. This fixes
545 http://www.scipy.net/roundup/ipython/issue43 and a similar
549 http://www.scipy.net/roundup/ipython/issue43 and a similar
546 discussion on the user list.
550 discussion on the user list.
547
551
548 WARNING: a behavior change is necessarily introduced to support
552 WARNING: a behavior change is necessarily introduced to support
549 blank lines: now a single blank line with whitespace does NOT
553 blank lines: now a single blank line with whitespace does NOT
550 break the input loop, which means that when autoindent is on, by
554 break the input loop, which means that when autoindent is on, by
551 default hitting return on the next (indented) line does NOT exit.
555 default hitting return on the next (indented) line does NOT exit.
552
556
553 Instead, to exit a multiline input you can either have:
557 Instead, to exit a multiline input you can either have:
554
558
555 - TWO whitespace lines (just hit return again), or
559 - TWO whitespace lines (just hit return again), or
556 - a single whitespace line of a different length than provided
560 - a single whitespace line of a different length than provided
557 by the autoindent (add or remove a space).
561 by the autoindent (add or remove a space).
558
562
559 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
563 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
560 module to better organize all readline-related functionality.
564 module to better organize all readline-related functionality.
561 I've deleted FlexCompleter and put all completion clases here.
565 I've deleted FlexCompleter and put all completion clases here.
562
566
563 * IPython/iplib.py (raw_input): improve indentation management.
567 * IPython/iplib.py (raw_input): improve indentation management.
564 It is now possible to paste indented code with autoindent on, and
568 It is now possible to paste indented code with autoindent on, and
565 the code is interpreted correctly (though it still looks bad on
569 the code is interpreted correctly (though it still looks bad on
566 screen, due to the line-oriented nature of ipython).
570 screen, due to the line-oriented nature of ipython).
567 (MagicCompleter.complete): change behavior so that a TAB key on an
571 (MagicCompleter.complete): change behavior so that a TAB key on an
568 otherwise empty line actually inserts a tab, instead of completing
572 otherwise empty line actually inserts a tab, instead of completing
569 on the entire global namespace. This makes it easier to use the
573 on the entire global namespace. This makes it easier to use the
570 TAB key for indentation. After a request by Hans Meine
574 TAB key for indentation. After a request by Hans Meine
571 <hans_meine-AT-gmx.net>
575 <hans_meine-AT-gmx.net>
572 (_prefilter): add support so that typing plain 'exit' or 'quit'
576 (_prefilter): add support so that typing plain 'exit' or 'quit'
573 does a sensible thing. Originally I tried to deviate as little as
577 does a sensible thing. Originally I tried to deviate as little as
574 possible from the default python behavior, but even that one may
578 possible from the default python behavior, but even that one may
575 change in this direction (thread on python-dev to that effect).
579 change in this direction (thread on python-dev to that effect).
576 Regardless, ipython should do the right thing even if CPython's
580 Regardless, ipython should do the right thing even if CPython's
577 '>>>' prompt doesn't.
581 '>>>' prompt doesn't.
578 (InteractiveShell): removed subclassing code.InteractiveConsole
582 (InteractiveShell): removed subclassing code.InteractiveConsole
579 class. By now we'd overridden just about all of its methods: I've
583 class. By now we'd overridden just about all of its methods: I've
580 copied the remaining two over, and now ipython is a standalone
584 copied the remaining two over, and now ipython is a standalone
581 class. This will provide a clearer picture for the chainsaw
585 class. This will provide a clearer picture for the chainsaw
582 branch refactoring.
586 branch refactoring.
583
587
584 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
588 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
585
589
586 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
590 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
587 failures for objects which break when dir() is called on them.
591 failures for objects which break when dir() is called on them.
588
592
589 * IPython/FlexCompleter.py (Completer.__init__): Added support for
593 * IPython/FlexCompleter.py (Completer.__init__): Added support for
590 distinct local and global namespaces in the completer API. This
594 distinct local and global namespaces in the completer API. This
591 change allows us top properly handle completion with distinct
595 change allows us top properly handle completion with distinct
592 scopes, including in embedded instances (this had never really
596 scopes, including in embedded instances (this had never really
593 worked correctly).
597 worked correctly).
594
598
595 Note: this introduces a change in the constructor for
599 Note: this introduces a change in the constructor for
596 MagicCompleter, as a new global_namespace parameter is now the
600 MagicCompleter, as a new global_namespace parameter is now the
597 second argument (the others were bumped one position).
601 second argument (the others were bumped one position).
598
602
599 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
603 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
600
604
601 * IPython/iplib.py (embed_mainloop): fix tab-completion in
605 * IPython/iplib.py (embed_mainloop): fix tab-completion in
602 embedded instances (which can be done now thanks to Vivian's
606 embedded instances (which can be done now thanks to Vivian's
603 frame-handling fixes for pdb).
607 frame-handling fixes for pdb).
604 (InteractiveShell.__init__): Fix namespace handling problem in
608 (InteractiveShell.__init__): Fix namespace handling problem in
605 embedded instances. We were overwriting __main__ unconditionally,
609 embedded instances. We were overwriting __main__ unconditionally,
606 and this should only be done for 'full' (non-embedded) IPython;
610 and this should only be done for 'full' (non-embedded) IPython;
607 embedded instances must respect the caller's __main__. Thanks to
611 embedded instances must respect the caller's __main__. Thanks to
608 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
612 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
609
613
610 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
614 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
611
615
612 * setup.py: added download_url to setup(). This registers the
616 * setup.py: added download_url to setup(). This registers the
613 download address at PyPI, which is not only useful to humans
617 download address at PyPI, which is not only useful to humans
614 browsing the site, but is also picked up by setuptools (the Eggs
618 browsing the site, but is also picked up by setuptools (the Eggs
615 machinery). Thanks to Ville and R. Kern for the info/discussion
619 machinery). Thanks to Ville and R. Kern for the info/discussion
616 on this.
620 on this.
617
621
618 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
622 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
619
623
620 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
624 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
621 This brings a lot of nice functionality to the pdb mode, which now
625 This brings a lot of nice functionality to the pdb mode, which now
622 has tab-completion, syntax highlighting, and better stack handling
626 has tab-completion, syntax highlighting, and better stack handling
623 than before. Many thanks to Vivian De Smedt
627 than before. Many thanks to Vivian De Smedt
624 <vivian-AT-vdesmedt.com> for the original patches.
628 <vivian-AT-vdesmedt.com> for the original patches.
625
629
626 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
630 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
627
631
628 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
632 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
629 sequence to consistently accept the banner argument. The
633 sequence to consistently accept the banner argument. The
630 inconsistency was tripping SAGE, thanks to Gary Zablackis
634 inconsistency was tripping SAGE, thanks to Gary Zablackis
631 <gzabl-AT-yahoo.com> for the report.
635 <gzabl-AT-yahoo.com> for the report.
632
636
633 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
637 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
634
638
635 * IPython/iplib.py (InteractiveShell.post_config_initialization):
639 * IPython/iplib.py (InteractiveShell.post_config_initialization):
636 Fix bug where a naked 'alias' call in the ipythonrc file would
640 Fix bug where a naked 'alias' call in the ipythonrc file would
637 cause a crash. Bug reported by Jorgen Stenarson.
641 cause a crash. Bug reported by Jorgen Stenarson.
638
642
639 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
643 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
640
644
641 * IPython/ipmaker.py (make_IPython): cleanups which should improve
645 * IPython/ipmaker.py (make_IPython): cleanups which should improve
642 startup time.
646 startup time.
643
647
644 * IPython/iplib.py (runcode): my globals 'fix' for embedded
648 * IPython/iplib.py (runcode): my globals 'fix' for embedded
645 instances had introduced a bug with globals in normal code. Now
649 instances had introduced a bug with globals in normal code. Now
646 it's working in all cases.
650 it's working in all cases.
647
651
648 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
652 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
649 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
653 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
650 has been introduced to set the default case sensitivity of the
654 has been introduced to set the default case sensitivity of the
651 searches. Users can still select either mode at runtime on a
655 searches. Users can still select either mode at runtime on a
652 per-search basis.
656 per-search basis.
653
657
654 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
658 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
655
659
656 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
660 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
657 attributes in wildcard searches for subclasses. Modified version
661 attributes in wildcard searches for subclasses. Modified version
658 of a patch by Jorgen.
662 of a patch by Jorgen.
659
663
660 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
664 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
661
665
662 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
666 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
663 embedded instances. I added a user_global_ns attribute to the
667 embedded instances. I added a user_global_ns attribute to the
664 InteractiveShell class to handle this.
668 InteractiveShell class to handle this.
665
669
666 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
670 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
667
671
668 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
672 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
669 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
673 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
670 (reported under win32, but may happen also in other platforms).
674 (reported under win32, but may happen also in other platforms).
671 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
675 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
672
676
673 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
677 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
674
678
675 * IPython/Magic.py (magic_psearch): new support for wildcard
679 * IPython/Magic.py (magic_psearch): new support for wildcard
676 patterns. Now, typing ?a*b will list all names which begin with a
680 patterns. Now, typing ?a*b will list all names which begin with a
677 and end in b, for example. The %psearch magic has full
681 and end in b, for example. The %psearch magic has full
678 docstrings. Many thanks to JΓΆrgen Stenarson
682 docstrings. Many thanks to JΓΆrgen Stenarson
679 <jorgen.stenarson-AT-bostream.nu>, author of the patches
683 <jorgen.stenarson-AT-bostream.nu>, author of the patches
680 implementing this functionality.
684 implementing this functionality.
681
685
682 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
686 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
683
687
684 * Manual: fixed long-standing annoyance of double-dashes (as in
688 * Manual: fixed long-standing annoyance of double-dashes (as in
685 --prefix=~, for example) being stripped in the HTML version. This
689 --prefix=~, for example) being stripped in the HTML version. This
686 is a latex2html bug, but a workaround was provided. Many thanks
690 is a latex2html bug, but a workaround was provided. Many thanks
687 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
691 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
688 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
692 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
689 rolling. This seemingly small issue had tripped a number of users
693 rolling. This seemingly small issue had tripped a number of users
690 when first installing, so I'm glad to see it gone.
694 when first installing, so I'm glad to see it gone.
691
695
692 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
696 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
693
697
694 * IPython/Extensions/numeric_formats.py: fix missing import,
698 * IPython/Extensions/numeric_formats.py: fix missing import,
695 reported by Stephen Walton.
699 reported by Stephen Walton.
696
700
697 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
701 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
698
702
699 * IPython/demo.py: finish demo module, fully documented now.
703 * IPython/demo.py: finish demo module, fully documented now.
700
704
701 * IPython/genutils.py (file_read): simple little utility to read a
705 * IPython/genutils.py (file_read): simple little utility to read a
702 file and ensure it's closed afterwards.
706 file and ensure it's closed afterwards.
703
707
704 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
708 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
705
709
706 * IPython/demo.py (Demo.__init__): added support for individually
710 * IPython/demo.py (Demo.__init__): added support for individually
707 tagging blocks for automatic execution.
711 tagging blocks for automatic execution.
708
712
709 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
713 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
710 syntax-highlighted python sources, requested by John.
714 syntax-highlighted python sources, requested by John.
711
715
712 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
716 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
713
717
714 * IPython/demo.py (Demo.again): fix bug where again() blocks after
718 * IPython/demo.py (Demo.again): fix bug where again() blocks after
715 finishing.
719 finishing.
716
720
717 * IPython/genutils.py (shlex_split): moved from Magic to here,
721 * IPython/genutils.py (shlex_split): moved from Magic to here,
718 where all 2.2 compatibility stuff lives. I needed it for demo.py.
722 where all 2.2 compatibility stuff lives. I needed it for demo.py.
719
723
720 * IPython/demo.py (Demo.__init__): added support for silent
724 * IPython/demo.py (Demo.__init__): added support for silent
721 blocks, improved marks as regexps, docstrings written.
725 blocks, improved marks as regexps, docstrings written.
722 (Demo.__init__): better docstring, added support for sys.argv.
726 (Demo.__init__): better docstring, added support for sys.argv.
723
727
724 * IPython/genutils.py (marquee): little utility used by the demo
728 * IPython/genutils.py (marquee): little utility used by the demo
725 code, handy in general.
729 code, handy in general.
726
730
727 * IPython/demo.py (Demo.__init__): new class for interactive
731 * IPython/demo.py (Demo.__init__): new class for interactive
728 demos. Not documented yet, I just wrote it in a hurry for
732 demos. Not documented yet, I just wrote it in a hurry for
729 scipy'05. Will docstring later.
733 scipy'05. Will docstring later.
730
734
731 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
735 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
732
736
733 * IPython/Shell.py (sigint_handler): Drastic simplification which
737 * IPython/Shell.py (sigint_handler): Drastic simplification which
734 also seems to make Ctrl-C work correctly across threads! This is
738 also seems to make Ctrl-C work correctly across threads! This is
735 so simple, that I can't beleive I'd missed it before. Needs more
739 so simple, that I can't beleive I'd missed it before. Needs more
736 testing, though.
740 testing, though.
737 (KBINT): Never mind, revert changes. I'm sure I'd tried something
741 (KBINT): Never mind, revert changes. I'm sure I'd tried something
738 like this before...
742 like this before...
739
743
740 * IPython/genutils.py (get_home_dir): add protection against
744 * IPython/genutils.py (get_home_dir): add protection against
741 non-dirs in win32 registry.
745 non-dirs in win32 registry.
742
746
743 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
747 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
744 bug where dict was mutated while iterating (pysh crash).
748 bug where dict was mutated while iterating (pysh crash).
745
749
746 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
750 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
747
751
748 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
752 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
749 spurious newlines added by this routine. After a report by
753 spurious newlines added by this routine. After a report by
750 F. Mantegazza.
754 F. Mantegazza.
751
755
752 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
756 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
753
757
754 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
758 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
755 calls. These were a leftover from the GTK 1.x days, and can cause
759 calls. These were a leftover from the GTK 1.x days, and can cause
756 problems in certain cases (after a report by John Hunter).
760 problems in certain cases (after a report by John Hunter).
757
761
758 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
762 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
759 os.getcwd() fails at init time. Thanks to patch from David Remahl
763 os.getcwd() fails at init time. Thanks to patch from David Remahl
760 <chmod007-AT-mac.com>.
764 <chmod007-AT-mac.com>.
761 (InteractiveShell.__init__): prevent certain special magics from
765 (InteractiveShell.__init__): prevent certain special magics from
762 being shadowed by aliases. Closes
766 being shadowed by aliases. Closes
763 http://www.scipy.net/roundup/ipython/issue41.
767 http://www.scipy.net/roundup/ipython/issue41.
764
768
765 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
769 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
766
770
767 * IPython/iplib.py (InteractiveShell.complete): Added new
771 * IPython/iplib.py (InteractiveShell.complete): Added new
768 top-level completion method to expose the completion mechanism
772 top-level completion method to expose the completion mechanism
769 beyond readline-based environments.
773 beyond readline-based environments.
770
774
771 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
775 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
772
776
773 * tools/ipsvnc (svnversion): fix svnversion capture.
777 * tools/ipsvnc (svnversion): fix svnversion capture.
774
778
775 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
779 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
776 attribute to self, which was missing. Before, it was set by a
780 attribute to self, which was missing. Before, it was set by a
777 routine which in certain cases wasn't being called, so the
781 routine which in certain cases wasn't being called, so the
778 instance could end up missing the attribute. This caused a crash.
782 instance could end up missing the attribute. This caused a crash.
779 Closes http://www.scipy.net/roundup/ipython/issue40.
783 Closes http://www.scipy.net/roundup/ipython/issue40.
780
784
781 2005-08-16 Fernando Perez <fperez@colorado.edu>
785 2005-08-16 Fernando Perez <fperez@colorado.edu>
782
786
783 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
787 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
784 contains non-string attribute. Closes
788 contains non-string attribute. Closes
785 http://www.scipy.net/roundup/ipython/issue38.
789 http://www.scipy.net/roundup/ipython/issue38.
786
790
787 2005-08-14 Fernando Perez <fperez@colorado.edu>
791 2005-08-14 Fernando Perez <fperez@colorado.edu>
788
792
789 * tools/ipsvnc: Minor improvements, to add changeset info.
793 * tools/ipsvnc: Minor improvements, to add changeset info.
790
794
791 2005-08-12 Fernando Perez <fperez@colorado.edu>
795 2005-08-12 Fernando Perez <fperez@colorado.edu>
792
796
793 * IPython/iplib.py (runsource): remove self.code_to_run_src
797 * IPython/iplib.py (runsource): remove self.code_to_run_src
794 attribute. I realized this is nothing more than
798 attribute. I realized this is nothing more than
795 '\n'.join(self.buffer), and having the same data in two different
799 '\n'.join(self.buffer), and having the same data in two different
796 places is just asking for synchronization bugs. This may impact
800 places is just asking for synchronization bugs. This may impact
797 people who have custom exception handlers, so I need to warn
801 people who have custom exception handlers, so I need to warn
798 ipython-dev about it (F. Mantegazza may use them).
802 ipython-dev about it (F. Mantegazza may use them).
799
803
800 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
804 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
801
805
802 * IPython/genutils.py: fix 2.2 compatibility (generators)
806 * IPython/genutils.py: fix 2.2 compatibility (generators)
803
807
804 2005-07-18 Fernando Perez <fperez@colorado.edu>
808 2005-07-18 Fernando Perez <fperez@colorado.edu>
805
809
806 * IPython/genutils.py (get_home_dir): fix to help users with
810 * IPython/genutils.py (get_home_dir): fix to help users with
807 invalid $HOME under win32.
811 invalid $HOME under win32.
808
812
809 2005-07-17 Fernando Perez <fperez@colorado.edu>
813 2005-07-17 Fernando Perez <fperez@colorado.edu>
810
814
811 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
815 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
812 some old hacks and clean up a bit other routines; code should be
816 some old hacks and clean up a bit other routines; code should be
813 simpler and a bit faster.
817 simpler and a bit faster.
814
818
815 * IPython/iplib.py (interact): removed some last-resort attempts
819 * IPython/iplib.py (interact): removed some last-resort attempts
816 to survive broken stdout/stderr. That code was only making it
820 to survive broken stdout/stderr. That code was only making it
817 harder to abstract out the i/o (necessary for gui integration),
821 harder to abstract out the i/o (necessary for gui integration),
818 and the crashes it could prevent were extremely rare in practice
822 and the crashes it could prevent were extremely rare in practice
819 (besides being fully user-induced in a pretty violent manner).
823 (besides being fully user-induced in a pretty violent manner).
820
824
821 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
825 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
822 Nothing major yet, but the code is simpler to read; this should
826 Nothing major yet, but the code is simpler to read; this should
823 make it easier to do more serious modifications in the future.
827 make it easier to do more serious modifications in the future.
824
828
825 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
829 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
826 which broke in .15 (thanks to a report by Ville).
830 which broke in .15 (thanks to a report by Ville).
827
831
828 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
832 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
829 be quite correct, I know next to nothing about unicode). This
833 be quite correct, I know next to nothing about unicode). This
830 will allow unicode strings to be used in prompts, amongst other
834 will allow unicode strings to be used in prompts, amongst other
831 cases. It also will prevent ipython from crashing when unicode
835 cases. It also will prevent ipython from crashing when unicode
832 shows up unexpectedly in many places. If ascii encoding fails, we
836 shows up unexpectedly in many places. If ascii encoding fails, we
833 assume utf_8. Currently the encoding is not a user-visible
837 assume utf_8. Currently the encoding is not a user-visible
834 setting, though it could be made so if there is demand for it.
838 setting, though it could be made so if there is demand for it.
835
839
836 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
840 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
837
841
838 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
842 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
839
843
840 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
844 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
841
845
842 * IPython/genutils.py: Add 2.2 compatibility here, so all other
846 * IPython/genutils.py: Add 2.2 compatibility here, so all other
843 code can work transparently for 2.2/2.3.
847 code can work transparently for 2.2/2.3.
844
848
845 2005-07-16 Fernando Perez <fperez@colorado.edu>
849 2005-07-16 Fernando Perez <fperez@colorado.edu>
846
850
847 * IPython/ultraTB.py (ExceptionColors): Make a global variable
851 * IPython/ultraTB.py (ExceptionColors): Make a global variable
848 out of the color scheme table used for coloring exception
852 out of the color scheme table used for coloring exception
849 tracebacks. This allows user code to add new schemes at runtime.
853 tracebacks. This allows user code to add new schemes at runtime.
850 This is a minimally modified version of the patch at
854 This is a minimally modified version of the patch at
851 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
855 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
852 for the contribution.
856 for the contribution.
853
857
854 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
858 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
855 slightly modified version of the patch in
859 slightly modified version of the patch in
856 http://www.scipy.net/roundup/ipython/issue34, which also allows me
860 http://www.scipy.net/roundup/ipython/issue34, which also allows me
857 to remove the previous try/except solution (which was costlier).
861 to remove the previous try/except solution (which was costlier).
858 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
862 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
859
863
860 2005-06-08 Fernando Perez <fperez@colorado.edu>
864 2005-06-08 Fernando Perez <fperez@colorado.edu>
861
865
862 * IPython/iplib.py (write/write_err): Add methods to abstract all
866 * IPython/iplib.py (write/write_err): Add methods to abstract all
863 I/O a bit more.
867 I/O a bit more.
864
868
865 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
869 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
866 warning, reported by Aric Hagberg, fix by JD Hunter.
870 warning, reported by Aric Hagberg, fix by JD Hunter.
867
871
868 2005-06-02 *** Released version 0.6.15
872 2005-06-02 *** Released version 0.6.15
869
873
870 2005-06-01 Fernando Perez <fperez@colorado.edu>
874 2005-06-01 Fernando Perez <fperez@colorado.edu>
871
875
872 * IPython/iplib.py (MagicCompleter.file_matches): Fix
876 * IPython/iplib.py (MagicCompleter.file_matches): Fix
873 tab-completion of filenames within open-quoted strings. Note that
877 tab-completion of filenames within open-quoted strings. Note that
874 this requires that in ~/.ipython/ipythonrc, users change the
878 this requires that in ~/.ipython/ipythonrc, users change the
875 readline delimiters configuration to read:
879 readline delimiters configuration to read:
876
880
877 readline_remove_delims -/~
881 readline_remove_delims -/~
878
882
879
883
880 2005-05-31 *** Released version 0.6.14
884 2005-05-31 *** Released version 0.6.14
881
885
882 2005-05-29 Fernando Perez <fperez@colorado.edu>
886 2005-05-29 Fernando Perez <fperez@colorado.edu>
883
887
884 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
888 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
885 with files not on the filesystem. Reported by Eliyahu Sandler
889 with files not on the filesystem. Reported by Eliyahu Sandler
886 <eli@gondolin.net>
890 <eli@gondolin.net>
887
891
888 2005-05-22 Fernando Perez <fperez@colorado.edu>
892 2005-05-22 Fernando Perez <fperez@colorado.edu>
889
893
890 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
894 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
891 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
895 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
892
896
893 2005-05-19 Fernando Perez <fperez@colorado.edu>
897 2005-05-19 Fernando Perez <fperez@colorado.edu>
894
898
895 * IPython/iplib.py (safe_execfile): close a file which could be
899 * IPython/iplib.py (safe_execfile): close a file which could be
896 left open (causing problems in win32, which locks open files).
900 left open (causing problems in win32, which locks open files).
897 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
901 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
898
902
899 2005-05-18 Fernando Perez <fperez@colorado.edu>
903 2005-05-18 Fernando Perez <fperez@colorado.edu>
900
904
901 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
905 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
902 keyword arguments correctly to safe_execfile().
906 keyword arguments correctly to safe_execfile().
903
907
904 2005-05-13 Fernando Perez <fperez@colorado.edu>
908 2005-05-13 Fernando Perez <fperez@colorado.edu>
905
909
906 * ipython.1: Added info about Qt to manpage, and threads warning
910 * ipython.1: Added info about Qt to manpage, and threads warning
907 to usage page (invoked with --help).
911 to usage page (invoked with --help).
908
912
909 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
913 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
910 new matcher (it goes at the end of the priority list) to do
914 new matcher (it goes at the end of the priority list) to do
911 tab-completion on named function arguments. Submitted by George
915 tab-completion on named function arguments. Submitted by George
912 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
916 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
913 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
917 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
914 for more details.
918 for more details.
915
919
916 * IPython/Magic.py (magic_run): Added new -e flag to ignore
920 * IPython/Magic.py (magic_run): Added new -e flag to ignore
917 SystemExit exceptions in the script being run. Thanks to a report
921 SystemExit exceptions in the script being run. Thanks to a report
918 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
922 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
919 producing very annoying behavior when running unit tests.
923 producing very annoying behavior when running unit tests.
920
924
921 2005-05-12 Fernando Perez <fperez@colorado.edu>
925 2005-05-12 Fernando Perez <fperez@colorado.edu>
922
926
923 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
927 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
924 which I'd broken (again) due to a changed regexp. In the process,
928 which I'd broken (again) due to a changed regexp. In the process,
925 added ';' as an escape to auto-quote the whole line without
929 added ';' as an escape to auto-quote the whole line without
926 splitting its arguments. Thanks to a report by Jerry McRae
930 splitting its arguments. Thanks to a report by Jerry McRae
927 <qrs0xyc02-AT-sneakemail.com>.
931 <qrs0xyc02-AT-sneakemail.com>.
928
932
929 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
933 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
930 possible crashes caused by a TokenError. Reported by Ed Schofield
934 possible crashes caused by a TokenError. Reported by Ed Schofield
931 <schofield-AT-ftw.at>.
935 <schofield-AT-ftw.at>.
932
936
933 2005-05-06 Fernando Perez <fperez@colorado.edu>
937 2005-05-06 Fernando Perez <fperez@colorado.edu>
934
938
935 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
939 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
936
940
937 2005-04-29 Fernando Perez <fperez@colorado.edu>
941 2005-04-29 Fernando Perez <fperez@colorado.edu>
938
942
939 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
943 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
940 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
944 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
941 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
945 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
942 which provides support for Qt interactive usage (similar to the
946 which provides support for Qt interactive usage (similar to the
943 existing one for WX and GTK). This had been often requested.
947 existing one for WX and GTK). This had been often requested.
944
948
945 2005-04-14 *** Released version 0.6.13
949 2005-04-14 *** Released version 0.6.13
946
950
947 2005-04-08 Fernando Perez <fperez@colorado.edu>
951 2005-04-08 Fernando Perez <fperez@colorado.edu>
948
952
949 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
953 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
950 from _ofind, which gets called on almost every input line. Now,
954 from _ofind, which gets called on almost every input line. Now,
951 we only try to get docstrings if they are actually going to be
955 we only try to get docstrings if they are actually going to be
952 used (the overhead of fetching unnecessary docstrings can be
956 used (the overhead of fetching unnecessary docstrings can be
953 noticeable for certain objects, such as Pyro proxies).
957 noticeable for certain objects, such as Pyro proxies).
954
958
955 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
959 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
956 for completers. For some reason I had been passing them the state
960 for completers. For some reason I had been passing them the state
957 variable, which completers never actually need, and was in
961 variable, which completers never actually need, and was in
958 conflict with the rlcompleter API. Custom completers ONLY need to
962 conflict with the rlcompleter API. Custom completers ONLY need to
959 take the text parameter.
963 take the text parameter.
960
964
961 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
965 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
962 work correctly in pysh. I've also moved all the logic which used
966 work correctly in pysh. I've also moved all the logic which used
963 to be in pysh.py here, which will prevent problems with future
967 to be in pysh.py here, which will prevent problems with future
964 upgrades. However, this time I must warn users to update their
968 upgrades. However, this time I must warn users to update their
965 pysh profile to include the line
969 pysh profile to include the line
966
970
967 import_all IPython.Extensions.InterpreterExec
971 import_all IPython.Extensions.InterpreterExec
968
972
969 because otherwise things won't work for them. They MUST also
973 because otherwise things won't work for them. They MUST also
970 delete pysh.py and the line
974 delete pysh.py and the line
971
975
972 execfile pysh.py
976 execfile pysh.py
973
977
974 from their ipythonrc-pysh.
978 from their ipythonrc-pysh.
975
979
976 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
980 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
977 robust in the face of objects whose dir() returns non-strings
981 robust in the face of objects whose dir() returns non-strings
978 (which it shouldn't, but some broken libs like ITK do). Thanks to
982 (which it shouldn't, but some broken libs like ITK do). Thanks to
979 a patch by John Hunter (implemented differently, though). Also
983 a patch by John Hunter (implemented differently, though). Also
980 minor improvements by using .extend instead of + on lists.
984 minor improvements by using .extend instead of + on lists.
981
985
982 * pysh.py:
986 * pysh.py:
983
987
984 2005-04-06 Fernando Perez <fperez@colorado.edu>
988 2005-04-06 Fernando Perez <fperez@colorado.edu>
985
989
986 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
990 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
987 by default, so that all users benefit from it. Those who don't
991 by default, so that all users benefit from it. Those who don't
988 want it can still turn it off.
992 want it can still turn it off.
989
993
990 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
994 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
991 config file, I'd forgotten about this, so users were getting it
995 config file, I'd forgotten about this, so users were getting it
992 off by default.
996 off by default.
993
997
994 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
998 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
995 consistency. Now magics can be called in multiline statements,
999 consistency. Now magics can be called in multiline statements,
996 and python variables can be expanded in magic calls via $var.
1000 and python variables can be expanded in magic calls via $var.
997 This makes the magic system behave just like aliases or !system
1001 This makes the magic system behave just like aliases or !system
998 calls.
1002 calls.
999
1003
1000 2005-03-28 Fernando Perez <fperez@colorado.edu>
1004 2005-03-28 Fernando Perez <fperez@colorado.edu>
1001
1005
1002 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1006 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1003 expensive string additions for building command. Add support for
1007 expensive string additions for building command. Add support for
1004 trailing ';' when autocall is used.
1008 trailing ';' when autocall is used.
1005
1009
1006 2005-03-26 Fernando Perez <fperez@colorado.edu>
1010 2005-03-26 Fernando Perez <fperez@colorado.edu>
1007
1011
1008 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1012 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1009 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1013 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1010 ipython.el robust against prompts with any number of spaces
1014 ipython.el robust against prompts with any number of spaces
1011 (including 0) after the ':' character.
1015 (including 0) after the ':' character.
1012
1016
1013 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1017 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1014 continuation prompt, which misled users to think the line was
1018 continuation prompt, which misled users to think the line was
1015 already indented. Closes debian Bug#300847, reported to me by
1019 already indented. Closes debian Bug#300847, reported to me by
1016 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1020 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1017
1021
1018 2005-03-23 Fernando Perez <fperez@colorado.edu>
1022 2005-03-23 Fernando Perez <fperez@colorado.edu>
1019
1023
1020 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1024 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1021 properly aligned if they have embedded newlines.
1025 properly aligned if they have embedded newlines.
1022
1026
1023 * IPython/iplib.py (runlines): Add a public method to expose
1027 * IPython/iplib.py (runlines): Add a public method to expose
1024 IPython's code execution machinery, so that users can run strings
1028 IPython's code execution machinery, so that users can run strings
1025 as if they had been typed at the prompt interactively.
1029 as if they had been typed at the prompt interactively.
1026 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1030 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1027 methods which can call the system shell, but with python variable
1031 methods which can call the system shell, but with python variable
1028 expansion. The three such methods are: __IPYTHON__.system,
1032 expansion. The three such methods are: __IPYTHON__.system,
1029 .getoutput and .getoutputerror. These need to be documented in a
1033 .getoutput and .getoutputerror. These need to be documented in a
1030 'public API' section (to be written) of the manual.
1034 'public API' section (to be written) of the manual.
1031
1035
1032 2005-03-20 Fernando Perez <fperez@colorado.edu>
1036 2005-03-20 Fernando Perez <fperez@colorado.edu>
1033
1037
1034 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1038 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1035 for custom exception handling. This is quite powerful, and it
1039 for custom exception handling. This is quite powerful, and it
1036 allows for user-installable exception handlers which can trap
1040 allows for user-installable exception handlers which can trap
1037 custom exceptions at runtime and treat them separately from
1041 custom exceptions at runtime and treat them separately from
1038 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1042 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1039 Mantegazza <mantegazza-AT-ill.fr>.
1043 Mantegazza <mantegazza-AT-ill.fr>.
1040 (InteractiveShell.set_custom_completer): public API function to
1044 (InteractiveShell.set_custom_completer): public API function to
1041 add new completers at runtime.
1045 add new completers at runtime.
1042
1046
1043 2005-03-19 Fernando Perez <fperez@colorado.edu>
1047 2005-03-19 Fernando Perez <fperez@colorado.edu>
1044
1048
1045 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1049 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1046 allow objects which provide their docstrings via non-standard
1050 allow objects which provide their docstrings via non-standard
1047 mechanisms (like Pyro proxies) to still be inspected by ipython's
1051 mechanisms (like Pyro proxies) to still be inspected by ipython's
1048 ? system.
1052 ? system.
1049
1053
1050 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1054 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1051 automatic capture system. I tried quite hard to make it work
1055 automatic capture system. I tried quite hard to make it work
1052 reliably, and simply failed. I tried many combinations with the
1056 reliably, and simply failed. I tried many combinations with the
1053 subprocess module, but eventually nothing worked in all needed
1057 subprocess module, but eventually nothing worked in all needed
1054 cases (not blocking stdin for the child, duplicating stdout
1058 cases (not blocking stdin for the child, duplicating stdout
1055 without blocking, etc). The new %sc/%sx still do capture to these
1059 without blocking, etc). The new %sc/%sx still do capture to these
1056 magical list/string objects which make shell use much more
1060 magical list/string objects which make shell use much more
1057 conveninent, so not all is lost.
1061 conveninent, so not all is lost.
1058
1062
1059 XXX - FIX MANUAL for the change above!
1063 XXX - FIX MANUAL for the change above!
1060
1064
1061 (runsource): I copied code.py's runsource() into ipython to modify
1065 (runsource): I copied code.py's runsource() into ipython to modify
1062 it a bit. Now the code object and source to be executed are
1066 it a bit. Now the code object and source to be executed are
1063 stored in ipython. This makes this info accessible to third-party
1067 stored in ipython. This makes this info accessible to third-party
1064 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1068 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1065 Mantegazza <mantegazza-AT-ill.fr>.
1069 Mantegazza <mantegazza-AT-ill.fr>.
1066
1070
1067 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1071 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1068 history-search via readline (like C-p/C-n). I'd wanted this for a
1072 history-search via readline (like C-p/C-n). I'd wanted this for a
1069 long time, but only recently found out how to do it. For users
1073 long time, but only recently found out how to do it. For users
1070 who already have their ipythonrc files made and want this, just
1074 who already have their ipythonrc files made and want this, just
1071 add:
1075 add:
1072
1076
1073 readline_parse_and_bind "\e[A": history-search-backward
1077 readline_parse_and_bind "\e[A": history-search-backward
1074 readline_parse_and_bind "\e[B": history-search-forward
1078 readline_parse_and_bind "\e[B": history-search-forward
1075
1079
1076 2005-03-18 Fernando Perez <fperez@colorado.edu>
1080 2005-03-18 Fernando Perez <fperez@colorado.edu>
1077
1081
1078 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1082 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1079 LSString and SList classes which allow transparent conversions
1083 LSString and SList classes which allow transparent conversions
1080 between list mode and whitespace-separated string.
1084 between list mode and whitespace-separated string.
1081 (magic_r): Fix recursion problem in %r.
1085 (magic_r): Fix recursion problem in %r.
1082
1086
1083 * IPython/genutils.py (LSString): New class to be used for
1087 * IPython/genutils.py (LSString): New class to be used for
1084 automatic storage of the results of all alias/system calls in _o
1088 automatic storage of the results of all alias/system calls in _o
1085 and _e (stdout/err). These provide a .l/.list attribute which
1089 and _e (stdout/err). These provide a .l/.list attribute which
1086 does automatic splitting on newlines. This means that for most
1090 does automatic splitting on newlines. This means that for most
1087 uses, you'll never need to do capturing of output with %sc/%sx
1091 uses, you'll never need to do capturing of output with %sc/%sx
1088 anymore, since ipython keeps this always done for you. Note that
1092 anymore, since ipython keeps this always done for you. Note that
1089 only the LAST results are stored, the _o/e variables are
1093 only the LAST results are stored, the _o/e variables are
1090 overwritten on each call. If you need to save their contents
1094 overwritten on each call. If you need to save their contents
1091 further, simply bind them to any other name.
1095 further, simply bind them to any other name.
1092
1096
1093 2005-03-17 Fernando Perez <fperez@colorado.edu>
1097 2005-03-17 Fernando Perez <fperez@colorado.edu>
1094
1098
1095 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1099 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1096 prompt namespace handling.
1100 prompt namespace handling.
1097
1101
1098 2005-03-16 Fernando Perez <fperez@colorado.edu>
1102 2005-03-16 Fernando Perez <fperez@colorado.edu>
1099
1103
1100 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1104 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1101 classic prompts to be '>>> ' (final space was missing, and it
1105 classic prompts to be '>>> ' (final space was missing, and it
1102 trips the emacs python mode).
1106 trips the emacs python mode).
1103 (BasePrompt.__str__): Added safe support for dynamic prompt
1107 (BasePrompt.__str__): Added safe support for dynamic prompt
1104 strings. Now you can set your prompt string to be '$x', and the
1108 strings. Now you can set your prompt string to be '$x', and the
1105 value of x will be printed from your interactive namespace. The
1109 value of x will be printed from your interactive namespace. The
1106 interpolation syntax includes the full Itpl support, so
1110 interpolation syntax includes the full Itpl support, so
1107 ${foo()+x+bar()} is a valid prompt string now, and the function
1111 ${foo()+x+bar()} is a valid prompt string now, and the function
1108 calls will be made at runtime.
1112 calls will be made at runtime.
1109
1113
1110 2005-03-15 Fernando Perez <fperez@colorado.edu>
1114 2005-03-15 Fernando Perez <fperez@colorado.edu>
1111
1115
1112 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1116 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1113 avoid name clashes in pylab. %hist still works, it just forwards
1117 avoid name clashes in pylab. %hist still works, it just forwards
1114 the call to %history.
1118 the call to %history.
1115
1119
1116 2005-03-02 *** Released version 0.6.12
1120 2005-03-02 *** Released version 0.6.12
1117
1121
1118 2005-03-02 Fernando Perez <fperez@colorado.edu>
1122 2005-03-02 Fernando Perez <fperez@colorado.edu>
1119
1123
1120 * IPython/iplib.py (handle_magic): log magic calls properly as
1124 * IPython/iplib.py (handle_magic): log magic calls properly as
1121 ipmagic() function calls.
1125 ipmagic() function calls.
1122
1126
1123 * IPython/Magic.py (magic_time): Improved %time to support
1127 * IPython/Magic.py (magic_time): Improved %time to support
1124 statements and provide wall-clock as well as CPU time.
1128 statements and provide wall-clock as well as CPU time.
1125
1129
1126 2005-02-27 Fernando Perez <fperez@colorado.edu>
1130 2005-02-27 Fernando Perez <fperez@colorado.edu>
1127
1131
1128 * IPython/hooks.py: New hooks module, to expose user-modifiable
1132 * IPython/hooks.py: New hooks module, to expose user-modifiable
1129 IPython functionality in a clean manner. For now only the editor
1133 IPython functionality in a clean manner. For now only the editor
1130 hook is actually written, and other thigns which I intend to turn
1134 hook is actually written, and other thigns which I intend to turn
1131 into proper hooks aren't yet there. The display and prefilter
1135 into proper hooks aren't yet there. The display and prefilter
1132 stuff, for example, should be hooks. But at least now the
1136 stuff, for example, should be hooks. But at least now the
1133 framework is in place, and the rest can be moved here with more
1137 framework is in place, and the rest can be moved here with more
1134 time later. IPython had had a .hooks variable for a long time for
1138 time later. IPython had had a .hooks variable for a long time for
1135 this purpose, but I'd never actually used it for anything.
1139 this purpose, but I'd never actually used it for anything.
1136
1140
1137 2005-02-26 Fernando Perez <fperez@colorado.edu>
1141 2005-02-26 Fernando Perez <fperez@colorado.edu>
1138
1142
1139 * IPython/ipmaker.py (make_IPython): make the default ipython
1143 * IPython/ipmaker.py (make_IPython): make the default ipython
1140 directory be called _ipython under win32, to follow more the
1144 directory be called _ipython under win32, to follow more the
1141 naming peculiarities of that platform (where buggy software like
1145 naming peculiarities of that platform (where buggy software like
1142 Visual Sourcesafe breaks with .named directories). Reported by
1146 Visual Sourcesafe breaks with .named directories). Reported by
1143 Ville Vainio.
1147 Ville Vainio.
1144
1148
1145 2005-02-23 Fernando Perez <fperez@colorado.edu>
1149 2005-02-23 Fernando Perez <fperez@colorado.edu>
1146
1150
1147 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1151 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1148 auto_aliases for win32 which were causing problems. Users can
1152 auto_aliases for win32 which were causing problems. Users can
1149 define the ones they personally like.
1153 define the ones they personally like.
1150
1154
1151 2005-02-21 Fernando Perez <fperez@colorado.edu>
1155 2005-02-21 Fernando Perez <fperez@colorado.edu>
1152
1156
1153 * IPython/Magic.py (magic_time): new magic to time execution of
1157 * IPython/Magic.py (magic_time): new magic to time execution of
1154 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1158 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1155
1159
1156 2005-02-19 Fernando Perez <fperez@colorado.edu>
1160 2005-02-19 Fernando Perez <fperez@colorado.edu>
1157
1161
1158 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1162 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1159 into keys (for prompts, for example).
1163 into keys (for prompts, for example).
1160
1164
1161 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1165 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1162 prompts in case users want them. This introduces a small behavior
1166 prompts in case users want them. This introduces a small behavior
1163 change: ipython does not automatically add a space to all prompts
1167 change: ipython does not automatically add a space to all prompts
1164 anymore. To get the old prompts with a space, users should add it
1168 anymore. To get the old prompts with a space, users should add it
1165 manually to their ipythonrc file, so for example prompt_in1 should
1169 manually to their ipythonrc file, so for example prompt_in1 should
1166 now read 'In [\#]: ' instead of 'In [\#]:'.
1170 now read 'In [\#]: ' instead of 'In [\#]:'.
1167 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1171 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1168 file) to control left-padding of secondary prompts.
1172 file) to control left-padding of secondary prompts.
1169
1173
1170 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1174 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1171 the profiler can't be imported. Fix for Debian, which removed
1175 the profiler can't be imported. Fix for Debian, which removed
1172 profile.py because of License issues. I applied a slightly
1176 profile.py because of License issues. I applied a slightly
1173 modified version of the original Debian patch at
1177 modified version of the original Debian patch at
1174 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1178 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1175
1179
1176 2005-02-17 Fernando Perez <fperez@colorado.edu>
1180 2005-02-17 Fernando Perez <fperez@colorado.edu>
1177
1181
1178 * IPython/genutils.py (native_line_ends): Fix bug which would
1182 * IPython/genutils.py (native_line_ends): Fix bug which would
1179 cause improper line-ends under win32 b/c I was not opening files
1183 cause improper line-ends under win32 b/c I was not opening files
1180 in binary mode. Bug report and fix thanks to Ville.
1184 in binary mode. Bug report and fix thanks to Ville.
1181
1185
1182 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1186 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1183 trying to catch spurious foo[1] autocalls. My fix actually broke
1187 trying to catch spurious foo[1] autocalls. My fix actually broke
1184 ',/' autoquote/call with explicit escape (bad regexp).
1188 ',/' autoquote/call with explicit escape (bad regexp).
1185
1189
1186 2005-02-15 *** Released version 0.6.11
1190 2005-02-15 *** Released version 0.6.11
1187
1191
1188 2005-02-14 Fernando Perez <fperez@colorado.edu>
1192 2005-02-14 Fernando Perez <fperez@colorado.edu>
1189
1193
1190 * IPython/background_jobs.py: New background job management
1194 * IPython/background_jobs.py: New background job management
1191 subsystem. This is implemented via a new set of classes, and
1195 subsystem. This is implemented via a new set of classes, and
1192 IPython now provides a builtin 'jobs' object for background job
1196 IPython now provides a builtin 'jobs' object for background job
1193 execution. A convenience %bg magic serves as a lightweight
1197 execution. A convenience %bg magic serves as a lightweight
1194 frontend for starting the more common type of calls. This was
1198 frontend for starting the more common type of calls. This was
1195 inspired by discussions with B. Granger and the BackgroundCommand
1199 inspired by discussions with B. Granger and the BackgroundCommand
1196 class described in the book Python Scripting for Computational
1200 class described in the book Python Scripting for Computational
1197 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1201 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1198 (although ultimately no code from this text was used, as IPython's
1202 (although ultimately no code from this text was used, as IPython's
1199 system is a separate implementation).
1203 system is a separate implementation).
1200
1204
1201 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1205 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1202 to control the completion of single/double underscore names
1206 to control the completion of single/double underscore names
1203 separately. As documented in the example ipytonrc file, the
1207 separately. As documented in the example ipytonrc file, the
1204 readline_omit__names variable can now be set to 2, to omit even
1208 readline_omit__names variable can now be set to 2, to omit even
1205 single underscore names. Thanks to a patch by Brian Wong
1209 single underscore names. Thanks to a patch by Brian Wong
1206 <BrianWong-AT-AirgoNetworks.Com>.
1210 <BrianWong-AT-AirgoNetworks.Com>.
1207 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1211 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1208 be autocalled as foo([1]) if foo were callable. A problem for
1212 be autocalled as foo([1]) if foo were callable. A problem for
1209 things which are both callable and implement __getitem__.
1213 things which are both callable and implement __getitem__.
1210 (init_readline): Fix autoindentation for win32. Thanks to a patch
1214 (init_readline): Fix autoindentation for win32. Thanks to a patch
1211 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1215 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1212
1216
1213 2005-02-12 Fernando Perez <fperez@colorado.edu>
1217 2005-02-12 Fernando Perez <fperez@colorado.edu>
1214
1218
1215 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1219 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1216 which I had written long ago to sort out user error messages which
1220 which I had written long ago to sort out user error messages which
1217 may occur during startup. This seemed like a good idea initially,
1221 may occur during startup. This seemed like a good idea initially,
1218 but it has proven a disaster in retrospect. I don't want to
1222 but it has proven a disaster in retrospect. I don't want to
1219 change much code for now, so my fix is to set the internal 'debug'
1223 change much code for now, so my fix is to set the internal 'debug'
1220 flag to true everywhere, whose only job was precisely to control
1224 flag to true everywhere, whose only job was precisely to control
1221 this subsystem. This closes issue 28 (as well as avoiding all
1225 this subsystem. This closes issue 28 (as well as avoiding all
1222 sorts of strange hangups which occur from time to time).
1226 sorts of strange hangups which occur from time to time).
1223
1227
1224 2005-02-07 Fernando Perez <fperez@colorado.edu>
1228 2005-02-07 Fernando Perez <fperez@colorado.edu>
1225
1229
1226 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1230 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1227 previous call produced a syntax error.
1231 previous call produced a syntax error.
1228
1232
1229 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1233 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1230 classes without constructor.
1234 classes without constructor.
1231
1235
1232 2005-02-06 Fernando Perez <fperez@colorado.edu>
1236 2005-02-06 Fernando Perez <fperez@colorado.edu>
1233
1237
1234 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1238 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1235 completions with the results of each matcher, so we return results
1239 completions with the results of each matcher, so we return results
1236 to the user from all namespaces. This breaks with ipython
1240 to the user from all namespaces. This breaks with ipython
1237 tradition, but I think it's a nicer behavior. Now you get all
1241 tradition, but I think it's a nicer behavior. Now you get all
1238 possible completions listed, from all possible namespaces (python,
1242 possible completions listed, from all possible namespaces (python,
1239 filesystem, magics...) After a request by John Hunter
1243 filesystem, magics...) After a request by John Hunter
1240 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1244 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1241
1245
1242 2005-02-05 Fernando Perez <fperez@colorado.edu>
1246 2005-02-05 Fernando Perez <fperez@colorado.edu>
1243
1247
1244 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1248 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1245 the call had quote characters in it (the quotes were stripped).
1249 the call had quote characters in it (the quotes were stripped).
1246
1250
1247 2005-01-31 Fernando Perez <fperez@colorado.edu>
1251 2005-01-31 Fernando Perez <fperez@colorado.edu>
1248
1252
1249 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1253 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1250 Itpl.itpl() to make the code more robust against psyco
1254 Itpl.itpl() to make the code more robust against psyco
1251 optimizations.
1255 optimizations.
1252
1256
1253 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1257 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1254 of causing an exception. Quicker, cleaner.
1258 of causing an exception. Quicker, cleaner.
1255
1259
1256 2005-01-28 Fernando Perez <fperez@colorado.edu>
1260 2005-01-28 Fernando Perez <fperez@colorado.edu>
1257
1261
1258 * scripts/ipython_win_post_install.py (install): hardcode
1262 * scripts/ipython_win_post_install.py (install): hardcode
1259 sys.prefix+'python.exe' as the executable path. It turns out that
1263 sys.prefix+'python.exe' as the executable path. It turns out that
1260 during the post-installation run, sys.executable resolves to the
1264 during the post-installation run, sys.executable resolves to the
1261 name of the binary installer! I should report this as a distutils
1265 name of the binary installer! I should report this as a distutils
1262 bug, I think. I updated the .10 release with this tiny fix, to
1266 bug, I think. I updated the .10 release with this tiny fix, to
1263 avoid annoying the lists further.
1267 avoid annoying the lists further.
1264
1268
1265 2005-01-27 *** Released version 0.6.10
1269 2005-01-27 *** Released version 0.6.10
1266
1270
1267 2005-01-27 Fernando Perez <fperez@colorado.edu>
1271 2005-01-27 Fernando Perez <fperez@colorado.edu>
1268
1272
1269 * IPython/numutils.py (norm): Added 'inf' as optional name for
1273 * IPython/numutils.py (norm): Added 'inf' as optional name for
1270 L-infinity norm, included references to mathworld.com for vector
1274 L-infinity norm, included references to mathworld.com for vector
1271 norm definitions.
1275 norm definitions.
1272 (amin/amax): added amin/amax for array min/max. Similar to what
1276 (amin/amax): added amin/amax for array min/max. Similar to what
1273 pylab ships with after the recent reorganization of names.
1277 pylab ships with after the recent reorganization of names.
1274 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1278 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1275
1279
1276 * ipython.el: committed Alex's recent fixes and improvements.
1280 * ipython.el: committed Alex's recent fixes and improvements.
1277 Tested with python-mode from CVS, and it looks excellent. Since
1281 Tested with python-mode from CVS, and it looks excellent. Since
1278 python-mode hasn't released anything in a while, I'm temporarily
1282 python-mode hasn't released anything in a while, I'm temporarily
1279 putting a copy of today's CVS (v 4.70) of python-mode in:
1283 putting a copy of today's CVS (v 4.70) of python-mode in:
1280 http://ipython.scipy.org/tmp/python-mode.el
1284 http://ipython.scipy.org/tmp/python-mode.el
1281
1285
1282 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1286 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1283 sys.executable for the executable name, instead of assuming it's
1287 sys.executable for the executable name, instead of assuming it's
1284 called 'python.exe' (the post-installer would have produced broken
1288 called 'python.exe' (the post-installer would have produced broken
1285 setups on systems with a differently named python binary).
1289 setups on systems with a differently named python binary).
1286
1290
1287 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1291 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1288 references to os.linesep, to make the code more
1292 references to os.linesep, to make the code more
1289 platform-independent. This is also part of the win32 coloring
1293 platform-independent. This is also part of the win32 coloring
1290 fixes.
1294 fixes.
1291
1295
1292 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1296 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1293 lines, which actually cause coloring bugs because the length of
1297 lines, which actually cause coloring bugs because the length of
1294 the line is very difficult to correctly compute with embedded
1298 the line is very difficult to correctly compute with embedded
1295 escapes. This was the source of all the coloring problems under
1299 escapes. This was the source of all the coloring problems under
1296 Win32. I think that _finally_, Win32 users have a properly
1300 Win32. I think that _finally_, Win32 users have a properly
1297 working ipython in all respects. This would never have happened
1301 working ipython in all respects. This would never have happened
1298 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1302 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1299
1303
1300 2005-01-26 *** Released version 0.6.9
1304 2005-01-26 *** Released version 0.6.9
1301
1305
1302 2005-01-25 Fernando Perez <fperez@colorado.edu>
1306 2005-01-25 Fernando Perez <fperez@colorado.edu>
1303
1307
1304 * setup.py: finally, we have a true Windows installer, thanks to
1308 * setup.py: finally, we have a true Windows installer, thanks to
1305 the excellent work of Viktor Ransmayr
1309 the excellent work of Viktor Ransmayr
1306 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1310 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1307 Windows users. The setup routine is quite a bit cleaner thanks to
1311 Windows users. The setup routine is quite a bit cleaner thanks to
1308 this, and the post-install script uses the proper functions to
1312 this, and the post-install script uses the proper functions to
1309 allow a clean de-installation using the standard Windows Control
1313 allow a clean de-installation using the standard Windows Control
1310 Panel.
1314 Panel.
1311
1315
1312 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1316 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1313 environment variable under all OSes (including win32) if
1317 environment variable under all OSes (including win32) if
1314 available. This will give consistency to win32 users who have set
1318 available. This will give consistency to win32 users who have set
1315 this variable for any reason. If os.environ['HOME'] fails, the
1319 this variable for any reason. If os.environ['HOME'] fails, the
1316 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1320 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1317
1321
1318 2005-01-24 Fernando Perez <fperez@colorado.edu>
1322 2005-01-24 Fernando Perez <fperez@colorado.edu>
1319
1323
1320 * IPython/numutils.py (empty_like): add empty_like(), similar to
1324 * IPython/numutils.py (empty_like): add empty_like(), similar to
1321 zeros_like() but taking advantage of the new empty() Numeric routine.
1325 zeros_like() but taking advantage of the new empty() Numeric routine.
1322
1326
1323 2005-01-23 *** Released version 0.6.8
1327 2005-01-23 *** Released version 0.6.8
1324
1328
1325 2005-01-22 Fernando Perez <fperez@colorado.edu>
1329 2005-01-22 Fernando Perez <fperez@colorado.edu>
1326
1330
1327 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1331 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1328 automatic show() calls. After discussing things with JDH, it
1332 automatic show() calls. After discussing things with JDH, it
1329 turns out there are too many corner cases where this can go wrong.
1333 turns out there are too many corner cases where this can go wrong.
1330 It's best not to try to be 'too smart', and simply have ipython
1334 It's best not to try to be 'too smart', and simply have ipython
1331 reproduce as much as possible the default behavior of a normal
1335 reproduce as much as possible the default behavior of a normal
1332 python shell.
1336 python shell.
1333
1337
1334 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1338 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1335 line-splitting regexp and _prefilter() to avoid calling getattr()
1339 line-splitting regexp and _prefilter() to avoid calling getattr()
1336 on assignments. This closes
1340 on assignments. This closes
1337 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1341 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1338 readline uses getattr(), so a simple <TAB> keypress is still
1342 readline uses getattr(), so a simple <TAB> keypress is still
1339 enough to trigger getattr() calls on an object.
1343 enough to trigger getattr() calls on an object.
1340
1344
1341 2005-01-21 Fernando Perez <fperez@colorado.edu>
1345 2005-01-21 Fernando Perez <fperez@colorado.edu>
1342
1346
1343 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1347 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1344 docstring under pylab so it doesn't mask the original.
1348 docstring under pylab so it doesn't mask the original.
1345
1349
1346 2005-01-21 *** Released version 0.6.7
1350 2005-01-21 *** Released version 0.6.7
1347
1351
1348 2005-01-21 Fernando Perez <fperez@colorado.edu>
1352 2005-01-21 Fernando Perez <fperez@colorado.edu>
1349
1353
1350 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1354 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1351 signal handling for win32 users in multithreaded mode.
1355 signal handling for win32 users in multithreaded mode.
1352
1356
1353 2005-01-17 Fernando Perez <fperez@colorado.edu>
1357 2005-01-17 Fernando Perez <fperez@colorado.edu>
1354
1358
1355 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1359 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1356 instances with no __init__. After a crash report by Norbert Nemec
1360 instances with no __init__. After a crash report by Norbert Nemec
1357 <Norbert-AT-nemec-online.de>.
1361 <Norbert-AT-nemec-online.de>.
1358
1362
1359 2005-01-14 Fernando Perez <fperez@colorado.edu>
1363 2005-01-14 Fernando Perez <fperez@colorado.edu>
1360
1364
1361 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1365 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1362 names for verbose exceptions, when multiple dotted names and the
1366 names for verbose exceptions, when multiple dotted names and the
1363 'parent' object were present on the same line.
1367 'parent' object were present on the same line.
1364
1368
1365 2005-01-11 Fernando Perez <fperez@colorado.edu>
1369 2005-01-11 Fernando Perez <fperez@colorado.edu>
1366
1370
1367 * IPython/genutils.py (flag_calls): new utility to trap and flag
1371 * IPython/genutils.py (flag_calls): new utility to trap and flag
1368 calls in functions. I need it to clean up matplotlib support.
1372 calls in functions. I need it to clean up matplotlib support.
1369 Also removed some deprecated code in genutils.
1373 Also removed some deprecated code in genutils.
1370
1374
1371 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1375 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1372 that matplotlib scripts called with %run, which don't call show()
1376 that matplotlib scripts called with %run, which don't call show()
1373 themselves, still have their plotting windows open.
1377 themselves, still have their plotting windows open.
1374
1378
1375 2005-01-05 Fernando Perez <fperez@colorado.edu>
1379 2005-01-05 Fernando Perez <fperez@colorado.edu>
1376
1380
1377 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1381 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1378 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1382 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1379
1383
1380 2004-12-19 Fernando Perez <fperez@colorado.edu>
1384 2004-12-19 Fernando Perez <fperez@colorado.edu>
1381
1385
1382 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1386 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1383 parent_runcode, which was an eyesore. The same result can be
1387 parent_runcode, which was an eyesore. The same result can be
1384 obtained with Python's regular superclass mechanisms.
1388 obtained with Python's regular superclass mechanisms.
1385
1389
1386 2004-12-17 Fernando Perez <fperez@colorado.edu>
1390 2004-12-17 Fernando Perez <fperez@colorado.edu>
1387
1391
1388 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1392 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1389 reported by Prabhu.
1393 reported by Prabhu.
1390 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1394 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1391 sys.stderr) instead of explicitly calling sys.stderr. This helps
1395 sys.stderr) instead of explicitly calling sys.stderr. This helps
1392 maintain our I/O abstractions clean, for future GUI embeddings.
1396 maintain our I/O abstractions clean, for future GUI embeddings.
1393
1397
1394 * IPython/genutils.py (info): added new utility for sys.stderr
1398 * IPython/genutils.py (info): added new utility for sys.stderr
1395 unified info message handling (thin wrapper around warn()).
1399 unified info message handling (thin wrapper around warn()).
1396
1400
1397 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1401 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1398 composite (dotted) names on verbose exceptions.
1402 composite (dotted) names on verbose exceptions.
1399 (VerboseTB.nullrepr): harden against another kind of errors which
1403 (VerboseTB.nullrepr): harden against another kind of errors which
1400 Python's inspect module can trigger, and which were crashing
1404 Python's inspect module can trigger, and which were crashing
1401 IPython. Thanks to a report by Marco Lombardi
1405 IPython. Thanks to a report by Marco Lombardi
1402 <mlombard-AT-ma010192.hq.eso.org>.
1406 <mlombard-AT-ma010192.hq.eso.org>.
1403
1407
1404 2004-12-13 *** Released version 0.6.6
1408 2004-12-13 *** Released version 0.6.6
1405
1409
1406 2004-12-12 Fernando Perez <fperez@colorado.edu>
1410 2004-12-12 Fernando Perez <fperez@colorado.edu>
1407
1411
1408 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1412 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1409 generated by pygtk upon initialization if it was built without
1413 generated by pygtk upon initialization if it was built without
1410 threads (for matplotlib users). After a crash reported by
1414 threads (for matplotlib users). After a crash reported by
1411 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1415 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1412
1416
1413 * IPython/ipmaker.py (make_IPython): fix small bug in the
1417 * IPython/ipmaker.py (make_IPython): fix small bug in the
1414 import_some parameter for multiple imports.
1418 import_some parameter for multiple imports.
1415
1419
1416 * IPython/iplib.py (ipmagic): simplified the interface of
1420 * IPython/iplib.py (ipmagic): simplified the interface of
1417 ipmagic() to take a single string argument, just as it would be
1421 ipmagic() to take a single string argument, just as it would be
1418 typed at the IPython cmd line.
1422 typed at the IPython cmd line.
1419 (ipalias): Added new ipalias() with an interface identical to
1423 (ipalias): Added new ipalias() with an interface identical to
1420 ipmagic(). This completes exposing a pure python interface to the
1424 ipmagic(). This completes exposing a pure python interface to the
1421 alias and magic system, which can be used in loops or more complex
1425 alias and magic system, which can be used in loops or more complex
1422 code where IPython's automatic line mangling is not active.
1426 code where IPython's automatic line mangling is not active.
1423
1427
1424 * IPython/genutils.py (timing): changed interface of timing to
1428 * IPython/genutils.py (timing): changed interface of timing to
1425 simply run code once, which is the most common case. timings()
1429 simply run code once, which is the most common case. timings()
1426 remains unchanged, for the cases where you want multiple runs.
1430 remains unchanged, for the cases where you want multiple runs.
1427
1431
1428 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1432 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1429 bug where Python2.2 crashes with exec'ing code which does not end
1433 bug where Python2.2 crashes with exec'ing code which does not end
1430 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1434 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1431 before.
1435 before.
1432
1436
1433 2004-12-10 Fernando Perez <fperez@colorado.edu>
1437 2004-12-10 Fernando Perez <fperez@colorado.edu>
1434
1438
1435 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1439 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1436 -t to -T, to accomodate the new -t flag in %run (the %run and
1440 -t to -T, to accomodate the new -t flag in %run (the %run and
1437 %prun options are kind of intermixed, and it's not easy to change
1441 %prun options are kind of intermixed, and it's not easy to change
1438 this with the limitations of python's getopt).
1442 this with the limitations of python's getopt).
1439
1443
1440 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1444 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1441 the execution of scripts. It's not as fine-tuned as timeit.py,
1445 the execution of scripts. It's not as fine-tuned as timeit.py,
1442 but it works from inside ipython (and under 2.2, which lacks
1446 but it works from inside ipython (and under 2.2, which lacks
1443 timeit.py). Optionally a number of runs > 1 can be given for
1447 timeit.py). Optionally a number of runs > 1 can be given for
1444 timing very short-running code.
1448 timing very short-running code.
1445
1449
1446 * IPython/genutils.py (uniq_stable): new routine which returns a
1450 * IPython/genutils.py (uniq_stable): new routine which returns a
1447 list of unique elements in any iterable, but in stable order of
1451 list of unique elements in any iterable, but in stable order of
1448 appearance. I needed this for the ultraTB fixes, and it's a handy
1452 appearance. I needed this for the ultraTB fixes, and it's a handy
1449 utility.
1453 utility.
1450
1454
1451 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1455 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1452 dotted names in Verbose exceptions. This had been broken since
1456 dotted names in Verbose exceptions. This had been broken since
1453 the very start, now x.y will properly be printed in a Verbose
1457 the very start, now x.y will properly be printed in a Verbose
1454 traceback, instead of x being shown and y appearing always as an
1458 traceback, instead of x being shown and y appearing always as an
1455 'undefined global'. Getting this to work was a bit tricky,
1459 'undefined global'. Getting this to work was a bit tricky,
1456 because by default python tokenizers are stateless. Saved by
1460 because by default python tokenizers are stateless. Saved by
1457 python's ability to easily add a bit of state to an arbitrary
1461 python's ability to easily add a bit of state to an arbitrary
1458 function (without needing to build a full-blown callable object).
1462 function (without needing to build a full-blown callable object).
1459
1463
1460 Also big cleanup of this code, which had horrendous runtime
1464 Also big cleanup of this code, which had horrendous runtime
1461 lookups of zillions of attributes for colorization. Moved all
1465 lookups of zillions of attributes for colorization. Moved all
1462 this code into a few templates, which make it cleaner and quicker.
1466 this code into a few templates, which make it cleaner and quicker.
1463
1467
1464 Printout quality was also improved for Verbose exceptions: one
1468 Printout quality was also improved for Verbose exceptions: one
1465 variable per line, and memory addresses are printed (this can be
1469 variable per line, and memory addresses are printed (this can be
1466 quite handy in nasty debugging situations, which is what Verbose
1470 quite handy in nasty debugging situations, which is what Verbose
1467 is for).
1471 is for).
1468
1472
1469 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1473 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1470 the command line as scripts to be loaded by embedded instances.
1474 the command line as scripts to be loaded by embedded instances.
1471 Doing so has the potential for an infinite recursion if there are
1475 Doing so has the potential for an infinite recursion if there are
1472 exceptions thrown in the process. This fixes a strange crash
1476 exceptions thrown in the process. This fixes a strange crash
1473 reported by Philippe MULLER <muller-AT-irit.fr>.
1477 reported by Philippe MULLER <muller-AT-irit.fr>.
1474
1478
1475 2004-12-09 Fernando Perez <fperez@colorado.edu>
1479 2004-12-09 Fernando Perez <fperez@colorado.edu>
1476
1480
1477 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1481 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1478 to reflect new names in matplotlib, which now expose the
1482 to reflect new names in matplotlib, which now expose the
1479 matlab-compatible interface via a pylab module instead of the
1483 matlab-compatible interface via a pylab module instead of the
1480 'matlab' name. The new code is backwards compatible, so users of
1484 'matlab' name. The new code is backwards compatible, so users of
1481 all matplotlib versions are OK. Patch by J. Hunter.
1485 all matplotlib versions are OK. Patch by J. Hunter.
1482
1486
1483 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1487 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1484 of __init__ docstrings for instances (class docstrings are already
1488 of __init__ docstrings for instances (class docstrings are already
1485 automatically printed). Instances with customized docstrings
1489 automatically printed). Instances with customized docstrings
1486 (indep. of the class) are also recognized and all 3 separate
1490 (indep. of the class) are also recognized and all 3 separate
1487 docstrings are printed (instance, class, constructor). After some
1491 docstrings are printed (instance, class, constructor). After some
1488 comments/suggestions by J. Hunter.
1492 comments/suggestions by J. Hunter.
1489
1493
1490 2004-12-05 Fernando Perez <fperez@colorado.edu>
1494 2004-12-05 Fernando Perez <fperez@colorado.edu>
1491
1495
1492 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1496 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1493 warnings when tab-completion fails and triggers an exception.
1497 warnings when tab-completion fails and triggers an exception.
1494
1498
1495 2004-12-03 Fernando Perez <fperez@colorado.edu>
1499 2004-12-03 Fernando Perez <fperez@colorado.edu>
1496
1500
1497 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1501 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1498 be triggered when using 'run -p'. An incorrect option flag was
1502 be triggered when using 'run -p'. An incorrect option flag was
1499 being set ('d' instead of 'D').
1503 being set ('d' instead of 'D').
1500 (manpage): fix missing escaped \- sign.
1504 (manpage): fix missing escaped \- sign.
1501
1505
1502 2004-11-30 *** Released version 0.6.5
1506 2004-11-30 *** Released version 0.6.5
1503
1507
1504 2004-11-30 Fernando Perez <fperez@colorado.edu>
1508 2004-11-30 Fernando Perez <fperez@colorado.edu>
1505
1509
1506 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1510 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1507 setting with -d option.
1511 setting with -d option.
1508
1512
1509 * setup.py (docfiles): Fix problem where the doc glob I was using
1513 * setup.py (docfiles): Fix problem where the doc glob I was using
1510 was COMPLETELY BROKEN. It was giving the right files by pure
1514 was COMPLETELY BROKEN. It was giving the right files by pure
1511 accident, but failed once I tried to include ipython.el. Note:
1515 accident, but failed once I tried to include ipython.el. Note:
1512 glob() does NOT allow you to do exclusion on multiple endings!
1516 glob() does NOT allow you to do exclusion on multiple endings!
1513
1517
1514 2004-11-29 Fernando Perez <fperez@colorado.edu>
1518 2004-11-29 Fernando Perez <fperez@colorado.edu>
1515
1519
1516 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1520 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1517 the manpage as the source. Better formatting & consistency.
1521 the manpage as the source. Better formatting & consistency.
1518
1522
1519 * IPython/Magic.py (magic_run): Added new -d option, to run
1523 * IPython/Magic.py (magic_run): Added new -d option, to run
1520 scripts under the control of the python pdb debugger. Note that
1524 scripts under the control of the python pdb debugger. Note that
1521 this required changing the %prun option -d to -D, to avoid a clash
1525 this required changing the %prun option -d to -D, to avoid a clash
1522 (since %run must pass options to %prun, and getopt is too dumb to
1526 (since %run must pass options to %prun, and getopt is too dumb to
1523 handle options with string values with embedded spaces). Thanks
1527 handle options with string values with embedded spaces). Thanks
1524 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1528 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1525 (magic_who_ls): added type matching to %who and %whos, so that one
1529 (magic_who_ls): added type matching to %who and %whos, so that one
1526 can filter their output to only include variables of certain
1530 can filter their output to only include variables of certain
1527 types. Another suggestion by Matthew.
1531 types. Another suggestion by Matthew.
1528 (magic_whos): Added memory summaries in kb and Mb for arrays.
1532 (magic_whos): Added memory summaries in kb and Mb for arrays.
1529 (magic_who): Improve formatting (break lines every 9 vars).
1533 (magic_who): Improve formatting (break lines every 9 vars).
1530
1534
1531 2004-11-28 Fernando Perez <fperez@colorado.edu>
1535 2004-11-28 Fernando Perez <fperez@colorado.edu>
1532
1536
1533 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1537 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1534 cache when empty lines were present.
1538 cache when empty lines were present.
1535
1539
1536 2004-11-24 Fernando Perez <fperez@colorado.edu>
1540 2004-11-24 Fernando Perez <fperez@colorado.edu>
1537
1541
1538 * IPython/usage.py (__doc__): document the re-activated threading
1542 * IPython/usage.py (__doc__): document the re-activated threading
1539 options for WX and GTK.
1543 options for WX and GTK.
1540
1544
1541 2004-11-23 Fernando Perez <fperez@colorado.edu>
1545 2004-11-23 Fernando Perez <fperez@colorado.edu>
1542
1546
1543 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1547 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1544 the -wthread and -gthread options, along with a new -tk one to try
1548 the -wthread and -gthread options, along with a new -tk one to try
1545 and coordinate Tk threading with wx/gtk. The tk support is very
1549 and coordinate Tk threading with wx/gtk. The tk support is very
1546 platform dependent, since it seems to require Tcl and Tk to be
1550 platform dependent, since it seems to require Tcl and Tk to be
1547 built with threads (Fedora1/2 appears NOT to have it, but in
1551 built with threads (Fedora1/2 appears NOT to have it, but in
1548 Prabhu's Debian boxes it works OK). But even with some Tk
1552 Prabhu's Debian boxes it works OK). But even with some Tk
1549 limitations, this is a great improvement.
1553 limitations, this is a great improvement.
1550
1554
1551 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1555 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1552 info in user prompts. Patch by Prabhu.
1556 info in user prompts. Patch by Prabhu.
1553
1557
1554 2004-11-18 Fernando Perez <fperez@colorado.edu>
1558 2004-11-18 Fernando Perez <fperez@colorado.edu>
1555
1559
1556 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1560 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1557 EOFErrors and bail, to avoid infinite loops if a non-terminating
1561 EOFErrors and bail, to avoid infinite loops if a non-terminating
1558 file is fed into ipython. Patch submitted in issue 19 by user,
1562 file is fed into ipython. Patch submitted in issue 19 by user,
1559 many thanks.
1563 many thanks.
1560
1564
1561 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1565 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1562 autoquote/parens in continuation prompts, which can cause lots of
1566 autoquote/parens in continuation prompts, which can cause lots of
1563 problems. Closes roundup issue 20.
1567 problems. Closes roundup issue 20.
1564
1568
1565 2004-11-17 Fernando Perez <fperez@colorado.edu>
1569 2004-11-17 Fernando Perez <fperez@colorado.edu>
1566
1570
1567 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1571 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1568 reported as debian bug #280505. I'm not sure my local changelog
1572 reported as debian bug #280505. I'm not sure my local changelog
1569 entry has the proper debian format (Jack?).
1573 entry has the proper debian format (Jack?).
1570
1574
1571 2004-11-08 *** Released version 0.6.4
1575 2004-11-08 *** Released version 0.6.4
1572
1576
1573 2004-11-08 Fernando Perez <fperez@colorado.edu>
1577 2004-11-08 Fernando Perez <fperez@colorado.edu>
1574
1578
1575 * IPython/iplib.py (init_readline): Fix exit message for Windows
1579 * IPython/iplib.py (init_readline): Fix exit message for Windows
1576 when readline is active. Thanks to a report by Eric Jones
1580 when readline is active. Thanks to a report by Eric Jones
1577 <eric-AT-enthought.com>.
1581 <eric-AT-enthought.com>.
1578
1582
1579 2004-11-07 Fernando Perez <fperez@colorado.edu>
1583 2004-11-07 Fernando Perez <fperez@colorado.edu>
1580
1584
1581 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1585 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1582 sometimes seen by win2k/cygwin users.
1586 sometimes seen by win2k/cygwin users.
1583
1587
1584 2004-11-06 Fernando Perez <fperez@colorado.edu>
1588 2004-11-06 Fernando Perez <fperez@colorado.edu>
1585
1589
1586 * IPython/iplib.py (interact): Change the handling of %Exit from
1590 * IPython/iplib.py (interact): Change the handling of %Exit from
1587 trying to propagate a SystemExit to an internal ipython flag.
1591 trying to propagate a SystemExit to an internal ipython flag.
1588 This is less elegant than using Python's exception mechanism, but
1592 This is less elegant than using Python's exception mechanism, but
1589 I can't get that to work reliably with threads, so under -pylab
1593 I can't get that to work reliably with threads, so under -pylab
1590 %Exit was hanging IPython. Cross-thread exception handling is
1594 %Exit was hanging IPython. Cross-thread exception handling is
1591 really a bitch. Thaks to a bug report by Stephen Walton
1595 really a bitch. Thaks to a bug report by Stephen Walton
1592 <stephen.walton-AT-csun.edu>.
1596 <stephen.walton-AT-csun.edu>.
1593
1597
1594 2004-11-04 Fernando Perez <fperez@colorado.edu>
1598 2004-11-04 Fernando Perez <fperez@colorado.edu>
1595
1599
1596 * IPython/iplib.py (raw_input_original): store a pointer to the
1600 * IPython/iplib.py (raw_input_original): store a pointer to the
1597 true raw_input to harden against code which can modify it
1601 true raw_input to harden against code which can modify it
1598 (wx.py.PyShell does this and would otherwise crash ipython).
1602 (wx.py.PyShell does this and would otherwise crash ipython).
1599 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1603 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1600
1604
1601 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1605 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1602 Ctrl-C problem, which does not mess up the input line.
1606 Ctrl-C problem, which does not mess up the input line.
1603
1607
1604 2004-11-03 Fernando Perez <fperez@colorado.edu>
1608 2004-11-03 Fernando Perez <fperez@colorado.edu>
1605
1609
1606 * IPython/Release.py: Changed licensing to BSD, in all files.
1610 * IPython/Release.py: Changed licensing to BSD, in all files.
1607 (name): lowercase name for tarball/RPM release.
1611 (name): lowercase name for tarball/RPM release.
1608
1612
1609 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1613 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1610 use throughout ipython.
1614 use throughout ipython.
1611
1615
1612 * IPython/Magic.py (Magic._ofind): Switch to using the new
1616 * IPython/Magic.py (Magic._ofind): Switch to using the new
1613 OInspect.getdoc() function.
1617 OInspect.getdoc() function.
1614
1618
1615 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1619 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1616 of the line currently being canceled via Ctrl-C. It's extremely
1620 of the line currently being canceled via Ctrl-C. It's extremely
1617 ugly, but I don't know how to do it better (the problem is one of
1621 ugly, but I don't know how to do it better (the problem is one of
1618 handling cross-thread exceptions).
1622 handling cross-thread exceptions).
1619
1623
1620 2004-10-28 Fernando Perez <fperez@colorado.edu>
1624 2004-10-28 Fernando Perez <fperez@colorado.edu>
1621
1625
1622 * IPython/Shell.py (signal_handler): add signal handlers to trap
1626 * IPython/Shell.py (signal_handler): add signal handlers to trap
1623 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1627 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1624 report by Francesc Alted.
1628 report by Francesc Alted.
1625
1629
1626 2004-10-21 Fernando Perez <fperez@colorado.edu>
1630 2004-10-21 Fernando Perez <fperez@colorado.edu>
1627
1631
1628 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1632 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1629 to % for pysh syntax extensions.
1633 to % for pysh syntax extensions.
1630
1634
1631 2004-10-09 Fernando Perez <fperez@colorado.edu>
1635 2004-10-09 Fernando Perez <fperez@colorado.edu>
1632
1636
1633 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1637 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1634 arrays to print a more useful summary, without calling str(arr).
1638 arrays to print a more useful summary, without calling str(arr).
1635 This avoids the problem of extremely lengthy computations which
1639 This avoids the problem of extremely lengthy computations which
1636 occur if arr is large, and appear to the user as a system lockup
1640 occur if arr is large, and appear to the user as a system lockup
1637 with 100% cpu activity. After a suggestion by Kristian Sandberg
1641 with 100% cpu activity. After a suggestion by Kristian Sandberg
1638 <Kristian.Sandberg@colorado.edu>.
1642 <Kristian.Sandberg@colorado.edu>.
1639 (Magic.__init__): fix bug in global magic escapes not being
1643 (Magic.__init__): fix bug in global magic escapes not being
1640 correctly set.
1644 correctly set.
1641
1645
1642 2004-10-08 Fernando Perez <fperez@colorado.edu>
1646 2004-10-08 Fernando Perez <fperez@colorado.edu>
1643
1647
1644 * IPython/Magic.py (__license__): change to absolute imports of
1648 * IPython/Magic.py (__license__): change to absolute imports of
1645 ipython's own internal packages, to start adapting to the absolute
1649 ipython's own internal packages, to start adapting to the absolute
1646 import requirement of PEP-328.
1650 import requirement of PEP-328.
1647
1651
1648 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1652 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1649 files, and standardize author/license marks through the Release
1653 files, and standardize author/license marks through the Release
1650 module instead of having per/file stuff (except for files with
1654 module instead of having per/file stuff (except for files with
1651 particular licenses, like the MIT/PSF-licensed codes).
1655 particular licenses, like the MIT/PSF-licensed codes).
1652
1656
1653 * IPython/Debugger.py: remove dead code for python 2.1
1657 * IPython/Debugger.py: remove dead code for python 2.1
1654
1658
1655 2004-10-04 Fernando Perez <fperez@colorado.edu>
1659 2004-10-04 Fernando Perez <fperez@colorado.edu>
1656
1660
1657 * IPython/iplib.py (ipmagic): New function for accessing magics
1661 * IPython/iplib.py (ipmagic): New function for accessing magics
1658 via a normal python function call.
1662 via a normal python function call.
1659
1663
1660 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1664 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1661 from '@' to '%', to accomodate the new @decorator syntax of python
1665 from '@' to '%', to accomodate the new @decorator syntax of python
1662 2.4.
1666 2.4.
1663
1667
1664 2004-09-29 Fernando Perez <fperez@colorado.edu>
1668 2004-09-29 Fernando Perez <fperez@colorado.edu>
1665
1669
1666 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1670 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1667 matplotlib.use to prevent running scripts which try to switch
1671 matplotlib.use to prevent running scripts which try to switch
1668 interactive backends from within ipython. This will just crash
1672 interactive backends from within ipython. This will just crash
1669 the python interpreter, so we can't allow it (but a detailed error
1673 the python interpreter, so we can't allow it (but a detailed error
1670 is given to the user).
1674 is given to the user).
1671
1675
1672 2004-09-28 Fernando Perez <fperez@colorado.edu>
1676 2004-09-28 Fernando Perez <fperez@colorado.edu>
1673
1677
1674 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1678 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1675 matplotlib-related fixes so that using @run with non-matplotlib
1679 matplotlib-related fixes so that using @run with non-matplotlib
1676 scripts doesn't pop up spurious plot windows. This requires
1680 scripts doesn't pop up spurious plot windows. This requires
1677 matplotlib >= 0.63, where I had to make some changes as well.
1681 matplotlib >= 0.63, where I had to make some changes as well.
1678
1682
1679 * IPython/ipmaker.py (make_IPython): update version requirement to
1683 * IPython/ipmaker.py (make_IPython): update version requirement to
1680 python 2.2.
1684 python 2.2.
1681
1685
1682 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1686 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1683 banner arg for embedded customization.
1687 banner arg for embedded customization.
1684
1688
1685 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1689 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1686 explicit uses of __IP as the IPython's instance name. Now things
1690 explicit uses of __IP as the IPython's instance name. Now things
1687 are properly handled via the shell.name value. The actual code
1691 are properly handled via the shell.name value. The actual code
1688 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1692 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1689 is much better than before. I'll clean things completely when the
1693 is much better than before. I'll clean things completely when the
1690 magic stuff gets a real overhaul.
1694 magic stuff gets a real overhaul.
1691
1695
1692 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1696 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1693 minor changes to debian dir.
1697 minor changes to debian dir.
1694
1698
1695 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1699 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1696 pointer to the shell itself in the interactive namespace even when
1700 pointer to the shell itself in the interactive namespace even when
1697 a user-supplied dict is provided. This is needed for embedding
1701 a user-supplied dict is provided. This is needed for embedding
1698 purposes (found by tests with Michel Sanner).
1702 purposes (found by tests with Michel Sanner).
1699
1703
1700 2004-09-27 Fernando Perez <fperez@colorado.edu>
1704 2004-09-27 Fernando Perez <fperez@colorado.edu>
1701
1705
1702 * IPython/UserConfig/ipythonrc: remove []{} from
1706 * IPython/UserConfig/ipythonrc: remove []{} from
1703 readline_remove_delims, so that things like [modname.<TAB> do
1707 readline_remove_delims, so that things like [modname.<TAB> do
1704 proper completion. This disables [].TAB, but that's a less common
1708 proper completion. This disables [].TAB, but that's a less common
1705 case than module names in list comprehensions, for example.
1709 case than module names in list comprehensions, for example.
1706 Thanks to a report by Andrea Riciputi.
1710 Thanks to a report by Andrea Riciputi.
1707
1711
1708 2004-09-09 Fernando Perez <fperez@colorado.edu>
1712 2004-09-09 Fernando Perez <fperez@colorado.edu>
1709
1713
1710 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1714 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1711 blocking problems in win32 and osx. Fix by John.
1715 blocking problems in win32 and osx. Fix by John.
1712
1716
1713 2004-09-08 Fernando Perez <fperez@colorado.edu>
1717 2004-09-08 Fernando Perez <fperez@colorado.edu>
1714
1718
1715 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1719 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1716 for Win32 and OSX. Fix by John Hunter.
1720 for Win32 and OSX. Fix by John Hunter.
1717
1721
1718 2004-08-30 *** Released version 0.6.3
1722 2004-08-30 *** Released version 0.6.3
1719
1723
1720 2004-08-30 Fernando Perez <fperez@colorado.edu>
1724 2004-08-30 Fernando Perez <fperez@colorado.edu>
1721
1725
1722 * setup.py (isfile): Add manpages to list of dependent files to be
1726 * setup.py (isfile): Add manpages to list of dependent files to be
1723 updated.
1727 updated.
1724
1728
1725 2004-08-27 Fernando Perez <fperez@colorado.edu>
1729 2004-08-27 Fernando Perez <fperez@colorado.edu>
1726
1730
1727 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1731 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1728 for now. They don't really work with standalone WX/GTK code
1732 for now. They don't really work with standalone WX/GTK code
1729 (though matplotlib IS working fine with both of those backends).
1733 (though matplotlib IS working fine with both of those backends).
1730 This will neeed much more testing. I disabled most things with
1734 This will neeed much more testing. I disabled most things with
1731 comments, so turning it back on later should be pretty easy.
1735 comments, so turning it back on later should be pretty easy.
1732
1736
1733 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1737 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1734 autocalling of expressions like r'foo', by modifying the line
1738 autocalling of expressions like r'foo', by modifying the line
1735 split regexp. Closes
1739 split regexp. Closes
1736 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1740 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1737 Riley <ipythonbugs-AT-sabi.net>.
1741 Riley <ipythonbugs-AT-sabi.net>.
1738 (InteractiveShell.mainloop): honor --nobanner with banner
1742 (InteractiveShell.mainloop): honor --nobanner with banner
1739 extensions.
1743 extensions.
1740
1744
1741 * IPython/Shell.py: Significant refactoring of all classes, so
1745 * IPython/Shell.py: Significant refactoring of all classes, so
1742 that we can really support ALL matplotlib backends and threading
1746 that we can really support ALL matplotlib backends and threading
1743 models (John spotted a bug with Tk which required this). Now we
1747 models (John spotted a bug with Tk which required this). Now we
1744 should support single-threaded, WX-threads and GTK-threads, both
1748 should support single-threaded, WX-threads and GTK-threads, both
1745 for generic code and for matplotlib.
1749 for generic code and for matplotlib.
1746
1750
1747 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1751 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1748 -pylab, to simplify things for users. Will also remove the pylab
1752 -pylab, to simplify things for users. Will also remove the pylab
1749 profile, since now all of matplotlib configuration is directly
1753 profile, since now all of matplotlib configuration is directly
1750 handled here. This also reduces startup time.
1754 handled here. This also reduces startup time.
1751
1755
1752 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1756 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1753 shell wasn't being correctly called. Also in IPShellWX.
1757 shell wasn't being correctly called. Also in IPShellWX.
1754
1758
1755 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1759 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1756 fine-tune banner.
1760 fine-tune banner.
1757
1761
1758 * IPython/numutils.py (spike): Deprecate these spike functions,
1762 * IPython/numutils.py (spike): Deprecate these spike functions,
1759 delete (long deprecated) gnuplot_exec handler.
1763 delete (long deprecated) gnuplot_exec handler.
1760
1764
1761 2004-08-26 Fernando Perez <fperez@colorado.edu>
1765 2004-08-26 Fernando Perez <fperez@colorado.edu>
1762
1766
1763 * ipython.1: Update for threading options, plus some others which
1767 * ipython.1: Update for threading options, plus some others which
1764 were missing.
1768 were missing.
1765
1769
1766 * IPython/ipmaker.py (__call__): Added -wthread option for
1770 * IPython/ipmaker.py (__call__): Added -wthread option for
1767 wxpython thread handling. Make sure threading options are only
1771 wxpython thread handling. Make sure threading options are only
1768 valid at the command line.
1772 valid at the command line.
1769
1773
1770 * scripts/ipython: moved shell selection into a factory function
1774 * scripts/ipython: moved shell selection into a factory function
1771 in Shell.py, to keep the starter script to a minimum.
1775 in Shell.py, to keep the starter script to a minimum.
1772
1776
1773 2004-08-25 Fernando Perez <fperez@colorado.edu>
1777 2004-08-25 Fernando Perez <fperez@colorado.edu>
1774
1778
1775 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1779 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1776 John. Along with some recent changes he made to matplotlib, the
1780 John. Along with some recent changes he made to matplotlib, the
1777 next versions of both systems should work very well together.
1781 next versions of both systems should work very well together.
1778
1782
1779 2004-08-24 Fernando Perez <fperez@colorado.edu>
1783 2004-08-24 Fernando Perez <fperez@colorado.edu>
1780
1784
1781 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1785 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1782 tried to switch the profiling to using hotshot, but I'm getting
1786 tried to switch the profiling to using hotshot, but I'm getting
1783 strange errors from prof.runctx() there. I may be misreading the
1787 strange errors from prof.runctx() there. I may be misreading the
1784 docs, but it looks weird. For now the profiling code will
1788 docs, but it looks weird. For now the profiling code will
1785 continue to use the standard profiler.
1789 continue to use the standard profiler.
1786
1790
1787 2004-08-23 Fernando Perez <fperez@colorado.edu>
1791 2004-08-23 Fernando Perez <fperez@colorado.edu>
1788
1792
1789 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1793 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1790 threaded shell, by John Hunter. It's not quite ready yet, but
1794 threaded shell, by John Hunter. It's not quite ready yet, but
1791 close.
1795 close.
1792
1796
1793 2004-08-22 Fernando Perez <fperez@colorado.edu>
1797 2004-08-22 Fernando Perez <fperez@colorado.edu>
1794
1798
1795 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1799 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1796 in Magic and ultraTB.
1800 in Magic and ultraTB.
1797
1801
1798 * ipython.1: document threading options in manpage.
1802 * ipython.1: document threading options in manpage.
1799
1803
1800 * scripts/ipython: Changed name of -thread option to -gthread,
1804 * scripts/ipython: Changed name of -thread option to -gthread,
1801 since this is GTK specific. I want to leave the door open for a
1805 since this is GTK specific. I want to leave the door open for a
1802 -wthread option for WX, which will most likely be necessary. This
1806 -wthread option for WX, which will most likely be necessary. This
1803 change affects usage and ipmaker as well.
1807 change affects usage and ipmaker as well.
1804
1808
1805 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1809 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1806 handle the matplotlib shell issues. Code by John Hunter
1810 handle the matplotlib shell issues. Code by John Hunter
1807 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1811 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1808 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1812 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1809 broken (and disabled for end users) for now, but it puts the
1813 broken (and disabled for end users) for now, but it puts the
1810 infrastructure in place.
1814 infrastructure in place.
1811
1815
1812 2004-08-21 Fernando Perez <fperez@colorado.edu>
1816 2004-08-21 Fernando Perez <fperez@colorado.edu>
1813
1817
1814 * ipythonrc-pylab: Add matplotlib support.
1818 * ipythonrc-pylab: Add matplotlib support.
1815
1819
1816 * matplotlib_config.py: new files for matplotlib support, part of
1820 * matplotlib_config.py: new files for matplotlib support, part of
1817 the pylab profile.
1821 the pylab profile.
1818
1822
1819 * IPython/usage.py (__doc__): documented the threading options.
1823 * IPython/usage.py (__doc__): documented the threading options.
1820
1824
1821 2004-08-20 Fernando Perez <fperez@colorado.edu>
1825 2004-08-20 Fernando Perez <fperez@colorado.edu>
1822
1826
1823 * ipython: Modified the main calling routine to handle the -thread
1827 * ipython: Modified the main calling routine to handle the -thread
1824 and -mpthread options. This needs to be done as a top-level hack,
1828 and -mpthread options. This needs to be done as a top-level hack,
1825 because it determines which class to instantiate for IPython
1829 because it determines which class to instantiate for IPython
1826 itself.
1830 itself.
1827
1831
1828 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1832 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1829 classes to support multithreaded GTK operation without blocking,
1833 classes to support multithreaded GTK operation without blocking,
1830 and matplotlib with all backends. This is a lot of still very
1834 and matplotlib with all backends. This is a lot of still very
1831 experimental code, and threads are tricky. So it may still have a
1835 experimental code, and threads are tricky. So it may still have a
1832 few rough edges... This code owes a lot to
1836 few rough edges... This code owes a lot to
1833 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1837 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1834 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1838 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1835 to John Hunter for all the matplotlib work.
1839 to John Hunter for all the matplotlib work.
1836
1840
1837 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1841 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1838 options for gtk thread and matplotlib support.
1842 options for gtk thread and matplotlib support.
1839
1843
1840 2004-08-16 Fernando Perez <fperez@colorado.edu>
1844 2004-08-16 Fernando Perez <fperez@colorado.edu>
1841
1845
1842 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1846 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1843 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1847 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1844 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1848 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1845
1849
1846 2004-08-11 Fernando Perez <fperez@colorado.edu>
1850 2004-08-11 Fernando Perez <fperez@colorado.edu>
1847
1851
1848 * setup.py (isfile): Fix build so documentation gets updated for
1852 * setup.py (isfile): Fix build so documentation gets updated for
1849 rpms (it was only done for .tgz builds).
1853 rpms (it was only done for .tgz builds).
1850
1854
1851 2004-08-10 Fernando Perez <fperez@colorado.edu>
1855 2004-08-10 Fernando Perez <fperez@colorado.edu>
1852
1856
1853 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1857 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1854
1858
1855 * iplib.py : Silence syntax error exceptions in tab-completion.
1859 * iplib.py : Silence syntax error exceptions in tab-completion.
1856
1860
1857 2004-08-05 Fernando Perez <fperez@colorado.edu>
1861 2004-08-05 Fernando Perez <fperez@colorado.edu>
1858
1862
1859 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1863 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1860 'color off' mark for continuation prompts. This was causing long
1864 'color off' mark for continuation prompts. This was causing long
1861 continuation lines to mis-wrap.
1865 continuation lines to mis-wrap.
1862
1866
1863 2004-08-01 Fernando Perez <fperez@colorado.edu>
1867 2004-08-01 Fernando Perez <fperez@colorado.edu>
1864
1868
1865 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1869 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1866 for building ipython to be a parameter. All this is necessary
1870 for building ipython to be a parameter. All this is necessary
1867 right now to have a multithreaded version, but this insane
1871 right now to have a multithreaded version, but this insane
1868 non-design will be cleaned up soon. For now, it's a hack that
1872 non-design will be cleaned up soon. For now, it's a hack that
1869 works.
1873 works.
1870
1874
1871 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1875 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1872 args in various places. No bugs so far, but it's a dangerous
1876 args in various places. No bugs so far, but it's a dangerous
1873 practice.
1877 practice.
1874
1878
1875 2004-07-31 Fernando Perez <fperez@colorado.edu>
1879 2004-07-31 Fernando Perez <fperez@colorado.edu>
1876
1880
1877 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1881 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1878 fix completion of files with dots in their names under most
1882 fix completion of files with dots in their names under most
1879 profiles (pysh was OK because the completion order is different).
1883 profiles (pysh was OK because the completion order is different).
1880
1884
1881 2004-07-27 Fernando Perez <fperez@colorado.edu>
1885 2004-07-27 Fernando Perez <fperez@colorado.edu>
1882
1886
1883 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1887 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1884 keywords manually, b/c the one in keyword.py was removed in python
1888 keywords manually, b/c the one in keyword.py was removed in python
1885 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1889 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1886 This is NOT a bug under python 2.3 and earlier.
1890 This is NOT a bug under python 2.3 and earlier.
1887
1891
1888 2004-07-26 Fernando Perez <fperez@colorado.edu>
1892 2004-07-26 Fernando Perez <fperez@colorado.edu>
1889
1893
1890 * IPython/ultraTB.py (VerboseTB.text): Add another
1894 * IPython/ultraTB.py (VerboseTB.text): Add another
1891 linecache.checkcache() call to try to prevent inspect.py from
1895 linecache.checkcache() call to try to prevent inspect.py from
1892 crashing under python 2.3. I think this fixes
1896 crashing under python 2.3. I think this fixes
1893 http://www.scipy.net/roundup/ipython/issue17.
1897 http://www.scipy.net/roundup/ipython/issue17.
1894
1898
1895 2004-07-26 *** Released version 0.6.2
1899 2004-07-26 *** Released version 0.6.2
1896
1900
1897 2004-07-26 Fernando Perez <fperez@colorado.edu>
1901 2004-07-26 Fernando Perez <fperez@colorado.edu>
1898
1902
1899 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1903 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1900 fail for any number.
1904 fail for any number.
1901 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1905 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1902 empty bookmarks.
1906 empty bookmarks.
1903
1907
1904 2004-07-26 *** Released version 0.6.1
1908 2004-07-26 *** Released version 0.6.1
1905
1909
1906 2004-07-26 Fernando Perez <fperez@colorado.edu>
1910 2004-07-26 Fernando Perez <fperez@colorado.edu>
1907
1911
1908 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1912 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1909
1913
1910 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1914 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1911 escaping '()[]{}' in filenames.
1915 escaping '()[]{}' in filenames.
1912
1916
1913 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1917 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1914 Python 2.2 users who lack a proper shlex.split.
1918 Python 2.2 users who lack a proper shlex.split.
1915
1919
1916 2004-07-19 Fernando Perez <fperez@colorado.edu>
1920 2004-07-19 Fernando Perez <fperez@colorado.edu>
1917
1921
1918 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1922 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1919 for reading readline's init file. I follow the normal chain:
1923 for reading readline's init file. I follow the normal chain:
1920 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1924 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1921 report by Mike Heeter. This closes
1925 report by Mike Heeter. This closes
1922 http://www.scipy.net/roundup/ipython/issue16.
1926 http://www.scipy.net/roundup/ipython/issue16.
1923
1927
1924 2004-07-18 Fernando Perez <fperez@colorado.edu>
1928 2004-07-18 Fernando Perez <fperez@colorado.edu>
1925
1929
1926 * IPython/iplib.py (__init__): Add better handling of '\' under
1930 * IPython/iplib.py (__init__): Add better handling of '\' under
1927 Win32 for filenames. After a patch by Ville.
1931 Win32 for filenames. After a patch by Ville.
1928
1932
1929 2004-07-17 Fernando Perez <fperez@colorado.edu>
1933 2004-07-17 Fernando Perez <fperez@colorado.edu>
1930
1934
1931 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1935 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1932 autocalling would be triggered for 'foo is bar' if foo is
1936 autocalling would be triggered for 'foo is bar' if foo is
1933 callable. I also cleaned up the autocall detection code to use a
1937 callable. I also cleaned up the autocall detection code to use a
1934 regexp, which is faster. Bug reported by Alexander Schmolck.
1938 regexp, which is faster. Bug reported by Alexander Schmolck.
1935
1939
1936 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1940 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1937 '?' in them would confuse the help system. Reported by Alex
1941 '?' in them would confuse the help system. Reported by Alex
1938 Schmolck.
1942 Schmolck.
1939
1943
1940 2004-07-16 Fernando Perez <fperez@colorado.edu>
1944 2004-07-16 Fernando Perez <fperez@colorado.edu>
1941
1945
1942 * IPython/GnuplotInteractive.py (__all__): added plot2.
1946 * IPython/GnuplotInteractive.py (__all__): added plot2.
1943
1947
1944 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1948 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1945 plotting dictionaries, lists or tuples of 1d arrays.
1949 plotting dictionaries, lists or tuples of 1d arrays.
1946
1950
1947 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1951 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1948 optimizations.
1952 optimizations.
1949
1953
1950 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1954 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1951 the information which was there from Janko's original IPP code:
1955 the information which was there from Janko's original IPP code:
1952
1956
1953 03.05.99 20:53 porto.ifm.uni-kiel.de
1957 03.05.99 20:53 porto.ifm.uni-kiel.de
1954 --Started changelog.
1958 --Started changelog.
1955 --make clear do what it say it does
1959 --make clear do what it say it does
1956 --added pretty output of lines from inputcache
1960 --added pretty output of lines from inputcache
1957 --Made Logger a mixin class, simplifies handling of switches
1961 --Made Logger a mixin class, simplifies handling of switches
1958 --Added own completer class. .string<TAB> expands to last history
1962 --Added own completer class. .string<TAB> expands to last history
1959 line which starts with string. The new expansion is also present
1963 line which starts with string. The new expansion is also present
1960 with Ctrl-r from the readline library. But this shows, who this
1964 with Ctrl-r from the readline library. But this shows, who this
1961 can be done for other cases.
1965 can be done for other cases.
1962 --Added convention that all shell functions should accept a
1966 --Added convention that all shell functions should accept a
1963 parameter_string This opens the door for different behaviour for
1967 parameter_string This opens the door for different behaviour for
1964 each function. @cd is a good example of this.
1968 each function. @cd is a good example of this.
1965
1969
1966 04.05.99 12:12 porto.ifm.uni-kiel.de
1970 04.05.99 12:12 porto.ifm.uni-kiel.de
1967 --added logfile rotation
1971 --added logfile rotation
1968 --added new mainloop method which freezes first the namespace
1972 --added new mainloop method which freezes first the namespace
1969
1973
1970 07.05.99 21:24 porto.ifm.uni-kiel.de
1974 07.05.99 21:24 porto.ifm.uni-kiel.de
1971 --added the docreader classes. Now there is a help system.
1975 --added the docreader classes. Now there is a help system.
1972 -This is only a first try. Currently it's not easy to put new
1976 -This is only a first try. Currently it's not easy to put new
1973 stuff in the indices. But this is the way to go. Info would be
1977 stuff in the indices. But this is the way to go. Info would be
1974 better, but HTML is every where and not everybody has an info
1978 better, but HTML is every where and not everybody has an info
1975 system installed and it's not so easy to change html-docs to info.
1979 system installed and it's not so easy to change html-docs to info.
1976 --added global logfile option
1980 --added global logfile option
1977 --there is now a hook for object inspection method pinfo needs to
1981 --there is now a hook for object inspection method pinfo needs to
1978 be provided for this. Can be reached by two '??'.
1982 be provided for this. Can be reached by two '??'.
1979
1983
1980 08.05.99 20:51 porto.ifm.uni-kiel.de
1984 08.05.99 20:51 porto.ifm.uni-kiel.de
1981 --added a README
1985 --added a README
1982 --bug in rc file. Something has changed so functions in the rc
1986 --bug in rc file. Something has changed so functions in the rc
1983 file need to reference the shell and not self. Not clear if it's a
1987 file need to reference the shell and not self. Not clear if it's a
1984 bug or feature.
1988 bug or feature.
1985 --changed rc file for new behavior
1989 --changed rc file for new behavior
1986
1990
1987 2004-07-15 Fernando Perez <fperez@colorado.edu>
1991 2004-07-15 Fernando Perez <fperez@colorado.edu>
1988
1992
1989 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1993 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1990 cache was falling out of sync in bizarre manners when multi-line
1994 cache was falling out of sync in bizarre manners when multi-line
1991 input was present. Minor optimizations and cleanup.
1995 input was present. Minor optimizations and cleanup.
1992
1996
1993 (Logger): Remove old Changelog info for cleanup. This is the
1997 (Logger): Remove old Changelog info for cleanup. This is the
1994 information which was there from Janko's original code:
1998 information which was there from Janko's original code:
1995
1999
1996 Changes to Logger: - made the default log filename a parameter
2000 Changes to Logger: - made the default log filename a parameter
1997
2001
1998 - put a check for lines beginning with !@? in log(). Needed
2002 - put a check for lines beginning with !@? in log(). Needed
1999 (even if the handlers properly log their lines) for mid-session
2003 (even if the handlers properly log their lines) for mid-session
2000 logging activation to work properly. Without this, lines logged
2004 logging activation to work properly. Without this, lines logged
2001 in mid session, which get read from the cache, would end up
2005 in mid session, which get read from the cache, would end up
2002 'bare' (with !@? in the open) in the log. Now they are caught
2006 'bare' (with !@? in the open) in the log. Now they are caught
2003 and prepended with a #.
2007 and prepended with a #.
2004
2008
2005 * IPython/iplib.py (InteractiveShell.init_readline): added check
2009 * IPython/iplib.py (InteractiveShell.init_readline): added check
2006 in case MagicCompleter fails to be defined, so we don't crash.
2010 in case MagicCompleter fails to be defined, so we don't crash.
2007
2011
2008 2004-07-13 Fernando Perez <fperez@colorado.edu>
2012 2004-07-13 Fernando Perez <fperez@colorado.edu>
2009
2013
2010 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2014 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2011 of EPS if the requested filename ends in '.eps'.
2015 of EPS if the requested filename ends in '.eps'.
2012
2016
2013 2004-07-04 Fernando Perez <fperez@colorado.edu>
2017 2004-07-04 Fernando Perez <fperez@colorado.edu>
2014
2018
2015 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2019 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2016 escaping of quotes when calling the shell.
2020 escaping of quotes when calling the shell.
2017
2021
2018 2004-07-02 Fernando Perez <fperez@colorado.edu>
2022 2004-07-02 Fernando Perez <fperez@colorado.edu>
2019
2023
2020 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2024 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2021 gettext not working because we were clobbering '_'. Fixes
2025 gettext not working because we were clobbering '_'. Fixes
2022 http://www.scipy.net/roundup/ipython/issue6.
2026 http://www.scipy.net/roundup/ipython/issue6.
2023
2027
2024 2004-07-01 Fernando Perez <fperez@colorado.edu>
2028 2004-07-01 Fernando Perez <fperez@colorado.edu>
2025
2029
2026 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2030 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2027 into @cd. Patch by Ville.
2031 into @cd. Patch by Ville.
2028
2032
2029 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2033 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2030 new function to store things after ipmaker runs. Patch by Ville.
2034 new function to store things after ipmaker runs. Patch by Ville.
2031 Eventually this will go away once ipmaker is removed and the class
2035 Eventually this will go away once ipmaker is removed and the class
2032 gets cleaned up, but for now it's ok. Key functionality here is
2036 gets cleaned up, but for now it's ok. Key functionality here is
2033 the addition of the persistent storage mechanism, a dict for
2037 the addition of the persistent storage mechanism, a dict for
2034 keeping data across sessions (for now just bookmarks, but more can
2038 keeping data across sessions (for now just bookmarks, but more can
2035 be implemented later).
2039 be implemented later).
2036
2040
2037 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2041 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2038 persistent across sections. Patch by Ville, I modified it
2042 persistent across sections. Patch by Ville, I modified it
2039 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2043 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2040 added a '-l' option to list all bookmarks.
2044 added a '-l' option to list all bookmarks.
2041
2045
2042 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2046 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2043 center for cleanup. Registered with atexit.register(). I moved
2047 center for cleanup. Registered with atexit.register(). I moved
2044 here the old exit_cleanup(). After a patch by Ville.
2048 here the old exit_cleanup(). After a patch by Ville.
2045
2049
2046 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2050 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2047 characters in the hacked shlex_split for python 2.2.
2051 characters in the hacked shlex_split for python 2.2.
2048
2052
2049 * IPython/iplib.py (file_matches): more fixes to filenames with
2053 * IPython/iplib.py (file_matches): more fixes to filenames with
2050 whitespace in them. It's not perfect, but limitations in python's
2054 whitespace in them. It's not perfect, but limitations in python's
2051 readline make it impossible to go further.
2055 readline make it impossible to go further.
2052
2056
2053 2004-06-29 Fernando Perez <fperez@colorado.edu>
2057 2004-06-29 Fernando Perez <fperez@colorado.edu>
2054
2058
2055 * IPython/iplib.py (file_matches): escape whitespace correctly in
2059 * IPython/iplib.py (file_matches): escape whitespace correctly in
2056 filename completions. Bug reported by Ville.
2060 filename completions. Bug reported by Ville.
2057
2061
2058 2004-06-28 Fernando Perez <fperez@colorado.edu>
2062 2004-06-28 Fernando Perez <fperez@colorado.edu>
2059
2063
2060 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2064 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2061 the history file will be called 'history-PROFNAME' (or just
2065 the history file will be called 'history-PROFNAME' (or just
2062 'history' if no profile is loaded). I was getting annoyed at
2066 'history' if no profile is loaded). I was getting annoyed at
2063 getting my Numerical work history clobbered by pysh sessions.
2067 getting my Numerical work history clobbered by pysh sessions.
2064
2068
2065 * IPython/iplib.py (InteractiveShell.__init__): Internal
2069 * IPython/iplib.py (InteractiveShell.__init__): Internal
2066 getoutputerror() function so that we can honor the system_verbose
2070 getoutputerror() function so that we can honor the system_verbose
2067 flag for _all_ system calls. I also added escaping of #
2071 flag for _all_ system calls. I also added escaping of #
2068 characters here to avoid confusing Itpl.
2072 characters here to avoid confusing Itpl.
2069
2073
2070 * IPython/Magic.py (shlex_split): removed call to shell in
2074 * IPython/Magic.py (shlex_split): removed call to shell in
2071 parse_options and replaced it with shlex.split(). The annoying
2075 parse_options and replaced it with shlex.split(). The annoying
2072 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2076 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2073 to backport it from 2.3, with several frail hacks (the shlex
2077 to backport it from 2.3, with several frail hacks (the shlex
2074 module is rather limited in 2.2). Thanks to a suggestion by Ville
2078 module is rather limited in 2.2). Thanks to a suggestion by Ville
2075 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2079 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2076 problem.
2080 problem.
2077
2081
2078 (Magic.magic_system_verbose): new toggle to print the actual
2082 (Magic.magic_system_verbose): new toggle to print the actual
2079 system calls made by ipython. Mainly for debugging purposes.
2083 system calls made by ipython. Mainly for debugging purposes.
2080
2084
2081 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2085 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2082 doesn't support persistence. Reported (and fix suggested) by
2086 doesn't support persistence. Reported (and fix suggested) by
2083 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2087 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2084
2088
2085 2004-06-26 Fernando Perez <fperez@colorado.edu>
2089 2004-06-26 Fernando Perez <fperez@colorado.edu>
2086
2090
2087 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2091 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2088 continue prompts.
2092 continue prompts.
2089
2093
2090 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2094 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2091 function (basically a big docstring) and a few more things here to
2095 function (basically a big docstring) and a few more things here to
2092 speedup startup. pysh.py is now very lightweight. We want because
2096 speedup startup. pysh.py is now very lightweight. We want because
2093 it gets execfile'd, while InterpreterExec gets imported, so
2097 it gets execfile'd, while InterpreterExec gets imported, so
2094 byte-compilation saves time.
2098 byte-compilation saves time.
2095
2099
2096 2004-06-25 Fernando Perez <fperez@colorado.edu>
2100 2004-06-25 Fernando Perez <fperez@colorado.edu>
2097
2101
2098 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2102 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2099 -NUM', which was recently broken.
2103 -NUM', which was recently broken.
2100
2104
2101 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2105 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2102 in multi-line input (but not !!, which doesn't make sense there).
2106 in multi-line input (but not !!, which doesn't make sense there).
2103
2107
2104 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2108 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2105 It's just too useful, and people can turn it off in the less
2109 It's just too useful, and people can turn it off in the less
2106 common cases where it's a problem.
2110 common cases where it's a problem.
2107
2111
2108 2004-06-24 Fernando Perez <fperez@colorado.edu>
2112 2004-06-24 Fernando Perez <fperez@colorado.edu>
2109
2113
2110 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2114 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2111 special syntaxes (like alias calling) is now allied in multi-line
2115 special syntaxes (like alias calling) is now allied in multi-line
2112 input. This is still _very_ experimental, but it's necessary for
2116 input. This is still _very_ experimental, but it's necessary for
2113 efficient shell usage combining python looping syntax with system
2117 efficient shell usage combining python looping syntax with system
2114 calls. For now it's restricted to aliases, I don't think it
2118 calls. For now it's restricted to aliases, I don't think it
2115 really even makes sense to have this for magics.
2119 really even makes sense to have this for magics.
2116
2120
2117 2004-06-23 Fernando Perez <fperez@colorado.edu>
2121 2004-06-23 Fernando Perez <fperez@colorado.edu>
2118
2122
2119 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2123 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2120 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2124 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2121
2125
2122 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2126 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2123 extensions under Windows (after code sent by Gary Bishop). The
2127 extensions under Windows (after code sent by Gary Bishop). The
2124 extensions considered 'executable' are stored in IPython's rc
2128 extensions considered 'executable' are stored in IPython's rc
2125 structure as win_exec_ext.
2129 structure as win_exec_ext.
2126
2130
2127 * IPython/genutils.py (shell): new function, like system() but
2131 * IPython/genutils.py (shell): new function, like system() but
2128 without return value. Very useful for interactive shell work.
2132 without return value. Very useful for interactive shell work.
2129
2133
2130 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2134 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2131 delete aliases.
2135 delete aliases.
2132
2136
2133 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2137 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2134 sure that the alias table doesn't contain python keywords.
2138 sure that the alias table doesn't contain python keywords.
2135
2139
2136 2004-06-21 Fernando Perez <fperez@colorado.edu>
2140 2004-06-21 Fernando Perez <fperez@colorado.edu>
2137
2141
2138 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2142 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2139 non-existent items are found in $PATH. Reported by Thorsten.
2143 non-existent items are found in $PATH. Reported by Thorsten.
2140
2144
2141 2004-06-20 Fernando Perez <fperez@colorado.edu>
2145 2004-06-20 Fernando Perez <fperez@colorado.edu>
2142
2146
2143 * IPython/iplib.py (complete): modified the completer so that the
2147 * IPython/iplib.py (complete): modified the completer so that the
2144 order of priorities can be easily changed at runtime.
2148 order of priorities can be easily changed at runtime.
2145
2149
2146 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2150 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2147 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2151 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2148
2152
2149 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2153 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2150 expand Python variables prepended with $ in all system calls. The
2154 expand Python variables prepended with $ in all system calls. The
2151 same was done to InteractiveShell.handle_shell_escape. Now all
2155 same was done to InteractiveShell.handle_shell_escape. Now all
2152 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2156 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2153 expansion of python variables and expressions according to the
2157 expansion of python variables and expressions according to the
2154 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2158 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2155
2159
2156 Though PEP-215 has been rejected, a similar (but simpler) one
2160 Though PEP-215 has been rejected, a similar (but simpler) one
2157 seems like it will go into Python 2.4, PEP-292 -
2161 seems like it will go into Python 2.4, PEP-292 -
2158 http://www.python.org/peps/pep-0292.html.
2162 http://www.python.org/peps/pep-0292.html.
2159
2163
2160 I'll keep the full syntax of PEP-215, since IPython has since the
2164 I'll keep the full syntax of PEP-215, since IPython has since the
2161 start used Ka-Ping Yee's reference implementation discussed there
2165 start used Ka-Ping Yee's reference implementation discussed there
2162 (Itpl), and I actually like the powerful semantics it offers.
2166 (Itpl), and I actually like the powerful semantics it offers.
2163
2167
2164 In order to access normal shell variables, the $ has to be escaped
2168 In order to access normal shell variables, the $ has to be escaped
2165 via an extra $. For example:
2169 via an extra $. For example:
2166
2170
2167 In [7]: PATH='a python variable'
2171 In [7]: PATH='a python variable'
2168
2172
2169 In [8]: !echo $PATH
2173 In [8]: !echo $PATH
2170 a python variable
2174 a python variable
2171
2175
2172 In [9]: !echo $$PATH
2176 In [9]: !echo $$PATH
2173 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2177 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2174
2178
2175 (Magic.parse_options): escape $ so the shell doesn't evaluate
2179 (Magic.parse_options): escape $ so the shell doesn't evaluate
2176 things prematurely.
2180 things prematurely.
2177
2181
2178 * IPython/iplib.py (InteractiveShell.call_alias): added the
2182 * IPython/iplib.py (InteractiveShell.call_alias): added the
2179 ability for aliases to expand python variables via $.
2183 ability for aliases to expand python variables via $.
2180
2184
2181 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2185 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2182 system, now there's a @rehash/@rehashx pair of magics. These work
2186 system, now there's a @rehash/@rehashx pair of magics. These work
2183 like the csh rehash command, and can be invoked at any time. They
2187 like the csh rehash command, and can be invoked at any time. They
2184 build a table of aliases to everything in the user's $PATH
2188 build a table of aliases to everything in the user's $PATH
2185 (@rehash uses everything, @rehashx is slower but only adds
2189 (@rehash uses everything, @rehashx is slower but only adds
2186 executable files). With this, the pysh.py-based shell profile can
2190 executable files). With this, the pysh.py-based shell profile can
2187 now simply call rehash upon startup, and full access to all
2191 now simply call rehash upon startup, and full access to all
2188 programs in the user's path is obtained.
2192 programs in the user's path is obtained.
2189
2193
2190 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2194 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2191 functionality is now fully in place. I removed the old dynamic
2195 functionality is now fully in place. I removed the old dynamic
2192 code generation based approach, in favor of a much lighter one
2196 code generation based approach, in favor of a much lighter one
2193 based on a simple dict. The advantage is that this allows me to
2197 based on a simple dict. The advantage is that this allows me to
2194 now have thousands of aliases with negligible cost (unthinkable
2198 now have thousands of aliases with negligible cost (unthinkable
2195 with the old system).
2199 with the old system).
2196
2200
2197 2004-06-19 Fernando Perez <fperez@colorado.edu>
2201 2004-06-19 Fernando Perez <fperez@colorado.edu>
2198
2202
2199 * IPython/iplib.py (__init__): extended MagicCompleter class to
2203 * IPython/iplib.py (__init__): extended MagicCompleter class to
2200 also complete (last in priority) on user aliases.
2204 also complete (last in priority) on user aliases.
2201
2205
2202 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2206 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2203 call to eval.
2207 call to eval.
2204 (ItplNS.__init__): Added a new class which functions like Itpl,
2208 (ItplNS.__init__): Added a new class which functions like Itpl,
2205 but allows configuring the namespace for the evaluation to occur
2209 but allows configuring the namespace for the evaluation to occur
2206 in.
2210 in.
2207
2211
2208 2004-06-18 Fernando Perez <fperez@colorado.edu>
2212 2004-06-18 Fernando Perez <fperez@colorado.edu>
2209
2213
2210 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2214 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2211 better message when 'exit' or 'quit' are typed (a common newbie
2215 better message when 'exit' or 'quit' are typed (a common newbie
2212 confusion).
2216 confusion).
2213
2217
2214 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2218 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2215 check for Windows users.
2219 check for Windows users.
2216
2220
2217 * IPython/iplib.py (InteractiveShell.user_setup): removed
2221 * IPython/iplib.py (InteractiveShell.user_setup): removed
2218 disabling of colors for Windows. I'll test at runtime and issue a
2222 disabling of colors for Windows. I'll test at runtime and issue a
2219 warning if Gary's readline isn't found, as to nudge users to
2223 warning if Gary's readline isn't found, as to nudge users to
2220 download it.
2224 download it.
2221
2225
2222 2004-06-16 Fernando Perez <fperez@colorado.edu>
2226 2004-06-16 Fernando Perez <fperez@colorado.edu>
2223
2227
2224 * IPython/genutils.py (Stream.__init__): changed to print errors
2228 * IPython/genutils.py (Stream.__init__): changed to print errors
2225 to sys.stderr. I had a circular dependency here. Now it's
2229 to sys.stderr. I had a circular dependency here. Now it's
2226 possible to run ipython as IDLE's shell (consider this pre-alpha,
2230 possible to run ipython as IDLE's shell (consider this pre-alpha,
2227 since true stdout things end up in the starting terminal instead
2231 since true stdout things end up in the starting terminal instead
2228 of IDLE's out).
2232 of IDLE's out).
2229
2233
2230 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2234 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2231 users who haven't # updated their prompt_in2 definitions. Remove
2235 users who haven't # updated their prompt_in2 definitions. Remove
2232 eventually.
2236 eventually.
2233 (multiple_replace): added credit to original ASPN recipe.
2237 (multiple_replace): added credit to original ASPN recipe.
2234
2238
2235 2004-06-15 Fernando Perez <fperez@colorado.edu>
2239 2004-06-15 Fernando Perez <fperez@colorado.edu>
2236
2240
2237 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2241 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2238 list of auto-defined aliases.
2242 list of auto-defined aliases.
2239
2243
2240 2004-06-13 Fernando Perez <fperez@colorado.edu>
2244 2004-06-13 Fernando Perez <fperez@colorado.edu>
2241
2245
2242 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2246 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2243 install was really requested (so setup.py can be used for other
2247 install was really requested (so setup.py can be used for other
2244 things under Windows).
2248 things under Windows).
2245
2249
2246 2004-06-10 Fernando Perez <fperez@colorado.edu>
2250 2004-06-10 Fernando Perez <fperez@colorado.edu>
2247
2251
2248 * IPython/Logger.py (Logger.create_log): Manually remove any old
2252 * IPython/Logger.py (Logger.create_log): Manually remove any old
2249 backup, since os.remove may fail under Windows. Fixes bug
2253 backup, since os.remove may fail under Windows. Fixes bug
2250 reported by Thorsten.
2254 reported by Thorsten.
2251
2255
2252 2004-06-09 Fernando Perez <fperez@colorado.edu>
2256 2004-06-09 Fernando Perez <fperez@colorado.edu>
2253
2257
2254 * examples/example-embed.py: fixed all references to %n (replaced
2258 * examples/example-embed.py: fixed all references to %n (replaced
2255 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2259 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2256 for all examples and the manual as well.
2260 for all examples and the manual as well.
2257
2261
2258 2004-06-08 Fernando Perez <fperez@colorado.edu>
2262 2004-06-08 Fernando Perez <fperez@colorado.edu>
2259
2263
2260 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2264 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2261 alignment and color management. All 3 prompt subsystems now
2265 alignment and color management. All 3 prompt subsystems now
2262 inherit from BasePrompt.
2266 inherit from BasePrompt.
2263
2267
2264 * tools/release: updates for windows installer build and tag rpms
2268 * tools/release: updates for windows installer build and tag rpms
2265 with python version (since paths are fixed).
2269 with python version (since paths are fixed).
2266
2270
2267 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2271 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2268 which will become eventually obsolete. Also fixed the default
2272 which will become eventually obsolete. Also fixed the default
2269 prompt_in2 to use \D, so at least new users start with the correct
2273 prompt_in2 to use \D, so at least new users start with the correct
2270 defaults.
2274 defaults.
2271 WARNING: Users with existing ipythonrc files will need to apply
2275 WARNING: Users with existing ipythonrc files will need to apply
2272 this fix manually!
2276 this fix manually!
2273
2277
2274 * setup.py: make windows installer (.exe). This is finally the
2278 * setup.py: make windows installer (.exe). This is finally the
2275 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2279 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2276 which I hadn't included because it required Python 2.3 (or recent
2280 which I hadn't included because it required Python 2.3 (or recent
2277 distutils).
2281 distutils).
2278
2282
2279 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2283 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2280 usage of new '\D' escape.
2284 usage of new '\D' escape.
2281
2285
2282 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2286 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2283 lacks os.getuid())
2287 lacks os.getuid())
2284 (CachedOutput.set_colors): Added the ability to turn coloring
2288 (CachedOutput.set_colors): Added the ability to turn coloring
2285 on/off with @colors even for manually defined prompt colors. It
2289 on/off with @colors even for manually defined prompt colors. It
2286 uses a nasty global, but it works safely and via the generic color
2290 uses a nasty global, but it works safely and via the generic color
2287 handling mechanism.
2291 handling mechanism.
2288 (Prompt2.__init__): Introduced new escape '\D' for continuation
2292 (Prompt2.__init__): Introduced new escape '\D' for continuation
2289 prompts. It represents the counter ('\#') as dots.
2293 prompts. It represents the counter ('\#') as dots.
2290 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2294 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2291 need to update their ipythonrc files and replace '%n' with '\D' in
2295 need to update their ipythonrc files and replace '%n' with '\D' in
2292 their prompt_in2 settings everywhere. Sorry, but there's
2296 their prompt_in2 settings everywhere. Sorry, but there's
2293 otherwise no clean way to get all prompts to properly align. The
2297 otherwise no clean way to get all prompts to properly align. The
2294 ipythonrc shipped with IPython has been updated.
2298 ipythonrc shipped with IPython has been updated.
2295
2299
2296 2004-06-07 Fernando Perez <fperez@colorado.edu>
2300 2004-06-07 Fernando Perez <fperez@colorado.edu>
2297
2301
2298 * setup.py (isfile): Pass local_icons option to latex2html, so the
2302 * setup.py (isfile): Pass local_icons option to latex2html, so the
2299 resulting HTML file is self-contained. Thanks to
2303 resulting HTML file is self-contained. Thanks to
2300 dryice-AT-liu.com.cn for the tip.
2304 dryice-AT-liu.com.cn for the tip.
2301
2305
2302 * pysh.py: I created a new profile 'shell', which implements a
2306 * pysh.py: I created a new profile 'shell', which implements a
2303 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2307 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2304 system shell, nor will it become one anytime soon. It's mainly
2308 system shell, nor will it become one anytime soon. It's mainly
2305 meant to illustrate the use of the new flexible bash-like prompts.
2309 meant to illustrate the use of the new flexible bash-like prompts.
2306 I guess it could be used by hardy souls for true shell management,
2310 I guess it could be used by hardy souls for true shell management,
2307 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2311 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2308 profile. This uses the InterpreterExec extension provided by
2312 profile. This uses the InterpreterExec extension provided by
2309 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2313 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2310
2314
2311 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2315 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2312 auto-align itself with the length of the previous input prompt
2316 auto-align itself with the length of the previous input prompt
2313 (taking into account the invisible color escapes).
2317 (taking into account the invisible color escapes).
2314 (CachedOutput.__init__): Large restructuring of this class. Now
2318 (CachedOutput.__init__): Large restructuring of this class. Now
2315 all three prompts (primary1, primary2, output) are proper objects,
2319 all three prompts (primary1, primary2, output) are proper objects,
2316 managed by the 'parent' CachedOutput class. The code is still a
2320 managed by the 'parent' CachedOutput class. The code is still a
2317 bit hackish (all prompts share state via a pointer to the cache),
2321 bit hackish (all prompts share state via a pointer to the cache),
2318 but it's overall far cleaner than before.
2322 but it's overall far cleaner than before.
2319
2323
2320 * IPython/genutils.py (getoutputerror): modified to add verbose,
2324 * IPython/genutils.py (getoutputerror): modified to add verbose,
2321 debug and header options. This makes the interface of all getout*
2325 debug and header options. This makes the interface of all getout*
2322 functions uniform.
2326 functions uniform.
2323 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2327 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2324
2328
2325 * IPython/Magic.py (Magic.default_option): added a function to
2329 * IPython/Magic.py (Magic.default_option): added a function to
2326 allow registering default options for any magic command. This
2330 allow registering default options for any magic command. This
2327 makes it easy to have profiles which customize the magics globally
2331 makes it easy to have profiles which customize the magics globally
2328 for a certain use. The values set through this function are
2332 for a certain use. The values set through this function are
2329 picked up by the parse_options() method, which all magics should
2333 picked up by the parse_options() method, which all magics should
2330 use to parse their options.
2334 use to parse their options.
2331
2335
2332 * IPython/genutils.py (warn): modified the warnings framework to
2336 * IPython/genutils.py (warn): modified the warnings framework to
2333 use the Term I/O class. I'm trying to slowly unify all of
2337 use the Term I/O class. I'm trying to slowly unify all of
2334 IPython's I/O operations to pass through Term.
2338 IPython's I/O operations to pass through Term.
2335
2339
2336 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2340 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2337 the secondary prompt to correctly match the length of the primary
2341 the secondary prompt to correctly match the length of the primary
2338 one for any prompt. Now multi-line code will properly line up
2342 one for any prompt. Now multi-line code will properly line up
2339 even for path dependent prompts, such as the new ones available
2343 even for path dependent prompts, such as the new ones available
2340 via the prompt_specials.
2344 via the prompt_specials.
2341
2345
2342 2004-06-06 Fernando Perez <fperez@colorado.edu>
2346 2004-06-06 Fernando Perez <fperez@colorado.edu>
2343
2347
2344 * IPython/Prompts.py (prompt_specials): Added the ability to have
2348 * IPython/Prompts.py (prompt_specials): Added the ability to have
2345 bash-like special sequences in the prompts, which get
2349 bash-like special sequences in the prompts, which get
2346 automatically expanded. Things like hostname, current working
2350 automatically expanded. Things like hostname, current working
2347 directory and username are implemented already, but it's easy to
2351 directory and username are implemented already, but it's easy to
2348 add more in the future. Thanks to a patch by W.J. van der Laan
2352 add more in the future. Thanks to a patch by W.J. van der Laan
2349 <gnufnork-AT-hetdigitalegat.nl>
2353 <gnufnork-AT-hetdigitalegat.nl>
2350 (prompt_specials): Added color support for prompt strings, so
2354 (prompt_specials): Added color support for prompt strings, so
2351 users can define arbitrary color setups for their prompts.
2355 users can define arbitrary color setups for their prompts.
2352
2356
2353 2004-06-05 Fernando Perez <fperez@colorado.edu>
2357 2004-06-05 Fernando Perez <fperez@colorado.edu>
2354
2358
2355 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2359 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2356 code to load Gary Bishop's readline and configure it
2360 code to load Gary Bishop's readline and configure it
2357 automatically. Thanks to Gary for help on this.
2361 automatically. Thanks to Gary for help on this.
2358
2362
2359 2004-06-01 Fernando Perez <fperez@colorado.edu>
2363 2004-06-01 Fernando Perez <fperez@colorado.edu>
2360
2364
2361 * IPython/Logger.py (Logger.create_log): fix bug for logging
2365 * IPython/Logger.py (Logger.create_log): fix bug for logging
2362 with no filename (previous fix was incomplete).
2366 with no filename (previous fix was incomplete).
2363
2367
2364 2004-05-25 Fernando Perez <fperez@colorado.edu>
2368 2004-05-25 Fernando Perez <fperez@colorado.edu>
2365
2369
2366 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2370 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2367 parens would get passed to the shell.
2371 parens would get passed to the shell.
2368
2372
2369 2004-05-20 Fernando Perez <fperez@colorado.edu>
2373 2004-05-20 Fernando Perez <fperez@colorado.edu>
2370
2374
2371 * IPython/Magic.py (Magic.magic_prun): changed default profile
2375 * IPython/Magic.py (Magic.magic_prun): changed default profile
2372 sort order to 'time' (the more common profiling need).
2376 sort order to 'time' (the more common profiling need).
2373
2377
2374 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2378 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2375 so that source code shown is guaranteed in sync with the file on
2379 so that source code shown is guaranteed in sync with the file on
2376 disk (also changed in psource). Similar fix to the one for
2380 disk (also changed in psource). Similar fix to the one for
2377 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2381 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2378 <yann.ledu-AT-noos.fr>.
2382 <yann.ledu-AT-noos.fr>.
2379
2383
2380 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2384 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2381 with a single option would not be correctly parsed. Closes
2385 with a single option would not be correctly parsed. Closes
2382 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2386 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2383 introduced in 0.6.0 (on 2004-05-06).
2387 introduced in 0.6.0 (on 2004-05-06).
2384
2388
2385 2004-05-13 *** Released version 0.6.0
2389 2004-05-13 *** Released version 0.6.0
2386
2390
2387 2004-05-13 Fernando Perez <fperez@colorado.edu>
2391 2004-05-13 Fernando Perez <fperez@colorado.edu>
2388
2392
2389 * debian/: Added debian/ directory to CVS, so that debian support
2393 * debian/: Added debian/ directory to CVS, so that debian support
2390 is publicly accessible. The debian package is maintained by Jack
2394 is publicly accessible. The debian package is maintained by Jack
2391 Moffit <jack-AT-xiph.org>.
2395 Moffit <jack-AT-xiph.org>.
2392
2396
2393 * Documentation: included the notes about an ipython-based system
2397 * Documentation: included the notes about an ipython-based system
2394 shell (the hypothetical 'pysh') into the new_design.pdf document,
2398 shell (the hypothetical 'pysh') into the new_design.pdf document,
2395 so that these ideas get distributed to users along with the
2399 so that these ideas get distributed to users along with the
2396 official documentation.
2400 official documentation.
2397
2401
2398 2004-05-10 Fernando Perez <fperez@colorado.edu>
2402 2004-05-10 Fernando Perez <fperez@colorado.edu>
2399
2403
2400 * IPython/Logger.py (Logger.create_log): fix recently introduced
2404 * IPython/Logger.py (Logger.create_log): fix recently introduced
2401 bug (misindented line) where logstart would fail when not given an
2405 bug (misindented line) where logstart would fail when not given an
2402 explicit filename.
2406 explicit filename.
2403
2407
2404 2004-05-09 Fernando Perez <fperez@colorado.edu>
2408 2004-05-09 Fernando Perez <fperez@colorado.edu>
2405
2409
2406 * IPython/Magic.py (Magic.parse_options): skip system call when
2410 * IPython/Magic.py (Magic.parse_options): skip system call when
2407 there are no options to look for. Faster, cleaner for the common
2411 there are no options to look for. Faster, cleaner for the common
2408 case.
2412 case.
2409
2413
2410 * Documentation: many updates to the manual: describing Windows
2414 * Documentation: many updates to the manual: describing Windows
2411 support better, Gnuplot updates, credits, misc small stuff. Also
2415 support better, Gnuplot updates, credits, misc small stuff. Also
2412 updated the new_design doc a bit.
2416 updated the new_design doc a bit.
2413
2417
2414 2004-05-06 *** Released version 0.6.0.rc1
2418 2004-05-06 *** Released version 0.6.0.rc1
2415
2419
2416 2004-05-06 Fernando Perez <fperez@colorado.edu>
2420 2004-05-06 Fernando Perez <fperez@colorado.edu>
2417
2421
2418 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2422 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2419 operations to use the vastly more efficient list/''.join() method.
2423 operations to use the vastly more efficient list/''.join() method.
2420 (FormattedTB.text): Fix
2424 (FormattedTB.text): Fix
2421 http://www.scipy.net/roundup/ipython/issue12 - exception source
2425 http://www.scipy.net/roundup/ipython/issue12 - exception source
2422 extract not updated after reload. Thanks to Mike Salib
2426 extract not updated after reload. Thanks to Mike Salib
2423 <msalib-AT-mit.edu> for pinning the source of the problem.
2427 <msalib-AT-mit.edu> for pinning the source of the problem.
2424 Fortunately, the solution works inside ipython and doesn't require
2428 Fortunately, the solution works inside ipython and doesn't require
2425 any changes to python proper.
2429 any changes to python proper.
2426
2430
2427 * IPython/Magic.py (Magic.parse_options): Improved to process the
2431 * IPython/Magic.py (Magic.parse_options): Improved to process the
2428 argument list as a true shell would (by actually using the
2432 argument list as a true shell would (by actually using the
2429 underlying system shell). This way, all @magics automatically get
2433 underlying system shell). This way, all @magics automatically get
2430 shell expansion for variables. Thanks to a comment by Alex
2434 shell expansion for variables. Thanks to a comment by Alex
2431 Schmolck.
2435 Schmolck.
2432
2436
2433 2004-04-04 Fernando Perez <fperez@colorado.edu>
2437 2004-04-04 Fernando Perez <fperez@colorado.edu>
2434
2438
2435 * IPython/iplib.py (InteractiveShell.interact): Added a special
2439 * IPython/iplib.py (InteractiveShell.interact): Added a special
2436 trap for a debugger quit exception, which is basically impossible
2440 trap for a debugger quit exception, which is basically impossible
2437 to handle by normal mechanisms, given what pdb does to the stack.
2441 to handle by normal mechanisms, given what pdb does to the stack.
2438 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2442 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2439
2443
2440 2004-04-03 Fernando Perez <fperez@colorado.edu>
2444 2004-04-03 Fernando Perez <fperez@colorado.edu>
2441
2445
2442 * IPython/genutils.py (Term): Standardized the names of the Term
2446 * IPython/genutils.py (Term): Standardized the names of the Term
2443 class streams to cin/cout/cerr, following C++ naming conventions
2447 class streams to cin/cout/cerr, following C++ naming conventions
2444 (I can't use in/out/err because 'in' is not a valid attribute
2448 (I can't use in/out/err because 'in' is not a valid attribute
2445 name).
2449 name).
2446
2450
2447 * IPython/iplib.py (InteractiveShell.interact): don't increment
2451 * IPython/iplib.py (InteractiveShell.interact): don't increment
2448 the prompt if there's no user input. By Daniel 'Dang' Griffith
2452 the prompt if there's no user input. By Daniel 'Dang' Griffith
2449 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2453 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2450 Francois Pinard.
2454 Francois Pinard.
2451
2455
2452 2004-04-02 Fernando Perez <fperez@colorado.edu>
2456 2004-04-02 Fernando Perez <fperez@colorado.edu>
2453
2457
2454 * IPython/genutils.py (Stream.__init__): Modified to survive at
2458 * IPython/genutils.py (Stream.__init__): Modified to survive at
2455 least importing in contexts where stdin/out/err aren't true file
2459 least importing in contexts where stdin/out/err aren't true file
2456 objects, such as PyCrust (they lack fileno() and mode). However,
2460 objects, such as PyCrust (they lack fileno() and mode). However,
2457 the recovery facilities which rely on these things existing will
2461 the recovery facilities which rely on these things existing will
2458 not work.
2462 not work.
2459
2463
2460 2004-04-01 Fernando Perez <fperez@colorado.edu>
2464 2004-04-01 Fernando Perez <fperez@colorado.edu>
2461
2465
2462 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2466 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2463 use the new getoutputerror() function, so it properly
2467 use the new getoutputerror() function, so it properly
2464 distinguishes stdout/err.
2468 distinguishes stdout/err.
2465
2469
2466 * IPython/genutils.py (getoutputerror): added a function to
2470 * IPython/genutils.py (getoutputerror): added a function to
2467 capture separately the standard output and error of a command.
2471 capture separately the standard output and error of a command.
2468 After a comment from dang on the mailing lists. This code is
2472 After a comment from dang on the mailing lists. This code is
2469 basically a modified version of commands.getstatusoutput(), from
2473 basically a modified version of commands.getstatusoutput(), from
2470 the standard library.
2474 the standard library.
2471
2475
2472 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2476 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2473 '!!' as a special syntax (shorthand) to access @sx.
2477 '!!' as a special syntax (shorthand) to access @sx.
2474
2478
2475 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2479 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2476 command and return its output as a list split on '\n'.
2480 command and return its output as a list split on '\n'.
2477
2481
2478 2004-03-31 Fernando Perez <fperez@colorado.edu>
2482 2004-03-31 Fernando Perez <fperez@colorado.edu>
2479
2483
2480 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2484 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2481 method to dictionaries used as FakeModule instances if they lack
2485 method to dictionaries used as FakeModule instances if they lack
2482 it. At least pydoc in python2.3 breaks for runtime-defined
2486 it. At least pydoc in python2.3 breaks for runtime-defined
2483 functions without this hack. At some point I need to _really_
2487 functions without this hack. At some point I need to _really_
2484 understand what FakeModule is doing, because it's a gross hack.
2488 understand what FakeModule is doing, because it's a gross hack.
2485 But it solves Arnd's problem for now...
2489 But it solves Arnd's problem for now...
2486
2490
2487 2004-02-27 Fernando Perez <fperez@colorado.edu>
2491 2004-02-27 Fernando Perez <fperez@colorado.edu>
2488
2492
2489 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2493 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2490 mode would behave erratically. Also increased the number of
2494 mode would behave erratically. Also increased the number of
2491 possible logs in rotate mod to 999. Thanks to Rod Holland
2495 possible logs in rotate mod to 999. Thanks to Rod Holland
2492 <rhh@StructureLABS.com> for the report and fixes.
2496 <rhh@StructureLABS.com> for the report and fixes.
2493
2497
2494 2004-02-26 Fernando Perez <fperez@colorado.edu>
2498 2004-02-26 Fernando Perez <fperez@colorado.edu>
2495
2499
2496 * IPython/genutils.py (page): Check that the curses module really
2500 * IPython/genutils.py (page): Check that the curses module really
2497 has the initscr attribute before trying to use it. For some
2501 has the initscr attribute before trying to use it. For some
2498 reason, the Solaris curses module is missing this. I think this
2502 reason, the Solaris curses module is missing this. I think this
2499 should be considered a Solaris python bug, but I'm not sure.
2503 should be considered a Solaris python bug, but I'm not sure.
2500
2504
2501 2004-01-17 Fernando Perez <fperez@colorado.edu>
2505 2004-01-17 Fernando Perez <fperez@colorado.edu>
2502
2506
2503 * IPython/genutils.py (Stream.__init__): Changes to try to make
2507 * IPython/genutils.py (Stream.__init__): Changes to try to make
2504 ipython robust against stdin/out/err being closed by the user.
2508 ipython robust against stdin/out/err being closed by the user.
2505 This is 'user error' (and blocks a normal python session, at least
2509 This is 'user error' (and blocks a normal python session, at least
2506 the stdout case). However, Ipython should be able to survive such
2510 the stdout case). However, Ipython should be able to survive such
2507 instances of abuse as gracefully as possible. To simplify the
2511 instances of abuse as gracefully as possible. To simplify the
2508 coding and maintain compatibility with Gary Bishop's Term
2512 coding and maintain compatibility with Gary Bishop's Term
2509 contributions, I've made use of classmethods for this. I think
2513 contributions, I've made use of classmethods for this. I think
2510 this introduces a dependency on python 2.2.
2514 this introduces a dependency on python 2.2.
2511
2515
2512 2004-01-13 Fernando Perez <fperez@colorado.edu>
2516 2004-01-13 Fernando Perez <fperez@colorado.edu>
2513
2517
2514 * IPython/numutils.py (exp_safe): simplified the code a bit and
2518 * IPython/numutils.py (exp_safe): simplified the code a bit and
2515 removed the need for importing the kinds module altogether.
2519 removed the need for importing the kinds module altogether.
2516
2520
2517 2004-01-06 Fernando Perez <fperez@colorado.edu>
2521 2004-01-06 Fernando Perez <fperez@colorado.edu>
2518
2522
2519 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2523 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2520 a magic function instead, after some community feedback. No
2524 a magic function instead, after some community feedback. No
2521 special syntax will exist for it, but its name is deliberately
2525 special syntax will exist for it, but its name is deliberately
2522 very short.
2526 very short.
2523
2527
2524 2003-12-20 Fernando Perez <fperez@colorado.edu>
2528 2003-12-20 Fernando Perez <fperez@colorado.edu>
2525
2529
2526 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2530 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2527 new functionality, to automagically assign the result of a shell
2531 new functionality, to automagically assign the result of a shell
2528 command to a variable. I'll solicit some community feedback on
2532 command to a variable. I'll solicit some community feedback on
2529 this before making it permanent.
2533 this before making it permanent.
2530
2534
2531 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2535 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2532 requested about callables for which inspect couldn't obtain a
2536 requested about callables for which inspect couldn't obtain a
2533 proper argspec. Thanks to a crash report sent by Etienne
2537 proper argspec. Thanks to a crash report sent by Etienne
2534 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2538 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2535
2539
2536 2003-12-09 Fernando Perez <fperez@colorado.edu>
2540 2003-12-09 Fernando Perez <fperez@colorado.edu>
2537
2541
2538 * IPython/genutils.py (page): patch for the pager to work across
2542 * IPython/genutils.py (page): patch for the pager to work across
2539 various versions of Windows. By Gary Bishop.
2543 various versions of Windows. By Gary Bishop.
2540
2544
2541 2003-12-04 Fernando Perez <fperez@colorado.edu>
2545 2003-12-04 Fernando Perez <fperez@colorado.edu>
2542
2546
2543 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2547 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2544 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2548 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2545 While I tested this and it looks ok, there may still be corner
2549 While I tested this and it looks ok, there may still be corner
2546 cases I've missed.
2550 cases I've missed.
2547
2551
2548 2003-12-01 Fernando Perez <fperez@colorado.edu>
2552 2003-12-01 Fernando Perez <fperez@colorado.edu>
2549
2553
2550 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2554 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2551 where a line like 'p,q=1,2' would fail because the automagic
2555 where a line like 'p,q=1,2' would fail because the automagic
2552 system would be triggered for @p.
2556 system would be triggered for @p.
2553
2557
2554 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2558 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2555 cleanups, code unmodified.
2559 cleanups, code unmodified.
2556
2560
2557 * IPython/genutils.py (Term): added a class for IPython to handle
2561 * IPython/genutils.py (Term): added a class for IPython to handle
2558 output. In most cases it will just be a proxy for stdout/err, but
2562 output. In most cases it will just be a proxy for stdout/err, but
2559 having this allows modifications to be made for some platforms,
2563 having this allows modifications to be made for some platforms,
2560 such as handling color escapes under Windows. All of this code
2564 such as handling color escapes under Windows. All of this code
2561 was contributed by Gary Bishop, with minor modifications by me.
2565 was contributed by Gary Bishop, with minor modifications by me.
2562 The actual changes affect many files.
2566 The actual changes affect many files.
2563
2567
2564 2003-11-30 Fernando Perez <fperez@colorado.edu>
2568 2003-11-30 Fernando Perez <fperez@colorado.edu>
2565
2569
2566 * IPython/iplib.py (file_matches): new completion code, courtesy
2570 * IPython/iplib.py (file_matches): new completion code, courtesy
2567 of Jeff Collins. This enables filename completion again under
2571 of Jeff Collins. This enables filename completion again under
2568 python 2.3, which disabled it at the C level.
2572 python 2.3, which disabled it at the C level.
2569
2573
2570 2003-11-11 Fernando Perez <fperez@colorado.edu>
2574 2003-11-11 Fernando Perez <fperez@colorado.edu>
2571
2575
2572 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2576 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2573 for Numeric.array(map(...)), but often convenient.
2577 for Numeric.array(map(...)), but often convenient.
2574
2578
2575 2003-11-05 Fernando Perez <fperez@colorado.edu>
2579 2003-11-05 Fernando Perez <fperez@colorado.edu>
2576
2580
2577 * IPython/numutils.py (frange): Changed a call from int() to
2581 * IPython/numutils.py (frange): Changed a call from int() to
2578 int(round()) to prevent a problem reported with arange() in the
2582 int(round()) to prevent a problem reported with arange() in the
2579 numpy list.
2583 numpy list.
2580
2584
2581 2003-10-06 Fernando Perez <fperez@colorado.edu>
2585 2003-10-06 Fernando Perez <fperez@colorado.edu>
2582
2586
2583 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2587 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2584 prevent crashes if sys lacks an argv attribute (it happens with
2588 prevent crashes if sys lacks an argv attribute (it happens with
2585 embedded interpreters which build a bare-bones sys module).
2589 embedded interpreters which build a bare-bones sys module).
2586 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2590 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2587
2591
2588 2003-09-24 Fernando Perez <fperez@colorado.edu>
2592 2003-09-24 Fernando Perez <fperez@colorado.edu>
2589
2593
2590 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2594 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2591 to protect against poorly written user objects where __getattr__
2595 to protect against poorly written user objects where __getattr__
2592 raises exceptions other than AttributeError. Thanks to a bug
2596 raises exceptions other than AttributeError. Thanks to a bug
2593 report by Oliver Sander <osander-AT-gmx.de>.
2597 report by Oliver Sander <osander-AT-gmx.de>.
2594
2598
2595 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2599 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2596 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2600 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2597
2601
2598 2003-09-09 Fernando Perez <fperez@colorado.edu>
2602 2003-09-09 Fernando Perez <fperez@colorado.edu>
2599
2603
2600 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2604 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2601 unpacking a list whith a callable as first element would
2605 unpacking a list whith a callable as first element would
2602 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2606 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2603 Collins.
2607 Collins.
2604
2608
2605 2003-08-25 *** Released version 0.5.0
2609 2003-08-25 *** Released version 0.5.0
2606
2610
2607 2003-08-22 Fernando Perez <fperez@colorado.edu>
2611 2003-08-22 Fernando Perez <fperez@colorado.edu>
2608
2612
2609 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2613 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2610 improperly defined user exceptions. Thanks to feedback from Mark
2614 improperly defined user exceptions. Thanks to feedback from Mark
2611 Russell <mrussell-AT-verio.net>.
2615 Russell <mrussell-AT-verio.net>.
2612
2616
2613 2003-08-20 Fernando Perez <fperez@colorado.edu>
2617 2003-08-20 Fernando Perez <fperez@colorado.edu>
2614
2618
2615 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2619 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2616 printing so that it would print multi-line string forms starting
2620 printing so that it would print multi-line string forms starting
2617 with a new line. This way the formatting is better respected for
2621 with a new line. This way the formatting is better respected for
2618 objects which work hard to make nice string forms.
2622 objects which work hard to make nice string forms.
2619
2623
2620 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2624 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2621 autocall would overtake data access for objects with both
2625 autocall would overtake data access for objects with both
2622 __getitem__ and __call__.
2626 __getitem__ and __call__.
2623
2627
2624 2003-08-19 *** Released version 0.5.0-rc1
2628 2003-08-19 *** Released version 0.5.0-rc1
2625
2629
2626 2003-08-19 Fernando Perez <fperez@colorado.edu>
2630 2003-08-19 Fernando Perez <fperez@colorado.edu>
2627
2631
2628 * IPython/deep_reload.py (load_tail): single tiny change here
2632 * IPython/deep_reload.py (load_tail): single tiny change here
2629 seems to fix the long-standing bug of dreload() failing to work
2633 seems to fix the long-standing bug of dreload() failing to work
2630 for dotted names. But this module is pretty tricky, so I may have
2634 for dotted names. But this module is pretty tricky, so I may have
2631 missed some subtlety. Needs more testing!.
2635 missed some subtlety. Needs more testing!.
2632
2636
2633 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2637 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2634 exceptions which have badly implemented __str__ methods.
2638 exceptions which have badly implemented __str__ methods.
2635 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2639 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2636 which I've been getting reports about from Python 2.3 users. I
2640 which I've been getting reports about from Python 2.3 users. I
2637 wish I had a simple test case to reproduce the problem, so I could
2641 wish I had a simple test case to reproduce the problem, so I could
2638 either write a cleaner workaround or file a bug report if
2642 either write a cleaner workaround or file a bug report if
2639 necessary.
2643 necessary.
2640
2644
2641 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2645 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2642 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2646 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2643 a bug report by Tjabo Kloppenburg.
2647 a bug report by Tjabo Kloppenburg.
2644
2648
2645 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2649 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2646 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2650 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2647 seems rather unstable. Thanks to a bug report by Tjabo
2651 seems rather unstable. Thanks to a bug report by Tjabo
2648 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2652 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2649
2653
2650 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2654 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2651 this out soon because of the critical fixes in the inner loop for
2655 this out soon because of the critical fixes in the inner loop for
2652 generators.
2656 generators.
2653
2657
2654 * IPython/Magic.py (Magic.getargspec): removed. This (and
2658 * IPython/Magic.py (Magic.getargspec): removed. This (and
2655 _get_def) have been obsoleted by OInspect for a long time, I
2659 _get_def) have been obsoleted by OInspect for a long time, I
2656 hadn't noticed that they were dead code.
2660 hadn't noticed that they were dead code.
2657 (Magic._ofind): restored _ofind functionality for a few literals
2661 (Magic._ofind): restored _ofind functionality for a few literals
2658 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2662 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2659 for things like "hello".capitalize?, since that would require a
2663 for things like "hello".capitalize?, since that would require a
2660 potentially dangerous eval() again.
2664 potentially dangerous eval() again.
2661
2665
2662 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2666 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2663 logic a bit more to clean up the escapes handling and minimize the
2667 logic a bit more to clean up the escapes handling and minimize the
2664 use of _ofind to only necessary cases. The interactive 'feel' of
2668 use of _ofind to only necessary cases. The interactive 'feel' of
2665 IPython should have improved quite a bit with the changes in
2669 IPython should have improved quite a bit with the changes in
2666 _prefilter and _ofind (besides being far safer than before).
2670 _prefilter and _ofind (besides being far safer than before).
2667
2671
2668 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2672 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2669 obscure, never reported). Edit would fail to find the object to
2673 obscure, never reported). Edit would fail to find the object to
2670 edit under some circumstances.
2674 edit under some circumstances.
2671 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2675 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2672 which were causing double-calling of generators. Those eval calls
2676 which were causing double-calling of generators. Those eval calls
2673 were _very_ dangerous, since code with side effects could be
2677 were _very_ dangerous, since code with side effects could be
2674 triggered. As they say, 'eval is evil'... These were the
2678 triggered. As they say, 'eval is evil'... These were the
2675 nastiest evals in IPython. Besides, _ofind is now far simpler,
2679 nastiest evals in IPython. Besides, _ofind is now far simpler,
2676 and it should also be quite a bit faster. Its use of inspect is
2680 and it should also be quite a bit faster. Its use of inspect is
2677 also safer, so perhaps some of the inspect-related crashes I've
2681 also safer, so perhaps some of the inspect-related crashes I've
2678 seen lately with Python 2.3 might be taken care of. That will
2682 seen lately with Python 2.3 might be taken care of. That will
2679 need more testing.
2683 need more testing.
2680
2684
2681 2003-08-17 Fernando Perez <fperez@colorado.edu>
2685 2003-08-17 Fernando Perez <fperez@colorado.edu>
2682
2686
2683 * IPython/iplib.py (InteractiveShell._prefilter): significant
2687 * IPython/iplib.py (InteractiveShell._prefilter): significant
2684 simplifications to the logic for handling user escapes. Faster
2688 simplifications to the logic for handling user escapes. Faster
2685 and simpler code.
2689 and simpler code.
2686
2690
2687 2003-08-14 Fernando Perez <fperez@colorado.edu>
2691 2003-08-14 Fernando Perez <fperez@colorado.edu>
2688
2692
2689 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2693 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2690 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2694 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2691 but it should be quite a bit faster. And the recursive version
2695 but it should be quite a bit faster. And the recursive version
2692 generated O(log N) intermediate storage for all rank>1 arrays,
2696 generated O(log N) intermediate storage for all rank>1 arrays,
2693 even if they were contiguous.
2697 even if they were contiguous.
2694 (l1norm): Added this function.
2698 (l1norm): Added this function.
2695 (norm): Added this function for arbitrary norms (including
2699 (norm): Added this function for arbitrary norms (including
2696 l-infinity). l1 and l2 are still special cases for convenience
2700 l-infinity). l1 and l2 are still special cases for convenience
2697 and speed.
2701 and speed.
2698
2702
2699 2003-08-03 Fernando Perez <fperez@colorado.edu>
2703 2003-08-03 Fernando Perez <fperez@colorado.edu>
2700
2704
2701 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2705 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2702 exceptions, which now raise PendingDeprecationWarnings in Python
2706 exceptions, which now raise PendingDeprecationWarnings in Python
2703 2.3. There were some in Magic and some in Gnuplot2.
2707 2.3. There were some in Magic and some in Gnuplot2.
2704
2708
2705 2003-06-30 Fernando Perez <fperez@colorado.edu>
2709 2003-06-30 Fernando Perez <fperez@colorado.edu>
2706
2710
2707 * IPython/genutils.py (page): modified to call curses only for
2711 * IPython/genutils.py (page): modified to call curses only for
2708 terminals where TERM=='xterm'. After problems under many other
2712 terminals where TERM=='xterm'. After problems under many other
2709 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2713 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2710
2714
2711 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2715 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2712 would be triggered when readline was absent. This was just an old
2716 would be triggered when readline was absent. This was just an old
2713 debugging statement I'd forgotten to take out.
2717 debugging statement I'd forgotten to take out.
2714
2718
2715 2003-06-20 Fernando Perez <fperez@colorado.edu>
2719 2003-06-20 Fernando Perez <fperez@colorado.edu>
2716
2720
2717 * IPython/genutils.py (clock): modified to return only user time
2721 * IPython/genutils.py (clock): modified to return only user time
2718 (not counting system time), after a discussion on scipy. While
2722 (not counting system time), after a discussion on scipy. While
2719 system time may be a useful quantity occasionally, it may much
2723 system time may be a useful quantity occasionally, it may much
2720 more easily be skewed by occasional swapping or other similar
2724 more easily be skewed by occasional swapping or other similar
2721 activity.
2725 activity.
2722
2726
2723 2003-06-05 Fernando Perez <fperez@colorado.edu>
2727 2003-06-05 Fernando Perez <fperez@colorado.edu>
2724
2728
2725 * IPython/numutils.py (identity): new function, for building
2729 * IPython/numutils.py (identity): new function, for building
2726 arbitrary rank Kronecker deltas (mostly backwards compatible with
2730 arbitrary rank Kronecker deltas (mostly backwards compatible with
2727 Numeric.identity)
2731 Numeric.identity)
2728
2732
2729 2003-06-03 Fernando Perez <fperez@colorado.edu>
2733 2003-06-03 Fernando Perez <fperez@colorado.edu>
2730
2734
2731 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2735 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2732 arguments passed to magics with spaces, to allow trailing '\' to
2736 arguments passed to magics with spaces, to allow trailing '\' to
2733 work normally (mainly for Windows users).
2737 work normally (mainly for Windows users).
2734
2738
2735 2003-05-29 Fernando Perez <fperez@colorado.edu>
2739 2003-05-29 Fernando Perez <fperez@colorado.edu>
2736
2740
2737 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2741 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2738 instead of pydoc.help. This fixes a bizarre behavior where
2742 instead of pydoc.help. This fixes a bizarre behavior where
2739 printing '%s' % locals() would trigger the help system. Now
2743 printing '%s' % locals() would trigger the help system. Now
2740 ipython behaves like normal python does.
2744 ipython behaves like normal python does.
2741
2745
2742 Note that if one does 'from pydoc import help', the bizarre
2746 Note that if one does 'from pydoc import help', the bizarre
2743 behavior returns, but this will also happen in normal python, so
2747 behavior returns, but this will also happen in normal python, so
2744 it's not an ipython bug anymore (it has to do with how pydoc.help
2748 it's not an ipython bug anymore (it has to do with how pydoc.help
2745 is implemented).
2749 is implemented).
2746
2750
2747 2003-05-22 Fernando Perez <fperez@colorado.edu>
2751 2003-05-22 Fernando Perez <fperez@colorado.edu>
2748
2752
2749 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2753 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2750 return [] instead of None when nothing matches, also match to end
2754 return [] instead of None when nothing matches, also match to end
2751 of line. Patch by Gary Bishop.
2755 of line. Patch by Gary Bishop.
2752
2756
2753 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2757 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2754 protection as before, for files passed on the command line. This
2758 protection as before, for files passed on the command line. This
2755 prevents the CrashHandler from kicking in if user files call into
2759 prevents the CrashHandler from kicking in if user files call into
2756 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2760 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2757 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2761 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2758
2762
2759 2003-05-20 *** Released version 0.4.0
2763 2003-05-20 *** Released version 0.4.0
2760
2764
2761 2003-05-20 Fernando Perez <fperez@colorado.edu>
2765 2003-05-20 Fernando Perez <fperez@colorado.edu>
2762
2766
2763 * setup.py: added support for manpages. It's a bit hackish b/c of
2767 * setup.py: added support for manpages. It's a bit hackish b/c of
2764 a bug in the way the bdist_rpm distutils target handles gzipped
2768 a bug in the way the bdist_rpm distutils target handles gzipped
2765 manpages, but it works. After a patch by Jack.
2769 manpages, but it works. After a patch by Jack.
2766
2770
2767 2003-05-19 Fernando Perez <fperez@colorado.edu>
2771 2003-05-19 Fernando Perez <fperez@colorado.edu>
2768
2772
2769 * IPython/numutils.py: added a mockup of the kinds module, since
2773 * IPython/numutils.py: added a mockup of the kinds module, since
2770 it was recently removed from Numeric. This way, numutils will
2774 it was recently removed from Numeric. This way, numutils will
2771 work for all users even if they are missing kinds.
2775 work for all users even if they are missing kinds.
2772
2776
2773 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2777 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2774 failure, which can occur with SWIG-wrapped extensions. After a
2778 failure, which can occur with SWIG-wrapped extensions. After a
2775 crash report from Prabhu.
2779 crash report from Prabhu.
2776
2780
2777 2003-05-16 Fernando Perez <fperez@colorado.edu>
2781 2003-05-16 Fernando Perez <fperez@colorado.edu>
2778
2782
2779 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2783 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2780 protect ipython from user code which may call directly
2784 protect ipython from user code which may call directly
2781 sys.excepthook (this looks like an ipython crash to the user, even
2785 sys.excepthook (this looks like an ipython crash to the user, even
2782 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2786 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2783 This is especially important to help users of WxWindows, but may
2787 This is especially important to help users of WxWindows, but may
2784 also be useful in other cases.
2788 also be useful in other cases.
2785
2789
2786 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2790 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2787 an optional tb_offset to be specified, and to preserve exception
2791 an optional tb_offset to be specified, and to preserve exception
2788 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2792 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2789
2793
2790 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2794 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2791
2795
2792 2003-05-15 Fernando Perez <fperez@colorado.edu>
2796 2003-05-15 Fernando Perez <fperez@colorado.edu>
2793
2797
2794 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2798 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2795 installing for a new user under Windows.
2799 installing for a new user under Windows.
2796
2800
2797 2003-05-12 Fernando Perez <fperez@colorado.edu>
2801 2003-05-12 Fernando Perez <fperez@colorado.edu>
2798
2802
2799 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2803 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2800 handler for Emacs comint-based lines. Currently it doesn't do
2804 handler for Emacs comint-based lines. Currently it doesn't do
2801 much (but importantly, it doesn't update the history cache). In
2805 much (but importantly, it doesn't update the history cache). In
2802 the future it may be expanded if Alex needs more functionality
2806 the future it may be expanded if Alex needs more functionality
2803 there.
2807 there.
2804
2808
2805 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2809 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2806 info to crash reports.
2810 info to crash reports.
2807
2811
2808 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2812 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2809 just like Python's -c. Also fixed crash with invalid -color
2813 just like Python's -c. Also fixed crash with invalid -color
2810 option value at startup. Thanks to Will French
2814 option value at startup. Thanks to Will French
2811 <wfrench-AT-bestweb.net> for the bug report.
2815 <wfrench-AT-bestweb.net> for the bug report.
2812
2816
2813 2003-05-09 Fernando Perez <fperez@colorado.edu>
2817 2003-05-09 Fernando Perez <fperez@colorado.edu>
2814
2818
2815 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2819 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2816 to EvalDict (it's a mapping, after all) and simplified its code
2820 to EvalDict (it's a mapping, after all) and simplified its code
2817 quite a bit, after a nice discussion on c.l.py where Gustavo
2821 quite a bit, after a nice discussion on c.l.py where Gustavo
2818 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2822 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2819
2823
2820 2003-04-30 Fernando Perez <fperez@colorado.edu>
2824 2003-04-30 Fernando Perez <fperez@colorado.edu>
2821
2825
2822 * IPython/genutils.py (timings_out): modified it to reduce its
2826 * IPython/genutils.py (timings_out): modified it to reduce its
2823 overhead in the common reps==1 case.
2827 overhead in the common reps==1 case.
2824
2828
2825 2003-04-29 Fernando Perez <fperez@colorado.edu>
2829 2003-04-29 Fernando Perez <fperez@colorado.edu>
2826
2830
2827 * IPython/genutils.py (timings_out): Modified to use the resource
2831 * IPython/genutils.py (timings_out): Modified to use the resource
2828 module, which avoids the wraparound problems of time.clock().
2832 module, which avoids the wraparound problems of time.clock().
2829
2833
2830 2003-04-17 *** Released version 0.2.15pre4
2834 2003-04-17 *** Released version 0.2.15pre4
2831
2835
2832 2003-04-17 Fernando Perez <fperez@colorado.edu>
2836 2003-04-17 Fernando Perez <fperez@colorado.edu>
2833
2837
2834 * setup.py (scriptfiles): Split windows-specific stuff over to a
2838 * setup.py (scriptfiles): Split windows-specific stuff over to a
2835 separate file, in an attempt to have a Windows GUI installer.
2839 separate file, in an attempt to have a Windows GUI installer.
2836 That didn't work, but part of the groundwork is done.
2840 That didn't work, but part of the groundwork is done.
2837
2841
2838 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2842 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2839 indent/unindent with 4 spaces. Particularly useful in combination
2843 indent/unindent with 4 spaces. Particularly useful in combination
2840 with the new auto-indent option.
2844 with the new auto-indent option.
2841
2845
2842 2003-04-16 Fernando Perez <fperez@colorado.edu>
2846 2003-04-16 Fernando Perez <fperez@colorado.edu>
2843
2847
2844 * IPython/Magic.py: various replacements of self.rc for
2848 * IPython/Magic.py: various replacements of self.rc for
2845 self.shell.rc. A lot more remains to be done to fully disentangle
2849 self.shell.rc. A lot more remains to be done to fully disentangle
2846 this class from the main Shell class.
2850 this class from the main Shell class.
2847
2851
2848 * IPython/GnuplotRuntime.py: added checks for mouse support so
2852 * IPython/GnuplotRuntime.py: added checks for mouse support so
2849 that we don't try to enable it if the current gnuplot doesn't
2853 that we don't try to enable it if the current gnuplot doesn't
2850 really support it. Also added checks so that we don't try to
2854 really support it. Also added checks so that we don't try to
2851 enable persist under Windows (where Gnuplot doesn't recognize the
2855 enable persist under Windows (where Gnuplot doesn't recognize the
2852 option).
2856 option).
2853
2857
2854 * IPython/iplib.py (InteractiveShell.interact): Added optional
2858 * IPython/iplib.py (InteractiveShell.interact): Added optional
2855 auto-indenting code, after a patch by King C. Shu
2859 auto-indenting code, after a patch by King C. Shu
2856 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2860 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2857 get along well with pasting indented code. If I ever figure out
2861 get along well with pasting indented code. If I ever figure out
2858 how to make that part go well, it will become on by default.
2862 how to make that part go well, it will become on by default.
2859
2863
2860 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2864 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2861 crash ipython if there was an unmatched '%' in the user's prompt
2865 crash ipython if there was an unmatched '%' in the user's prompt
2862 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2866 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2863
2867
2864 * IPython/iplib.py (InteractiveShell.interact): removed the
2868 * IPython/iplib.py (InteractiveShell.interact): removed the
2865 ability to ask the user whether he wants to crash or not at the
2869 ability to ask the user whether he wants to crash or not at the
2866 'last line' exception handler. Calling functions at that point
2870 'last line' exception handler. Calling functions at that point
2867 changes the stack, and the error reports would have incorrect
2871 changes the stack, and the error reports would have incorrect
2868 tracebacks.
2872 tracebacks.
2869
2873
2870 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2874 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2871 pass through a peger a pretty-printed form of any object. After a
2875 pass through a peger a pretty-printed form of any object. After a
2872 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2876 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2873
2877
2874 2003-04-14 Fernando Perez <fperez@colorado.edu>
2878 2003-04-14 Fernando Perez <fperez@colorado.edu>
2875
2879
2876 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2880 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2877 all files in ~ would be modified at first install (instead of
2881 all files in ~ would be modified at first install (instead of
2878 ~/.ipython). This could be potentially disastrous, as the
2882 ~/.ipython). This could be potentially disastrous, as the
2879 modification (make line-endings native) could damage binary files.
2883 modification (make line-endings native) could damage binary files.
2880
2884
2881 2003-04-10 Fernando Perez <fperez@colorado.edu>
2885 2003-04-10 Fernando Perez <fperez@colorado.edu>
2882
2886
2883 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2887 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2884 handle only lines which are invalid python. This now means that
2888 handle only lines which are invalid python. This now means that
2885 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2889 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2886 for the bug report.
2890 for the bug report.
2887
2891
2888 2003-04-01 Fernando Perez <fperez@colorado.edu>
2892 2003-04-01 Fernando Perez <fperez@colorado.edu>
2889
2893
2890 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2894 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2891 where failing to set sys.last_traceback would crash pdb.pm().
2895 where failing to set sys.last_traceback would crash pdb.pm().
2892 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2896 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2893 report.
2897 report.
2894
2898
2895 2003-03-25 Fernando Perez <fperez@colorado.edu>
2899 2003-03-25 Fernando Perez <fperez@colorado.edu>
2896
2900
2897 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2901 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2898 before printing it (it had a lot of spurious blank lines at the
2902 before printing it (it had a lot of spurious blank lines at the
2899 end).
2903 end).
2900
2904
2901 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2905 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2902 output would be sent 21 times! Obviously people don't use this
2906 output would be sent 21 times! Obviously people don't use this
2903 too often, or I would have heard about it.
2907 too often, or I would have heard about it.
2904
2908
2905 2003-03-24 Fernando Perez <fperez@colorado.edu>
2909 2003-03-24 Fernando Perez <fperez@colorado.edu>
2906
2910
2907 * setup.py (scriptfiles): renamed the data_files parameter from
2911 * setup.py (scriptfiles): renamed the data_files parameter from
2908 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2912 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2909 for the patch.
2913 for the patch.
2910
2914
2911 2003-03-20 Fernando Perez <fperez@colorado.edu>
2915 2003-03-20 Fernando Perez <fperez@colorado.edu>
2912
2916
2913 * IPython/genutils.py (error): added error() and fatal()
2917 * IPython/genutils.py (error): added error() and fatal()
2914 functions.
2918 functions.
2915
2919
2916 2003-03-18 *** Released version 0.2.15pre3
2920 2003-03-18 *** Released version 0.2.15pre3
2917
2921
2918 2003-03-18 Fernando Perez <fperez@colorado.edu>
2922 2003-03-18 Fernando Perez <fperez@colorado.edu>
2919
2923
2920 * setupext/install_data_ext.py
2924 * setupext/install_data_ext.py
2921 (install_data_ext.initialize_options): Class contributed by Jack
2925 (install_data_ext.initialize_options): Class contributed by Jack
2922 Moffit for fixing the old distutils hack. He is sending this to
2926 Moffit for fixing the old distutils hack. He is sending this to
2923 the distutils folks so in the future we may not need it as a
2927 the distutils folks so in the future we may not need it as a
2924 private fix.
2928 private fix.
2925
2929
2926 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2930 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2927 changes for Debian packaging. See his patch for full details.
2931 changes for Debian packaging. See his patch for full details.
2928 The old distutils hack of making the ipythonrc* files carry a
2932 The old distutils hack of making the ipythonrc* files carry a
2929 bogus .py extension is gone, at last. Examples were moved to a
2933 bogus .py extension is gone, at last. Examples were moved to a
2930 separate subdir under doc/, and the separate executable scripts
2934 separate subdir under doc/, and the separate executable scripts
2931 now live in their own directory. Overall a great cleanup. The
2935 now live in their own directory. Overall a great cleanup. The
2932 manual was updated to use the new files, and setup.py has been
2936 manual was updated to use the new files, and setup.py has been
2933 fixed for this setup.
2937 fixed for this setup.
2934
2938
2935 * IPython/PyColorize.py (Parser.usage): made non-executable and
2939 * IPython/PyColorize.py (Parser.usage): made non-executable and
2936 created a pycolor wrapper around it to be included as a script.
2940 created a pycolor wrapper around it to be included as a script.
2937
2941
2938 2003-03-12 *** Released version 0.2.15pre2
2942 2003-03-12 *** Released version 0.2.15pre2
2939
2943
2940 2003-03-12 Fernando Perez <fperez@colorado.edu>
2944 2003-03-12 Fernando Perez <fperez@colorado.edu>
2941
2945
2942 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2946 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2943 long-standing problem with garbage characters in some terminals.
2947 long-standing problem with garbage characters in some terminals.
2944 The issue was really that the \001 and \002 escapes must _only_ be
2948 The issue was really that the \001 and \002 escapes must _only_ be
2945 passed to input prompts (which call readline), but _never_ to
2949 passed to input prompts (which call readline), but _never_ to
2946 normal text to be printed on screen. I changed ColorANSI to have
2950 normal text to be printed on screen. I changed ColorANSI to have
2947 two classes: TermColors and InputTermColors, each with the
2951 two classes: TermColors and InputTermColors, each with the
2948 appropriate escapes for input prompts or normal text. The code in
2952 appropriate escapes for input prompts or normal text. The code in
2949 Prompts.py got slightly more complicated, but this very old and
2953 Prompts.py got slightly more complicated, but this very old and
2950 annoying bug is finally fixed.
2954 annoying bug is finally fixed.
2951
2955
2952 All the credit for nailing down the real origin of this problem
2956 All the credit for nailing down the real origin of this problem
2953 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2957 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2954 *Many* thanks to him for spending quite a bit of effort on this.
2958 *Many* thanks to him for spending quite a bit of effort on this.
2955
2959
2956 2003-03-05 *** Released version 0.2.15pre1
2960 2003-03-05 *** Released version 0.2.15pre1
2957
2961
2958 2003-03-03 Fernando Perez <fperez@colorado.edu>
2962 2003-03-03 Fernando Perez <fperez@colorado.edu>
2959
2963
2960 * IPython/FakeModule.py: Moved the former _FakeModule to a
2964 * IPython/FakeModule.py: Moved the former _FakeModule to a
2961 separate file, because it's also needed by Magic (to fix a similar
2965 separate file, because it's also needed by Magic (to fix a similar
2962 pickle-related issue in @run).
2966 pickle-related issue in @run).
2963
2967
2964 2003-03-02 Fernando Perez <fperez@colorado.edu>
2968 2003-03-02 Fernando Perez <fperez@colorado.edu>
2965
2969
2966 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2970 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2967 the autocall option at runtime.
2971 the autocall option at runtime.
2968 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2972 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2969 across Magic.py to start separating Magic from InteractiveShell.
2973 across Magic.py to start separating Magic from InteractiveShell.
2970 (Magic._ofind): Fixed to return proper namespace for dotted
2974 (Magic._ofind): Fixed to return proper namespace for dotted
2971 names. Before, a dotted name would always return 'not currently
2975 names. Before, a dotted name would always return 'not currently
2972 defined', because it would find the 'parent'. s.x would be found,
2976 defined', because it would find the 'parent'. s.x would be found,
2973 but since 'x' isn't defined by itself, it would get confused.
2977 but since 'x' isn't defined by itself, it would get confused.
2974 (Magic.magic_run): Fixed pickling problems reported by Ralf
2978 (Magic.magic_run): Fixed pickling problems reported by Ralf
2975 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2979 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2976 that I'd used when Mike Heeter reported similar issues at the
2980 that I'd used when Mike Heeter reported similar issues at the
2977 top-level, but now for @run. It boils down to injecting the
2981 top-level, but now for @run. It boils down to injecting the
2978 namespace where code is being executed with something that looks
2982 namespace where code is being executed with something that looks
2979 enough like a module to fool pickle.dump(). Since a pickle stores
2983 enough like a module to fool pickle.dump(). Since a pickle stores
2980 a named reference to the importing module, we need this for
2984 a named reference to the importing module, we need this for
2981 pickles to save something sensible.
2985 pickles to save something sensible.
2982
2986
2983 * IPython/ipmaker.py (make_IPython): added an autocall option.
2987 * IPython/ipmaker.py (make_IPython): added an autocall option.
2984
2988
2985 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2989 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2986 the auto-eval code. Now autocalling is an option, and the code is
2990 the auto-eval code. Now autocalling is an option, and the code is
2987 also vastly safer. There is no more eval() involved at all.
2991 also vastly safer. There is no more eval() involved at all.
2988
2992
2989 2003-03-01 Fernando Perez <fperez@colorado.edu>
2993 2003-03-01 Fernando Perez <fperez@colorado.edu>
2990
2994
2991 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2995 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2992 dict with named keys instead of a tuple.
2996 dict with named keys instead of a tuple.
2993
2997
2994 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2998 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2995
2999
2996 * setup.py (make_shortcut): Fixed message about directories
3000 * setup.py (make_shortcut): Fixed message about directories
2997 created during Windows installation (the directories were ok, just
3001 created during Windows installation (the directories were ok, just
2998 the printed message was misleading). Thanks to Chris Liechti
3002 the printed message was misleading). Thanks to Chris Liechti
2999 <cliechti-AT-gmx.net> for the heads up.
3003 <cliechti-AT-gmx.net> for the heads up.
3000
3004
3001 2003-02-21 Fernando Perez <fperez@colorado.edu>
3005 2003-02-21 Fernando Perez <fperez@colorado.edu>
3002
3006
3003 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3007 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3004 of ValueError exception when checking for auto-execution. This
3008 of ValueError exception when checking for auto-execution. This
3005 one is raised by things like Numeric arrays arr.flat when the
3009 one is raised by things like Numeric arrays arr.flat when the
3006 array is non-contiguous.
3010 array is non-contiguous.
3007
3011
3008 2003-01-31 Fernando Perez <fperez@colorado.edu>
3012 2003-01-31 Fernando Perez <fperez@colorado.edu>
3009
3013
3010 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3014 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3011 not return any value at all (even though the command would get
3015 not return any value at all (even though the command would get
3012 executed).
3016 executed).
3013 (xsys): Flush stdout right after printing the command to ensure
3017 (xsys): Flush stdout right after printing the command to ensure
3014 proper ordering of commands and command output in the total
3018 proper ordering of commands and command output in the total
3015 output.
3019 output.
3016 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3020 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3017 system/getoutput as defaults. The old ones are kept for
3021 system/getoutput as defaults. The old ones are kept for
3018 compatibility reasons, so no code which uses this library needs
3022 compatibility reasons, so no code which uses this library needs
3019 changing.
3023 changing.
3020
3024
3021 2003-01-27 *** Released version 0.2.14
3025 2003-01-27 *** Released version 0.2.14
3022
3026
3023 2003-01-25 Fernando Perez <fperez@colorado.edu>
3027 2003-01-25 Fernando Perez <fperez@colorado.edu>
3024
3028
3025 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3029 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3026 functions defined in previous edit sessions could not be re-edited
3030 functions defined in previous edit sessions could not be re-edited
3027 (because the temp files were immediately removed). Now temp files
3031 (because the temp files were immediately removed). Now temp files
3028 are removed only at IPython's exit.
3032 are removed only at IPython's exit.
3029 (Magic.magic_run): Improved @run to perform shell-like expansions
3033 (Magic.magic_run): Improved @run to perform shell-like expansions
3030 on its arguments (~users and $VARS). With this, @run becomes more
3034 on its arguments (~users and $VARS). With this, @run becomes more
3031 like a normal command-line.
3035 like a normal command-line.
3032
3036
3033 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3037 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3034 bugs related to embedding and cleaned up that code. A fairly
3038 bugs related to embedding and cleaned up that code. A fairly
3035 important one was the impossibility to access the global namespace
3039 important one was the impossibility to access the global namespace
3036 through the embedded IPython (only local variables were visible).
3040 through the embedded IPython (only local variables were visible).
3037
3041
3038 2003-01-14 Fernando Perez <fperez@colorado.edu>
3042 2003-01-14 Fernando Perez <fperez@colorado.edu>
3039
3043
3040 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3044 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3041 auto-calling to be a bit more conservative. Now it doesn't get
3045 auto-calling to be a bit more conservative. Now it doesn't get
3042 triggered if any of '!=()<>' are in the rest of the input line, to
3046 triggered if any of '!=()<>' are in the rest of the input line, to
3043 allow comparing callables. Thanks to Alex for the heads up.
3047 allow comparing callables. Thanks to Alex for the heads up.
3044
3048
3045 2003-01-07 Fernando Perez <fperez@colorado.edu>
3049 2003-01-07 Fernando Perez <fperez@colorado.edu>
3046
3050
3047 * IPython/genutils.py (page): fixed estimation of the number of
3051 * IPython/genutils.py (page): fixed estimation of the number of
3048 lines in a string to be paged to simply count newlines. This
3052 lines in a string to be paged to simply count newlines. This
3049 prevents over-guessing due to embedded escape sequences. A better
3053 prevents over-guessing due to embedded escape sequences. A better
3050 long-term solution would involve stripping out the control chars
3054 long-term solution would involve stripping out the control chars
3051 for the count, but it's potentially so expensive I just don't
3055 for the count, but it's potentially so expensive I just don't
3052 think it's worth doing.
3056 think it's worth doing.
3053
3057
3054 2002-12-19 *** Released version 0.2.14pre50
3058 2002-12-19 *** Released version 0.2.14pre50
3055
3059
3056 2002-12-19 Fernando Perez <fperez@colorado.edu>
3060 2002-12-19 Fernando Perez <fperez@colorado.edu>
3057
3061
3058 * tools/release (version): Changed release scripts to inform
3062 * tools/release (version): Changed release scripts to inform
3059 Andrea and build a NEWS file with a list of recent changes.
3063 Andrea and build a NEWS file with a list of recent changes.
3060
3064
3061 * IPython/ColorANSI.py (__all__): changed terminal detection
3065 * IPython/ColorANSI.py (__all__): changed terminal detection
3062 code. Seems to work better for xterms without breaking
3066 code. Seems to work better for xterms without breaking
3063 konsole. Will need more testing to determine if WinXP and Mac OSX
3067 konsole. Will need more testing to determine if WinXP and Mac OSX
3064 also work ok.
3068 also work ok.
3065
3069
3066 2002-12-18 *** Released version 0.2.14pre49
3070 2002-12-18 *** Released version 0.2.14pre49
3067
3071
3068 2002-12-18 Fernando Perez <fperez@colorado.edu>
3072 2002-12-18 Fernando Perez <fperez@colorado.edu>
3069
3073
3070 * Docs: added new info about Mac OSX, from Andrea.
3074 * Docs: added new info about Mac OSX, from Andrea.
3071
3075
3072 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3076 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3073 allow direct plotting of python strings whose format is the same
3077 allow direct plotting of python strings whose format is the same
3074 of gnuplot data files.
3078 of gnuplot data files.
3075
3079
3076 2002-12-16 Fernando Perez <fperez@colorado.edu>
3080 2002-12-16 Fernando Perez <fperez@colorado.edu>
3077
3081
3078 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3082 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3079 value of exit question to be acknowledged.
3083 value of exit question to be acknowledged.
3080
3084
3081 2002-12-03 Fernando Perez <fperez@colorado.edu>
3085 2002-12-03 Fernando Perez <fperez@colorado.edu>
3082
3086
3083 * IPython/ipmaker.py: removed generators, which had been added
3087 * IPython/ipmaker.py: removed generators, which had been added
3084 by mistake in an earlier debugging run. This was causing trouble
3088 by mistake in an earlier debugging run. This was causing trouble
3085 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3089 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3086 for pointing this out.
3090 for pointing this out.
3087
3091
3088 2002-11-17 Fernando Perez <fperez@colorado.edu>
3092 2002-11-17 Fernando Perez <fperez@colorado.edu>
3089
3093
3090 * Manual: updated the Gnuplot section.
3094 * Manual: updated the Gnuplot section.
3091
3095
3092 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3096 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3093 a much better split of what goes in Runtime and what goes in
3097 a much better split of what goes in Runtime and what goes in
3094 Interactive.
3098 Interactive.
3095
3099
3096 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3100 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3097 being imported from iplib.
3101 being imported from iplib.
3098
3102
3099 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3103 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3100 for command-passing. Now the global Gnuplot instance is called
3104 for command-passing. Now the global Gnuplot instance is called
3101 'gp' instead of 'g', which was really a far too fragile and
3105 'gp' instead of 'g', which was really a far too fragile and
3102 common name.
3106 common name.
3103
3107
3104 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3108 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3105 bounding boxes generated by Gnuplot for square plots.
3109 bounding boxes generated by Gnuplot for square plots.
3106
3110
3107 * IPython/genutils.py (popkey): new function added. I should
3111 * IPython/genutils.py (popkey): new function added. I should
3108 suggest this on c.l.py as a dict method, it seems useful.
3112 suggest this on c.l.py as a dict method, it seems useful.
3109
3113
3110 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3114 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3111 to transparently handle PostScript generation. MUCH better than
3115 to transparently handle PostScript generation. MUCH better than
3112 the previous plot_eps/replot_eps (which I removed now). The code
3116 the previous plot_eps/replot_eps (which I removed now). The code
3113 is also fairly clean and well documented now (including
3117 is also fairly clean and well documented now (including
3114 docstrings).
3118 docstrings).
3115
3119
3116 2002-11-13 Fernando Perez <fperez@colorado.edu>
3120 2002-11-13 Fernando Perez <fperez@colorado.edu>
3117
3121
3118 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3122 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3119 (inconsistent with options).
3123 (inconsistent with options).
3120
3124
3121 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3125 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3122 manually disabled, I don't know why. Fixed it.
3126 manually disabled, I don't know why. Fixed it.
3123 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3127 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3124 eps output.
3128 eps output.
3125
3129
3126 2002-11-12 Fernando Perez <fperez@colorado.edu>
3130 2002-11-12 Fernando Perez <fperez@colorado.edu>
3127
3131
3128 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3132 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3129 don't propagate up to caller. Fixes crash reported by François
3133 don't propagate up to caller. Fixes crash reported by François
3130 Pinard.
3134 Pinard.
3131
3135
3132 2002-11-09 Fernando Perez <fperez@colorado.edu>
3136 2002-11-09 Fernando Perez <fperez@colorado.edu>
3133
3137
3134 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3138 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3135 history file for new users.
3139 history file for new users.
3136 (make_IPython): fixed bug where initial install would leave the
3140 (make_IPython): fixed bug where initial install would leave the
3137 user running in the .ipython dir.
3141 user running in the .ipython dir.
3138 (make_IPython): fixed bug where config dir .ipython would be
3142 (make_IPython): fixed bug where config dir .ipython would be
3139 created regardless of the given -ipythondir option. Thanks to Cory
3143 created regardless of the given -ipythondir option. Thanks to Cory
3140 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3144 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3141
3145
3142 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3146 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3143 type confirmations. Will need to use it in all of IPython's code
3147 type confirmations. Will need to use it in all of IPython's code
3144 consistently.
3148 consistently.
3145
3149
3146 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3150 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3147 context to print 31 lines instead of the default 5. This will make
3151 context to print 31 lines instead of the default 5. This will make
3148 the crash reports extremely detailed in case the problem is in
3152 the crash reports extremely detailed in case the problem is in
3149 libraries I don't have access to.
3153 libraries I don't have access to.
3150
3154
3151 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3155 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3152 line of defense' code to still crash, but giving users fair
3156 line of defense' code to still crash, but giving users fair
3153 warning. I don't want internal errors to go unreported: if there's
3157 warning. I don't want internal errors to go unreported: if there's
3154 an internal problem, IPython should crash and generate a full
3158 an internal problem, IPython should crash and generate a full
3155 report.
3159 report.
3156
3160
3157 2002-11-08 Fernando Perez <fperez@colorado.edu>
3161 2002-11-08 Fernando Perez <fperez@colorado.edu>
3158
3162
3159 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3163 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3160 otherwise uncaught exceptions which can appear if people set
3164 otherwise uncaught exceptions which can appear if people set
3161 sys.stdout to something badly broken. Thanks to a crash report
3165 sys.stdout to something badly broken. Thanks to a crash report
3162 from henni-AT-mail.brainbot.com.
3166 from henni-AT-mail.brainbot.com.
3163
3167
3164 2002-11-04 Fernando Perez <fperez@colorado.edu>
3168 2002-11-04 Fernando Perez <fperez@colorado.edu>
3165
3169
3166 * IPython/iplib.py (InteractiveShell.interact): added
3170 * IPython/iplib.py (InteractiveShell.interact): added
3167 __IPYTHON__active to the builtins. It's a flag which goes on when
3171 __IPYTHON__active to the builtins. It's a flag which goes on when
3168 the interaction starts and goes off again when it stops. This
3172 the interaction starts and goes off again when it stops. This
3169 allows embedding code to detect being inside IPython. Before this
3173 allows embedding code to detect being inside IPython. Before this
3170 was done via __IPYTHON__, but that only shows that an IPython
3174 was done via __IPYTHON__, but that only shows that an IPython
3171 instance has been created.
3175 instance has been created.
3172
3176
3173 * IPython/Magic.py (Magic.magic_env): I realized that in a
3177 * IPython/Magic.py (Magic.magic_env): I realized that in a
3174 UserDict, instance.data holds the data as a normal dict. So I
3178 UserDict, instance.data holds the data as a normal dict. So I
3175 modified @env to return os.environ.data instead of rebuilding a
3179 modified @env to return os.environ.data instead of rebuilding a
3176 dict by hand.
3180 dict by hand.
3177
3181
3178 2002-11-02 Fernando Perez <fperez@colorado.edu>
3182 2002-11-02 Fernando Perez <fperez@colorado.edu>
3179
3183
3180 * IPython/genutils.py (warn): changed so that level 1 prints no
3184 * IPython/genutils.py (warn): changed so that level 1 prints no
3181 header. Level 2 is now the default (with 'WARNING' header, as
3185 header. Level 2 is now the default (with 'WARNING' header, as
3182 before). I think I tracked all places where changes were needed in
3186 before). I think I tracked all places where changes were needed in
3183 IPython, but outside code using the old level numbering may have
3187 IPython, but outside code using the old level numbering may have
3184 broken.
3188 broken.
3185
3189
3186 * IPython/iplib.py (InteractiveShell.runcode): added this to
3190 * IPython/iplib.py (InteractiveShell.runcode): added this to
3187 handle the tracebacks in SystemExit traps correctly. The previous
3191 handle the tracebacks in SystemExit traps correctly. The previous
3188 code (through interact) was printing more of the stack than
3192 code (through interact) was printing more of the stack than
3189 necessary, showing IPython internal code to the user.
3193 necessary, showing IPython internal code to the user.
3190
3194
3191 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3195 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3192 default. Now that the default at the confirmation prompt is yes,
3196 default. Now that the default at the confirmation prompt is yes,
3193 it's not so intrusive. François' argument that ipython sessions
3197 it's not so intrusive. François' argument that ipython sessions
3194 tend to be complex enough not to lose them from an accidental C-d,
3198 tend to be complex enough not to lose them from an accidental C-d,
3195 is a valid one.
3199 is a valid one.
3196
3200
3197 * IPython/iplib.py (InteractiveShell.interact): added a
3201 * IPython/iplib.py (InteractiveShell.interact): added a
3198 showtraceback() call to the SystemExit trap, and modified the exit
3202 showtraceback() call to the SystemExit trap, and modified the exit
3199 confirmation to have yes as the default.
3203 confirmation to have yes as the default.
3200
3204
3201 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3205 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3202 this file. It's been gone from the code for a long time, this was
3206 this file. It's been gone from the code for a long time, this was
3203 simply leftover junk.
3207 simply leftover junk.
3204
3208
3205 2002-11-01 Fernando Perez <fperez@colorado.edu>
3209 2002-11-01 Fernando Perez <fperez@colorado.edu>
3206
3210
3207 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3211 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3208 added. If set, IPython now traps EOF and asks for
3212 added. If set, IPython now traps EOF and asks for
3209 confirmation. After a request by François Pinard.
3213 confirmation. After a request by François Pinard.
3210
3214
3211 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3215 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3212 of @abort, and with a new (better) mechanism for handling the
3216 of @abort, and with a new (better) mechanism for handling the
3213 exceptions.
3217 exceptions.
3214
3218
3215 2002-10-27 Fernando Perez <fperez@colorado.edu>
3219 2002-10-27 Fernando Perez <fperez@colorado.edu>
3216
3220
3217 * IPython/usage.py (__doc__): updated the --help information and
3221 * IPython/usage.py (__doc__): updated the --help information and
3218 the ipythonrc file to indicate that -log generates
3222 the ipythonrc file to indicate that -log generates
3219 ./ipython.log. Also fixed the corresponding info in @logstart.
3223 ./ipython.log. Also fixed the corresponding info in @logstart.
3220 This and several other fixes in the manuals thanks to reports by
3224 This and several other fixes in the manuals thanks to reports by
3221 François Pinard <pinard-AT-iro.umontreal.ca>.
3225 François Pinard <pinard-AT-iro.umontreal.ca>.
3222
3226
3223 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3227 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3224 refer to @logstart (instead of @log, which doesn't exist).
3228 refer to @logstart (instead of @log, which doesn't exist).
3225
3229
3226 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3230 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3227 AttributeError crash. Thanks to Christopher Armstrong
3231 AttributeError crash. Thanks to Christopher Armstrong
3228 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3232 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3229 introduced recently (in 0.2.14pre37) with the fix to the eval
3233 introduced recently (in 0.2.14pre37) with the fix to the eval
3230 problem mentioned below.
3234 problem mentioned below.
3231
3235
3232 2002-10-17 Fernando Perez <fperez@colorado.edu>
3236 2002-10-17 Fernando Perez <fperez@colorado.edu>
3233
3237
3234 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3238 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3235 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3239 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3236
3240
3237 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3241 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3238 this function to fix a problem reported by Alex Schmolck. He saw
3242 this function to fix a problem reported by Alex Schmolck. He saw
3239 it with list comprehensions and generators, which were getting
3243 it with list comprehensions and generators, which were getting
3240 called twice. The real problem was an 'eval' call in testing for
3244 called twice. The real problem was an 'eval' call in testing for
3241 automagic which was evaluating the input line silently.
3245 automagic which was evaluating the input line silently.
3242
3246
3243 This is a potentially very nasty bug, if the input has side
3247 This is a potentially very nasty bug, if the input has side
3244 effects which must not be repeated. The code is much cleaner now,
3248 effects which must not be repeated. The code is much cleaner now,
3245 without any blanket 'except' left and with a regexp test for
3249 without any blanket 'except' left and with a regexp test for
3246 actual function names.
3250 actual function names.
3247
3251
3248 But an eval remains, which I'm not fully comfortable with. I just
3252 But an eval remains, which I'm not fully comfortable with. I just
3249 don't know how to find out if an expression could be a callable in
3253 don't know how to find out if an expression could be a callable in
3250 the user's namespace without doing an eval on the string. However
3254 the user's namespace without doing an eval on the string. However
3251 that string is now much more strictly checked so that no code
3255 that string is now much more strictly checked so that no code
3252 slips by, so the eval should only happen for things that can
3256 slips by, so the eval should only happen for things that can
3253 really be only function/method names.
3257 really be only function/method names.
3254
3258
3255 2002-10-15 Fernando Perez <fperez@colorado.edu>
3259 2002-10-15 Fernando Perez <fperez@colorado.edu>
3256
3260
3257 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3261 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3258 OSX information to main manual, removed README_Mac_OSX file from
3262 OSX information to main manual, removed README_Mac_OSX file from
3259 distribution. Also updated credits for recent additions.
3263 distribution. Also updated credits for recent additions.
3260
3264
3261 2002-10-10 Fernando Perez <fperez@colorado.edu>
3265 2002-10-10 Fernando Perez <fperez@colorado.edu>
3262
3266
3263 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3267 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3264 terminal-related issues. Many thanks to Andrea Riciputi
3268 terminal-related issues. Many thanks to Andrea Riciputi
3265 <andrea.riciputi-AT-libero.it> for writing it.
3269 <andrea.riciputi-AT-libero.it> for writing it.
3266
3270
3267 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3271 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3268 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3272 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3269
3273
3270 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3274 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3271 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3275 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3272 <syver-en-AT-online.no> who both submitted patches for this problem.
3276 <syver-en-AT-online.no> who both submitted patches for this problem.
3273
3277
3274 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3278 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3275 global embedding to make sure that things don't overwrite user
3279 global embedding to make sure that things don't overwrite user
3276 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3280 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3277
3281
3278 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3282 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3279 compatibility. Thanks to Hayden Callow
3283 compatibility. Thanks to Hayden Callow
3280 <h.callow-AT-elec.canterbury.ac.nz>
3284 <h.callow-AT-elec.canterbury.ac.nz>
3281
3285
3282 2002-10-04 Fernando Perez <fperez@colorado.edu>
3286 2002-10-04 Fernando Perez <fperez@colorado.edu>
3283
3287
3284 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3288 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3285 Gnuplot.File objects.
3289 Gnuplot.File objects.
3286
3290
3287 2002-07-23 Fernando Perez <fperez@colorado.edu>
3291 2002-07-23 Fernando Perez <fperez@colorado.edu>
3288
3292
3289 * IPython/genutils.py (timing): Added timings() and timing() for
3293 * IPython/genutils.py (timing): Added timings() and timing() for
3290 quick access to the most commonly needed data, the execution
3294 quick access to the most commonly needed data, the execution
3291 times. Old timing() renamed to timings_out().
3295 times. Old timing() renamed to timings_out().
3292
3296
3293 2002-07-18 Fernando Perez <fperez@colorado.edu>
3297 2002-07-18 Fernando Perez <fperez@colorado.edu>
3294
3298
3295 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3299 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3296 bug with nested instances disrupting the parent's tab completion.
3300 bug with nested instances disrupting the parent's tab completion.
3297
3301
3298 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3302 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3299 all_completions code to begin the emacs integration.
3303 all_completions code to begin the emacs integration.
3300
3304
3301 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3305 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3302 argument to allow titling individual arrays when plotting.
3306 argument to allow titling individual arrays when plotting.
3303
3307
3304 2002-07-15 Fernando Perez <fperez@colorado.edu>
3308 2002-07-15 Fernando Perez <fperez@colorado.edu>
3305
3309
3306 * setup.py (make_shortcut): changed to retrieve the value of
3310 * setup.py (make_shortcut): changed to retrieve the value of
3307 'Program Files' directory from the registry (this value changes in
3311 'Program Files' directory from the registry (this value changes in
3308 non-english versions of Windows). Thanks to Thomas Fanslau
3312 non-english versions of Windows). Thanks to Thomas Fanslau
3309 <tfanslau-AT-gmx.de> for the report.
3313 <tfanslau-AT-gmx.de> for the report.
3310
3314
3311 2002-07-10 Fernando Perez <fperez@colorado.edu>
3315 2002-07-10 Fernando Perez <fperez@colorado.edu>
3312
3316
3313 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3317 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3314 a bug in pdb, which crashes if a line with only whitespace is
3318 a bug in pdb, which crashes if a line with only whitespace is
3315 entered. Bug report submitted to sourceforge.
3319 entered. Bug report submitted to sourceforge.
3316
3320
3317 2002-07-09 Fernando Perez <fperez@colorado.edu>
3321 2002-07-09 Fernando Perez <fperez@colorado.edu>
3318
3322
3319 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3323 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3320 reporting exceptions (it's a bug in inspect.py, I just set a
3324 reporting exceptions (it's a bug in inspect.py, I just set a
3321 workaround).
3325 workaround).
3322
3326
3323 2002-07-08 Fernando Perez <fperez@colorado.edu>
3327 2002-07-08 Fernando Perez <fperez@colorado.edu>
3324
3328
3325 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3329 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3326 __IPYTHON__ in __builtins__ to show up in user_ns.
3330 __IPYTHON__ in __builtins__ to show up in user_ns.
3327
3331
3328 2002-07-03 Fernando Perez <fperez@colorado.edu>
3332 2002-07-03 Fernando Perez <fperez@colorado.edu>
3329
3333
3330 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3334 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3331 name from @gp_set_instance to @gp_set_default.
3335 name from @gp_set_instance to @gp_set_default.
3332
3336
3333 * IPython/ipmaker.py (make_IPython): default editor value set to
3337 * IPython/ipmaker.py (make_IPython): default editor value set to
3334 '0' (a string), to match the rc file. Otherwise will crash when
3338 '0' (a string), to match the rc file. Otherwise will crash when
3335 .strip() is called on it.
3339 .strip() is called on it.
3336
3340
3337
3341
3338 2002-06-28 Fernando Perez <fperez@colorado.edu>
3342 2002-06-28 Fernando Perez <fperez@colorado.edu>
3339
3343
3340 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3344 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3341 of files in current directory when a file is executed via
3345 of files in current directory when a file is executed via
3342 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3346 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3343
3347
3344 * setup.py (manfiles): fix for rpm builds, submitted by RA
3348 * setup.py (manfiles): fix for rpm builds, submitted by RA
3345 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3349 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3346
3350
3347 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3351 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3348 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3352 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3349 string!). A. Schmolck caught this one.
3353 string!). A. Schmolck caught this one.
3350
3354
3351 2002-06-27 Fernando Perez <fperez@colorado.edu>
3355 2002-06-27 Fernando Perez <fperez@colorado.edu>
3352
3356
3353 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3357 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3354 defined files at the cmd line. __name__ wasn't being set to
3358 defined files at the cmd line. __name__ wasn't being set to
3355 __main__.
3359 __main__.
3356
3360
3357 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3361 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3358 regular lists and tuples besides Numeric arrays.
3362 regular lists and tuples besides Numeric arrays.
3359
3363
3360 * IPython/Prompts.py (CachedOutput.__call__): Added output
3364 * IPython/Prompts.py (CachedOutput.__call__): Added output
3361 supression for input ending with ';'. Similar to Mathematica and
3365 supression for input ending with ';'. Similar to Mathematica and
3362 Matlab. The _* vars and Out[] list are still updated, just like
3366 Matlab. The _* vars and Out[] list are still updated, just like
3363 Mathematica behaves.
3367 Mathematica behaves.
3364
3368
3365 2002-06-25 Fernando Perez <fperez@colorado.edu>
3369 2002-06-25 Fernando Perez <fperez@colorado.edu>
3366
3370
3367 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3371 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3368 .ini extensions for profiels under Windows.
3372 .ini extensions for profiels under Windows.
3369
3373
3370 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3374 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3371 string form. Fix contributed by Alexander Schmolck
3375 string form. Fix contributed by Alexander Schmolck
3372 <a.schmolck-AT-gmx.net>
3376 <a.schmolck-AT-gmx.net>
3373
3377
3374 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3378 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3375 pre-configured Gnuplot instance.
3379 pre-configured Gnuplot instance.
3376
3380
3377 2002-06-21 Fernando Perez <fperez@colorado.edu>
3381 2002-06-21 Fernando Perez <fperez@colorado.edu>
3378
3382
3379 * IPython/numutils.py (exp_safe): new function, works around the
3383 * IPython/numutils.py (exp_safe): new function, works around the
3380 underflow problems in Numeric.
3384 underflow problems in Numeric.
3381 (log2): New fn. Safe log in base 2: returns exact integer answer
3385 (log2): New fn. Safe log in base 2: returns exact integer answer
3382 for exact integer powers of 2.
3386 for exact integer powers of 2.
3383
3387
3384 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3388 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3385 properly.
3389 properly.
3386
3390
3387 2002-06-20 Fernando Perez <fperez@colorado.edu>
3391 2002-06-20 Fernando Perez <fperez@colorado.edu>
3388
3392
3389 * IPython/genutils.py (timing): new function like
3393 * IPython/genutils.py (timing): new function like
3390 Mathematica's. Similar to time_test, but returns more info.
3394 Mathematica's. Similar to time_test, but returns more info.
3391
3395
3392 2002-06-18 Fernando Perez <fperez@colorado.edu>
3396 2002-06-18 Fernando Perez <fperez@colorado.edu>
3393
3397
3394 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3398 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3395 according to Mike Heeter's suggestions.
3399 according to Mike Heeter's suggestions.
3396
3400
3397 2002-06-16 Fernando Perez <fperez@colorado.edu>
3401 2002-06-16 Fernando Perez <fperez@colorado.edu>
3398
3402
3399 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3403 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3400 system. GnuplotMagic is gone as a user-directory option. New files
3404 system. GnuplotMagic is gone as a user-directory option. New files
3401 make it easier to use all the gnuplot stuff both from external
3405 make it easier to use all the gnuplot stuff both from external
3402 programs as well as from IPython. Had to rewrite part of
3406 programs as well as from IPython. Had to rewrite part of
3403 hardcopy() b/c of a strange bug: often the ps files simply don't
3407 hardcopy() b/c of a strange bug: often the ps files simply don't
3404 get created, and require a repeat of the command (often several
3408 get created, and require a repeat of the command (often several
3405 times).
3409 times).
3406
3410
3407 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3411 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3408 resolve output channel at call time, so that if sys.stderr has
3412 resolve output channel at call time, so that if sys.stderr has
3409 been redirected by user this gets honored.
3413 been redirected by user this gets honored.
3410
3414
3411 2002-06-13 Fernando Perez <fperez@colorado.edu>
3415 2002-06-13 Fernando Perez <fperez@colorado.edu>
3412
3416
3413 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3417 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3414 IPShell. Kept a copy with the old names to avoid breaking people's
3418 IPShell. Kept a copy with the old names to avoid breaking people's
3415 embedded code.
3419 embedded code.
3416
3420
3417 * IPython/ipython: simplified it to the bare minimum after
3421 * IPython/ipython: simplified it to the bare minimum after
3418 Holger's suggestions. Added info about how to use it in
3422 Holger's suggestions. Added info about how to use it in
3419 PYTHONSTARTUP.
3423 PYTHONSTARTUP.
3420
3424
3421 * IPython/Shell.py (IPythonShell): changed the options passing
3425 * IPython/Shell.py (IPythonShell): changed the options passing
3422 from a string with funky %s replacements to a straight list. Maybe
3426 from a string with funky %s replacements to a straight list. Maybe
3423 a bit more typing, but it follows sys.argv conventions, so there's
3427 a bit more typing, but it follows sys.argv conventions, so there's
3424 less special-casing to remember.
3428 less special-casing to remember.
3425
3429
3426 2002-06-12 Fernando Perez <fperez@colorado.edu>
3430 2002-06-12 Fernando Perez <fperez@colorado.edu>
3427
3431
3428 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3432 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3429 command. Thanks to a suggestion by Mike Heeter.
3433 command. Thanks to a suggestion by Mike Heeter.
3430 (Magic.magic_pfile): added behavior to look at filenames if given
3434 (Magic.magic_pfile): added behavior to look at filenames if given
3431 arg is not a defined object.
3435 arg is not a defined object.
3432 (Magic.magic_save): New @save function to save code snippets. Also
3436 (Magic.magic_save): New @save function to save code snippets. Also
3433 a Mike Heeter idea.
3437 a Mike Heeter idea.
3434
3438
3435 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3439 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3436 plot() and replot(). Much more convenient now, especially for
3440 plot() and replot(). Much more convenient now, especially for
3437 interactive use.
3441 interactive use.
3438
3442
3439 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3443 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3440 filenames.
3444 filenames.
3441
3445
3442 2002-06-02 Fernando Perez <fperez@colorado.edu>
3446 2002-06-02 Fernando Perez <fperez@colorado.edu>
3443
3447
3444 * IPython/Struct.py (Struct.__init__): modified to admit
3448 * IPython/Struct.py (Struct.__init__): modified to admit
3445 initialization via another struct.
3449 initialization via another struct.
3446
3450
3447 * IPython/genutils.py (SystemExec.__init__): New stateful
3451 * IPython/genutils.py (SystemExec.__init__): New stateful
3448 interface to xsys and bq. Useful for writing system scripts.
3452 interface to xsys and bq. Useful for writing system scripts.
3449
3453
3450 2002-05-30 Fernando Perez <fperez@colorado.edu>
3454 2002-05-30 Fernando Perez <fperez@colorado.edu>
3451
3455
3452 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3456 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3453 documents. This will make the user download smaller (it's getting
3457 documents. This will make the user download smaller (it's getting
3454 too big).
3458 too big).
3455
3459
3456 2002-05-29 Fernando Perez <fperez@colorado.edu>
3460 2002-05-29 Fernando Perez <fperez@colorado.edu>
3457
3461
3458 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3462 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3459 fix problems with shelve and pickle. Seems to work, but I don't
3463 fix problems with shelve and pickle. Seems to work, but I don't
3460 know if corner cases break it. Thanks to Mike Heeter
3464 know if corner cases break it. Thanks to Mike Heeter
3461 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3465 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3462
3466
3463 2002-05-24 Fernando Perez <fperez@colorado.edu>
3467 2002-05-24 Fernando Perez <fperez@colorado.edu>
3464
3468
3465 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3469 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3466 macros having broken.
3470 macros having broken.
3467
3471
3468 2002-05-21 Fernando Perez <fperez@colorado.edu>
3472 2002-05-21 Fernando Perez <fperez@colorado.edu>
3469
3473
3470 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3474 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3471 introduced logging bug: all history before logging started was
3475 introduced logging bug: all history before logging started was
3472 being written one character per line! This came from the redesign
3476 being written one character per line! This came from the redesign
3473 of the input history as a special list which slices to strings,
3477 of the input history as a special list which slices to strings,
3474 not to lists.
3478 not to lists.
3475
3479
3476 2002-05-20 Fernando Perez <fperez@colorado.edu>
3480 2002-05-20 Fernando Perez <fperez@colorado.edu>
3477
3481
3478 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3482 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3479 be an attribute of all classes in this module. The design of these
3483 be an attribute of all classes in this module. The design of these
3480 classes needs some serious overhauling.
3484 classes needs some serious overhauling.
3481
3485
3482 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3486 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3483 which was ignoring '_' in option names.
3487 which was ignoring '_' in option names.
3484
3488
3485 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3489 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3486 'Verbose_novars' to 'Context' and made it the new default. It's a
3490 'Verbose_novars' to 'Context' and made it the new default. It's a
3487 bit more readable and also safer than verbose.
3491 bit more readable and also safer than verbose.
3488
3492
3489 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3493 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3490 triple-quoted strings.
3494 triple-quoted strings.
3491
3495
3492 * IPython/OInspect.py (__all__): new module exposing the object
3496 * IPython/OInspect.py (__all__): new module exposing the object
3493 introspection facilities. Now the corresponding magics are dummy
3497 introspection facilities. Now the corresponding magics are dummy
3494 wrappers around this. Having this module will make it much easier
3498 wrappers around this. Having this module will make it much easier
3495 to put these functions into our modified pdb.
3499 to put these functions into our modified pdb.
3496 This new object inspector system uses the new colorizing module,
3500 This new object inspector system uses the new colorizing module,
3497 so source code and other things are nicely syntax highlighted.
3501 so source code and other things are nicely syntax highlighted.
3498
3502
3499 2002-05-18 Fernando Perez <fperez@colorado.edu>
3503 2002-05-18 Fernando Perez <fperez@colorado.edu>
3500
3504
3501 * IPython/ColorANSI.py: Split the coloring tools into a separate
3505 * IPython/ColorANSI.py: Split the coloring tools into a separate
3502 module so I can use them in other code easier (they were part of
3506 module so I can use them in other code easier (they were part of
3503 ultraTB).
3507 ultraTB).
3504
3508
3505 2002-05-17 Fernando Perez <fperez@colorado.edu>
3509 2002-05-17 Fernando Perez <fperez@colorado.edu>
3506
3510
3507 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3511 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3508 fixed it to set the global 'g' also to the called instance, as
3512 fixed it to set the global 'g' also to the called instance, as
3509 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3513 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3510 user's 'g' variables).
3514 user's 'g' variables).
3511
3515
3512 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3516 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3513 global variables (aliases to _ih,_oh) so that users which expect
3517 global variables (aliases to _ih,_oh) so that users which expect
3514 In[5] or Out[7] to work aren't unpleasantly surprised.
3518 In[5] or Out[7] to work aren't unpleasantly surprised.
3515 (InputList.__getslice__): new class to allow executing slices of
3519 (InputList.__getslice__): new class to allow executing slices of
3516 input history directly. Very simple class, complements the use of
3520 input history directly. Very simple class, complements the use of
3517 macros.
3521 macros.
3518
3522
3519 2002-05-16 Fernando Perez <fperez@colorado.edu>
3523 2002-05-16 Fernando Perez <fperez@colorado.edu>
3520
3524
3521 * setup.py (docdirbase): make doc directory be just doc/IPython
3525 * setup.py (docdirbase): make doc directory be just doc/IPython
3522 without version numbers, it will reduce clutter for users.
3526 without version numbers, it will reduce clutter for users.
3523
3527
3524 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3528 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3525 execfile call to prevent possible memory leak. See for details:
3529 execfile call to prevent possible memory leak. See for details:
3526 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3530 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3527
3531
3528 2002-05-15 Fernando Perez <fperez@colorado.edu>
3532 2002-05-15 Fernando Perez <fperez@colorado.edu>
3529
3533
3530 * IPython/Magic.py (Magic.magic_psource): made the object
3534 * IPython/Magic.py (Magic.magic_psource): made the object
3531 introspection names be more standard: pdoc, pdef, pfile and
3535 introspection names be more standard: pdoc, pdef, pfile and
3532 psource. They all print/page their output, and it makes
3536 psource. They all print/page their output, and it makes
3533 remembering them easier. Kept old names for compatibility as
3537 remembering them easier. Kept old names for compatibility as
3534 aliases.
3538 aliases.
3535
3539
3536 2002-05-14 Fernando Perez <fperez@colorado.edu>
3540 2002-05-14 Fernando Perez <fperez@colorado.edu>
3537
3541
3538 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3542 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3539 what the mouse problem was. The trick is to use gnuplot with temp
3543 what the mouse problem was. The trick is to use gnuplot with temp
3540 files and NOT with pipes (for data communication), because having
3544 files and NOT with pipes (for data communication), because having
3541 both pipes and the mouse on is bad news.
3545 both pipes and the mouse on is bad news.
3542
3546
3543 2002-05-13 Fernando Perez <fperez@colorado.edu>
3547 2002-05-13 Fernando Perez <fperez@colorado.edu>
3544
3548
3545 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3549 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3546 bug. Information would be reported about builtins even when
3550 bug. Information would be reported about builtins even when
3547 user-defined functions overrode them.
3551 user-defined functions overrode them.
3548
3552
3549 2002-05-11 Fernando Perez <fperez@colorado.edu>
3553 2002-05-11 Fernando Perez <fperez@colorado.edu>
3550
3554
3551 * IPython/__init__.py (__all__): removed FlexCompleter from
3555 * IPython/__init__.py (__all__): removed FlexCompleter from
3552 __all__ so that things don't fail in platforms without readline.
3556 __all__ so that things don't fail in platforms without readline.
3553
3557
3554 2002-05-10 Fernando Perez <fperez@colorado.edu>
3558 2002-05-10 Fernando Perez <fperez@colorado.edu>
3555
3559
3556 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3560 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3557 it requires Numeric, effectively making Numeric a dependency for
3561 it requires Numeric, effectively making Numeric a dependency for
3558 IPython.
3562 IPython.
3559
3563
3560 * Released 0.2.13
3564 * Released 0.2.13
3561
3565
3562 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3566 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3563 profiler interface. Now all the major options from the profiler
3567 profiler interface. Now all the major options from the profiler
3564 module are directly supported in IPython, both for single
3568 module are directly supported in IPython, both for single
3565 expressions (@prun) and for full programs (@run -p).
3569 expressions (@prun) and for full programs (@run -p).
3566
3570
3567 2002-05-09 Fernando Perez <fperez@colorado.edu>
3571 2002-05-09 Fernando Perez <fperez@colorado.edu>
3568
3572
3569 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3573 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3570 magic properly formatted for screen.
3574 magic properly formatted for screen.
3571
3575
3572 * setup.py (make_shortcut): Changed things to put pdf version in
3576 * setup.py (make_shortcut): Changed things to put pdf version in
3573 doc/ instead of doc/manual (had to change lyxport a bit).
3577 doc/ instead of doc/manual (had to change lyxport a bit).
3574
3578
3575 * IPython/Magic.py (Profile.string_stats): made profile runs go
3579 * IPython/Magic.py (Profile.string_stats): made profile runs go
3576 through pager (they are long and a pager allows searching, saving,
3580 through pager (they are long and a pager allows searching, saving,
3577 etc.)
3581 etc.)
3578
3582
3579 2002-05-08 Fernando Perez <fperez@colorado.edu>
3583 2002-05-08 Fernando Perez <fperez@colorado.edu>
3580
3584
3581 * Released 0.2.12
3585 * Released 0.2.12
3582
3586
3583 2002-05-06 Fernando Perez <fperez@colorado.edu>
3587 2002-05-06 Fernando Perez <fperez@colorado.edu>
3584
3588
3585 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3589 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3586 introduced); 'hist n1 n2' was broken.
3590 introduced); 'hist n1 n2' was broken.
3587 (Magic.magic_pdb): added optional on/off arguments to @pdb
3591 (Magic.magic_pdb): added optional on/off arguments to @pdb
3588 (Magic.magic_run): added option -i to @run, which executes code in
3592 (Magic.magic_run): added option -i to @run, which executes code in
3589 the IPython namespace instead of a clean one. Also added @irun as
3593 the IPython namespace instead of a clean one. Also added @irun as
3590 an alias to @run -i.
3594 an alias to @run -i.
3591
3595
3592 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3596 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3593 fixed (it didn't really do anything, the namespaces were wrong).
3597 fixed (it didn't really do anything, the namespaces were wrong).
3594
3598
3595 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3599 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3596
3600
3597 * IPython/__init__.py (__all__): Fixed package namespace, now
3601 * IPython/__init__.py (__all__): Fixed package namespace, now
3598 'import IPython' does give access to IPython.<all> as
3602 'import IPython' does give access to IPython.<all> as
3599 expected. Also renamed __release__ to Release.
3603 expected. Also renamed __release__ to Release.
3600
3604
3601 * IPython/Debugger.py (__license__): created new Pdb class which
3605 * IPython/Debugger.py (__license__): created new Pdb class which
3602 functions like a drop-in for the normal pdb.Pdb but does NOT
3606 functions like a drop-in for the normal pdb.Pdb but does NOT
3603 import readline by default. This way it doesn't muck up IPython's
3607 import readline by default. This way it doesn't muck up IPython's
3604 readline handling, and now tab-completion finally works in the
3608 readline handling, and now tab-completion finally works in the
3605 debugger -- sort of. It completes things globally visible, but the
3609 debugger -- sort of. It completes things globally visible, but the
3606 completer doesn't track the stack as pdb walks it. That's a bit
3610 completer doesn't track the stack as pdb walks it. That's a bit
3607 tricky, and I'll have to implement it later.
3611 tricky, and I'll have to implement it later.
3608
3612
3609 2002-05-05 Fernando Perez <fperez@colorado.edu>
3613 2002-05-05 Fernando Perez <fperez@colorado.edu>
3610
3614
3611 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3615 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3612 magic docstrings when printed via ? (explicit \'s were being
3616 magic docstrings when printed via ? (explicit \'s were being
3613 printed).
3617 printed).
3614
3618
3615 * IPython/ipmaker.py (make_IPython): fixed namespace
3619 * IPython/ipmaker.py (make_IPython): fixed namespace
3616 identification bug. Now variables loaded via logs or command-line
3620 identification bug. Now variables loaded via logs or command-line
3617 files are recognized in the interactive namespace by @who.
3621 files are recognized in the interactive namespace by @who.
3618
3622
3619 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3623 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3620 log replay system stemming from the string form of Structs.
3624 log replay system stemming from the string form of Structs.
3621
3625
3622 * IPython/Magic.py (Macro.__init__): improved macros to properly
3626 * IPython/Magic.py (Macro.__init__): improved macros to properly
3623 handle magic commands in them.
3627 handle magic commands in them.
3624 (Magic.magic_logstart): usernames are now expanded so 'logstart
3628 (Magic.magic_logstart): usernames are now expanded so 'logstart
3625 ~/mylog' now works.
3629 ~/mylog' now works.
3626
3630
3627 * IPython/iplib.py (complete): fixed bug where paths starting with
3631 * IPython/iplib.py (complete): fixed bug where paths starting with
3628 '/' would be completed as magic names.
3632 '/' would be completed as magic names.
3629
3633
3630 2002-05-04 Fernando Perez <fperez@colorado.edu>
3634 2002-05-04 Fernando Perez <fperez@colorado.edu>
3631
3635
3632 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3636 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3633 allow running full programs under the profiler's control.
3637 allow running full programs under the profiler's control.
3634
3638
3635 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3639 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3636 mode to report exceptions verbosely but without formatting
3640 mode to report exceptions verbosely but without formatting
3637 variables. This addresses the issue of ipython 'freezing' (it's
3641 variables. This addresses the issue of ipython 'freezing' (it's
3638 not frozen, but caught in an expensive formatting loop) when huge
3642 not frozen, but caught in an expensive formatting loop) when huge
3639 variables are in the context of an exception.
3643 variables are in the context of an exception.
3640 (VerboseTB.text): Added '--->' markers at line where exception was
3644 (VerboseTB.text): Added '--->' markers at line where exception was
3641 triggered. Much clearer to read, especially in NoColor modes.
3645 triggered. Much clearer to read, especially in NoColor modes.
3642
3646
3643 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3647 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3644 implemented in reverse when changing to the new parse_options().
3648 implemented in reverse when changing to the new parse_options().
3645
3649
3646 2002-05-03 Fernando Perez <fperez@colorado.edu>
3650 2002-05-03 Fernando Perez <fperez@colorado.edu>
3647
3651
3648 * IPython/Magic.py (Magic.parse_options): new function so that
3652 * IPython/Magic.py (Magic.parse_options): new function so that
3649 magics can parse options easier.
3653 magics can parse options easier.
3650 (Magic.magic_prun): new function similar to profile.run(),
3654 (Magic.magic_prun): new function similar to profile.run(),
3651 suggested by Chris Hart.
3655 suggested by Chris Hart.
3652 (Magic.magic_cd): fixed behavior so that it only changes if
3656 (Magic.magic_cd): fixed behavior so that it only changes if
3653 directory actually is in history.
3657 directory actually is in history.
3654
3658
3655 * IPython/usage.py (__doc__): added information about potential
3659 * IPython/usage.py (__doc__): added information about potential
3656 slowness of Verbose exception mode when there are huge data
3660 slowness of Verbose exception mode when there are huge data
3657 structures to be formatted (thanks to Archie Paulson).
3661 structures to be formatted (thanks to Archie Paulson).
3658
3662
3659 * IPython/ipmaker.py (make_IPython): Changed default logging
3663 * IPython/ipmaker.py (make_IPython): Changed default logging
3660 (when simply called with -log) to use curr_dir/ipython.log in
3664 (when simply called with -log) to use curr_dir/ipython.log in
3661 rotate mode. Fixed crash which was occuring with -log before
3665 rotate mode. Fixed crash which was occuring with -log before
3662 (thanks to Jim Boyle).
3666 (thanks to Jim Boyle).
3663
3667
3664 2002-05-01 Fernando Perez <fperez@colorado.edu>
3668 2002-05-01 Fernando Perez <fperez@colorado.edu>
3665
3669
3666 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3670 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3667 was nasty -- though somewhat of a corner case).
3671 was nasty -- though somewhat of a corner case).
3668
3672
3669 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3673 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3670 text (was a bug).
3674 text (was a bug).
3671
3675
3672 2002-04-30 Fernando Perez <fperez@colorado.edu>
3676 2002-04-30 Fernando Perez <fperez@colorado.edu>
3673
3677
3674 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3678 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3675 a print after ^D or ^C from the user so that the In[] prompt
3679 a print after ^D or ^C from the user so that the In[] prompt
3676 doesn't over-run the gnuplot one.
3680 doesn't over-run the gnuplot one.
3677
3681
3678 2002-04-29 Fernando Perez <fperez@colorado.edu>
3682 2002-04-29 Fernando Perez <fperez@colorado.edu>
3679
3683
3680 * Released 0.2.10
3684 * Released 0.2.10
3681
3685
3682 * IPython/__release__.py (version): get date dynamically.
3686 * IPython/__release__.py (version): get date dynamically.
3683
3687
3684 * Misc. documentation updates thanks to Arnd's comments. Also ran
3688 * Misc. documentation updates thanks to Arnd's comments. Also ran
3685 a full spellcheck on the manual (hadn't been done in a while).
3689 a full spellcheck on the manual (hadn't been done in a while).
3686
3690
3687 2002-04-27 Fernando Perez <fperez@colorado.edu>
3691 2002-04-27 Fernando Perez <fperez@colorado.edu>
3688
3692
3689 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3693 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3690 starting a log in mid-session would reset the input history list.
3694 starting a log in mid-session would reset the input history list.
3691
3695
3692 2002-04-26 Fernando Perez <fperez@colorado.edu>
3696 2002-04-26 Fernando Perez <fperez@colorado.edu>
3693
3697
3694 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3698 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3695 all files were being included in an update. Now anything in
3699 all files were being included in an update. Now anything in
3696 UserConfig that matches [A-Za-z]*.py will go (this excludes
3700 UserConfig that matches [A-Za-z]*.py will go (this excludes
3697 __init__.py)
3701 __init__.py)
3698
3702
3699 2002-04-25 Fernando Perez <fperez@colorado.edu>
3703 2002-04-25 Fernando Perez <fperez@colorado.edu>
3700
3704
3701 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3705 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3702 to __builtins__ so that any form of embedded or imported code can
3706 to __builtins__ so that any form of embedded or imported code can
3703 test for being inside IPython.
3707 test for being inside IPython.
3704
3708
3705 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3709 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3706 changed to GnuplotMagic because it's now an importable module,
3710 changed to GnuplotMagic because it's now an importable module,
3707 this makes the name follow that of the standard Gnuplot module.
3711 this makes the name follow that of the standard Gnuplot module.
3708 GnuplotMagic can now be loaded at any time in mid-session.
3712 GnuplotMagic can now be loaded at any time in mid-session.
3709
3713
3710 2002-04-24 Fernando Perez <fperez@colorado.edu>
3714 2002-04-24 Fernando Perez <fperez@colorado.edu>
3711
3715
3712 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3716 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3713 the globals (IPython has its own namespace) and the
3717 the globals (IPython has its own namespace) and the
3714 PhysicalQuantity stuff is much better anyway.
3718 PhysicalQuantity stuff is much better anyway.
3715
3719
3716 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3720 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3717 embedding example to standard user directory for
3721 embedding example to standard user directory for
3718 distribution. Also put it in the manual.
3722 distribution. Also put it in the manual.
3719
3723
3720 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3724 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3721 instance as first argument (so it doesn't rely on some obscure
3725 instance as first argument (so it doesn't rely on some obscure
3722 hidden global).
3726 hidden global).
3723
3727
3724 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3728 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3725 delimiters. While it prevents ().TAB from working, it allows
3729 delimiters. While it prevents ().TAB from working, it allows
3726 completions in open (... expressions. This is by far a more common
3730 completions in open (... expressions. This is by far a more common
3727 case.
3731 case.
3728
3732
3729 2002-04-23 Fernando Perez <fperez@colorado.edu>
3733 2002-04-23 Fernando Perez <fperez@colorado.edu>
3730
3734
3731 * IPython/Extensions/InterpreterPasteInput.py: new
3735 * IPython/Extensions/InterpreterPasteInput.py: new
3732 syntax-processing module for pasting lines with >>> or ... at the
3736 syntax-processing module for pasting lines with >>> or ... at the
3733 start.
3737 start.
3734
3738
3735 * IPython/Extensions/PhysicalQ_Interactive.py
3739 * IPython/Extensions/PhysicalQ_Interactive.py
3736 (PhysicalQuantityInteractive.__int__): fixed to work with either
3740 (PhysicalQuantityInteractive.__int__): fixed to work with either
3737 Numeric or math.
3741 Numeric or math.
3738
3742
3739 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3743 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3740 provided profiles. Now we have:
3744 provided profiles. Now we have:
3741 -math -> math module as * and cmath with its own namespace.
3745 -math -> math module as * and cmath with its own namespace.
3742 -numeric -> Numeric as *, plus gnuplot & grace
3746 -numeric -> Numeric as *, plus gnuplot & grace
3743 -physics -> same as before
3747 -physics -> same as before
3744
3748
3745 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3749 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3746 user-defined magics wouldn't be found by @magic if they were
3750 user-defined magics wouldn't be found by @magic if they were
3747 defined as class methods. Also cleaned up the namespace search
3751 defined as class methods. Also cleaned up the namespace search
3748 logic and the string building (to use %s instead of many repeated
3752 logic and the string building (to use %s instead of many repeated
3749 string adds).
3753 string adds).
3750
3754
3751 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3755 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3752 of user-defined magics to operate with class methods (cleaner, in
3756 of user-defined magics to operate with class methods (cleaner, in
3753 line with the gnuplot code).
3757 line with the gnuplot code).
3754
3758
3755 2002-04-22 Fernando Perez <fperez@colorado.edu>
3759 2002-04-22 Fernando Perez <fperez@colorado.edu>
3756
3760
3757 * setup.py: updated dependency list so that manual is updated when
3761 * setup.py: updated dependency list so that manual is updated when
3758 all included files change.
3762 all included files change.
3759
3763
3760 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3764 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3761 the delimiter removal option (the fix is ugly right now).
3765 the delimiter removal option (the fix is ugly right now).
3762
3766
3763 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3767 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3764 all of the math profile (quicker loading, no conflict between
3768 all of the math profile (quicker loading, no conflict between
3765 g-9.8 and g-gnuplot).
3769 g-9.8 and g-gnuplot).
3766
3770
3767 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3771 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3768 name of post-mortem files to IPython_crash_report.txt.
3772 name of post-mortem files to IPython_crash_report.txt.
3769
3773
3770 * Cleanup/update of the docs. Added all the new readline info and
3774 * Cleanup/update of the docs. Added all the new readline info and
3771 formatted all lists as 'real lists'.
3775 formatted all lists as 'real lists'.
3772
3776
3773 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3777 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3774 tab-completion options, since the full readline parse_and_bind is
3778 tab-completion options, since the full readline parse_and_bind is
3775 now accessible.
3779 now accessible.
3776
3780
3777 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3781 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3778 handling of readline options. Now users can specify any string to
3782 handling of readline options. Now users can specify any string to
3779 be passed to parse_and_bind(), as well as the delimiters to be
3783 be passed to parse_and_bind(), as well as the delimiters to be
3780 removed.
3784 removed.
3781 (InteractiveShell.__init__): Added __name__ to the global
3785 (InteractiveShell.__init__): Added __name__ to the global
3782 namespace so that things like Itpl which rely on its existence
3786 namespace so that things like Itpl which rely on its existence
3783 don't crash.
3787 don't crash.
3784 (InteractiveShell._prefilter): Defined the default with a _ so
3788 (InteractiveShell._prefilter): Defined the default with a _ so
3785 that prefilter() is easier to override, while the default one
3789 that prefilter() is easier to override, while the default one
3786 remains available.
3790 remains available.
3787
3791
3788 2002-04-18 Fernando Perez <fperez@colorado.edu>
3792 2002-04-18 Fernando Perez <fperez@colorado.edu>
3789
3793
3790 * Added information about pdb in the docs.
3794 * Added information about pdb in the docs.
3791
3795
3792 2002-04-17 Fernando Perez <fperez@colorado.edu>
3796 2002-04-17 Fernando Perez <fperez@colorado.edu>
3793
3797
3794 * IPython/ipmaker.py (make_IPython): added rc_override option to
3798 * IPython/ipmaker.py (make_IPython): added rc_override option to
3795 allow passing config options at creation time which may override
3799 allow passing config options at creation time which may override
3796 anything set in the config files or command line. This is
3800 anything set in the config files or command line. This is
3797 particularly useful for configuring embedded instances.
3801 particularly useful for configuring embedded instances.
3798
3802
3799 2002-04-15 Fernando Perez <fperez@colorado.edu>
3803 2002-04-15 Fernando Perez <fperez@colorado.edu>
3800
3804
3801 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3805 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3802 crash embedded instances because of the input cache falling out of
3806 crash embedded instances because of the input cache falling out of
3803 sync with the output counter.
3807 sync with the output counter.
3804
3808
3805 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3809 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3806 mode which calls pdb after an uncaught exception in IPython itself.
3810 mode which calls pdb after an uncaught exception in IPython itself.
3807
3811
3808 2002-04-14 Fernando Perez <fperez@colorado.edu>
3812 2002-04-14 Fernando Perez <fperez@colorado.edu>
3809
3813
3810 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3814 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3811 readline, fix it back after each call.
3815 readline, fix it back after each call.
3812
3816
3813 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3817 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3814 method to force all access via __call__(), which guarantees that
3818 method to force all access via __call__(), which guarantees that
3815 traceback references are properly deleted.
3819 traceback references are properly deleted.
3816
3820
3817 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3821 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3818 improve printing when pprint is in use.
3822 improve printing when pprint is in use.
3819
3823
3820 2002-04-13 Fernando Perez <fperez@colorado.edu>
3824 2002-04-13 Fernando Perez <fperez@colorado.edu>
3821
3825
3822 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3826 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3823 exceptions aren't caught anymore. If the user triggers one, he
3827 exceptions aren't caught anymore. If the user triggers one, he
3824 should know why he's doing it and it should go all the way up,
3828 should know why he's doing it and it should go all the way up,
3825 just like any other exception. So now @abort will fully kill the
3829 just like any other exception. So now @abort will fully kill the
3826 embedded interpreter and the embedding code (unless that happens
3830 embedded interpreter and the embedding code (unless that happens
3827 to catch SystemExit).
3831 to catch SystemExit).
3828
3832
3829 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3833 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3830 and a debugger() method to invoke the interactive pdb debugger
3834 and a debugger() method to invoke the interactive pdb debugger
3831 after printing exception information. Also added the corresponding
3835 after printing exception information. Also added the corresponding
3832 -pdb option and @pdb magic to control this feature, and updated
3836 -pdb option and @pdb magic to control this feature, and updated
3833 the docs. After a suggestion from Christopher Hart
3837 the docs. After a suggestion from Christopher Hart
3834 (hart-AT-caltech.edu).
3838 (hart-AT-caltech.edu).
3835
3839
3836 2002-04-12 Fernando Perez <fperez@colorado.edu>
3840 2002-04-12 Fernando Perez <fperez@colorado.edu>
3837
3841
3838 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3842 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3839 the exception handlers defined by the user (not the CrashHandler)
3843 the exception handlers defined by the user (not the CrashHandler)
3840 so that user exceptions don't trigger an ipython bug report.
3844 so that user exceptions don't trigger an ipython bug report.
3841
3845
3842 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3846 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3843 configurable (it should have always been so).
3847 configurable (it should have always been so).
3844
3848
3845 2002-03-26 Fernando Perez <fperez@colorado.edu>
3849 2002-03-26 Fernando Perez <fperez@colorado.edu>
3846
3850
3847 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3851 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3848 and there to fix embedding namespace issues. This should all be
3852 and there to fix embedding namespace issues. This should all be
3849 done in a more elegant way.
3853 done in a more elegant way.
3850
3854
3851 2002-03-25 Fernando Perez <fperez@colorado.edu>
3855 2002-03-25 Fernando Perez <fperez@colorado.edu>
3852
3856
3853 * IPython/genutils.py (get_home_dir): Try to make it work under
3857 * IPython/genutils.py (get_home_dir): Try to make it work under
3854 win9x also.
3858 win9x also.
3855
3859
3856 2002-03-20 Fernando Perez <fperez@colorado.edu>
3860 2002-03-20 Fernando Perez <fperez@colorado.edu>
3857
3861
3858 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3862 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3859 sys.displayhook untouched upon __init__.
3863 sys.displayhook untouched upon __init__.
3860
3864
3861 2002-03-19 Fernando Perez <fperez@colorado.edu>
3865 2002-03-19 Fernando Perez <fperez@colorado.edu>
3862
3866
3863 * Released 0.2.9 (for embedding bug, basically).
3867 * Released 0.2.9 (for embedding bug, basically).
3864
3868
3865 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3869 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3866 exceptions so that enclosing shell's state can be restored.
3870 exceptions so that enclosing shell's state can be restored.
3867
3871
3868 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3872 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3869 naming conventions in the .ipython/ dir.
3873 naming conventions in the .ipython/ dir.
3870
3874
3871 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3875 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3872 from delimiters list so filenames with - in them get expanded.
3876 from delimiters list so filenames with - in them get expanded.
3873
3877
3874 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3878 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3875 sys.displayhook not being properly restored after an embedded call.
3879 sys.displayhook not being properly restored after an embedded call.
3876
3880
3877 2002-03-18 Fernando Perez <fperez@colorado.edu>
3881 2002-03-18 Fernando Perez <fperez@colorado.edu>
3878
3882
3879 * Released 0.2.8
3883 * Released 0.2.8
3880
3884
3881 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3885 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3882 some files weren't being included in a -upgrade.
3886 some files weren't being included in a -upgrade.
3883 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3887 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3884 on' so that the first tab completes.
3888 on' so that the first tab completes.
3885 (InteractiveShell.handle_magic): fixed bug with spaces around
3889 (InteractiveShell.handle_magic): fixed bug with spaces around
3886 quotes breaking many magic commands.
3890 quotes breaking many magic commands.
3887
3891
3888 * setup.py: added note about ignoring the syntax error messages at
3892 * setup.py: added note about ignoring the syntax error messages at
3889 installation.
3893 installation.
3890
3894
3891 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3895 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3892 streamlining the gnuplot interface, now there's only one magic @gp.
3896 streamlining the gnuplot interface, now there's only one magic @gp.
3893
3897
3894 2002-03-17 Fernando Perez <fperez@colorado.edu>
3898 2002-03-17 Fernando Perez <fperez@colorado.edu>
3895
3899
3896 * IPython/UserConfig/magic_gnuplot.py: new name for the
3900 * IPython/UserConfig/magic_gnuplot.py: new name for the
3897 example-magic_pm.py file. Much enhanced system, now with a shell
3901 example-magic_pm.py file. Much enhanced system, now with a shell
3898 for communicating directly with gnuplot, one command at a time.
3902 for communicating directly with gnuplot, one command at a time.
3899
3903
3900 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3904 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3901 setting __name__=='__main__'.
3905 setting __name__=='__main__'.
3902
3906
3903 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3907 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3904 mini-shell for accessing gnuplot from inside ipython. Should
3908 mini-shell for accessing gnuplot from inside ipython. Should
3905 extend it later for grace access too. Inspired by Arnd's
3909 extend it later for grace access too. Inspired by Arnd's
3906 suggestion.
3910 suggestion.
3907
3911
3908 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3912 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3909 calling magic functions with () in their arguments. Thanks to Arnd
3913 calling magic functions with () in their arguments. Thanks to Arnd
3910 Baecker for pointing this to me.
3914 Baecker for pointing this to me.
3911
3915
3912 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3916 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3913 infinitely for integer or complex arrays (only worked with floats).
3917 infinitely for integer or complex arrays (only worked with floats).
3914
3918
3915 2002-03-16 Fernando Perez <fperez@colorado.edu>
3919 2002-03-16 Fernando Perez <fperez@colorado.edu>
3916
3920
3917 * setup.py: Merged setup and setup_windows into a single script
3921 * setup.py: Merged setup and setup_windows into a single script
3918 which properly handles things for windows users.
3922 which properly handles things for windows users.
3919
3923
3920 2002-03-15 Fernando Perez <fperez@colorado.edu>
3924 2002-03-15 Fernando Perez <fperez@colorado.edu>
3921
3925
3922 * Big change to the manual: now the magics are all automatically
3926 * Big change to the manual: now the magics are all automatically
3923 documented. This information is generated from their docstrings
3927 documented. This information is generated from their docstrings
3924 and put in a latex file included by the manual lyx file. This way
3928 and put in a latex file included by the manual lyx file. This way
3925 we get always up to date information for the magics. The manual
3929 we get always up to date information for the magics. The manual
3926 now also has proper version information, also auto-synced.
3930 now also has proper version information, also auto-synced.
3927
3931
3928 For this to work, an undocumented --magic_docstrings option was added.
3932 For this to work, an undocumented --magic_docstrings option was added.
3929
3933
3930 2002-03-13 Fernando Perez <fperez@colorado.edu>
3934 2002-03-13 Fernando Perez <fperez@colorado.edu>
3931
3935
3932 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3936 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3933 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3937 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3934
3938
3935 2002-03-12 Fernando Perez <fperez@colorado.edu>
3939 2002-03-12 Fernando Perez <fperez@colorado.edu>
3936
3940
3937 * IPython/ultraTB.py (TermColors): changed color escapes again to
3941 * IPython/ultraTB.py (TermColors): changed color escapes again to
3938 fix the (old, reintroduced) line-wrapping bug. Basically, if
3942 fix the (old, reintroduced) line-wrapping bug. Basically, if
3939 \001..\002 aren't given in the color escapes, lines get wrapped
3943 \001..\002 aren't given in the color escapes, lines get wrapped
3940 weirdly. But giving those screws up old xterms and emacs terms. So
3944 weirdly. But giving those screws up old xterms and emacs terms. So
3941 I added some logic for emacs terms to be ok, but I can't identify old
3945 I added some logic for emacs terms to be ok, but I can't identify old
3942 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3946 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3943
3947
3944 2002-03-10 Fernando Perez <fperez@colorado.edu>
3948 2002-03-10 Fernando Perez <fperez@colorado.edu>
3945
3949
3946 * IPython/usage.py (__doc__): Various documentation cleanups and
3950 * IPython/usage.py (__doc__): Various documentation cleanups and
3947 updates, both in usage docstrings and in the manual.
3951 updates, both in usage docstrings and in the manual.
3948
3952
3949 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3953 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3950 handling of caching. Set minimum acceptabe value for having a
3954 handling of caching. Set minimum acceptabe value for having a
3951 cache at 20 values.
3955 cache at 20 values.
3952
3956
3953 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3957 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3954 install_first_time function to a method, renamed it and added an
3958 install_first_time function to a method, renamed it and added an
3955 'upgrade' mode. Now people can update their config directory with
3959 'upgrade' mode. Now people can update their config directory with
3956 a simple command line switch (-upgrade, also new).
3960 a simple command line switch (-upgrade, also new).
3957
3961
3958 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3962 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3959 @file (convenient for automagic users under Python >= 2.2).
3963 @file (convenient for automagic users under Python >= 2.2).
3960 Removed @files (it seemed more like a plural than an abbrev. of
3964 Removed @files (it seemed more like a plural than an abbrev. of
3961 'file show').
3965 'file show').
3962
3966
3963 * IPython/iplib.py (install_first_time): Fixed crash if there were
3967 * IPython/iplib.py (install_first_time): Fixed crash if there were
3964 backup files ('~') in .ipython/ install directory.
3968 backup files ('~') in .ipython/ install directory.
3965
3969
3966 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3970 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3967 system. Things look fine, but these changes are fairly
3971 system. Things look fine, but these changes are fairly
3968 intrusive. Test them for a few days.
3972 intrusive. Test them for a few days.
3969
3973
3970 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3974 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3971 the prompts system. Now all in/out prompt strings are user
3975 the prompts system. Now all in/out prompt strings are user
3972 controllable. This is particularly useful for embedding, as one
3976 controllable. This is particularly useful for embedding, as one
3973 can tag embedded instances with particular prompts.
3977 can tag embedded instances with particular prompts.
3974
3978
3975 Also removed global use of sys.ps1/2, which now allows nested
3979 Also removed global use of sys.ps1/2, which now allows nested
3976 embeddings without any problems. Added command-line options for
3980 embeddings without any problems. Added command-line options for
3977 the prompt strings.
3981 the prompt strings.
3978
3982
3979 2002-03-08 Fernando Perez <fperez@colorado.edu>
3983 2002-03-08 Fernando Perez <fperez@colorado.edu>
3980
3984
3981 * IPython/UserConfig/example-embed-short.py (ipshell): added
3985 * IPython/UserConfig/example-embed-short.py (ipshell): added
3982 example file with the bare minimum code for embedding.
3986 example file with the bare minimum code for embedding.
3983
3987
3984 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3988 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3985 functionality for the embeddable shell to be activated/deactivated
3989 functionality for the embeddable shell to be activated/deactivated
3986 either globally or at each call.
3990 either globally or at each call.
3987
3991
3988 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3992 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3989 rewriting the prompt with '--->' for auto-inputs with proper
3993 rewriting the prompt with '--->' for auto-inputs with proper
3990 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3994 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3991 this is handled by the prompts class itself, as it should.
3995 this is handled by the prompts class itself, as it should.
3992
3996
3993 2002-03-05 Fernando Perez <fperez@colorado.edu>
3997 2002-03-05 Fernando Perez <fperez@colorado.edu>
3994
3998
3995 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3999 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3996 @logstart to avoid name clashes with the math log function.
4000 @logstart to avoid name clashes with the math log function.
3997
4001
3998 * Big updates to X/Emacs section of the manual.
4002 * Big updates to X/Emacs section of the manual.
3999
4003
4000 * Removed ipython_emacs. Milan explained to me how to pass
4004 * Removed ipython_emacs. Milan explained to me how to pass
4001 arguments to ipython through Emacs. Some day I'm going to end up
4005 arguments to ipython through Emacs. Some day I'm going to end up
4002 learning some lisp...
4006 learning some lisp...
4003
4007
4004 2002-03-04 Fernando Perez <fperez@colorado.edu>
4008 2002-03-04 Fernando Perez <fperez@colorado.edu>
4005
4009
4006 * IPython/ipython_emacs: Created script to be used as the
4010 * IPython/ipython_emacs: Created script to be used as the
4007 py-python-command Emacs variable so we can pass IPython
4011 py-python-command Emacs variable so we can pass IPython
4008 parameters. I can't figure out how to tell Emacs directly to pass
4012 parameters. I can't figure out how to tell Emacs directly to pass
4009 parameters to IPython, so a dummy shell script will do it.
4013 parameters to IPython, so a dummy shell script will do it.
4010
4014
4011 Other enhancements made for things to work better under Emacs'
4015 Other enhancements made for things to work better under Emacs'
4012 various types of terminals. Many thanks to Milan Zamazal
4016 various types of terminals. Many thanks to Milan Zamazal
4013 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4017 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4014
4018
4015 2002-03-01 Fernando Perez <fperez@colorado.edu>
4019 2002-03-01 Fernando Perez <fperez@colorado.edu>
4016
4020
4017 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4021 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4018 that loading of readline is now optional. This gives better
4022 that loading of readline is now optional. This gives better
4019 control to emacs users.
4023 control to emacs users.
4020
4024
4021 * IPython/ultraTB.py (__date__): Modified color escape sequences
4025 * IPython/ultraTB.py (__date__): Modified color escape sequences
4022 and now things work fine under xterm and in Emacs' term buffers
4026 and now things work fine under xterm and in Emacs' term buffers
4023 (though not shell ones). Well, in emacs you get colors, but all
4027 (though not shell ones). Well, in emacs you get colors, but all
4024 seem to be 'light' colors (no difference between dark and light
4028 seem to be 'light' colors (no difference between dark and light
4025 ones). But the garbage chars are gone, and also in xterms. It
4029 ones). But the garbage chars are gone, and also in xterms. It
4026 seems that now I'm using 'cleaner' ansi sequences.
4030 seems that now I'm using 'cleaner' ansi sequences.
4027
4031
4028 2002-02-21 Fernando Perez <fperez@colorado.edu>
4032 2002-02-21 Fernando Perez <fperez@colorado.edu>
4029
4033
4030 * Released 0.2.7 (mainly to publish the scoping fix).
4034 * Released 0.2.7 (mainly to publish the scoping fix).
4031
4035
4032 * IPython/Logger.py (Logger.logstate): added. A corresponding
4036 * IPython/Logger.py (Logger.logstate): added. A corresponding
4033 @logstate magic was created.
4037 @logstate magic was created.
4034
4038
4035 * IPython/Magic.py: fixed nested scoping problem under Python
4039 * IPython/Magic.py: fixed nested scoping problem under Python
4036 2.1.x (automagic wasn't working).
4040 2.1.x (automagic wasn't working).
4037
4041
4038 2002-02-20 Fernando Perez <fperez@colorado.edu>
4042 2002-02-20 Fernando Perez <fperez@colorado.edu>
4039
4043
4040 * Released 0.2.6.
4044 * Released 0.2.6.
4041
4045
4042 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4046 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4043 option so that logs can come out without any headers at all.
4047 option so that logs can come out without any headers at all.
4044
4048
4045 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4049 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4046 SciPy.
4050 SciPy.
4047
4051
4048 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4052 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4049 that embedded IPython calls don't require vars() to be explicitly
4053 that embedded IPython calls don't require vars() to be explicitly
4050 passed. Now they are extracted from the caller's frame (code
4054 passed. Now they are extracted from the caller's frame (code
4051 snatched from Eric Jones' weave). Added better documentation to
4055 snatched from Eric Jones' weave). Added better documentation to
4052 the section on embedding and the example file.
4056 the section on embedding and the example file.
4053
4057
4054 * IPython/genutils.py (page): Changed so that under emacs, it just
4058 * IPython/genutils.py (page): Changed so that under emacs, it just
4055 prints the string. You can then page up and down in the emacs
4059 prints the string. You can then page up and down in the emacs
4056 buffer itself. This is how the builtin help() works.
4060 buffer itself. This is how the builtin help() works.
4057
4061
4058 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4062 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4059 macro scoping: macros need to be executed in the user's namespace
4063 macro scoping: macros need to be executed in the user's namespace
4060 to work as if they had been typed by the user.
4064 to work as if they had been typed by the user.
4061
4065
4062 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4066 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4063 execute automatically (no need to type 'exec...'). They then
4067 execute automatically (no need to type 'exec...'). They then
4064 behave like 'true macros'. The printing system was also modified
4068 behave like 'true macros'. The printing system was also modified
4065 for this to work.
4069 for this to work.
4066
4070
4067 2002-02-19 Fernando Perez <fperez@colorado.edu>
4071 2002-02-19 Fernando Perez <fperez@colorado.edu>
4068
4072
4069 * IPython/genutils.py (page_file): new function for paging files
4073 * IPython/genutils.py (page_file): new function for paging files
4070 in an OS-independent way. Also necessary for file viewing to work
4074 in an OS-independent way. Also necessary for file viewing to work
4071 well inside Emacs buffers.
4075 well inside Emacs buffers.
4072 (page): Added checks for being in an emacs buffer.
4076 (page): Added checks for being in an emacs buffer.
4073 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4077 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4074 same bug in iplib.
4078 same bug in iplib.
4075
4079
4076 2002-02-18 Fernando Perez <fperez@colorado.edu>
4080 2002-02-18 Fernando Perez <fperez@colorado.edu>
4077
4081
4078 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4082 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4079 of readline so that IPython can work inside an Emacs buffer.
4083 of readline so that IPython can work inside an Emacs buffer.
4080
4084
4081 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4085 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4082 method signatures (they weren't really bugs, but it looks cleaner
4086 method signatures (they weren't really bugs, but it looks cleaner
4083 and keeps PyChecker happy).
4087 and keeps PyChecker happy).
4084
4088
4085 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4089 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4086 for implementing various user-defined hooks. Currently only
4090 for implementing various user-defined hooks. Currently only
4087 display is done.
4091 display is done.
4088
4092
4089 * IPython/Prompts.py (CachedOutput._display): changed display
4093 * IPython/Prompts.py (CachedOutput._display): changed display
4090 functions so that they can be dynamically changed by users easily.
4094 functions so that they can be dynamically changed by users easily.
4091
4095
4092 * IPython/Extensions/numeric_formats.py (num_display): added an
4096 * IPython/Extensions/numeric_formats.py (num_display): added an
4093 extension for printing NumPy arrays in flexible manners. It
4097 extension for printing NumPy arrays in flexible manners. It
4094 doesn't do anything yet, but all the structure is in
4098 doesn't do anything yet, but all the structure is in
4095 place. Ultimately the plan is to implement output format control
4099 place. Ultimately the plan is to implement output format control
4096 like in Octave.
4100 like in Octave.
4097
4101
4098 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4102 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4099 methods are found at run-time by all the automatic machinery.
4103 methods are found at run-time by all the automatic machinery.
4100
4104
4101 2002-02-17 Fernando Perez <fperez@colorado.edu>
4105 2002-02-17 Fernando Perez <fperez@colorado.edu>
4102
4106
4103 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4107 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4104 whole file a little.
4108 whole file a little.
4105
4109
4106 * ToDo: closed this document. Now there's a new_design.lyx
4110 * ToDo: closed this document. Now there's a new_design.lyx
4107 document for all new ideas. Added making a pdf of it for the
4111 document for all new ideas. Added making a pdf of it for the
4108 end-user distro.
4112 end-user distro.
4109
4113
4110 * IPython/Logger.py (Logger.switch_log): Created this to replace
4114 * IPython/Logger.py (Logger.switch_log): Created this to replace
4111 logon() and logoff(). It also fixes a nasty crash reported by
4115 logon() and logoff(). It also fixes a nasty crash reported by
4112 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4116 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4113
4117
4114 * IPython/iplib.py (complete): got auto-completion to work with
4118 * IPython/iplib.py (complete): got auto-completion to work with
4115 automagic (I had wanted this for a long time).
4119 automagic (I had wanted this for a long time).
4116
4120
4117 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4121 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4118 to @file, since file() is now a builtin and clashes with automagic
4122 to @file, since file() is now a builtin and clashes with automagic
4119 for @file.
4123 for @file.
4120
4124
4121 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4125 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4122 of this was previously in iplib, which had grown to more than 2000
4126 of this was previously in iplib, which had grown to more than 2000
4123 lines, way too long. No new functionality, but it makes managing
4127 lines, way too long. No new functionality, but it makes managing
4124 the code a bit easier.
4128 the code a bit easier.
4125
4129
4126 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4130 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4127 information to crash reports.
4131 information to crash reports.
4128
4132
4129 2002-02-12 Fernando Perez <fperez@colorado.edu>
4133 2002-02-12 Fernando Perez <fperez@colorado.edu>
4130
4134
4131 * Released 0.2.5.
4135 * Released 0.2.5.
4132
4136
4133 2002-02-11 Fernando Perez <fperez@colorado.edu>
4137 2002-02-11 Fernando Perez <fperez@colorado.edu>
4134
4138
4135 * Wrote a relatively complete Windows installer. It puts
4139 * Wrote a relatively complete Windows installer. It puts
4136 everything in place, creates Start Menu entries and fixes the
4140 everything in place, creates Start Menu entries and fixes the
4137 color issues. Nothing fancy, but it works.
4141 color issues. Nothing fancy, but it works.
4138
4142
4139 2002-02-10 Fernando Perez <fperez@colorado.edu>
4143 2002-02-10 Fernando Perez <fperez@colorado.edu>
4140
4144
4141 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4145 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4142 os.path.expanduser() call so that we can type @run ~/myfile.py and
4146 os.path.expanduser() call so that we can type @run ~/myfile.py and
4143 have thigs work as expected.
4147 have thigs work as expected.
4144
4148
4145 * IPython/genutils.py (page): fixed exception handling so things
4149 * IPython/genutils.py (page): fixed exception handling so things
4146 work both in Unix and Windows correctly. Quitting a pager triggers
4150 work both in Unix and Windows correctly. Quitting a pager triggers
4147 an IOError/broken pipe in Unix, and in windows not finding a pager
4151 an IOError/broken pipe in Unix, and in windows not finding a pager
4148 is also an IOError, so I had to actually look at the return value
4152 is also an IOError, so I had to actually look at the return value
4149 of the exception, not just the exception itself. Should be ok now.
4153 of the exception, not just the exception itself. Should be ok now.
4150
4154
4151 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4155 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4152 modified to allow case-insensitive color scheme changes.
4156 modified to allow case-insensitive color scheme changes.
4153
4157
4154 2002-02-09 Fernando Perez <fperez@colorado.edu>
4158 2002-02-09 Fernando Perez <fperez@colorado.edu>
4155
4159
4156 * IPython/genutils.py (native_line_ends): new function to leave
4160 * IPython/genutils.py (native_line_ends): new function to leave
4157 user config files with os-native line-endings.
4161 user config files with os-native line-endings.
4158
4162
4159 * README and manual updates.
4163 * README and manual updates.
4160
4164
4161 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4165 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4162 instead of StringType to catch Unicode strings.
4166 instead of StringType to catch Unicode strings.
4163
4167
4164 * IPython/genutils.py (filefind): fixed bug for paths with
4168 * IPython/genutils.py (filefind): fixed bug for paths with
4165 embedded spaces (very common in Windows).
4169 embedded spaces (very common in Windows).
4166
4170
4167 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4171 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4168 files under Windows, so that they get automatically associated
4172 files under Windows, so that they get automatically associated
4169 with a text editor. Windows makes it a pain to handle
4173 with a text editor. Windows makes it a pain to handle
4170 extension-less files.
4174 extension-less files.
4171
4175
4172 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4176 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4173 warning about readline only occur for Posix. In Windows there's no
4177 warning about readline only occur for Posix. In Windows there's no
4174 way to get readline, so why bother with the warning.
4178 way to get readline, so why bother with the warning.
4175
4179
4176 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4180 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4177 for __str__ instead of dir(self), since dir() changed in 2.2.
4181 for __str__ instead of dir(self), since dir() changed in 2.2.
4178
4182
4179 * Ported to Windows! Tested on XP, I suspect it should work fine
4183 * Ported to Windows! Tested on XP, I suspect it should work fine
4180 on NT/2000, but I don't think it will work on 98 et al. That
4184 on NT/2000, but I don't think it will work on 98 et al. That
4181 series of Windows is such a piece of junk anyway that I won't try
4185 series of Windows is such a piece of junk anyway that I won't try
4182 porting it there. The XP port was straightforward, showed a few
4186 porting it there. The XP port was straightforward, showed a few
4183 bugs here and there (fixed all), in particular some string
4187 bugs here and there (fixed all), in particular some string
4184 handling stuff which required considering Unicode strings (which
4188 handling stuff which required considering Unicode strings (which
4185 Windows uses). This is good, but hasn't been too tested :) No
4189 Windows uses). This is good, but hasn't been too tested :) No
4186 fancy installer yet, I'll put a note in the manual so people at
4190 fancy installer yet, I'll put a note in the manual so people at
4187 least make manually a shortcut.
4191 least make manually a shortcut.
4188
4192
4189 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4193 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4190 into a single one, "colors". This now controls both prompt and
4194 into a single one, "colors". This now controls both prompt and
4191 exception color schemes, and can be changed both at startup
4195 exception color schemes, and can be changed both at startup
4192 (either via command-line switches or via ipythonrc files) and at
4196 (either via command-line switches or via ipythonrc files) and at
4193 runtime, with @colors.
4197 runtime, with @colors.
4194 (Magic.magic_run): renamed @prun to @run and removed the old
4198 (Magic.magic_run): renamed @prun to @run and removed the old
4195 @run. The two were too similar to warrant keeping both.
4199 @run. The two were too similar to warrant keeping both.
4196
4200
4197 2002-02-03 Fernando Perez <fperez@colorado.edu>
4201 2002-02-03 Fernando Perez <fperez@colorado.edu>
4198
4202
4199 * IPython/iplib.py (install_first_time): Added comment on how to
4203 * IPython/iplib.py (install_first_time): Added comment on how to
4200 configure the color options for first-time users. Put a <return>
4204 configure the color options for first-time users. Put a <return>
4201 request at the end so that small-terminal users get a chance to
4205 request at the end so that small-terminal users get a chance to
4202 read the startup info.
4206 read the startup info.
4203
4207
4204 2002-01-23 Fernando Perez <fperez@colorado.edu>
4208 2002-01-23 Fernando Perez <fperez@colorado.edu>
4205
4209
4206 * IPython/iplib.py (CachedOutput.update): Changed output memory
4210 * IPython/iplib.py (CachedOutput.update): Changed output memory
4207 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4211 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4208 input history we still use _i. Did this b/c these variable are
4212 input history we still use _i. Did this b/c these variable are
4209 very commonly used in interactive work, so the less we need to
4213 very commonly used in interactive work, so the less we need to
4210 type the better off we are.
4214 type the better off we are.
4211 (Magic.magic_prun): updated @prun to better handle the namespaces
4215 (Magic.magic_prun): updated @prun to better handle the namespaces
4212 the file will run in, including a fix for __name__ not being set
4216 the file will run in, including a fix for __name__ not being set
4213 before.
4217 before.
4214
4218
4215 2002-01-20 Fernando Perez <fperez@colorado.edu>
4219 2002-01-20 Fernando Perez <fperez@colorado.edu>
4216
4220
4217 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4221 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4218 extra garbage for Python 2.2. Need to look more carefully into
4222 extra garbage for Python 2.2. Need to look more carefully into
4219 this later.
4223 this later.
4220
4224
4221 2002-01-19 Fernando Perez <fperez@colorado.edu>
4225 2002-01-19 Fernando Perez <fperez@colorado.edu>
4222
4226
4223 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4227 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4224 display SyntaxError exceptions properly formatted when they occur
4228 display SyntaxError exceptions properly formatted when they occur
4225 (they can be triggered by imported code).
4229 (they can be triggered by imported code).
4226
4230
4227 2002-01-18 Fernando Perez <fperez@colorado.edu>
4231 2002-01-18 Fernando Perez <fperez@colorado.edu>
4228
4232
4229 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4233 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4230 SyntaxError exceptions are reported nicely formatted, instead of
4234 SyntaxError exceptions are reported nicely formatted, instead of
4231 spitting out only offset information as before.
4235 spitting out only offset information as before.
4232 (Magic.magic_prun): Added the @prun function for executing
4236 (Magic.magic_prun): Added the @prun function for executing
4233 programs with command line args inside IPython.
4237 programs with command line args inside IPython.
4234
4238
4235 2002-01-16 Fernando Perez <fperez@colorado.edu>
4239 2002-01-16 Fernando Perez <fperez@colorado.edu>
4236
4240
4237 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4241 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4238 to *not* include the last item given in a range. This brings their
4242 to *not* include the last item given in a range. This brings their
4239 behavior in line with Python's slicing:
4243 behavior in line with Python's slicing:
4240 a[n1:n2] -> a[n1]...a[n2-1]
4244 a[n1:n2] -> a[n1]...a[n2-1]
4241 It may be a bit less convenient, but I prefer to stick to Python's
4245 It may be a bit less convenient, but I prefer to stick to Python's
4242 conventions *everywhere*, so users never have to wonder.
4246 conventions *everywhere*, so users never have to wonder.
4243 (Magic.magic_macro): Added @macro function to ease the creation of
4247 (Magic.magic_macro): Added @macro function to ease the creation of
4244 macros.
4248 macros.
4245
4249
4246 2002-01-05 Fernando Perez <fperez@colorado.edu>
4250 2002-01-05 Fernando Perez <fperez@colorado.edu>
4247
4251
4248 * Released 0.2.4.
4252 * Released 0.2.4.
4249
4253
4250 * IPython/iplib.py (Magic.magic_pdef):
4254 * IPython/iplib.py (Magic.magic_pdef):
4251 (InteractiveShell.safe_execfile): report magic lines and error
4255 (InteractiveShell.safe_execfile): report magic lines and error
4252 lines without line numbers so one can easily copy/paste them for
4256 lines without line numbers so one can easily copy/paste them for
4253 re-execution.
4257 re-execution.
4254
4258
4255 * Updated manual with recent changes.
4259 * Updated manual with recent changes.
4256
4260
4257 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4261 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4258 docstring printing when class? is called. Very handy for knowing
4262 docstring printing when class? is called. Very handy for knowing
4259 how to create class instances (as long as __init__ is well
4263 how to create class instances (as long as __init__ is well
4260 documented, of course :)
4264 documented, of course :)
4261 (Magic.magic_doc): print both class and constructor docstrings.
4265 (Magic.magic_doc): print both class and constructor docstrings.
4262 (Magic.magic_pdef): give constructor info if passed a class and
4266 (Magic.magic_pdef): give constructor info if passed a class and
4263 __call__ info for callable object instances.
4267 __call__ info for callable object instances.
4264
4268
4265 2002-01-04 Fernando Perez <fperez@colorado.edu>
4269 2002-01-04 Fernando Perez <fperez@colorado.edu>
4266
4270
4267 * Made deep_reload() off by default. It doesn't always work
4271 * Made deep_reload() off by default. It doesn't always work
4268 exactly as intended, so it's probably safer to have it off. It's
4272 exactly as intended, so it's probably safer to have it off. It's
4269 still available as dreload() anyway, so nothing is lost.
4273 still available as dreload() anyway, so nothing is lost.
4270
4274
4271 2002-01-02 Fernando Perez <fperez@colorado.edu>
4275 2002-01-02 Fernando Perez <fperez@colorado.edu>
4272
4276
4273 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4277 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4274 so I wanted an updated release).
4278 so I wanted an updated release).
4275
4279
4276 2001-12-27 Fernando Perez <fperez@colorado.edu>
4280 2001-12-27 Fernando Perez <fperez@colorado.edu>
4277
4281
4278 * IPython/iplib.py (InteractiveShell.interact): Added the original
4282 * IPython/iplib.py (InteractiveShell.interact): Added the original
4279 code from 'code.py' for this module in order to change the
4283 code from 'code.py' for this module in order to change the
4280 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4284 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4281 the history cache would break when the user hit Ctrl-C, and
4285 the history cache would break when the user hit Ctrl-C, and
4282 interact() offers no way to add any hooks to it.
4286 interact() offers no way to add any hooks to it.
4283
4287
4284 2001-12-23 Fernando Perez <fperez@colorado.edu>
4288 2001-12-23 Fernando Perez <fperez@colorado.edu>
4285
4289
4286 * setup.py: added check for 'MANIFEST' before trying to remove
4290 * setup.py: added check for 'MANIFEST' before trying to remove
4287 it. Thanks to Sean Reifschneider.
4291 it. Thanks to Sean Reifschneider.
4288
4292
4289 2001-12-22 Fernando Perez <fperez@colorado.edu>
4293 2001-12-22 Fernando Perez <fperez@colorado.edu>
4290
4294
4291 * Released 0.2.2.
4295 * Released 0.2.2.
4292
4296
4293 * Finished (reasonably) writing the manual. Later will add the
4297 * Finished (reasonably) writing the manual. Later will add the
4294 python-standard navigation stylesheets, but for the time being
4298 python-standard navigation stylesheets, but for the time being
4295 it's fairly complete. Distribution will include html and pdf
4299 it's fairly complete. Distribution will include html and pdf
4296 versions.
4300 versions.
4297
4301
4298 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4302 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4299 (MayaVi author).
4303 (MayaVi author).
4300
4304
4301 2001-12-21 Fernando Perez <fperez@colorado.edu>
4305 2001-12-21 Fernando Perez <fperez@colorado.edu>
4302
4306
4303 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4307 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4304 good public release, I think (with the manual and the distutils
4308 good public release, I think (with the manual and the distutils
4305 installer). The manual can use some work, but that can go
4309 installer). The manual can use some work, but that can go
4306 slowly. Otherwise I think it's quite nice for end users. Next
4310 slowly. Otherwise I think it's quite nice for end users. Next
4307 summer, rewrite the guts of it...
4311 summer, rewrite the guts of it...
4308
4312
4309 * Changed format of ipythonrc files to use whitespace as the
4313 * Changed format of ipythonrc files to use whitespace as the
4310 separator instead of an explicit '='. Cleaner.
4314 separator instead of an explicit '='. Cleaner.
4311
4315
4312 2001-12-20 Fernando Perez <fperez@colorado.edu>
4316 2001-12-20 Fernando Perez <fperez@colorado.edu>
4313
4317
4314 * Started a manual in LyX. For now it's just a quick merge of the
4318 * Started a manual in LyX. For now it's just a quick merge of the
4315 various internal docstrings and READMEs. Later it may grow into a
4319 various internal docstrings and READMEs. Later it may grow into a
4316 nice, full-blown manual.
4320 nice, full-blown manual.
4317
4321
4318 * Set up a distutils based installer. Installation should now be
4322 * Set up a distutils based installer. Installation should now be
4319 trivially simple for end-users.
4323 trivially simple for end-users.
4320
4324
4321 2001-12-11 Fernando Perez <fperez@colorado.edu>
4325 2001-12-11 Fernando Perez <fperez@colorado.edu>
4322
4326
4323 * Released 0.2.0. First public release, announced it at
4327 * Released 0.2.0. First public release, announced it at
4324 comp.lang.python. From now on, just bugfixes...
4328 comp.lang.python. From now on, just bugfixes...
4325
4329
4326 * Went through all the files, set copyright/license notices and
4330 * Went through all the files, set copyright/license notices and
4327 cleaned up things. Ready for release.
4331 cleaned up things. Ready for release.
4328
4332
4329 2001-12-10 Fernando Perez <fperez@colorado.edu>
4333 2001-12-10 Fernando Perez <fperez@colorado.edu>
4330
4334
4331 * Changed the first-time installer not to use tarfiles. It's more
4335 * Changed the first-time installer not to use tarfiles. It's more
4332 robust now and less unix-dependent. Also makes it easier for
4336 robust now and less unix-dependent. Also makes it easier for
4333 people to later upgrade versions.
4337 people to later upgrade versions.
4334
4338
4335 * Changed @exit to @abort to reflect the fact that it's pretty
4339 * Changed @exit to @abort to reflect the fact that it's pretty
4336 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4340 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4337 becomes significant only when IPyhton is embedded: in that case,
4341 becomes significant only when IPyhton is embedded: in that case,
4338 C-D closes IPython only, but @abort kills the enclosing program
4342 C-D closes IPython only, but @abort kills the enclosing program
4339 too (unless it had called IPython inside a try catching
4343 too (unless it had called IPython inside a try catching
4340 SystemExit).
4344 SystemExit).
4341
4345
4342 * Created Shell module which exposes the actuall IPython Shell
4346 * Created Shell module which exposes the actuall IPython Shell
4343 classes, currently the normal and the embeddable one. This at
4347 classes, currently the normal and the embeddable one. This at
4344 least offers a stable interface we won't need to change when
4348 least offers a stable interface we won't need to change when
4345 (later) the internals are rewritten. That rewrite will be confined
4349 (later) the internals are rewritten. That rewrite will be confined
4346 to iplib and ipmaker, but the Shell interface should remain as is.
4350 to iplib and ipmaker, but the Shell interface should remain as is.
4347
4351
4348 * Added embed module which offers an embeddable IPShell object,
4352 * Added embed module which offers an embeddable IPShell object,
4349 useful to fire up IPython *inside* a running program. Great for
4353 useful to fire up IPython *inside* a running program. Great for
4350 debugging or dynamical data analysis.
4354 debugging or dynamical data analysis.
4351
4355
4352 2001-12-08 Fernando Perez <fperez@colorado.edu>
4356 2001-12-08 Fernando Perez <fperez@colorado.edu>
4353
4357
4354 * Fixed small bug preventing seeing info from methods of defined
4358 * Fixed small bug preventing seeing info from methods of defined
4355 objects (incorrect namespace in _ofind()).
4359 objects (incorrect namespace in _ofind()).
4356
4360
4357 * Documentation cleanup. Moved the main usage docstrings to a
4361 * Documentation cleanup. Moved the main usage docstrings to a
4358 separate file, usage.py (cleaner to maintain, and hopefully in the
4362 separate file, usage.py (cleaner to maintain, and hopefully in the
4359 future some perlpod-like way of producing interactive, man and
4363 future some perlpod-like way of producing interactive, man and
4360 html docs out of it will be found).
4364 html docs out of it will be found).
4361
4365
4362 * Added @profile to see your profile at any time.
4366 * Added @profile to see your profile at any time.
4363
4367
4364 * Added @p as an alias for 'print'. It's especially convenient if
4368 * Added @p as an alias for 'print'. It's especially convenient if
4365 using automagic ('p x' prints x).
4369 using automagic ('p x' prints x).
4366
4370
4367 * Small cleanups and fixes after a pychecker run.
4371 * Small cleanups and fixes after a pychecker run.
4368
4372
4369 * Changed the @cd command to handle @cd - and @cd -<n> for
4373 * Changed the @cd command to handle @cd - and @cd -<n> for
4370 visiting any directory in _dh.
4374 visiting any directory in _dh.
4371
4375
4372 * Introduced _dh, a history of visited directories. @dhist prints
4376 * Introduced _dh, a history of visited directories. @dhist prints
4373 it out with numbers.
4377 it out with numbers.
4374
4378
4375 2001-12-07 Fernando Perez <fperez@colorado.edu>
4379 2001-12-07 Fernando Perez <fperez@colorado.edu>
4376
4380
4377 * Released 0.1.22
4381 * Released 0.1.22
4378
4382
4379 * Made initialization a bit more robust against invalid color
4383 * Made initialization a bit more robust against invalid color
4380 options in user input (exit, not traceback-crash).
4384 options in user input (exit, not traceback-crash).
4381
4385
4382 * Changed the bug crash reporter to write the report only in the
4386 * Changed the bug crash reporter to write the report only in the
4383 user's .ipython directory. That way IPython won't litter people's
4387 user's .ipython directory. That way IPython won't litter people's
4384 hard disks with crash files all over the place. Also print on
4388 hard disks with crash files all over the place. Also print on
4385 screen the necessary mail command.
4389 screen the necessary mail command.
4386
4390
4387 * With the new ultraTB, implemented LightBG color scheme for light
4391 * With the new ultraTB, implemented LightBG color scheme for light
4388 background terminals. A lot of people like white backgrounds, so I
4392 background terminals. A lot of people like white backgrounds, so I
4389 guess we should at least give them something readable.
4393 guess we should at least give them something readable.
4390
4394
4391 2001-12-06 Fernando Perez <fperez@colorado.edu>
4395 2001-12-06 Fernando Perez <fperez@colorado.edu>
4392
4396
4393 * Modified the structure of ultraTB. Now there's a proper class
4397 * Modified the structure of ultraTB. Now there's a proper class
4394 for tables of color schemes which allow adding schemes easily and
4398 for tables of color schemes which allow adding schemes easily and
4395 switching the active scheme without creating a new instance every
4399 switching the active scheme without creating a new instance every
4396 time (which was ridiculous). The syntax for creating new schemes
4400 time (which was ridiculous). The syntax for creating new schemes
4397 is also cleaner. I think ultraTB is finally done, with a clean
4401 is also cleaner. I think ultraTB is finally done, with a clean
4398 class structure. Names are also much cleaner (now there's proper
4402 class structure. Names are also much cleaner (now there's proper
4399 color tables, no need for every variable to also have 'color' in
4403 color tables, no need for every variable to also have 'color' in
4400 its name).
4404 its name).
4401
4405
4402 * Broke down genutils into separate files. Now genutils only
4406 * Broke down genutils into separate files. Now genutils only
4403 contains utility functions, and classes have been moved to their
4407 contains utility functions, and classes have been moved to their
4404 own files (they had enough independent functionality to warrant
4408 own files (they had enough independent functionality to warrant
4405 it): ConfigLoader, OutputTrap, Struct.
4409 it): ConfigLoader, OutputTrap, Struct.
4406
4410
4407 2001-12-05 Fernando Perez <fperez@colorado.edu>
4411 2001-12-05 Fernando Perez <fperez@colorado.edu>
4408
4412
4409 * IPython turns 21! Released version 0.1.21, as a candidate for
4413 * IPython turns 21! Released version 0.1.21, as a candidate for
4410 public consumption. If all goes well, release in a few days.
4414 public consumption. If all goes well, release in a few days.
4411
4415
4412 * Fixed path bug (files in Extensions/ directory wouldn't be found
4416 * Fixed path bug (files in Extensions/ directory wouldn't be found
4413 unless IPython/ was explicitly in sys.path).
4417 unless IPython/ was explicitly in sys.path).
4414
4418
4415 * Extended the FlexCompleter class as MagicCompleter to allow
4419 * Extended the FlexCompleter class as MagicCompleter to allow
4416 completion of @-starting lines.
4420 completion of @-starting lines.
4417
4421
4418 * Created __release__.py file as a central repository for release
4422 * Created __release__.py file as a central repository for release
4419 info that other files can read from.
4423 info that other files can read from.
4420
4424
4421 * Fixed small bug in logging: when logging was turned on in
4425 * Fixed small bug in logging: when logging was turned on in
4422 mid-session, old lines with special meanings (!@?) were being
4426 mid-session, old lines with special meanings (!@?) were being
4423 logged without the prepended comment, which is necessary since
4427 logged without the prepended comment, which is necessary since
4424 they are not truly valid python syntax. This should make session
4428 they are not truly valid python syntax. This should make session
4425 restores produce less errors.
4429 restores produce less errors.
4426
4430
4427 * The namespace cleanup forced me to make a FlexCompleter class
4431 * The namespace cleanup forced me to make a FlexCompleter class
4428 which is nothing but a ripoff of rlcompleter, but with selectable
4432 which is nothing but a ripoff of rlcompleter, but with selectable
4429 namespace (rlcompleter only works in __main__.__dict__). I'll try
4433 namespace (rlcompleter only works in __main__.__dict__). I'll try
4430 to submit a note to the authors to see if this change can be
4434 to submit a note to the authors to see if this change can be
4431 incorporated in future rlcompleter releases (Dec.6: done)
4435 incorporated in future rlcompleter releases (Dec.6: done)
4432
4436
4433 * More fixes to namespace handling. It was a mess! Now all
4437 * More fixes to namespace handling. It was a mess! Now all
4434 explicit references to __main__.__dict__ are gone (except when
4438 explicit references to __main__.__dict__ are gone (except when
4435 really needed) and everything is handled through the namespace
4439 really needed) and everything is handled through the namespace
4436 dicts in the IPython instance. We seem to be getting somewhere
4440 dicts in the IPython instance. We seem to be getting somewhere
4437 with this, finally...
4441 with this, finally...
4438
4442
4439 * Small documentation updates.
4443 * Small documentation updates.
4440
4444
4441 * Created the Extensions directory under IPython (with an
4445 * Created the Extensions directory under IPython (with an
4442 __init__.py). Put the PhysicalQ stuff there. This directory should
4446 __init__.py). Put the PhysicalQ stuff there. This directory should
4443 be used for all special-purpose extensions.
4447 be used for all special-purpose extensions.
4444
4448
4445 * File renaming:
4449 * File renaming:
4446 ipythonlib --> ipmaker
4450 ipythonlib --> ipmaker
4447 ipplib --> iplib
4451 ipplib --> iplib
4448 This makes a bit more sense in terms of what these files actually do.
4452 This makes a bit more sense in terms of what these files actually do.
4449
4453
4450 * Moved all the classes and functions in ipythonlib to ipplib, so
4454 * Moved all the classes and functions in ipythonlib to ipplib, so
4451 now ipythonlib only has make_IPython(). This will ease up its
4455 now ipythonlib only has make_IPython(). This will ease up its
4452 splitting in smaller functional chunks later.
4456 splitting in smaller functional chunks later.
4453
4457
4454 * Cleaned up (done, I think) output of @whos. Better column
4458 * Cleaned up (done, I think) output of @whos. Better column
4455 formatting, and now shows str(var) for as much as it can, which is
4459 formatting, and now shows str(var) for as much as it can, which is
4456 typically what one gets with a 'print var'.
4460 typically what one gets with a 'print var'.
4457
4461
4458 2001-12-04 Fernando Perez <fperez@colorado.edu>
4462 2001-12-04 Fernando Perez <fperez@colorado.edu>
4459
4463
4460 * Fixed namespace problems. Now builtin/IPyhton/user names get
4464 * Fixed namespace problems. Now builtin/IPyhton/user names get
4461 properly reported in their namespace. Internal namespace handling
4465 properly reported in their namespace. Internal namespace handling
4462 is finally getting decent (not perfect yet, but much better than
4466 is finally getting decent (not perfect yet, but much better than
4463 the ad-hoc mess we had).
4467 the ad-hoc mess we had).
4464
4468
4465 * Removed -exit option. If people just want to run a python
4469 * Removed -exit option. If people just want to run a python
4466 script, that's what the normal interpreter is for. Less
4470 script, that's what the normal interpreter is for. Less
4467 unnecessary options, less chances for bugs.
4471 unnecessary options, less chances for bugs.
4468
4472
4469 * Added a crash handler which generates a complete post-mortem if
4473 * Added a crash handler which generates a complete post-mortem if
4470 IPython crashes. This will help a lot in tracking bugs down the
4474 IPython crashes. This will help a lot in tracking bugs down the
4471 road.
4475 road.
4472
4476
4473 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4477 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4474 which were boud to functions being reassigned would bypass the
4478 which were boud to functions being reassigned would bypass the
4475 logger, breaking the sync of _il with the prompt counter. This
4479 logger, breaking the sync of _il with the prompt counter. This
4476 would then crash IPython later when a new line was logged.
4480 would then crash IPython later when a new line was logged.
4477
4481
4478 2001-12-02 Fernando Perez <fperez@colorado.edu>
4482 2001-12-02 Fernando Perez <fperez@colorado.edu>
4479
4483
4480 * Made IPython a package. This means people don't have to clutter
4484 * Made IPython a package. This means people don't have to clutter
4481 their sys.path with yet another directory. Changed the INSTALL
4485 their sys.path with yet another directory. Changed the INSTALL
4482 file accordingly.
4486 file accordingly.
4483
4487
4484 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4488 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4485 sorts its output (so @who shows it sorted) and @whos formats the
4489 sorts its output (so @who shows it sorted) and @whos formats the
4486 table according to the width of the first column. Nicer, easier to
4490 table according to the width of the first column. Nicer, easier to
4487 read. Todo: write a generic table_format() which takes a list of
4491 read. Todo: write a generic table_format() which takes a list of
4488 lists and prints it nicely formatted, with optional row/column
4492 lists and prints it nicely formatted, with optional row/column
4489 separators and proper padding and justification.
4493 separators and proper padding and justification.
4490
4494
4491 * Released 0.1.20
4495 * Released 0.1.20
4492
4496
4493 * Fixed bug in @log which would reverse the inputcache list (a
4497 * Fixed bug in @log which would reverse the inputcache list (a
4494 copy operation was missing).
4498 copy operation was missing).
4495
4499
4496 * Code cleanup. @config was changed to use page(). Better, since
4500 * Code cleanup. @config was changed to use page(). Better, since
4497 its output is always quite long.
4501 its output is always quite long.
4498
4502
4499 * Itpl is back as a dependency. I was having too many problems
4503 * Itpl is back as a dependency. I was having too many problems
4500 getting the parametric aliases to work reliably, and it's just
4504 getting the parametric aliases to work reliably, and it's just
4501 easier to code weird string operations with it than playing %()s
4505 easier to code weird string operations with it than playing %()s
4502 games. It's only ~6k, so I don't think it's too big a deal.
4506 games. It's only ~6k, so I don't think it's too big a deal.
4503
4507
4504 * Found (and fixed) a very nasty bug with history. !lines weren't
4508 * Found (and fixed) a very nasty bug with history. !lines weren't
4505 getting cached, and the out of sync caches would crash
4509 getting cached, and the out of sync caches would crash
4506 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4510 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4507 division of labor a bit better. Bug fixed, cleaner structure.
4511 division of labor a bit better. Bug fixed, cleaner structure.
4508
4512
4509 2001-12-01 Fernando Perez <fperez@colorado.edu>
4513 2001-12-01 Fernando Perez <fperez@colorado.edu>
4510
4514
4511 * Released 0.1.19
4515 * Released 0.1.19
4512
4516
4513 * Added option -n to @hist to prevent line number printing. Much
4517 * Added option -n to @hist to prevent line number printing. Much
4514 easier to copy/paste code this way.
4518 easier to copy/paste code this way.
4515
4519
4516 * Created global _il to hold the input list. Allows easy
4520 * Created global _il to hold the input list. Allows easy
4517 re-execution of blocks of code by slicing it (inspired by Janko's
4521 re-execution of blocks of code by slicing it (inspired by Janko's
4518 comment on 'macros').
4522 comment on 'macros').
4519
4523
4520 * Small fixes and doc updates.
4524 * Small fixes and doc updates.
4521
4525
4522 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4526 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4523 much too fragile with automagic. Handles properly multi-line
4527 much too fragile with automagic. Handles properly multi-line
4524 statements and takes parameters.
4528 statements and takes parameters.
4525
4529
4526 2001-11-30 Fernando Perez <fperez@colorado.edu>
4530 2001-11-30 Fernando Perez <fperez@colorado.edu>
4527
4531
4528 * Version 0.1.18 released.
4532 * Version 0.1.18 released.
4529
4533
4530 * Fixed nasty namespace bug in initial module imports.
4534 * Fixed nasty namespace bug in initial module imports.
4531
4535
4532 * Added copyright/license notes to all code files (except
4536 * Added copyright/license notes to all code files (except
4533 DPyGetOpt). For the time being, LGPL. That could change.
4537 DPyGetOpt). For the time being, LGPL. That could change.
4534
4538
4535 * Rewrote a much nicer README, updated INSTALL, cleaned up
4539 * Rewrote a much nicer README, updated INSTALL, cleaned up
4536 ipythonrc-* samples.
4540 ipythonrc-* samples.
4537
4541
4538 * Overall code/documentation cleanup. Basically ready for
4542 * Overall code/documentation cleanup. Basically ready for
4539 release. Only remaining thing: licence decision (LGPL?).
4543 release. Only remaining thing: licence decision (LGPL?).
4540
4544
4541 * Converted load_config to a class, ConfigLoader. Now recursion
4545 * Converted load_config to a class, ConfigLoader. Now recursion
4542 control is better organized. Doesn't include the same file twice.
4546 control is better organized. Doesn't include the same file twice.
4543
4547
4544 2001-11-29 Fernando Perez <fperez@colorado.edu>
4548 2001-11-29 Fernando Perez <fperez@colorado.edu>
4545
4549
4546 * Got input history working. Changed output history variables from
4550 * Got input history working. Changed output history variables from
4547 _p to _o so that _i is for input and _o for output. Just cleaner
4551 _p to _o so that _i is for input and _o for output. Just cleaner
4548 convention.
4552 convention.
4549
4553
4550 * Implemented parametric aliases. This pretty much allows the
4554 * Implemented parametric aliases. This pretty much allows the
4551 alias system to offer full-blown shell convenience, I think.
4555 alias system to offer full-blown shell convenience, I think.
4552
4556
4553 * Version 0.1.17 released, 0.1.18 opened.
4557 * Version 0.1.17 released, 0.1.18 opened.
4554
4558
4555 * dot_ipython/ipythonrc (alias): added documentation.
4559 * dot_ipython/ipythonrc (alias): added documentation.
4556 (xcolor): Fixed small bug (xcolors -> xcolor)
4560 (xcolor): Fixed small bug (xcolors -> xcolor)
4557
4561
4558 * Changed the alias system. Now alias is a magic command to define
4562 * Changed the alias system. Now alias is a magic command to define
4559 aliases just like the shell. Rationale: the builtin magics should
4563 aliases just like the shell. Rationale: the builtin magics should
4560 be there for things deeply connected to IPython's
4564 be there for things deeply connected to IPython's
4561 architecture. And this is a much lighter system for what I think
4565 architecture. And this is a much lighter system for what I think
4562 is the really important feature: allowing users to define quickly
4566 is the really important feature: allowing users to define quickly
4563 magics that will do shell things for them, so they can customize
4567 magics that will do shell things for them, so they can customize
4564 IPython easily to match their work habits. If someone is really
4568 IPython easily to match their work habits. If someone is really
4565 desperate to have another name for a builtin alias, they can
4569 desperate to have another name for a builtin alias, they can
4566 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4570 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4567 works.
4571 works.
4568
4572
4569 2001-11-28 Fernando Perez <fperez@colorado.edu>
4573 2001-11-28 Fernando Perez <fperez@colorado.edu>
4570
4574
4571 * Changed @file so that it opens the source file at the proper
4575 * Changed @file so that it opens the source file at the proper
4572 line. Since it uses less, if your EDITOR environment is
4576 line. Since it uses less, if your EDITOR environment is
4573 configured, typing v will immediately open your editor of choice
4577 configured, typing v will immediately open your editor of choice
4574 right at the line where the object is defined. Not as quick as
4578 right at the line where the object is defined. Not as quick as
4575 having a direct @edit command, but for all intents and purposes it
4579 having a direct @edit command, but for all intents and purposes it
4576 works. And I don't have to worry about writing @edit to deal with
4580 works. And I don't have to worry about writing @edit to deal with
4577 all the editors, less does that.
4581 all the editors, less does that.
4578
4582
4579 * Version 0.1.16 released, 0.1.17 opened.
4583 * Version 0.1.16 released, 0.1.17 opened.
4580
4584
4581 * Fixed some nasty bugs in the page/page_dumb combo that could
4585 * Fixed some nasty bugs in the page/page_dumb combo that could
4582 crash IPython.
4586 crash IPython.
4583
4587
4584 2001-11-27 Fernando Perez <fperez@colorado.edu>
4588 2001-11-27 Fernando Perez <fperez@colorado.edu>
4585
4589
4586 * Version 0.1.15 released, 0.1.16 opened.
4590 * Version 0.1.15 released, 0.1.16 opened.
4587
4591
4588 * Finally got ? and ?? to work for undefined things: now it's
4592 * Finally got ? and ?? to work for undefined things: now it's
4589 possible to type {}.get? and get information about the get method
4593 possible to type {}.get? and get information about the get method
4590 of dicts, or os.path? even if only os is defined (so technically
4594 of dicts, or os.path? even if only os is defined (so technically
4591 os.path isn't). Works at any level. For example, after import os,
4595 os.path isn't). Works at any level. For example, after import os,
4592 os?, os.path?, os.path.abspath? all work. This is great, took some
4596 os?, os.path?, os.path.abspath? all work. This is great, took some
4593 work in _ofind.
4597 work in _ofind.
4594
4598
4595 * Fixed more bugs with logging. The sanest way to do it was to add
4599 * Fixed more bugs with logging. The sanest way to do it was to add
4596 to @log a 'mode' parameter. Killed two in one shot (this mode
4600 to @log a 'mode' parameter. Killed two in one shot (this mode
4597 option was a request of Janko's). I think it's finally clean
4601 option was a request of Janko's). I think it's finally clean
4598 (famous last words).
4602 (famous last words).
4599
4603
4600 * Added a page_dumb() pager which does a decent job of paging on
4604 * Added a page_dumb() pager which does a decent job of paging on
4601 screen, if better things (like less) aren't available. One less
4605 screen, if better things (like less) aren't available. One less
4602 unix dependency (someday maybe somebody will port this to
4606 unix dependency (someday maybe somebody will port this to
4603 windows).
4607 windows).
4604
4608
4605 * Fixed problem in magic_log: would lock of logging out if log
4609 * Fixed problem in magic_log: would lock of logging out if log
4606 creation failed (because it would still think it had succeeded).
4610 creation failed (because it would still think it had succeeded).
4607
4611
4608 * Improved the page() function using curses to auto-detect screen
4612 * Improved the page() function using curses to auto-detect screen
4609 size. Now it can make a much better decision on whether to print
4613 size. Now it can make a much better decision on whether to print
4610 or page a string. Option screen_length was modified: a value 0
4614 or page a string. Option screen_length was modified: a value 0
4611 means auto-detect, and that's the default now.
4615 means auto-detect, and that's the default now.
4612
4616
4613 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4617 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4614 go out. I'll test it for a few days, then talk to Janko about
4618 go out. I'll test it for a few days, then talk to Janko about
4615 licences and announce it.
4619 licences and announce it.
4616
4620
4617 * Fixed the length of the auto-generated ---> prompt which appears
4621 * Fixed the length of the auto-generated ---> prompt which appears
4618 for auto-parens and auto-quotes. Getting this right isn't trivial,
4622 for auto-parens and auto-quotes. Getting this right isn't trivial,
4619 with all the color escapes, different prompt types and optional
4623 with all the color escapes, different prompt types and optional
4620 separators. But it seems to be working in all the combinations.
4624 separators. But it seems to be working in all the combinations.
4621
4625
4622 2001-11-26 Fernando Perez <fperez@colorado.edu>
4626 2001-11-26 Fernando Perez <fperez@colorado.edu>
4623
4627
4624 * Wrote a regexp filter to get option types from the option names
4628 * Wrote a regexp filter to get option types from the option names
4625 string. This eliminates the need to manually keep two duplicate
4629 string. This eliminates the need to manually keep two duplicate
4626 lists.
4630 lists.
4627
4631
4628 * Removed the unneeded check_option_names. Now options are handled
4632 * Removed the unneeded check_option_names. Now options are handled
4629 in a much saner manner and it's easy to visually check that things
4633 in a much saner manner and it's easy to visually check that things
4630 are ok.
4634 are ok.
4631
4635
4632 * Updated version numbers on all files I modified to carry a
4636 * Updated version numbers on all files I modified to carry a
4633 notice so Janko and Nathan have clear version markers.
4637 notice so Janko and Nathan have clear version markers.
4634
4638
4635 * Updated docstring for ultraTB with my changes. I should send
4639 * Updated docstring for ultraTB with my changes. I should send
4636 this to Nathan.
4640 this to Nathan.
4637
4641
4638 * Lots of small fixes. Ran everything through pychecker again.
4642 * Lots of small fixes. Ran everything through pychecker again.
4639
4643
4640 * Made loading of deep_reload an cmd line option. If it's not too
4644 * Made loading of deep_reload an cmd line option. If it's not too
4641 kosher, now people can just disable it. With -nodeep_reload it's
4645 kosher, now people can just disable it. With -nodeep_reload it's
4642 still available as dreload(), it just won't overwrite reload().
4646 still available as dreload(), it just won't overwrite reload().
4643
4647
4644 * Moved many options to the no| form (-opt and -noopt
4648 * Moved many options to the no| form (-opt and -noopt
4645 accepted). Cleaner.
4649 accepted). Cleaner.
4646
4650
4647 * Changed magic_log so that if called with no parameters, it uses
4651 * Changed magic_log so that if called with no parameters, it uses
4648 'rotate' mode. That way auto-generated logs aren't automatically
4652 'rotate' mode. That way auto-generated logs aren't automatically
4649 over-written. For normal logs, now a backup is made if it exists
4653 over-written. For normal logs, now a backup is made if it exists
4650 (only 1 level of backups). A new 'backup' mode was added to the
4654 (only 1 level of backups). A new 'backup' mode was added to the
4651 Logger class to support this. This was a request by Janko.
4655 Logger class to support this. This was a request by Janko.
4652
4656
4653 * Added @logoff/@logon to stop/restart an active log.
4657 * Added @logoff/@logon to stop/restart an active log.
4654
4658
4655 * Fixed a lot of bugs in log saving/replay. It was pretty
4659 * Fixed a lot of bugs in log saving/replay. It was pretty
4656 broken. Now special lines (!@,/) appear properly in the command
4660 broken. Now special lines (!@,/) appear properly in the command
4657 history after a log replay.
4661 history after a log replay.
4658
4662
4659 * Tried and failed to implement full session saving via pickle. My
4663 * Tried and failed to implement full session saving via pickle. My
4660 idea was to pickle __main__.__dict__, but modules can't be
4664 idea was to pickle __main__.__dict__, but modules can't be
4661 pickled. This would be a better alternative to replaying logs, but
4665 pickled. This would be a better alternative to replaying logs, but
4662 seems quite tricky to get to work. Changed -session to be called
4666 seems quite tricky to get to work. Changed -session to be called
4663 -logplay, which more accurately reflects what it does. And if we
4667 -logplay, which more accurately reflects what it does. And if we
4664 ever get real session saving working, -session is now available.
4668 ever get real session saving working, -session is now available.
4665
4669
4666 * Implemented color schemes for prompts also. As for tracebacks,
4670 * Implemented color schemes for prompts also. As for tracebacks,
4667 currently only NoColor and Linux are supported. But now the
4671 currently only NoColor and Linux are supported. But now the
4668 infrastructure is in place, based on a generic ColorScheme
4672 infrastructure is in place, based on a generic ColorScheme
4669 class. So writing and activating new schemes both for the prompts
4673 class. So writing and activating new schemes both for the prompts
4670 and the tracebacks should be straightforward.
4674 and the tracebacks should be straightforward.
4671
4675
4672 * Version 0.1.13 released, 0.1.14 opened.
4676 * Version 0.1.13 released, 0.1.14 opened.
4673
4677
4674 * Changed handling of options for output cache. Now counter is
4678 * Changed handling of options for output cache. Now counter is
4675 hardwired starting at 1 and one specifies the maximum number of
4679 hardwired starting at 1 and one specifies the maximum number of
4676 entries *in the outcache* (not the max prompt counter). This is
4680 entries *in the outcache* (not the max prompt counter). This is
4677 much better, since many statements won't increase the cache
4681 much better, since many statements won't increase the cache
4678 count. It also eliminated some confusing options, now there's only
4682 count. It also eliminated some confusing options, now there's only
4679 one: cache_size.
4683 one: cache_size.
4680
4684
4681 * Added 'alias' magic function and magic_alias option in the
4685 * Added 'alias' magic function and magic_alias option in the
4682 ipythonrc file. Now the user can easily define whatever names he
4686 ipythonrc file. Now the user can easily define whatever names he
4683 wants for the magic functions without having to play weird
4687 wants for the magic functions without having to play weird
4684 namespace games. This gives IPython a real shell-like feel.
4688 namespace games. This gives IPython a real shell-like feel.
4685
4689
4686 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4690 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4687 @ or not).
4691 @ or not).
4688
4692
4689 This was one of the last remaining 'visible' bugs (that I know
4693 This was one of the last remaining 'visible' bugs (that I know
4690 of). I think if I can clean up the session loading so it works
4694 of). I think if I can clean up the session loading so it works
4691 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4695 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4692 about licensing).
4696 about licensing).
4693
4697
4694 2001-11-25 Fernando Perez <fperez@colorado.edu>
4698 2001-11-25 Fernando Perez <fperez@colorado.edu>
4695
4699
4696 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4700 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4697 there's a cleaner distinction between what ? and ?? show.
4701 there's a cleaner distinction between what ? and ?? show.
4698
4702
4699 * Added screen_length option. Now the user can define his own
4703 * Added screen_length option. Now the user can define his own
4700 screen size for page() operations.
4704 screen size for page() operations.
4701
4705
4702 * Implemented magic shell-like functions with automatic code
4706 * Implemented magic shell-like functions with automatic code
4703 generation. Now adding another function is just a matter of adding
4707 generation. Now adding another function is just a matter of adding
4704 an entry to a dict, and the function is dynamically generated at
4708 an entry to a dict, and the function is dynamically generated at
4705 run-time. Python has some really cool features!
4709 run-time. Python has some really cool features!
4706
4710
4707 * Renamed many options to cleanup conventions a little. Now all
4711 * Renamed many options to cleanup conventions a little. Now all
4708 are lowercase, and only underscores where needed. Also in the code
4712 are lowercase, and only underscores where needed. Also in the code
4709 option name tables are clearer.
4713 option name tables are clearer.
4710
4714
4711 * Changed prompts a little. Now input is 'In [n]:' instead of
4715 * Changed prompts a little. Now input is 'In [n]:' instead of
4712 'In[n]:='. This allows it the numbers to be aligned with the
4716 'In[n]:='. This allows it the numbers to be aligned with the
4713 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4717 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4714 Python (it was a Mathematica thing). The '...' continuation prompt
4718 Python (it was a Mathematica thing). The '...' continuation prompt
4715 was also changed a little to align better.
4719 was also changed a little to align better.
4716
4720
4717 * Fixed bug when flushing output cache. Not all _p<n> variables
4721 * Fixed bug when flushing output cache. Not all _p<n> variables
4718 exist, so their deletion needs to be wrapped in a try:
4722 exist, so their deletion needs to be wrapped in a try:
4719
4723
4720 * Figured out how to properly use inspect.formatargspec() (it
4724 * Figured out how to properly use inspect.formatargspec() (it
4721 requires the args preceded by *). So I removed all the code from
4725 requires the args preceded by *). So I removed all the code from
4722 _get_pdef in Magic, which was just replicating that.
4726 _get_pdef in Magic, which was just replicating that.
4723
4727
4724 * Added test to prefilter to allow redefining magic function names
4728 * Added test to prefilter to allow redefining magic function names
4725 as variables. This is ok, since the @ form is always available,
4729 as variables. This is ok, since the @ form is always available,
4726 but whe should allow the user to define a variable called 'ls' if
4730 but whe should allow the user to define a variable called 'ls' if
4727 he needs it.
4731 he needs it.
4728
4732
4729 * Moved the ToDo information from README into a separate ToDo.
4733 * Moved the ToDo information from README into a separate ToDo.
4730
4734
4731 * General code cleanup and small bugfixes. I think it's close to a
4735 * General code cleanup and small bugfixes. I think it's close to a
4732 state where it can be released, obviously with a big 'beta'
4736 state where it can be released, obviously with a big 'beta'
4733 warning on it.
4737 warning on it.
4734
4738
4735 * Got the magic function split to work. Now all magics are defined
4739 * Got the magic function split to work. Now all magics are defined
4736 in a separate class. It just organizes things a bit, and now
4740 in a separate class. It just organizes things a bit, and now
4737 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4741 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4738 was too long).
4742 was too long).
4739
4743
4740 * Changed @clear to @reset to avoid potential confusions with
4744 * Changed @clear to @reset to avoid potential confusions with
4741 the shell command clear. Also renamed @cl to @clear, which does
4745 the shell command clear. Also renamed @cl to @clear, which does
4742 exactly what people expect it to from their shell experience.
4746 exactly what people expect it to from their shell experience.
4743
4747
4744 Added a check to the @reset command (since it's so
4748 Added a check to the @reset command (since it's so
4745 destructive, it's probably a good idea to ask for confirmation).
4749 destructive, it's probably a good idea to ask for confirmation).
4746 But now reset only works for full namespace resetting. Since the
4750 But now reset only works for full namespace resetting. Since the
4747 del keyword is already there for deleting a few specific
4751 del keyword is already there for deleting a few specific
4748 variables, I don't see the point of having a redundant magic
4752 variables, I don't see the point of having a redundant magic
4749 function for the same task.
4753 function for the same task.
4750
4754
4751 2001-11-24 Fernando Perez <fperez@colorado.edu>
4755 2001-11-24 Fernando Perez <fperez@colorado.edu>
4752
4756
4753 * Updated the builtin docs (esp. the ? ones).
4757 * Updated the builtin docs (esp. the ? ones).
4754
4758
4755 * Ran all the code through pychecker. Not terribly impressed with
4759 * Ran all the code through pychecker. Not terribly impressed with
4756 it: lots of spurious warnings and didn't really find anything of
4760 it: lots of spurious warnings and didn't really find anything of
4757 substance (just a few modules being imported and not used).
4761 substance (just a few modules being imported and not used).
4758
4762
4759 * Implemented the new ultraTB functionality into IPython. New
4763 * Implemented the new ultraTB functionality into IPython. New
4760 option: xcolors. This chooses color scheme. xmode now only selects
4764 option: xcolors. This chooses color scheme. xmode now only selects
4761 between Plain and Verbose. Better orthogonality.
4765 between Plain and Verbose. Better orthogonality.
4762
4766
4763 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4767 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4764 mode and color scheme for the exception handlers. Now it's
4768 mode and color scheme for the exception handlers. Now it's
4765 possible to have the verbose traceback with no coloring.
4769 possible to have the verbose traceback with no coloring.
4766
4770
4767 2001-11-23 Fernando Perez <fperez@colorado.edu>
4771 2001-11-23 Fernando Perez <fperez@colorado.edu>
4768
4772
4769 * Version 0.1.12 released, 0.1.13 opened.
4773 * Version 0.1.12 released, 0.1.13 opened.
4770
4774
4771 * Removed option to set auto-quote and auto-paren escapes by
4775 * Removed option to set auto-quote and auto-paren escapes by
4772 user. The chances of breaking valid syntax are just too high. If
4776 user. The chances of breaking valid syntax are just too high. If
4773 someone *really* wants, they can always dig into the code.
4777 someone *really* wants, they can always dig into the code.
4774
4778
4775 * Made prompt separators configurable.
4779 * Made prompt separators configurable.
4776
4780
4777 2001-11-22 Fernando Perez <fperez@colorado.edu>
4781 2001-11-22 Fernando Perez <fperez@colorado.edu>
4778
4782
4779 * Small bugfixes in many places.
4783 * Small bugfixes in many places.
4780
4784
4781 * Removed the MyCompleter class from ipplib. It seemed redundant
4785 * Removed the MyCompleter class from ipplib. It seemed redundant
4782 with the C-p,C-n history search functionality. Less code to
4786 with the C-p,C-n history search functionality. Less code to
4783 maintain.
4787 maintain.
4784
4788
4785 * Moved all the original ipython.py code into ipythonlib.py. Right
4789 * Moved all the original ipython.py code into ipythonlib.py. Right
4786 now it's just one big dump into a function called make_IPython, so
4790 now it's just one big dump into a function called make_IPython, so
4787 no real modularity has been gained. But at least it makes the
4791 no real modularity has been gained. But at least it makes the
4788 wrapper script tiny, and since ipythonlib is a module, it gets
4792 wrapper script tiny, and since ipythonlib is a module, it gets
4789 compiled and startup is much faster.
4793 compiled and startup is much faster.
4790
4794
4791 This is a reasobably 'deep' change, so we should test it for a
4795 This is a reasobably 'deep' change, so we should test it for a
4792 while without messing too much more with the code.
4796 while without messing too much more with the code.
4793
4797
4794 2001-11-21 Fernando Perez <fperez@colorado.edu>
4798 2001-11-21 Fernando Perez <fperez@colorado.edu>
4795
4799
4796 * Version 0.1.11 released, 0.1.12 opened for further work.
4800 * Version 0.1.11 released, 0.1.12 opened for further work.
4797
4801
4798 * Removed dependency on Itpl. It was only needed in one place. It
4802 * Removed dependency on Itpl. It was only needed in one place. It
4799 would be nice if this became part of python, though. It makes life
4803 would be nice if this became part of python, though. It makes life
4800 *a lot* easier in some cases.
4804 *a lot* easier in some cases.
4801
4805
4802 * Simplified the prefilter code a bit. Now all handlers are
4806 * Simplified the prefilter code a bit. Now all handlers are
4803 expected to explicitly return a value (at least a blank string).
4807 expected to explicitly return a value (at least a blank string).
4804
4808
4805 * Heavy edits in ipplib. Removed the help system altogether. Now
4809 * Heavy edits in ipplib. Removed the help system altogether. Now
4806 obj?/?? is used for inspecting objects, a magic @doc prints
4810 obj?/?? is used for inspecting objects, a magic @doc prints
4807 docstrings, and full-blown Python help is accessed via the 'help'
4811 docstrings, and full-blown Python help is accessed via the 'help'
4808 keyword. This cleans up a lot of code (less to maintain) and does
4812 keyword. This cleans up a lot of code (less to maintain) and does
4809 the job. Since 'help' is now a standard Python component, might as
4813 the job. Since 'help' is now a standard Python component, might as
4810 well use it and remove duplicate functionality.
4814 well use it and remove duplicate functionality.
4811
4815
4812 Also removed the option to use ipplib as a standalone program. By
4816 Also removed the option to use ipplib as a standalone program. By
4813 now it's too dependent on other parts of IPython to function alone.
4817 now it's too dependent on other parts of IPython to function alone.
4814
4818
4815 * Fixed bug in genutils.pager. It would crash if the pager was
4819 * Fixed bug in genutils.pager. It would crash if the pager was
4816 exited immediately after opening (broken pipe).
4820 exited immediately after opening (broken pipe).
4817
4821
4818 * Trimmed down the VerboseTB reporting a little. The header is
4822 * Trimmed down the VerboseTB reporting a little. The header is
4819 much shorter now and the repeated exception arguments at the end
4823 much shorter now and the repeated exception arguments at the end
4820 have been removed. For interactive use the old header seemed a bit
4824 have been removed. For interactive use the old header seemed a bit
4821 excessive.
4825 excessive.
4822
4826
4823 * Fixed small bug in output of @whos for variables with multi-word
4827 * Fixed small bug in output of @whos for variables with multi-word
4824 types (only first word was displayed).
4828 types (only first word was displayed).
4825
4829
4826 2001-11-17 Fernando Perez <fperez@colorado.edu>
4830 2001-11-17 Fernando Perez <fperez@colorado.edu>
4827
4831
4828 * Version 0.1.10 released, 0.1.11 opened for further work.
4832 * Version 0.1.10 released, 0.1.11 opened for further work.
4829
4833
4830 * Modified dirs and friends. dirs now *returns* the stack (not
4834 * Modified dirs and friends. dirs now *returns* the stack (not
4831 prints), so one can manipulate it as a variable. Convenient to
4835 prints), so one can manipulate it as a variable. Convenient to
4832 travel along many directories.
4836 travel along many directories.
4833
4837
4834 * Fixed bug in magic_pdef: would only work with functions with
4838 * Fixed bug in magic_pdef: would only work with functions with
4835 arguments with default values.
4839 arguments with default values.
4836
4840
4837 2001-11-14 Fernando Perez <fperez@colorado.edu>
4841 2001-11-14 Fernando Perez <fperez@colorado.edu>
4838
4842
4839 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4843 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4840 example with IPython. Various other minor fixes and cleanups.
4844 example with IPython. Various other minor fixes and cleanups.
4841
4845
4842 * Version 0.1.9 released, 0.1.10 opened for further work.
4846 * Version 0.1.9 released, 0.1.10 opened for further work.
4843
4847
4844 * Added sys.path to the list of directories searched in the
4848 * Added sys.path to the list of directories searched in the
4845 execfile= option. It used to be the current directory and the
4849 execfile= option. It used to be the current directory and the
4846 user's IPYTHONDIR only.
4850 user's IPYTHONDIR only.
4847
4851
4848 2001-11-13 Fernando Perez <fperez@colorado.edu>
4852 2001-11-13 Fernando Perez <fperez@colorado.edu>
4849
4853
4850 * Reinstated the raw_input/prefilter separation that Janko had
4854 * Reinstated the raw_input/prefilter separation that Janko had
4851 initially. This gives a more convenient setup for extending the
4855 initially. This gives a more convenient setup for extending the
4852 pre-processor from the outside: raw_input always gets a string,
4856 pre-processor from the outside: raw_input always gets a string,
4853 and prefilter has to process it. We can then redefine prefilter
4857 and prefilter has to process it. We can then redefine prefilter
4854 from the outside and implement extensions for special
4858 from the outside and implement extensions for special
4855 purposes.
4859 purposes.
4856
4860
4857 Today I got one for inputting PhysicalQuantity objects
4861 Today I got one for inputting PhysicalQuantity objects
4858 (from Scientific) without needing any function calls at
4862 (from Scientific) without needing any function calls at
4859 all. Extremely convenient, and it's all done as a user-level
4863 all. Extremely convenient, and it's all done as a user-level
4860 extension (no IPython code was touched). Now instead of:
4864 extension (no IPython code was touched). Now instead of:
4861 a = PhysicalQuantity(4.2,'m/s**2')
4865 a = PhysicalQuantity(4.2,'m/s**2')
4862 one can simply say
4866 one can simply say
4863 a = 4.2 m/s**2
4867 a = 4.2 m/s**2
4864 or even
4868 or even
4865 a = 4.2 m/s^2
4869 a = 4.2 m/s^2
4866
4870
4867 I use this, but it's also a proof of concept: IPython really is
4871 I use this, but it's also a proof of concept: IPython really is
4868 fully user-extensible, even at the level of the parsing of the
4872 fully user-extensible, even at the level of the parsing of the
4869 command line. It's not trivial, but it's perfectly doable.
4873 command line. It's not trivial, but it's perfectly doable.
4870
4874
4871 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4875 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4872 the problem of modules being loaded in the inverse order in which
4876 the problem of modules being loaded in the inverse order in which
4873 they were defined in
4877 they were defined in
4874
4878
4875 * Version 0.1.8 released, 0.1.9 opened for further work.
4879 * Version 0.1.8 released, 0.1.9 opened for further work.
4876
4880
4877 * Added magics pdef, source and file. They respectively show the
4881 * Added magics pdef, source and file. They respectively show the
4878 definition line ('prototype' in C), source code and full python
4882 definition line ('prototype' in C), source code and full python
4879 file for any callable object. The object inspector oinfo uses
4883 file for any callable object. The object inspector oinfo uses
4880 these to show the same information.
4884 these to show the same information.
4881
4885
4882 * Version 0.1.7 released, 0.1.8 opened for further work.
4886 * Version 0.1.7 released, 0.1.8 opened for further work.
4883
4887
4884 * Separated all the magic functions into a class called Magic. The
4888 * Separated all the magic functions into a class called Magic. The
4885 InteractiveShell class was becoming too big for Xemacs to handle
4889 InteractiveShell class was becoming too big for Xemacs to handle
4886 (de-indenting a line would lock it up for 10 seconds while it
4890 (de-indenting a line would lock it up for 10 seconds while it
4887 backtracked on the whole class!)
4891 backtracked on the whole class!)
4888
4892
4889 FIXME: didn't work. It can be done, but right now namespaces are
4893 FIXME: didn't work. It can be done, but right now namespaces are
4890 all messed up. Do it later (reverted it for now, so at least
4894 all messed up. Do it later (reverted it for now, so at least
4891 everything works as before).
4895 everything works as before).
4892
4896
4893 * Got the object introspection system (magic_oinfo) working! I
4897 * Got the object introspection system (magic_oinfo) working! I
4894 think this is pretty much ready for release to Janko, so he can
4898 think this is pretty much ready for release to Janko, so he can
4895 test it for a while and then announce it. Pretty much 100% of what
4899 test it for a while and then announce it. Pretty much 100% of what
4896 I wanted for the 'phase 1' release is ready. Happy, tired.
4900 I wanted for the 'phase 1' release is ready. Happy, tired.
4897
4901
4898 2001-11-12 Fernando Perez <fperez@colorado.edu>
4902 2001-11-12 Fernando Perez <fperez@colorado.edu>
4899
4903
4900 * Version 0.1.6 released, 0.1.7 opened for further work.
4904 * Version 0.1.6 released, 0.1.7 opened for further work.
4901
4905
4902 * Fixed bug in printing: it used to test for truth before
4906 * Fixed bug in printing: it used to test for truth before
4903 printing, so 0 wouldn't print. Now checks for None.
4907 printing, so 0 wouldn't print. Now checks for None.
4904
4908
4905 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4909 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4906 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4910 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4907 reaches by hand into the outputcache. Think of a better way to do
4911 reaches by hand into the outputcache. Think of a better way to do
4908 this later.
4912 this later.
4909
4913
4910 * Various small fixes thanks to Nathan's comments.
4914 * Various small fixes thanks to Nathan's comments.
4911
4915
4912 * Changed magic_pprint to magic_Pprint. This way it doesn't
4916 * Changed magic_pprint to magic_Pprint. This way it doesn't
4913 collide with pprint() and the name is consistent with the command
4917 collide with pprint() and the name is consistent with the command
4914 line option.
4918 line option.
4915
4919
4916 * Changed prompt counter behavior to be fully like
4920 * Changed prompt counter behavior to be fully like
4917 Mathematica's. That is, even input that doesn't return a result
4921 Mathematica's. That is, even input that doesn't return a result
4918 raises the prompt counter. The old behavior was kind of confusing
4922 raises the prompt counter. The old behavior was kind of confusing
4919 (getting the same prompt number several times if the operation
4923 (getting the same prompt number several times if the operation
4920 didn't return a result).
4924 didn't return a result).
4921
4925
4922 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4926 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4923
4927
4924 * Fixed -Classic mode (wasn't working anymore).
4928 * Fixed -Classic mode (wasn't working anymore).
4925
4929
4926 * Added colored prompts using Nathan's new code. Colors are
4930 * Added colored prompts using Nathan's new code. Colors are
4927 currently hardwired, they can be user-configurable. For
4931 currently hardwired, they can be user-configurable. For
4928 developers, they can be chosen in file ipythonlib.py, at the
4932 developers, they can be chosen in file ipythonlib.py, at the
4929 beginning of the CachedOutput class def.
4933 beginning of the CachedOutput class def.
4930
4934
4931 2001-11-11 Fernando Perez <fperez@colorado.edu>
4935 2001-11-11 Fernando Perez <fperez@colorado.edu>
4932
4936
4933 * Version 0.1.5 released, 0.1.6 opened for further work.
4937 * Version 0.1.5 released, 0.1.6 opened for further work.
4934
4938
4935 * Changed magic_env to *return* the environment as a dict (not to
4939 * Changed magic_env to *return* the environment as a dict (not to
4936 print it). This way it prints, but it can also be processed.
4940 print it). This way it prints, but it can also be processed.
4937
4941
4938 * Added Verbose exception reporting to interactive
4942 * Added Verbose exception reporting to interactive
4939 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4943 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4940 traceback. Had to make some changes to the ultraTB file. This is
4944 traceback. Had to make some changes to the ultraTB file. This is
4941 probably the last 'big' thing in my mental todo list. This ties
4945 probably the last 'big' thing in my mental todo list. This ties
4942 in with the next entry:
4946 in with the next entry:
4943
4947
4944 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4948 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4945 has to specify is Plain, Color or Verbose for all exception
4949 has to specify is Plain, Color or Verbose for all exception
4946 handling.
4950 handling.
4947
4951
4948 * Removed ShellServices option. All this can really be done via
4952 * Removed ShellServices option. All this can really be done via
4949 the magic system. It's easier to extend, cleaner and has automatic
4953 the magic system. It's easier to extend, cleaner and has automatic
4950 namespace protection and documentation.
4954 namespace protection and documentation.
4951
4955
4952 2001-11-09 Fernando Perez <fperez@colorado.edu>
4956 2001-11-09 Fernando Perez <fperez@colorado.edu>
4953
4957
4954 * Fixed bug in output cache flushing (missing parameter to
4958 * Fixed bug in output cache flushing (missing parameter to
4955 __init__). Other small bugs fixed (found using pychecker).
4959 __init__). Other small bugs fixed (found using pychecker).
4956
4960
4957 * Version 0.1.4 opened for bugfixing.
4961 * Version 0.1.4 opened for bugfixing.
4958
4962
4959 2001-11-07 Fernando Perez <fperez@colorado.edu>
4963 2001-11-07 Fernando Perez <fperez@colorado.edu>
4960
4964
4961 * Version 0.1.3 released, mainly because of the raw_input bug.
4965 * Version 0.1.3 released, mainly because of the raw_input bug.
4962
4966
4963 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4967 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4964 and when testing for whether things were callable, a call could
4968 and when testing for whether things were callable, a call could
4965 actually be made to certain functions. They would get called again
4969 actually be made to certain functions. They would get called again
4966 once 'really' executed, with a resulting double call. A disaster
4970 once 'really' executed, with a resulting double call. A disaster
4967 in many cases (list.reverse() would never work!).
4971 in many cases (list.reverse() would never work!).
4968
4972
4969 * Removed prefilter() function, moved its code to raw_input (which
4973 * Removed prefilter() function, moved its code to raw_input (which
4970 after all was just a near-empty caller for prefilter). This saves
4974 after all was just a near-empty caller for prefilter). This saves
4971 a function call on every prompt, and simplifies the class a tiny bit.
4975 a function call on every prompt, and simplifies the class a tiny bit.
4972
4976
4973 * Fix _ip to __ip name in magic example file.
4977 * Fix _ip to __ip name in magic example file.
4974
4978
4975 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4979 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4976 work with non-gnu versions of tar.
4980 work with non-gnu versions of tar.
4977
4981
4978 2001-11-06 Fernando Perez <fperez@colorado.edu>
4982 2001-11-06 Fernando Perez <fperez@colorado.edu>
4979
4983
4980 * Version 0.1.2. Just to keep track of the recent changes.
4984 * Version 0.1.2. Just to keep track of the recent changes.
4981
4985
4982 * Fixed nasty bug in output prompt routine. It used to check 'if
4986 * Fixed nasty bug in output prompt routine. It used to check 'if
4983 arg != None...'. Problem is, this fails if arg implements a
4987 arg != None...'. Problem is, this fails if arg implements a
4984 special comparison (__cmp__) which disallows comparing to
4988 special comparison (__cmp__) which disallows comparing to
4985 None. Found it when trying to use the PhysicalQuantity module from
4989 None. Found it when trying to use the PhysicalQuantity module from
4986 ScientificPython.
4990 ScientificPython.
4987
4991
4988 2001-11-05 Fernando Perez <fperez@colorado.edu>
4992 2001-11-05 Fernando Perez <fperez@colorado.edu>
4989
4993
4990 * Also added dirs. Now the pushd/popd/dirs family functions
4994 * Also added dirs. Now the pushd/popd/dirs family functions
4991 basically like the shell, with the added convenience of going home
4995 basically like the shell, with the added convenience of going home
4992 when called with no args.
4996 when called with no args.
4993
4997
4994 * pushd/popd slightly modified to mimic shell behavior more
4998 * pushd/popd slightly modified to mimic shell behavior more
4995 closely.
4999 closely.
4996
5000
4997 * Added env,pushd,popd from ShellServices as magic functions. I
5001 * Added env,pushd,popd from ShellServices as magic functions. I
4998 think the cleanest will be to port all desired functions from
5002 think the cleanest will be to port all desired functions from
4999 ShellServices as magics and remove ShellServices altogether. This
5003 ShellServices as magics and remove ShellServices altogether. This
5000 will provide a single, clean way of adding functionality
5004 will provide a single, clean way of adding functionality
5001 (shell-type or otherwise) to IP.
5005 (shell-type or otherwise) to IP.
5002
5006
5003 2001-11-04 Fernando Perez <fperez@colorado.edu>
5007 2001-11-04 Fernando Perez <fperez@colorado.edu>
5004
5008
5005 * Added .ipython/ directory to sys.path. This way users can keep
5009 * Added .ipython/ directory to sys.path. This way users can keep
5006 customizations there and access them via import.
5010 customizations there and access them via import.
5007
5011
5008 2001-11-03 Fernando Perez <fperez@colorado.edu>
5012 2001-11-03 Fernando Perez <fperez@colorado.edu>
5009
5013
5010 * Opened version 0.1.1 for new changes.
5014 * Opened version 0.1.1 for new changes.
5011
5015
5012 * Changed version number to 0.1.0: first 'public' release, sent to
5016 * Changed version number to 0.1.0: first 'public' release, sent to
5013 Nathan and Janko.
5017 Nathan and Janko.
5014
5018
5015 * Lots of small fixes and tweaks.
5019 * Lots of small fixes and tweaks.
5016
5020
5017 * Minor changes to whos format. Now strings are shown, snipped if
5021 * Minor changes to whos format. Now strings are shown, snipped if
5018 too long.
5022 too long.
5019
5023
5020 * Changed ShellServices to work on __main__ so they show up in @who
5024 * Changed ShellServices to work on __main__ so they show up in @who
5021
5025
5022 * Help also works with ? at the end of a line:
5026 * Help also works with ? at the end of a line:
5023 ?sin and sin?
5027 ?sin and sin?
5024 both produce the same effect. This is nice, as often I use the
5028 both produce the same effect. This is nice, as often I use the
5025 tab-complete to find the name of a method, but I used to then have
5029 tab-complete to find the name of a method, but I used to then have
5026 to go to the beginning of the line to put a ? if I wanted more
5030 to go to the beginning of the line to put a ? if I wanted more
5027 info. Now I can just add the ? and hit return. Convenient.
5031 info. Now I can just add the ? and hit return. Convenient.
5028
5032
5029 2001-11-02 Fernando Perez <fperez@colorado.edu>
5033 2001-11-02 Fernando Perez <fperez@colorado.edu>
5030
5034
5031 * Python version check (>=2.1) added.
5035 * Python version check (>=2.1) added.
5032
5036
5033 * Added LazyPython documentation. At this point the docs are quite
5037 * Added LazyPython documentation. At this point the docs are quite
5034 a mess. A cleanup is in order.
5038 a mess. A cleanup is in order.
5035
5039
5036 * Auto-installer created. For some bizarre reason, the zipfiles
5040 * Auto-installer created. For some bizarre reason, the zipfiles
5037 module isn't working on my system. So I made a tar version
5041 module isn't working on my system. So I made a tar version
5038 (hopefully the command line options in various systems won't kill
5042 (hopefully the command line options in various systems won't kill
5039 me).
5043 me).
5040
5044
5041 * Fixes to Struct in genutils. Now all dictionary-like methods are
5045 * Fixes to Struct in genutils. Now all dictionary-like methods are
5042 protected (reasonably).
5046 protected (reasonably).
5043
5047
5044 * Added pager function to genutils and changed ? to print usage
5048 * Added pager function to genutils and changed ? to print usage
5045 note through it (it was too long).
5049 note through it (it was too long).
5046
5050
5047 * Added the LazyPython functionality. Works great! I changed the
5051 * Added the LazyPython functionality. Works great! I changed the
5048 auto-quote escape to ';', it's on home row and next to '. But
5052 auto-quote escape to ';', it's on home row and next to '. But
5049 both auto-quote and auto-paren (still /) escapes are command-line
5053 both auto-quote and auto-paren (still /) escapes are command-line
5050 parameters.
5054 parameters.
5051
5055
5052
5056
5053 2001-11-01 Fernando Perez <fperez@colorado.edu>
5057 2001-11-01 Fernando Perez <fperez@colorado.edu>
5054
5058
5055 * Version changed to 0.0.7. Fairly large change: configuration now
5059 * Version changed to 0.0.7. Fairly large change: configuration now
5056 is all stored in a directory, by default .ipython. There, all
5060 is all stored in a directory, by default .ipython. There, all
5057 config files have normal looking names (not .names)
5061 config files have normal looking names (not .names)
5058
5062
5059 * Version 0.0.6 Released first to Lucas and Archie as a test
5063 * Version 0.0.6 Released first to Lucas and Archie as a test
5060 run. Since it's the first 'semi-public' release, change version to
5064 run. Since it's the first 'semi-public' release, change version to
5061 > 0.0.6 for any changes now.
5065 > 0.0.6 for any changes now.
5062
5066
5063 * Stuff I had put in the ipplib.py changelog:
5067 * Stuff I had put in the ipplib.py changelog:
5064
5068
5065 Changes to InteractiveShell:
5069 Changes to InteractiveShell:
5066
5070
5067 - Made the usage message a parameter.
5071 - Made the usage message a parameter.
5068
5072
5069 - Require the name of the shell variable to be given. It's a bit
5073 - Require the name of the shell variable to be given. It's a bit
5070 of a hack, but allows the name 'shell' not to be hardwire in the
5074 of a hack, but allows the name 'shell' not to be hardwire in the
5071 magic (@) handler, which is problematic b/c it requires
5075 magic (@) handler, which is problematic b/c it requires
5072 polluting the global namespace with 'shell'. This in turn is
5076 polluting the global namespace with 'shell'. This in turn is
5073 fragile: if a user redefines a variable called shell, things
5077 fragile: if a user redefines a variable called shell, things
5074 break.
5078 break.
5075
5079
5076 - magic @: all functions available through @ need to be defined
5080 - magic @: all functions available through @ need to be defined
5077 as magic_<name>, even though they can be called simply as
5081 as magic_<name>, even though they can be called simply as
5078 @<name>. This allows the special command @magic to gather
5082 @<name>. This allows the special command @magic to gather
5079 information automatically about all existing magic functions,
5083 information automatically about all existing magic functions,
5080 even if they are run-time user extensions, by parsing the shell
5084 even if they are run-time user extensions, by parsing the shell
5081 instance __dict__ looking for special magic_ names.
5085 instance __dict__ looking for special magic_ names.
5082
5086
5083 - mainloop: added *two* local namespace parameters. This allows
5087 - mainloop: added *two* local namespace parameters. This allows
5084 the class to differentiate between parameters which were there
5088 the class to differentiate between parameters which were there
5085 before and after command line initialization was processed. This
5089 before and after command line initialization was processed. This
5086 way, later @who can show things loaded at startup by the
5090 way, later @who can show things loaded at startup by the
5087 user. This trick was necessary to make session saving/reloading
5091 user. This trick was necessary to make session saving/reloading
5088 really work: ideally after saving/exiting/reloading a session,
5092 really work: ideally after saving/exiting/reloading a session,
5089 *everythin* should look the same, including the output of @who. I
5093 *everythin* should look the same, including the output of @who. I
5090 was only able to make this work with this double namespace
5094 was only able to make this work with this double namespace
5091 trick.
5095 trick.
5092
5096
5093 - added a header to the logfile which allows (almost) full
5097 - added a header to the logfile which allows (almost) full
5094 session restoring.
5098 session restoring.
5095
5099
5096 - prepend lines beginning with @ or !, with a and log
5100 - prepend lines beginning with @ or !, with a and log
5097 them. Why? !lines: may be useful to know what you did @lines:
5101 them. Why? !lines: may be useful to know what you did @lines:
5098 they may affect session state. So when restoring a session, at
5102 they may affect session state. So when restoring a session, at
5099 least inform the user of their presence. I couldn't quite get
5103 least inform the user of their presence. I couldn't quite get
5100 them to properly re-execute, but at least the user is warned.
5104 them to properly re-execute, but at least the user is warned.
5101
5105
5102 * Started ChangeLog.
5106 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now